{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Calibration of the 9-Mythen detector at the Cristal beamline at Soleil\n",
    "\n",
    "Mythen detectors are 1D-strip detector sold by Dectris. \n",
    "On the Cristal beamline at Soleil, 9 of them are mounted on the goniometer. \n",
    "\n",
    "This notebook explains how to calibrate precisely their position (including the wavelength used) as function of the goniometer position.\n",
    "\n",
    "All input data are provided in a Nexus file wich contrains both the (approximate) energy, the goniometer positions (500 points have been measured) and the measured signal.\n",
    "\n",
    "As pyFAI is not made for 1D data, the Mythen detector will be considered as a 1x1280 image.\n",
    "\n",
    "We start by importing a whole bunch of modules:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib nbagg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/mntdirect/_scisoft/users/jupyter/jupy35/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "from collections import OrderedDict\n",
    "#import ipympl\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy\n",
    "\n",
    "import h5py\n",
    "\n",
    "from pyFAI import goniometer\n",
    "from pyFAI.detectors import Detector\n",
    "from pyFAI.goniometer import ExtendedTransformation, GoniometerRefinement\n",
    "from pyFAI.control_points import ControlPoints\n",
    "from pyFAI.geometryRefinement import GeometryRefinement\n",
    "from pyFAI.gui import jupyter\n",
    "from pyFAI.units import hc\n",
    "from pyFAI.calibrant import get_calibrant\n",
    "from pyFAI.containers import Integrate1dResult\n",
    "\n",
    "import ipywidgets as widgets\n",
    "\n",
    "from scipy.signal import find_peaks_cwt\n",
    "from scipy.interpolate import interp1d\n",
    "from scipy.optimize import bisect, minimize\n",
    "from scipy.spatial import distance_matrix\n",
    "import time\n",
    "\n",
    "start_time = time.time()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The data file can be downoaded from:\n",
    "http://www.silx.org/pub/pyFAI/gonio/LaB6_17keV_att3_tth2C_24_01_2018_19-43-20_1555.nxs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Positions:  [90.00000001 89.79994445 89.5998889  89.39994445 89.19994445] ...\n"
     ]
    }
   ],
   "source": [
    "#Open the Nexus file and retrieve the actual positions:\n",
    "\n",
    "h5 = h5py.File(\"LaB6_17keV_att3_tth2C_24_01_2018_19-43-20_1555.nxs\", mode=\"r\")\n",
    "position = h5[\"/LaB6_17keV_att3_1555/scan_data/actuator_1_1\"][:]\n",
    "print(\"Positions: \", position[:5], \"...\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_01 (501, 5120)\n",
      "data_02 (501, 1280)\n",
      "data_03 (501, 1280)\n",
      "data_04 (501, 1280)\n",
      "data_05 (501, 1280)\n",
      "data_06 (501, 5120)\n",
      "data_07 (501, 1280)\n",
      "data_08 (501, 1280)\n",
      "data_09 (501, 1280)\n",
      "data_10 (501, 1280)\n",
      "data_11 (501, 1280)\n",
      "data_12 (501, 1280)\n",
      "['data_02', 'data_03', 'data_04', 'data_05', 'data_07', 'data_08', 'data_09', 'data_10', 'data_11', 'data_12']\n"
     ]
    }
   ],
   "source": [
    "#Read all data\n",
    "\n",
    "data = {}\n",
    "ds_names = []\n",
    "for idx in range(1,13):\n",
    "    name = \"data_%02i\"%idx\n",
    "    ds = h5[\"/LaB6_17keV_att3_1555/scan_data/\"+name][:]\n",
    "    print(name, ds.shape)\n",
    "    if ds.shape[1]<2000:\n",
    "        #Keep only the single modules\n",
    "        data[name] = ds\n",
    "        ds_names.append(name)\n",
    "\n",
    "print(ds_names)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Define a Mythen-detector mounted vertically:\n",
    "\n",
    "class MythenV(Detector):\n",
    "    \"Verical Mythen dtrip detector from Dectris\"\n",
    "    aliases = [\"MythenV 1280\"]\n",
    "    force_pixel = True\n",
    "    MAX_SHAPE = (1280, 1)\n",
    "\n",
    "    def __init__(self,pixel1=50e-6, pixel2=8e-3):\n",
    "        super(MythenV, self).__init__(pixel1=pixel1, pixel2=pixel2)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_08 MythenV 1280\n",
      "data_07 MythenV 1280\n",
      "data_03 MythenV 1280\n",
      "data_02 MythenV 1280\n",
      "data_04 MythenV 1280\n",
      "data_05 MythenV 1280\n",
      "data_10 MythenV 1280\n",
      "data_12 MythenV 1280\n",
      "data_09 MythenV 1280\n",
      "data_11 MythenV 1280\n"
     ]
    }
   ],
   "source": [
    "#Define all modules as single detectors of class MythenV. \n",
    "# Each one has a mask defined from dummy-values in the dataset\n",
    "\n",
    "modules = {}\n",
    "for name, ds in data.items():\n",
    "    one_module = MythenV()\n",
    "    mask = ds[0]<0\n",
    "    #discard the first 20 and last 20 pixels as their intensities are less reliable\n",
    "    mask[:20] = True\n",
    "    mask[-20:] = True\n",
    "    one_module.mask = mask.reshape(-1,1)\n",
    "    modules[name] = one_module\n",
    "\n",
    "for k,v in modules.items():\n",
    "    print(k, v.name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.8 ms ± 792 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "[[287.06072343   0.5       ]]\n"
     ]
    }
   ],
   "source": [
    "# Define a peak-picking function based on the dataset-name and the frame_id:\n",
    "\n",
    "def peak_picking(module_name, frame_id,  \n",
    "                 threshold=500):\n",
    "    \"\"\"Peak-picking base on find_peaks_cwt from scipy plus \n",
    "    second-order tailor exapention refinement for sub-pixel resolution.\n",
    "    \n",
    "    The half-pixel offset is accounted here, i.e pixel #0 has its center at 0.5\n",
    "    \n",
    "    \"\"\"\n",
    "    module = modules[module_name]\n",
    "    msk = module.mask.ravel()\n",
    "    \n",
    "    spectrum = data[module_name][frame_id]\n",
    "    guess = find_peaks_cwt(spectrum, [20])\n",
    "    \n",
    "    valid = numpy.logical_and(numpy.logical_not(msk[guess]), \n",
    "                               spectrum[guess]>threshold)\n",
    "    guess = guess[valid]\n",
    "    \n",
    "    #Based on maximum is f'(x) = 0 ~ f'(x0) + (x-x0)*(f''(x0))\n",
    "    df = numpy.gradient(spectrum)\n",
    "    d2f = numpy.gradient(df)\n",
    "    bad = d2f==0\n",
    "    d2f[bad] = 1e-10 #prevent devision by zero. Discared later on\n",
    "    cor = df / d2f\n",
    "    cor[abs(cor)>1] = 0\n",
    "    cor[bad] = 0\n",
    "    ref = guess - cor[guess] + 0.5 #half a pixel offset\n",
    "    x = numpy.zeros_like(ref) + 0.5 #half a pixel offset\n",
    "    return numpy.vstack((ref,x)).T\n",
    "\n",
    "%timeit peak_picking(ds_names[0], 93)\n",
    "print(peak_picking(ds_names[0], 93))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy (keV):  17.027082549190933 \n",
      "Wavelength (A):  7.281587849134994e-11\n",
      "LaB6 Calibrant at wavelength 7.281587849134994e-11\n"
     ]
    }
   ],
   "source": [
    "nrj = h5[\"/LaB6_17keV_att3_1555/CRISTAL/Monochromator/energy\"][0]\n",
    "wl = hc / nrj *1e-10\n",
    "print(\"Energy (keV): \",nrj, \"\\nWavelength (A): \",wl)\n",
    "\n",
    "LaB6 = get_calibrant(\"LaB6\")\n",
    "LaB6.wavelength = wl\n",
    "print(LaB6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#This cell defines the transformation of coordinates for a simple goniometer mounted vertically.\n",
    "\n",
    "trans = ExtendedTransformation(dist_expr=\"dist\", \n",
    "                                   poni1_expr=\"poni1\", \n",
    "                                   poni2_expr=\"poni2\", \n",
    "                                   rot1_expr=\"rot1\", \n",
    "                                   rot2_expr=\"pi*(offset+scale*angle)/180.\", \n",
    "                                   rot3_expr=\"0.0\", \n",
    "                                   wavelength_expr=\"hc/nrj*1e-10\", \n",
    "                                   param_names=[\"dist\", \"poni1\", \"poni2\", \"rot1\", \"offset\", \"scale\", \"nrj\"], \n",
    "                                   pos_names=[\"angle\"], \n",
    "                                   constants={\"hc\": hc})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Approximated offset for the first module:  82.79994445106844\n"
     ]
    }
   ],
   "source": [
    "def get_position(idx):\n",
    "    \"Returns the postion of the goniometer for the given frame_id\"\n",
    "    return position[idx]\n",
    "\n",
    "#Approximate offset for the module #0 at 0°\n",
    "print(\"Approximated offset for the first module: \",get_position(36))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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bRri4uKwYcOGLnfzg4fVrKSkBPb29hg8eDDi4uIknwmtB0PMpWbEoNslZWRkYOLEiejZsyf69euHxYsXm+W3S0dHR72H4PPz88X1tm/fjmeeeQaWlpZiwGhNcztIW1tb2NjYYOrUqWYzQq4r6AKsW0vXrl3DG2+8AWtra/Tu3Rvvvfcebt26JVlHrVYjICAA9vb26N69O8aNG6cVSICmk1w0twC2tbXF7NmzTe4WwGq1Glu2bIGLiwusra0xYMAAeHp6at2dCjDffpafn6/3/avlYfG2rM/Zs2cxbtw4dO/eHfb29ggMDOxSt7N9WM0eNDWr9eivudSMGHSJiIiIyEQx6BIRERGRSWLQJSIiIiKTxKBLRERERCaJQZeIiIiITBKDLhERERGZJAZdIiIiIjJJDLpEREREZJIYdImIiIjIJDHoEhEREZFJYtAlIiIiIpPEoEvAaYDcAAAAxklEQVREREREJolBl4iIiIhMEoMuEREREZkkBl0iIiIiMkkMukRERERkkhh0iYiIiMgkMegSERERkUli0CUiIiIik8SgS0REREQmiUGXiIiIiEwSgy4RERERmSQGXSIiIiIySQy6RERERGSSGHSJiIiIyCQx6BIRERGRSWLQJSIiIiKTxKBLRERERCaJQZeIiIiITBKDLhERERGZJAZdIiIiIjJJDLpEREREZJIYdImIiIjIJDHoEhEREZFJYtAlIiIiIpP0fwD32I3MKM81AAAAAElFTkSuQmCC\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "659aac2733a448d988af523a3c14660d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/html": [
       "<p>Failed to display Jupyter Widget of type <code>interactive</code>.</p>\n",
       "<p>\n",
       "  If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n",
       "  that the widgets JavaScript is still loading. If this message persists, it\n",
       "  likely means that the widgets JavaScript library is either not installed or\n",
       "  not enabled. See the <a href=\"https://ipywidgets.readthedocs.io/en/stable/user_install.html\">Jupyter\n",
       "  Widgets Documentation</a> for setup instructions.\n",
       "</p>\n",
       "<p>\n",
       "  If you're reading this message in another frontend (for example, a static\n",
       "  rendering on GitHub or <a href=\"https://nbviewer.jupyter.org/\">NBViewer</a>),\n",
       "  it may mean that your frontend doesn't currently support widgets.\n",
       "</p>\n"
      ],
      "text/plain": [
       "interactive(children=(IntSlider(value=4, description='module_id', max=9), IntSlider(value=250, description='frame_id', max=500), Output()), _dom_classes=('widget-interact',))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#This interactive plot lets one visualize any spectra acquired by any module\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "line = ax.plot(data[ds_names[0]][250])[0]\n",
    "ligne = plt.Line2D(xdata=[640,640], ydata=[-500, 1000], figure=fig, linestyle=\"--\", color='red', axes=ax)\n",
    "ax.add_line(ligne)\n",
    "ax.set_title(\"spectrum\")\n",
    "fig.show()\n",
    "\n",
    "def update(module_id, frame_id):\n",
    "   spectrum = data[ds_names[module_id]][frame_id]\n",
    "   line.set_data(numpy.arange(spectrum.size), spectrum)\n",
    "   ax.set_title(\"Module %i, Frame %i\"%(module_id, frame_id))\n",
    "   \n",
    "   fig.canvas.draw()\n",
    "\n",
    "    \n",
    "interactive_plot = widgets.interactive(update, \n",
    "                                       module_id=(0, len(data)-1), \n",
    "                                       frame_id=(0, data[ds_names[0]].shape[0]-1))\n",
    "display(interactive_plot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02\n"
     ]
    }
   ],
   "source": [
    "#Work with the first module corresponding to:\n",
    "name = ds_names[0]\n",
    "print(name)\n",
    "ds = data[name]\n",
    "module = modules[name]\n",
    "\n",
    "#Use the previous widget to select:\n",
    "## the index where the beam-center is in the middle of the module\n",
    "zero_pos = 36\n",
    "\n",
    "## The frame index where the first LaB6 peak enters the right-hand side of the spectrum\n",
    "peak_zero_start = 74\n",
    "\n",
    "## The frame index where this first LaB6 leaves the spectrum or the second LaB6 peak appears:\n",
    "peak_zero_end = 94\n",
    "\n",
    "# The frames between peak_zero_start and peak_zero_end will be used to calibrate roughly the goniometer \n",
    "# and used later for finer peak extraction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 0 geometries labeled: .\n"
     ]
    }
   ],
   "source": [
    "param0 = {\"dist\": 0.72, \n",
    "          \"poni1\": 640*50e-6, \n",
    "          \"poni2\": 4e-3, \n",
    "          \"rot1\":0, \n",
    "          \"offset\": -get_position(zero_pos), \n",
    "          \"scale\":1, \n",
    "          \"nrj\": nrj}\n",
    "\n",
    "#Lock enegy for now and a couple of other parameters\n",
    "bounds0 = {\"nrj\": (nrj, nrj),\n",
    "           \"dist\": (0.71, 0.73),\n",
    "           \"poni2\": (4e-3, 4e-3),\n",
    "           \"rot1\": (0,0),\n",
    "           \"scale\":(1,1), \n",
    "          }\n",
    "\n",
    "gonioref0 = GoniometerRefinement(param0, \n",
    "                                 get_position, \n",
    "                                 trans, \n",
    "                                 detector=module, \n",
    "                                 wavelength=wl, \n",
    "                                 bounds=bounds0\n",
    "                                 )\n",
    "goniometers = {name:  gonioref0} \n",
    "print(gonioref0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 20 geometries labeled: data_02_0074, data_02_0075, data_02_0076, data_02_0077, data_02_0078, data_02_0079, data_02_0080, data_02_0081, data_02_0082, data_02_0083, data_02_0084, data_02_0085, data_02_0086, data_02_0087, data_02_0088, data_02_0089, data_02_0090, data_02_0091, data_02_0092, data_02_0093.\n",
      "Residual error before fit:\n",
      "6.737384336276989e-07\n"
     ]
    }
   ],
   "source": [
    "# Extract the frames where only the peak zero from LaB6 is present.\n",
    "\n",
    "for i in range(peak_zero_start, peak_zero_end):\n",
    "    cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "    peak = peak_picking(name, i)\n",
    "    if len(peak)!=1: \n",
    "        continue\n",
    "    cp.append([peak[0]], ring=0)\n",
    "    img = ds[i].reshape((-1,1)) #Images are vertical ... transpose the spectrum\n",
    "    sg = gonioref0.new_geometry(\"%s_%04i\"%(name,i), \n",
    "                                image=img, \n",
    "                                metadata=i, \n",
    "                                control_points=cp, \n",
    "                                calibrant=LaB6)\n",
    "    sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "\n",
    "print(gonioref0)\n",
    "print(\"Residual error before fit:\")\n",
    "print(gonioref0.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 6.737384336276989e-07\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -8.27999445e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.490988798391531e-11\n",
      "     jac: array([ 1.58414573e-07,  2.91897065e-08,  5.74391333e-11, -6.39962716e-10,\n",
      "        3.42479452e-11,  1.40698490e-07, -1.59997085e-11])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19994724e-01,  3.14085784e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -8.27999519e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.490988798391531e-11\n",
      "GonioParam(dist=0.7199947243683663, poni1=0.03140857835160603, poni2=0.004, rot1=0.0, offset=-82.7999518865857, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03140857835160603\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.19994724e-01,  3.14085784e-02,  4.00000000e-03,  0.00000000e+00,\n",
       "       -8.27999519e+01,  1.00000000e+00,  1.70270825e+01])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#First refinement:\n",
    "gonioref0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Number of peaks found and used for refinement\n",
      "1203\n",
      "Residual error before fitting:  3.118672809442448e-06\n"
     ]
    }
   ],
   "source": [
    "#Here we extract all spectra for peaks,\n",
    "# If there are as many peaks as expected from the theoritical LaB6. perform the assignment.\n",
    "\n",
    "#Peaks from LaB6:\n",
    "tths = LaB6.get_2th()\n",
    "\n",
    "for i in range(peak_zero_end, ds.shape[0]):\n",
    "    peak = peak_picking(name, i)\n",
    "    ai=gonioref0.get_ai(get_position(i))\n",
    "    tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "    tth_low = tth[20]\n",
    "    tth_hi = tth[-20]\n",
    "    ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "    valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "    cnt = valid_peaks.sum()\n",
    "    if (len(peak) ==  cnt):    \n",
    "        cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "        #revert the order of assignment if needed !!\n",
    "        if tth_hi < tth_low:\n",
    "            peak = peak[-1::-1]\n",
    "        for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "            #print(p,r)\n",
    "            cp.append([p], ring=r)\n",
    "        img = ds[i].reshape((-1,1))\n",
    "        sg = gonioref0.new_geometry(\"%s_%04i\"%(name,i), \n",
    "                                    image=img, \n",
    "                                    metadata=i, \n",
    "                                    control_points=cp, \n",
    "                                    calibrant=LaB6)\n",
    "        sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "        #print(sg.label, len(sg.geometry_refinement.data))\n",
    "\n",
    "#print(gonioref0)\n",
    "print(\" Number of peaks found and used for refinement\")\n",
    "print(sum([len(sg.geometry_refinement.data) for sg in gonioref0.single_geometries.values()]))\n",
    "print(\"Residual error before fitting: \", gonioref0.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 3.118672809442448e-06\n",
      "[ 7.19994724e-01  3.14085784e-02  4.00000000e-03  0.00000000e+00\n",
      " -8.27999519e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.734250432678472e-06\n",
      "     jac: array([-5.58224542e-08, -3.65304231e-10,  3.63058044e-06, -2.62495314e-06,\n",
      "        6.31729336e-10,  1.53969062e-04,  9.87797637e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 65\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.23095347e-01,  3.18453768e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -8.27999466e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.734250432678472e-06\n",
      "GonioParam(dist=0.7230953467494027, poni1=0.03184537681912273, poni2=0.004, rot1=0.0, offset=-82.79994661694376, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7199947243683663 --> 0.7230953467494027\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.23095347e-01,  3.18453768e-02,  4.00000000e-03,  0.00000000e+00,\n",
       "       -8.27999466e+01,  1.00000000e+00,  1.70270825e+01])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 2.734250432678472e-06\n",
      "[ 7.23095347e-01  3.18453768e-02  4.00000000e-03  0.00000000e+00\n",
      " -8.27999466e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.6891723022540698e-06\n",
      "     jac: array([-5.14464347e-07, -1.24120874e-07,  5.95670514e-07, -4.28660144e-07,\n",
      "       -9.28110921e-10, -8.53860058e-08, -1.60467593e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 36\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.23096248e-01,  3.20537111e-02,  3.98485468e-03,  1.09479202e-05,\n",
      "       -8.27999440e+01,  9.99415047e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.6891723022540698e-06\n",
      "GonioParam(dist=0.7230962484347616, poni1=0.03205371109950758, poni2=0.003984854679408886, rot1=1.0947920188414968e-05, offset=-82.7999439896301, scale=0.9994150470263444, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9994150470263444\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.23096248e-01,  3.20537111e-02,  3.98485468e-03,  1.09479202e-05,\n",
       "       -8.27999440e+01,  9.99415047e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref0.set_bounds(\"poni1\", -1, 1)\n",
    "gonioref0.set_bounds(\"poni2\", -1, 1)\n",
    "gonioref0.set_bounds(\"rot1\", -1, 1)\n",
    "gonioref0.set_bounds(\"scale\", 0.9, 1.1)\n",
    "gonioref0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'data_02': (array([9.50000113e-04, 2.85000011e-03, 4.75000011e-03, ...,\n",
      "       9.49952500e+01, 9.49971500e+01, 9.49990500e+01]), array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,\n",
      "       1.27163417e+08, 1.30591594e+08, 1.33665235e+08]))}\n"
     ]
    }
   ],
   "source": [
    "# Perform the azimuthal intgration of all data for the first module:\n",
    "\n",
    "mg = gonioref0.get_mg(position)\n",
    "mg.radial_range = (0, 95)\n",
    "images = [i.reshape(-1, 1) for i in ds]\n",
    "res_mg = mg.integrate1d(images, 50000)\n",
    "results={name: res_mg}\n",
    "print(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOy9eZRV1ZX4f6tQkUlKjaD0V0GjtooaFIdoUpQiapvu1Wkwps0vZBYE0RhHoijllIqKxjGIjYCIOOGAcQIxIopRLBRHBhGZiohMVYDMw/79UeHyiqr73hn2fe/d6+ez1l0r7nPP3vucd5P+WP3euYEAAAAAAKSQoNANAAAAAADEAaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAIAMgiCQX/3qV4Vuo2hhfwAgSSC6AFB0VFVVybnnnisdO3aUIAjk3//93yPvraiokCAIwmvPPfeU/fffX0477TQZPHiwzJ8/36q2r8hNnjxZKisrpba21jlHIamtrZXKykqZPHlyk+OILgAkCUQXAIqOIAhk3333lbPOOktat26dU3R33313GTNmjIwZM0ZGjhwpt912m/Ts2VP22GMPad68udxzzz3GtTds2CCbN2927r2yslKCILAW7GJh/vz5EgSBVFZWNjnuuz8AAPkE0QWAomPevHnhf+7YsWNO0W3evHlkniOPPFKCIJCnnnpKvc+mKCbRXb16tfWcXKILAJAkEF0AKGp8RFdEZObMmVJaWiqHHnqoUb2m/l/zO2L/+Mc/pFu3btKyZUvZZ5995He/+52sXbu2QS+ZX6PYcWVKY11dnVx99dXy3e9+V/bYYw/5zne+I+eff34Dud/BokWL5Kc//am0bdtWWrduLT169JAZM2ZIRUWFdOzYscG9HTt2lIqKCpkxY4b8x3/8h7Rt21bKyspERGTNmjUyaNAgOemkk2TfffeVPfbYQ7773e/KwIEDZd26dWGOUaNGNdl/Zq2ory6MGjVKunbtKi1atJDWrVvLaaedJhMnTmx0344+Z82aJT/60Y+kdevWstdee8m5554rX331VZZPBgDAHkQXAIoaX9EVEenWrZsEQSCzZ8/OWS9KdL/3ve/JPvvsI1dccYUMGzZMzj//fAmCQPr06RPe9+qrr0rPnj0lCAK56667wq9TfPTRRyJSL7lHHXWUtGrVSi655BIZNmyY3HDDDdK+fXv5zne+IwsWLAhzrVq1Sg466CBp1qyZ9OvXT4YOHSoXXHCB7L333nLooYc2KboHH3ywlJWVye9+9zsZNmyYVFVViYjIrFmzpH379nLRRRfJ3XffLffff7+cd955UlJSImeddVaYY968eXLXXXdJEATSs2fPsP/nnnsu6/5cc801EgSBdO3aVe644w655ZZb5OCDD5aSkhJ59NFHG/V56KGHSvv27aVfv37ywAMPSL9+/aSkpETOPPPMnJ8PAIANiC4AFDUaonvJJZdIEATyt7/9LWe9KNEtKSmRd999t0H8Rz/6key2224N/qqb7asLv//976V58+by/vvvN4gvWLBA2rRp06DuwIEDJQgCGTFiRIN777nnnkZ/ZRWR8Id7w4cPb1R306ZNTX6v9rrrrpMgCGTatGlhLNdXF3bdnzlz5khJSYmcfPLJsnHjxjC+YsUK2X///WXvvfeWb775plGfTz75ZIO8F110kfG/jAAAmILo5oG5c+dK37595ZhjjpHS0lKpqKiINc8TTzwhPXv2lP3331+CIJBRo0Y59w5QaDREd9CgQRIEQaO/LjZFlOieeuqpje694447JAgC+eSTT8JYlOhu375d9t13X+nevbssX7680XXmmWfKAQccEN5/xBFHyH777Sdbt25tkGfTpk2y1157NSm6++yzT6P7d2XLli2yatUqWb58ubzxxhsSBIHce++94bit6N5+++0SBIE888wzje696aabJAgCeeGFFxr02aFDh0b3Pv30043uBQDwBdHNA+PHj5cDDzxQzjvvPDn88MOdRdc0z09+8hM5/vjj5be//S2iC4mnWP6i27t370b37vhO6xtvvBHGokT366+/bvL7r5lXaWlpeH/z5s3llFNOabLHLl26NCm6J554YuS6hg0bJscee6w0a9asUd0bb7wxvM9WdPv16xf5l9jnnntOgiBocOpFx44d5Yc//GGjeydPnixBEMjDDz8cuQYAAFsQ3Tywbdu28D//+Mc/dhZd0zw77qutrUV0IfFofkd3zpw5Oetl+zHaruwQ3cwzZ6NEd+nSpRIEgZx++ukyadKkyGsHLqIb9b8JO753e9ZZZ8nw4cPlpZdekkmTJsnDDz/cSGrzIbpN9blDdPnfKwDQBNHNM1GCum3bNrn11lvl0EMPDX8RPWzYMOs8mSC6kAa0Tl04/PDDjer5iu4NN9zQpOhu27ZNysrK5Pjjjzfqw+WrC1H/m3DcccdJp06dGvzLsojIK6+80khqFyxYoPbVhZtvvlmCIJAXX3wxZ5+ILgDEAaKbZ6IE9aKLLpKWLVtKVVWVTJo0Sa677jpp1qyZPP7441Z5MkF0IQ1onaP79NNPG9XzFd0d39vd9QdnIiIDBgyQIAjkiSeeaLL2119/Hf7nq6++2vrHaFH/m9C1a1c5+OCDG0jzli1bwuPQMqV2xYoVEgSBXHLJJU3m2nUvPv/8cykpKZFTTjlFNm3aFMZXrlwpBxxwQJM/RkN0ASBfILp5pilBnTt3rpSUlDT6P2j9+/eXww47zDjPriC6kFQeeeQRufnmm+Xmm2+WsrIy+c53vhP+83333dfg3qbejHb77bdLr169wjej7TonG76iO3XqVAmCQHr06CGjRo2Sxx9/PPyxWl1dnXTp0kVKSkrkvPPOk7vuukuGDh0qV199tRx99NENaqxYsUIOPPBAadasmfTv31+GDh0qffr0kX322UcOPfRQ6dSpU4Nesonun//8ZwmCQM4880x54IEH5LbbbpPvfe97csIJJzT519tDDz1U9ttvP7n77rvl8ccfb/Dd5mzHi51wwgly5513yp/+9Cc55JBDIo8XQ3QBIF8gunmmKUEdNmyYlJaWSm1trWzZsiW8dvwKua6uzijPriC6kFSiXrzQ1F8yd723efPm0r59e6moqJDBgwdbv6HMV3RFRG677TY5+OCDZbfddmskkuvWrZObbrpJjj76aNlzzz2ldevWcsQRR8gFF1zQ6PiyBQsWyHnnnSd77bWXtGrVSnr06CEffvihHH/88XLkkUc2uDeb6G7dulWqqqrCl1QcdNBBctVVV8nMmTObFN1p06bJqaeeKi1btjR+YcTIkSPl+OOPlz333FNatWolFRUVMmHChEb3IboAkE8Q3TzTlKDecsstWX+JnXl0UbY8u4LoAqSPLVu2SFlZmZx99tmFbgUAoOhBdPNMU4I6dOhQKS0tlXfeeUeqq6sbXevXrzfKsyuILkCyyXw97w52fEf3zjvvLEBHAADJAtHNM00J6o43C7388steeXYF0QVINhUVFdK7d2+566675N5775X//d//lSAI5PDDD2/wNjYAAGgaRDcPrFu3TsaNGyfjxo2TE088UY466qjwn5ctWyYiIhdffLHsvffe4akLL730ktxxxx3ys5/9zCqPiMhnn30m48aNk9GjR0sQBDJgwAAZN26clUgDQOG544475Hvf+560bdtWdt99dznooIPkoosuavDfdwAAiAbRzQM7DmBv6trxI5bt27fLvffeK507d5Y99thD9t13X/nhD3/Y4CxdkzwiOw+sz/UjHgAAAIA0g+gCAAAAQCpBdAEAAAAglSC6AAAAAJBKEN2Y2LRpk1RXV8vChQulpqaGi4uLi4uLiyuWa+HChVJdXd3gNdxQD6IbE9XV1VlfAsHFxcXFxcXFpXlVV1cXWn+KDkQ3JhYuXBg+dIX+N71EXFOnSk0Q1F9TpxZPXtf5LvNs5mjvl2m+XPeZ5PHNkW08js/LZUxzju2aNPJrPIu+z5RpX9ox0x7jjrn2plnPdc8067msV2uf8rkOz/rVQb3oLly4sND6U3QgujFRU1MjQRBITU1NoVtJBl98IRIE9dcXXxRPXtf5LvNs5mjvl2m+XPeZ5PHNkW08js/LZUxzju2aNPJrPIu+z5RpX9ox0x7jjrn2plnPdc8067msV2uf8rkOz/o1Qb3o4hyNCQrdQFpBdC3RFjetvHGIk8Yc7f3ylRKbPL45XKU0G645XSRPQ0Rd1uIrlFr1fObnI2baY9yxOAVOc57rfmnljnOf8rkOz/qIbjRBoRtIK4iuJdrippU3DnHSmKO9X75SYpPHN4erlGbDNaeL5GmIqMtafIVSq57P/HzETHuMOxanwGnOc90vrdxx7lM+1+FZH9GNJih0A2kF0bVk5UqRysr6a+XK4snrOt9lns0c7f0yzZfrPpM8vjmyjcfxebmMac6xXZNGfo1n0feZMu1LO2baY9wx194067numWY9l/Vq7VM+1+FZv+ayy3COCBDdmEB0AQAAIB/gHNEgujHBQwcAAAD5AOeIBtGNCR46AAAAyAc4RzSIbkzw0FmyYIHIIYfUXwsWFE9e1/ku82zmaO+Xab5c95nk8c2RbTyOz8tlTHOO7Zo08ms8i77PlGlf2jHTHuOOufamWc91zzTruaxXa5/yuQ7P+jUHHYRzRBAUuoG0guhaon2KgFbeOH7FrzFHe798fyFvk8c3h+sJCdlwzely4oDGqQgua/E93UCrns/8fMRMe4w7FudpAprzXPdLK3ec+5TPdXjW59SFaIJCN5BWEF1LtMVNK28c4qQxR3u/fKXEJo9vDlcpzYZrThfJ0xBRl7X4CqVWPZ/5+YiZ9hh3LE6B05znul9auePcp3yuw7M+ohtNUOgG0gqia4m2uGnljUOcNOZo75evlNjk8c3hKqXZcM3pInkaIuqyFl+h1KrnMz8fMdMe447FKXCa81z3Syt3nPuUz3V41kd0owkK3UBaQXQt0RY3rbxxiJPGHO398pUSmzy+OVylNBuuOV0kT0NEXdbiK5Ra9Xzm5yNm2mPcsTgFTnOe635p5Y5zn/K5Ds/6iG40QaEbSCuIriXa4qaVNw5x0pijvV++UmKTxzeHq5RmwzWni+RpiKjLWnyFUquez/x8xEx7jDsWp8BpznPdL63cce5TPtfhWR/RjSYodANpBdG1RFvctPLGIU4ac7T3y1dKbPL45nCV0my45nSRPA0RdVmLr1Bq1fOZn4+YaY9xx+IUOM15rvullTvOfcrnOjzrI7rRBIVuIK0gupZoi5tW3jjESWOO9n75SolNHt8crlKaDdecLpKnIaIua/EVSq16PvPzETPtMe5YnAKnOc91v7Ryx7lP+VyHZ31EN5qg0A2kFUTXkuXLRa64ov5avlwtbc3nC6X63N/Imosvdcvr2pfLPJs52vtlmi/XfSZ5fHNkG4/j83IZ05xjuyaN/BrPou8zZdqXdsy0x7hjrr1p1nPdM816LuvV2qd8rsOzfk3fvjhHBIhuTCC6xcEJt0ySjgNflPLbXi90KwAAALGAc0SD6MYED11x0HHgi+EFAACQRnCOaBDdmOChKw4QXQAASDs4RzSIbkzw0FmyaJHIscfWX4sWqaX9fv9RMnO/TjJzv05ueV37cplnM0d7v0zz5brPJI9vjmzjcXxeLmOac2zXpJFf41n0faZM+9KOmfYYd8y1N816rnumWc9lvVr7lM91eNavOfJInCMCRDcmEF1LtE8R+BflfYf75eXUBbv7OHVBfw6nLnDqAqcu2K1Xa584dSEVBIVuIC7mzp0rffv2lWOOOUZKS0uloqLCaN6mTZvkyiuvlPbt20vLli2lR48eMnv2bOv6iK4liC6iqzGO6CK6vjHTHhFdRBfRTQRBoRuIi/Hjx8uBBx4o5513nhx++OHGonvhhRdK27ZtZcSIETJhwgQpLy+Xf/u3f5O6ujqr+oiuJYguoqsxjugiur4x0x4RXUQX0U0EQaEbiItt27aF//nHP/6xkeguXrxYmjVrJv/3f/8XxlauXCmtWrWS2267zao+omsJoovoaowjuoiub8y0R0QX0UV0E0FQ6AbyganojhgxQkpKSqS2trZBvGfPnsZ/Ed4BomsJoovoaowjuoiub8y0R0QX0UV0E0FQ6AbyganoXnXVVfJv//ZvjeLXXnuttG/f3qomomsJoovoaowjuoiub8y0R0QX0UV0E0FQ6AbyganoXnDBBdK5c+dG8SFDhsjuu++ede7q1aulpqYmvKqrq3nobEB0EV2NcUQX0fWNmfaI6CK6iG4iCArdQD7Ih+hWVlZK8K8HLfPioTNk2TKRfv3qr2XL1NIed8lYGdPlHBnT5Ry3vK59ucyzmaO9X6b5ct1nksc3R7bxOD4vlzHNObZr0siv8Sz6PlOmfWnHTHuMO+bam2Y91z3TrOeyXq19yuc6POvX9O6Nc0SA6Gbg89UF/qJbnPBmNAAASDt8XTIaRDeDHT9G2/UosV69evFjtISC6AIAQNrBOaJBdDPYcbzYQw89FMZWrVolrVu35nixhILoAgBA2sE5okmt6K5bt07GjRsn48aNkxNPPFGOOuqo8J+X/eu7Lt27d5fu3bs3mHfhhRdKWVmZjBw5UiZOnCgVFRW8MCIfLF4scsop9dfixWppT+7/sEzvcIRM73CEW17Xvlzm2czR3i/TfLnuM8njmyPbeByfl8uY5hzbNWnk13gWfZ8p0760Y6Y9xh1z7U2znuueadZzWa/WPuVzHZ71a44/HueIILWiO3/+/CZ/HBYEgUyePFlERCoqKhr9pXfjxo1yxRVXSLt27aRFixbSo0cPmTVrlnV9RNcSTl3g1AWNcU5d4NQF35hpj5y6wKkLnLqQCIJCN5BWEF1LEF1EV2Mc0UV0fWOmPSK6iC6imwiCQjeQVhBdSxBdRFdjHNFFdH1jpj0iuoguopsIgkI3kFYQXUsQXURXYxzRRXR9Y6Y9IrqILqKbCIJCN5BWEF1LEF1EV2Mc0UV0fWOmPSK6iC6imwiCQjeQVhBdSxBdRFdjHNFFdH1jpj0iuoguopsIgkI3kFYQXUsQXURXYxzRRXR9Y6Y9IrqILqKbCIJCN5BWEF1Lli4V6d27/lq6VC1t14vHyDOdT5dnOp/ulte1L5d5NnO098s0X677TPL45sg2Hsfn5TKmOcd2TRr5NZ5F32fKtC/tmGmPccdce9Os57pnmvVc1qu1T/lch2f9ml69cI4IEN2YQHSLA96MBgAAaQfniAbRjQkeuuIA0QUAgLSDc0SD6MYED11xgOgCAEDawTmiQXRjgofOkiVLRM48s/5askQt7YkXjZYpnY6TKZ2Oc8vr2pfLPJs52vtlmi/XfSZ5fHNkG4/j83IZ05xjuyaN/BrPou8zZdqXdsy0x7hjrr1p1nPdM816LuvV2qd8rsOzfk15Oc4RAaIbE4iuJZy6wKkLGuOcusCpC74x0x45dYFTFzh1IREEhW4grSC6liC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIK0gupYguoiuxjiii+j6xkx7RHQRXUQ3EQSFbiCtILqWILqIrsY4oovo+sZMe0R0EV1ENxEEhW4grSC6liC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIK0gupYguoiuxjiii+j6xkx7RHQRXUQ3EQSFbiCtILqWILqIrsY4oovo+sZMe0R0EV1ENxEEhW4grSC6lnz1lcj//E/99dVXamlPGDBGJhz2fZlw2Pfd8rr25TLPZo72fpnmy3WfSR7fHNnG4/i8XMY059iuSSO/xrPo+0yZ9qUdM+0x7phrb5r1XPdMs57LerX2KZ/r8Kxfc/bZOEcEiG5MILrFAW9GAwCAtINzRIPoxgQPXXGA6AIAQNrBOaJBdGOCh644QHQBACDt4BzRILoxwUNnCd/R5Tu6GuN8R5fv6PrGTHvkO7p8R5fv6CYCRDcmEF1LOHWBUxc0xjl1gVMXfGOmPXLqAqcucOpCIggK3UBaQXQtQXQRXY1xRBfR9Y2Z9ojoIrqIbiIICt1AWkF0LUF0EV2NcUQX0fWNmfaI6CK6iG4iCArdQFpBdC1BdBFdjXFEF9H1jZn2iOgiuohuIggK3UBaQXQtQXQRXY1xRBfR9Y2Z9ojoIrqIbiIICt1AWkF0LUF0EV2NcUQX0fWNmfaI6CK6iG4iCArdQFpBdC1BdBFdjXFEF9H1jZn2iOgiuohuIggK3UBaQXQtWbJE5Mwz668lS9TSnnjRaJnS6TiZ0uk4t7yufbnMs5mjvV+m+XLdZ5LHN0e28Tg+L5cxzTm2a9LIr/Es+j5Tpn1px0x7jDvm2ptmPdc906znsl6tfcrnOjzr15SX4xwRILoxgegWB7wZDQAA0g7OEQ2iGxM8dMUBogsAAGkH54gG0Y0JHrriANEFAIC0g3NEg+jGBA+dJUuXivTuXX8tXaqWtuvFY+SZzqfLM51Pd8vr2pfLPJs52vtlmi/XfSZ5fHNkG4/j83IZ05xjuyaN/BrPou8zZdqXdsy0x7hjrr1p1nPdM816LuvV2qd8rsOzfk2vXjhHBIhuTCC6lnDqAqcuaIxz6gKnLvjGTHvk1AVOXeDUhUQQFLqBtILoWoLoIroa44guousbM+0R0UV0Ed1EEBS6gbSC6FqC6CK6GuOILqLrGzPtEdFFdBHdRBAUuoG0guhagugiuhrjiC6i6xsz7RHRRXQR3UQQFLqBtILoWoLoIroa44guousbM+0R0UV0Ed1EEBS6gbSC6FqC6CK6GuOILqLrGzPtEdFFdBHdRBAUuoG0guhagugiuhrjiC6i6xsz7RHRRXQR3UQQFLqBtILoWrJ4scgpp9RfixerpT25/8MyvcMRMr3DEW55XftymWczR3u/TPPlus8kj2+ObONxfF4uY5pzbNekkV/jWfR9pkz70o6Z9hh3zLU3zXque6ZZz2W9WvuUz3V41q85/nicIwJENyYQ3eKAN6MBAEDawTmiQXRjgoeuOEB0AQAg7eAc0SC6McFDVxwgugAAkHZwjmgQ3ZjgobNk2TKRfv3qr2XL1NIed8lYGdPlHBnT5Ry3vK59ucyzmaO9X6b5ct1nksc3R7bxOD4vlzHNObZr0siv8Sz6PlOmfWnHTHuMO+bam2Y91z3TrOeyXq19yuc6POvX9O6Nc0SA6MYEomsJpy5w6oLGOKcucOqCb8y0R05d4NQFTl1IBEGhG0griK4liC6iqzGO6CK6vjHTHhFdRBfRTQRBoRtIK4iuJYguoqsxjugiur4x0x4RXUQX0U0EQaEbSCuIriWILqKrMY7oIrq+MdMeEV1EF9FNBEGhG0griK4liC6iqzGO6CK6vjHTHhFdRBfRTQRBoRtIK4iuJYguoqsxjugiur4x0x4RXUQX0U0EQaEbSCuIriWILqKrMY7oIrq+MdMeEV1EF9FNBEGhG0griK4lixaJHHts/bVokVra7/cfJTP36yQz9+vklte1L5d5NnO098s0X677TPL45sg2Hsfn5TKmOcd2TRr5NZ5F32fKtC/tmGmPccdce9Os57pnmvVc1qu1T/lch2f9miOPxDkiQHRjAtEtDngzGgAApB2cIxpENyZ46IoDRBcAANIOzhENohsTPHTFAaILAABpB+eIBtGNCR46S5YvF7niivpr+XK1tF0uGSsPnthTHjyxp1te175c5tnM0d4v03y57jPJ45sj23gcn5fLmOYc2zVp5Nd4Fn2fKdO+tGOmPcYdc+1Ns57rnmnWc1mv1j7lcx2e9Wv69sU5Iki16M6aNUt69OghLVu2lPbt28tVV10lmzZtyjlvwYIFcv7558v+++8vrVu3lhNOOEGeffZZq9qIriWcusCpCxrjnLrAqQu+MdMeOXWBUxc4dSERBIVuIC5WrVolBxxwgHTr1k0mTJggI0aMkLZt28qAAQOyztu4caMcccQRcsQRR8iTTz4pr776qvziF7+QkpISee2114zrI7qWILqIrsY4oovo+sZMe0R0EV1ENxEEhW4gLqqqqqR169aycuXKMPbggw9Ks2bNZMmSJZHz3nnnHQmCQCZPnhzGtm3bJp06dZK+ffsa10d0LUF0EV2NcUQX0fWNmfaI6CK6iG4iCArdQFyUl5dLz549G8Rqa2ulpKRERo0aFTnvzTfflCAI5IMPPmgQP+aYY6RPnz7G9RFdSxBdRFdjHNFFdH1jpj0iuoguopsIgkI3EBf77befDBo0qFG8Q4cOMnDgwMh5W7Zskc6dO8s555wjX375pdTW1sq9994rzZs3l2nTphnXR3QtQXQRXY1xRBfR9Y2Z9ojoIrqIbiIICt1AXOy2224yZMiQRvHOnTvn/Mvs119/LSeeeKIE/3pwWrRoIc8//3zWOatXr5aamprwqq6u5qGzAdFFdDXGEV1E1zdm2iOii+giuokgKHQDceEquuvXr5fy8nI56aST5LnnnpO///3v0q9fP2nZsqW89dZbkfMqKytlhxhnXjx0hiC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIC5cv7pw3333yZ577ikrVqxoEO/Ro4eUl5dHzuMvup4sWCByyCH114IFamlP7TdSFpTtLwvK9nfL69qXyzybOdr7ZZov130meXxzZBuP4/NyGdOcY7smjfwaz6LvM2Xal3bMtMe4Y669adZz3TPNei7r1dqnfK7Ds37NQQfhHBEEhW4gLsrLy6VXr14NYnV1dTl/jNa/f3857LDDGsWvuuoq6dChg3F9vqNbHPBmNJ80OncAACAASURBVAAASDs4RzSpFd2qqipp06aN1NbWhrHhw4fnPF7s1ltvlebNm8vyXd5m0r17dzn11FON6/PQFQeILgAApB2cI5rUiu6OF0ZUVFTIxIkTZeTIkVJWVtbohRHdu3eX7t27h/+8aNEi2WuvveSEE06Qp59+WiZOnCgXXHCBBEEgjz/+uHF9HrriANEFAIC0g3NEk1rRFRGZOXOmnHHGGdKiRQtp166dXHnllY1eAVxRUSEVFRUNYu+//76cc8450q5dO2nTpo107dpVxo4da1Wbh86SlStFKivrr4yXfPhy7O8fl7t+8DO56wc/c8vr2pfLPJs52vtlmi/XfSZ5fHNkG4/j83IZ05xjuyaN/BrPou8zZdqXdsy0x7hjrr1p1nPdM816LuvV2qd8rsOzfs1ll+EcEaRadAsJomsJpy5w6oLGOKcucOqCb8y0R05d4NQFTl1IBEGhG0griK4liC6iqzGO6CK6vjHTHhFdRBfRTQRBoRtIK4iuJYguoqsxjugiur4x0x4RXUQX0U0EQaEbSCuIriWILqKrMY7oIrq+MdMeEV1EF9FNBEGhG0griK4liC6iqzGO6CK6vjHTHhFdRBfRTQRBoRtIK4iuJYguoqsxjugiur4x0x4RXUQX0U0EQaEbSCuIriWILqKrMY7oIrq+MdMeEV1EF9FNBEGhG0griK4l8+eLtGtXf82fr5b2B/1GyLKWZbKsZZlbXte+XObZzNHeL9N8ue4zyeObI9t4HJ+Xy5jmHNs1aeTXeBZ9nynTvrRjpj3GHXPtTbOe655p1nNZr9Y+5XMdnvVr9t0X54gA0Y0JRLc44M1oAACQdnCOaBDdmOChKw4QXQAASDs4RzSIbkzw0BUHiC4AAKQdnCMaRDcmeOgsqa0VGTKk/qqtVUt7zKVPyC2n/VZuOe23bnld+3KZZzNHe79M8+W6zySPb45s43F8Xi5jmnNs16SRX+NZ9H2mTPvSjpn2GHfMtTfNeq57plnPZb1a+5TPdXjWr7nuOpwjAkQ3JhBdSzh1gVMXNMY5dYFTF3xjpj1y6gKnLnDqQiIICt1AWkF0LUF0EV2NcUQX0fWNmfaI6CK6iG4iCArdQFpBdC1BdBFdjXFEF9H1jZn2iOgiuohuIggK3UBaQXQtQXQRXY1xRBfR9Y2Z9ojoIrqIbiIICt1AWkF0LUF0EV2NcUQX0fWNmfaI6CK6iG4iCArdQFpBdC1BdBFdjXFEF9H1jZn2iOgiuohuIggK3UBaQXQtQXQRXY1xRBfR9Y2Z9ojoIrqIbiIICt1AWkF0LZk3T6RVq/pr3jy1tD+88CH5Zvc95Zvd93TL69qXyzybOdr7ZZov130meXxzZBuP4/NyGdOcY7smjfwaz6LvM2Xal3bMtMe4Y669adZz3TPNei7r1dqnfK7Ds35NixY4RwSIbkwgusUBb0YDAIC0g3NEg+jGBA9dcYDoAgBA2sE5okF0Y4KHrjhAdAEAIO3gHNEgujHBQ2dJXZ3I0KH1V12dWtqj//CkDDrrIhl01kVueV37cplnM0d7v0zz5brPJI9vjmzjcXxeLmOac2zXpJFf41n0faZM+9KOmfYYd8y1N816rnumWc9lvVr7lM91eNavqarCOSJAdGMC0bWEUxc4dUFjnFMXOHXBN2baI6cucOoCpy4kgqDQDaQVRNcSRBfR1RhHdBFd35hpj4guoovoJoKg0A2kFUTXEkQX0dUYR3QRXd+YaY+ILqKL6CaCoNANpBVE1xJEF9HVGEd0EV3fmGmPiC6ii+gmgqDQDaQVRNcSRBfR1RhHdBFd35hpj4guoovoJoKg0A2kFUTXEkQX0dUYR3QRXd+YaY+ILqKL6CaCoNANpBVE1xJEF9HVGEd0EV3fmGmPiC6ii+gmgqDQDaQVRNcSRBfR1RhHdBFd35hpj4guoovoJoKg0A2kFUS3OODNaAAAkHZwjmgQ3ZjgoSsOEF0AAEg7OEc0iG5M8NAVB4guAACkHZwjGkQ3JnjoLFmzRuSRR+qvNWvU0h71h6fkD/95ufzhPy93y+val8s8mzna+2WaL9d9Jnl8c2Qbj+PzchnTnGO7Jo38Gs+i7zNl2pd2zLTHuGOuvWnWc90zzXou69Xap3yuw7N+zd134xwRILoxgehawo/R+DGaxjg/RuPHaL4x0x75MRo/RuPHaIkgKHQDaQXRtQTRRXQ1xhFdRNc3ZtojoovoIrqJICh0A2kF0bUE0UV0NcYRXUTXN2baI6KL6CK6iSAodANpBdG1BNFFdDXGEV1E1zdm2iOii+giuokgKHQDaQXRtQTRRXQ1xhFdRNc3ZtojoovoIrqJICh0A2kF0bUE0UV0NcYRXUTXN2baI6KL6CK6iSAodANpBdG1BNFFdDXGEV1E1zdm2iOii+giuokgKHQDaQXRtQTRRXQ1xhFdRNc3ZtojoovoIrqJICh0A2kF0bVk2zaRtWvrr23b1NJ2uvpvcuRl4+TIy8a55XXty2WezRzt/TLNl+s+kzy+ObKNx/F5uYxpzrFdk0Z+jWfR95ky7Us7Ztpj3DHX3jTrue6ZZj2X9WrtUz7X4Vm/Zs4cnCMCRDcmEN3igFcAAwBA2sE5okF0Y4KHrjhAdAEAIO3gHNEgujHBQ2fJ2rUizz5bf61dq5b2yMvGSd+e10rfnte65XXty2WezRzt/TLNl+s+kzy+ObKNx/F5uYxpzrFdk0Z+jWfR95ky7Us7Ztpj3DHX3jTrue6ZZj2X9WrtUz7X4Vm/ZvhwnCMCRDcmEF1L+DEaP0bTGOfHaPwYzTdm2iM/RuPHaPwYLREEhW4grSC6liC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIK0gupYguoiuxjiii+j6xkx7RHQRXUQ3EQSFbiCtILqWILqIrsY4oovo+sZMe0R0EV1ENxEEhW4grSC6liC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIK0gupYguoiuxjiii+j6xkx7RHQRXUQ3EQSFbiCtILqWILqIrsY4oovo+sZMe0R0EV1ENxEEhW4grSC6liC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIK0gupZs2SKydGn9tWWLWtpDrnpeul48RrpePMYtr2tfLvNs5mjvl2m+XPeZ5PHNkW08js/LZUxzju2aNPJrPIu+z5RpX9ox0x7jjrn2plnPdc8067msV2uf8rkOz/o1M2bgHBEgujGB6BYHvAIYAADSDs4RDaIbEzx0xQGiCwAAaQfniAbRjQkeOkvWrROZOLH+WrdOLe2/X/609P7pTdL7pze55XXty2WezRzt/TLNl+s+kzy+ObKNx/F5uYxpzrFdk0Z+jWfR95ky7Us7Ztpj3DHX3jTrue6ZZj2X9WrtUz7X4Vm/ZuxYnCOCVIvurFmzpEePHtKyZUtp3769XHXVVbJp0yajuW+99Zacfvrp0qpVK9lrr73kBz/4gcyZM8e4NqJrCT9G48doGuP8GI0fo/nGTHvkx2j8GI0foyWCoNANxMWqVavkgAMOkG7dusmECRNkxIgR0rZtWxkwYEDOua+++qrssccecvHFF8ukSZPkxRdflGuvvVY+/PBD4/qIriWILqKrMY7oIrq+MdMeEV1EF9FNBEGhG4iLqqoqad26taxcuTKMPfjgg9KsWTNZsmRJ5LwtW7bIQQcdJNdcc41XfUTXEkQX0dUYR3QRXd+YaY+ILqKL6CaCoNANxEV5ebn07NmzQay2tlZKSkpk1KhRkfNefvllCYIgqwybgOhagugiuhrjiC6i6xsz7RHRRXQR3UQQFLqBuNhvv/1k0KBBjeIdOnSQgQMHRs4bPHiw7LvvvvLcc8/JYYcdJs2aNZMjjjhCnnjiCav6iK4liC6iqzGO6CK6vjHTHhFdRBfRTQRBoRuIi912202GDBnSKN65c2fp06dP5Ly+ffvKnnvuKfvss48MHTpUXnvtNendu7cEQSBTp06NnLd69WqpqakJr+rqah46GxBdRFdjHNFFdH1jpj0iuoguopsIgkI3kMnGjRvVcrmKbp8+fSQIAvnrX/8axrZv3y7HHnus/Nd//VfkvMrKSgn+9aBlXjx0hiC6iK7GOKKL6PrGTHtEdBFdRDcRBIVuIJO2bdtK//79pbq62juX61cXrr76agmCQGbNmtUgfumll8ohhxwSOY+/6HqC6CK6GuOILqLrGzPtEdFFdBHdRBAUuoFMbr/9djnqqKOktLRUjj76aPnLX/4iy5Ytc8pVXl4uvXr1ahCrq6vL+WO0UaNGSVOi+/vf/14OPfRQ4/p8R9eOzxevlPK+w+W/LxstsnmzWt7vXjleyvsOrxdel7ybN+/8HxOb+S7zbOa49uWbL9d9Jnl8c2Qbj+PzchnTnGO7Jo38Gs+i7zNl2pd2zLTHuGOuvWnWc90zzXou69Xap3yuw7N+zdSpOEcERSW6O3j33XflwgsvlLKyMtljjz2kZ8+e8sILL8i2bduMc1RVVUmbNm2ktrY2jA0fPjzn8WL//Oc/ZbfddpP77rsvjG3fvl2OOeYYOffcc43rI7p2XPvsx7G8qpdXAAMAQNrBOaIpStHdwYYNG+Sxxx6Tk08+WUpLS+WAAw6QgQMHyoIFC3LO3fHCiIqKCpk4caKMHDlSysrKGr0wonv37tK9e/cGsUsvvVRat24t9957r0yYMEHOP/98adasGS+MiBFEFwAAwA2cI5qiFt1XX31Vzj//fNlzzz2lXbt28utf/1oOOuggad68uYwcOTLn/JkzZ8oZZ5whLVq0kHbt2smVV17Z6BXAFRUVUlFR0SC2ZcsWue6666RDhw6yxx57SNeuXWXChAlWvfPQ2TH4iWrp+fMh0vPnQ0Q2bFDLe/gVz/rl3bBB5O236y+b+Q7zvlpaKxcPuE8eueOx3HNc+/LNl+s+kzy+ObKNx/F5uYxpzrFdk0Z+m5q+ffv2pR0z7THumGtvmvVc90yznst6tfYpn+vwrF8zfjzOEUHRie6XX34p119/vXTs2FFKS0vlrLPOknHjxsnmf30/Zdu2bXLFFVdI+/btC9xpdhBdO+4Y+pLuj6v+RZJ+jDb4L+P9fwDkimm+XPeZ5PHNkW08js/LZUxzju2aNPLb1PTt27cv7Zhpj3HHXHvTrOe6Z5r1XNartU/5XIdnfX6MFk1Q6AYyOe2006RZs2Zy4IEHyuDBgyO/ovDee+9JSUlJnruzA9G1A9EVubzqaX+5cAXRdcuJ6CK6ccUQXff1au0TopsKgkI3kEmvXr3k5Zdflu3bt2e9b/PmzUbf0y0kiK4dQxBdRFdjHNFFdH1jpj0iuoguopsIgkI3kMmUKVNk7dq1TY6tXbtWpkyZkueO3EF07UB0EV2VcUQX0fWNmfaI6CK6iG4iCArdQCalpaUybdq0JsemT58upaWlee7IHUTXDr66gOiqjCO6iK5vzLRHRBfRRXQTQVDoBjIpKSmJFN033nhDWrduneeO3EF07UB0EV2VcUQX0fWNmfaI6CK6iG4iCArdwJQpU+TGG2+UG2+8UUpKSqRPnz7hP++4rrnmGjn22GPl+9//fqHbNQbRtQPRRXRVxhFdRNc3ZtojoovoIrqJICh0A7feequUlZVJWVmZlJaWSps2bcJ/3nG1a9dOunXrJtXV1YVu1xhE1w5EF9FVGUd0EV3fmGmPiC6ii+gmgqDQDWTSqVMnmTFjRqHbUAHRteO6J6fLf/zmXvmP39wrsnGjWt7DrnjOL+/GjSIfflh/2cx3mPfrB94079W1L998ue4zyeObI9t4HJ+Xy5jmHNs1aeS3qenbt29f2jHTHuOOufamWc91zzTruaxXa5/yuQ7P+jUTJ+IcERSV6KYJRNeOa3gFsPR+6N3E9AoAAMUDzhFNwUX3+eefl7q6uvA/57qSAg+dHYguogsAAG7gHNEUXHQzT1ooKSnJenG8WHq5nq8u8NUFjXG+usBXF3xjpj3y1QW+usBXFxJBwUV3wYIFsmnTpvA/57qSAqJrBz9G48doKuP8GI0fo/nGTHvkx2j8GI0foyWCoNANpBVE1w5EF9FVGUd0EV3fmGmPiC6ii+gmgqDQDWQyffp0mTRpUvjPtbW10q9fP6moqJCbb75Ztm/fXsDu7EB07eAVwIiuyjiii+j6xkx7RHQRXUQ3EQSFbiCT8vJyqaysDP/517/+tey1115y7rnnSqtWreSWW24pXHOWILp2ILqIrso4oovo+sZMe0R0EV1ENxEEhW4gk3333VdeeuklERFZv369tGzZUkaOHCkiIvfff78cfvjhhWzPCkTXDkQX0VUZR3QRXd+YaY+ILqKL6CaCoNANZNKiRQt54403RERk0qRJ0qxZM1m5cqWIiLz55pvSokWLQrZnBaJrB6KL6KqMI7qIrm/MtEdEF9FFdBNBUOgGMuncubMMHDhQROq/tnDSSSeFY08//bS0b9++UK1Zg+jawY/REF2VcUQX0fWNmfaI6CK6iG4iCArdQCYjRoyQkpIS+c53viOlpaUyduzYcOziiy+WHj16FLA7OxBdOxBdRFdlHNFFdH1jpj0iuoguopsIgkI3sCtTpkyRO+64Q15//fUG8crKSnnxxeS8MQrRteP6J6ql58+HSM+fDxHZsEEt7+FXPOuXd8MGkbffrr9s5jvM++2wN817de3LN1+u+0zy+ObINh7H5+UypjnHdk0a+W1q+vbt25d2zLTHuGOuvWnWc90zzXou69Xap3yuw7N+zfjxOEcERSe6aQHRtYNXAPMKYAAAcAPniKboRHfLli3y9ttvy5NPPimjR49ucD3yyCOFbs8YHjo7EF1EFwAA3MA5oikq0X3vvffkwAMPlNLSUikpKWl0lZaWFrpFY3jo7Bj01PtS3nd4/XdqN29Wy/vdK8f75d28eef3oGzmO8z71bCp5r269uWbL9d9Jnl8c2Qbj+PzchnTnGO7Jo38NjV9+/btSztm2mPcMdfeNOu57plmPZf1au1TPtfhWb9m6lScI4KiEt0TTjhBjj/+eJkyZYosW7ZM6urqGl1JAdG1g+PF+DGayngcn5fLmOYc2zVp5Lep6du3b1/aMdMe44659qZZz3XPNOu5rFdrn/K5Ds/6/BgtmqDQDWTSqlUrmTBhQqHbUAHRtQPRRXRVxhFdRNc3ZtojoovoIrqJICh0A5mcfPLJMnr06EK3oQKiaweii+iqjCO6iK5vzLRHRBfRRXQTQVDoBjL54IMPpEuXLvL666/Ltm3bCt2OF4iuHYguoqsyjugiur4x0x4RXUQX0U0EQaEbyKSsrExatGghpaWlsvvuu8vee+/d6EoKiK4diC6iqzKO6CK6vjHTHhFdRBfRTQRBoRvIpLKyUm644YasV1JAdO1AdBFdlXFEF9H1jZn2iOgiuohuIggK3UBaQXTtQHQRXZVxRBfR9Y2Z9ojoIrqIbiIICt1AU2zYsEE+/vhjeemll2T16tWFbscJRNcORBfRVRlHdBFd35hpj4guoovoJoKg0A3sym233Sb77LNP+IKI999/X0REzj77bKmqqipwd+YgunYMfnya9P7pTdL7pzeJrFunlvffL3/aL++6dSITJ9ZfNvMd5v32r2+Y9+ral2++XPeZ5PHNkW08js/LZUxzju2aNPLb1PTt27cv7Zhpj3HHXHvTrOe6Z5r1XNartU/5XIdn/ZqxY3GOCIpKdG+++WZp2bKl3H777VJdXS0lJSWh6N5///1y0kknFbhDcxBdO3gFsMgvRkxLTK8AAFA84BzRFJXoHnjggfKXv/xFRES2bt3aQHRfffVVTl1IMYiuSO+H3k1MrwAAUDzgHNEUleg2b95cXnvtNRFpLLoTJ06Uli1bFrI9K3jo7Bg07gPpevEY6XrxGJEtW9TyHnLV8355t2wRWbq0/rKZ7zDvlw9ONe/VtS/ffLnuM8njmyPbeByfl8uY5hzbNWnkt6np27dvX9ox0x7jjrn2plnPdc8067msV2uf8rkOz/o1M2bgHBEUlegeffTRcu2114pIY9G99tpr+epCiuHHaPwYTWWcH6PxYzTfmGmP/BiNH6PxY7REEBS6gUxGjBghu+++u9xwww3y6aefSklJibz44osybNgwadmypTzxxBOFbtEYRNcORBfRVRlHdBFd35hpj4guoovoJoKg0A3syu233y6tW7eW0tJSKSkpkZKSEmndurXceeedhW7NCkTXjiSI7qy3PnCah+gq50B03daC6LqvE9FFdBHdxFJ0oisismbNGpk4caKMHTtWXnnlFamrqyt0S9YgunYkQXT/fN8LTvMQXeUciK7bWhBd93UiuoguoptYikp0R48eLStWrGhybOXKlTJ69Og8d+QOomsHoityxZ+f8ZcLVxBdt5yILqIbVwzRdV+v1j4huqmgqES3tLRUpk2b1uTY9OnTpbS0NM8duYPo2pEputvnzlXLmyTR5S+6CuOILqLrGzPtEdFFdBHdRFBUoltSUhIpuhMnTpSysrI8d+QOomsHoovoqowjuoiub8y0R0QX0UV0E0HBRXf8+PHym9/8Rn7zm99ISUmJ/Nd//Vf4zzuun/3sZ/L//t//kx49ehS6XWMQXTtu/yuii+gqjCO6iK5vzLRHRBfRRXQTQcFFd9iwYdKlSxfp0qWLlJSUyOGHHx7+847rpJNOkl/+8pfyhcb/Qc8TiK4dgx99V/r2vFb69rxWtq9Zo5b3yMvGhXll7Vr7BGvXhvMHPfIPq3ny7LP1l2Hd393/unmvDvlV8uW6zySPb45s46774pozakxzju2aNPLb1PTt27cv7Zhpj3HHXHvTrOe6Z5r1XNartU/5XIdn/Zrhw3GOCAouupmcdtppMnPmzEK3oQKia0fmK4C3b9+ullfjFcA75l817kO1vpqCVwADAIALOEc0RSW6aYKHzg5EV+QXI6YhugAAYA3OEU3Rie7MmTPlT3/6k/Tv37/Rd3V/+9vfFro9Y3jo7Lj26Q/lyMvGyZGXjZPtW7eq5e109d/CvLJtm32CbdvC+Vc/afHCiG3bdv6/lQzr/nL4O+a9OuRXyZfrPpM8vjmyjbvui2vOqDHNObZr0shvU9O3b9++tGOmPcYdc+1Ns57rnmnWc1mv1j7lcx2e9WvmzME5Iigq0R05cqQ0a9ZMWrduLUcddVSj7+oed9xxhW7RGETXjswfo237nB+j8WM0x3F+jMaP0Xxjpj3yYzR+jMaP0RJBUYnud7/7Xendu7esX7++0K14g+jakQjRvRfRRXQRXe96PvMR3dy9Ibp6+4TopoKiEt1WrVrJa6+9Vug2VEB07UB0EV2VcUQX0fWNmfaI6CK6iG4iKCrRPffcc6WqqqrQbaiA6NqRCNHlqwuILqLrX89nPqKbuzdEV2+fEN1UUFSi+9prr8lhhx0mgwcPlilTpshHH33U6EoKiK4dmW9GQ3QRXedxRBfR9Y2Z9ojoIrqIbiIoKtEtKSkJr9LS0gbXjlhSQHTtQHRFrvjzM/5y4Qqi65YT0UV044ohuu7r1donRDcVFJXoTp48Wd54442sV1JAdO3gqwuIrso4oovo+sZMe0R0EV1ENxEUleimCUTXjkzR3VqsosuP0RBdRNe/ns98RDd3b4iu3j4huqmg4KJbVlYme++9t9G1zz77FLpdYxBdOwY/+o784T8vlz/85+WytW61Wt6j/vBUmFfWrLFPsGZNOH/Q6Let5skjj9RfhnUvuP/v5r065FfJl+s+kzy+ObKNu+6La86oMc05tmvSyG9T07dv3760Y6Y9xh1z7U2znuueadZzWa/WPuVzHZ71a+6+G+eIoOCiW1lZKTfccIPxlRQQXTv++MzOVwBv3fbtfAVw74fe5RXAAABgDc4RTcFFN63w0NmB6CK6AADgBs4RTapFd9asWdKjRw9p2bKltG/fXq666irZtGmTVY5LL71UgiCQSy+91GoeD50d1zyL6P5ixDREFwAArME5okmt6K5atUoOOOAA6datm0yYMEFGjBghbdu2lQEDBhjn+Pjjj6VNmzay1157Iboxk3m82Lf1x2icuqAwzo/R+DGab8y0R36Mxo/R+DFaIkit6FZVVUnr1q1l5cqVYezBBx+UZs2ayZIlS4xydOvWTQYPHiwdO3ZEdGMG0UV0VcYRXUTXN2baI6KL6CK6iSC1olteXi49e/ZsEKutrZWSkhIZNWpUzvmPPvqoHHjggbJu3TpENw8k4ngx3oyG6CK6/vV85iO6uXtDdPX2CdFNBakV3f32208GDRrUKN6hQwcZOHBg1rlr1qyRAw44QJ544gkREUQ3D2SK7pY5n6vlRXSV+0V0zcYQXUQX0c2PICK6IgGim43Uiu5uu+0mQ4YMaRTv3Lmz9OnTJ+vcyy+/XMrLy8N/NhHd1atXS01NTXhVV1fz0FmA6CK6KuOILqLrGzPtEdFFdBHdRIDo7sKnn34qzZs3lxkzZoQxE9GtrKyU4F8PWubFQ2cGoovoqowjuoiub8y0R0QX0UV0E0FqRdf1qwtnn3229O7dW2pra8PrwAMPlH79+kltba1s27atyXn8RdePzB+jFa3o8mM0RBfR9a/nMx/Rzd0boqu3T4huKkit6JaXl0uvXr0axOrq6nL+GK1jx47S1F9md1zz5883qs93dO1AdBFdlXFEF9H1jZn2iOgiuohuIkit6FZVVUmbNm2ktrY2jA0fPjzn8WLvvPOOTJ48ucHVvn17Offcc2Xy5MmyYcMGo/qIrh03jHlbBp11kQw66yLZsnKVWt6j//BkmFfq6uwT1NWF869/+C2reTJ0aP1lWLfvfX8379Uhv0q+XPeZ5PHNkW3cdV9cc0aNac6xXZNGfpuavn379qUdM+0x7phrb5r1XPdMs57LerX2KZ/r8KxfU1WFc0SQWtHd8cKIiooKmThxoowcOVLKysoavTCie/fu0r1796y5OHUhfjJfAbxla9NfD3EhSW9G4xXAAADg4qyzewAAIABJREFUAs4RTWpFV0Rk5syZcsYZZ0iLFi2kXbt2cuWVVzZ6BXBFRYVUVFRkzYPoxk+m6G5GdGOtAwAA6QLniCbVoltIeOjsSILoXvkUogsAAMUHzhENohsTPHR23D70Zflm9z3lm933lM2Kb0b74YUPhXll3jz7BPPmhfOr7rMQ0HnzRFq1qr8M615+67PmvTrk18i3cfbnsqVFS9kedZ9Jnlz3+Iy77otrzqgxzTm2a9LIb1PTt2/fvrRjpj3GHXPtTbOe655p1nNZr9Y+5XMdnvVrWrTAOSJAdGMC0bUj89SFzZy6ULSnLmSed8ypC1nGOHWBUxc4dSE/pxVw6oJIwKkL2UB0YwLRtSMRohvzCyOSILo59xPR1Z+D6CK6iK7derX2CdFNBYhuTCC6diC6iK7KOKKL6PrGTHtEdBFdRDcRILoxgejakQjRjfmrC0l4BTCii+h61/OZj+jm7g3R1dsnRDcVILoxgejakfndT0QX0XUeR3QRXd+YaY+ILqKL6CYCRDcmEF07MkV302xEF9FFdJ3XhOgiulr1Ci1xruvV2idENxUgujGB6NqR+dWFohVdvqOL6CK6/vV85iO6uXtDdPX2CdFNBYhuTCC6dtw4Zqrcctpv5ZbTfiublq9Uy3vMpU+EeaW21j5BbW04//qH37SaJ0OG1F+GdS+87zXzXh3ya+TLuZ8meXLd4zPuui+uOaPGNOfYrkkjv01N3759+9KOmfYYd8y1N816rnumWc9lvVr7lM91eNavue46nCMCRDcmEF07rnl255vRNm0pzjejxf0K4F+MmFb0b0bT2E8AANAF54gG0Y0JHjo7kiC6cb8CGNEFAAAXcI5oEN2Y4KGzA9EV6f3Qu0UvkYguAEDxgXNEg+jGBA+dHbcNe0WWtSyTZS3LZNPcLO8rt+QH/UaEeWX+fPsE8+eH8/90/0tW86Rdu/rLsO4fbn3WvFeH/Br5cu6nSZ5c9/iMu+6La86oMc05tmvSyG9T07dv3760Y6Y9xh1z7U2znuueadZzWa/WPuVzHZ71a/bdF+eIANGNCUTXjsxTFzbOnqOWl1MXdPvl1AVOXfCu5zOfUxdy98apC3r7xKkLqQDRjQlE1w5EF9FVGUd0EV3fmGmPiC6ii+gmAkQ3JhBdOxIhujG/MALRVRhHdBFd35hpj4guoovoJgJENyYQXTsaiO4sRBfRRXSd14ToIrpa9Qotca7r1donRDcVILoxgejacQeiayW62+fODe9d89ks8748+0V0EV3vej7zEd3cvSG6evuE6KYCRDcmEF07ilV0M4UybtG9vOpp4zlrP5sV3vvImNfM+/LsF9FFdL3r+cxHdHP3hujq7ROimwoQ3ZhAdO1IhOjG/GM0G9FdkyG6Dz+C6NquQy0noovoxhVDdN3Xq7VPiG4qQHRjAtG14+bRb8ldP/iZ3PWDn8mGpcvU8h77+8fDvLJypfX87StWhPMHj5xiPnHlSpHKyvrLsG6/e1417nX1kqXhvcOefc+8L89+c+6nSZ5c9/iMO+y7V86oMc05tmvSyG9T07dv3760Y6Y9xh1z7U2znuueadZzWa/WPuVzHZ71ay67DOeIANGNCUTXjmsz3oy2YfNWtby+b/Lavn17Ub4CePWGzeG9d0/6PNa+MuHNaAAAxQfOEQ2iGxM8dHZkiu76TYhuLhBdAADYAc4RDaIbEzx0diC67qJ7z2uILgDAtxmcIxpENyZ46OwY8uAEWVC2vywo2182fD5PLe+p/UaGeWXBAuv5276cH86/5a8vm09csEDkkEPqL8O6f7htvHGva2bPDe8dOXayeV+e/ebcT5M8ue7xGXfYd6+cUWOac2zXpJHfpqZv3759acdMe4w75tqbZj3XPdOs57JerX3K5zo869ccdBDOEQGiGxOIrh13Zpy6sH7mbLW8vqcubPucUxcy4dQFTl3wruczn1MXcvfGqQt6+8SpC6kA0Y0JRNeORIhuEZ2ji+giutZrQXTd14noIrqIbmJBdGMC0bXjzqEvh//l/baKrs2b0RBdRNd6LYiu+zoRXUQX0U0siG5MILp28Bddd9EdNRrRtV2HWk5EF9GNK4bouq9Xa58Q3VSA6MYEomtHpuiu+6x4RHdrHkX3SkTXfxzRRXR9Y6Y9IrqILqKbCBDdmEB07cj86kLRim7MP0ZzFV2+umC/DrWciC6iG1cM0XVfr9Y+IbqpANGNCUTXDkQX0VUZR3QRXd+YaY+ILqKL6CYCRDcmEF07qka/KQ+e2FMePLGnrK35Si1vl0vGhnll+XLr+Vu/XhbOH/zQZPOJy5eLXHFF/WVY96K7Jxr3umbxP8N7hz39rnlfnv3m3E+TPLnu8Rl32HevnFFjmnNs16SR36amb9++fWnHTHuMO+bam2Y91z3TrOeyXq19yuc6POvX9O2Lc0SA6MYEomvH9eM/Cd+4tXbjFrW8vm/y2rotf29G+yWvAAYAAAdwjmgQ3ZjgobMD0XUXXV4BDADw7QbniAbRjQkeOjsyRXfNhs1qeX3FbMvWbXkT3V+NRHQBAMAenCMaRDcmeOjsGDJ8kszcr5PM3K+TrP18nlre7/cfFeaVRYus52+ZvyCcf8sDE8wnLlokcuyx9Zdh3cvu+Jtxr2s+nxfe+9DYKeZ9efabcz9N8uS6x2fcYd+9ckaNac6xXZNGfpuavn379qUdM+0x7phrb5r1XPdMs57LerX2KZ/r8Kxfc+SROEcEiG5MILp2/OWBnacurP1sllpe31MXtsz5PJwf+zm6t6brHN0NM+e41eLUBU5dsOmLUxfcTgHg1AXVUw8KtkecupATRDcmEF07MkV3zbdUdK9yFN1iPV7sLw+87FYL0UV0bfpCdHWEFdFFdFMKohsTiK4diG76/qJ79oARbrUQXUTXpi9EV0dYEV1EN6UgujGB6NpxVwJEt6qIRHctomsvpdlAdN0EUKNvRLfpGKLrvl6tfUJ0UwGiGxOIrh0NRPfT4hHdzXkUXdevLhSr6J6F6OrMQXQRXUTXbr1a+4TopgJENyYQXTvSLLoLpn1kNCVt39FFdBFdZ4m06QvR1RFWRBfRTSmIbkwgunakWXT73fCk0ZS0/UWXry4gus4SadMXoqsjrIguoptSEN2YQHTtuHX0FBnT5RwZ0+UcWb1giVre4y4ZG+aVZcus52/+amk4f/BDr5tPXLYsnPc/lc8ZTfn9PRONe127aEl474Pj3jXvK0u/0q9f/ZWlds79zFj3qZc/7lbLZ9xwHWo5o8Y059iuSSO/TU3fvn370o6Z9hh3zLU3zXque6ZZz2W9WvuUz3V41q/p3RvniADRjQlE147BGW9Gq1tXPG9G25zxZrTLn7R7M9qOeacPmWx0/29Gvef0ZrS7JxXXm9F2jB95/St56wsA4NsMzhENohsTPHR2VD7/aVGK7qYtxS+6xfYK4B3jRyG6AAB5AeeIBtGNCR46OzJFt3bdJrW83wbR5S+6AADfbnCOaBDdmOChs+POEa/J9A5HyPQOR0jd5/PU8p7c/+EwryxebD1/0/yF4fwbh040n7h4cTjvvEFPGU25/M4XjHtdM/fL8N6HHnvTvK8s/copp9RfWWrn3M+MdZ926SNutXzGDdehljNqTHOO7Zo08tvU9O3bty/tmGmPccdce9Os57pnmvVc1qu1T/lch2f9muOPxzkiQHRjAtG14+5hO09dWP3JTLW8vqcubJq989SFP93jdurCzwc+ajTl6tueNe51zafFf+oCx4spzeHUBU5d4NQFu/Vq7ROnLqQCRDcmEF07kiC6t9zzN/OJDqI7ENH1H0d0EV3fmGmPiC6ii+gmAkQ3JhBdOzJFt+5jRHf73LlZ70V0EV3rtSC67utEdBFdRDexILoxgejaUayiu3H2nHA+oovoIroK9XzmI7q5e0N09fYJ0U0FiG5MILp2ILqWovsJomstpdlAdN0EUKNvRLfpGKLrvl6tfUJ0UwGiGxOIrh2ZoluL6Mq2zxFdl/Ftn891+7wRXTcB1Ogb0W06hui6r1drnxDdVIDoxgSia0ciRPduRLfYRXfKy++EYzXVH2dbsXlNRFe3ns98RDd3b4iu3j4huqkA0Y0JRNeOIaPfkGc6ny7PdD5dVs1bpJa368VjwryydKn1/I01S8L51w+zEMqlS8N5vQY/YzTlsnteCeds++dXWe9d/eXi8N7/e+of5n1l6Vd6966/suxTzv3MWPcPL3vMrZbH+PgJ74f1v/jE4l9sstV0GdOcY/jZqOa3qenbt29f2jHTHuOOufamWc91zzTruaxXa5/yuQ7P+jW9euEcESC6MYHo2nHD33a+GW3F2o1qeX3fjLZh89Zw/mVPzHCqbfpmtN89vPPNaFu3bc96b+26TbwZrQmerF4U1p+zdE3e6wMAFAKcI5pUi+6sWbOkR48e0rJlS2nfvr1cddVVsmlT9tfLzp49WwYMGCBHHnmktGjRQjp16iT9+/eXFStWWNXmobMD0RX53cPViK4niC4AfBvBOaJJreiuWrVKDjjgAOnWrZtMmDBBRowYIW3btpUBAwZknXfffffJscceK3fffbdMnjxZHn74YTnooIOkc+fOOSU5Ex46OxDdhqK7Zeu2rPciuk2D6ALAtxGcI5rUim5VVZW0bt1aVq5cGcYefPBBadasmSxZsiRy3ooVK2T79oZ/TXv77bclCAIZP368cX0eOjvuGPW6TOl0nEzpdJys/PxLtbwnXjQ6zCtZPvcoNixYFM4fPHSi+cQlS8J5P7lunNGUy+96OZyzZVGWd7aLSN0X88N7hz/+lnlfWfqVM8+sv7LsU879zFh3tz9E/AgvVy2P8edffi+s/8WHc7Kt2Lymy5jmHMPPRjW/TU3fvn370o6Z9hh3zLU3zXque6ZZz2W9WvuUz3V41q8pL8c5Ikit6JaXl0vPnj0bxGpra6WkpERGjRpllWv9+vUSBIEMHTrUeA6ia8c9D+48dWHlR5+p5fU+dWHWzlMXbo751IU/3v5cOGfLnOx/pa37eGZ4b7GeunDmRfk/deHF594Mx75898NsKzavyakLuvV85nPqQu7eOHVBb584dSEVpFZ099tvPxk0aFCjeIcOHWTgwIFWuV599VUJgkAmT55sPAfRtePeB18J/8ubOtH9o73obkZ0ncYRXaX8iG7uHhFdRBfRTQSpFd3ddttNhgwZ0ijeuXNn6dOnj3GeDRs2yLHHHitdu3Zt9JWGTFavXi01NTXhVV1dzUNnQaborvgwZaLr8BddRBfRNd4P07Uguu7rRHQRXUQ3sSC6OfjVr34lbdq0kU8//TTrfZWVlRL860HLvHjozEB0Ra5BdL3HM0V33juILqKL6HrVK7TEua5Xa58Q3VSQWtHV+OrCoEGDZLfddpMJEybkvJe/6Ppx3/8hupmiu2l2dtGtRXSbHEd0lfIjurl7RHQRXUQ3EaRWdMvLy6VXr14NYnV1dcY/Rrv33nulpKRERo8e7VSf7+jakYS/6N509/PmExHdgosuX11AdFWkrVC9ILru69XaJ0Q3FaRWdKuqqqRNmzZSW1sbxoYPH57zeDERkccee0xKSkrk1ltvda6P6NpRrKK7YSaim0mSRJe/6CK6KtJWqF4QXff1au0TopsKUiu6O14YUVFRIRMnTpSRI0dKWVlZoxdGdO/eXbp37x7+8xtvvCG77767nHHGGfLOO+80uBYvzn62aSaIrh13jH5DJhz2fZlw2Pdl+dz5anlPGDAmzCtffWU9f/3CmnD+dQ+8aj7xq6/Ceb2uf8ZoyuX3vBLO2bg4+3Ozat7C8N4Hn5xq3leWfuV//qf+yrJPOfczY90//MNYt1oe48+/Mj2sP/ejudlWbF7TZUxzjuFno5rfpqZv3759acdMe4w75tqbZj3XPdOs57JerX3K5zo869ecfTbOEUFqRVdEZObMmXLGGWdIixYtpF27dnLllVc2ertZRUWFVFRUhP8c9aOyIAiksrLSuDaia8dNL3wWvtHq69Ub1PL6vhlt/aadb0a79PEPnGqbvhntgtE734y2ccvWrPeuWLsxvPeuSRYvRvDE5s1oR1xX2Dejzf6KN6MBwLcDnCOaVItuIeGhswPRFenjKLrF+grgKNFdv2mrPDjlC/mkpk69P0QXAL6N4BzRILoxwUNnRxJE9/d5FN0Nm9Mrure8+JnXZ5KNuER32ZqNsmjlOrV8AACa4BzRILoxwUNnx18e2fkd3WWfz1fL6/sd3XULF4fzB7l+R3ew2Xd0r8j4ju6GRdmfmxVfLEjsd3R7Xv90zhzF9B3djYt3fk97yax5ZvP4ji7f0eU7unxHl+/oFgWIbkwgunZknqO7fEbxnLqwfubscP6NMZ+6cO2QnacubJyV/Xu3Kz/6LLw3aacu/GzgGOMcxXDqwpLpn4Rjzzz1htk8Tl3g1AVOXcjPaQWcuiAScOpCNhDdmEB07UB0Ra693U10R46eZN6XQb+ILqKL6Br0iOgiuohuIkB0YwLRteP+NIvuH+MV3REPI7o7iEV0qxFd1Xo+8xHd3L0hunr7hOimAkQ3JhBdOzJFd1mxiu5d+fvqwoaZ2UV3xYfFL7o9EN2m14Dous9HdHP3hujq7ROimwoQ3ZhAdO0oVtFd9xmim0mxi+5LiC6i6xsz7RHRRXQR3USA6MYEomvH/cNTLLqmX11Imejy1QVE11kibfpCdHWEFdFFdFMKohsTiK4dmaL79YxP1fImSXQHDRkfzlk/c3bWe5Mgunx1AdF1lkibvhBdHWFFdBHdlILoxgSia8fdoyfLlE7HyZROx8nSWfZCGsWJF40O88qSJdbz1325MJw/6K8TzScuWRLO+8n144ymXH3PK+Gc9fMXZr13+Zx54b3DHn/TvK8s/cqZZ9ZfWfYp535mrLv80jFN5ug16KmcObL2kmX8+ZffC3PPnWHxauQsOWs++SLMOe75d83mZVuD7RzDz0Y1v01N3759+9KOmfYYd8y1N816rnumWc9lvVr7lM91eNavKS/HOSJAdGMC0bUj821Z/6xbr5bX981oazduCedf8pjjm9HumGx0/4WPTA/nrNu0Jeu9X6/ZEN5756sWQueJzZvR/v26l5scP23I5ES9GW3hinVhzkf+MV8lJwCAJjhHNIhuTPDQ2ZEpuktqEd1vNlqI7sTsX3PQpNhF96kEi+62bdvl6nEfyT2v5e+VzgCQDnCOaBDdmOChswPRtRTd1cUvuocPSofoLljxTV5E9/kPl4R1Vn6zKbY6AJA+cI5oEN2Y4KGz464xU+SZzqfLM51Pl6/mzFfL2/XiMWFeWbrUev43C2vC+dc8YPGjr6VLw3m9Kp8xmnLlfRPDOd8szP7cLJu7ILz3gSemmveVpV/p3bv+yrJPOfczY92nXDq2yRw9Bz+TM0fWXrKMPz/h/TD33I8tvuudJeeimfPCnE+9+J7ZvGxriBh7dPy0sM7Xny8w3w/TtdjEbWq67IHr/HzETHuMO+bam2Y91z3TrOeyXq19yuc6POvX9OqFc0SA6MYEomvHXx+aEP6S9KsPiufUhW8yTl24IeZTF667Y+epC998luPUhRk7T10YPupV874M+tU6deGMiFMX/r+BjxrnsB2P4xzdmuqPw7Fndzl14esZn9qfOBAx9sTjr4fxBkfsxXzqwrx3PnQ/jcChntd8Tl3I3RunLujtE6cupAJENyYQXTuKVXTXfjYrnF9Mors8AaLbvcCi+8U7M7Iu2TRnNtH94+3P2ktekYnuj34/yl0AHep5zUd0c/eG6OrtE6KbChDdmEB07UB0Uyi6/dMvun0GP2EveUUmuk1+pohu7h4RXUQX0U0EiG5MILp2ZIruP9//RC1vUkV37Wezst6bKbr/N1JXdCe98HbkbcUuui+Pfysci0V0x01pMIbo2tfzmo/o5u4N0dXbJ0Q3FSC6MYHo2pEE0a38y3jziQkW3dP7PRR5W5JEd+4/4hfdvoguohtXDNF1X6/WPiG6qQDRjQlE1w5EV+T6O3eK7pocorssEaLbdJ44RfeVDNH9/G1EF9FFdL3qFVriXNertU+IbipAdGMC0bVjaIboLplePKK7JhGia/FqYoN+Ed2GORe/h+hq1vOaj+jm7g3R1dsnRDcVILoxgejacd/o12V6hyNkeocjZMnHem+GOrn/w2FeWbzYev6auV+G8wfd2/QLEJpk8eJw3nnXPWU05Zp7XgrnrJn7ZdZ7v/5sbnjv0DGTzfsy6PfUAaMjb8u5nxl5fnhx03l+MuipnDnklFPqL8vxl156L8w9p3pm1iWb5lz00Zww59PPv9Ng7Dc3PdP0WrKtIWJs7NNTw1xffzbXfD9M1xIRb/IztalpWc9rfj5ipj3GHXPtTbOe655p1nNZr9Y+5XMdnvVrjj8e54gA0Y0JRNeOqpdmhm+FWrRynVpe3zejrd6wOZw/YOz7TrVPHzLZ6P6LHn0/nFO3fnPWe/9Ztz689/YJ2f/6a8qOfIdc81LOe0zejPbdiDxxvhntmfcXh7k/W7JaJWe2N6P9931vqa1l+Jvzwlxf1W3wzmeK739HAKDw4BzRILoxwUNnR9XLxS+6FyG6VqIblcdXdNdu3CKvfrZU1m/a2mgsU3Q/XVLnlH9XGojuOwsajP33/VMRXQAoODhHNIhuTPDQ2ZFm0T0tZtG97RVd0T34j7kltpCi+/Ph70Z+Hs9+sFN0P6mJQXR3/YsuogsARQDOEQ2iGxM8dHbc9dhUGdPlHBnT5RypmbMg9wRDjrtkbJhXli2znr964ZJw/tUPvGY+cdmycN6PK58zmnL10NfCOasXLMl679IvFob33vN49Lm3Lv12/f3YyNty7mdGnhMufazJHD+ufC5nDunXr/5qYjxbDy/9/aNwbOZHFj8+zFJz0ez5Yc4nX5reYOwXf36h6V6yrSFibMzf3gtzLf1ikfF+GK8lIt7kftrUXLZMtl14oaz99QXme+Dabz5ipj3GHXPtTbOe655p1nNZr9Y+5XMdnvVrevfGOSJAdGMC0bWjwakL1UV06sKnO09dGOx46sLPBo4xmjI489SFT7L/lXbpB5+G9w4boXvqQsWFwyNvszl1ISqP76kL2XqY+PzUcGzOVJ1TF5ZUfxKO7fpmtL6VT9qfOJDiUxcmv/QP+745daHpGKcuuK9Xa584dSEVILoxgejaMXREekX3fES3AYhuekX3x5eNbjKO6CK6iG5Me4To5gTRjQlE145EiO6dMYvuX3aK7upPsh+NFafodkN0Gwxliu4zu4juhYguohtXDNF1X6/WPiG6qQDRjQlE1440i+7/Xq0vul8lQHSj8sQpuq/+bafozn4L0c236P4PoqsXQ3Td16u1T4huKkB0YwLRteOBERPD//LWVH+sltdbdD8pftF9oEi/ulDeN4Wi+2RD0e13A6KL6CK6TvuF6KrWR3SjQXRjAtG1A9FtKLp1HxdOdLX+ohsluj/Pk+jOeuuD7Gs2rFlTvfMVwIhu9nqILqKrXs9lvVr7hOimAkQ3JhBdO9Isuj+NWXSHjphg3pdBv1GCKqIkun9Mrug+/eTkBmNxie7XMz413g/jteRBdPmOLqKrXs9lvVr7hOimAkQ3JhBdO+4f/brM3K+TzNyvkyz6cLZa3u/3HxXmlUWLck/YhdVz5oXzr73H4kD9RYvCeT3/+LjRlGvvfSmcUzs7u1z88+M54b33jf67eV8G/X6//6jI23Lup0Gen173ZM4ccuyx9VcT49l6mPDKe+HYzGkW3/XOUnPRh7PDnE8+M7XB2AW3PNN0L9nWEDH2+NNTw1xfffK58X4YryUi3uR+2tTM+Mz/88qxDeJGOWz6zUfMtMe4Y669adZz3TPNei7r1dqnfK7Ds37NkUfiHBEgujGB6Nrx55dnhW9nmr/8G7W8vm99qlu3881o/R+dnntCE7V/cKuZiA4Yu/PNaCu/2ZT13sWr1oX3Vr2c/a+/pti89cznnu53+L0ZLVv+5z9cEo59uKjWKf+uzF++881oI6d+2WCs51/13oz20Ftfhrlqatd75zNF481oO+afcMskxc4AwBScIxpENyZ46OwoVtGtXbfJW3RP/XPMovtSskT3jDvfiE10/xaD6H6ZRXR7DX1bTXRHZIju4lV6r8HOBaILkHxwjmgQ3ZjgobPj1ld2iu6XiK6sWLsx671JFt0eeRLdGTGI7oi3GoruuQ6iu2jlOvnVyGny8sf/bBAfOXWn6C5aiegCgDk4RzSIbkzw0NlxzxP/kAdP7CkPnthTFsxeoJa3yyVjw7yyfLn1/LqFS8L5Vz7wmvnE5cvDeedc96zRlIHD/h7OWTk/+3NT8/nC8N67HnvbvC+DfrtcMjbytpz7aZCn143jc+aQK66ov5oYz9bDhDc+Ccc+mjE3+5oNa86fNT/M+egLDf9l5zdDXmq6lyz5fn7ri03OGfvi9DC+eM5C4/0wXktEvMn9tKmZ8Zmfcc3T9n3b9JuPmGmPccdce9Os57pnmvVc1qu1T/lch2f9mr59cY4IEN2YQHTtGJZx6sKi94rn1IXVn8wM51/veOrCT654xGhKZcapC6s++izrvUum7zzb9a8PJevUhV9eO9Y4h+2pC39/8e1w7NM338++ZsOaC6Z9FI499cTkBmMDbrI/deHMi0Y0OTbuyclhvMHJI9/SUxc2zp6T/5MObHrMiK35dJZ+L5y64L5erX3i1IVUgOjGBKJrx4MZortw2kdqeTVF97o73ET3XAfRXYnoRo4XUnSf3EV0L77pKSupFIkW3aczRHdxxr/sbZ87N4xvnvO55CQlojvi4UmN4pl7UUyie//wV/R7QXTd16u1T4huKkB0YwLRtWNYkYpu3ceIbiYaovurax8zzmEruq+/+I9w7BMl0Z2fTXRv1hPdZ558o8n/Dsx/98Mw/vqL/3BfS8JE9xfXNP4XojdffieMhf9fjyIQ3T8R1aXKAAAgAElEQVTd84J+L4iu+3q19gnRTQWIbkwgunakWXR7XR6v6IZ/TfIhhaL78RR90f3/2zvz+Bqu949PIo1KbF1QVOmvre+3tXfVaqTf0oWiRWnpQrURrVpqKbXEniBFhCSIJErIZgtCIqusIpQgG4kgUbUmsYTI8vn9cXPnzuTeuXfu3Jks1/N+vebVeuY8z3nOOTM3nzl37jmBATG8c5MkCN2PJxoWuhc598C5pJOsPXxvgvS2SBS6+amnRNentNDl9tE/J84I+5PQlae+uhZxUtsrVz+R0DULSOgqBAld4+AK3YtmJnSHTvvLcHnwhe7NU+YrdMfOVU7oxoZxha4Rq2ToFbqaGdWaQnfyUmVmdPPrkdCd5rwTeuGUHSKj0P2WhK5yAk5OPwn9RUJXxj4ioWsQEroKQULXODaS0JUudDeR0FXDE7px9UPo3snI4vkICt1grtDVzKKS0NXYue8xk9AVyI2Ernz9RELXLCChqxAkdI2jIQjdua7ShO4Xv4kTuk7GCN20hit0f5gXIDqGsUKX9+qCXEKX845swI6aQjfEoKhc6cFfn1bo1YXdHKF74ahG6OY0KKG7xXAeIvM1JHSv/n0WAP8HaqasfnAvQ8/W4yR0SeiS0G2wkNBVCBK6xuG1JQoXWz6Hiy2fQ/5x/SLPGN6b4MvGxcWLRvsXZZ5j/f9YvV+848WLrN+g6f6iXOa5HWB9bpzV80cXQOHJLLasu48Mi/Rz8n1vgq9gMYP9KSLO907BBmPg//5Pdeg4ry+H6EPH2HOnEgy8WyqyzgtpZ9mY24OO8M5NctnNnqvKz+fFU9u/nRfE8+k3aYvO/HftSmDtucfOsvac1NOs/eCBFOltEbDr7E9O/lNW7DFYn7rswGnbDOchMt9RcwO18graqemjf9JVovbm2Rzt8dEVU8Cm9l3upedHnQZ8l6w/aHS9umzlnV5Eldomtf+k5mBK7iL7S1J9UtorVz/VZjtMrL/whRdIcwhAQlchSOgax8pwzc5o56/dlS2uqbs+3bqn2RnNcau0ndHE7hb1C2dntGt3Hugte+mmZme0xfvleTCorZ3RBrjFK7YzWtjpf9hzqRduSYpfk5x/77AxNx7hz86M2pTCnqusrNKZ5ydr+OL41fmHdOa/NeUia8+6WsLaM66UsPZdJwpkaZOuPGvmo7Z9u/mo6Bi9Fh+WLS9dW0Vzd49Tb5N8/c5DwfERg9r37WXGPTBWVVWxvr8FnTS63ppsOpKHjrMOwGnvGZNj6aKysgrFpY8UiU3UPaQ5hCGhqxB00RkHCV3jhO7Fm5ptaUnoauAK3aN5NyXFr0n2VY3Q3RDHF1KjvTVCt7yiUmeeNYXuawJCdxtH6GZcaZhCt+eiCNny0iV0/XRskyyX0H1nWZRRfhWV8gpdObZi1sdY31Sta4swH0hzCENCVyHoojMOvtC9I1vc+iB031giQeiWmK/QHbi2doRuSi0I3W+8j7LnHokUul2cwg0K3bNXilk7CV1NXluS8uuN0C2vqNQI3cD6L3TVsb/xNjyehigrr0RVVZXhgkStQZpDGBK6CkEXnXGsDU7Bmj6jsKbPKORlG/8urRDdJwewcXHL+K+yb136h/X/zTPaCMdbrN///jDwY55qZmyMYX2u51/RW/by+cts2ZU7ksTnJSLf7pMDBIsZ7E8RcUY6HzAYAwsWqA4d5/XlcDghgz137Ph5fS3WqjP3l+mI+/oXlF69zjuVk5nPxvTbx3/YGe8WwZ4ru3aDF09tH76U/273ezNDdOYfHHGKtWeeyWftWWc19e+LEbE99q1bKJ8/H+Xz5/P759YtXJ06C/dmz+XZdfYnJ39HNwPilVPWblYIa75x8R+EDBqHv3+YrP/eExjvoUv2aeUVEH6StV0+f5mtR23bsv+4cEwBm9r3o7m7jcqx7NoN1vcP71ij661p0xoHA/eBYG4G2jlePZ4i/WraruVfgdcH3yL0cwfhvMTEEttXUtprQj8pUkbJPqr+d+Fvv5HmEICErkKQ0DUO7jq6BheoNwJTV124nZ7B+ktddYH3S3Q98FZdOKl/lrYw7TRb1n1jw1p14cf5yq26wF1e7ER0mv42C9S5yZcv7HJTNKsebN/Of9iZ5ryTPfcwK0dnvLFzd/B8Bkzy1Zn/3p1HWHtOomaG0NhVFx5m52hyytbkdDz6mM565Vx1YeBkP9a8yC1U2q/hq9G1VfTuEE0fqTeWuXlKc4/u2BEtHNOATe/GLjp8uf28yC1Ucr1qm9Y4KLSaADueElcP+NMzrPZWFJDaXhn6iVZdMB9I6CoECV3j4Ando2YmdKcaL3RvGBC6BccartD9aX6g6BimCN3j0cf0t1mgzprC7nyyvEJ34GQ/nfmH7oxn7VkJf7N2Y4Xu0chUtnxqZCprX7p2n856DQnd35aJF7oDJmlW2pi4OEiaAKlG1w56ezhCN1+H0GXHpzaEbhZH6K5RVuhGhCaKz01hobt83YHaE3FS2ytDP0kpExuWLL0dJtZPQlcYEroKQULXOLwagNCd42pgmSUunA+jwWKF7qrHQ+g6OGmEbtV57dcLuBskmCR0o+QXuv7+wkL3QaZuofv9nO08HyGhu2+XRuhmxssjdI9FmS50py4LqVkFH07ZT2UUuro2FuEKXfVawzdOZmiPDydmuno9ZQOiYfh044Tug0yN0F2osNDlzpQbzE2k0K08d94ov4YgdA/siZfUT4Vpp6XnqOszj4RuvYKErkKQ0DUOT59w9uYlocvguhFCd+3Gg+LzEpFvbQrdinPaQnf8Av0CqbaFLld46xO697kbDnDiffcHX+gOmuKnM3+u0M3gCF2u0D5UB0J38lIjhO6v8gldXRuLcGe9zyerXu+4dvIsa9vmH6UV84+Ve4TrMUHo3s/IZm0LVu8VVYdUocudKTeYm0ihy91c5X5GtkG/7ARVf3OFbqWO+1d0mxUQuvo+u/T5OVWPH3eWnoSu+UBCVyFI6BpHfRW6t7hCd6U0oTtoip8oF2OE7mUzEbrlOef0njdW6MZxhG6aAkKXFVLVcIXuPQGh+20NoTt46had+XOF7pn4E5pQnHeEw/TNWFUjRuhyZ9INCd1JS4L1V1iLQpfbRzlJKuF19W+N0N26TbrQ1btVtw7fuxlZWkKJ+2DMPmjJIHQ/lSh0k8KPapWZ7rILAFR9VW0rPp1pME/1Fugu6/aztkc67l/RbdZRRmuW2cj2Sha6q1Rt4+7QSULXfCChqxAkdI2DK3Qv1COhy33/T+qM7mckdHlwhayuP5RyCV2uyDMIJ++a76TmiBS6dzOydMb7ZjZ/Z7whIoTu6SMaocud0d2/27DQTRV6R9dNI3S5M3GGhO6vRgjdTyb6sOZflwSLu/cERME4HT9a3M/pI/UM45Xjmu2w/zJB6H6ub6tuTrmSM5kAgDtcoVstlLj35Z6QI6LqFSV0f5UmdHUJL/WD3DZ/jdAtEiF01Z9/3Bld3nvpBsaU219CIu7A7njtHKS010g/9YPKhIVBBnMkodvwIKGrECR0jcNzc/0XuuoZDVGYKHSvnTyrtyz3D6rbhoYldLk/RivLllfoxsogdGu+k8oVuuyMYTVcoXvnrG6hO3pWDaH7m26hy/1a/vQRzTJm3BnlfbsMC920KM3qCimHdc/ocvtdV39WndfMrE1cHKRVBw8BQTZ5qfFCl9s+nUJ3t/brHdzXeHQJ3dkrd2vZ2Acsjk3v6iicci7rVMvF3TmjEW7zFRa6H3MeIPTlJiS8uOOpfpDjCt2bpzIMC93qB4aVHhqhy/sWQyAn9etJWq/O6Khv2dr92jnUoCz7HFum8tx5yUKX2yckdM0bEroKQULXONb7RuK6TUtct2mJvGPybYHZZ4IPGxf5+Ub7Xz+dzfrPXbNPvGN+Pus3YKqemSIO89bsZ32upWfpLXv5RAZbds0mGRbp5+TbZ4LwH1WD/SkizrgFwWyZh+e1/wj8uDBYbx36cog5lMqeOxptxAYfnLx/XbaLdyo7JZ0999eOWN65qct3s+dKMs/pjPfVbP6qC4OmbdOZ/97diaw9PUGzvBi3/r279fz6vprjcSfY8kmc1zeWrg9j7aU5mhldXf1ZmXeBtU1YYmDVBU5bP5qsEYuTnDV9U3Xhgih/7jUz1ilIy3//3iTWdiZR9UB86fhZ1ubnH6MVc6Z6tRSOzT8gTss28Dc97+hyyjksVj0IFWfksLY5q1WfDQWc+3LXrgTWt/zZVqho1Uoz3vn5QOvWqqPapjUOnDo//NVPb268WDr6s4IznpOcVcLfPyCO/3lTnWdJ86dxOkHVt1UXNH6/u6p+cLdiwyHONa97RvdqehZbJvaQ6mHrfxP9tNr36JlWuP/UM+znwOJ1mmtU6JqJ5dzjOUfTRX921ewnbp/MW6N6eHFYHKKVY81xqrpwAQ+efhaPnm0l2N/Iz0dFq1aoaKXxMzhuAmMptkzhM8+Q5hDArIVuVlYW+vfvDxsbG7Rp0wYzZ85EWVmZQb+ysjLMmDEDbdq0gY2NDfr374/sbIEnVwFI6BrHsrBMduee7Kv1Z2e0q8UPWP9f/E8YdtBRd6/Fh0WV/9n/OOvzT3Gp3rK51++yZReE6p/9FUtt7Yw2yD2BPf/gUYXW+SHrEvT6i90ZLS7nug5vYdR+IzYk8+xnCovZc+tj+D+++XazZme0ovv8zxa1ve/KGJ79jSWROvP3P6rZGS31gmaReW7921IuGmzH0bybbPnIjH9Z++8h6ay9uPSRVp7cfLi7fg3zNLwhibpsF6dw1qZve2Qhf24On7nHa/kHpV1mbWn5qj46f02zc93aKNXDRiVne94xvqla9XB3qxO7q5u63OfrVQ8bN+5qdmT72V/1UJV/Q7Nj4ZakfC2b+nqvqKzC/vQryL9xT28fqP/9ylzjvrWpGausXDOeX29MAQBsPJLL2i7dVO0y955LNM+Pex2M81M9NM3dc5q1CW1Vfv6a5vMpIPUSAKDz3IOC7VsXrRq3aUGnWNvDcu3PBgDY83chW+Z0QbFg3xniYXkF6zNhm2r8hnkmGYxzOONfwXaobf+WaP5u3HtYLjonUyDNIYzZCt3bt2+jbdu26Nu3L8LDw+Hj44MWLVpg4sSJBn0dHR3RokUL+Pj4IDw8HHZ2dmjfvj2Ki4sN+qqhi844lh7IqJdC90pRqUbobldW6I7fmsb6XCnSL3S5f9wb2hbAXKFbWqb9x2yoR6JkoXsgXSN0Y7OvCeaoL+7wGsIuvaCIPecRKyx0b93TLXTfX8FfqUGM0D3K2b6YW//W5HyD7Ui9cIstH372KmufvUsjdG/efaiVJzcfrjD6wsPwLLIuocvdHlnXA40uf24O3K2iy8pVQjeYI3TVDwPcLZrVQvcRR6BxtzDWJ3S7LxQndAevU83UXuOIGbXQ5T6A+iSoZiT9Ei+wtoLbKkHJ3e5ZXx+o//3SH2F6czPUnw8eaUTdyOoHOe/4PNZ2/tpdg35jqx8YnPaeMfg5xRW6O6qF7n/nHRJsn/rhckawRujeefBIZ2y5hO79snLWx+Ev1eYyIzYkszahLY7nc9qvfgCrWT83xzOF4nWDKZDmEMZsha6zszOaNm2KW5zt9zZu3IhGjRrhyhXh7VULCgrQqFEjbNq0ibXdunULtra2WLFihej66/KiK6+oRMHt+zhTWIzc63dxv6y83u9LviD0bL0UugW377P+EyUK3ddFCt0ftxwTLXS5f9yXHmi4Qvd+mfZsxwgv/X9s9MXfn36FPRdjhNDlzgDWFHZ/X7rNnvOK479qwRW6XPHIzbPPcuOFbgpH6J66rBG6fol6XgGohit0D535h7XP2a2ZibtarJmJ09WfpWUagTNUotDl9s1dA7NahoSuWiiHHC9gbcm5qj7K/KeEtblFqoQuV6B94y1O6Hbl5K4vx4FrVe8R8x6Cq7/tyflXc196x+cBAHwSNEK3sPq+1vUwZ4rQPX/trt5Zeq6oG+GVrJVX5j8lOv3uPtT4qWfGuZ/V6plg7Xw0/aD+FqKrU7hg+770Uj1czgzRCN0bNe4nNaGnNPf4yctFgn1niJIHj1gf9Wz11xs130KoH65qwhX6ajFes/69JzVCN72gSHROpkBCVxizFbp2dnYYOnQoz1ZUVAQLCwv4+fkJ+vn4+MDCwgJFRfyLc+jQobC3txddf21fdA8eVeDbzUfx5tJI3k2nPl6crfrvy3PCePb3XKLx8eojGLIuAcM8k9B9YQRGbEjG9z6pGOObihEbkjF+axp+3fE3pgaexIzgU5i9Kx3Tg0/ho9VxmBZ0Cs4HM+Eano01kTlwDc+GW+Q59FsVh283H8WmI3nwjs/D9OBTsFsRgwWhZ7EmMgf706/AN/ECth+9BO/4PHSbEoilH4zD0g/GYXVwKsLPXkXQscvYe7IQSbk38Pel2zhdUIz0giKc+/cO8m/cw427D3HnwSM8LK9AZaVuIc+NiyLjP3Au5RWy/rM3HzHsoKaoiPWznyNutYaf10exPv9c/Edv2eysS2zZVUFH9ZY1Nt9uUwIFixnsTxFxvlp+kC1z798bWufHrTnMnn9446bWeX05HIjPYM/FpwosfaSDshu3WL/RK/kbcJxMv8Ce8zvwN+/cePdI9tzNAs1rAtx++NgplOdjP2e3zvwDD6ez9qN/awT1yfR81r49PN1gW46eyGXLH07UvOu9zD+JtRdc0Dzs6+rPO1evs7Zv/9QvALltffd3zfu8jus013PxFT0PHQLXzMjlYVrXyd7Ys6wt5YSqjzIyLrI2zz2qmbkSTv7j3SO16hm8ZL+W7b1Zwu8iV92+zZYb5qwSMwUXrrC26ZvitHL5K0z1nvX2cM24XjhfAAD4YU0Ea6u6fVv3OHBy6zVN+AeBZ86q6vQY6Kjlp+5PXeO59eAp1nbm7EWdfsVXNH6O61Q/9HPZkazVnppkZmr6QX3NvjdrJ6993D4d7aq65xb8lcDargh8BkYkZrFljp+6IPqzq/LWbVyZuxhlLiuAoiIUX7nG+v28XtU2h7Wa+/nO1etAURHSp8zFjhGT8O/Fq1rtv37pqs76wxM0OZ46na87oaIiwNVVdag/B2rajChTOG8eCV0BzFbotmrVCnPnztWyt2vXDrNmzRL0mzlzJtq3b69lnzNnDtq0aSO6fqWFbkVlFUoePMKNuw9RWFTKe6+xIR7cXxzbjfeWFKPTbP1xR8zYhg9cYzHALR7dFoTDfmUMvvRKwstzwvDx6iP4xvsovvNJxfc+qRjrm4of/I7h61nbeHn9uCUNjluPY+L2E5gS8DemB5/CrJ3pmLP7NGbvOo2ZIacwb88Z3goKduO9sSD0LBaEnsWifRmYu+c0ZgSfgsvBLLgczMLyQ1mYu+c0L9c/Vu7B0gMZ7APE4v0ZmLfnDP6MyIbzwUze0k12473hHnUO62POCx7ros8JHu5R51RLlHHirYnM0SrjHnWOl+PmLZFwizyHFYey4B51Dmsic1S7tHHirAzPglvkObiGZ2NZWCYWhJ7lxfD0CdfKlXt+tddBNof1MefhcjCLd37rtiie7+hZ/rxfl3vEnodnbC684/PgFZcLz9hcbDySiw1xqmNB6FmsjzmPzX6HeXl7xeXCI/Y8PGLPq361X33uq9+34c+IbCzal4HZu9J5uazxOoj1MSqfLVujePHUds/YXK381f3Lzd1xQRBWhmdh9eEc3liP/H0bPGM1uXnGqtrkfDATXnG5WBd9DqM41+yP8wPYh09uvUvX7sPaqHNa9s1bInWO49oo1RgsCD3L5usWeQ5/RmTzlga0G++NVYdztOKu9jrI1rcqIhsrDmXBOSwTS/ZnqFYN4fivOJSldZ24bzyEhfv4tgkLg7AsLBO/LAri+S/enwFn9/0827w9Z7B5SyTP5nIwC+s2abeTe7hX/9djM7+Nqw/n4EfOqhBqG3cVjk8n+cIt8hxvObmZy3dp9c1670NYfTiHZ/PZEgnfvyK14q+JVPXt6sM5WBt1Dqtq+G3wiYBPjXauOpzDWynBbrw3/ozIVm1CUW2bvDQY3jXugVWHc+DqGaY1NjU/p/6MyMafEdlYxfkvtx/Ufc3189gcjhXr+TktC8vklZn35164hqviOR/MVMU+nMPbUGbc/ACte801PBuu4dlYGZ7F+q+KyFZt8VxdbpPvYbjUuEZWhvNzXOlxAJt8I7Ric8tMWhLMWynCbrw3Zu86jSG//aXz75lzWKbmjzitulBrmK3QtbKygqurq5a9S5cucHBwEPT76aef0KVLFy27q6srnnjiCUG/kpISFBYWskdaWpqiF11M1jWdYq+LUziC0y4j++odZF0twcHT/+Bo3k3EZF2Dd3wedqRegmdsLralXIRnbC5cDmZhlfpDMyIbLgezMC3oFBbty8D8vWewaF8GZoacwm9BJzE18CR+3fE3Jmw7jn6r4tBxluqHNl9vTMEIr2R8suYIe/zvz1h0nKX62l79/+rjrepZ51fmHMTbyyLRf1WcalH66pv3o1986o2Aluovxc8YHzkeDKTEM1ROTBxTY+g7r8R4STknp4+xbZIjvhzXoqnXlNi85LaJzVFpm9Tc5KxPap/JWZ+U9srVT0q0o0L97SMJ3VqDhG4NpArdBQsWgKm+0LiHUhdd0vkbWjfyO8uiBF/gr/fouKErKqvwsLwC98vKUVz6CFeLHyDjSgmyr95B0vkbOJp3E8cv3kZS7g2En72KA+n/sDN3y8IysSUpH4EBMWxcj82a2cNJO/7GnN2nseJQFn7ZfgJTA09i8f4MLNqXgYX7VLOvTnvPYLWXZrZp7caDmLfnDGbvSseM4FOYGngSE7efwIRtx/HTX2kY7pmEH7ekYZzfMSxyC2X9Zi7fhbG+qlni73xS8e3mo/jMPR4fuMbiq43JGLkhGaO9U3jrjs5cvgujvVPwpVcS+q6MwfsrovH5+kQMXpeArzemYIbLLrbseKdADFwbj4Fr4zHIPUHrGLxO+xjCOd5ZFsWbnZqwMAifr0/UivHOsijeblcTFgah/6o4DKnO6/P1ibyZnJ/mB7J1femVhNHeKRjrm6paj7O6jINToFa+3PVTv5ntj49Wx2Hg2nj0do5Cb+cojJmzgz3/4/wAfOYej8/c4/HJmiO8WdEf5gVggJvK3n9VHD5ZcwSfusXj49VH8PHqI3hraSQ+Wh2HT93iMXauJuaYOTvYsgPc4nnr/jo4BWK4ZxK+80mF49bjvLVBf5qvGocBbvG8/vxpfiAGuMXj0+qDu+MXN3/uTNXUZSEYsSEZQz0SeWt7/jg/gM1LHfONJZp21Iw/bNpWvOcSjYFr43nrE/8wL0A1/uv58X9eFIQh6xMxnlN2wsIgDF6XgB6LIjBkneZ6GLI+EcM9k3gzzj/ND8QwzyR8XiPGeKdADKm+RoZ7JrHX/Hc+qfh9hWbG/Ps52zFiQzLG+KbyvhWZsDAI3/mk8u6riYuDMNo7BTOXa+6F0bP88ebSSF4fjF8QhCHrEvD9nO28dn61MZl3vU5YGKS5L9Yn8trKbaPjAlUfcW0/LwrCFx6JcOSMobrcz4v4tvdcorXy+6LGOE9YGMS7HiYsVJX5fH0ihqxPxBceiWye3/2xnReLG+f7Odsx1CORN+v9y6IgDPdM4t3Lvy4J5pUZO3eH1rU3cXEQRmxI5pX7ZrY/vvRKwnDPJAzz1PyX6zfeKRAjvJJ57Rk0xQ8DJ/ux/560JBijvfmfa5OWBONLryQM9UjECK9kDPNM0spp/IIgXv/+NF91f47wSsYIr2TWf6gHf7wmLg7ifY5MWRqCEV7JvD6ZuDiI9+/xToH40itJtQ5xtc1p1V4sWhPKy/n1xYd5nxlcofuFR6LmbzQJ3VrDbIVubb+6UNszuiUPHuHEpds4e6UY56/dweVb9wWXY2kQiFlguy7iSvWX4meMj9z9JTaeoXJSF0qX67wS4yXlnJw+xrZJjvhyXIumXlNi85LbJjZHpW1Sc5OzPql9Jmd9UtorVz/VZjtMrJ+ErjBMXSegFHZ2dhg2bBjPVlxcLPrHaDWXEhs2bFi9/jFag0du4SZXXCWEkxw+cveXqaLEmDimxpAqSvUhNaYUkSeHEJXSFlMFpVz1meJfGzaxOSptU1LAyekntb/kiq1kP9VmO0ysn4SuMExdJ6AUzs7OaNasGW/1BG9vb9HLi23evJm13b59G02bNm0wy4s1SOQWbnLFVUI4yeEjd3+ZKkqMiWNqDKmiVB9SY0oReXIIUSltMVVQylWfKf61YRObo9I2JQWcnH5S+0uu2Er2U222w8T6SegKw9R1Akqh3jDC3t4eERER8PX1RcuWLbU2jPjwww/x4Ycf8myOjo5o2bIlfH19ERERAXt7e9owQmnkFm5yxVVCOMnhI3d/mSpKjIljagypolQfUmNKEXlyCFEpbTFVUMpVnyn+tWETm6PSNiUFnJx+UvtLrthK9lNttsPE+knoCsPUdQJKkpmZiX79+qFJkyZo3bo1ZsyYobUFsL29vdYrCQ8fPsT06dPRunVrNGnSBP3790dWVhaMgYSukeTlAba2qiMvr/7Eleovxc8YH7n7S2w8Q+XExDE1hr7zSoyXlHNy+hjbJjniy3EtmnpNic1LbpvYHJW2Sc1Nzvqk9pmc9Ulpr1z9VJvtMLH+wiZNSHMIYNZCty4hoUsQBEEQRG1AmkMYEroKQRcdQRAEQRC1AWkOYUjoKgRddARBEARB1AakOYQhoasQdNEZSXEx4OmpOoz40Z/icaX6S/Ezxkfu/hIbz1A5MXFMjaHvvBLjJeWcnD7GtkmO+HJci6ZeU2LzktsmNkelbVJzk7M+qX0mZ31S2itXP9VmO0ysv9DZmTSHACR0FYKErpHIvYqAXHGV+BW/HD5y95epv5A3Jo6pMaSukKAPqTGlrDggx6oIUtpi6uoGctVnin9t2MTmqLRNydUE5PST2l9yxVayn2qzHXJNsdoAABSKSURBVCbWT6suCMPUdQLmCgldI5FbuMkVVwnhJIeP3P1lqigxJo6pMaSKUn1IjSlF5MkhRKW0xVRBKVd9pvjXhk1sjkrblBRwcvpJ7S+5YivZT7XZDhPrJ6ErDFPXCZgrJHSNRG7hJldcJYSTHD5y95eposSYOKbGkCpK9SE1phSRJ4cQldIWUwWlXPWZ4l8bNrE5Km1TUsDJ6Se1v+SKrWQ/1WY7TKyfhK4wTF0nYK6Q0DUSuYWbXHGVEE5y+MjdX6aKEmPimBpDqijVh9SYUkSeHEJUSltMFZRy1WeKf23YxOaotE1JASenn9T+kiu2kv1Um+0wsX4SusIwdZ2AuUJC10jkFm5yxVVCOMnhI3d/mSpKjIljagypolQfUmNKEXlyCFEpbTFVUMpVnyn+tWETm6PSNiUFnJx+UvtLrthK9lNttsPE+knoCsPUdQLmCgldI5FbuMkVVwnhJIeP3P1lqigxJo6pMaSKUn1IjSlF5MkhRKW0xVRBKVd9pvjXhk1sjkrblBRwcvpJ7S+5YivZT7XZDhPrJ6ErDFPXCZgrJHSNRG7hJldcJYSTHD5y95eposSYOKbGkCpK9SE1phSRJ4cQldIWUwWlXPWZ4l8bNrE5Km1TUsDJ6Se1v+SKrWQ/1WY7TKyfhK4wTF0nYK5cunQJDMMgLS0NhYWFdBg6EhNRWH2zFiYm1p+4Uv2l+BnjI3d/iY1nqJyYOKbG0HdeifGSck5OH2PbJEd8Oa5FU68psXnJbRObo9I2qbnJWZ/UPpOzPintlaufarMdJtafxqiE7qVLl+pa/tQ7SOgqRFpaGpjqC48OOuiggw466KBD6SMtLa2u5U+9g4SuQpSVlSEtLQ2XLl0SP6tk5KEW0zRrXP8OGpv6fdD41O+Dxqf+HjQ29fO4dOkS0tLSUFZWVtfyp95BQrcBU1hI7wHXV2hs6jc0PvUbGp/6C40N0dAgoduAoQ+c+guNTf2Gxqd+Q+NTf6GxIRoaJHQbMPSBU3+hsanf0PjUb2h86i80NkRDg4RuA6akpAQLFixASUlJXadC1IDGpn5D41O/ofGpv9DYEA0NEroEQRAEQRCEWUJClyAIgiAIgjBLSOgSBEEQBEEQZgkJXYIgCIIgCMIsIaFLEARBEARBmCUkdBsgWVlZ6N+/P2xsbNCmTRvMnDmTdkOpA4KDgzFkyBC0b98eNjY26NGjB/z8/FBVVcUrt3nzZrzyyito3Lgxunfvjv3799dRxo8vd+/eRfv27cEwDE6ePMk7R+NTN1RUVGDlypXo3LkzrK2t0a5dOzg6OvLKVFVVwcXFBR06dMCTTz6J3r17IyUlpY4yfnwIDQ3F22+/jaZNm+K5557DyJEjceHCBa1ydO8QDQESug2M27dvo23btujbty/Cw8Ph4+ODFi1aYOLEiXWd2mNH79698fXXXyMwMBDR0dGYPXs2LC0tsXTpUrZMQEAALCwsMG/ePMTExMDR0RFWVlb0x7qW+f3339GmTRstoUvjU3eMGTMGbdu2haenJ+Li4rB9+3ZMnz6dV8bFxQXW1tZYvXo1oqKiMHToUDRr1gx5eXl1lLX5ExsbC0tLS4wdOxaRkZEIDAxE586d0blzZzx48IAtR/cO0VAgodvAcHZ2RtOmTXHr1i3WtnHjRjRq1AhXrlypw8weP27cuKFlc3BwwFNPPcX+u3Pnzhg9ejSvzLvvvosBAwYonh+hIisrC7a2ttiwYYOW0KXxqRsiIiJgZWWFjIwMwTIPHjxA8+bNMWfOHNZWVlaGjh074ueff66NNB9LHB0d8eKLL/K+mYqJiQHDMEhOTmZtdO8QDQUSug0MOzs7DB06lGcrKiqChYUF/Pz86iYpgsXT0xMMw6C0tBR5eXlgGAahoaG8MmvXroW1tTUePnxYR1k+XvTv3x/Tp09HbGwsT+jS+NQdI0eOxMcff6y3THR0NBiGQXp6Os/+22+/oWPHjgpm93gzbtw4dO/enWc7ceIEGIZBUlISALp3iIYFCd0GRqtWrTB37lwte7t27TBr1qw6yIjgMnr0aPaPcFhYGBiGwfnz53llDh8+DIZhkJWVVQcZPl6EhISgTZs2KCkp0RK6ND51xwsvvIBff/0VkydPRvPmzfHkk0/is88+470H6uHhAQsLC63fH2zatAkWFhYoLS2t7bQfC+Lj42FlZQUPDw8UFxcjLy8Pn3zyCd58801UVlYCoHuHaFiQ0G1gWFlZwdXVVcvepUsXODg41EFGhJqEhARYWlrC3d0dAODv7w+GYbRecUhLS+PNjhDKcP/+fXTo0AE+Pj4AoCV0aXzqDmtrazRt2hS9e/dGWFgYgoOD8dJLL+HVV19FeXk5AGDp0qWwtbXV8g0JCQHDMPSqloLs27cPTZs2BcMwYBgGvXr1wrVr19jzdO8QDQkSug0MErr1k4KCArRr1w79+vVjZz3oj0Hd8scff+DNN99k3zUkoVt/eOKJJ2BjY8Pre/XX4zt37gRAQreuSExMRMuWLTFt2jTExMQgJCQE3bt3x1tvvcW+kkD3DtGQIKHbwKBXF+ofRUVF6Nq1K7p164bi4mLWTl/v1R0XL16EtbU1wsLCUFRUhKKiIuzfvx8MwyA+Ph53796l8alDWrdujXfeeUfL3qJFCyxevBgAvbpQV7zxxhsYMWIEz1ZQUAALCwv22xG6d4iGBAndBoadnR2GDRvGsxUXF9OP0eqI0tJS9OnTBx06dEBhYSHvnPoHG/v27ePZ3d3dYW1tTWsfK4h69lbosLe3p/GpQ+zt7QWFrnp5PvWP0U6fPs0rM23aNPoxmoI0adIEy5Yt07K3atWKXQGD7h2iIUFCt4Hh7OyMZs2aoaioiLV5e3vT8mJ1QHl5OQYNGoSnn35acJmkzp0749tvv+XZ+vTpQ0vwKExRURFiY2N5x5o1a8AwDLy9vdnXF2h86gZXV1c0adIE169fZ23qr73Vmw6olxebN28eW+bRo0fo1KkTLS+mIP/973+1JlMuXrwICwsLbNq0ibXRvUM0FEjoNjDUG0bY29sjIiICvr6+aNmyJW0YUQc4ODiAYRisWrUKKSkpvEP9LtuOHTtgYWEBJycnxMbGYsKECbCysuKtR0nUDjXf0QVofOqKkpISvPDCC3j77bcRGhqKgIAAvPjii3jrrbd467e6uLigcePGcHNzQ3R0NIYPH04bRiiMm5sbGIbB5MmT2Q0junbtirZt2+L27dtsObp3iIYCCd0GSGZmJvr164cmTZqgdevWmDFjBn1VVAd07NhR8Kvx/Px8ttzmzZvx8ssvw9raGt26daNtMusIXUIXoPGpK3JzczFw4EDY2tqiRYsWGDVqFP79919emaqqKjg7O+P5559H48aN8c4775CQUpiqqip4eXmhe/fusLW1xXPPPYehQ4ciOztbqyzdO0RDgIQuQRAEQRAEYZaQ0CUIgiAIgiDMEhK6BEEQBEEQhFlCQpcgCIIgCIIwS0joEgRBEARBEGYJCV2CIAiCIAjCLCGhSxAEQRAEQZglJHQJgiAIgiAIs4SELkEQBEEQBGGWkNAlCIIgCIIgzBISugRBEARBEIRZQkKXIAiT2bp1K9544w00a9YMzZs3R5cuXTBhwgTcvXtX1noCAgLg5+cn2m4KY8aMQY8ePWSNWd+Qq43BwcEYMmQI2rdvDxsbG/To0QN+fn6oqqrSWf748eP48MMPYWNjgw4dOsDHx8dgHVVVVXj99dexYcMG1lZQUIDBgweje/fu6NatG6Kiothzjo6O+OGHH0xuG0EQDRsSugRBmMSKFStgaWmJGTNmIDw8HGFhYXB2dsarr76KgoICWev6/PPPYW9vL9puCrm5uTh9+rSsMesbcgnd3r174+uvv0ZgYCCio6Mxe/ZsWFpaYunSpVplExISYGtri5kzZyI2NhYTJkyApaWlwb7euXMn2rZti4cPHwIAKisr0bNnTxw6dAgAkJ6ejk6dOrHlc3NzYW1tjZycHJPbRxBEw4WELkEQJtG+fXs4ODjoPCc0oyeV2hC6lZWVrJgyd+QSujdu3NCyOTg44KmnnuLZSktL0aFDB8yZM4e1VVRUoFWrVpg/f77eOvr27Yvff/+d/feBAwcwePBg9t/l5eWwtbXl+fzvf//DlClTjGoLQRDmBQldgiBMwsbGBk5OTgbLJSYmol+/fmjatCmaNWuGPn36IDExEQCQnJyMQYMG4bnnnoOtrS169eqFkJAQnv+YMWPAMAzvWLBggaBdTUJCAj744APY2NigZcuWGDNmDG7fvs2L26NHD+zfvx9du3aFlZUVDh06pCUC1f+OiIhAly5dYGtri759++LcuXNabV23bh2ef/552NjYYMCAAUhISADDMNizZ49g/4jpA2PyEJODLqFrqL/E4unpCYZhUFpaysupZcuWuHfvHq9sjx498P333wvGunDhAiwsLHDs2DHW5uLigrlz57L/PnHiBN555x2tHJ599lmUl5cbnT9BEOYBCV2CIEzCzs4OzzzzDHx8fHDt2jWdZY4cOYInnngCH3zwAYKDgxEeHo5FixYhMDAQgOod2xUrVuDgwYOIiorC3LlzYWlpiX379rExcnNz0bdvX/Tq1QspKSlISUlBQUGBoB1QiWtra2sMGzYMBw4cwPbt29GxY0d88sknbNwxY8bg6aefxssvv4ytW7ciKioKFy9e1Cl0n332WfTs2RNBQUHYs2cPOnbsiLfeeovX1t27d4NhGDg6OiIiIgKLFi1Cp06dDApdMX0gNg+xOdRso5j+Esvo0aPRsWNHnu3tt9/GmDFjUF5ezjteeeUV/Pjjj4KxvL298eSTT/IE67Zt2/DFF18AAO7evQt7e3utB4NTp06BYRgcP37c6PwJgjAPSOgSBGESZ86cwcsvv8zOpnbu3BkzZszAv//+y5Z599130a1bN1RUVBiMV1lZifLycowcOZL31TRg/KsL77//Pvr27cuzpaamgmEYJCUlAdDMFNcUQ7qErqWlJe+dzy1btoBhGN67yG+++SY+/vhjXqzp06cbFLpc9PWBmDzE5lCzjWL6SwwJCQmwtLSEu7s7aysuLoalpaXW7Lv6WLRokWC88ePHo2fPnjxbeXk5vvnmG7z22mt47bXX4OXlpeVXXl6ORo0awdPTU3TuBEGYFyR0CYIwmbKyMoSFhWHKlCno2bMnGIZB69atUVBQgHv37sHS0hKrVq0S9L916xYmTpyIDh06oFGjRqz4+c9//sMrZ4zQvX//Pho1aoR169ZpzSA2b94cbm5uAFRir02bNloxdQndmjOUahGYkpICQCOs1q9fzysXHx9vUOiK7QNDeRiTA7eNYvvLEAUFBWjXrh369euHyspK1h4XFweGYbB7926kpaWxh1qk15y55jJ48GD0799fVP01eeaZZ0S9WkMQhHlCQpcgCNkJDw9Ho0aNMHXqVBQUFIBhGAQEBAiWHzRoEFq3bo3169cjJiYGaWlpGDFihJagM0boFhYWCs4eMgyD6dOnA1CJve7du2vFFHpHl8vJkyfBMAxiY2MBAFevXgXDMAgKCuKVy87ONih0xfaBoTyMyYEbS2x/6aOoqAhdu3ZFt27dUFxczDu3bds2MAyDoqIint3V1RXW1tZa5bl89NFH+OyzzwzWr4t27drxfsRGEMTjBQldgiAU4fXXX8enn35qcEb3wYMHsLS01JqB/OKLL0wSuvfu3YOFhQWcnJx4M4jq4/LlywCEVx6QInSlzuga0weG8pA6oyu2v4QoLS1Fnz590KFDBxQWFmqd9/PzA8MwWmsr9+zZE8OHD9cb+6uvvkKfPn30lhHCxsYGy5cvl+RLEETDh4QuQRAmwX0XV01paSlatWqFsWPHAlC9o9ujRw/eV9lqioqKwDAMNm3axNpu3ryJpk2baom8ESNGaP2yXp/9vffew8iRI/XmL6fQBVTvx3700Ue8ctOmTdMrdI3pAzF5iM2hZiwx/aWL8vJyDBo0CE8//TQyMjJ0lomJidF6FzowMBBWVlY4deqU3vhOTk5o166d0Xldv36dfV2CIIjHExK6BEGYRKtWrTBu3DgEBQUhPj4egYGB6NOnD5544gkcPXoUgGbVhQ8//BAhISE4fPgwli1bxq668MYbb6BTp07YuXMndu3ahV69eqFTp05aIm/+/PmwsbHBnj17kJaWhitXrui1JyUloXHjxhg1ahT27NmDmJgY/PXXXxg1ahQruOQWurt27eKteLB48WJ07NgRDMMgNDRUsB/F9oGYPMTmUDOWmP7ShYODAxiGwapVq9iVL9SHek3isrIyPP/88+jduzciIyPh5uYGGxsb/Pnnn4Jx1URERIBhGFy9etVgWS4HDx4EwzA6H8YIgng8IKFLEIRJeHh44JNPPkG7du1gZWWFp556Cp9++ikSEhJ45Y4cOYK+ffuiSZMmaN68Od5//30kJycDAHJycti1Wzt27Ii1a9diypQpWiLv2rVr+Pzzz9GyZUveerlCdgA4duwYBgwYgObNm6NJkyb4z3/+g0mTJrFLocktdAHA3d0d7du3x5NPPon+/fsjNDQUDMMgLi5OsB/F9oHYPMTkoCuWof7ShVpE6zry8/PZcqmpqejRowcaN26MLl26wN/fXzAml7KyMjzzzDPw9fUVVV7NpEmTYGdnZ5QPQRDmBQldgiAIhVmzZg0aNWqEmzdvPtY5mMLUqVO1XsfQR0VFBdq2bYstW7YomBVBEPUdEroEQRAycv36dUydOhWhoaGIiorCkiVLYGNjgzFjxjxWOchNYWEhbGxscPbsWVHl/f398dJLL9GuaATxmENClyAIQkaKi4sxYMAAPPvss7CyskL79u0xbdo0PHjw4LHKQQmCgoIQHR0tqqy/vz+OHDmicEYEQdR3SOgSBEEQBEEQZgkJXYIgCIIgCMIsIaFLEARBEARBmCUkdAmCIAiCIAizhIQuQRAEQRAEYZaQ0CUIgiAIgiDMEhK6BEEQBEEQhFlCQpcgCIIgCIIwS0joEgRBEARBEGbJ/wNwtEEpn7eSaQAAAABJRU5ErkJggg==\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the integrated pattern vs expected peak positions:\n",
    "\n",
    "LaB6_new = get_calibrant(\"LaB6\")\n",
    "LaB6_new.wavelength = hc/gonioref0.param[-1]*1e-10\n",
    "p = jupyter.plot1d(res_mg, calibrant=LaB6_new)\n",
    "p.figure.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Peak profile function based on a bilinear interpolations: \n",
    "\n",
    "def calc_fwhm(integrate_result, calibrant, tth_min=None, tth_max=None):\n",
    "    \"calculate the tth position and FWHM for each peak\"\n",
    "    delta = integrate_result.intensity[1:] - integrate_result.intensity[:-1]\n",
    "    maxima = numpy.where(numpy.logical_and(delta[:-1]>0, delta[1:]<0))[0]\n",
    "    minima = numpy.where(numpy.logical_and(delta[:-1]<0, delta[1:]>0))[0]\n",
    "    maxima += 1\n",
    "    minima += 1\n",
    "    tth = []\n",
    "    FWHM = []\n",
    "    if tth_min is None:\n",
    "        tth_min = integrate_result.radial[0]\n",
    "    if tth_max is None:\n",
    "        tth_max = integrate_result.radial[-1]\n",
    "    for tth_rad in calibrant.get_2th():\n",
    "        tth_deg = tth_rad*integrate_result.unit.scale\n",
    "        if (tth_deg<=tth_min) or (tth_deg>=tth_max):\n",
    "            continue\n",
    "        idx_theo = abs(integrate_result.radial-tth_deg).argmin()\n",
    "        id0_max = abs(maxima-idx_theo).argmin()\n",
    "        id0_min = abs(minima-idx_theo).argmin()\n",
    "        I_max = integrate_result.intensity[maxima[id0_max]]\n",
    "        I_min = integrate_result.intensity[minima[id0_min]]\n",
    "        tth_maxi = integrate_result.radial[maxima[id0_max]]\n",
    "        I_thres = (I_max + I_min)/2.0\n",
    "        if minima[id0_min]>maxima[id0_max]:\n",
    "            if id0_min == 0:\n",
    "                min_lo = integrate_result.radial[0]\n",
    "            else:\n",
    "                min_lo = integrate_result.radial[minima[id0_min-1]]\n",
    "            min_hi = integrate_result.radial[minima[id0_min]]\n",
    "        else:\n",
    "            if id0_min == len(minima) -1:\n",
    "                min_hi = integrate_result.radial[-1]\n",
    "            else:\n",
    "                min_hi = integrate_result.radial[minima[id0_min+1]]\n",
    "            min_lo = integrate_result.radial[minima[id0_min]]\n",
    "            \n",
    "        f = interp1d(integrate_result.radial, integrate_result.intensity-I_thres)\n",
    "        try:\n",
    "            tth_lo = bisect(f, min_lo, tth_maxi)\n",
    "            tth_hi = bisect(f, tth_maxi, min_hi)\n",
    "        except:\n",
    "            pass\n",
    "        else:\n",
    "            FWHM.append(tth_hi-tth_lo)\n",
    "            tth.append(tth_deg)\n",
    "    return tth, FWHM\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Peak error:\n",
    "\n",
    "def calc_peak_error(integrate_result, calibrant, tth_min=10, tth_max=95):\n",
    "    \"calculate the tth position and FWHM for each peak\"\n",
    "    peaks = find_peaks_cwt(integrate_result.intensity, [10])\n",
    "    df = numpy.gradient(integrate_result.intensity)\n",
    "    d2f = numpy.gradient(df)\n",
    "    bad = d2f==0\n",
    "    d2f[bad] = 1e-10\n",
    "    cor = df / d2f\n",
    "    print((abs(cor)>1).sum())\n",
    "    cor[abs(cor)>1] = 0\n",
    "    cor[bad] = 0\n",
    "    got = numpy.interp(peaks-cor[peaks], \n",
    "                       numpy.arange(len(integrate_result.radial)), \n",
    "                       integrate_result.radial)\n",
    "    mask = numpy.logical_and(got>=tth_min,\n",
    "                             got<=tth_max)\n",
    "    got = got[mask]\n",
    "    target = numpy.array(calibrant.get_2th())*integrate_result.unit.scale\n",
    "    mask = numpy.logical_and(target>=tth_min,\n",
    "                             target<=tth_max)\n",
    "    target = target[mask]\n",
    "    print(len(got), len(target))\n",
    "    d2 = distance_matrix(target.reshape(-1, 1 ),\n",
    "                         got.reshape(-1, 1), p=1)\n",
    "    \n",
    "    return target, target-got[d2.argmin(axis=-1)]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "29209\n",
      "81 60\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(*calc_fwhm(res_mg, LaB6_new), \"o\", label=\"FWHM\")\n",
    "ax.plot(*calc_peak_error(res_mg, LaB6_new), \"o\", label=\"offset\")\n",
    "ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "ax.set_xlabel(res_mg.unit.label)\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Module 1 \n",
    "\n",
    "We can apply the same procdure for the second module ... and try to rationalize the procedure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "module_id = 1\n",
    "name = ds_names[module_id]\n",
    "ds = data[name]\n",
    "zero_pos = 64\n",
    "frame_start = 103\n",
    "frame_stop = 123"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 0 geometries labeled: .\n"
     ]
    }
   ],
   "source": [
    "param1 = {\"dist\": 0.72, \n",
    "          \"poni1\": 640*50e-6, \n",
    "          \"poni2\": 4e-3, \n",
    "          \"rot1\":0, \n",
    "          \"offset\": -get_position(zero_pos), \n",
    "          \"scale\":1, \n",
    "          \"nrj\": nrj}\n",
    "\n",
    "#Lock enegy for now and a couple of other parameters\n",
    "bounds1 = {\"nrj\": (nrj, nrj),\n",
    "           \"dist\": (0.7, 0.8),\n",
    "           \"poni2\": (4e-3, 4e-3),\n",
    "           \"rot1\": (0,0),\n",
    "           \"scale\":(1,1), }\n",
    "\n",
    "gonioref1 = GoniometerRefinement(param1, \n",
    "                                 get_position, \n",
    "                                 trans, \n",
    "                                 detector=modules[name], \n",
    "                                 wavelength=wl, \n",
    "                                 bounds=bounds1\n",
    "                                 )\n",
    "print(gonioref1)\n",
    "goniometers[name]=gonioref1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 20 geometries labeled: data_03_0103, data_03_0104, data_03_0105, data_03_0106, data_03_0107, data_03_0108, data_03_0109, data_03_0110, data_03_0111, data_03_0112, data_03_0113, data_03_0114, data_03_0115, data_03_0116, data_03_0117, data_03_0118, data_03_0119, data_03_0120, data_03_0121, data_03_0122.\n",
      "1.4524700202830549e-06\n"
     ]
    }
   ],
   "source": [
    "#Exctract frames with peak#0\n",
    "for i in range(frame_start, frame_stop):\n",
    "    cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "    peak = peak_picking(name, i)\n",
    "    if len(peak)!=1: \n",
    "        continue\n",
    "    cp.append([peak[0]], ring=0)\n",
    "    img = (ds[i]).reshape((-1,1))\n",
    "    sg = gonioref1.new_geometry(\"%s_%04i\"%(name,i), \n",
    "                                image=img, \n",
    "                                metadata=i, \n",
    "                                control_points=cp, \n",
    "                                calibrant=LaB6)\n",
    "    sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "\n",
    "print(gonioref1)\n",
    "print(gonioref1.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 1.4524700202830549e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.72000000e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.3431861472723482e-11\n",
      "     jac: array([ 1.37377624e-07,  1.03462536e-07,  2.38592839e-09, -2.23238045e-09,\n",
      "        9.89688559e-10,  1.85837277e-07, -5.81633804e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20006378e-01,  3.28683965e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.71999891e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.3431861472723482e-11\n",
      "GonioParam(dist=0.7200063780313144, poni1=0.03286839651397956, poni2=0.004, rot1=0.0, offset=-77.19998908850266, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03286839651397956\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20006378e-01,  3.28683965e-02,  4.00000000e-03,  0.00000000e+00,\n",
       "       -7.71999891e+01,  1.00000000e+00,  1.70270825e+01])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref1.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Number of peaks found and used for refinement\n",
      "1183\n",
      "Residual error before fitting:  6.334769973618362e-07\n"
     ]
    }
   ],
   "source": [
    "#Exctract all frames with peak>0\n",
    "tths = LaB6.get_2th()\n",
    "#print(tths)\n",
    "for i in range(frame_stop, ds.shape[0]):\n",
    "    frame_name = \"%s_%04i\"%(name, i)\n",
    "    if frame_name in gonioref1.single_geometries:\n",
    "        continue\n",
    "    peak = peak_picking(name, i)\n",
    "    ai=gonioref1.get_ai(get_position(i))\n",
    "    tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "    tth_low = tth[20]\n",
    "    tth_hi = tth[-20]\n",
    "    ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "    valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "    cnt = valid_peaks.sum()\n",
    "    if (len(peak) ==  cnt) and cnt>0:    \n",
    "        cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "        #revert the order of assignment if needed !!\n",
    "        if tth_hi < tth_low:\n",
    "            peak = peak[-1::-1]\n",
    "        for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "            cp.append([p], ring=r)\n",
    "        img = ds[i].reshape((-1,1))\n",
    "        sg = gonioref1.new_geometry(frame_name, \n",
    "                                    image=img, \n",
    "                                    metadata=i, \n",
    "                                    control_points=cp, \n",
    "                                    calibrant=LaB6)\n",
    "        sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "        #print(frame_name, len(sg.geometry_refinement.data))\n",
    "\n",
    "print(\" Number of peaks found and used for refinement\")\n",
    "print(sum([len(sg.geometry_refinement.data) for sg in gonioref1.single_geometries.values()]))\n",
    "print(\"Residual error before fitting: \", gonioref1.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 6.334769973618362e-07\n",
      "[ 7.20006378e-01  3.28683965e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.71999891e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.3797542164386038e-07\n",
      "     jac: array([-4.62580205e-07,  2.40834463e-08,  5.10766142e-06, -3.67570741e-06,\n",
      "        1.35589318e-11,  2.65546301e-04,  1.99388955e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20006340e-01,  3.33754761e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.71999827e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.3797542164386038e-07\n",
      "GonioParam(dist=0.7200063395001164, poni1=0.033375476115602126, poni2=0.004, rot1=0.0, offset=-77.19998271232215, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03286839651397956 --> 0.033375476115602126\n",
      "Cost function before refinement: 1.3797542164386038e-07\n",
      "[ 7.20006340e-01  3.33754761e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.71999827e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 8.828686563664207e-10\n",
      "     jac: array([ 6.56076518e-08,  6.55451977e-07, -1.75522725e-07,  1.26240119e-07,\n",
      "        7.93555705e-09,  2.91447578e-07,  1.05708096e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 117\n",
      "     nit: 13\n",
      "    njev: 13\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20682081e-01,  3.36782425e-02,  4.05801126e-03, -4.44860018e-05,\n",
      "       -7.71999788e+01,  9.98967223e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 8.828686563664207e-10\n",
      "GonioParam(dist=0.7206820809610033, poni1=0.033678242508301, poni2=0.00405801125545738, rot1=-4.448600179438364e-05, offset=-77.19997879310895, scale=0.9989672227193093, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9989672227193093\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20682081e-01,  3.36782425e-02,  4.05801126e-03, -4.44860018e-05,\n",
       "       -7.71999788e+01,  9.98967223e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref1.refine2()\n",
    "gonioref1.set_bounds(\"poni1\", -1, 1)\n",
    "gonioref1.set_bounds(\"poni2\", -1, 1)\n",
    "gonioref1.set_bounds(\"rot1\", -1, 1)\n",
    "gonioref1.set_bounds(\"scale\", 0.9, 1.1)\n",
    "gonioref1.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "area_pixel=0.04011793214486481 area_sum=0.05472285778563535, Error= -0.3640498116411517\n",
      "area_pixel=0.06755918226705582 area_sum=0.07017344439747103, Error= -0.038695881783785545\n",
      "area_pixel=0.06470384723321665 area_sum=0.06854713835898787, Error= -0.05939818558112286\n",
      "area_pixel=0.038258287348172715 area_sum=0.05426051394830549, Error= -0.4182682422373795\n",
      "area_pixel=0.06290299608614092 area_sum=0.06750646087344028, Error= -0.07318355362589196\n",
      "area_pixel=0.06866181632504009 area_sum=0.0710979827571788, Error= -0.03548065813764767\n",
      "area_pixel=0.045481003274128184 area_sum=0.05690843539150094, Error= -0.2512572567604998\n",
      "area_pixel=0.051372066242729275 area_sum=0.060437735665688296, Error= -0.17647079601829507\n",
      "area_pixel=0.08412331180916155 area_sum=0.08447601010651973, Error= -0.004192634476377893\n",
      "area_pixel=0.07467387290401106 area_sum=0.07603231757541912, Error= -0.018191699701370204\n",
      "area_pixel=0.0624099895059711 area_sum=0.0673026438866445, Error= -0.07839537259023732\n",
      "area_pixel=0.04195900037770173 area_sum=0.05573620360979919, Error= -0.32834917676968967\n",
      "area_pixel=0.05715571439263911 area_sum=0.06402386234646332, Error= -0.12016555171793514\n",
      "area_pixel=0.08038761552922224 area_sum=0.08112738452122062, Error= -0.009202524382993493\n",
      "area_pixel=0.07843450940492147 area_sum=0.07937664635982263, Error= -0.012011765765465969\n",
      "area_pixel=0.05907229451306506 area_sum=0.06522039353885213, Error= -0.10407753882706032\n",
      "area_pixel=0.040121002784973214 area_sum=0.055076739171659624, Error= -0.3727657672676088\n",
      "area_pixel=0.061909101662060095 area_sum=0.06698716844120342, Error= -0.08202455927825762\n",
      "area_pixel=0.07486883011958412 area_sum=0.0762213872653684, Error= -0.01806569093738887\n",
      "area_pixel=0.08390728427714045 area_sum=0.08427957645881265, Error= -0.004436947100355958\n",
      "area_pixel=0.052353526345367385 area_sum=0.061054313175336744, Error= -0.16619294701510143\n",
      "area_pixel=0.05061563353131504 area_sum=0.060016745022665983, Error= -0.18573533186213373\n",
      "area_pixel=0.08664846785681313 area_sum=0.08667317488344674, Error= -0.000285140952225944\n",
      "area_pixel=0.07201199510202194 area_sum=0.07377214053011852, Error= -0.024442392209838324\n",
      "area_pixel=0.062293472479096224 area_sum=0.06710802538833513, Error= -0.07728824092852621\n",
      "area_pixel=0.04161483391746934 area_sum=0.055387896893291044, Error= -0.3309652275228704\n",
      "area_pixel=0.06664231871870818 area_sum=0.06966942981335798, Error= -0.045423255865795896\n",
      "area_pixel=0.06246630299088629 area_sum=0.06709144439642731, Error= -0.07404218249022702\n",
      "area_pixel=0.04218618802653751 area_sum=0.05535486043373737, Error= -0.312156016535934\n"
     ]
    }
   ],
   "source": [
    "mg1 = gonioref1.get_mg(position)\n",
    "mg1.radial_range = (0, 95)\n",
    "images = [i.reshape(-1, 1) for i in data[name]]\n",
    "res_mg1 = mg1.integrate1d(images, 50000)\n",
    "results[name] = res_mg1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOy9eZgV1bWwX92AyCStBlDux6BRI6IERRySNK2IGpP8vlzwmpgv5GZSZHCIA3IVYzuFqGg0qAgXmUSccMCZQQWcsVUcGSQKQhORqRsQEBHW748ORbfddc4eVp1zqvK+z1PPE9euvfba+2xz39up2hUIAAAAAEAKCfJdAAAAAABAHCC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQCoRRAE8tvf/jbfZRQsrA8AJAlEFwAKjhEjRsiZZ54pnTp1kiAI5Hvf+17kvWVlZRIEQXjtvffecsABB8hJJ50kV199tSxbtsxqbF+RmzNnjpSXl0tVVZVzjnxSVVUl5eXlMmfOnAbbEV0ASBKILgAUHEEQyP777y+nnXaatGzZMqvoNmnSRKZMmSJTpkyRCRMmyE033SR9+/aVvfbaS5o2bSp///vfjcfetm2bfP311861l5eXSxAE1oJdKCxbtkyCIJDy8vIG233XBwAglyC6AFBwfPLJJ+F/7tSpU1bRbdq0aWSeLl26SBAE8vDDD6vX2RCFJLobN2607pNNdAEAkgSiCwAFjY/oiogsXLhQiouL5ZBDDjEar6H/aX537LXXXpNevXpJ8+bNZb/99pM//vGPsnnz5jq11H6MYvdVWxqrq6vl8ssvl+9+97uy1157yXe+8x05++yz68j9blasWCG/+MUvpHXr1tKyZUvp06ePLFiwQMrKyqRTp0517u3UqZOUlZXJggUL5Mc//rG0bt1aSkpKRERk06ZNMnz4cDnuuONk//33l7322ku++93vyrBhw2TLli1hjokTJzZYf+2xoh5dmDhxovTo0UOaNWsmLVu2lJNOOklmzpxZ777ddS5atEh+8pOfSMuWLWWfffaRM888Uz7//PMMvwwAgD2ILgAUNL6iKyLSq1cvCYJAFi9enHW8KNH9/ve/L/vtt59ceumlMmbMGDn77LMlCAI599xzw/tmzZolffv2lSAI5Lbbbgsfp3jvvfdEpEZyjzjiCGnRooVccMEFMmbMGLnmmmukXbt28p3vfEeWL18e5tqwYYN07NhRGjVqJAMHDpTRo0fLOeecI/vuu68ccsghDYruQQcdJCUlJfLHP/5RxowZIyNGjBARkUWLFkm7du1k8ODBcvvtt8udd94pZ511lhQVFclpp50W5vjkk0/ktttukyAIpG/fvmH9jz/+eMb1ueKKKyQIAunRo4fccsstcsMNN8hBBx0kRUVFct9999Wr85BDDpF27drJwIED5e6775aBAwdKUVGRnHrqqVl/HwAAGxBdAChoNET3ggsukCAI5Mknn8w6XpToFhUVyRtvvFEn/pOf/EQaN25c56+6mR5duPDCC6Vp06by9ttv14kvX75cWrVqVWfcYcOGSRAEMn78+Dr3/v3vf6/3V1YRCV/cGzduXL1xt2/f3uBztVdddZUEQSDz588PY9keXfj2+ixZskSKiork+OOPl6+++iqMr1u3Tg444ADZd9995csvv6xX50MPPVQn7+DBg43/nxEAAFMQ3RywdOlSGTBggBx11FFSXFwsZWVlseZ58MEHpW/fvnLAAQdIEAQyceJE59oB8o2G6A4fPlyCIKj318WGiBLdH/zgB/XuveWWWyQIAvnggw/CWJTo7tq1S/bff3/p3bu3rF27tt516qmnyoEHHhjef/jhh0ubNm3km2++qZNn+/btss8++zQouvvtt1+9+7/Njh07ZMOGDbJ27VqZO3euBEEgo0aNCtttRffmm2+WIAjk0UcfrXfvddddJ0EQyFNPPVWnzvbt29e795FHHql3LwCAL4huDpg+fbp06NBBzjrrLDnssMOcRdc0z3/913/JMcccI3/4wx8QXUg8hfIX3f79+9e7d/czrXPnzg1jUaL7xRdfNPj8a+2ruLg4vL9p06Zy4oknNlhj9+7dGxTdnj17Rs5rzJgx0q1bN2nUqFG9ca+99trwPlvRHThwYORfYh9//HEJgqDOqRedOnWSH/3oR/XunTNnjgRBIJMmTYqcAwCALYhuDti5c2f4n3/+8587i65pnt33VVVVIbqQeDSf0V2yZEnW8TK9jPZtdotu7TNno0R39erVEgSBnHzyyTJ79uzIazcuohv13wm7n7s97bTTZNy4cfLMM8/I7NmzZdKkSfWkNhei21Cdu0WX/74CAE0Q3RwTJag7d+6UG2+8UQ455JDwjegxY8ZY56kNogtpQOvUhcMOO8xoPF/RveaaaxoU3Z07d0pJSYkcc8wxRnW4PLoQ9d8JRx99tHTu3LnO/7MsIvLcc8/Vk9rly5erPbpw/fXXSxAE8vTTT2etE9EFgDhAdHNMlKAOHjxYmjdvLiNGjJDZs2fLVVddJY0aNZIHHnjAKk9tEF1IA1rn6D7yyCNG4/mK7u7ndr/9wpmIyJAhQyQIAnnwwQcbHPuLL74I//Pll19u/TJa1H8n9OjRQw466KA60rxjx47wOLTaUrtu3ToJgkAuuOCCBnN9ey0+/vhjKSoqkhNPPFG2b98extevXy8HHnhggy+jIboAkCsQ3RzTkKAuXbpUioqK6v0ftEGDBsmhhx5qnOfbILqQVO699165/vrr5frrr5eSkhL5zne+E/7zHXfcUefehr6MdvPNN0u/fv3CL6N9u08mfEX3lVdekSAIpE+fPjJx4kR54IEHwpfVqqurpXv37lJUVCRnnXWW3HbbbTJ69Gi5/PLL5cgjj6wzxrp166RDhw7SqFEjGTRokIwePVrOPfdc2W+//eSQQw6Rzp0716klk+j+9a9/lSAI5NRTT5W7775bbrrpJvn+978vxx57bIN/vT3kkEOkTZs2cvvtt8sDDzxQ59nmTMeLHXvssXLrrbfKX/7yFzn44IMjjxdDdAEgVyC6OaYhQR0zZowUFxdLVVWV7NixI7x2v4VcXV1tlOfbILqQVKI+vNDQXzK/fW/Tpk2lXbt2UlZWJldffbX1F8p8RVdE5KabbpKDDjpIGjduXE8kt2zZItddd50ceeSRsvfee0vLli3l8MMPl3POOafe8WXLly+Xs846S/bZZx9p0aKF9OnTR95991055phjpEuXLnXuzSS633zzjYwYMSL8SEXHjh1l6NChsnDhwgZFd/78+fKDH/xAmjdvbvzBiAkTJsgxxxwje++9t7Ro0ULKyspkxowZ9e5DdAEglyC6OaYhQb3hhhsyvold++iiTHm+DaILkD527NghJSUlcvrpp+e7FACAggfRzTENCero0aOluLhYXn/9damoqKh3bd261SjPt0F0AZJN7c/z7mb3M7q33nprHioCAEgWiG6OaUhQd39Z6Nlnn/XK820QXYBkU1ZWJv3795fbbrtNRo0aJb/85S8lCAI57LDD6nyNDQAAGgbRzQFbtmyRadOmybRp06Rnz55yxBFHhP+8Zs0aERE5//zzZd999w1PXXjmmWfklltukV/96ldWeUREPvroI5k2bZpMnjxZgiCQIUOGyLRp06xEGgDyzy233CLf//73pXXr1tKkSRPp2LGjDB48uM6/7wAAEA2imwN2H8De0LX7JZZdu3bJqFGjpGvXrrLXXnvJ/vvvLz/60Y/qnKVrkkdkz4H12V7iAQAAAEgziC4AAAAApBJEFwAAAABSCaILAAAAAKkE0Y2J7du3S0VFhXz22WdSWVnJxcXFxcXFxRXL9dlnn0lFRUWdz3BDDYhuTFRUVGT8CAQXFxcXFxcXl+ZVUVGRb/0pOBDdmPjss8/CTZfv/08vEdcrr0hlENRcr7xSOHld+7v0s+mjvV6m+bLdZ5LHN0em9jh+L5c2zT62c9LIr7EXffeUaV3aMdMa44651qY5nuuaaY7nMl+tdcrlPDzHrwhqRPezzz7Lt/4UHIhuTFRWVkoQBFJZWZnvUpLBP/4hEgQ11z/+UTh5Xfu79LPpo71epvmy3WeSxzdHpvY4fi+XNs0+tnPSyK+xF333lGld2jHTGuOOudamOZ7rmmmO5zJfrXXK5Tw8x68MakQX56hPkO8C0gqia4m2uGnljUOcNPpor5evlNjk8c3hKqWZcM3pInkaIuoyF1+h1BrPp38uYqY1xh2LU+A0+7mul1buONcpl/PwHB/RjSbIdwFpBdG1RFvctPLGIU4afbTXy1dKbPL45nCV0ky45nSRPA0RdZmLr1BqjefTPxcx0xrjjsUpcJr9XNdLK3ec65TLeXiOj+hGE+S7gLSC6Fqyfr1IeXnNtX594eR17e/Sz6aP9nqZ5st2n0ke3xyZ2uP4vVzaNPvYzkkjv8Ze9N1TpnVpx0xrjDvmWpvmeK5rpjmey3y11imX8/Acv/Lii3GOCBDdmEB0AQAAIBfgHNEgujHBpgMAAIBcgHNEg+jGBJsOAAAAcgHOEQ2iGxNsOkuWLxc5+OCaa/nywsnr2t+ln00f7fUyzZftPpM8vjkytcfxe7m0afaxnZNGfo296LunTOvSjpnWGHfMtTbN8VzXTHM8l/lqrVMu5+E5fmXHjjhHBEG+C0griK4l2qcIaOWN4y1+jT7a6+X7hrxNHt8crickZMI1p8uJAxqnIrjMxfd0A63xfPrnImZaY9yxOE8T0Oznul5aueNcp1zOw3N8Tl2IJsh3AWkF0bVEW9y08sYhThp9tNfLV0ps8vjmcJXSTLjmdJE8DRF1mYuvUGqN59M/FzHTGuOOxSlwmv1c10srd5zrlMt5eI6P6EYT5LuAtILoWqItblp54xAnjT7a6+UrJTZ5fHO4SmkmXHO6SJ6GiLrMxVcotcbz6Z+LmGmNccfiFDjNfq7rpZU7znXK5Tw8x0d0ownyXUBaQXQt0RY3rbxxiJNGH+318pUSmzy+OVylNBOuOV0kT0NEXebiK5Ra4/n0z0XMtMa4Y3EKnGY/1/XSyh3nOuVyHp7jI7rRBPkuIK0gupZoi5tW3jjESaOP9nr5SolNHt8crlKaCdecLpKnIaIuc/EVSq3xfPrnImZaY9yxOAVOs5/remnljnOdcjkPz/ER3WiCfBeQVhBdS7TFTStvHOKk0Ud7vXylxCaPbw5XKc2Ea04XydMQUZe5+Aql1ng+/XMRM60x7licAqfZz3W9tHLHuU65nIfn+IhuNEG+C0griK4l2uKmlTcOcdLoo71evlJik8c3h6uUZsI1p4vkaYioy1x8hVJrPJ/+uYiZ1hh3LE6B0+znul5aueNcp1zOw3N8RDeaIN8FpBVE15K1a0UuvbTmWrtWLe2aT1dKxZm/l+rBF7rlda3LpZ9NH+31Ms2X7T6TPL45MrXH8Xu5tGn2sZ2TRn6Nvei7p0zr0o6Z1hh3zLU2zfFc10xzPJf5aq1TLufhOX7lgAE4RwSIbkwguoXBT0e9JJ2GPS3fu+rZfJcCAAAQCzhHNIhuTLDpCoNOw54OLwAAgDSCc0SD6MYEm64wQHQBACDt4BzRILoxwaazZMUKkW7daq4VK9TSnjBooixs01kWtunslte1Lpd+Nn2018s0X7b7TPL45sjUHsfv5dKm2cd2Thr5Nfai754yrUs7Zlpj3DHX2jTHc10zzfFc5qu1Trmch+f4lV264BwRILoxgehaon2KwL8oHTDOLy+nLtjdx6kL+n04dYFTFzh1wW6+WuvEqQupIMh3AWkF0bUE0UV0NdoRXUTXN2ZaI6KL6CK6iSDIdwFpBdG1BNFFdDXaEV1E1zdmWiOii+giuokgyHcBaQXRtQTRRXQ12hFdRNc3ZlojoovoIrqJIMh3AWkF0bUE0UV0NdoRXUTXN2ZaI6KL6CK6iSDIdwFpBdG1BNFFdDXaEV1E1zdmWiOii+giuokgyHcBaQXRtQTRRXQ12hFdRNc3ZlojoovoIrqJIMh3AWkF0bVkzRqRgQNrrjVr1NIefcFUmdL9DJnS/Qy3vK51ufSz6aO9Xqb5st1nksc3R6b2OH4vlzbNPrZz0sivsRd995RpXdox0xrjjrnWpjme65ppjucyX611yuU8PMev7N8f54gA0Y0JRLcw4MtoAACQdnCOaBDdmGDTFQaILgAApB2cIxpENybYdIUBogsAAGkH54gG0Y0JNp0lK1eKnHhizbVypVra4wdNkrfaHy5vtT/cLa9rXS79bPpor5dpvmz3meTxzZGpPY7fy6VNs4/tnDTya+xF3z1lWpd2zLTGuGOutWmO57pmmuO5zFdrnXI5D8/xK485BueIANGNCUTXEk5d4NQFjXZOXeDUBd+YaY2cusCpC5y6kAiCfBeQVhBdSxBdRFejHdFFdH1jpjUiuoguopsIgnwXkFYQXUsQXURXox3RRXR9Y6Y1IrqILqKbCIJ8F5BWEF1LEF1EV6Md0UV0fWOmNSK6iC6imwiCfBeQVhBdSxBdRFejHdFFdH1jpjUiuoguopsIgnwXkFYQXUsQXURXox3RRXR9Y6Y1IrqILqKbCIJ8FxAXS5culQEDBshRRx0lxcXFUlZWlrXP4sWLZciQIdKlSxdp1qyZdO7cWQYNGiTr1q2zHh/RtQTRRXQ12hFdRNc3ZlojoovoIrqJIMh3AXExffp06dChg5x11lly2GGHGYnuHXfcId26dZPbb79d5syZI5MmTZKOHTtK165dZfv27VbjI7qWrF4t0r9/zbV6tVraHudPkUe7niyPdj3ZLa9rXS79bPpor5dpvmz3meTxzZGpPY7fy6VNs4/tnDTya+xF3z1lWpd2zLTGuGOutWmO57pmmuO5zFdrnXI5D8/xK/v1wzkiSK3o7ty5M/zPP//5z41Ed926dbJr1646sVdffVWCIJDp06dbjY/oFgZ8GQ0AANIOzhFNakW3Nqai2xBbt26VIAhk9OjRVv3YdIUBogsAAGkH54gG0c3CrFmzJAgCmTNnjlU/Nl1hgOgCAEDawTmiQXQzsG3bNunWrZv06NGj3iMN32bjxo1SWVkZXhUVFWw6G1atEjn11Jpr1Sq1tD0HT5Z5nY+WeZ2PdsvrWpdLP5s+2utlmi/bfSZ5fHNkao/j93Jp0+xjOyeN/Bp70XdPmdalHTOtMe6Ya22a47mumeZ4LvPVWqdczsNz/MrSUpwjAkQ3A7/97W+lVatW8uGHH2a9t7y8XIJ/vfVY+2LTGcKpC5y6oNHOqQucuuAbM62RUxc4dYFTFxJBkO8CcoGL6A4fPlwaN24sM2bMMLqfv+h6gugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAXGAruqNGjZKioiKZPHmy85g8L2MJoovoarQjuoiub8y0RkQX0UV0E0GQ7wJygY3o3n///VJUVCQ33nij15iIriWILqKr0Y7oIrq+MdMaEV1EF9FNBEG+C4iLLVu2yLRp02TatGnSs2dPOeKII8J/XrNmjYiI9O7dW3r37h32mTt3rjRp0kROOeUUef311+tcK1eutBof0bUE0UV0NdoRXUTXN2ZaI6KL6CK6iSDIdwFxsWzZMmno5bDaR4WVlZXV+Utv1AtlQRBIeXm51fiIriWILqKr0Y7oIrq+MdMaEV1EF9FNBEG+C0griK4liC6iq9GO6CK6vjHTGhFdRBfRTQRBvgtIK4iuJZ9/LvKf/1lzff65Wtpjh0yRGYeeIDMOPcEtr2tdLv1s+mivl2m+bPeZ5PHNkak9jt/LpU2zj+2cNPJr7EXfPWVal3bMtMa4Y661aY7numaa47nMV2udcjkPz/ErTz8d54gA0Y0JRLcw4MtoAACQdnCOaBDdmGDTFQaILgAApB2cIxpENybYdIUBogsAAGkH54gG0Y0JNp0lPKPLM7oa7TyjyzO6vjHTGnlGl2d0eUY3ESC6MYHoWsKpC5y6oNHOqQucuuAbM62RUxc4dYFTFxJBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomsJoovoarQjuoiub8y0RkQX0UV0E0GQ7wLSCqJrCaKL6Gq0I7qIrm/MtEZEF9FFdBNBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomsJoovoarQjuoiub8y0RkQX0UV0E0GQ7wLSCqJrCaKL6Gq0I7qIrm/MtEZEF9FFdBNBkO8C0gqia8mqVSKnnlpzrVqllrbn4Mkyr/PRMq/z0W55Xety6WfTR3u9TPNlu88kj2+OTO1x/F4ubZp9bOekkV9jL/ruKdO6tGOmNcYdc61NczzXNdMcz2W+WuuUy3l4jl9ZWopzRIDoxgSiWxjwZTQAAEg7OEc0iG5MsOkKA0QXAADSDs4RDaIbE2y6wgDRBQCAtINzRIPoxgSbzpLVq0X696+5Vq9WS9vj/CnyaNeT5dGuJ7vlda3LpZ9NH+31Ms2X7T6TPL45MrXH8Xu5tGn2sZ2TRn6Nvei7p0zr0o6Z1hh3zLU2zfFc10xzPJf5aq1TLufhOX5lv344RwSIbkwgupZw6gKnLmi0c+oCpy74xkxr5NQFTl3g1IVEEOS7gLSC6FqC6CK6Gu2ILqLrGzOtEdFFdBHdRBDku4C0guhagugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAtILoWoLoIroa7YguousbM60R0UV0Ed1EEOS7gLSC6FqC6CK6Gu2ILqLrGzOtEdFFdBHdRBDku4C0guhagugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAtILoWoLoIroa7YguousbM60R0UV0Ed1EEOS7gLSC6FqycqXIiSfWXCtXqqU9ftAkeav94fJW+8Pd8rrW5dLPpo/2epnmy3afSR7fHJna4/i9XNo0+9jOSSO/xl703VOmdWnHTGuMO+Zam+Z4rmumOZ7LfLXWKZfz8By/8phjcI4IEN2YQHQLA76MBgAAaQfniAbRjQk2XWGA6AIAQNrBOaJBdGOCTVcYILoAAJB2cI5oEN2YYNNZsmaNyMCBNdeaNWppj75gqkzpfoZM6X6GW17Xulz62fTRXi/TfNnuM8njmyNTexy/l0ubZh/bOWnk19iLvnvKtC7tmGmNccdca9Mcz3XNNMdzma/WOuVyHp7jV/bvj3NEgOjGBKJrCacucOqCRjunLnDqgm/MtEZOXeDUBU5dSARBvgtIK4iuJYguoqvRjugiur4x0xoRXUQX0U0EQb4LSCuIriWILqKr0Y7oIrq+MdMaEV1EF9FNBEG+C0griK4liC6iq9GO6CK6vjHTGhFdRBfRTQRBvgtIK4iuJYguoqvRjugiur4x0xoRXUQX0U0EQb4LSCuIriWILqKr0Y7oIrq+MdMaEV1EF9FNBEG+C0griK4liC6iq9GO6CK6vjHTGhFdRBfRTQRBvgtIK4iuJStWiHTrVnOtWKGW9oRBE2Vhm86ysE1nt7yudbn0s+mjvV6m+bLdZ5LHN0em9jh+L5c2zT62c9LIr7EXffeUaV3aMdMa44651qY5nuuaaY7nMl+tdcrlPDzHr+zSBeeIANGNCUS3MODLaAAAkHZwjmgQ3Zhg0xUGiC4AAKQdnCMaRDcm2HSFAaILAABpB+eIBtGNCTadJWvXilx6ac21dq1a2u4XTJWxPfvK2J593fK61uXSz6aP9nqZ5st2n0ke3xyZ2uP4vVzaNPvYzkkjv8Ze9N1TpnVpx0xrjDvmWpvmeK5rpjmey3y11imX8/Acv3LAAJwjAkQ3JhBdSzh1gVMXNNo5dYFTF3xjpjVy6gKnLnDqQiII8l1AWkF0LUF0EV2NdkQX0fWNmdaI6CK6iG4iCPJdQFwsXbpUBgwYIEcddZQUFxdLWVmZUb/t27fLZZddJu3atZPmzZtLnz59ZPHixdbjI7qWILqIrkY7oovo+sZMa0R0EV1ENxEE+S4gLqZPny4dOnSQs846Sw477DBj0T3vvPOkdevWMn78eJkxY4aUlpbKf/zHf0h1dbXV+IiuJYguoqvRjugiur4x0xoRXUQX0U0EQb4LiIudO3eG//nnP/+5keiuXLlSGjVqJP/7v/8bxtavXy8tWrSQm266yWp8RNcSRBfR1WhHdBFd35hpjYguoovoJoIg3wXkAlPRHT9+vBQVFUlVVVWdeN++fY3/IrwbRNcSRBfR1WhHdBFd35hpjYguoovoJoIg3wXkAlPRHTp0qPzHf/xHvfiVV14p7dq1sxoT0bUE0UV0NdoRXUTXN2ZaI6KL6CK6iSDIdwG5wFR0zznnHOnatWu9+MiRI6VJkyYZ+27cuFEqKyvDq6Kigk1nw/LlIgcfXHMtX66W9gcDJ8jykgNkeckBbnld63LpZ9NHe71M82W7zySPb45M7XH8Xi5tmn1s56SRX2Mv+u4p07q0Y6Y1xh1zrU1zPNc10xzPZb5a65TLeXiOX9mxI84RQZDvAnJBLkS3vLxcgn/9f1S1LzZdfuHLaAAAkHb4X5GjQXRr4fPoAn/RLUwQXQAASDuIbjSIbi12v4z27aPE+vXrx8toCQXRBQCAtINzRIPo1mL38WL33HNPGNuwYYO0bNmS48XiZv16kfLymmv9erW03S58QG774a/kth/+yi2va10u/Wz6aK+Xab5s95nk8c2RqT2O38ulTbOP7Zw08mvsRd89ZVqXdsy0xrhjrrVpjue6ZprjucxXa51yOQ/P8SsvvhjniCC1ortlyxaZNm2aTJs2TXr27ClHHHFE+M9r1qwREYUWeikAACAASURBVJHevXtL79696/Q777zzpKSkRCZMmCAzZ86UsrIyPhiRCzh1gVMXNNo5dYFTF3xjpjVy6gKnLnDqQiII8l1AXCxbtkwaejksCAKZM2eOiIiUlZXV+0vvV199JZdeeqm0bdtWmjVrJn369JFFixZZj4/oWoLoIroa7YguousbM60R0UV0Ed1EEOS7gLSC6FqC6CK6Gu2ILqLrGzOtEdFFdBHdRBDku4C0guhagugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAtILoWoLoIroa7YguousbM60R0UV0Ed1EEOS7gLSC6FqC6CK6Gu2ILqLrGzOtEdFFdBHdRBDku4C0guhagugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAtILoWrJsmUjbtjXXsmVqaX84cLysaV4ia5qXuOV1rculn00f7fUyzZftPpM8vjkytcfxe7m0afaxnZNGfo296LunTOvSjpnWGHfMtTbN8VzXTHM8l/lqrVMu5+E5fuX+++McESC6MYHoFgZ8GQ0AANIOzhENohsTbLrCANEFAIC0g3NEg+jGBJuuMEB0AQAg7eAc0SC6McGms6SqSmTkyJqrqkot7VEXPSg3nPQHueGkP7jlda3LpZ9NH+31Ms2X7T6TPL45MrXH8Xu5tGn2sZ2TRn6Nvei7p0zr0o6Z1hh3zLU2zfFc10xzPJf5aq1TLufhOX7lVVfhHBEgujGB6FrCqQucuqDRzqkLnLrgGzOtkVMXOHWBUxcSQZDvAtIKomsJoovoarQjuoiub8y0RkQX0UV0E0GQ7wLSCqJrCaKL6Gq0I7qIrm/MtEZEF9FFdBNBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomsJoovoarQjuoiub8y0RkQX0UV0E0GQ7wLSCqJrCaKL6Gq0I7qIrm/MtEZEF9FFdBNBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomvJJ5+ItGhRc33yiVraH513j3zZZG/5ssnebnld63LpZ9NHe71M82W7zySPb45M7XH8Xi5tmn1s56SRX2Mv+u4p07q0Y6Y1xh1zrU1zPNc10xzPZb5a65TLeXiOX9msGc4RAaIbE4huYcCX0QAAIO3gHNEgujHBpisMEF0AAEg7OEc0iG5MsOkKA0QXAADSDs4RDaIbE2w6S6qrRUaPrrmqq9XSHvmnh2T4aYNl+GmD3fK61uXSz6aP9nqZ5st2n0ke3xyZ2uP4vVzaNPvYzkkjv8Ze9N1TpnVpx0xrjDvmWpvmeK5rpjmey3y11imX8/Acv3LECJwjAkQ3JhBdSzh1gVMXNNo5dYFTF3xjpjVy6gKnLnDqQiII8l1AWkF0LUF0EV2NdkQX0fWNmdaI6CK6iG4iCPJdQFpBdC1BdBFdjXZEF9H1jZnWiOgiuohuIgjyXUBaQXQtQXQRXY12RBfR9Y2Z1ojoIrqIbiII8l1AWkF0LUF0EV2NdkQX0fWNmdaI6CK6iG4iCPJdQFpBdC1BdBFdjXZEF9H1jZnWiOgiuohuIgjyXUBaQXQtQXQRXY12RBfR9Y2Z1ojoIrqIbiII8l1AWkF0LUF0EV2NdkQX0fWNmdaI6CK6iG4iCPJdQFpBdAsDvowGAABpB+eIBtGNCTZdYYDoAgBA2sE5okF0Y4JNVxggugAAkHZwjmgQ3Zhg01myaZPIvffWXJs2qaU94k8Py59+eon86aeXuOV1rculn00f7fUyzZftPpM8vjkytcfxe7m0afaxnZNGfo296LunTOvSjpnWGHfMtTbN8VzXTHM8l/lqrVMu5+E5fuXtt+McESC6MYHoWsLLaLyMptHOy2i8jOYbM62Rl9F4GY2X0RJBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomsJoovoarQjuoiub8y0RkQX0UV0E0GQ7wLSCqJrCaKL6Gq0I7qIrm/MtEZEF9FFdBNBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomsJoovoarQjuoiub8y0RkQX0UV0E0GQ7wLSCqJrCaKL6Gq0I7qIrm/MtEZEF9FFdBNBkO8C0gqiawmii+hqtCO6iK5vzLRGRBfRRXQTQZDvAtIKomvJzp0imzfXXDt3qqXtfPmT0uXiadLl4mlueV3rculn00d7vUzzZbvPJI9vjkztcfxeLm2afWznpJFfYy/67inTurRjpjXGHXOtTXM81zXTHM9lvlrrlMt5eI5fuWQJzhEBohsTiG5hwCeAAQAg7eAc0SC6McGmKwwQXQAASDs4RzSpFt1FixZJnz59pHnz5tKuXTsZOnSobN++PWu/5cuXy9lnny0HHHCAtGzZUo499lh57LHHrMZm01myebPIY4/VXJs3q6XtcvE0GdD3ShnQ90q3vK51ufSz6aO9Xqb5st1nksc3R6b2OH4vlzbNPrZz0sivsRd995RpXdox0xrjjrnWpjme65ppjucyX611yuU8PMevHDcO54ggtaK7YcMGOfDAA6VXr14yY8YMGT9+vLRu3VqGDBmSsd9XX30lhx9+uBx++OHy0EMPyaxZs+Q3v/mNFBUVyfPPP288PqJrCS+j8TKaRjsvo/Eymm/MtEZeRuNlNF5GSwRBvguIixEjRkjLli1l/fr1YWzs2LHSqFEjWbVqVWS/119/XYIgkDlz5oSxnTt3SufOnWXAgAHG4yO6liC6iK5GO6KL6PrGTGtEdBFdRDcRBPkuIC5KS0ulb9++dWJVVVVSVFQkEydOjOz30ksvSRAE8s4779SJH3XUUXLuuecaj4/oWoLoIroa7YguousbM60R0UV0Ed1EEOS7gLho06aNDB8+vF68ffv2MmzYsMh+O3bskK5du8oZZ5whn376qVRVVcmoUaOkadOmMn/+fOPxEV1LEF1EV6Md0UV0fWOmNSK6iC6imwiCfBcQF40bN5aRI0fWi3ft2jXrX2a/+OIL6dmzpwT/2jjNmjWTJ554ImOfjRs3SmVlZXhVVFSw6WxAdBFdjXZEF9H1jZnWiOgiuohuIgjyXUBcuIru1q1bpbS0VI477jh5/PHH5YUXXpCBAwdK8+bN5eWXX47sV15eLrvFuPbFpjME0UV0NdoRXUTXN2ZaI6KL6CK6iSDIdwFx4frowh133CF77723rFu3rk68T58+UlpaGtmPv+h6gugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAuCgtLZV+/frViVVXV2d9GW3QoEFy6KGH1osPHTpU2rdvbzw+z+hagugiuhrtiC6i6xszrRHRRXQR3UQQ5LuAuBgxYoS0atVKqqqqwti4ceOyHi924403StOmTWXt2rV14r1795Yf/OAHxuMjupbs2CGyenXNtWOHWtqDhz4hPc6fIj3On+KW17Uul342fbTXyzRftvtM8vjmyNQex+/l0qbZx3ZOGvk19qLvnjKtSztmWmPcMdfaNMdzXTPN8Vzmq7VOuZyH5/iVCxbgHBGkVnR3fzCirKxMZs6cKRMmTJCSkpJ6H4zo3bu39O7dO/znFStWyD777CPHHnusPPLIIzJz5kw555xzJAgCeeCBB4zHR3QLAz4BDAAAaQfniCa1oisisnDhQjnllFOkWbNm0rZtW7nsssvqfQK4rKxMysrK6sTefvttOeOMM6Rt27bSqlUr6dGjh0ydOtVqbDZdYYDoAgBA2sE5okm16OYTNp0lW7aIzJxZc23Zopb2e5c8Iv1/cZ30/8V1bnld63LpZ9NHe71M82W7zySPb45M7XH8Xi5tmn1s56SRX2Mv+u4p07q0Y6Y1xh1zrU1zPNc10xzPZb5a65TLeXiOXzl1Ks4RAaIbE4iuJbyMxstoGu28jMbLaL4x0xp5GY2X0XgZLREE+S4grSC6liC6iK5GO6KL6PrGTGtEdBFdRDcRBPkuIK0gupYguoiuRjuii+j6xkxrRHQRXUQ3EQT5LiCtILqWILqIrkY7oovo+sZMa0R0EV1ENxEE+S4grSC6liC6iK5GO6KL6PrGTGtEdBFdRDcRBPkuIK0gupYguoiuRjuii+j6xkxrRHQRXUQ3EQT5LqA2X331Vb5LUAPRtQTRlfXvfeQvF64gum45EV1EN64Yous+X611QnRTQZDvAmrTunVrGTRokFRUVOS7FG8QXUsQXbl19DP+cuEKouuWE9FFdOOKIbru89VaJ0Q3FQT5LqA2N998sxxxxBFSXFwsRx55pPztb3+TNWvW5LssJxBdS77+es+/tF9/rZb2u5dNl9IB42qE1yWva10O/S6d+qZ5rdrrZZov230meXxzZGqP4/dyadPsYzsnjfw2Y/rW7VuXdsy0xrhjrrVpjue6ZprjucxXa51yOQ/P8StfeQXniKCgRHc3b7zxhpx33nlSUlIie+21l/Tt21eeeuop2blzZ75LMwbRLQyS9Angix9akJhaAQCgcMA5oilI0d3Ntm3b5P7775fjjz9eiouL5cADD5Rhw4bJ8uXL811aVth0hQGiCwAAaQfniKagRXfWrFly9tlny9577y1t27aV3/3ud9KxY0dp2rSpTJgwId/lZYRNZ8eurVvlubGPyPz7nhLZtk0t72GXPiZ9fz1S+v56pFvebdtEXn215rLp79Bv6JQ3zGt1rcs3X7b7TPL45sjUHsfv5dKm2cd2Thr5bcb0rdu3Lu2YaY1xx1xr0xzPdc00x3OZr9Y65XIenuNXTp+Oc0RQcKL76aefyp///Gfp1KmTFBcXy2mnnSbTpk2Tr//1fMrOnTvl0ksvlXbt2uW50swguna8Nmt++ID9toVL1PIm6WW0G/7+pP8LQK6Y5st2n0ke3xyZ2uP4vVzaNPvYzkkjv82YvnX71qUdM60x7phrbZrjua6Z5ngu89Vap1zOw3N8XkaLpqBE96STTpJGjRpJhw4d5Oqrr458ROHNN9+UoqKiHFdnB6Jrx71Tng//5a1+f6FaXkRXuV5E16wN0UV0Ed3cCCKiKxIgupkI8l1Abfr16yfPPvus7Nq1K+N9X3/9dcE/p4vo2oHoIroq7YguousbM60R0UV0Ed1EEOS7gNrMmzdPNm/e3GDb5s2bZd68eTmuyB1E1w5EV+SG2xFd73ZEF9H1jZnWiOgiuohuIigo0S0uLpb58+c32PbWW29JcXFxjityB9G1A9FFdFXaEV1E1zdmWiOii+giuomgoES3qKgoUnTnzp0rLVu2zHFF7iC6diC6iK5KO6KL6PrGTGtEdBFdRDcR5F10582bJ9dee61ce+21UlRUJOeee274z7uvK664Qrp16yYnnHBCvss1BtG1A9FFdFXaEV1E1zdmWiOii+giuokg76J74403SklJiZSUlEhxcbG0atUq/OfdV9u2baVXr15SUVGR73KNQXTtQHR5GU2lHdFFdH1jpjUiuoguopsI8i66tencubMsWLAg32WogOjaMXrGh/Lj34+SH/9+lGxYv0kt76GXPh7mla++sk/w1Vci775bc9n0d+h32X3zzWt1rcs3X7b7TPL45sjUHsfv5dKm2cd2Thr5bcb0rdu3Lu2YaY1xx1xr0xzPdc00x3OZr9Y65XIenuNXzpyJc0RQUKKbJhBdO+58cWn4+dv1X25Xy8sngAEAIO3gHNHkXXSfeOIJqa6uDv9ztispsOnsuGsOoovoAgCACzhHNHkX3donLRQVFWW8OF4svdR+dGH9v+ujC1N4dMG7nUcXeHTBN2ZaI48u8OgCjy4kgryL7vLly2X79u3hf852JQVE1w5eRuPUBZV2XkbjZTTfmGmNvIzGy2i8jJYIgnwXkFYQXTsQXURXpR3RRXR9Y6Y1IrqILqKbCApKdN966y2ZPXt2+M9VVVUycOBAKSsrk+uvv1527dqVx+rsQHTtQHQRXZV2RBfR9Y2Z1ojoIrqIbiIoKNEtLS2V8vLy8J9/97vfyT777CNnnnmmtGjRQm644Yb8FWcJomsHoovoqrQjuoiub8y0RkQX0UV0E0FBie7+++8vzzzzjIiIbN26VZo3by4TJkwQEZE777xTDjvssHyWZwWiaweii+iqtCO6iK5vzLRGRBfRRXQTQUGJbrNmzWTu3LkiIjJ79mxp1KiRrF+/XkREXnrpJWnWrFk+y7MC0bUD0UV0VdoRXUTXN2ZaI6KL6CK6iSDIdwG16dq1qwwbNkxEah5bOO6448K2Rx55RNq1a5ev0qxBdO2Ych+iyyeAFdoRXUTXN2ZaI6KL6CK6iaCgRHf8+PFSVFQk3/nOd6S4uFimTp0atp1//vnSp0+fPFZnB6JrR23RrUJ0EV3XdkQX0fWNmdaI6CK6iG4iKCjRFRGZN2+e3HLLLfLiiy/WiZeXl8vTTyfni1GIrh1jZn4ofX89Uvr+eqSsX7dRLe9hlz4W5pVt2+wTbNsm8uqrNZdNf4d+Q+99w7xW17p882W7zySPb45M7XH8Xi5tmn1s56SR32ZM37p969KOmdYYd8y1Ns3xXNdMczyX+WqtUy7n4Tl+5fTpOEcEBSe6aQHRtYNPAItc/CCfAAYAAHtwjmgKTnR37Nghr776qjz00EMyefLkOte9996b7/KMYdPZceeLiC6iCwAALuAc0RSU6L755pvSoUMHKS4ulqKionpXcXFxvks0hk1nx+hZC6V0wDgpHTBONlR9qZb3u5dND/PK11/bJ/j66z3PQdn0d+h36X1vmtfqWpdvvmz3meTxzZGpPY7fy6VNs4/tnDTy24zpW7dvXdox0xrjjrnWpjme65ppjucyX611yuU8PMevfOUVnCOCghLdY489Vo455hiZN2+erFmzRqqrq+tdSQHRtYPjxTheTKU9jt/LpU2zj+2cNPLbjOlbt29d2jHTGuOOudamOZ7rmmmO5zJfrXXK5Tw8x+dltGgKSnRbtGghM2bMyHcZKiC6diC6iK5KO6KL6PrGTGtEdBFdRDcRFJToHn/88TJ58uR8l6EComsHoovoqrQjuoiub8y0RkQX0UV0E0FBie4777wj3bt3lxdffFF27tyZ73K8QHTt4IMRiK5KO6KL6PrGTGtEdBFdRDcRFJTolpSUSLNmzaS4uFiaNGki++67b70rKSC6dvDBCJHrEV3/dkQX0fWNmdaI6CK6iG4iKCjRLS8vl2uuuSbjlRQQXTsQXURXpR3RRXR9Y6Y1IrqILqKbCIJ8F5BWEF07EF0eXVBpR3QRXd+YaY2ILqKL6CaCghTdbdu2yfvvvy/PPPOMbNzo/jnYRYsWSZ8+faR58+bSrl07GTp0qGzfbvYxgpdffllOPvlkadGiheyzzz7ywx/+UJYsWWI8NqJrB6KL6Kq0I7qIrm/MtEZEF9FFdBNBwYnuTTfdJPvtt1/4gYi3335bREROP/10GTFihHGeDRs2yIEHHii9evWSGTNmyPjx46V169YyZMiQrH1nzZole+21l5x//vkye/Zsefrpp+XKK6+Ud99913h8RNeOsc+9L/1/cZ30/8V1sn5NlVre713ySJhXtmyxT7Bli3z55DOy/P7H7Ppv2SIyc2bNZdjv8smvmdfqkF8lX7b7TPL45sjU7rourjmj2jT72M5JI7/NmL51+9alHTOtMe6Ya22a47mumeZ4LvPVWqdczsNz/MqpU3GOCApKdK+//npp3ry53HzzzVJRUSFFRUWh6N55551y3HHHGecaMWKEtGzZUtavXx/Gxo4dK40aNZJVq1ZF9tuxY4d07NhRrrjiCveJCKJrSyF/ArjbNTOl07Cn5fmFq9Xqagg+AQwAAC7gHNEUlOh26NBB/va3v4mIyDfffFNHdGfNmmV16kJpaan07du3TqyqqkqKiopk4sSJkf2effZZCYIgowybwKazo7bobigw0d3d/9fj3lCrqyEQXQAAcAHniKagRLdp06by/PPPi0h90Z05c6Y0b97cOFebNm1k+PDh9eLt27eXYcOGRfa7+uqrZf/995fHH39cDj30UGnUqJEcfvjh8uCDD1rNhU1nx12zF0mP86dIj/OnyIZqhf8p/l8cPPSJMK/s2GGfYMeOsP9vxrxi1U9Wr665DMe9dGqFea0O+VXyZbvPJI9vjkztruvimjOqTbOP7Zw08tuM6Vu3b13aMdMa44651qY5nuuaaY7nMl+tdcrlPDzHr1ywAOeIoKBE98gjj5Qrr7xSROqL7pVXXmn16ELjxo1l5MiR9eJdu3aVc889N7LfgAEDZO+995b99ttPRo8eLc8//7z0799fgiCQV16JFp2NGzdKZWVleFVUVLDpLEjCByMu/ssjTv1Mx+V4MYV2XkbjZTTfmGmNvIzGy2i8jJYICkp0x48fL02aNJFrrrlGPvzwQykqKpKnn35axowZI82bN7f6q6qr6J577rkSBIHcddddYWzXrl3SrVs3+dnPfhbZr7y8XIJ/bbTaF5vODEQX0VVpR3QRXd+YaY2ILqKL6CaCghJdEZGbb75ZWrZsKcXFxVJUVCRFRUXSsmVLufXWW63yuD66cPnll0sQBLJo0aI68YsuukgOPvjgyH78RdePJBwvhuga3Ifo6vdBdBFdRNduvlrrhOimgoITXRGRTZs2ycyZM2Xq1Kny3HPPSXV1tXWO0tJS6devX51YdXV11pfRJk6cKA2J7oUXXiiHHHKI8fg8o2sHoovoqrQjuoiub8y0RkQX0UV0E0FBie7kyZNl3bp1DbatX79eJk+ebJxrxIgR0qpVK6mq2nMm67hx47IeL/bPf/5TGjduLHfccUcY27Vrlxx11FFy5plnGo+P6NqB6CK6Ku2ILqLrGzOtEdFFdBHdRFBQoltcXCzz589vsO2tt96S4uJi41y7PxhRVlYmM2fOlAkTJkhJSUm9D0b07t1bevfuXSd20UUXScuWLWXUqFEyY8YMOfvss6VRo0Z8MCJGEF2+jKbSjugiur4x0xoRXUQX0U0EBSW6RUVFkaI7c+ZMKSkpscq3cOFCOeWUU6RZs2bStm1bueyyy+p9ArisrEzKysrqxHbs2CFXXXWVtG/fXvbaay/p0aOHzJgxw2psRNeOJIjuJSMQXUQX0fUez6c/opu9NkRXb50Q3VSQd9GdPn26/P73v5ff//73UlRUJD/72c/Cf959/epXv5L/83/+j/Tp0yff5RqD6NqRBNHlL7oG9yG6+n0QXUQX0bWbr9Y6IbqpIO+iO2bMGOnevbt0795dioqK5LDDDgv/efd13HHHyX//93/LPzT+D3qOQHTtGPvsuzKg75UyoO+VsmH1+uwdDOly8bQwr2zebJ9g8+aw/x/ueNGqnzz2WM1lOO6wSa+a1+qQXyVftvtM8vjmyNTuui6uOaPaNPvYzkkjv82YvnX71qUdM60x7phrbZrjua6Z5ngu89Vap1zOw3P8ynHjcI4I8i66tTnppJNk4UK9v+blE0TXjrvm8AngP/EJYAAAcADniKagRDdNsOnsQHQRXQAAcAPniKbgRHfhwoXyl7/8RQYNGlTvWd0//OEP+S7PGDadHXe9sES6XDxNulw8TdZv2qaWt/PlT4Z5ZedO+wQ7d4b9+499zapf+D8rGY578f1vm9fqkF8lX7b7TPL45sjU7rourjmj2jT72M5JI7/NmL51+9alHTOtMe6Ya22a47mumeZ4LvPVWqdczsNz/MolS3COCApKdCdMmCCNGjWSli1byhFHHFHvWd2jjz463yUag+jawctonKOr0s7LaLyM5hszrZGX0XgZjZfREkFBie53v/td6d+/v2zdujXfpXiD6NqB6CK6Ku2ILqLrGzOtEdFFdBHdRFBQotuiRQt5/vnn812GCoiuHUkQ3bjP0UV0FdoRXUTXN2ZaI6KL6CK6iaCgRPfMM8+UESNG5LsMFRBdOxBdRFelHdFFdH1jpjUiuoguopsICkp0n3/+eTn00EPl6quvlnnz5sl7771X70oKiK4diC6iq9KO6CK6vjHTGhFdRBfRTQQFJbpFRUXhVVxcXOfaHUsKiK4d9933Qvgvb6GKLs/oGtyH6Or3QXQRXUTXbr5a64TopoKCEt05c+bI3LlzM15JAdG1Iwl/0UV0De5DdPX7ILqILqJrN1+tdUJ0U0FBiW6aQHTtqC261Yguouvajugiur4x0xoRXUQX0U0EeRfdkpIS2XfffY2u/fbbL9/lGoPo2vG/zyyQP/30EvnTTy+RDZ+vU8t7xJ8eDvPKpk32CTZtCvv/8Y4XrPrJvffWXIbjDpv4inmtDvlV8mW7zySPb45M7a7r4pozqk2zj+2cNPLbjOlbt29d2jHTGuOOudamOZ7rmmmO5zJfrXXK5Tw8x6+8/XacI4K8i255eblcc801xldSQHTtqP0J4PV8AjjWcQAAIF3gHNHkXXTTCpvOjiSIbv97EF0AACg8cI5oEN2YYNPZgegiugAA4AbOEQ2iGxNsOjuScOoC5+ga3MfLaPp9eBmNl9F4Gc1uvlrrxMtoqQDRjQlE1w5EV+S625/wlwtXEF23nIguohtXDNF1n6/WOiG6qQDRjQlE144kfDAC0TW4D9HV74PoIrqIrt18tdYJ0U0FiG5MILp2JEF04z5HF9FVaEd0EV3fmGmNiC6ii+gmAkQ3JhBdOxBdntFVaUd0EV3fmGmNiC6ii+gmAkQ3JhBdO5LwjC6ia3AfoqvfB9FFdBFdu/lqrROimwoQ3ZhAdO1Iguhy6oLBfYiufh9EF9FFdO3mq7VOiG4qQHRjAtG1A9FFdFXaEV1E1zdmWiOii+giuokA0Y0JRNeOcU+9I8NPGyzDTxssG1atUct75J8eCvNKdbV9gurqsP+5o5636iejR9dchuP+z4SXzGt1yK+SL9t9Jnl8c2Rqd10X15xRbZp9bOekkd9mTN+6fevSjpnWGHfMtTbN8VzXTHM8l/lqrVMu5+E5fuWIEThHBIhuTCC6dvBlNL6MBgAAbuAc0SC6McGmswPRFbnogXcQXQAAsAbnZaP/qAAAIABJREFUiAbRjQk2nR2j5/wD0UV0AQDAAZwjGkQ3Jth0dkyZ+qJ82WRv+bLJ3lL1wSK1vD86754wr3zyiX2CTz4J+1/810et+kmLFjWX4bjX3f6kea0O+VXyZbvPJI9vjkztruvimjOqTbOP7Zw08tuM6Vu3b13aMdMa44651qY5nuuaaY7nMl+tdcrlPDzHr2zWDOeIANGNCUTXjiR8MIJPABvcx6kL+n04dYFTFzh1wW6+WuvEqQupANGNCUTXDkQ3GaL7yevv+kmqyT2ILqJrUxeiqyOsiC6im1IQ3ZhAdO2oLbob3vtILW+SRDcJ5+j2vWSyn6Sa3IPoIro2dSG6OsKK6CK6KQXRjQlE147aH4xAdAtXdLOuJ6Kr3wfRRXQRXbv5aq0TopsKEN2YQHTt4MtoiK5KO6KL6PrGTGtEdBFdRDcRILoxgejagegm4xldRBfR9R7Ppz+im702RFdvnRDdVIDoxgSiawcvoyG6Ku2ILqLrGzOtEdFFdBHdRIDoxgSia8c9T70jN5z0B7nhpD/Ihsov1PIeddGDYV6pqrJPUFUV9h8warZVPxk5suYyHPd/7plnXqtDfo18WdfTJE+2e3zaXdfFNWdUm2Yf2zlp5LcZ07du37q0Y6Y1xh1zrU1zPNc10xzPZb5a65TLeXiOX3nVVThHBIhuTCC6dvBltGR8GU1jPQEAQBecIxpENybYdHYguoguAAC4gXNEg+jGBJvODkQX0QUAADdwjmgQ3Zhg09kx5YG5sqZ5iaxpXiJVHy1Ry/vDgePDvLJsmX2CZcvC/n+68TGrftK2bc1lOO61o542r9Uhv0a+rOtpkifbPT7truvimjOqTbOP7Zw08tuM6Vu3b13aMdMa44651qY5nuuaaY7nMl+tdcrlPDzHr9x/f5wjAkQ3JhBdO/gyGqcuqLRz6gKnLvjGTGvk1AVOXeDUhUSA6MYEomsHoovoqrQjuoiub8y0RkQX0UV0EwGiGxOIrh2ILqKr0o7oIrq+MdMaEV1EF9FNBKkW3UWLFkmfPn2kefPm0q5dOxk6dKhs3273otNFF10kQRDIRRddZNUP0bWDD0YguirtiC6i6xszrRHRRXQR3USQWtHdsGGDHHjggdKrVy+ZMWOGjB8/Xlq3bi1DhgwxzvH+++9Lq1atZJ999kF0YwbRRXRV2hFdRNc3ZlojoovoIrqJILWiO2LECGnZsqWsX78+jI0dO1YaNWokq1atMsrRq1cvufrqq6VTp06IbswguoiuSjuii+j6xkxrRHQRXUQ3EaRWdEtLS6Vv3751YlVVVVJUVCQTJ07M2v++++6TDh06yJYtWxDdHIDouovueo1nmhFdt5yILqIbVwzRdZ+v1johuqkgtaLbpk0bGT58eL14+/btZdiwYRn7btq0SQ488EB58MEHRUQQ3Rww/om35LYf/kpu++GvZMOKz9XydrvwgTCv1PrrvjHr14f9z7t9plU/KS+vuQzHvWLcHPNaa9V1432vmteVIZ9JvVnX0yRPtnt82h3W3StnVJtmH9s5aeS3GdO3bt+6tGOmNcYdc61NczzXNdMcz2W+WuuUy3l4jl958cU4RwSpFd3GjRvLyJEj68W7du0q5557bsa+l1xyiZSWlob/bCK6GzdulMrKyvCqqKhg01nAl9Hsv4y2+96rHv8g1roaGpMvowEAFA78cS0aRPdbfPjhh9K0aVNZsGBBGDMR3fLycgn+9T8d1L7YdGbUFt11m79Sy4vo6oLoAgAUHohuNKkVXddHF04//XTp37+/VFVVhVeHDh1k4MCBUlVVJTt37mywH3/R9QPRFbkQ0QUAAAcQ3WhSK7qlpaXSr1+/OrHq6uqsL6N16tSpwb/M7r6WmXxrXth0ttz7wDxZXnKALC85QDZ8tEQt7w8GTgjzyvLl9gmWLw/7X3TT41b95OCDay7DcctHPW1ea626Ro61eHbYs96s62mSJ9s9Pu0O6+6VM6pNs4/tnDTy24zpW7dvXdox0xrjjrnWpjme65ppjucyX611yuU8PMev7NgR54ggtaI7YsQIadWqlVRVVYWxcePGZT1e7PXXX5c5c+bUudq1aydnnnmmzJkzR7Zt22Y0PqJrB19GE7nW8dSFv939rHldnvVy6gKnLniP59OfUxey18apC3rrxKkLqSC1orv7gxFlZWUyc+ZMmTBhgpSUlNT7YETv3r2ld+/eGXNx6kL8cLyY+/Fit45GdG3noZYT0UV044ohuu7z1VonRDcVpFZ0RUQWLlwop5xyijRr1kzatm0rl112Wb1PAJeVlUlZWVnGPIhu/CC6iK5KO6KL6PrGTGtEdBFdRDcRpFp08wmiaweii+iqtCO6iK5vzLRGRBfRRXQTAaIbE4iuHYiuu+jyjK79PNRyIrqIblwxRNd9vlrrhOimAkQ3JhBdOxBdRFelHdFFdH1jpjUiuoguopsIEN2YQHTtQHQ5dUGlHdFFdH1jpjUiuoguopsIEN2YQHTtmDD9TRnbs6+M7dlX1i/TW7PuF0wN88ratfYJ1q4N+w+8bYZVP7n00prLcNwrxr5gXmutuv5670vmdXnWm3U9TfJku8en3WHdvXJGtWn2sZ2TRn6bMX3r9q1LO2ZaY9wx19o0x3NdM83xXOartU65nIfn+JUDBuAcESC6MYHo2nH3XL6M5vpltD9P58toAAD/zuAc0SC6McGmswPRRXQBAMANnCMaRDcm2HR2ILqILgAAuIFzRIPoxgSbzo7JD70kC9t0loVtOsuGRUvV8p4waGKYV1assE+wYkXY/8Kbn7DqJ9261VyG415957Pmtdaqa+S42eZ1edabdT1N8mS7x6fdYd29cka1afaxnZNGfpsxfev2rUs7Zlpj3DHX2jTHc10zzfFc5qu1Trmch+f4lV264BwRILoxgejaUfvUhQ3vfaSWl1MXdOvl1AVOXfAez6c/py5kr41TF/TWiVMXUgGiGxOIrh2Irvs5urchutbzUMuJ6CK6ccUQXff5aq0TopsKEN2YQHTtQHTT98GIZW+86zYWoovo2tSF6OoIK6KL6KYURDcmEF07EN30Pbpw1tApbmMhuoiuTV2Iro6wIrqIbkpBdGMC0bWjtuiuT5no7vzY7OW6tIlu6YBxbmMhuoiuTV2Iro6wIrqIbkpBdGMC0bVj6tT0iu79979g1MVVdAv1GV1EF9F1lkibuhBdHWFFdBHdlILoxgSia0eaRff0IeONuiC6Cu2ILqLrGzOtEdFFdBHdRIDoxgSia8fE6fNlSvczZEr3M2TtpyvV8h59wdQwr6xZY59gzZqw/6DbnnPq98NLHjDqcsXYF4xr3fXFF+G9N06eZ15Xhnpl4MCaK8PYWdez1ryPvmCq21g+7YbzUMsZ1abZx3ZOGvltxvSt27cu7ZhpjXHHXGvTHM91zTTHc5mv1jrlch6e41f2749zRIDoxgSia8eYWl9GW7MpHV9G293viD+bCbLNl9F27doV3nt1gX0Zja+nAQDkFpwjGkQ3Jth0diC6iC4AALiBc0SD6MYEm86O2qL7xaZtankLQXS7Xj3D6H5EFwAAXMA5okF0Y4JNZ8eUh1+Wt9ofLm+1P1zWLjI7jsuE4wdNCvPKSodnf1euDPtfcPOTTv1Ovuheoy5/vvO5sM+uTN9sF5Gdn60I773lntnmdWWoV048sebKsE5Z17PWvI8fNMltLJ92w3mo5Yxq0+xjOyeN/DZj+tbtW5d2zLTGuGOutWmO57pmmuO5zFdrnXI5D8/xK485BueIANGNCUTXjvtrnbqwbkFhnrpw6V8fderncurCrqWZZX/nx0vDezl1wX4eajk5dYFTF+KKceqC+3y11olTF1IBohsTiK4dSRDdXB4vZiO6t49BdG3noZYT0UV044ohuu7z1VonRDcVILoxgejacf/96RXdH58/wagLoqvQjugiur4x0xoRXUQX0U0EiG5MILp21BbdtYhuVtH9hkcX7KU0E4iumwBq1I3oNhxDdN3nq7VOiG4qQHRjAtG144H7Xwz/5UV0EV3ndkQX0fWNmdaI6CK6iG4iQHRjAtG1A9FFdFXaEV1E1zdmWiOii+giuokA0Y0JRNeO2qK7BtG1El2e0bWfh1pORBfRjSuG6LrPV2udEN1UgOjGBKJrx33T58ujXU+WR7ueLF98vFwtb4/zp4R5ZfVq+wSrV4f9h/zNQihr9et1yQNGXa68e3bYZ9fnn2e8d8eqf4b33jx5rnldGeqV/v1rrgzrlHU9a827x/lT3MbyaF/7j8/C8beuWJVpxuZjurRp9jH8bVTz24zpW7dvXdox0xrjjrnWpjme65ppjucyX611yuU8PMev7NcP54gA0Y0JRNeOcS99En5N6/Pqwvwy2m/Gz3fqZ/pltAvu3/NltF27dmW8d8c3O8N7y5/40KouHwr9y2iPv1MZjv1BZXXOxwcAyAc4RzSIbkyw6eyoLbr/rN6qlhfR1QXRBQAoPHCOaBDdmGDT2YHo1hXdnTsRXRcee2clogsA/3bgHNEgujHBprNj6mOvybzOR8u8zkfL5wsjHt53oOfgyWFeWWXxzOZuVq0K+59/y1NO/U66eKpRl6vumhn22bky8775esXK8N5bJrxoXleGeuXUU2uuDOuUdT1rzbvn4MluY3m0PzuzIhx/0VuLMs3YfEyXNs0+hr+Nan6bMX3r9q1LO2ZaY9wx19o0x3NdM83xXOartU65nIfn+JWlpThHBIhuTCC6djz4wJ5TF1a/o/cXyqSeurDz48ynLny95OPwXk5d2MPMJ14J25a8siDTjM3H5NQF3fF8+nPqQvbaOHVBb504dSEVILoxgejagegiuhrtM594OWxDdBFdFWnLVy2Irvt8tdYJ0U0FiG5MILp21BbdzxFdRNexHdFVyo/oZq8R0UV0Ed1EgOjGBKJrB6KL6Gq08+iCUn5EN3uNiC6ii+gmAkQ3JhBdOx56cE74L++/rejeZi662xcjug218xddpfyIbvYaEV1EF9FNBIhuTCC6dtQW3X++/YFaXkTXvl5EF9FFdA1qRHQRXUQ3ESC6MYHo2pEE0b34L4guoovoeo/n0x/RzV4boqu3TohuKkB0YwLRteP+6fNlxqEnyIxDT5BViz5Ry3vskClhXvn8c/sEn38e9h98yzNO/couud+oy5WjZ4V9dq76Z8Z7t69cFd47ctJc87oy1Cv/+Z81V4Z1yrqeteZ97JApbmN5tD8z6+1w/MULlmSasfmYLm2afQx/G9X8NmP61u1bl3bMtMa4Y661aY7numaa47nMV2udcjkPz/ErTz8d54gA0Y0JRNeOe17+NPyi1Yr1W9Tyan4Z7f+Ne92p35ExfBntqx3f8GW0Bqj9ZbQPV/FlNAD49wDniAbRjQk2nR2ILqKrAaILAP+O4BzRILoxwaazYzyiW0d0v0F0nUB0AeDfEZwjmlSL7qJFi6RPnz7SvHlzadeunQwdOlS2b9+esc/ixYtlyJAh0qVLF2nWrJl07txZBg0aJOvWrbMam01nR+1ndCsXFuYzuoNusRA3h2d0h9+95xndb7I8o/vVysrEPqNb9cln8u6xJ8vnJ/+YZ3R5RpdndHlGl2d0eUY3VlIruhs2bJADDzxQevXqJTNmzJDx48dL69atZciQIRn73XHHHdKtWze5/fbbZc6cOTJp0iTp2LGjdO3aNask1wbRtWPaQ3PCN0lXvVWYpy5cdMM0p34/vsD+gxE7lnyc8d6vFi0J703aqQs33P6kcQ6vUxde5dQFTl1QOEEgX7Vw6oL7fLXWiVMXUkFqRXfEiBHSsmVLWb9+fRgbO3asNGrUSFatWhXZb926dbJrV93/2fjVV1+VIAhk+vTpxuMjunbUEd2KlImuw5fR0iy6v7/qAWeRzdaO6CrlR3Sz14joIrqIbiJIreiWlpZK375968SqqqqkqKhIJk6caJVr69atEgSBjB492rgPomsHoltXdL9GdJ3a4xDdLR8t3pPz22fzIrqIblwxRNd9vlrrhOimgtSKbps2bWT48OH14u3bt5dhw4ZZ5Zo1a5YEQSBz5swx7oPo2vFIAkT3wphF9zpH0f37WER3N3GI7qq3PgjbHn14rlk/RBfRRXRzI4iIrkiA6GYitaLbuHFjGTlyZL14165d5dxzzzXOs23bNunWrZv06NGj3iMNtdm4caNUVlaGV0VFBZvOgtqiW1nxvlreghBdw2d0a4vu9sWIrkt7LKJbgeiqjufTH9HNXhuiq7dOiG4qQHSz8Nvf/lZatWolH36Y+Qin8vJyCf610WpfbDozkiG6Dzv1MxXd62u9pIXoIrrG62E6F0TXfZ6ILqKL6CaW1IquxqMLw4cPl8aNG8uMGdnPQeUvun48+tDc8F9eRDeQrxZnPhoL0W24fcZ0RBfR9YyZ1ojoIrqIbiJIreiWlpZKv3796sSqq6uNX0YbNWqUFBUVyeTJk53G5xldOx6c/rrM63y0zOt8tKz4YKla3p6DJ4d5JcNpG5GsWhX2H3jTE079Tr5kqlGX8tEzwz5ffbYi473blq8I771l4ovmdWWoV049tebKsE5Z17PWvHsObvjfnf937WNZc2SsJUP7MzMqwtyL316UccqmOSs/+EeY8+En3jDrl2kOtn0MfxvV/DZj+tbtW5d2zLTGuGOutWmO57pmmuO5zFdrnXI5D8/xK0tLcY4IUiu6I0aMkFatWklVVVUYGzduXNbjxURE7r//fikqKpIbb7zReXxE146Jr+z5MtqytV+q5dX8Mtovx77m1O/IcrMvo1384IKwz7avv8l479bte76Mds2Tyfoy2o9vfym2L6c9+rb+l9E+W7clzDn5tWUqOQEANME5okmt6O7+YERZWZnMnDlTJkyYICUlJfU+GNG7d2/p3bt3+M9z586VJk2ayCmnnCKvv/56nWvlypXG47Pp7Jj06rKCF91fjEF0kyS6H63aqJKztujei+gCQAGCc0STWtEVEVm4cKGccsop0qxZM2nbtq1cdtll9b5uVlZWJmVlZeE/R71UFgSBlJeXG4/NprOjtuh+iugiuo7E/RddRBcAChGcI5pUi24+YdPZ8eBTb8qjXU+WR7ueLMs/+kQtb4/zp4R5ZfVq+wSrV4f9z7nZQsxq9Su79AGjLn8e+3zYZ+uKzI/XbF2xKrz3lsnzzOvKUK/0719zZVinrOtZa97HXjClwRy/vO7xrDky1pKh/elZ74S5F72b+eQK05wrF34a5nz46TfN+mWaQ0Tb16v+Ka+deIa8f9L/Z57LZi42cZsxXdbAtX8uYqY1xh1zrU1zPNc10xzPZb5a65TLeXiOX9mvH84RAaIbE4iuHY8+vOfUhc/mv6eWV/PUhfOvj/fUhb/8/amwz7aFmU9d2Lpwz9e6knbqwu+G32+cw+fUhY+VTl2orHg/bHssxlMXnn7spTC+6YNFZrls5sKpC+7z5NQFTl3g1IXEgujGBKJrB6JbV3S3Llyc8V5EN7voah0vlkl0P351gb3kRbRNnfpCGN/w3kfm62E6F0TXfZ6ILqKL6CYWRDcmEF07EF2REaMKQ3Sr318YeZuN6PY6L/2iO+jah+wlr8BEt/aZzIiuRY2ILqKL6CYCRDcmEF07HqslustTJrpnOIjulo/yJ7pDb3w08rYkiW4uHl0YeE3yRbf2vkN0LWpEdBFdRDcRILoxgejakQjRvS5e0f2rhehu+WiP6I4a+5x5XQb1Rj1yIILoplF0G/xNEd3sNSK6iC6imwgQ3ZhAdO1AdOuK7peIrlN77I8uTKt7wgWiaz+eV39EN3ttiK7eOiG6qQDRjQlE147aorusQEV3yHUPOfVDdOuC6GYX3araz0kjuoguoms3X611QnRTAaIbE4iuHY9Mf03ean+4vNX+cPl0QWbJs+H4QZPCvGLxZbuQlSvD/gNGPO7Ur8/FDZ8n+22uv3tm2Gfz0k8z3rvlH8vCe/824QXzugzqPX7QpMjbsq5nrTwnDG44z6/Lp2XNISeeWHNZtj/73Jth7sUVH9XvG0WGnCvfXxLmfOSJ1+u0/fGGxxqeS6Y5RLTd+/DLYa4NSz4xy2Uzl4h4g7+pzZiW43n1z0XMtMa4Y661aY7numaa47nMV2udcjkPz/ErjzkG54gA0Y0JRNeOe19fHn59aukXm9Xyan4Z7czRrzr1O8rwy2hDp70b9tm07euM927+akd477VPWghdBjS+elb7ns7/0/A9p982L7Yvoz32zp4vo31QqfNltGVrv9zzZbTXl9dp+8+7XlGby91z/xHmWv/l9uwdlND4dwQA8gvOEQ2iGxNsOjvufW3PJ4CXfrFJLW9SRXdjCkT3oDyI7uPvVCZWdEfPQXQBwA2cIxpENybYdHYkQXT7xSy6l097L1WiG9dfdD9evUn+59H3GtwniK49iC5A8sE5okF0Y4JNZ8dDz74tU7qfIVO6nyGffJj5+VQbjr5gaphX1qyxT7BmTdj/9zdZiECtfr0ue9Coy7X3zAn7bPxsVcZ7N6/8Z3jvyCkvm9dlUO/RF0yNvC3retbKc8yFDef5xfVPZM0hAwfWXA20H3fRAzKl+xnyYI+f1mt/5oX3wtwL37N4+TDDmJ8tWhbmfPjZt+u0/eavTzU8l0xziGib8Pj8MNeGZZVmuWzmEhFv8De1GdNyPK/+uYiZ1hh3zLU2zfFc10xzPJf5aq1TLufhOX5l//44RwSIbkwgunY8Nm1e+CbpsjfeVcureerC4GvjPXXhpjufDvts+nBRxns3f7QovPeO//33OnUhUw2znnwlbFv8ss6pCyvf3HPqwuPfOnXhvHK9Uxem3Pd8GK/m1AVOXeDUBff5aq0Tpy6kAkQ3JhBdOxDdb4nuB+aiW6jHi5WlRHRXILqq43n1R3Sz14bo6q0TopsKEN2YQHTtqC26n6ZMdH9y4USjLohu/RyIbvb1MJ5LDkS3zhnYiK5fDNF1n6/WOiG6qQDRjQlE144kiO6gHIruxg8WZrw3CaKb70cXFr38TuY5G46ZSXQHILp17h1Q/lCDcUQX0UV0Y1ojRDcriG5MILp2pFl0TR9duPkuc9HdxDO6DbbPfurVsC0O0Z3+CKKbabxf/8999nUjug3HEF33+WqtE6KbChDdmEB07agtup+8jujWEZ0GSILoRuX57ZW5Ed2FLyG6iC6i6zVeviXOdb5a64TopgJENyYQXTvSLLqmjy7cfNczDYtOAyC6Dbc/n2DRvXcKoovoIrrWuRFdkQDRzQSiGxOIrh2PTH9NFrbpLAvbdJZ/vJVZ8mw4YdDEMK+sWGGfYMWKsP85Nzzq1O/Ui6cYdfnr2Flhn6rFmeVi08efhPfePuF587oM6j1h0MTI27Kup0GeX/95WtYc0q1bzdVAe6YaZs14M2z76I0PMs3YeMzP3l0c5nzsidfqtP3h+kcbriXTHCLaJj34UsO/f5b1MJ5LRLzB9bQZs9Zv/surHqoTN8phU28uYqY1xh1zrU1zPNc10xzPZb5a65TLeXiOX9mlC84RAaIbE4iuHfe+vjz8OtOizzeq5dX8Mlrfu15x6tftmplG91/x2PvGX8aq3vp1wX8ZLeqe0/7m92W0TPmffHdV2LZgRZVT/m/zaa0vo933xvI6bf/3jpfVvip254tLE/tltN39e98yR68wADAG54gG0Y0JNp0dSRBd108Au4juus1fZbwX0W24/1Pv6YvuJ2s251x0s/3+mmj+O3LKrXMVKwMAU3COaBDdmGDT2VFbdBf+szBF1/UvukeVzzC631V0r3nyQ6u6okib6L7z2Qan/N8mV6J715w9orsW0QUAC3COaBDdmGDT2fHwc+/I2J59ZWzPvrLkg0/V8na/YGqYV9autU+wdm3Y/79vshCBWv1+NNTsJbbrJ80L+6xblnnfbFzxz/Dem6a8bF6XQb3dL5gaeVvW9TTIc+Z107PmkEsvrbkaaM9Uw8y5H4Rt7y1YmnnOhmMuX7w8zDltRt0X3H7916cariVDvlVLP5MZP/61fPrbgXXaxk+fH+ZaW/v3z7IexnOJiDe4njZj1vrN+1473b5um3pzETOtMe6Ya22a47mumeZ4LvPVWqdczsNz/MoBA3COCBDdmEB07ah96sLS1yy+aJUFzVMXBl7jdurCj883O17sltF7Tl1Y/17mxxE2fbjn1IXbxzxrXpdBvXGfuvDfV041zmF76sKLT78Wtn340tuZ52w45krlD0YMvKbhPvfd90IYX7fgI6NcVnPJwakL/a+Y2mCcUxeUTkEwqY1TF/TWiVMXUgGiGxOIrh21RffjVxHdde9mEd0P9ojubXcnS3TjPF6stuh+oCS6lRV7RPcxBdHtM3h8g21Tp+4R3bWILqKL6LrPV2udEN1UgOjGBKJrx+MpFt3Th4w36nKro+j+LWGiG+eX0eY8s0d0358Xg+g+PLdO23kxie6aWqK7a+nSML7zY4PHMfIour9RFN0lryzIvVxa1LhjycdhrOL5N/VrQXTd56u1TohuKkB0YwLRtSPNontazKJ762hEdzdzYxDd2o8uPPot0Y16DCFTvlMiRPf+WqK7+p09Lxh++sa7Yfy1mW+4zyUHoqv5F91fXj6lXnzBixVhbMeSj6P750B0ty5cHMbumTRbvxZE132+WuuE6KYCRDcmEF07aovukn9b0X027JNm0f39VQ8Y5yg40X3IX3R7R4nu/XtE9/Naorvo5XfC+PNPGRxxpyy62xd/bDye5pfR/u+fJtWL3zNpdhjbunBxdP8ciO6WjxBdRBfRTQKIbkwgunakWXRPHewgugsyi+7GDxaG9946+hnzugzqTY/ovvX/t3fecVFcXR8fkGAECylq1BjNm8S8T+xJbCGAURNjYorm0USTN+ZJHoOJSewl1tiwIGosWBBRijRLUFGQ3kQEG6iAUgUbSrOASPm9fyw7O8O22dlZFtbz/Xzm44cz95wSeO7kAAAgAElEQVR77pmZ9bezM/dqHrPAPq9LLXR/0S50b55VrOrGFboRxxpf6Pr4RAjuz+BC1+MkayOhqyY3ErrS1YmErklAQtdAkNDVDVMWusMNLHSdSeiyRB83rNA94B/F2/fLMu1Ct6jBsRQidG+kKITulVjj3tFdsO6w4P6+nUdCV7JcSOiKH69UdSKhaxKQ0DUQJHR14/DheOTZvIQ8m5eQcTpVsrjvTdnDxkVenu4B8vJY/8nLD4jyG/qbhyAX552hrE9RWobGtmXpV9m2a7YLW5BCaL7vTVE/S4TWegqIM2lpgNYY+J//kW0q9mvKISr0DLvvYtwFzWMW2Gf+2ctsTP8D/DmLHVccVJ0Lpw6znYN4PvZTPVT67PePZe2F59NZ++VTF1l72PEk8WNRY1dZT07+8zcc0dqfvO3XC3y15yEw309meinltcszgrVVXM1i/e91fBl32ndBTU6u+phqbDXdX0VF1+6olfsKzPFhZhabi5tXpM79arWJrZ+U/Qm1CaiX6P7EjFeqOjXmOPTsv/CVV0hzqIGEroEgoasbXomKldHSCsskiyvlqk9filwZ7Y2Fwp6hXXQ4jfW5VVapsW3poyq27fyD0nwxaKyV0T7dHGuwldFOpN1i9yXnFouK3xDuymjucfzFTL5yTVCbi9z+0Qb+lGSv/Rms0sctNpu15917yNovXC9l7Ucv3pBkTKrybJiP3Oboqf3OuLztUOcoyfLqv/ykUl4uoRms7eHjagBA3r2HrO1E2i2d+3ljwXF0m3cM/snXdfK7X6lYnXDDyUyd+yUIKSHNoR4SugaCTjrdaKpCt66uTn+hu0B6oVvykCt0L+qUlzoaS+iO3qzfsrmNLXSzNAjdf283jNDNvasQuueNLHSneAkXug7rIiXLq9+yUKW81nOE7oN6oZtx6z5rC0wp0Lkfue9nW3RbYZC7DLcUQvd46k0MWBmG0Eu6i3WCIM2hHhK6BoJOOt3wPm26Qvf1BcKeoV14OJX1uVlWobEtV+jOO0BCVw5X6J4xgNDd3UDojtt+SqvQHblRd6GbXfSAtRtb6P7iLVzo2jei0L1f+QQAkH6rnLUd0EPofq6r0H0krdDV97NKG1sjr2HyvmRUPqkxSHzCuJDmUA8JXQNBJ51uBIRewEbbCdhoOwFX0nIli9vnD182Lop1Fz519+6x/t+u1WEar+Ji1u/t6X6CXFZ6xrE+t3I1nzel12+xbZfuiRWel4B8+/zhq7aZ1noKiDNhTbDWGFi6VLap2K8ph4iEK+y+lHM6vHxYXIwH8xci//c5qLt3j7crOyOfjel5jD9l2Q/rQ1TnwqnDVyuP8nz6T/dT6eMZfI6152Tms/bU1BzWHhJ7CVpRVz81dpX15OQ/a4eWWRc4bT/96x+evW7JErXHUVtedvMClfLaGniatZXfuA0AyLySy9qCIlLVx1Rjk/tOXKPhC6kKX+416HowSed+G9qUjoOW60BtblrGuTsoWSc/QTYB9RLdn5jx6lEng7QxZI3q/y6cMYM0hxpI6BoIErq68c8BxawLGXFNZ9YF7qpUjkvFzbowdMpuQS7cWRe4CwaooixVMevC6i1HNbbVNV9Dz7rw8xI/wTF0nXUh5ngiu+9itLhZF04e4d+5z026yO7z8+XfsfxtRYDWGQ5+WLif5+PgqDr/AL8o1p6bpLhLfyn2LGuPPHZKp7Fw43PPZV1mXVji8k/DHtT29808L9acm3RB83HWku/oaR5KdjfOrAv302Qv7F07pVhBLeSfOPUxtdh+1nR9q/At5VyDe/bpP+uC0nGQcDYB7rFnlwwXOXsAd8YXmnWBZl1oDpDQNRAkdHWjqQrd2qv6C10HR/XCkYsuQpf7n+zqzc1M6KpbNldFDH2E7oUocUJ32spA3i6uYPPdzxe6v3OEbt21ayrj/WcR/862MKGrmDFCV6F769wltn3JRcXUZrGc2ugkdDcIF7pfz1UIXbVzDGvw57b7TMX0YlyhW552BQBkKykyjS90iy9eZm1NXehyP8c27dBP6K7efLTxRJzI8Yr2I6FrkpDQNRAkdHXDlIWuvQihe0sHoevUzISuoxahy131TVehGy2B0J2+Sr3Q3b+f/zM+V+jWXhUmdIdO2a0yf67QzTktXujy5hLm3NVetjFIZb/ahO5SHYTueI7Q/X6BjzgBUs/nMzQL3dJUZaEbGiRe6Gq8vlX43rugELruEsyjq0nong7TMK2cAHH0JPMqa9NX6Gr9RUbomEnoSto/CV31kNA1ECR0dYMrdNPjzkkWV0qhq/GOT0MECkcuLq7BrI8uQnfV36YldNdtO6Zxv1Chez4yWcugVec9YxV/vuTc0+qF7h8rFUK3OvOqyngNhe6wX1QL3UD/KNaenaiH0FWzOtxfIoWuLnd0pRW6+5Ts3AUj5MtkZ2oRuikRZ9T3w7Hpekf37nmF0JViwQhNQrfhOaQxNxWxH2dksja50K3KuKrVr7kJ3VRNjyuR0H1qIaFrIEjo6kZTFbo1RhK63CVgVcEVuiv/1jKhv4T5SiF0uT9p837ur2fqcs1CWKjQPSdS6M500iB0fRoK3UB23xM1QrfhM7rDflW9MtoBjtDNSlT8qqHrymh8oat4eW7Jhn9U9quqntxnOnV5RpcrdP/vT/2E7hcqhK773jDWdrd+xTltz+iul68cKLHQLeIIXTePk0p1Y89tCYTuT4vFCV15DpVXlIUudyU+daKKOx75an2Tm7DQ1fhZS0L3qYWEroEgoasbJHR1E7olnOcDV25qvkKX93N/PWqX1RWQA1fono2QRujmcISujwahW5UhTOiOECB0r3KWwc6IUwi5hi/KqSJKndB1ES50uef9Yh2E7rg50gndL1UIXY994axN/hx7dqLi+ByvF7pcgeYiUOhOXqJhdhQVvrc5z0Lv2iMTuqkxKayN/aIlgdD972IdcuP87e0tO18fcpYrlr+MtmLTEa2iiiuQ5WLekEKX+wWehC4JXakgoWsgSOjqBlfoXokloSu/e6IO7oswjXlH117Ni1S6xOEK2RoVQlfbS0xChS77k7UQOHnPWn2Qt4srpBoK3Wkcofs4PVNlvO8X+PB8PlQjdLmPLmRyhG5mvIqf5jUQeUwhdNNiFUJ3sQ5Cl/tM50JncUJXzKMLuZxnk8fO9FTy3+upELrya4T7ReTYYdlUe9Wc/F1c1TyT2sAm9K6p/G77zbNprG3XnlAAwJnwJNaWeDJJUL9ChK5OIlzFNXj/crpSPZZvClLrJ8/pEUcg764Xuv9dLE7oXohK0dqfuufIdR2vrn4kdE0bEroGgoSubhw+FIciKxsUWdngcoI0CyAAgO0UdzYucnN19q/JzmH9/7ssULuDnNxc1s92irsgF+edJ1ifG+evaGx7Ny2Dbbt8i7AFKaTIV2s9BcRxXHGAbVOdla20/+flgRr70JRDdEgSuy8l+qySr1o4ec9Ye5i3K+tMGrvPyzeat++P1YfYfY+vZqmMN3EhX0CN+H2vyvwDAmNZe0ai4hrIPH2RtZ84qv0Z3fDjp9n2afEK4bjA5YjKflXV8/G1LNb2p0uQ5g45Yx07VyHqv1/sJ+za4/h/OdubNX85x1vJf69PJGsrOFf/6EJSKms7GiR7tOPxVUX+63eGsP2Ut30ed61tkHMmTanvSYs1fJHltFu0UfZM/I3zV1jb9r3hAIDTESmsLTEihfVFhw6yTV4HFTal48Dp88elARpz48VScQ2WX8lkbet2nAAA/LX5mFJ/dR06oKa9Iqf7GVfZNm6esi95/1nqr/W4VmZmodjaBsWtn8OT+mtc1fjQoQPqODX4dqGv1tgZiRfV1knjZ62KOmk9LlK1EZKPnv0XvvACaQ41mLTQTU9Px4gRI2BlZYWOHTtizpw5qKqq0upXVVWF2bNno2PHjrCyssKIESOQkZGhU98kdHXD81QuuyrQheulksXVd7WhJzW1ipWTtopbGU1o39yV0a4XP9LY9nZ5Jdt2hr80s1Q01spoX7kqls19UlOrtH+sq/pldbXFP5F2k92XcO2u2hw1xf1u92menbvy1rYo/h3oiW6J7L6KqhqV8T5YH8Wz91oSojL/PfE5rD21QLE6YFphGWsPSL6udRzBqYoapOSVsPYpXimsvaa2TilPbj6VT2pY2+R92h8Bkbd9b7XijvfHm2IFn/+qchjiFK5k2xJxVWn1uEs3FPXxOyNbaONRVTVrW3Q4Takf7jGW2z7epHnhFXm7X31kX6Dy7z1ibauPy+b0jc4sYm0xmUVsLv/enoClQfwXTBuuUKaqBvK/P/lbt0VhGsYq5i0ZLltU4/f951hbbf35sOFkJrrNO4adMbIvbdwVGF3qV3/7bIv2lQ2PXLjBtjlf/3muany/+pzFYKdwFD+U/b88wiVaa+y/jlxSOo8Nvapcc4A0h3pMVuiWlJSgU6dOsLe3R0hICNzd3dGuXTtMnTpVq6+joyPatWsHd3d3hISEwM7ODl26dEFZmfClaemk0429CblKH4xSoO8HIPc//DEilwAW2veCQ8KF7q0yhdCd6X9BY1uhNJbQ/fd2hZB9XF2jtH/cDvXL6mqLzxW68SKF7jc7E3n2yzcUQtc1iv8z5Ldup9l9Dx9Xq4w31DmKZ++1VLXQdY9TCN2LBYpr4GKBYglgIUI35JJiGeSkHMWqTL/6nGXtXJGlqp5cofjTXnFC95O/9RO6g7UI3Wt37gMAUgsUQtc3SSZ071cqluf981CqUj+qhG7DpZq5cJcC/22/7NGq3LsPWZvTcdkvMFyhG10vdLdGXlMSZmfzS9Bj4XH8dUQhfjUJXW0iXFs979yvVKrHdL/zStdhQ7+i+4/Zv9eHym72fLE1Xutx/ed8odK53DA2t6by+gkRusuOXGbbyL9cktAlzaEJkxW6Tk5OaN26NYo5y+/t3LkTLVq0wI0b6teLLygoQIsWLbBr1y7WVlxcDGtra6xdu1Zw/3TS6Qb3blZTEroVVQqh++/t2t9416fv+QcVQjf/nmahe6O0gm07K6D5Ct2Gd7UAYMIuxV3Suro6pf1ChW7cVXFCd9wO/uMB3DuqO6LVC90HaoSu/Tr+IhN9/grVKnS5v2qcv64Quv4ChG7Y5dts+1NZiuWMuXfw7lc+UcqTm8+Dxwqh+6OH9medVQndTzdLL3S5ojHjlkzocuuzv17olj5S3Imcd+CiUj/fu8uen+WKLU1Ct5rzy84fvjKhm130gLWtCpYJtfhrd1lbZPodAPw7kPLz/b3VEWpFrSrbRxvU5yYfh6Z63ixTfF7I7+jODrjA2srrz4eGftwv1GtOyO5ac39xqa1Vvj4B4PA5hdBNKyxTGZt7E0Eu+EdujNF6zqwKvsK2Kam/E0xClzSHJkxW6NrZ2WHMmDE8W2lpKczMzODh4aHWz93dHWZmZigt5YutMWPGwMHBQXD/xjjprhc/QkDydTgdv4IpXin43j0JU7xSMMP/PBYdTsOq4CtYeyIdLqEZ2Bx+Fdujs+AWm42/w69i36lceMTnwDMxD4EpBTiQUoDD5wpx7OJNnEi7hfArtxGVcQcxmUWIu3oXCdfuIiWvGCl5JTibL9tSC8qQmH0PaYVluHr7PtJvlSPn7kMUllYg/94jXC9+hBulFbhTXok75ZUofliFuw8e42ZZBea4xWDl0B+xcuiPiE++huqaWpUiR1d6T/Nj46JUdwH94PZd1n/ShlDhjqWlrF/vaRpeJOGwyCOW9bmerf7LGADcyLvJtl3oodvdHn3y1VpPAXG+Wx/Ctqksuqe0/+fNYez+J/eU14nXlENYQjq7LyFF+UU3ddSVlLB+/7c+hLcvNS2P3bf3GP8xkR83nmT33b9VpNjBqcOny/gvC74//6DK/L2OX2DtqWl5rP38xVzWfihS80uKABCbdJVtn3hWIcznuyvOr5LCO6xdVT3LbxWxtl+2hmvukDPWDxcrXlz7es1x1l5TXCLIn3vOjFj8j1Jeu46cZW1XruQp1ScgTCbiigtus7ZF9dcH9xhP2SIbU02xwjbWSb1Iqiy6x7abtUv2nHb21QLW5uwn+xUg+Xw2a4s4JbsDumZ/ImsruyGru8OCQ0pjUzoOnLp8vlL9XNn5WYXYPOpnhP84W8lPXs/C3Bus7S9P2S9TS/bGsba712+r9CvIUfi5+Mvugk9yCWVtj+8qX78AEBx7Relcbji+shuKc2y1j+zL5fg1waytrkT1ObMhIIltcyvvpvDP2tJSVDitAZyd2TrB2Vnxd30bnk2qNmrykbL/wkWLSOiqwWSFbvv27bFw4UIle+fOnTFv3jy1fnPmzEGXLl2U7AsWLEDHjh0F929ooVtTW4fyyie4Vy8U14Wko/v8Y7xvts1p475xbPezG2t/7c9gvLnoOHouCcFbi0+g55IQvLPiJAauCsNQ5ygMW69+s1sbyYs7f90h/Op9FtN8z+Fnz2TMCriAuYEX8eehVCw4lIrZARfwq89ZLA26hOVHL2PF0cuYs+YgLy+X0Ay4nMxUuf22/xyWHbmMrZHX4OkVzvPbEZ2FXTHZ2B2XA/e4HOyJz8HehFzsTZB9wXCPy8HoaR6sz6Ydx+F5KhdeiXnwOZ3P2/Yn5WPrrhNs289n7IXfmXz4JuXD70w+/M9ch8/pfHgm5mFvQi72xOfALTYbO2Oy4BqVha2R1/B3+FVsOJmJ9aEZWHsiHa7uIbx8ue02hmXCJTQD60LSefU8FBAN79Oy/LxPy/o6FBjDiyPP1+d0PrwS8+B9Oo8Xw98vCm6x2fA7k4+dMVnYn5TP2x/gFwXfpHzext1/9GAsO2a/M/n4c91hdt+0lYFwj8uBV2Ie/JOvI4CzBaYU8Lajh2J5ecvj+SblY+1WxQIW4+d6wSM+Bz6nZbXm5rJ/fwTrc/QgP57fGVmN9p3K5ed/KJbNbcI8L9a+estR9nhyl1z9dZk//JOvsz7+Z66zf/vX/71ovWJ2hSUu/7Bj4S5UsWdfGPYn5SsdDz/fSHieylU6f/cn5fM233pf79N58PON5LWV27lxA/2jlM5j+RZ0gF8r+fnE9f/nQAy8T+dh4jxvXo32JuTy5gf+zyJfeCXmyab7apDT4QbnpldiHm+mC7uf3WRjT8xjz1X5uevjE6EUj7uS4cip7vCIz+GdfzOdDsArMQ+jft/D2ra7hyqdA4cCY+CVyB/vQf9o3nRz8nzleXGvu4bX5KGAaJ6fR3wONu9UfF7YO8rGyV2hb7t7qFJ93GKzZVMX1ts+muoOzwZ5entHwDMxD+5xOdgZI/vM2BiWiW/nK47Tkg3/KPkdCojmrXInr33Dzwb5sfCUb6dy8TGnnpt2HJctv9wgjkd8DlyjsrAt6ho2h1/FFK8Upf9juNfo/UvpKKt4gvuX0nm2hn+LbVNW8QRlFU/YO+cAaNaFRsRkha6FhQWcnZ2V7D179sTkyZPV+v33v/9Fz549lezOzs545pln1PqVl5ejsLCQ3ZKTkw160kVm3FEpGP/nz2D8e3sCZgVcwF9HLmHegYv4ff85/LT3DCa6JWLcjlMY65qA0ZvjMNwlGkOdozDUOQrvr43Ae6sj8NbiE3hnRRh6LQ3Ba38Go+eSELy56DheXxBsFKFr7Lhi/cX46eIjdb2ExtPWTkgcfWNo2m+I4yVmn5Q+uo5JivhSnIv6nlNC85LaJjRHQ9vE5iZlf2JrJmV/YsYrVZ2kHsc7K8IU/4mT0G00SOg2QKzQXbp0KZj6E427Geqk4z4LJt/eXn4St8oqDdKfnLq6OtTU1qGquhYPH1fjfuUTlD2SfVstfliFm2UVKCiRPaKQVfQA+fceIavoAbKKHiC76AGu3r6PKzfLceVmOdIKy5BWWIaMW/d568anxpxFwrW7iM4sQkT6bYRcuoXg1Jv453whfE7nY2+C7E6n/E6opi3AL4qNu941GLMDLmCG33lM8UrBVJ+zmOKVgp89k/HT3mT86HEG3+xMxFjXBHy3+zS+230aC5z5dwjHbIvHWNcElZv8OHzyd6xsTk5GcZdp5MYYfLghGsPWR+GD9VH4oP4Lhv26SHzgHIXhLtG8eUe/mecFu7WR7BcQ+TbEKRzvrY6QrUBV33bcbC8MdgrHYKdwDFoVjoGrwjDEKRy2ayJ48T/aEIOPN8Xi082x+HxLHL7cFo+vXBMwbscp3sIH387zVmo31jUB47af4i15+/VcL15ug53C8dn0vUr75TnLt3FzFLl/OWMfBq2SPYs5YGUYBjuF8+ZP/fcsTwxapRjbEKdw3h2dr+r3D1wVhkGrwvHVLIXvDwv344P1UbBdE4EBK8Pwbv32zgrZvwM4G3dxAnlOg51k/Y2brcj3+wU++MA5Cu+tjsDAVWG8ffJchjQYw9iZnhhcfzwc1kXy7kp+NcsT/ZaFYrBTOL6Zx48lHzN3TGNm7mNzbjiGASvDMHBVmFL7QatkcRrWVX5cuPbv/vSB3dpI3rjGzfHCkPpaDKk/zwZzjin37t24OYpzgltTrr3hxu3r49/24L3VEbBdE8Grx7jZXrBdwz/vv5nnhaHOUbz+5ecc9xz7dp43hjjx6/jFjH2wXcPv++u5imvOdo1sk9eIG08+Fl4f873xgXMUvuUc2/FzlXMeN8cL9usiee3GzfHC+2sj8PFve3i5cP3ksWzXKNePe/y+meeFrzl+o6d54APnKN51Kf9saRif+/fHv+/BcJdo3ueY3O87zkIg4+tr9sH6KIzcGIPRm2WfF7+t4H9OvL82Ap/84cGzcfP8eq6sLtyafl0/5vfXKraGeY+c6s6LM2GerK/e9S982q2NRJ+/QtF7aQgJ3acYkxW6jf3oQmPf0S2vfIKz+SXs87C5dx+qfLGn2SBkgm1jxBXrL8ZPFx+p6yU0nrZ2YidKl2q/IY6XmH1S+ug6JiniS3Eu6ntOCc1LapvQHA1tE5ublP2JrZmU/YkZrxa/umvXeAuNXI49h/PXS3GZs9z25dhzSn+LbXP+einOXy9lX8yTtEYkdLViskLXzs4OY8eO5dnKysoEv4zWcCqxsWPHNvmX0Zo1JHRJ6Eqxn4QuCV19bUJzJKHbbIWuriKyUcahZ/8kdNXDGDsBQ+Hk5IQ2bdrwZk9wc3MTPL3Y7t27WVtJSQlat25N04sZEqmFm1RxDSGcpPCRul76ihJd4ugbQ6wo1YTYmGJEnhRCVMxY9BWUUvWnj39j2ITmaGibIQWclH5i6yVVbEPWqTHHoWf/JHTVwxg7AUMhXzDCwcEBoaGh2LNnD2xsbJQWjBg2bBiGDRvGszk6OsLGxgZ79uxBaGgoHBwcaMEIQyO1cJMqriGEkxQ+UtdLX1GiSxx9Y4gVpZoQG1OMyJNCiIoZi76CUqr+9PFvDJvQHA1tM6SAk9JPbL2kim3IOjXmOPTsn4SuehhjJ2BIrly5guHDh6NVq1bo0KEDZs+erbQEsIODg9IjCY8fP8asWbPQoUMHtGrVCiNGjEB6erpOfZPQ1ZHsbMDaWrZlZzeduGL9xfjp4iN1vYTG09ZOSBx9Y2jab4jjJWaflD66jkmK+FKci/qeU0LzktomNEdD28TmJmV/YmsmZX9ixitVnRpzHHr2X9iqFWkONZi00DUmJHQJgiAIgmgMSHOoh4SugaCTjiAIgiCIxoA0h3pI6BoIOukIgiAIgmgMSHOoh4SugaCTTkfKygBXV9mmw0t/Bo8r1l+Mny4+UtdLaDxt7YTE0TeGpv2GOF5i9knpo+uYpIgvxbmo7zklNC+pbUJzNLRNbG5S9ie2ZlL2J2a8UtWpMcehZ/+FTk6kOdRAQtdAkNDVEalnEZAqriHe4pfCR+p66fuGvC5x9I0hdoYETYiNKWbGASlmRRAzFn1nN5CqP338G8MmNEdD2ww5m4CUfmLrJVVsQ9apMcehZ/8064J6GGMnYKqQ0NURqYWbVHENIZyk8JG6XvqKEl3i6BtDrCjVhNiYYkSeFEJUzFj0FZRS9aePf2PYhOZoaJshBZyUfmLrJVVsQ9apMcehZ/8kdNXDGDsBU4WEro5ILdykimsI4SSFj9T10leU6BJH3xhiRakmxMYUI/KkEKJixqKvoJSqP338G8MmNEdD2wwp4KT0E1svqWIbsk6NOQ49+yehqx7G2AmYKiR0dURq4SZVXEMIJyl8pK6XvqJElzj6xhArSjUhNqYYkSeFEBUzFn0FpVT96ePfGDahORraZkgBJ6Wf2HpJFduQdWrMcejZPwld9TDGTsBUIaGrI1ILN6niGkI4SeEjdb30FSW6xNE3hlhRqgmxMcWIPCmEqJix6CsopepPH//GsAnN0dA2Qwo4Kf3E1kuq2IasU2OOQ8/+SeiqhzF2AqYKCV0dkVq4SRXXEMJJCh+p66WvKNEljr4xxIpSTYiNKUbkSSFExYxFX0EpVX/6+DeGTWiOhrYZUsBJ6Se2XlLFNmSdGnMcevZPQlc9jLETMFVI6OqI1MJNqriGEE5S+EhdL31FiS5x9I0hVpRqQmxMMSJPCiEqZiz6Ckqp+tPHvzFsQnM0tM2QAk5KP7H1kiq2IevUmOPQs38SuuphjJ2AqZKfnw+GYZCcnIzCwkLatG3x8Sisv1gL4+ObTlyx/mL8dPGRul5C42lrJySOvjE07TfE8RKzT0ofXcckRXwpzkV9zymheUltE5qjoW1ic5OyP7E1k7I/MeOVqk6NOQ49+09mZEI3Pz/f2PKnyUFC10AkJyeDqT/xaKONNtpoo4022gy9JScnG1v+NDlI6BqIqqoqJCcnIz8/X/hdJR03uZimu8ZNb6Nj07Q3Oj5Ne6Pj03Q3OjZNc8vPz0dycjKqqqqMLX+aHCR0mzGFhfQccFOFjk3Tho5P04aOT9OFjg3R3CCh24yhD5ymCx2bpg0dn6YNHZ+mCx0borlBQrcZQx84TRc6Nk0bOj5NGzo+TRc6NkRzg4RuM6a8vBxLly5FeXm5sVMhGkDHpmlDx5BAaP0AABFsSURBVKdpQ8en6ULHhmhukNAlCIIgCIIgTBISugRBEARBEIRJQkKXIAiCIAiCMElI6BIEQRAEQRAmCQldgiAIgiAIwiQhodsMSU9Px4gRI2BlZYWOHTtizpw5tBqKEQgICMDnn3+OLl26wMrKCn379oWHhwfq6up47Xbv3o033ngDLVu2RJ8+fXD06FEjZfz08uDBA3Tp0gUMw+D8+fO8fXR8jENNTQ3WrVuHHj16wNLSEp07d4ajoyOvTV1dHVavXo2uXbvi2WefxeDBg5GYmGikjJ8egoKCMHDgQLRu3RovvfQSxo8fj5ycHKV2dO0QzQESus2MkpISdOrUCfb29ggJCYG7uzvatWuHqVOnGju1p47Bgwfjm2++gZ+fHyIiIjB//nyYm5tj5cqVbBtfX1+YmZlh0aJFiIyMhKOjIywsLOg/60Zm7ty56Nixo5LQpeNjPCZNmoROnTrB1dUV0dHR8PHxwaxZs3htVq9eDUtLS2zYsAHh4eEYM2YM2rRpg+zsbCNlbfpERUXB3NwcP/zwA8LCwuDn54cePXqgR48eqKysZNvRtUM0F0joNjOcnJzQunVrFBcXs7adO3eiRYsWuHHjhhEze/q4e/eukm3y5Ml47rnn2L979OiBiRMn8toMGTIEo0aNMnh+hIz09HRYW1tjx44dSkKXjo9xCA0NhYWFBS5fvqy2TWVlJdq2bYsFCxawtqqqKnTr1g2//PJLY6T5VOLo6IhXX32V98tUZGQkGIbBqVOnWBtdO0RzgYRuM8POzg5jxozh2UpLS2FmZgYPDw/jJEWwuLq6gmEYVFRUIDs7GwzDICgoiNfm77//hqWlJR4/fmykLJ8uRowYgVmzZiEqKoondOn4GI/x48fjo48+0tgmIiICDMPg4sWLPPuMGTPQrVs3A2b3dPPjjz+iT58+PNvZs2fBMAwSEhIA0LVDNC9I6DYz2rdvj4ULFyrZO3fujHnz5hkhI4LLxIkT2f+Eg4ODwTAMrl27xmtz8uRJMAyD9PR0I2T4dBEYGIiOHTuivLxcSejS8TEer7zyCn777Tf88ccfaNu2LZ599ll8+umnvOdAt23bBjMzM6X3D3bt2gUzMzNUVFQ0dtpPBbGxsbCwsMC2bdtQVlaG7OxsjBw5Eu+++y5qa2sB0LVDNC9I6DYzLCws4OzsrGTv2bMnJk+ebISMCDlxcXEwNzfH5s2bAQDe3t5gGEbpEYfk5GTe3RHCMDx69Ahdu3aFu7s7ACgJXTo+xsPS0hKtW7fG4MGDERwcjICAALz22mv417/+herqagDAypUrYW1treQbGBgIhmHoUS0DcuTIEbRu3RoMw4BhGPTv3x937txh99O1QzQnSOg2M0joNk0KCgrQuXNnDB8+nL3rQf8ZGJc///wT7777LvusIQndpsMzzzwDKysrXu3lP48fOHAAAAldYxEfHw8bGxvMnDkTkZGRCAwMRJ8+fTBgwAD2kQS6dojmBAndZgY9utD0KC0tRa9evdC7d2+UlZWxdvp5z3jk5eXB0tISwcHBKC0tRWlpKY4ePQqGYRAbG4sHDx7Q8TEiHTp0wKBBg5Ts7dq1w/LlywHQowvG4p133sG4ceN4toKCApiZmbG/jtC1QzQnSOg2M+zs7DB27FieraysjF5GMxIVFRWwtbVF165dUVhYyNsnf2HjyJEjPPvmzZthaWlJcx8bEPndW3Wbg4MDHR8j4uDgoFboyqfnk7+Mlpqaymszc+ZMehnNgLRq1QqrVq1Ssrdv356dAYOuHaI5QUK3meHk5IQ2bdqgtLSUtbm5udH0Ykaguroao0ePxvPPP692mqQePXrgu+++49lsbW1pCh4DU1paiqioKN62ceNGMAwDNzc39vEFOj7GwdnZGa1atUJRURFrk//sLV90QD692KJFi9g2T548Qffu3Wl6MQPyv//7v0o3U/Ly8mBmZoZdu3axNrp2iOYCCd1mhnzBCAcHB4SGhmLPnj2wsbGhBSOMwOTJk8EwDFxcXJCYmMjb5M+y7d+/H2ZmZliyZAmioqIwZcoUWFhY8OajJBqHhs/oAnR8jEV5eTleeeUVDBw4EEFBQfD19cWrr76KAQMG8OZvXb16NVq2bIlNmzYhIiICX331FS0YYWA2bdoEhmHwxx9/sAtG9OrVC506dUJJSQnbjq4dorlAQrcZcuXKFQwfPhytWrVChw4dMHv2bPqpyAh069ZN7U/jubm5bLvdu3fj9ddfh6WlJXr37k3LZBoJVUIXoONjLLKysvDJJ5/A2toa7dq1w4QJE3D79m1em7q6Ojg5OeHll19Gy5YtMWjQIBJSBqaurg7bt29Hnz59YG1tjZdeegljxoxBRkaGUlu6dojmAAldgiAIgiAIwiQhoUsQBEEQBEGYJCR0CYIgCIIgCJOEhC5BEARBEARhkpDQJQiCIAiCIEwSEroEQRAEQRCESUJClyAIgiAIgjBJSOgSBEEQBEEQJgkJXYIgCIIgCMIkIaFLEARBEARBmCQkdAmCIAiCIAiThIQuQRB64+npiXfeeQdt2rRB27Zt0bNnT0yZMgUPHjyQtB9fX194eHgItuvDpEmT0LdvX0ljNjWkGmNAQAA+//xzdOnSBVZWVujbty88PDxQV1ensn1KSgqGDRsGKysrdO3aFe7u7lr7qKurw9tvv40dO3awtoKCAnz22Wfo06cPevfujfDwcHafo6Mj/vOf/+g9NoIgmjckdAmC0Iu1a9fC3Nwcs2fPRkhICIKDg+Hk5IR//etfKCgokLSvL774Ag4ODoLt+pCVlYXU1FRJYzY1pBK6gwcPxjfffAM/Pz9ERERg/vz5MDc3x8qVK5XaxsXFwdraGnPmzEFUVBSmTJkCc3NzrbU+cOAAOnXqhMePHwMAamtr0a9fP5w4cQIAcPHiRXTv3p1tn5WVBUtLS2RmZuo9PoIgmi8kdAmC0IsuXbpg8uTJKvepu6MnlsYQurW1tayYMnWkErp3795Vsk2ePBnPPfccz1ZRUYGuXbtiwYIFrK2mpgbt27fH4sWLNfZhb2+PuXPnsn8fO3YMn332Gft3dXU1rK2teT4ffPABpk2bptNYCIIwLUjoEgShF1ZWVliyZInWdvHx8Rg+fDhat26NNm3awNbWFvHx8QCAU6dOYfTo0XjppZdgbW2N/v37IzAwkOc/adIkMAzD25YuXarWLicuLg5Dhw6FlZUVbGxsMGnSJJSUlPDi9u3bF0ePHkWvXr1gYWGBEydOKIlA+d+hoaHo2bMnrK2tYW9vj6tXryqNdcuWLXj55ZdhZWWFUaNGIS4uDgzD4PDhw2rrI6QGuuQhJAdVQldbvYTi6uoKhmFQUVHBy8nGxgYPHz7kte3bty++//57tbFycnJgZmaGM2fOsLbVq1dj4cKF7N9nz57FoEGDlHJ48cUXUV1drXP+BEGYBiR0CYLQCzs7O7zwwgtwd3fHnTt3VLaJiYnBM888g6FDhyIgIAAhISFYtmwZ/Pz8AMiesV27di2OHz+O8PBwLFy4EObm5jhy5AgbIysrC/b29ujfvz8SExORmJiIgoICtXZAJq4tLS0xduxYHDt2DD4+PujWrRtGjhzJxp00aRKef/55vP766/D09ER4eDjy8vJUCt0XX3wR/fr1g7+/Pw4fPoxu3bphwIABvLEeOnQIDMPA0dERoaGhWLZsGbp3765V6AqpgdA8hObQcIxC6iWUiRMnolu3bjzbwIEDMWnSJFRXV/O2N954Az/99JPaWG5ubnj22Wd5gtXLywtffvklAODBgwdwcHBQ+mJw4cIFMAyDlJQUnfMnCMI0IKFLEIRepKWl4fXXX2fvpvbo0QOzZ8/G7du32TZDhgxB7969UVNTozVebW0tqqurMX78eN5P04Dujy68//77sLe359mSkpLAMAwSEhIAKO4UNxRDqoSuubk575nPvXv3gmEY3rPI7777Lj766CNerFmzZmkVulw01UBIHkJzaDhGIfUSQlxcHMzNzbF582bWVlZWBnNzc6W77/Jt2bJlauP9/PPP6NevH89WXV2Nb7/9Fm+99RbeeustbN++XcmvuroaLVq0gKurq+DcCYIwLUjoEgShN1VVVQgODsa0adPQr18/MAyDDh06oKCgAA8fPoS5uTlcXFzU+hcXF2Pq1Kno2rUrWrRowYqfN998k9dOF6H76NEjtGjRAlu2bFG6g9i2bVts2rQJgEzsdezYUSmmKqHb8A6lXAQmJiYCUAirrVu38trFxsZqFbpCa6AtD11y4I5RaL20UVBQgM6dO2P48OGora1l7dHR0WAYBocOHUJycjK7yUV6wzvXXD777DOMGDFCUP8NeeGFFwQ9WkMQhGlCQpcgCMkJCQlBixYtMH36dBQUFIBhGPj6+qptP3r0aHTo0AFbt25FZGQkkpOTMW7cOCVBp4vQLSwsVHv3kGEYzJo1C4BM7PXp00cpprpndLmcP38eDMMgKioKAHDr1i0wDAN/f39eu4yMDK1CV2gNtOWhSw7cWELrpYnS0lL06tULvXv3RllZGW+fl5cXGIZBaWkpz+7s7AxLS0ul9lw+/PBDfPrpp1r7V0Xnzp15L7ERBPF0QUKXIAiD8Pbbb+Pjjz/Weke3srIS5ubmSncgv/zyS72E7sOHD2FmZoYlS5bw7iDKt+vXrwNQP/OAGKEr9o6uLjXQlofYO7pC66WOiooK2NraomvXrigsLFTa7+HhAYZhlOZW7tevH7766iuNsb/++mvY2tpqbKMOKysrrFmzRpQvQRDNHxK6BEHoBfdZXDkVFRVo3749fvjhBwCyZ3T79u3L+ylbTmlpKRiGwa5du1jbvXv30Lp1ayWRN27cOKU36zXZ33vvPYwfP15j/lIKXUD2fOyHH37Iazdz5kyNQleXGgjJQ2gODWMJqZcqqqurMXr0aDz//PO4fPmyyjaRkZFKz0L7+fnBwsICFy5c0Bh/yZIl6Ny5s855FRUVsY9LEATxdEJClyAIvWjfvj1+/PFH+Pv7IzY2Fn5+frC1tcUzzzyD06dPA1DMujBs2DAEBgbi5MmTWLVqFTvrwjvvvIPu3bvjwIEDOHjwIPr374/u3bsribzFixfDysoKhw8fRnJyMm7cuKHRnpCQgJYtW2LChAk4fPgwIiMjsW/fPkyYMIEVXFIL3YMHD/JmPFi+fDm6desGhmEQFBSkto5CayAkD6E5NIwlpF6qmDx5MhiGgYuLCzvzhXyTz0lcVVWFl19+GYMHD0ZYWBg2bdoEKysrrF+/Xm1cOaGhoWAYBrdu3dLalsvx48fBMIzKL2MEQTwdkNAlCEIvtm3bhpEjR6Jz586wsLDAc889h48//hhxcXG8djExMbC3t0erVq3Qtm1bvP/++zh16hQAIDMzk527tVu3bvj7778xbdo0JZF3584dfPHFF7CxseHNl6vODgBnzpzBqFGj0LZtW7Rq1Qpvvvkmfv/9d3YqNKmFLgBs3rwZXbp0wbPPPosRI0YgKCgIDMMgOjpabR2F1kBoHkJyUBVLW71UIRfRqrbc3Fy2XVJSEvr27YuWLVuiZ8+e8Pb2VhuTS1VVFV544QXs2bNHUHs5v//+O+zs7HTyIQjCtCChSxAEYWA2btyIFi1a4N69e091Dvowffp0pccxNFFTU4NOnTph7969BsyKIIimDgldgiAICSkqKsL06dMRFBSE8PBwrFixAlZWVpg0adJTlYPUFBYWwsrKCpcuXRLU3tvbG6+99hqtikYQTzkkdAmCICSkrKwMo0aNwosvvggLCwt06dIFM2fORGVl5VOVgyHw9/dHRESEoLbe3t6IiYkxcEYEQTR1SOgSBEEQBEEQJgkJXYIgCIIgCMIkIaFLEARBEARBmCQkdAmCIAiCIAiThIQuQRAEQRAEYZKQ0CUIgiAIgiBMEhK6BEEQBEEQhElCQpcgCIIgCIIwSUjoEgRBEARBECbJ/wO4sVqd1kVD8wAAAABJRU5ErkJggg==\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "LaB6_new = get_calibrant(\"LaB6\")\n",
    "LaB6_new.wavelength = hc/gonioref1.param[-1]*1e-10\n",
    "p = jupyter.plot1d(res_mg1, calibrant=LaB6_new)\n",
    "p.figure.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdf3xU1Z3/8TvkByQkJPIjAYINKFCVX+LWWgthFGIVi8XEUhF1bS0UW1q3u4AgqKFqqRitgMrvQFtUXLVr/bUNUkGLgorVtSr4bbHID9cWJEFbIYjw/v6RnSmTmZPcOzPnZjK8no/HfaAnd+7cm/kkec+Zc89xBAAAAKQhp7VPAAAAALCBoAsAAIC0RNAFAABAWiLoAgAAIC0RdAEAAJCWCLoAAABISwRdAAAApCWCLgAAANISQRcAAABpiaALAACAtETQBQAAQFoi6AIAACAtEXQBAACQlgi6AAAASEsEXQAAAKQlgi4AAADSEkEXAAAAaYmgCwAAgLRE0AUAAEBaIugCAAAgLRF0AQAAkJYIugAAAEhLBF0AAACkJYIuAAAA0hJBFwAAAGmJoAsAAIC0RNAFAABAWiLoAgAAIC0RdAEAAJCWCLoAAABISwRdAAAApCWCLgAAANISQRcAAABpiaALAACAtETQBQAAQFoi6AIAACAtEXQBAACQlgi6AAAASEsEXeD/bNiwQY7jaNWqVVaf55prrpHj8KOH5Pj888910003qXfv3srIyFBBQUFrn5IrpaWlCgaDrX0anmzfvl1jxoxRly5d5DiO/u3f/i2u4/j1uyYVtcXXHW0bf22REkK/+I/fOnbsqLPOOkvz58/X559/7ts5EHS9e/LJJ/WVr3xF+fn5Oumkk3Tuuedq8eLFrX1aJ4Tly5fLcRxNnDhRv/zlL/Wf//mfrX1KYVVVVXr88cdjfq0tBp5hw4apc+fOuuuuu7R69Wq99tprxn137NihqqoqvfHGG1FfI+gGW/s0cAJJr7+2aLNCv/gvv/xyrV69Wr/61a90xx136LTTTpPjOJo0aZJv50DQ9aa2tlaBQEB9+/bV3XffrQULFujKK6/Uueee29qndkIYP368CgoKdOzYsdY+lSiO4+iaa66J+bWGhgYdPnzY3xNKwKFDhxQIBHT99de72r+53ycE3WBrnwZOIOnz1xZtWugX/89+9rOI9o8//lg9e/ZUIBDQX//6V1/OgaDrzRVXXCHHcbRz586I9oaGBt/P5R//+IeOHj0a82vHjh3T3//+96Q8TyqFtPPPP1+lpaWtfRoxNRd025qdO3fKcRxVVVW52p+gGxtBF35Ln7+2aNNMQVeSLrvsMjmOo02bNoXbDhw4oBtuuEGnnnqqsrOz1bVrV40fP17vvfdexGM/+eQTzZ49W1/+8pfVpUsXZWdn69RTT9WMGTP06aefxjyHpn98HnzwQWVnZ+viiy/WP/7xj2av4+mnn9aIESPUtWtXtW/fXr169dLYsWP1zjvvhPcJBd0DBw7ouuuuU7du3dS+fXt99atf1csvvxxxvKNHj+r2229XWVmZiouLlZWVpZNPPlnXXXedPvroo4h9d+zYEf5DvGbNGg0ePDh8DrNnz44ZzP73f/9X1113nU4++WRlZWWpR48emjRpkv72t781e53HmzBhghzHSdobkS1btujSSy8Nv179+/fX7bffriNHjkTsFwwGVVpaqr/85S8aN26cOnfuLMdxVF9fH/FaLlq0SAMGDFB2dnbEmMoXX3xRF154oQoKCtShQwcNHjxYCxcujOoZDb1ee/fu1Xe/+10VFxcrEAjE/Eg6xEvdHT16VPfcc48GDRqkvLw85eXlqV+/fvr2t7+tgwcPGp9j1apVUcN9jg9ipkARq85Dx3ruuedUXV2tU045RdnZ2erXr59+8YtfxHz+9evX6+KLL1bnzp3Vvn179enTR9dee6327dsXcyhSaAsxnd9TTz2lsrIy5eXlKTc3V2effbYeeuihqP1Cr/8HH3yg8ePHq7CwUDk5Ofra176m//f//p/x+9bU22+/rcsuuyyi3n7yk59EvFELBoMxr2XHjh0xj1lVVRVz/9D1Hv8arFy5UmeccYays7P1hS98QfPmzYt5TLc/FyYPP/ywLrnkEp188snKzs5Wly5dNHbsWL355ptR+4Zem23btuniiy9WXl6eOnXqpMsuu0wffvhhzO/h6NGj1bFjRxUUFKiiokI7duyI+RqbXvdErw8wIegiJZiC7rFjxzRkyBA5jqM//elPkhpD7hlnnKGOHTvqRz/6kZYsWaI5c+aouLhYXbt21fvvvx9+/LZt21RcXKwf/OAHmj9/vu677z6NGzdOgUBAX/va12Kew/EBYN68eQoEAvrud7/b4i/c559/Xu3atdPgwYN11113acWKFbrtttt0/vnn67/+67/C+4WC0znnnKMxY8bo3nvv1Zw5c9SpUyd16dJFn3zySXjfQ4cOqaCgQNdee63uuusuLV68WNdee62ysrI0cODAiPAaCrpDhw5Vp06ddOONN+ree+/VhRdeGB4WcrydO3eqZ8+e6ty5s2644QYtW7ZMM2bMUH5+vvr27asDBw608Ko12rhxowKBgC666CJ99tlnrh5j8vTTTys7O1unn366fvrTn2rJkiW65ppr1K5dO33zm9+M2DcYDKpLly7q1auXxo0bp/vvv1+33XabPv300/BreeaZZ6qkpERz5szRsmXLwq/DM888o8zMTHXv3l1VVVWaP3++ysrKYg6TCb1eZ555pi644AItWLBA1dXVUT3Yx/NSd7feeqscx9Ell1yi+++/X0uWLNHMmTM1YMAA7du3z/gc7733nlavXq3TTjtNXbt21erVq7V69epwcIkn6J5zzjkaPHiw5s2bp/nz5+uLX/yiHMfRiy++GHGMJUuWKBAIqKSkRLNnz9bSpUt18803a8iQIXrjjTf017/+VatXr5bjOCorKwuf2+rVq8PHiHV+S5culeM46tevn37605+quro6/PP/05/+NGLfYDCorl276tRTT9WVV16pRYsWafr06crOztZpp53malz/H/7wB+Xl5Sk/P18zZ87Ufffdp0suuUSO4+iiiy4Kfzrw7LPP6p577pHjOKqoqAhfi+mN75tvvqlZs2bJcRx973vfC+//7LPPRrwG55xzjnr37q3bbrtN9957r8455xw5jqMHH3ww4nhefi5Mhg8frrFjx+q2227T8uXLNXPmTHXu3Fl5eXnh360hpaWl6tu3r4qLi3Xddddp8eLFuu666xQIBHTBBRdE7Lt9+/bwm4xp06bp/vvv17hx41RaWqquXbu6CrrJuD7AhKCLlBD6xX/zzTdr37592rt3r958801NnDgx/Ach5Prrr1f79u31hz/8IeIY77//vvLz8yM+Kj18+HDM8HXTTTfJcRy98sorUeewatUqHT16VD/60Y88fVT57//+73Icp8Xe0FBw+v73vx/R/sgjj8hxHC1ZsiTcduzYsZi9eitWrJDjOBE3HoWCbrt27SJukjl27Jguv/zycI9dyDe+8Q116dIlKrBt2bJFGRkZrq97xYoVys7OVmZmpsaOHRv3R/qHDh1ScXGxvvrVr0a9Zj//+c/lOI42bNgQbgv1ss2ePTvqWKHX8qSTTop6PT7//HOVlpYqPz9fu3fvjmi/6KKL5DiOXnrppXB76PW68sorXV+Ll7obOnSoTj/9dNfHbirUs9lUPEH3zDPPjHj99uzZo+zsbI0fPz7ctnv37nCPW11dXdTxjx860tzQhabnV19fr44dO6p3794Rb7I+/fRTDR48WJmZmRG1Gnr9m/aA3nnnnXIcR7W1tTGf93jDhg1Tu3bton6XTJo0KSpwHv+JiRtuhi706NEj6lq7du2qr3zlK+E2rz8XJrFC+datW5WdnR31u6i0tDTq94sk/eAHP5DjOHr33XfDbbF+t0j//H3YUtBN1vUBJgRdpATTR53t2rXTmDFj9L//+7+SGkNbly5dNHLkSO3bty9qu+CCC9SjR4+Yz3HkyBHV1dVp3759ev755+U4jhYuXBh1DosXL1ZlZaUyMjK0fPly19cwZ84cOY6jRYsWNdv7GwpOTXtRPvroIzmOo6lTp8Z83Oeff676+nrt27dPf/nLX+Q4jv7jP/4j/PXQH+ILL7ww6rGvv/66HMfRlClTJDX2irdr107XXHNNzO/jF7/4RVc3kz3wwANyHEfLly/Xr3/9a2VmZmr06NE6dOhQeJ933nlHjuPozjvvbPZYTz75pBzH0bJly6LO591335XjOLrxxhvD+4eCTn19fdSxQq9lrOmfXn31VTmOox/96EdRX/v9738f9RqEXq/mhio0p6W6O++889SpUydt3LgxruMnM+guW7Ysav+BAwfqX/7lX8L/HwofDzzwQIvn5iXoht7o3X333VH7/upXv5LjOLr33nvDbcFgUO3atYuoNUl67bXXovaN5W9/+1u4J72pXbt2yXEcXXbZZeE2G0F31qxZUV8LTV8W4vXnoiXHjh3TJ598Ej7GoEGDdNZZZ0XsU1paqp49e0Y99rHHHpPjOHrqqackNf5O6tixo4YOHRq171//+ldXQTfZ1wc0RdBFSgj94v/ud7+rdevW6Xe/+502bdqk/fv3R+wX+uPU3NauXbuIxyxZskSDBw9WRkZG1L4/+clPos6hU6dOchxHv/zlLz1dw0cffaShQ4fKcRzl5+froosu0vz586PGroaCU6yPVh3H0be//e2Itscee0xf/vKXlZWVFXX+3/nOd8L7hf4Q//jHP446buiO8YsuukiS9Morr7T4fTzllFOavd6GhgZ169ZN5513Xrjt0UcfVWZmpkaNGhUei7pmzRo5jqPNmzc3e7x58+a1eE7XXntteP9gMKhu3brFPFbotbz//vujvvbw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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "27712\n",
      "72 53\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(*calc_fwhm(res_mg1, LaB6_new, 10, 88), \"o\", label=\"FWHM\")\n",
    "ax.plot(*calc_peak_error(res_mg1, LaB6_new, 10, 88), \"o\", label=\"error\")\n",
    "ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "ax.set_xlabel(res_mg.unit.label)\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## All other Modules\n",
    "\n",
    "We define now an automatic procedure for any module. \n",
    "The detection used 3 parameter visually extracted from the Figure1: \n",
    "\n",
    "* zero_pos: the frame where the beam-stop is in the center of the module\n",
    "* frame_start: the frame where the first peak of LaB6 appears (positive)\n",
    "* frame_stop: the frame where the second peak of LaB6 appears (positive)\n",
    "\n",
    "This is enough for boot-strapping the goniometer configuration."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_module(name,\n",
    "               zero_pos,\n",
    "               frame_start,\n",
    "               frame_stop,\n",
    "                ):\n",
    "    ds = data[name]\n",
    "    param = {\"dist\": 0.72, \n",
    "          \"poni1\": 640*50e-6, \n",
    "          \"poni2\": 4e-3, \n",
    "          \"rot1\":0, \n",
    "          \"offset\": -get_position(zero_pos), \n",
    "          \"scale\":1, \n",
    "          \"nrj\": nrj}\n",
    "\n",
    "    #Lock enegy for now and a couple of other parameters\n",
    "    bounds = {\"nrj\": (nrj, nrj),\n",
    "              \"dist\": (0.7, 0.8),\n",
    "              \"poni2\": (4e-3, 4e-3),\n",
    "              \"rot1\": (0,0),\n",
    "              \"scale\": (1,1)}\n",
    "\n",
    "    gonioref = GoniometerRefinement(param, \n",
    "                                    get_position, \n",
    "                                    trans, \n",
    "                                    detector=modules[name], \n",
    "                                    wavelength=wl, \n",
    "                                    bounds=bounds\n",
    "                                      )\n",
    "    goniometers[name] = gonioref\n",
    "    \n",
    "    for i in range(frame_start, frame_stop):\n",
    "        cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "        peak = peak_picking(name, i)\n",
    "        if len(peak)!=1: \n",
    "            continue\n",
    "        cp.append([peak[0]], ring=0)\n",
    "        img = (ds[i]).reshape((-1,1))\n",
    "        sg = gonioref.new_geometry(\"%s_%04i\"%(name, i), \n",
    "                                    image=img, \n",
    "                                    metadata=i, \n",
    "                                    control_points=cp, \n",
    "                                    calibrant=LaB6)\n",
    "        sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "\n",
    "    print(gonioref.chi2())\n",
    "    gonioref.refine2()\n",
    "        \n",
    "    tths = LaB6.get_2th()\n",
    "    #print(tths)\n",
    "    for i in range(frame_stop, ds.shape[0]):\n",
    "        frame_name = \"%s_%04i\"%(name, i)\n",
    "        if frame_name in gonioref.single_geometries:\n",
    "            continue\n",
    "        peak = peak_picking(name, i)\n",
    "        ai=gonioref.get_ai(get_position(i))\n",
    "        tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "        tth_low = tth[20]\n",
    "        tth_hi = tth[-20]\n",
    "        ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "        valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "        cnt = valid_peaks.sum()\n",
    "        if (len(peak) ==  cnt) and cnt>0:    \n",
    "            cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "            #revert the order of assignment if needed !!\n",
    "            if tth_hi < tth_low:\n",
    "                peak = peak[-1::-1]\n",
    "\n",
    "            for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "                cp.append([p], ring=r)\n",
    "            img = (ds[i]).reshape((-1,1))\n",
    "            sg = gonioref.new_geometry(frame_name, \n",
    "                                        image=img, \n",
    "                                        metadata=i, \n",
    "                                        control_points=cp, \n",
    "                                        calibrant=LaB6)\n",
    "            sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "            #print(frame_name, len(sg.geometry_refinement.data))\n",
    "\n",
    "\n",
    "    print(\" Number of peaks found and used for refinement\")\n",
    "    print(sum([len(sg.geometry_refinement.data) for sg in gonioref.single_geometries.values()]))\n",
    "\n",
    "    gonioref.refine2()\n",
    "    gonioref.set_bounds(\"poni1\", -1, 1)\n",
    "    gonioref.set_bounds(\"poni2\", -1, 1)\n",
    "    gonioref.set_bounds(\"rot1\", -1, 1)\n",
    "    gonioref.set_bounds(\"scale\", 0.9, 1.1)\n",
    "    gonioref.refine2()\n",
    "    \n",
    "    mg = gonioref.get_mg(position)\n",
    "    mg.radial_range = (0, 95)\n",
    "    images = [i.reshape(-1, 1) for i in ds]\n",
    "    res_mg = mg.integrate1d(images, 50000)\n",
    "    results[name] = res_mg\n",
    "    \n",
    "    LaB6_new = get_calibrant(\"LaB6\")\n",
    "    LaB6_new.wavelength = hc/gonioref.param[-1]*1e-10\n",
    "    p = jupyter.plot1d(res_mg, calibrant=LaB6_new)\n",
    "    p.figure.show()\n",
    "    \n",
    "    fig, ax = plt.subplots()\n",
    "    ax.plot(*calc_fwhm(res_mg, LaB6_new), \"o\", label=\"FWHM\")\n",
    "    ax.plot(*calc_peak_error(res_mg, LaB6_new, 10, 89), \"o\", label=\"error\")\n",
    "    ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "    ax.set_xlabel(res_mg.unit.label)\n",
    "    ax.legend()\n",
    "    fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8.406338771704969e-06\n",
      "Cost function before refinement: 8.406338771704969e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.15999445e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.808572002652971e-11\n",
      "     jac: array([ 4.57424569e-08,  8.17041295e-07,  2.47626008e-08, -1.79775418e-08,\n",
      "        9.91633086e-09,  6.60392633e-07, -5.86643086e-09])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20018961e-01,  3.40893083e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.15999182e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.808572002652971e-11\n",
      "GonioParam(dist=0.7200189605020697, poni1=0.03408930832642036, poni2=0.004, rot1=0.0, offset=-71.59991818229837, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03408930832642036\n",
      " Number of peaks found and used for refinement\n",
      "1093\n",
      "Cost function before refinement: 5.55731697942323e-07\n",
      "[ 7.20018961e-01  3.40893083e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.15999182e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.1961227626432414e-07\n",
      "     jac: array([-9.44231683e-07,  2.30905108e-08,  4.88576803e-06, -3.51407454e-06,\n",
      "       -1.74829040e-11,  2.33600314e-04,  1.70705134e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20018345e-01,  3.45650482e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.15999122e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.1961227626432414e-07\n",
      "GonioParam(dist=0.7200183446976933, poni1=0.034565048153275144, poni2=0.004, rot1=0.0, offset=-71.59991220000985, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03408930832642036 --> 0.034565048153275144\n",
      "Cost function before refinement: 1.1961227626432414e-07\n",
      "[ 7.20018345e-01  3.45650482e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.15999122e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 6.570539910514945e-10\n",
      "     jac: array([ 2.18222064e-08,  1.73947572e-08, -1.60806027e-07,  1.15807314e-07,\n",
      "       -1.82359884e-10,  8.08015633e-09,  8.85008258e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 90\n",
      "     nit: 10\n",
      "    njev: 10\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20686437e-01,  3.48247495e-02,  4.04316666e-03, -3.37686772e-05,\n",
      "       -7.15999088e+01,  9.98982863e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.570539910514945e-10\n",
      "GonioParam(dist=0.7206864370148651, poni1=0.03482474946152798, poni2=0.004043166657976692, rot1=-3.376867719168802e-05, offset=-71.5999088132962, scale=0.9989828627069963, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9989828627069963\n",
      "area_pixel=0.04101321524826673 area_sum=0.04635522282228846, Error= -0.13025088478639793\n",
      "area_pixel=0.04805074298699985 area_sum=0.050770187552341764, Error= -0.056595265677320754\n",
      "area_pixel=0.05470148979267009 area_sum=0.056228786108716095, Error= -0.027920561612394357\n",
      "area_pixel=0.062098761379894896 area_sum=0.062392206682634205, Error= -0.004725461445907599\n",
      "area_pixel=0.040415219606433794 area_sum=0.046336505956633724, Error= -0.1465112996505234\n",
      "area_pixel=0.06211637552982907 area_sum=0.062425234207049, Error= -0.004972258516139761\n",
      "area_pixel=0.0545957431661801 area_sum=0.05610676727387377, Error= -0.027676591984367248\n",
      "area_pixel=0.046408760633763535 area_sum=0.04924681820885727, Error= -0.06115348775396895\n",
      "area_pixel=0.04985697246649501 area_sum=0.05218296613471554, Error= -0.04665332757185872\n",
      "area_pixel=0.0522213978747601 area_sum=0.05417632538646705, Error= -0.03743537307054384\n",
      "area_pixel=0.06152426635945751 area_sum=0.06185028694021803, Error= -0.005299056779575941\n",
      "area_pixel=0.04466499326386497 area_sum=0.04810216511625828, Error= -0.07695449167735718\n",
      "area_pixel=0.043420597173687625 area_sum=0.04734951311542082, Error= -0.09048507384679808\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOy9eZQV1bX4X92gyCStBlDyGGLUJ6IERTQmaVoRNeZl/RLwmWd+4cUMggwOcUCeYmynEBWMioZACJOIEyo4Aw4NimOrODKIBoQmIlM3KCIi7O8fHYpuu+veM+y691b5+axVa8k+dfbe59wy7yPv3lOBAAAAAACkkCDfDQAAAAAAxAGiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQCAOgRBIGeffXa+2yhY2B8ASBKILgAUHKNGjZIzzjhDOnfuLEEQyH/+539G3ltWViZBEITXPvvsIwceeKCceOKJctVVV8mKFSusavuKXEVFhZSXl0t1dbVzjnxSXV0t5eXlUlFR0eg4ogsASQLRBYCCIwgCOeCAA+TUU0+VVq1aZRXdvfbaS6ZPny7Tp0+XyZMny4033ij9+vWTvffeW5o1aya33Xabce1t27bJl19+6dx7eXm5BEFgLdiFwooVKyQIAikvL2903Hd/AAByCaILAAXHhx9+GP5z586ds4pus2bNIvN07dpVgiCQ+++/X73Pxigk0d28ebP1nGyiCwCQJBBdAChofERXRGTx4sVSXFwshxxyiFG9xv5f87tjL774ovTu3VtatGgh+++/v/z+97+XTz/9tF4vdb9GsfuqK401NTVy2WWXyXe/+13Ze++95Vvf+pacddZZ9eR+N6tWrZJf/OIX0qZNG2nVqpX07dtXFi1aJGVlZdK5c+d693bu3FnKyspk0aJF8uMf/1jatGkjJSUlIiKyZcsWGTlypBx33HFywAEHyN577y3f/e53ZcSIEbJ169Ywx5QpUxrtv26tqK8uTJkyRXr27CnNmzeXVq1ayYknnihz585tcN/uPpcsWSI/+clPpFWrVrLvvvvKGWecIR9//HGGTwYAwB5EFwAKGl/RFRHp3bu3BEEgS5cuzVovSnS/973vyf777y+XXHKJjB8/Xs466ywJgkAGDhwY3jdv3jzp16+fBEEgt9xyS/h1irfeektEaiX3iCOOkJYtW8r5558v48ePl6uvvlrat28v3/rWt2TlypVhrk2bNkmnTp2kSZMmMnjwYBk3bpycc845st9++8khhxzSqOh+5zvfkZKSEvn9738v48ePl1GjRomIyJIlS6R9+/YydOhQufXWW+WOO+6QM888U4qKiuTUU08Nc3z44Ydyyy23SBAE0q9fv7D/WbNmZdyfyy+/XIIgkJ49e8qYMWPk+uuvl+985ztSVFQkd911V4M+DznkEGnfvr0MHjxY/va3v8ngwYOlqKhITjnllKyfDwCADYguABQ0GqJ7/vnnSxAE8sgjj2StFyW6RUVF8vLLL9eL/+QnP5GmTZvW+1vdTF9duOCCC6RZs2by+uuv14uvXLlSWrduXa/uiBEjJAgCmTRpUr17b7vttgZ/yyoi4Q/3Jk6c2KDu9u3bG/1e7ZVXXilBEMgrr7wSxrJ9deHr+7Ns2TIpKiqS448/Xr744oswvmHDBjnwwANlv/32k88++6xBn/fdd1+9vEOHDjX+jxEAAFMQ3RywfPlyGTRokBx11FFSXFwsZWVlsea59957pV+/fnLggQdKEAQyZcoU594B8o2G6I4cOVKCIGjwt4uNESW6P/jBDxrcO2bMGAmCQN55550wFiW6u3btkgMOOED69Okj69evb3CdcsopctBBB4X3H3744dK2bVv56quv6uXZvn277Lvvvo2K7v7779/g/q+zY8cO2bRpk6xfv17mz58vQRDI2LFjw3Fb0b3pppskCAJ58MEHG9x77bXXShAE8uijj9brs0OHDg3ufeCBBxrcCwDgC6KbA2bPni0dO3aUM888Uw477DBn0TXN89///d9yzDHHyO9+9ztEFxJPofyN7oABAxrcu/s7rfPnzw9jUaL7ySefNPr917pXcXFxeH+zZs3khBNOaLTHHj16NCq6vXr1ilzX+PHjpXv37tKkSZMGda+55prwPlvRHTx4cOTfxM6aNUuCIKh36kXn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ILp2ILqIrso4oovo+sZMe0R0EV1ENxEUlOi+8cYb0qNHD3n22Wdl586d+W7HC0TXjrqiuwnRRXRdxxFdRNc3ZtojoovoIrqJoKBEt6SkRJo3by7FxcWy1157yX777dfgSgqIrh2ILqKrMo7oIrq+MdMeEV1EF9FNBAUluuXl5XL11VdnvJIComsHoityHaLrP47oIrq+MdMeEV1EF9FNBEG+G0griK4dMxBdRFdjHNFFdH1jpj0iuoguopsIClJ0t23bJm+//bY8/vjjsnnz5ny34wSia8cMfoyG6GqMI7qIrm/MtEdEF9FFdBNBwYnujTfeKPvvv3/4gojXX39dREROO+00GTVqVJ67MwfRtWPinHdkwC+ulQG/uFbWf7JJLe9/XvxAmFe2brVPsHWryNy5tZfNfId5l0170bxX175882W7zySPb45M43F8Xi5jmnNs16SR36amb9++fWnHTHuMO+bam2Y91z3TrOeyXq19yuU6POtXzZiBc0RQUKJ73XXXSYsWLeSmm26SyspKKSoqCkX3jjvukOOOO84q35IlS6Rv377SokULad++vQwfPly2b99uNPf555+Xk046SVq2bCn77ruv/PCHP5Rly5YZ10Z07fjbfF4BzCuAAQDABZwjmoIS3Y4dO8pf/vIXERH56quv6onuvHnzrE5d2LRpkxx00EHSu3dvmTNnjkyaNEnatGkjw4YNyzp33rx5svfee8t5550nTz31lDz22GNyxRVXyJtvvmlcn4fODkQX0QUAADdwjmgKSnSbNWsmTz/9tIg0FN25c+dKixYtjHONGjVKWrVqJRs3bgxjEyZMkCZNmsiaNWsi5+3YsUM6deokl19+ueMqauGhs2PC00ul53nTped502VD9WdqeQ8e/nCYV3bssE+wY4fI2rW1l818h3mXzKg079W1L9982e4zyeObI9N4HJ+Xy5jmHNs1aeS3qenbt29f2jHTHuOOufamWc91zzTruaxXa59yuQ7P+lWLFuEcERSU6B555JFyxRVXiEhD0b3iiiusvrpQWloq/fr1qxerrq6WoqIimTJlSuS8J554QoIgyCjDJiC6dnC8GOfoqozzYzR+jOYbM+2RH6PxYzR+jJYICkp0J02aJHvttZdcffXV8u6770pRUZE89thjMn78eGnRooXce++9xrnatm0rI0eObBDv0KGDjBgxInLeVVddJQcccIDMmjVLDj30UGnSpIkcfvjhVrVFEF1bOF6MUxdUxhFdRNc3ZtojoovoIrqJoKBEV0TkpptuklatWklxcbEUFRVJUVGRtGrVSm6++WarPE2bNpXRo0c3iHfr1k0GDhwYOW/QoEGyzz77yP777y/jxo2Tp59+WgYMGCBBEMjChQsj523evFmqqqrCq7KykofOAkQX0VUZR3QRXd+YaY+ILqKL6CaCghNdEZEtW7bI3LlzZcaMGfLkk09KTU2NdQ5X0R04cKAEQSB//etfw9iuXbuke/fu8tOf/jRyXnl5uQT/ftDqXjx0ZiRBdLe8s8RpHqKrnAPRdVsLouu+TkQX0UV0E0tBie60adNkw4YNjY5t3LhRpk2bZpzL9asLl112mQRBIEuW1JeaCy+8UA4++ODIefyNrh9JEN0x4x53mofoKudAdN3Wgui6rxPRRXQR3cRSUKJbXFwsr7zySqNjr732mhQXFxvnKi0tlf79+9eL1dTUZP0x2pQpU6Qx0b3gggvkkEMOMa7Pd3TtSILoXvrnB53mIbrKORBdt7Uguu7rRHQRXUQ3sRSU6BYVFUWK7ty5c6WkpMQ416hRo6R169ZSXV0dxiZOnJj1eLF//etf0rRpU7n99tvD2K5du+Soo46SM844w7g+omsHoovoqowjuoiub8y0R0QX0UV0E0HeRXf27Nny29/+Vn77299KUVGR/PSnPw3/vPv65S9/Kf/xH/8hffv2Nc67+4URZWVlMnfuXJk8ebKUlJQ0eGFEnz59pE+fPvViF154obRq1UrGjh0rc+bMkbPOOkuaNGnCCyNiBNFFdFXGEV1E1zdm2iOii+giuokg76I7fvx46dGjh/To0UOKiorksMMOC/+8+zruuOPk17/+tXxg+X/QFy9eLCeffLI0b95c2rVrJ5deemmDVwCXlZVJWVlZvdiOHTvkyiuvlA4dOsjee+8tPXv2lDlz5ljVRnTt+PsTb8mgflfIoH5XyIaPG/+etgtdL5oZ5pVPP7VP8Omn4fyBf62wmicPPVR7GdYdMfUF814d8qvky3afSR7fHJnGXffFNWfUmOYc2zVp5Lep6du3b1/aMdMe44659qZZz3XPNOu5rFdrn3K5Ds/6VRMn4hwR5F1063LiiSfK4sWL892GCoiuHeMq9rwCeEOBvQJ49/xfT2r8azVa8ApgAABwAeeIpqBEN03w0NmB6Ir8AdEFAAAHcI5oCk50Fy9eLH/6059kyJAhDb6r+7vf/S7f7RnDQ2fH3559X7peNFO6XjRTNmz+XC1vl8seCfPKzp32CXbuDOefPfElq3nh/1vJsO5Fd79u3qtDfpV82e4zyeObI9O467645owa05xjuyaN/DY1ffv27Us7Ztpj3DHX3jTrue6ZZj2X9WrtUy7X4Vm/atkynCOCghLdyZMnS5MmTaRVq1ZyxBFHNPiu7tFHH53vFo1BdO3gx2j8GE1lnB+j8WM035hpj/wYjR+j8WO0RFBQovvd735XBgwYIJ9/rvc3evkC0bUD0UV0VcYRXUTXN2baI6KL6CK6iaCgRLdly5by9NNP57sNFRBdO+qKbvXbej9IRHSV+0V0zcYQXUQX0c2NICK6IgGim4mCEt0zzjhDRo0ale82VEB07bjrLkQX0VUYR3QRXd+YaY+ILqKL6CaCghLdp59+Wg499FC56qqrZMGCBfLWW281uJIComsHoovoqowjuoiub8y0R0QX0UV0E0FBiW5RUVF4FRcX17t2x5IComsHoovoqowjuoiub8y0R0QX0UV0E0FBiW5FRYXMnz8/45UUEF076oruN/XHaNfe+rC/XLiC6LrlRHQR3bhiiK77erX2CdFNBQUlumkC0bUD0UV0VcYRXUTXN2baI6KL6CK6iSDvoltSUiL77bef0bX//vvnu11jEF07Jj7+pvzhvy6WP/zXxbLhX+vV8h7xh/vDvLJli32CLVvC+ef+9VmreXLnnbWXYd0RUxaa9+qQXyVftvtM8vjmyDTuui+uOaPGNOfYrkkjv01N3759+9KOmfYYd8y1N816rnumWc9lvVr7lMt1eNavuvVWnCOCvItueXm5XH311cZXUkB07UjCK4DPnswrgAEAoPDAOaLJu+imFR46O/5asTyUvI2fbVfLqym6v56E6AIAQOGBc0SD6MYED50diC6iCwAAbuAc0SC6McFDZwfHi3G8mMo4P0bjx2i+MdMe+TEaP0bjx2iJANGNCUTXDkQX0VUZR3QRXd+YaY+ILqKL6CYCRDcmEF07EF1EV2Uc0UV0fWOmPSK6iC6imwgQ3ZhAdO1AdDlHV2Uc0UV0fWOmPSK6iC6imwgQ3ZhAdO1IhOjegOgiuoiudz2f+Yhu9t4QXb19QnRTAaIbE4iuHdPvejr8lxfRRXSdxxFdRNc3ZtojoovoIrqJANGNCUTXDkQX0VUZR3QRXd+YaY+ILqKL6CYCRDcmEF07EiG6fEcX0UV0/ev5zEd0s/eG6OrtE6KbChDdmEB07Zj46Bsy8tShMvLUobJpzTq1vEf+4b4wr9TU2CeoqQnnn3v7M1bzZNy42suw7v9Nfs68V4f8Kvmy3WeSxzdHpnHXfXHNGTWmOcd2TRr5bWr69u3bl3bMtMe4Y669adZz3TPNei7r1dqnXK7Ds37VqFE4RwSIbkwgunbwZjTejAYAAG7gHNEgujHBQ2cHoovoAgCAGzhHUo5OJAAAIABJREFUNIhuTPDQ2YHoilx4zxuILgAAWINzRIPoxgQPnR3TZzwjn+21j3y21z5S/c4Stbw/OvcfYV758EP7BB9+GM6/9IaHrOZJy5a1l2Hda299xLxXh/wq+bLdZ5LHN0emcdd9cc0ZNaY5x3ZNGvltavr27duXdsy0x7hjrr1p1nPdM816LuvV2qdcrsOzflXz5jhHBIhuTCC6dtQ9daGmUE9d4HgxTl3g1AX/ej7zOXUhe2+cuqC3T5y6kAoQ3ZhAdO1AdJMhupvfWewnqSb3ILqIrk1fiK6OsCK6iG5KQXRjAtG1A9FNhuheduNDfpJqcg+ii+ja9IXo6ggroovophRENyYQXTsSIbq8MCL7fiK6+nMQXUQX0bVbr9Y+IbqpANGNCUTXDkQX0VUZR3QRXd+YaY+ILqKL6CYCRDcmEF07eAUwoqsyjugiur4x0x4RXUQX0U0EiG5MILp2ILqIrso4oovo+sZMe0R0EV1ENxEgujGB6Nox8dHX5foTfyfXn/g72VT1iVreoy68N8wr1dX2Caqrw/lD7njaap6MHl17Gdb9v38sMO/VIb9Gvqz7aZIn2z0+46774pozakxzju2aNPLb1PTt27cv7Zhpj3HHXHvTrOe6Z5r1XNartU+5XIdn/aorr8Q5IkB0YwLRtSMJb0Y7ezJvRtPYTwAA0AXniAbRjQkeOjvueBbRRXQBAMAFnCMaRDcmeOjsqCu6mxDdWOv4gOgCABQeOEc0iG5M8NDZMe3uClnXokTWtSiRmveWqeX94eBJYV5ZscI+wYoV4fxLbpplNU/atau9DOteM/Yx814d8mvky7qfJnmy3eMz7rovrjmjxjTn2K5JI79NTd++ffvSjpn2GHfMtTfNeq57plnPZb1a+5TLdXjWrzrgAJwjAkQ3JhBdO+6cvufUBc7R9filuyucuuCWk1MXOHUhrhinLrivV2ufOHUhFSC6MYHo2sELIxBdlXFEF9H1jZn2iOgiuohuIkB0YwLRtQPRRXRVxhFdRNc3ZtojoovoIrqJANGNCUTXjkSI7g2ILqKL6HrX85mP6GbvDdHV2ydENxWkWnSXLFkiffv2lRYtWkj79u1l+PDhsn273S/6L7zwQgmCQC688EKreYiuHYl4M1rMonsNous/jugiur4x0x4RXUQX0U0EqRXdTZs2yUEHHSS9e/eWOXPmyKRJk6RNmzYybNgw4xxvv/22tG7dWvbdd19EN2YQXURXZRzRRXR9Y6Y9IrqILqKbCFIruqNGjZJWrVrJxo0bw9iECROkSZMmsmbNGqMcvXv3lquuuko6d+6M6MYMousuuhsWvWfel2e/iC6i613PZz6im703RFdvnxDdVJBa0S0tLZV+/frVi1VXV0tRUZFMmTIl6/y77rpLOnbsKFu3bkV0c8DE2ZVyyw9/Kbf88JeyadXHanm7X3BPmFfq/EePMRs3hvOHjp1nNU/Ky2svw7qXT6ww77VOX6OmLzTvK0M+k36z7qdJnmz3+Iw77LtXzqgxzTm2a9LIb1PTt2/fvrRjpj3GHXPtTbOe655p1nNZr9Y+5XIdnvWrLroI54ggtaLbtm1bGTlyZIN4hw4dZMSIERnnbtmyRQ466CC59957RUQQ3RzAK4Dt34y2+94rZ70Ta1+N1eTNaAAAhQPOEU1qRbdp06YyevToBvFu3brJwIEDM869+OKLpbS0NPyziehu3rxZqqqqwquyspKHzgJEF9EFAAA3EN1oEN2v8e6770qzZs1k0aJFYcxEdMvLyyX493dk6l48dGYguoguAAC4gehGk1rRdf3qwmmnnSYDBgyQ6urq8OrYsaMMHjxYqqurZefOnY3O4290/Zh293xZWXKgrCw5UKoXv6+W9weDJ4d5ZeVK+wQrV4bzL75pttU8Ofjg2suw7tVjHzPvtU5fY/4+17wvz36z7qdJnmz3+Iw77LtXzqgxzTm2a9LIb1PTt2/fvrRjpj3GHXPtTbOe655p1nNZr9Y+5XIdnvWrOnXCOSJIreiWlpZK//7968Vqamqy/hitc+fOjf7N7O5rxYoVRvX5rys77pzOqQuupy785W9PmPfl2S+nLnDqgnc9n/mcupC9N05d0NsnTl1IBakV3VGjRknr1q2luro6jE2cODHr8WIvvfSSVFRU1Lvat28vZ5xxhlRUVMi2bduM6iO6dnC8GKKrMo7oIrq+MdMeEV1EF9FNBKkV3d0vjCgrK5O5c+fK5MmTpaSkpMELI/r06SN9+vTJmItTF+IH0UV0VcYRXUTXN2baI6KL6CK6iSC1oisisnjxYjn55JOlefPm0q5dO7n00ksbvAK4rKxMysrKMuZBdOMH0UV0VcYRXUTXN2baI6KL6CK6iSDVoptPEF076oruprcU3vT1bxBd3X4RXUTXu57PfEQ3e2+Irt4+IbqpANGNCUTXjro/RkN0EV3ncUQX0fWNmfaI6CK6iG4iQHRjAtG1A9FFdFXGEV1E1zdm2iOii+giuokA0Y0JRNeOf8x6RSb06icTevWTjSv09qzH+TPCvLJ+vX2C9evD+cNuszivdv16kUsuqb0M614x4RnzXuv0dcOdz5n35dlv1v00yZPtHp9xh333yhk1pjnHdk0a+W1q+vbt25d2zLTHuGOuvWnWc90zzXou69Xap1yuw7N+1aBBOEcEiG5MILp21H0z2oZPv1DL+014M9pVs3kzGgDANxmcIxpENyZ46OxAdEUucBTdPyK6AADfaHCOaBDdmOChswPRRXQBAMANnCMaRDcmeOjsmHrvc7K4bRdZ3LaLbFqyXC3v94dMCfPKqlX2CVatCudfNOYRq3nSvXvtZVj3qjueMO+1Tl9jJj5l3pdnv1n30yRPtnt8xh323Stn1JjmHNs1aeS3qenbt29f2jHTHuOOufamWc91zzTruaxXa59yuQ7P+lVdu+IcESC6MYHo2sGpC+6nLtzCqQvW61DLyakLnLoQV4xTF9zXq7VPnLqQChDdmEB07UB0EV2VcUQX0fWNmfaI6CK6iG4iQHRjAtG1IwlvRhuO6FqJ7vsvLHKrhegiujZ9Ibo6woroIropBdGNCUTXjiSIbqH+je6t4wtTdH9+0TS3WoguomvTF6KrI6yILqKbUhDdmEB07aj71YWNiG7WObuWLw/vLdS/0S0dNNGtFqKL6Nr0hejqCCuii+imFEQ3JhBdOxBdkWtuQXS9xxFdRNc3ZtojoovoIrqJANGNCUTXjjSLrulXMRBdhXFEF9H1jZn2iOgiuohuIkB0YwLRteMfD70s03ucLtN7nC4b/rlaLe/R588I88q6dfYJ1q0L55936xyneRfcNtdoyuXjnzHuddcnn4T33njnc+Z9ZehXBg+uvTLUzrqfddZ99Pkz3Gr5jBuuQy1n1JjmHNs1aeS3qenbt29f2jHTHuOOufamWc91zzTruaxXa59yuQ7P+lUDBuAcESC6MYHo2lH3zWjrU/JmtN3zjvjjk0b327wZbefOXeG95Q+/a9WXDyb7ydvTAAByC84RDaIbEzx0diC69UV3165dGe9FdAEAYDc4RzSIbkzw0NmRBNH9TcyieyGiCwAADuAc0SC6McFDZ8eU+56T1zocLq91OFw2LnX40VgExw+ZGuaV1Q7f/V29Opx/0ZhHnOaddOGdRlOuuuPJcM6uTO9sF5GdH60K77150tPmfWXoV044ofbKsE9Z97POuo8fMtWtls+44TrUckaNac6xXZNGfpuavn379qUdM+0x7phrb5r1XPdMs57LerX2KZfr8KxfdcwxOEcEiG5MILp2pPnUhdOGTTKacm2dc3R3vr88471fvb/n1IVCfWEEpy4ozeHUBU5d4NQFu/Vq7ROnLqQCRDcmEF07EF2R6259JJyD6CK6zmtCdBFdrXr5ljjX9WrtE6KbChDdmEB07UB0+RtdlXFEF9H1jZn2iOgiuohuIkB0YwLRtSPNovvj8yYbTakrul9lEd0dy94P70V07dehlhPRRXTjiiG67uvV2idENxUgujGB6NpRV3Q3vPnNFN26X11AdBFd5zUhuoiuVr18S5zrerX2CdFNBYhuTCC6diC69UV3x7L3M96L6CK61mtBdN3XiegiuohuYkF0YwLRtSMJojs8ZtG9HtH1Ht+1fLnb543ougmgRt+IbuMxRNd9vVr7hOimAkQ3JhBdOyY98JI82O0kebDbSbL+g4/U8vY8b3qYV9autU+wdm04/4JbLISyzrzeF99jNOWP458O5+xY86+M93655l/hvTdNm2/eV4Z+ZcCA2ivDPmXdzzrr7nnedLdaHuPPL3wnrL/y3Q8zrdi8psuY5hzDz0Y1v01N3759+9KOmfYYd8y1N816rnumWc9lvVr7lMt1eNav6t8f54gA0Y0JRNeOum9GW7clXW9G63bVHKP7L7p3UTjny692Zrz3y6928ma0Rpj1RlVY+52qmpzXBwDIBzhHNIhuTPDQ2ZEE0T0b0UV0AQAKEJwjGkQ3Jnjo7Eiz6B6J6OYMRBcAvongHNEgujHBQ2fH5PsXyoIuR8uCLkfLhmX/VMvba+i0MK+sWWOfYM2acP6FN1uIW515J140w2hK+bi54ZztH2V4Z7uIbP9odXjvmCnPmveVoV855ZTaK8M+Zd3POuvuNXSaWy2P8SfnvhbWX/LakkwrNq/pMqY5x/CzUc1vU9O3b9++tGOmPcYdc+1Ns57rnmnWc1mv1j7lch2e9atKS3GOCBDdmEB07UjCqQtxHy92/W17Tl3YvjTzqQvbl+45deG2CZy6sJu5Dz8fji1buCjTis1rcuqCbj2f+Zy6kL03Tl3Q2ydOXUgFiG5MILp2ILr1RfeLpcsy3ltXdDlebA/1RPcFRBfRRXS96uVb4lzXq7VPiG4qQHRjAtG1IwmiG/s5uhai+8XSZeG9iO4e+BtdpfyIbvYeEV1EF9FNBIhuTCC6diC67qLLVxf2gOgq5Ud0s/eI6CK6iG4iQHRjAtG1A9H9muguQXRdxvnqglJ+RDd7j4guoovoJgJENyYQXTsQXZE/3fZoOAfRVRBd/kYX0dWQtnz1gui6r1drnxDdVIDoxgSia0cSRDfuH6NZie4SRLexcURXKT+im71HRBfRRXQTAaIbE4iuHZMfeFHmHPp9mXPo92X98hVqeY8dNj3MKx9/bJ/g44/D+RfcYiGUdeaVXXy30ZTyCU+Hc7atyvzcbFtVFd47Ztp8874y9Cs//3ntlWGfsu5nnXUfO2y6Wy2P8cfnvR7WX7oo838sGNd0GdOcY/jZqOa3qenbt29f2jHTHuOOufamWc91zzTruaxXa59yuQ7P+lWnnYZzRIDoxgSia0fdN6N9smWbWt4kvRnt4vveDOds+/KrjPdu+/Kr8N6rH+HNaLt56I3VYe131/BmNAD4ZoBzRIPoxgQPnR1JEN3fuIpuOaKbKxBdAPgmgnNEg+jGBA+dHakWXYe/0f18O6LrAqILAN9EcI5oEN2Y4KGzg+/oilz99z3f0f38o/R+R3fd+yvkle/1lo96n8p3dPmOLt/R5Tu6fEeX7+jGSqpFd8mSJdK3b19p0aKFtG/fXoYPHy7bt2/POGfp0qUybNgw6dq1qzRv3ly6dOkiQ4YMkQ0bNljVRnTtSMKpC3EfLzZq7J5TFz5fvDTjvXVPXRg74Unzvgz6jfvUhStummWcw+vUBc7R5dQFjRME8tULpy64r1drnzh1IRWkVnQ3bdokBx10kPTu3VvmzJkjkyZNkjZt2siwYcMyzrv99tule/fucuutt0pFRYVMnTpVOnXqJN26dcsqyXVBdO1Iteiej+jW5bdX3uMsstnG4xbdHcveN5uH6CK6iG5uBBHRFQkQ3UykVnRHjRolrVq1ko0bN4axCRMmSJMmTWTNmjWR8zZs2CC7du2qF3vhhRckCAKZPXu2cX1E1w5E1050ty1GdBsbnzNbX3TXL3ovHJv3yEKzeYguoovo5kYQEV2RANHNRGpFt7S0VPr161cvVl1dLUVFRTJlyhSrXJ9//rkEQSDjxo0znoPo2lFPdBcVpug6vzDCQXS3vofouozHIbprXnsnHHvw/vlm8xBdRBfRzY0gIroiAaKbidSKbtu2bWXkyJEN4h06dJARI0ZY5Zo3b54EQSAVFRXGcxBdOxBdkT8juma9ZBiP46sLiC6ii+giuohuckmt6DZt2lRGjx7dIN6tWzcZOHCgcZ5t27ZJ9+7dpWfPng2+0lCXzZs3S1VVVXhVVlby0FlQV3TXI7qIruM4f6OrlB/Rzd4joovoIrqJANHNwtlnny2tW7eWd9/NfFZpeXm5BP9+0OpePHRmTL8rAaL759yJ7mdZRPfzxUvDexHdPdQV3fe1RLcS0VWt5zMf0c3eG6Krt0+IbipIrehqfHVh5MiR0rRpU5kzJ/uB//yNrh9TZi6UBV2OlgVdjpZPlnyolrfX0GlhXsnwI8RI1qwJ518wxuIFCHXmnXTxDKMp146fF8757J8fZbz38xUfhff+ZWqFeV8Z+pVTTqm9MuxT1v2ss+5eQ6c1muP/v+ahrDky9pJh/PE5lWHupa8vybhk05xV73wQ5rz/4ZfN5mVag+0cw89GNb9NTd++ffvSjpn2GHfMtTfNeq57plnPZb1a+5TLdXjWryotxTkiSK3olpaWSv/+/evFampqjH+MNnbsWCkqKpJp0xr/P9bZ4Du6doyr+CB8o9W/aj5Xy6v5ZrT/neT2ZrSjDF8BfOn9e96MtmXblxnv3bp9R3jvtY/q/Q14NjTejPbjW5+L7c1pD76u/2a0jzZsDXNOe3GFSk4AAE1wjmhSK7qjRo2S1q1bS3V1dRibOHFi1uPFRETuvvtuKSoqkhtuuMG5Pg+dHWkW3SMR3XrkSnTfW7NZJWdd0b0T0QWAAgTniCa1orv7hRFlZWUyd+5cmTx5spSUlDR4YUSfPn2kT58+4Z/nz58ve+21l5x88sny0ksv1btWr15tXJ+Hzo66orumujBFd8A/Xs5+cyPzTEV3+Exz0f3sC0S3MeL+G11EFwAKEZwjmtSKrojI4sWL5eSTT5bmzZtLu3bt5NJLL23wdrOysjIpKysL/xz1o7IgCKS8vNy4Ng+dHVMfelke7HaSPNjtJPl42Qq1vD3Pmx7mlbVr7ROsXRvOH3rz407zyi65x2jKNROfCedsWZn5P6o++6gqvPfmOxeY95WhXxkwoPbKsE9Z97POunueN73RHGddNztrjoy9ZBh/bN4bYe4lb77fcG4UGXKuXvzPMOf9j71qNi/TGjLMqfrpGbL+52ea57JZi03cpqbLHrjOz0XMtMe4Y669adZz3TPNei7r1dqnXK7Ds35V//44RwSpFt18gujaMWPGM+EvST9+I/MJFzZonrpw8agHnOadbnjqwg23PxbO2fJe5h9SbX1vz6kLt/+dUxd2E/epCw/FeOrC2/NfC+NfLFlmvh+ma+HUBfd1cuoCpy5w6kJiQXRjAtG14+46ovuv199Ry5sk0f3z7XuOF0N0kyG6H7/xrr3kRYzV/Xdg01vvmeWyWQui675ORBfRRXQTC6IbE4iuHXffjejWE913M4vuZzGK7uZ3FkfepiG6vxl5t7PIZhvPtej+300P2UtegYlu3RdiILoWPSK6iC6imwgQ3ZhAdO2oK7prXitM0b3oTzn86oKF6N6hLLojbnwo8jZEt77oDr76PnvJixibkSfRPWvEdHcBdKjnNR/Rzd4boqu3T4huKkB0YwLRteOeu58N/+UtVNH9w59mOs1LmuhGCapI4Yvuk4iutXg2+pkiutl7RHQRXUQ3ESC6MYHo2oHofk1030F0XcbjEN2qyrfDsYdm1j/hAtG1r+c1H9HN3huiq7dPiG4qQHRjAtG1Iwmie+H1hSm62t/RTbLo1v3qwrI4RJe/0fWu5zUf0c3eG6Krt0+IbipAdGMC0bVjxsyF8lqHw+W1DodL1dsW559m4fghU8O8YvHCj5DVq8P5w2582Gle34vuMpryp/Hzwjk173+Y8d5Pl/8zvPeWKc+Y92XQ7/FDpkbelnU/DfL8qnxm1hxywgm1l+X4E0+8GuZeWmnxIo0MOVe/vSzM+cDsF+uNnXP9Q42vJdMaIsbuvP/5MNempR+Y5bJZS0S80c/UpqZlPa/5uYiZ9hh3zLU3zXque6ZZz2W9WvuUy3V41q865hicIwJENyYQXTsmPvdh+PaplRs+U8ur+Wa0X/79Jad5Rxm+GW3EA2+Fc6q3bs9475ZtX4b3XvOIzpvRNN56ZnLPabcsSNSb0VZu+GzPm9FeWllvrN9fF6qt5W/z97wdcMOnX3jnM0Xj3xEAyC84RzSIbkzw0NmB6CK6Gjz0xh7RfacK0TUB0QVIPjhHNIhuTPDQ2VFXdFesL0zRPWuCm+h2v3qu0f11RXfTZ+aie/UjOm+SS4rovvDBeun314Xy8ocbGozNeqMqFaK7McvnrwmiC5B8cI5oEN2Y4KGz465HKmV6j9Nleo/T5aMlK9TyHn3+jDCvrFtnn2DdunD+OWMed5pXNvw+oynXTa4I51SvyPzcbFm1Jrz3punPmfdl0O/R58+IvC3rfhrk+cV1D2fNIYMH116NjGfq4fFn3grHFr9l8ePDDDVXLV0R5rzvidfrjf36hkcb7yXTGiLGJs96Jcy1qe7nn2U/jNcSEW90P21qWtbzmp+LmGmPccdce9Os57pnmvVc1qu1T7lch2f9qgEDcI4IEN2YQHTtuO/eivCXpKtefVstr+apCxdcf7/TvJ9cMMVoyo137Dl1oebt6LeTiUjtK4L/fe+t458w78ug30I/dSFTD/MeWRiOLVuYrOPF7rprz6kL1XU/f05d4NQFTl2wW6/WPnHqQipAdGMC0bXj/jqi+9Erb6nl1RTd86/LnehWI7qR44iu41oQXfd1IrqILqKbWBDdmEB07Zh5X0X4L+83VXRv+iui+/UcPqK79HlEN9eiW+/sYkTXL4bouq9Xa58Q3VSA6MYEomtHXdFdWaCie14ORbfeCwMaYcu7iG5j43VFd8nzb2Res2FNRNdcdAdcPqPROKKL6CK6Me0RopsVRDcmEF07EF130b3lb4jubp569IVwTEt0V7+6R3RnIboZ6/3PZdPt+0Z0G48huu7r1donRDcVILoxgejaUVd0V3xjRffxcI6N6P4F0Q1BdDPcnwPRPWsEoqsWQ3Td16u1T4huKkB0YwLRteOBJIjutW6i+18XTjGaUld0NyK6keOIruNaciC6v0R09WKIrvt6tfYJ0U0FiG5MILp23PfgQlnctossbttFVryR+YdYNnx/yJQwr6xaZZ9g1apw/uA/zXKad8pF07PfLyJ/njAvnLNxyfKM925e9mF47+iJT5n3ZdDv94dMibwt634a5PnVVTOz5pDu3WuvRsYz9TB3zqvh2Hsvv5NpxcY1V725NMz54OwX6439/roHG+8l0xoixqbd91yYq3rpB2a5bNYSEW90P21q1vnM//uKe+37tuk3FzHTHuOOufamWc91zzTruaxXa59yuQ7P+lVdu+IcESC6MYHo2jH1hRXh25neX7tFLa/mm9H++28vOM0zfTPa/z34djhnfZZXwNZs3fNmtCtnWQhdBpLyZrRM+R95c004tmhVtVP+r1P3zWjTX1pZb+xnd+i9Ge2vFcsT+wrg3fNPHF2h1xgAGINzRIPoxgQPnR3TXkyv6H7vGnvRXbfFXHRHztJ5wUauRPfUv8Qnuo++pS+6K9bnRnTHVex5BXC2/9DRBNEFSD44RzSIbkzw0NlRV3SXFajonjEuXtG9/CFE17fPtIhuts9fE0QXIPngHNEgujHBQ2fHfU+8LhN69ZMJvfrJ8vdWqOXtcf6MMK+sX2+fYP36cP5vbnrcaV7ZZWY/Yrtu6oJwzvoVmZ+bmo/WhPf+adqCjPfa9tvj/BmRt2XdT4M8Z173cNYccskltVcj45l6mDP/nXDsrUWZv+dsWnPVspVhzvufrP8DtwE3PNZ4LxnybVq5Rl78+W/k44HD6o1Nnv1qmGvditXG+2G8loh4o/tpU7POZ/6zq2fb923Tby5ipj3GHXPtTbOe655p1nNZr9Y+5XIdnvWrBg3COSJAdGMC0bXjofvnh78k/fClN9Xyap66MPSa+5zmmZ66MHrcnlMXNryZ+dSFze8sDu8dM85CwA36jfvUhbOviO/UhWcfezEce/e51zOv2bDmmsp3wjGNF0ZcftOsRsdmzNhz6sKGRe8Z5bJaSw5OXfjViLvs++bUhcZjnLrgvl6tfeLUhVSA6MYEomvHQzMXhP/yfvCSxatbs6ApukMKVHRHI7ohdUX3HS3Rfa2O6N4/v96Yi+j2HTqp0bG764juuqSK7v8humoxRNd9vVr7hOimAkQ3JhBdO9IsuqYvjKgnuovMRfemvyZLdOM8R7fi8T2i+/YCfdF9ME7RvXuP6H6y6N1Gc+183+DrGCkR3feeeyP3cmnR467ly8PY0ucX6feC6LqvV2ufEN1UgOjGBKJrR13RXf5iukT3x+dPNpoyxkJ0a95GdBsbj0V063x14cH76ovukGvsRfdkA9Fd+8Ye0a37wooX577ivpaEie6Zl05vEN+w6L0wtmv58uj5ORDd7UvfD2PjJ83V7wXRdV+v1j4huqkA0Y0JRNeOWYjuN0Z0f3vlPcY5Ck10H7ivot5YXKL7cR3RXfbCojA+9+Hn3dfiKLpb31tqXE9TdP+/i6Y2iP9j6lNh7PPFS6Pn51h0JyC6WfcL0Y1pjxDdrCC6MYHo2lFXdN9/IWWie97/a+/M46qo3j8+IGGCW4uammG/yr7l3moZYmqZ37TSvlpa32j5KpaV5r6bhiiiSe6KiALK5hIqCrIpoIC44oIiq2CuCIiCiPD5/XG5585wt7lzZ1iuz/v1mj945jzPec5z5l4+d+7cc0wXujdNErrmL21lKUL3oEDoHjM8ZpHntqHyAAAgAElEQVR95qdo7qiG1BC6P0kQuv30CN2AbTHMfuWYZhOQiwl8oZsgfSwShe4a73DR/ckqdCfoELo+B5itroXu/QsXmY2ErvF6kdBVqEYkdI1CQlchSOiaxt/bNUL3ooUJ3YHjvEW5SBW67qsaltD9fo6CQndf7QrdcQuMC92ad+f1Cd3AAONC98Du2he6Mz2MbH3Na/v1jK067RYpdNM0QnfDJhK6xupFQlehGpHQNQoJXYUgoWsau3YlIKflM8hp+QwuJsuzAQIAvDt2E4uLnBzTA+TkMH+XP3ZI8uv/y2ZRLkvWhTOfG2cMf11ceD6dtV20dr/4vETk++5Y/XegjdZTRJxvfw82GgP/93+qQ8d5QznERhxl507Hm7BMnYE+806eZzEDQ4SPDvzoukN3Lrw6TF22W+DjNM5Hp09AcByz559MY/a0xFRmjwhLkj4WPXad9eTlP/3P3TAIr+2XMwOM5yEy339P9NPKa4NvNLOVpmcw/5utn8W1Vu1RkZmlP6Ye28OOz6OsQ0dUZmWblGNpegbLZf2WaJP7NWqTWj85+xNrE1Evyf1JGa9cdarNcZjZf/5zz5Hm0AMJXYUgoWsaW5Ny2e5KZ/KLZItr7q5PVVVVzH+YxJ3R/jVbnBCdydsZ7WpRmcG2BXfLWdtp20+blJc+amtntMEr4hXbGW3/mX/YuZTsAknxa8LfGW1jfJbg3PC1R/TmorYPXC5ce/fFmWE6fbziMpk959ZdZj+dV8jsoaeuyDImXXnWzEdtc/E1fmdc3bbf0ljZ8uq54IBWXksjLjDb3fsVAITzE5b6j8n9vDRrHxym7UVwymWT/O7er2D9eoQbeY6ZIBSGNId+SOgqBF10prEt2XKF7suz94lqP2uXNKE7NYSErhqlha5XXKbg3PB1ygjdrJsaoXvqskbo7q7nQvf9WhS6JdVC98LVO8wWcixPXzi9qH2HrBTxQz8ed8o023AvjTBf6J7IvY1vvJNxIve22bGIRw/SHPohoasQdNGZRn0VupWV5gvdTrNMF7r/FJUabMsXulNC5NlJrraE7pCVSgrdq+zcUZmEbpYBoTtCIaGbeaOE2U/yhO6e07UvdMf61U+hW1z2AACQdrWY2bbXotAtKpVX6Jr7XmWMtQcz8KP/MZQ9eKhIfKJuIc2hHxK6CkEXnWnsOHAay3uPxPLeI3H+TLZscbv9GsDiosB04VN58xbz/8bDhGdhCwqY3xsTxf2IzdU3nvlczTZ83RTk/sPazt10yGBbU/Pt9muA3mZG6ykizqjFYUZjYN481aHjvKEcog+fZ+eOnTDhx4cFBSieNhNZ4yaj8uYtwansi7kspu9e4ZJl3y0L150Lrw7DFwqFy2sTAnX6+IadYPasi7nMnpqaxewRcYZ/pKjuW2f99Nh11pOX/8S10Ub7U7f9ZH6o8TxE5us0fbtWXqtCkpitOP8aAODCuWxm2x2Tqj+mHpvad9RiA8v06fAtzrvGfFeFJJncb02b1jxIrZ+RcXqHHjPJT5RNRL0k9ydlvGbUSZE2Stao+u/8334jzaEHEroKQULXNPbsiGO/JGW7DMmAuasuPEzX7H4kddWFfj+KW3VhGW/VBcHOWDq4fVqzcP6ilXvE5yUiX6VXXRgzN1B0DFNXXTi0L5GdO31Q2qoL4X8L7+zlJJ9m5wIDYgTnfnUNNrrCwXezhYK/79iNOn2CAmOZPTtZc5f+bNxxZo/Ze8SksfDj83fyMmXVhdlL/xbd36hpmuXF+BtdyLXqghdv1YU7Z1Q/2EvnrTPM5k7CCgJj5gaalCN/5RMvnwOS+1XbtOZBxtUE+HO/fO0+0X66bNdOnK29FQUkjleyH626YJGQ0FUIErqmwRe6afEnZItbH4Tu+2M3inLhC13+zli6EAjdFSR01RyUQeiOdw0RnMrmCd2AbTWFbgg7x3bqqhGvptB9X4zQTZIudAt418adc5rVG/ibaZgidOcsEy90R07zY+Zf/tDzIcCAv0Do6tgwYsMmjdAtSj0PQM+GGrUgdPmvQTmWF1NS6Fby3sc815kndGcs2VV7Ik7ieCX7kdC1SEjoKgQJXdPY3QCE7tjflRa6+5iPKULXraEJ3Xl61p6t5s65NIPnxQrdU7HShO6EhTWF7il2rqbQHc8TupXpuoXu93OEQrffj7rX0eUL3Sye0D1jotAVrCXME/vzl4fq7FdOofslT+h+M3OrNAFSzSe/bdGy8+/o3j6teoxD54YavJhitwo2VegW1KLQPR6dIj43HbErLmp2cTNX6I793fDrV/SYSejK2j8JXf2Q0FUIErqmwRe65+Pqj9Dl/4OQKnT7KiB0Cxqw0HUxInT5d7bNEbonYwyIAwN5/7Zwu+BUdpI4oVtxMV1nvJp3dPVtGBHME7qZidLv6OoTur/XgtD9Yqp8QvdTHUKXv2HErVPihG78/iT9/fBso00UurdOaV6DcuyMZkjo1vywZDA3HbH5u7iphW7Z+YtG/UjoktC1BEjoKgQJXdMI3W65QrePi37hyIcvdK9asNA19o/y5wWGv/IWK3RPSBS6E92EQjeLJ3S3bRP+MIsvdB+IFLoDRAjdS0c0z6mfjzvB7FF7jK/8oW8b5Hl//q2zX1315D/TacozuiNkFLqf6RC63psjme3GSW2hy3aO48VkW2QbEQ3/m2Oa0L15UvMaXFctdPl1E3snWYzQNSk3XUI3TVvobtoSadSP/8iD+sMXCV0Sug0NEroKQULXNPhC91w9EroPZBC6hoQjH6lCd+FfDVfoCp5rrUbvtroicuALXYNf9xrIu6bQzUzkCd2t+oVu+QXdQvfbWdsEPh+O0y10Q4JimT2dtw32hXjTtgDWJ3TnLhMvdPkCx5QtgIdP0Qhd55nbpAmQaoZO1Ba6fHGmfo3oqg9fcIoVuibdNQVUPxittq2tFrrneB9K2N10GYSuSXebeX/vr/5x3r1zF5hNLXRdPXcbFVX8u77qH9yR0CWh29AgoasQJHRNgy90z8YdN+4gkoYkdJfyvrI3Rei6/mVki1YZ85Vb6Aqea63GPKGrEXlyCd2MRI2QMiR076dd1BnPeaZQ6A4UIXQv8oSuzjuWBpBD6PK/yZixxAShO1kjdL+dZbrQzTuq2f7780m+Wv4+W6KY7cqxM1r1Uf8Yjf9svceaMK1+dImGmnfe9eWYekj1/nT1hLbQTYk6ymxHDiSL6leM0JV6R1f9GizhPff+51rxQpcvkDeaKXRTDx1TRiCS0AU4ErqGIKGrECR0TWPXznjcsGuJG3YtcTZBng0QAKD3WG8WF9nZJvuXX8pk/mMWhBh3UJOdzfx6jxW3vJj7uv3M559T5w22LTh7gbVdsMLA+p8y52u0niLijFkQwtpUZGRqnR/7x3aDfRjK4WB4Mjt37KAJH5h4eU9YvFNw6lJyKjvnH3BQcO4Xt53s3P30DJ3xvpolFFAf/LpZZ/4hIXHMfiFRs9vdhcTTzB4u4hnd2P2aGqTyluqbvXwPs1dlabYy1lXPBxma636qR2jNLoTwxjps6lZmdp4TJO61x/P/YrrmQ8FnU/y1/H38Y5gt77jq0YX0JM387Nutqg//deu+bj/rp7j5k7hp3xJZR89o9f3NHAMfZHntZixT1ePKyfPMttonEgCQHHOM2RKjUpgvWrdWHeo66LBpzQOvz+/mGc5NEEvHa7D4fDqzLV0fDgBYsCJMeD1kZ6OqdWtUPN0KlZmq66M4TePntSUKgPHXJwCUXcxAgX1LFDR9Ag+qX+O6xiemLmLGa9RHrJ9SbcTkY2b/+U89RZpDDxYtdNPS0jBgwADY2dmhTZs2mDJlCsrLy436lZeXY/LkyWjTpg3s7OwwYMAAXLhg2s43JHRNwz8ph+0KdFzGLTDN3W2ovKKS+Q9dbfxumjl9T9+h2Rkt7/Y9g22v3yljbX8Lkmfd4draGW3o6gR2/sHDSq3z/1l72KC/2C2AD1+6qTdHQ3G/8koS2M9d0ey8tfag8O7MyA2J7Fxp+UOd8fovE4rjLvPCdebvk5DF7Kl5mt0BU/OKTNr5a1+qpgbHcjSL1Y/bepzZK3h111XP+xUPme17n6NG+1S3fcctitk+XhEn+vrXlUMvtygt28rodGbLqN49jj8/wSmXAQBlDzT5T9+RqtXP1xuTtGw1d7DTl6N6p7jcW/eYzS1M9cE0Lv0Gs8VeuM5y+XpjEhbtSxPEe1hZZbQG6r8HecYZqaDuXNWxbpXcZ3/P2qWqx2+BJ7Veh/N3n4PDtL1YvD9Ny29Z9e5vw9fq3w1Qzd7TmmtQvaWxrvHN3nUGA5cfQtG9ByaNj9CGNId+LFbo3r59G23btkWfPn0QHh4Ob29vtGjRAuPGjTPq6+LighYtWsDb2xvh4eFwdHRE+/btUVQkfmtauuhMwy+xfgpd/j/8zxQXuqdZ+8sFhoXutWKN0J0c3LC2AB62RiNkyyu0he4X6w3/IxUrdBMkCt0v1gvvmp69ohGaNYXuKC+N0L17v0JnvJrb4nYVIXRP5xUy+yneFsBqIWeI8LOabZCTszRC95dtJ3SKcl315AvFbzclG+1T3bYXT+gOXiF+q2exQndVzCVmS792BwBwJl8zP0FHVfUpuV/BbFNDTmv1w/8wI0boVlVptgL/0V8ldLN5W0O77lXdXU64dJPZYtJUQnfdwQxmU4vb1LwidJkbzgSyvhqIFeHG6sn/YDxjp0roTgw6xWz3yit0+/HeZzzCq4Uub9vrmmJdze5TV1ibk5cLdcbm11QtrAnpkObQj8UKXTc3NzRt2hQFvO331q9fj0aNGuHKFf37xefl5aFRo0bYsGEDsxUUFMDe3h7u7u6i+6eLzjS2HMlmb3rHcuqP0L1XrvmH+Z+1xn/xrqvvjtPF9T1tu3ihe6WwlLWdEtKwhO7nPKFb9uCh1nm+eKyq0v5HKlboxqdLE7rD1wqFLl9IGbqjW6JH6Pb1iBXYu8+P0Jn/5sOa18Cpyxqhe5IndNVCzhCR566x9oczNDWYwLuDV1ymuYOmq578695ZotAdstI8ofuODqG7OlYjdNOuFgMATudp6hOQrNo6uaj0AbNNDDql1c8or0QtmyExWfFQ882Oi69K6GbxhO4fe1RCNzHzFrNFnlNtUbxgzzmt673f0li9olaX7YM/hd8K1KTSyN3hq0Uawaq+wz05WCN01XdUa/rx32fcq8Uo/4OortcvAOw5rRG6+u7o8r8tU99lJqRDmkM/Fit0HR0dMXToUIGtsLAQVlZW8PHx0evn7e0NKysrFBYWCuxDhw6Fk5OT6P7r4qLLuXUXgUdzMS/0LH7YnIKvNybhs9UJ+GXbCczedQYL9pyD+/40zP37DNz3p2FFVDpWx16CV1wmthzJhn9SDjwj0xGcchkhx/Lgl5iDsNR/EH72KiLOXkXU+WuIvXAdcek3cPjSTSRm3sLR7AIcz72N03mFOJNfhDP5Rbhw9Q4uXS9B1s27yLxRgssF95B3+x4uF9zDP0WluFpUhmvFZbhx5z5ultzHrZL78AhMhGvf7+Ha93vEHU1HeUWl1pu3FLqOD2RxUWNOxVB89Qbz/255hHjHwkLm13WCgR+S8Ji5KY755GXp/zAGAPnZV1jbeVviDbY1Od/x+vM1Wk8Rcf67NJy1KbtxS+v8mBWR7PyDW9r7xBvKIfJwGjt3+Jj2D930UXX7NvP779Jwwblz53LYuY17hCuC/OB5gJ27c/WG5gSvDv+eL/yx4HvTd+jM33//KWY/nZrN7KdSs5l9R7RxQRCXnM7aJx7XCHP+9VWQd43ZddWTf93/tDpaqw8BvLF+OFfzPO9I933M/rDAwIdXPdfMB3P+1spr454TzHb+fA4AIPWMZn6CIlV3bwvyrjHbjE1xWv04/6l6LVcWaOZ9mJt+QV524xZr9/Nq1VrKWZfymG1JgEo4HzuVxWyRh1V3QBdv07y3FV1RXSP9Zu/SGpvWPPDy/cRV/8oq2ZfysOzD/2G/8yQtP3U9+e8Xv/uq3i/mbo5nthuXr+r0u5yp8VsWrLoLzr/mS67p/jDJfx2eOJ2lc3yF+dfZ367+h9kcwcNDdeh7v67ZRoyPWD+l2ojJx8z+82fPJqGrB4sVuq1atcKsWbO07O3atcO0adP0+k2ZMgXt27fXss+cORNt2rQR3b/SQvdhZRXulD3AzZL7yC8sZc9WNdSD/4tjxzFezP789L14aeY+vDJnP7rOC0fPBQfwpmsk3nOPxvtLY/HBnwfxkWcchqyMx2erE/CftYfxxfoj+HpjEr7emCSIO9NjF8ZtPY7fAk9iYtApTA4+hek7UjFjZyrm/H0G80LP4vfdZ7Fgzzn8UX3wd5NyHOOFZQcuwjMyHSui0uEZmY5lEReweH8aXPeew++7z2L2rjOYviNVtS0vz29NbAY2HMqEV5zm2JSQBe/4LGysPvi5eq7bB9/qDx/+STnwTcyB75FsbD6cDZ+ELMFSZP1/8sa25FwEHs1F0NHLCDyai4DkXGyrPgKScxGcchnBKZcRdPQya8M/+KteOI7xEvhuTVIdW45kC3L8e/shdk7drmacrUm58D2SjfWHMvBXVDoW708TxAgMiGH9qPOueT7waK5gfPzze3fGsTEFJOeqVkyoPvf78lAEpVzWeQTXOGrmza/TXN76s19N82e19UkQzpnPlij4J+Ug8GiuYEtrxzFe2Hw4G+sOZsAzMl3gs2dnHBvfd7MDmH2+ZyirB/9a+nF+EIKOXsa2ZFVdveOzsP5QBlbFXIJnZDqWRlwQxJm99G82lzVzDUjOhVdcptac+iflYLNvlNY8bk3SXFPbqufbPykHO4IParX1S8wRxA0JikVA9TwH8Px1XTO+iTnYfFh4re0MOQTfxBx8Nc2f2Rav3AvfI9mC1+jouYHwissUvD4cx3ipasVbg9dxjBf8k3KwdWu0znH6J+UIx1uj3ZrYDMEqFh/85A2/xBzV5hrVtgkLQ+CflIOPftnEbOu8I+CfJKzNrpBDWvXaFXJIsAqHui6rYi6x9wT/pByt1+SukENa9fRJyMKK9fsFtpp+a7zDtfs7ki3wG/CTt5bfFr8o9j7leyQbvkeysTTigmBTGJd5QVrXvceaMNWSadV//3fGVhSVPsCds5rVIe6cTUNR6QOto2YbMT5i/ZRqo86B/00KrbpQe1is0LWxsYGHh4eWvXPnzhg9erRev//973/o3Lmzlt3DwwOPPfaYXr/i4mLk5+ezIyUlRdGLLibtuk7B+NLMfRix7ghm7EzFvNCzmBx8Cj9sTsEPm4/i641JGL72CHq5ReHthVEY5BmHjzzj0G9pLPosicG7i6LxpmskOs3ahx7zI/DqnP1wmLYXL8/ehxdnhuH/ZoTVutCt67hS/aX4meIjd73ExjPWTkwcc2MYOq/EfEk5J6ePqWOSI74c16K515TYvOS2ic1RaZvU3OTsT2rN5OxPynjlqpPc43j9j0jNP3ESurUGCd0aSBW68+bNA1d9ofEPpS66w7wfPaiPN1wjcf1OmSL98amsrMKDh5Uoe/AQ98orUFz2ALfvluNWiepRhH+KSpFfWIrcW/eQe+seMm+U4NL1EmTcKMHFa3dw4eodnP+nGGevFLHHHfhrYaYeOo7DGTdx6OINxKRdx4Fz17Av9R/sPnUFO0/kISjlMnwTc+AdnwWvuEysic3Ayuh0LI+8iKURF7BoXxr+2HMOC/acU23NWR3XfZXqh1u/BpzAz9tO4Cf/4xi9JQX/25KC732O4ttNyfjGO5ndDf56Y5LgDuHPfwTjs9UJ+GRVAoasjMenq4R3kJ03JeOHzSkY63dMsAvV6LmB+MgzDgOWHUT/6mPAsoN43yMW7y+NRb/q478zNDtJjZrmD0f3GPReHI13F0XjPfdo9FkSA6clMejrESu4s/XFVD+8uygaby+MwlsLI/H2wij0covCO25ReHdRNHq5ReEN10i86RrJzqvbqI//8NYs/fS3Lcy/V3WMdxdFw2lJjCDH4ZP92Dl1u+GT/dj5L6f54R23KPRZEoMP/zyET1YlYMS6I5i8aAdr8/kkX9aPOif+jljDJ/uxHNXj+4C3s9jQiVvw1kLNuPjj+OjnTXijesz8401X7YO/3ewnEzajl5umlvxaD5voy2rT1yNWcFfqq2n+bB74eXz22xY4LYnBwOWqGozh3e0aNtEXby/UXTv1uIdN9BW0f2thJN5xi4KjewzeXxqLD/88hH//FYdPViXg8zWH8atrsM454uf0+STVON5fGosf5wdptf9iqp/OGO9Uj/0d3vU1gtd2xFQ/ZudvGMGfR75vzXF/PN4HvRdHw9E9RrV2LC/ue+7Cvr6Y6gdH9xh8Oc1PUOv+yw4KfIdPVvnWtPVeHC2Y26+ma+av5niHT9H08d8ZWzHIM04wj4N+2aQaC6/d8Cl+WuP7qLodf06HT1Hlwt9IZMRUP+EcVLdRX8Pq/BzdY7TqzO9v8Hgf9PWIxSjeOEdO80OfJcK6fTnND19N17T56OdNcHSPEdT7y2q/L3TMgfo9ytE9Bu+5Rws2+xjwkzdenr1P8LoloQsSurWIxQrd2n50obbv6BaXPcDx3Ns4e6UIl66rnoO9X6H7hwENArGLftd2XKn+UvxM8ZG7XlIXXZcSx9wYhs4rMV9SzsnpY+qY5Igvx7Vo7jUlNi+5bWJzVNomNTc5+5NaMxP7Oxd3AicvFwp2llPbah4124jxEeunVBt1DmfyiyTXiISudCxW6Do6OmLYsGECW1FRkegfo9VcSmzYsGH1/sdoDRoSuiR05ThPQpeErrk2sTmS0JVN6JoVW8k61eY4zOyfhK5+uLpOQCnc3NzQrFkzweoJXl5eopcX27hxI7Pdvn0bTZs2peXFlERu4SZXXCWEkxw+ctfLXFFiShxzY0gVpYaQGlOKyJNDiEoZi7mCUq7+zPGvDZvYHJW2KSng5PSTWi+5YitZp9och5n9k9DVD1fXCSiFesMIJycnREREYNOmTWjZsqXWhhH9+vVDv379BDYXFxe0bNkSmzZtQkREBJycnGjDCKWRW7jJFVcJ4SSHj9z1MleUmBLH3BhSRakhpMaUIvLkEKJSxmKuoJSrP3P8a8MmNkelbUoKODn9pNZLrthK1qk2x2Fm/yR09cPVdQJKcv78efTv3x9NmjRB69atMXnyZK0tgJ2cnLQeSbh//z4mTZqE1q1bo0mTJhgwYADS0kzbuYWErolkZgL29qojM7P+xJXqL8XPFB+56yU2nrF2YuKYG8PQeSXmS8o5OX1MHZMc8eW4Fs29psTmJbdNbI5K26TmJmd/UmsmZ39SxitXnWpzHGb2n9+kCWkOPVi00K1LSOgSBEEQBFEbkObQDwldhaCLjiAIgiCI2oA0h35I6CoEXXQEQRAEQdQGpDn0Q0JXIeiiM5GiImDNGtVhwo/+FI8r1V+Knyk+ctdLbDxj7cTEMTeGofNKzJeUc3L6mDomOeLLcS2ae02JzUtum9gclbZJzU3O/qTWTM7+pIxXrjrV5jjM7D/fzY00hx5I6CoECV0TkXsVAbniKvErfjl85K6Xub+QNyWOuTGkrpBgCKkxpaw4IMeqCFLGYu7qBnL1Z45/bdjE5qi0TcnVBOT0k1ovuWIrWafaHIeZ/dOqC/rh6joBS4WEronILdzkiquEcJLDR+56mStKTIljbgypotQQUmNKEXlyCFEpYzFXUMrVnzn+tWETm6PSNiUFnJx+UuslV2wl61Sb4zCzfxK6+uHqOgFLhYSuicgt3OSKq4RwksNH7nqZK0pMiWNuDKmi1BBSY0oReXIIUSljMVdQytWfOf61YRObo9I2JQWcnH5S6yVXbCXrVJvjMLN/Err64eo6AUuFhK6JyC3c5IqrhHCSw0fuepkrSkyJY24MqaLUEFJjShF5cghRKWMxV1DK1Z85/rVhE5uj0jYlBZycflLrJVdsJetUm+Mws38Suvrh6joBS4WEronILdzkiquEcJLDR+56mStKTIljbgypotQQUmNKEXlyCFEpYzFXUMrVnzn+tWETm6PSNiUFnJx+UuslV2wl61Sb4zCzfxK6+uHqOgFLhYSuicgt3OSKq4RwksNH7nqZK0pMiWNuDKmi1BBSY0oReXIIUSljMVdQytWfOf61YRObo9I2JQWcnH5S6yVXbCXrVJvjMLN/Err64eo6AUuFhK6JyC3c5IqrhHCSw0fuepkrSkyJY24MqaLUEFJjShF5cghRKWMxV1DK1Z85/rVhE5uj0jYlBZycflLrJVdsJetUm+Mws38Suvrh6joBSyU3NxccxyElJQX5+fl0GDsSEpBf/WLNT0ioP3Gl+kvxM8VH7nqJjWesnZg45sYwdF6J+ZJyTk4fU8ckR3w5rkVzrymxecltE5uj0japucnZn9SaydmflPHKVafaHIeZ/adwKqGbm5tb1/Kn3kFCVyFSUlLAVV94dNBBBx100EEHHUofKSkpdS1/6h0kdBWivLwcKSkpyM3NFX9XycRDLabprnH9O2hu6vdB81O/D5qf+nvQ3NTPIzc3FykpKSgvL69r+VPvIKHbgMnPp+eA6ys0N/Ubmp/6Dc1P/YXmhmhokNBtwNAbTv2F5qZ+Q/NTv6H5qb/Q3BANDRK6DRh6w6m/0NzUb2h+6jc0P/UXmhuioUFCtwFTXFyMefPmobi4uK5TIWpAc1O/ofmp39D81F9oboiGBgldgiAIgiAIwiIhoUsQBEEQBEFYJCR0CYIgCIIgCIuEhC5BEARBEARhkZDQJQiCIAiCICwSEroNkLS0NAwYMAB2dnZo06YNpkyZQruh1AHBwcH45JNP0L59e9jZ2aF79+7w8fFBVVWVoN3GjRvx0ksvoXHjxujWrRv27NlTRxk/upSUlKB9+/bgOA4nT54UnKP5qRsePnyIJUuWoFOnTrC1tUW7du3g4uIiaFNVVYVFixahQ4cOePzxx9GrVyEYmugAABCqSURBVC8kJibWUcaPDqGhoXjrrbfQtGlTPPPMMxgxYgSysrK02tFrh2gIkNBtYNy+fRtt27ZFnz59EB4eDm9vb7Ro0QLjxo2r69QeOXr16oUvv/wSgYGBiI6OxvTp02FtbQ1XV1fWJiAgAFZWVpg9ezZiYmLg4uICGxsb+mddy0ydOhVt2rTREro0P3WHs7Mz2rZtizVr1uDgwYPYunUrJk2aJGizaNEi2Nra4s8//0RUVBSGDh2KZs2aITMzs46ytnxiY2NhbW2Nb7/9FpGRkQgMDESnTp3QqVMnlJWVsXb02iEaCiR0Gxhubm5o2rQpCgoKmG39+vVo1KgRrly5UoeZPXrcvHlTyzZ69Gg88cQT7O9OnTph1KhRgjbvvPMOBg0apHh+hIq0tDTY29tj3bp1WkKX5qduiIiIgI2NDc6dO6e3TVlZGZo3b46ZM2cyW3l5ORwcHPDjjz/WRpqPJC4uLnj++ecF30zFxMSA4zgcOXKE2ei1QzQUSOg2MBwdHTF06FCBrbCwEFZWVvDx8ambpAjGmjVrwHEcSktLkZmZCY7jEBoaKmjz119/wdbWFvfv36+jLB8tBgwYgEmTJiE2NlYgdGl+6o4RI0bgww8/NNgmOjoaHMfh9OnTAvtvv/0GBwcHBbN7tPn+++/RrVs3ge348ePgOA6HDx8GQK8domFBQreB0apVK8yaNUvL3q5dO0ybNq0OMiL4jBo1iv0TDgsLA8dxuHTpkqDNgQMHwHEc0tLS6iDDR4uQkBC0adMGxcXFWkKX5qfueO655/Dzzz/j119/RfPmzfH444/j448/FjwHunr1alhZWWn9/mDDhg2wsrJCaWlpbaf9SBAXFwcbGxusXr0aRUVFyMzMxMCBA/HGG2+gsrISAL12iIYFCd0Gho2NDTw8PLTsnTt3xujRo+sgI0JNfHw8rK2tsWLFCgCAv78/OI7TesQhJSVFcHeEUIZ79+6hQ4cO8Pb2BgAtoUvzU3fY2tqiadOm6NWrF8LCwhAcHIwXXngBr7zyCioqKgAArq6usLe31/INCQkBx3H0qJaC7N69G02bNgXHceA4Dj179sT169fZeXrtEA0JEroNDBK69ZO8vDy0a9cO/fv3Z3c96J9B3TJjxgy88cYb7FlDErr1h8ceewx2dnaC2qu/Ht++fTsAErp1RUJCAlq2bImJEyciJiYGISEh6NatG9588032SAK9doiGBAndBgY9ulD/KCwsRJcuXdC1a1cUFRUxO329V3fk5OTA1tYWYWFhKCwsRGFhIfbs2QOO4xAXF4eSkhKanzqkdevWePvtt7XsLVq0wIIFCwDQowt1xeuvv47hw4cLbHl5ebCysmLfjtBrh2hIkNBtYDg6OmLYsGECW1FREf0YrY4oLS1F79690aFDB+Tn5wvOqX+wsXv3boF9xYoVsLW1pbWPFUR991bf4eTkRPNThzg5OekVuurl+dQ/RktNTRW0mThxIv0YTUGaNGmChQsXatlbtWrFVsCg1w7RkCCh28Bwc3NDs2bNUFhYyGxeXl60vFgdUFFRgcGDB+PJJ5/Uu0xSp06d8PXXXwtsvXv3piV4FKawsBCxsbGCY/ny5eA4Dl5eXuzxBZqfusHDwwNNmjTBjRs3mE39tbd60wH18mKzZ89mbR48eICOHTvS8mIK8q9//UvrZkpOTg6srKywYcMGZqPXDtFQIKHbwFBvGOHk5ISIiAhs2rQJLVu2pA0j6oDRo0eD4zgsW7YMiYmJgkP9LNu2bdtgZWWFuXPnIjY2FmPHjoWNjY1gPUqidqj5jC5A81NXFBcX47nnnsNbb72F0NBQBAQE4Pnnn8ebb74pWL910aJFaNy4MTw9PREdHY3PP/+cNoxQGE9PT3Ach19//ZVtGNGlSxe0bdsWt2/fZu3otUM0FEjoNkDOnz+P/v37o0mTJmjdujUmT55MXxXVAQ4ODnq/Gs/OzmbtNm7ciBdffBG2trbo2rUrbZNZR+gSugDNT12RkZGBf//737C3t0eLFi0wcuRIXLt2TdCmqqoKbm5uePbZZ9G4cWO8/fbbJKQUpqqqCmvXrkW3bt1gb2+PZ555BkOHDsWFCxe02tJrh2gIkNAlCIIgCIIgLBISugRBEARBEIRFQkKXIAiCIAiCsEhI6BIEQRAEQRAWCQldgiAIgiAIwiIhoUsQBEEQBEFYJCR0CYIgCIIgCIuEhC5BEARBEARhkZDQJQiCIAiCICwSEroEQRAEQRCERUJClyAIgiAIgrBISOgSBGE2vr6+eP3119GsWTM0b94cnTt3xtixY1FSUiJrPwEBAfDx8RFtNwdnZ2d0795d1pj1DbnGGBwcjE8++QTt27eHnZ0dunfvDh8fH1RVVelsf+zYMfTr1w92dnbo0KEDvL29jfZRVVWF1157DevWrWO2vLw8DBkyBN26dUPXrl0RFRXFzrm4uOC7774ze2wEQTRsSOgSBGEW7u7usLa2xuTJkxEeHo6wsDC4ubnhlVdeQV5enqx9ffrpp3BychJtN4eMjAykpqbKGrO+IZfQ7dWrF7788ksEBgYiOjoa06dPh7W1NVxdXbXaxsfHw97eHlOmTEFsbCzGjh0La2tro7Xevn072rZti/v37wMAKisr0aNHD+zfvx8AcPr0aXTs2JG1z8jIgK2tLS5evGj2+AiCaLiQ0CUIwizat2+P0aNH6zyn746eVGpD6FZWVjIxZenIJXRv3rypZRs9ejSeeOIJga20tBQdOnTAzJkzme3hw4do1aoV5syZY7CPPn36YOrUqezvvXv3YsiQIezviooK2NvbC3zef/99jB8/3qSxEARhWZDQJQjCLOzs7DB37lyj7RISEtC/f380bdoUzZo1Q+/evZGQkAAAOHLkCAYPHoxnnnkG9vb26NmzJ0JCQgT+zs7O4DhOcMybN0+vXU18fDz69u0LOzs7tGzZEs7Ozrh9+7Ygbvfu3bFnzx506dIFNjY22L9/v5YIVP8dERGBzp07w97eHn369EF6errWWFeuXIlnn30WdnZ2GDRoEOLj48FxHHbt2qW3PmJqYEoeYnLQJXSN1Ussa9asAcdxKC0tFeTUsmVL3L17V9C2e/fu+Oabb/TGysrKgpWVFY4ePcpsixYtwqxZs9jfx48fx9tvv62Vw9NPP42KigqT8ycIwjIgoUsQhFk4Ojriqaeegre3N65fv66zzaFDh/DYY4+hb9++CA4ORnh4OObPn4/AwEAAqmds3d3dsW/fPkRFRWHWrFmwtrbG7t27WYyMjAz06dMHPXv2RGJiIhITE5GXl6fXDqjEta2tLYYNG4a9e/di69atcHBwwMCBA1lcZ2dnPPnkk3jxxRfh6+uLqKgo5OTk6BS6Tz/9NHr06IGgoCDs2rULDg4OePPNNwVj3blzJziOg4uLCyIiIjB//nx07NjRqNAVUwOxeYjNoeYYxdRLLKNGjYKDg4PA9tZbb8HZ2RkVFRWC46WXXsIPP/ygN5aXlxcef/xxgWD18/PDZ599BgAoKSmBk5OT1geDU6dOgeM4HDt2zOT8CYKwDEjoEgRhFmfOnMGLL77I7qZ26tQJkydPxrVr11ibd955B127dsXDhw+NxqusrERFRQVGjBgh+GoaMP3Rhffeew99+vQR2JKTk8FxHA4fPgxAc6e4phjSJXStra0Fz3xu3rwZHMcJnkV+44038OGHHwpiTZo0yajQ5WOoBmLyEJtDzTGKqZcY4uPjYW1tjRUrVjBbUVERrK2tte6+q4/58+frjTdmzBj06NFDYKuoqMBXX32FV199Fa+++irWrl2r5VdRUYFGjRphzZo1onMnCMKyIKFLEITZlJeXIywsDOPHj0ePHj3AcRxat26NvLw83L17F9bW1li2bJle/4KCAowbNw4dOnRAo0aNmPh5+eWXBe1MEbr37t1Do0aNsHLlSq07iM2bN4enpycAldhr06aNVkxdQrfmHUq1CExMTASgEVarVq0StIuLizMqdMXWwFgepuTAH6PYehkjLy8P7dq1Q//+/VFZWcnsBw8eBMdx2LlzJ1JSUtihFuk171zzGTJkCAYMGCCq/5o89dRToh6tIQjCMiGhSxCE7ISHh6NRo0aYMGEC8vLywHEcAgIC9LYfPHgwWrdujVWrViEmJgYpKSkYPny4lqAzRejm5+frvXvIcRwmTZoEQCX2unXrphVT3zO6fE6ePAmO4xAbGwsAuHr1KjiOQ1BQkKDdhQsXjApdsTUwlocpOfBjia2XIQoLC9GlSxd07doVRUVFgnN+fn7gOA6FhYUCu4eHB2xtbbXa8/nggw/w8ccfG+1fF+3atRP8iI0giEcLEroEQSjCa6+9ho8++sjoHd2ysjJYW1tr3YH87LPPzBK6d+/ehZWVFebOnSu4g6g+Ll++DED/ygNShK7UO7qm1MBYHlLv6Iqtlz5KS0vRu3dvdOjQAfn5+VrnfXx8wHGc1trKPXr0wOeff24w9hdffIHevXsbbKMPOzs7LF68WJIvQRANHxK6BEGYBf9ZXDWlpaVo1aoVvv32WwCqZ3S7d+8u+CpbTWFhITiOw4YNG5jt1q1baNq0qZbIGz58uNYv6w3Z3333XYwYMcJg/nIKXUD1fOwHH3wgaDdx4kSDQteUGojJQ2wONWOJqZcuKioqMHjwYDz55JM4d+6czjYxMTFaz0IHBgbCxsYGp06dMhh/7ty5aNeuncl53bhxgz0uQRDEowkJXYIgzKJVq1b4/vvvERQUhLi4OAQGBqJ379547LHHkJSUBECz6kK/fv0QEhKCAwcOYOHChWzVhddffx0dO3bE9u3bsWPHDvTs2RMdO3bUEnlz5syBnZ0ddu3ahZSUFFy5csWg/fDhw2jcuDFGjhyJXbt2ISYmBlu2bMHIkSOZ4JJb6O7YsUOw4sGCBQvg4OAAjuMQGhqqt45iayAmD7E51Iwlpl66GD16NDiOw7Jly9jKF+pDvSZxeXk5nn32WfTq1QuRkZHw9PSEnZ0dli5dqjeumoiICHAch6tXrxpty2ffvn3gOE7nhzGCIB4NSOgSBGEWq1evxsCBA9GuXTvY2NjgiSeewEcffYT4+HhBu0OHDqFPnz5o0qQJmjdvjvfeew9HjhwBAFy8eJGt3erg4IC//voL48eP1xJ5169fx6effoqWLVsK1svVZweAo0ePYtCgQWjevDmaNGmCl19+Gb/88gtbCk1uoQsAK1asQPv27fH4449jwIABCA0NBcdxOHjwoN46iq2B2DzE5KArlrF66UItonUd2dnZrF1ycjK6d++Oxo0bo3PnzvD399cbk095eTmeeuopbNq0SVR7Nb/88gscHR1N8iEIwrIgoUsQBKEwy5cvR6NGjXDr1q1HOgdzmDBhgtbjGIZ4+PAh2rZti82bNyuYFUEQ9R0SugRBEDJy48YNTJgwAaGhoYiKisIff/wBOzs7ODs7P1I5yE1+fj7s7Oxw9uxZUe39/f3xwgsv0K5oBPGIQ0KXIAhCRoqKijBo0CA8/fTTsLGxQfv27TFx4kSUlZU9UjkoQVBQEKKjo0W19ff3x6FDhxTOiCCI+g4JXYIgCIIgCMIiIaFLEARBEARBWCQkdAmCIAiCIAiLhIQuQRAEQRAEYZGQ0CUIgiAIgiAsEhK6BEEQBEEQhEVCQpcgCIIgCIKwSEjoEgRBEARBEBYJCV2CIAiCIAjCIvl/4PSlmmPindIAAAAASUVORK5CYII=\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeXhU5cH38TskJCRkky0koAFZxLIoarUqyUjAtVglSNVH++ICFcWtFQREDdU2gsGyCkSEqOBSN6xiG0SFFhU1WtRqsD5YBIJWtgCPbA3k9/6RzjSTmTuZSXJOkuH7ua5z5eLkbJO5k3w5OXPGCAAAAIhApqkPAAAAAHACoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiELgAAACISoQsAAICIROgC/7F69WoZY1RUVOTofkaNGiVj+NZD4zhy5IjuvfdedevWTdHR0UpJSWnqQwpJZmamPB5PUx9GWDZu3Khhw4apffv2MsbojjvuqNd23PpZ0xy1xOcdLRu/bdEseH/wV5/atm2r0047TbNmzdKRI0dcOwZCN3yvvvqqfvKTnygpKUnHHXeczj77bC1YsKCpD+uYsGjRIhljNHr0aD355JP6wx/+0NSH5JOXl6fly5cH/VxLDJ5zzz1X7dq104wZM7R06VJ99NFH1mU3bdqkvLw8rV+/PuBzhK6nqQ8Dx5DI+m2LFsv7g//KK6/U0qVL9dRTT2natGnq06ePjDEaM2aMa8dA6IanuLhYUVFR6tmzpx555BHNnj1b11xzjc4+++ymPrRjwlVXXaWUlBRVVlY29aEEMMZo1KhRQT936NAhHT582N0DaoCDBw8qKipKt99+e0jL1/bzhND1NPVh4BgSOb9t0aJ5f/A/9NBDfvP37t2rjIwMRUVF6V//+pcrx0Dohufqq6+WMUabN2/2m3/o0CHXj+WHH37Q0aNHg36usrJS//d//9co+2lOkTZ48GBlZmY29WEEVVvotjSbN2+WMUZ5eXkhLU/oBkfowm2R89sWLZotdCVpxIgRMsbovffe883bs2eP7r77bvXo0UOxsbHq0KGDrrrqKn399dd+6+7bt09TpkzRmWeeqfbt2ys2NlY9evTQxIkTtX///qDHUPOXz9NPP63Y2Fhdcskl+uGHH2p9HCtWrFB2drY6dOiguLg4de3aVZdddpm++OIL3zLe0N2zZ4/Gjh2rjh07Ki4uTuecc47ef/99v+0dPXpUv/3tb5WVlaW0tDS1bt1axx9/vMaOHaudO3f6Lbtp0ybfL+Jnn31WAwYM8B3DlClTgobZt99+q7Fjx+r4449X69atlZ6erjFjxuj777+v9XFW9z//8z8yxjTaf0RKSkp0+eWX+56v3r1767e//a0qKir8lvN4PMrMzNQ///lPjRw5Uu3atZMxRuXl5X7P5fz589W3b1/Fxsb6XVP5zjvv6MILL1RKSoratGmjAQMGaM6cOQFnRr3P1/bt23XjjTcqLS1NUVFRQf8k7RXOuDt69Khmzpyp/v37KzExUYmJierVq5euu+46HThwwLqPoqKigMt9qoeYLSiCjXPvtt566y0VFBToxBNPVGxsrHr16qUnnngi6P7ffvttXXLJJWrXrp3i4uLUvXt33XDDDdqxY0fQS5G8k5ft+F577TVlZWUpMTFRCQkJ+vGPf6xnnnkmYDnv879t2zZdddVVSk1NVXx8vC644AL94x//sH7davr88881YsQIv/H2m9/8xu8/ah6PJ+hj2bRpU9Bt5uXlBV3e+3irPwdLlizRj370I8XGxuqEE07Q9OnTg24z1O8Lm+eee06XXnqpjj/+eMXGxqp9+/a67LLL9OmnnwYs631uNmzYoEsuuUSJiYlKTk7WiBEj9N133wX9Gl588cVq27atUlJSNHz4cG3atCnoc2x73hv6+AAbQhfNgi10Kysrdcopp8gYo6+++kpSVeT+6Ec/Utu2bXXbbbdp4cKFmjp1qtLS0tShQwd98803vvU3bNigtLQ03XLLLZo1a5bmzZunkSNHKioqShdccEHQY6geANOnT1dUVJRuvPHGOn/grlmzRq1atdKAAQM0Y8YMPf7443rwwQc1ePBgvfzyy77lvOF01llnadiwYZo7d66mTp2q5ORktW/fXvv27fMte/DgQaWkpOiGG27QjBkztGDBAt1www1q3bq1+vXr5xev3tAdOHCgkpOTNXnyZM2dO1cXXnih77KQ6jZv3qyMjAy1a9dOd999tx577DFNnDhRSUlJ6tmzp/bs2VPHs1Zl7dq1ioqK0kUXXaR///vfIa1js2LFCsXGxurkk0/W7373Oy1cuFCjRo1Sq1atdMUVV/gt6/F41L59e3Xt2lUjR47Uo48+qgcffFD79+/3PZennnqqunTpoqlTp+qxxx7zPQ+vv/66YmJi1LlzZ+Xl5WnWrFnKysoKepmM9/k69dRTdf7552v27NkqKCgIOINdXTjj7oEHHpAxRpdeeqkeffRRLVy4UJMmTVLfvn21Y8cO6z6+/vprLV26VH369FGHDh20dOlSLV261Bcu9Qnds846SwMGDND06dM1a9YsnXTSSTLG6J133vHbxsKFCxUVFaUuXbpoypQpKiws1H333adTTjlF69ev17/+9S8tXbpUxhhlZWX5jm3p0qW+bQQ7vsLCQhlj1KtXL/3ud79TQUGB7/v/d7/7nd+yHo9HHTp0UI8ePXTNNddo/vz5mjBhgmJjY9WnT5+Qruv/+OOPlZiYqKSkJE2aNEnz5s3TpZdeKmOMLrroIt9fB9544w3NnDlTxhgNHz7c91hs//H99NNPdc8998gYo1/+8pe+5d944w2/5+Css85St27d9OCDD2ru3Lk666yzZIzR008/7be9cL4vbAYNGqTLLrtMDz74oBYtWqRJkyapXbt2SkxM9P1s9crMzFTPnj2VlpamsWPHasGCBRo7dqyioqJ0/vnn+y27ceNG338yxo8fr0cffVQjR45UZmamOnToEFLoNsbjA2wIXTQL3h/89913n3bs2KHt27fr008/1ejRo32/ELxuv/12xcXF6eOPP/bbxjfffKOkpCS/P5UePnw4aHzde++9Msbogw8+CDiGoqIiHT16VLfddltYf6r81a9+JWNMnWdDveF08803+81//vnnZYzRwoULffMqKyuDntV7/PHHZYzxe+GRN3RbtWrl9yKZyspKXXnllb4zdl4/+9nP1L59+4BgKykpUXR0dMiP+/HHH1dsbKxiYmJ02WWX1ftP+gcPHlRaWprOOeecgOfs97//vYwxWr16tW+e9yzblClTArblfS6PO+64gOfjyJEjyszMVFJSkrZu3eo3/6KLLpIxRu+++65vvvf5uuaaa0J+LOGMu4EDB+rkk08Oeds1ec9s1lSf0D311FP9nr+ysjLFxsbqqquu8s3bunWr74zb7t27A7Zf/dKR2i5dqHl85eXlatu2rbp16+b3n6z9+/drwIABiomJ8Rur3ue/5hnQhx9+WMYYFRcXB91vdeeee65atWoV8LNkzJgxAcFZ/S8moQjl0oX09PSAx9qhQwf95Cc/8c0L9/vCJliUl5aWKjY2NuBnUWZmZsDPF0m65ZZbZIzRl19+6ZsX7GeL9N+fh3WFbmM9PsCG0EWzYPtTZ6tWrTRs2DB9++23kqqirX379srJydGOHTsCpvPPP1/p6elB91FRUaHdu3drx44dWrNmjYwxmjNnTsAxLFiwQLm5uYqOjtaiRYtCfgxTp06VMUbz58+v9eyvN5xqnkXZuXOnjDG66667gq535MgRlZeXa8eOHfrnP/8pY4x+/etf+z7v/UV84YUXBqz7t7/9TcYYjRs3TlLVWfFWrVpp1KhRQb+OJ510UkgvJlu2bJmMMVq0aJFeeuklxcTE6OKLL9bBgwd9y3zxxRcyxujhhx+udVuvvvqqjDF67LHHAo7nyy+/lDFGkydP9i3vDZ3y8vKAbXmfy2C3f/rwww9ljNFtt90W8Lm//vWvAc+B9/mq7VKF2tQ17s477zwlJydr7dq19dp+Y4buY489FrB8v379dPrpp/v+7Y2PZcuW1Xls4YSu9z96jzzySMCyTz31lIwxmjt3rm+ex+NRq1at/MaaJH300UcBywbz/fff+86k17RlyxYZYzRixAjfPCdC95577gn4nPf2ZV7hfl/UpbKyUvv27fNto3///jrttNP8lsnMzFRGRkbAui+++KKMMXrttdckVf1Matu2rQYOHBiw7L/+9a+QQrexHx9QE6GLZsH7g//GG2/UqlWr9Oabb+q9997Trl27/Jbz/nKqbWrVqpXfOgsXLtSAAQMUHR0dsOxvfvObgGNITk6WMUZPPvlkWI9h586dGjhwoIwxSkpK0kUXXaRZs2YFXLvqDadgf1o1xui6667zm/fiiy/qzDPPVOvWrQOO//rrr/ct5/1FfOeddwZs1/uK8YsuukiS9MEHH9T5dTzxxBNrfbyHDh1Sx44ddd555/nmvfDCC4qJidGQIUN816I+++yzMsZo3bp1tW5v+vTpdR7TDTfc4Fve4/GoY8eOQbflfS4fffTRgM8999xzAWfOvcrLy31/nvbyPl81r62tS6jj7r333lNaWprvDN/VV1+tpUuXhvxivsYM3TfffDPo9rt16+b798033yxjjN915zbhhO60adOsZ2LXr18vY4x+9atf+R1X165dA5b1fh9MnTq11mN7//33ZYzRpEmTgn4+JSXFL+CcCN3HH3884HM1X6wa7veFzfr16zVs2DAlJiYGrN+9e3e/ZTMzMzVo0CDrcXuv2/7uu+9kjNHVV18ddJ+pqal1hm5jPT7AhtBFs1Dbi9Gq854lGDx4sFatWmWdvLzX1V1wwQVatGiRXn/9da1atUpPPPFEwC8t7zH84he/UEJCgvr37x/Wi7KkqjMca9as0ZQpU5SVlaXo6GglJyf7/emttrsu1AyD5cuXyxijM888U/Pnz9drr72mVatWqbi4OGDZcELX+0v+6quvtn4Na16XWZP3LPH999/vN/+5555TdHS0srKytG/fPg0aNEh9+/at8/ZX3tCZNm2a9Ziqx5Ut8KTaI6O+oRuOcMadVPVn5Zdfflm33nqr+vXrJ2OqrlMNZfzZvg7dunULGrqrVq2yhm6wPxHX3H5zCt1gjzvUIG0OoRvsczXHW7jfF8Fs2bJFSUlJysjI0LRp07R8+XK98cYbWrVqlfr27RvwdQz1P0mNEbqN8fiA2hC6aBZCDd2jR48qNTU14E9tNgMHDlS3bt0Cbjn15z//2Rq6RUVFWrNmjRITE3XyyScHfZVxqL744gvFxcX5/WAPJ3SHDx+uNm3aBJxN3LBhgzV0Q7l0YefOnYqKilJubm69H9snn3zi+49BTc8884yio6PVo0cPGWP0+uuv17m9l156Scb4/1m/NvUN3douXVi7dq2MMRo/frxvXn1CN5xxF8zixYtDjirb1+G0005T//79A+Z7X/BV39D1RnzNF0wFE07o1nbpgveFbfPmzbMel1eoQbp9+3YZE/zSha1bt8oY4/dCqHBD13uZSkNDN9zvi2Bmz54tY4zefvvtgM917ty53qHbGJcuNMbjA2pD6KJZCDV0JWncuHEyxui5554L+vnqZ8FOP/10de/e3e8ygYqKCt/1nbbQlaR3331XycnJ6t27t9+LlmyCvUK+oqJC7du3V79+/XzzwgndESNGKD4+3u/+r5WVlbrmmmusoVvzxTXVX4xW/U/TP/3pTxUdHR30zG1lZaW2b99e6+M9cuSI71ZFNW+LJsn3Yr6uXbuGdP/aH374QZ06dVLXrl2Dfi0PHDjgd0eK+oau98VoycnJKisr880/evSoLrnkEhkT/MVo4Qhn3AV7rN4zmLfeemud+7J9Ha666iq1bt3a7zEeOnRIAwYMaFDoel+MdtJJJwW9M0f1M/eJiYlBQ1Kyvxite/fu2rt3r2/+wYMHdeqppwZ9MVpDQleqejFadHS0PvnkE7/5Y8eOlTHG77Zm4Yau91rhYOEeTuiG+30RzNy5c2VM4AvGHnvsMRlj6h26kvTzn/886LZDfTFaYzw+oDaELpqFcEJ3z549OvXUUxUVFaWRI0dq5syZmj9/vu6++27169fPL/4eeughGWN0/vnna8GCBZo+fbpOOeUUnXHGGXWGrlR19u+4447TiSee6HfbsmAuv/xynXHGGbrnnntUWFioOXPmaNCgQTLG/4VY4YSu9/rWH//4x5o7d65+//vfKzs723f8wUK35u3FvHcSqHmbni1btuiEE05QTEyMrr/+es2bN09z5szRnXfeqe7du4f0C33VqlVq06aNWrdurdGjR2vBggWaPXu2LrnkEkVFRWnIkCG+j6Fcc1pcXKw2bdqoffv2Gj9+vAoLC/Xwww/rhhtuUGpqasBdF+oTutJ/by+Wnp6uqVOnavbs2b4Itd1eLBzhjLsOHTpo2LBheuCBB7R48WLl5+ere/fuiomJ8bt3tI3t6/DOO+/IGKM+ffpo1qxZevjhh9W/f3/fLazqG7qSNH/+fEVFRalr16669957tWjRIk2dOlUDBw70e9He0KFDFR8fr2nTpumZZ57Rs88+6/tcsJhauHChjDHq3bu3HnroIc2YMUOnnnqqjAl+e7GGhu7HH3+stm3b+r5f5s2bp5/97Ge+v4xUPyMfbugeOHBASUlJ6tGjhxYsWKBnn33WF4PhhK4U3vdFMBs3blRCQoIyMjKUn5+vBQsW6Nprr1W7du3Uo0ePBoXuV199pZSUFN/txebPn6+f//znvtuLVb+G37bthj4+oDaELpqFcEJXqroNzwMPPKB+/fqpTZs2SkxMVJ8+fTR69Gi/s4tHjhxRfn6+740lTjjhBE2YMEGlpaUhha5UdXatQ4cOOuGEE7Rx40brMb300ku69NJL1aVLF9+bWAwaNCjgZvfhhK5Uddbl5JNPVlxcnDp37qwxY8Zo165d1tDNy8vTM88843vDiC5dumjy5MlBb/u1Y8cOjR8/Xr169VJcXJxSUlLUr18/3X777SFfF/fFF1/o2muvVXp6umJiYnzh5r3W8sEHH5QxRpdffnlI9zb9+9//rmuuuUYZGRlq3bq1OnXqpLPPPlsPPPCA34sTGxK6UtVlChdccIGSk5MVFxenfv36afbs2dY3jAhHOOPuoYceUlZWljp27KjWrVurS5cuGj58eJ0v3vOq7evwxBNPqHfv3mrdurW6deum6dOn66233mpw6ErSypUrNXToUN/Xr3v37ho9erTfG5l89dVXOv/885WUlCRjQnvDiFdffVWDBg1SQkKC4uPj9eMf/zjoZRKNEbpS1XjLzc1Vu3bt1Lp1a/Xq1UtTp04N+I9ZuNuVqv5DNXDgQMXFxfmd3Qw3dL3HGcr3hc1f/vIXnXvuuUpMTFRKSoouueQS/f3vfw/6dQwndCXps88+04UXXqiEhATfG0Z88803ateunS6++OKQtt3QxwfYELpAhKjPL2IAcMKOHTtkjNFNN93U1IeCYxyhC0QIQhdAUwh26z3vNbovvfRSExwR8F+ELhAhCF0ATaFXr1765S9/qXnz5umRRx7xvS4gOzs7pMuVACcRukCEIHQBNIUJEyaoT58+SkxMVGxsrHr27KlJkyYFfdthwG2ELgAAACISoQsAAICIROgCAAAgIhG6AAAAiEiErkMOHz6skpISbd68WWVlZUxMTExMTExMjkybN29WSUlJ0DcGOtYRug4pKSnxvRMQExMTExMTE5PTU0lJSVPnT7ND6Dpk8+bNvkHX1P/TY2JiYmJiYorcyXtybfPmzU2dP80OoeuQsrIyGWNUVlbW1IcCAAAiGM1hR+g6hEEHAADcQHPYEboOYdABAAA30Bx2hK5DGHQAAMANNIcdoesQBh0AAHADzWFH6DoklEFXWVmp7du3a8uWLfrmm2+YmnDasmWLtm/frsrKShdHCQAADUfo2hG6Dqlr0FVWVmrr1q0qLS3Vxo0btWnTpiaPvWN12rRpkzZu3KjS0lJt3bqV2AUAtCiErh2h65C6Bt327dtVWlqqnTt3unxksNm5c6dKS0u1ffv2pj4UAABCRujaEboOqWvQbdmyRRs3bnT5qFCXjRs3asuWLU19GAAAhIzQtSN0HVLXoPP+yRzNi/cSEgAAWgpC147QdUgooUtQNT88LwCAlobQtSN0HULotkw8LwCAlobQtSN0HXIshW5eXp6MMQHTWWedpaysLGVnZwes07t3b7Vq1Up79uzxm3/33XcrISFBFRUVkqTMzEzdcccdQfebkpKivLy8gOPo1q1b0OVPOeUUGWOs25Mi63kBgGat4pD06fPSsiukhdlVHz99vmo+wkLo2hG6DjnWQjcxMVHr1q3zmz7//HNNmjTJL1wlaceOHTLGKCEhQcXFxX7bOvfcczV48GDfv8MN3bi4OLVu3Vrr1q3zW7a0tFRRUVFq27YtoQsATa18szR7oJSXLE1N9f84e2DV5xEyQteO0HWIm6F7qOKIXllfpuuWfKBhc9bquiUf6JX1ZTpUcaRRtl+XvLw8paSkBP3ca6+9JmOMPvzwQ9+8P/7xj0pPT9fll1+u++67zzf/8OHDatOmje69917fvHBDNyUlRZdccoluv/12v2Xvu+8+nXvuubVuTyJ0AcBxFYeqYtYbtjWnqanSnNM4sxsGQteO0HWIW6G7dfd+nVewWpkTV6j7pBV+H88rWK2tu/c3eB91qS10d+3apaioKM2cOdM37+6771Zubq6mT5+unJwc3/z33ntPxhj9+c9/9s2rT+guXbpUnTt31tGjR32f69mzp+bNm0foAkBT+/T54IFbc/rshaY+0haD0LUjdB3iRugeqjii8wpW+8K25tR90goNLljt+Jldb2BWVFT4Td53GDv55JM1cuRI3/KDBg3SjBkz9Ne//lVt27bVkSNVxzdjxoyA63YzMzN1++23B2y7oqLCGrr79u1TfHy83nzzTUlSSUmJoqOj9f333xO6ANDUll1hP5tb/azuspF1bwuSCN3aELoOcSN0X1lfFjRwa06vrHd24NtejLZ8+XJJ0ujRo9WlSxdJ/7084b333tOBAwfUunVrffzxx5Kk3NxcDRgwwG/bmZmZQbftnYKFriRdccUVGj16tCTprrvu0vnnn+/bHqELAE1oYXZoZ3QLPU19pC0GoWtH6DrEjdC9bskH1rO51c/qXl/0Yd0bawDvi9FKSkr8pvLycklSUVGRjDH65ptvtG7dOsXFxenQoaprr8444wzNmTNHktS5c2fdfPPNftvOzMzU1VdfHbDtkpISJSYmWkP3xRdf1HHHHadDhw6pa9euWrx4sW97hC4ANCHO6DY6QteO0HWIG6E7bM7akM7oDpuztkH7qUtt1+hK0ldffSVjjJ555hk98sgjOvvss32fu/3223XllVfq66+/ljFGTz/9tN+69blGV5IOHjyopKQk3XXXXYqNjfVFN6ELAE2Ma3QbHaFrR+g65Fg7o1tb6EpSp06dNG7cOOXm5urXv/61b/6zzz6rrl276qmnnvKd9a2uvqErSf/v//0/tWrVSpdddllI25MIXQBwHHddaHSErh2h65Bj7RrdukL38ssv18CBA5Wenq4XX3zRN/+bb76RMUY//elPfdfxVteQ0H3nnXd02WWXaeXKlSFtz3s8hC4AOKx8c1XMBruP7pzTuI9umAhdO0LXIcfiXRdqU1BQoKioKBljtG3bNr/PpaenKyoqSldeeWXAeg0J3WAIXQBoJioOVV2esGxk1QvPlo2s+jdncsNG6NoRug5x8z66gy330R3cDO6j6+W9R25mZmbA53Jzc2WM8b0orTpCFwCA2hG6doSuQ5rindGuL/pQw+as1fVFH7r6zmiRhNAFALQ0hK4doesQN0MXjYfnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6doSuQwjdlonnBQDQ0hC6dhEduhs2bNDQoUOVkJCgtLQ0TZgwQYcPH651naKiIhljgk4XXnhhyPsmdFsmnhcAQEtD6NpFbOju3r1b6enpys7OVnFxsRYvXqyUlBSNGzeu1vW2b9+udevW+U1PPfWUjDGaNWtWyPt3NXQrDkmfPi8tu0JamF318dPnq+Y3UwcOHAhrfqgOHjzYoPUJXQBAS0Po2kVs6Obn5ysxMVG7du3yzSssLFR0dLS2bdsW1rby8vIUHR2t7777LuR1XAvd8s3S7IFSXrI0NdX/4+yBVZ93wdq1a3XeeecpISFBqampGjVqlHbv3i1JWr16tYwx+tOf/qThw4crMTFRV155pSTJGKOHH35Yd911lzp16qTOnTv7tvnoo4+qV69eio2N1YknnqgZM2b47TMvL08pKSlat26dzjzzTMXGxmrBggUNehyELgCgpSF07SI2dLOysjR8+HC/eeXl5YqKilJRUVFY2+rdu7fOP//8sNZxJXQrDlXFrDdsa05TU6U5pzl+Zvedd95RbGyscnNztWLFCj399NPKzMz0XerhDd0uXbpo8uTJeuutt7R27VpJVaHbuXNnjRgxQn/605/06quvSpIee+wxGWN05513qri4WJMmTVJUVJQefPBB337z8vIUFxenHj16aP78+Xr77bf1xRdfNOixELoAgJaG0LWL2NDt2LGjpkyZEjA/IyNDEydODHk7JSUlMsaEHceuhO6nzwcP3LGlhlEAACAASURBVJrTZy80bD91GDRokLKzs/3mffDBBzLG6N133/WF7q233hqwrjFG/fv3V2VlpW/e0aNHlZGRoWuvvdZv2ZtvvlmJiYnav3+/pKrQNcboxRdfbLTHQugCAFoaQtcuYkM3JiZGBQUFAfP79u2rMWPGhLydX/3qV2rTpo327t1b63J79+5VWVmZb/IGsqOhu+wK+9nc6md1l41s2H5qsX//fkVHR2vu3LmqqKjwm5KTkzVr1ixf6P75z38OWN8YE/Afj82bN8sYoz/+8Y9+89esWSNjjN577z1J/w3dhl6XWx2hCwBoaQhdO0K3FkePHlV6erpGjBhR57Le6Ko5ORq6C7NDO6Nb6GnYfmrh/eayTXfddZcvdP/2t78FrG+M0e9//3u/ee+//76MMXr//ff95m/YsEHGGK1YsUJS1dc8OTm5UR8PoQsAaGkIXbuIDd3GuHThzTfflDFGL7/8cp3LHqtndH/44QdFRUXp/vvvV0lJScC0ZcsWX+iuX78+YH1jjGbOnOk3z3tG13u9rlewM7opKSmN+ngIXQBAS0Po2kVs6GZlZSk3N9dv3p49e8J6MdoNN9yg1NRUHToU/ou5jqVrdM855xz9/Oc/t34+3ND1XqP7i1/8wm/+LbfcEnCNLqELADjWEbp2ERu6+fn5SkpKUnl5uW/eokWLQr692KFDh5SamqobbrihXvs/lu668O677youLk5XX321li9frrfffltPPvmkrr76an300Udhh67037su3HXXXVq5cqXuueeeoHddIHQBAMc6QtcuYkPX+4YRHo9HK1eu1JIlS5SamhrwhhE5OTnKyckJWP/ll1+WMUZvvvlmvfbv6n1055wW/D66c05z7T66H374oS6++GIlJycrPj5eJ510km677TZ9//339QpdSZo3b5569uyp1q1bq1u3bgHXXBO6AAAQurWJ2NCVpNLSUg0ZMkTx8fHq1KmTxo8fH/AWwB6PRx6PJ2DdK664Qunp6Tp69Gi99u36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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "25667\n",
      "180 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[2],\n",
    "           92,\n",
    "           131,\n",
    "           151)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0825408441330163e-06\n",
      "Cost function before refinement: 1.0825408441330163e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.57999444e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.4921939380829473e-11\n",
      "     jac: array([-8.60015175e-08,  7.99451827e-08,  1.64794931e-09, -8.07493243e-10,\n",
      "        6.18853503e-10, -1.33401994e-08, -3.62117520e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20006745e-01,  3.27496622e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.57999350e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.4921939380829473e-11\n",
      "GonioParam(dist=0.7200067449851295, poni1=0.032749662244436796, poni2=0.004, rot1=0.0, offset=-65.79993502488618, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.032749662244436796\n",
      " Number of peaks found and used for refinement\n",
      "978\n",
      "Cost function before refinement: 4.705197877733383e-07\n",
      "[ 7.20006745e-01  3.27496622e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.57999350e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 9.924141633593764e-08\n",
      "     jac: array([-1.34035538e-09, -8.95816754e-12,  4.47653376e-06, -3.22526285e-06,\n",
      "       -3.95764310e-10,  1.97125028e-04,  1.39658085e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20481821e-01,  3.31886380e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.57999293e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 9.924141633593764e-08\n",
      "GonioParam(dist=0.7204818213178118, poni1=0.03318863803715359, poni2=0.004, rot1=0.0, offset=-65.7999293473278, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7200067449851295 --> 0.7204818213178118\n",
      "Cost function before refinement: 9.924141633593764e-08\n",
      "[ 7.20481821e-01  3.31886380e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.57999293e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 5.124963686571038e-10\n",
      "     jac: array([-5.05292020e-07, -5.37136276e-09, -1.29798578e-07,  9.55532346e-08,\n",
      "       -4.36381951e-10,  2.56600519e-09,  8.43817010e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 46\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20482931e-01,  3.34099564e-02,  3.97791142e-03,  1.59099880e-05,\n",
      "       -6.57999266e+01,  9.98999110e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 5.124963686571038e-10\n",
      "GonioParam(dist=0.7204829305671493, poni1=0.033409956436720734, poni2=0.003977911420613329, rot1=1.5909988045817424e-05, offset=-65.79992655965417, scale=0.9989991098968561, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9989991098968561\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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OnWSH/7wh/XunTdvngRBIPfdd1/kHAAAbEF0c8Du3bvD//zTn/7UWXRN8+y9r7q6GtGFxKP5jO6yZcuyjpfpZbRvs1d0a585GyW6a9eulSAI5NRTT5Xnn38+8tqLi+hG/XfC3uduzzjjDJk4caI8++yz8vzzz8t9991XT2pzIboN1blXdPnvKwDQBNHNMVGCunv3brn55pvlsMMOC9+IHj9+vHWe2iC6kAa0Tl044ogjjMbzFd3rrruuQdHdvXu3lJSUyHHHHWdUh8ujC1H/nXDsscdK586d6/yPZRGRv/zlL/WkduXKlWqPLtx4440SBIE888wzWetEdAEgDhDdHBMlqEOGDJHmzZvLqFGj5Pnnn5drrrlGGjVqJA8++KBVntogupAGtM7RffTRR43G8xXdvc/tfvuFMxGRoUOHShAE8tBDDzU49ueffx7+5yuvvNL6ZbSo/07o0aOHHHLIIXWkedeuXeFxaLWldv369RIEgQwbNqzBXN9eiw8//FCKiork5JNPlp07d4bxDRs2yMEHH9zgy2iILgDkCkQ3xzQkqMuXL5eioqJ6/wdt8ODBcvjhhxvn+TaILiSV+++/X2688Ua58cYbpaSkRL7zne+E/3zXXXfVubehL6Pdeuut0q9fv/DLaN/ukwlf0X3llVckCALp06ePTJkyRR588MHwZbVNmzZJ9+7dpaioSM455xy54447ZNy4cXLllVfK0UcfXWeM9evXS4cOHaRRo0YyePBgGTdunAwYMEAOOOAAOeyww6Rz5851askkun/4wx8kCAI5/fTT5Z577pFbbrlFvve978nxxx/f4F9vDzvsMGnTpo2MGTNGHnzwwTrPNmc6Xuz444+X22+/XX7/+9/LoYceGnm8GKILALkC0c0xDQnq+PHjpbi4WKqrq2XXrl3htfct5E2bNhnl+TaILiSVqA8vNPSXzG/f27RpU2nXrp2UlZXJtddea/2FMl/RFRG55ZZb5JBDDpHGjRvXE8lt27bJDTfcIEcffbTsu+++0rJlSznyyCPl/PPPr3d82cqVK+Wcc86R/fbbT1q0aCF9+vSRt99+W4477jjp0qVLnXszie7XX38to0aNCj9S0bFjRxk+fLgsXry4QdF944035Pvf/740b97c+IMRkydPluOOO0723XdfadGihZSVlcns2bPr3YfoAkAuQXRzTEOCetNN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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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UpQ3dAMvRmvYsKH27NkTXH/ixAn169dPxkR+MVosYpm7SMcaOIN53333lflYts/Drbfeqtq1a4ccY0FBgTIyMioUuoEXo5155pkR35nj5DP3qampEUNSsr8YrV27djp06FBw/dGjR3XOOedEfDFaRUJXKn4xWlJSkv7617+GrB8+fLiMMSFvaxZr6AauFY4U7rGEbqz/LiKZNm2ajAl/wdicOXNkjCl36ErSzTffHHHb0b4YLR7HB5SG0EWVEEvoHjx4UOecc458Pp8GDRqk5557TjNmzNBDDz2krl27hsTfU089JWOMrrzySs2cOVMTJ07U2WefrfPPP7/M0JWKz/6dcsopOuOMM0LetiySG264Qeeff74efvhhzZ49W9nZ2erVq5eMCX0hViyhG7i+9YILLtC0adP0m9/8Rn369Anuf6TQLfn2YoF3Eij5Nj27du3S6aefruTkZP3kJz/R9OnTlZ2drV/84hdq165dVN/Q16xZozp16qh27doaMmSIZs6cqalTp6pfv37y+Xy6/PLLg39Gc83pqlWrVKdOHTVp0kQPPPCAZs+erUmTJunuu+9Wo0aNwt51oTyhK/337cVatmypCRMmaOrUqcEItb29WCximbumTZuqf//+evTRRzV//nw9+eSTateunZKTk0PeO9rG9nl49913ZYxR586dNWXKFE2aNEndunULvoVVeUNXkmbMmCGfz6c2bdpo3Lhxmjt3riZMmKDu3buHvGjviiuuUN26dfX0009r8eLFWrJkSfBjkWJq1qxZMsaoU6dOeuqpp/TMM8/onHPOkTGR316soqH70UcfqX79+sF/L9OnT9d1110X/MnIyWfkYw3dI0eOqEGDBmrfvr1mzpypJUuWBGMwltCVYvt3Ecm2bdtUr149tWrVSk8++aRmzpypO+64Q40bN1b79u0rFLqfffaZ0tLSgm8vNmPGDN18883Btxc7+Rp+27YrenxAaQhdVAmxhK5U/DY8jz76qLp27ao6deooNTVVnTt31pAhQ0LOLh4/flxPPvlk8BdLnH766XrwwQe1ZcuWqEJXKj671rRpU51++unatm2bdZ9ee+01XXvttWrdunXwl1j06tUr7M3uYwldqfisy1lnnaWUlBS1aNFCQ4cO1TfffGMN3aysLC1evDj4CyNat26tMWPGRHzbr3379umBBx5Qx44dlZKSorS0NHXt2lUjRoyI+rq4Tz75RHfccYdatmyp5OTkYLgFrrV87LHHZIzRDTfcENV7m/7973/X7bffrlatWql27dpq1qyZevTooUcffTTkxYkVCV2p+DKFq666Sg0bNlRKSoq6du2qqVOnWn9hRCximbunnnpKvXv31qmnnqratWurdevWGjBgQJkv3gso7fPw4osvqlOnTqpdu7batm2riRMn6q233qpw6ErSm2++qSuuuCL4+WvXrp2GDBkS8otMPvvsM1155ZVq0KCBjInuF0YsX75cvXr1Ur169VS3bl1dcMEFES+TiEfoSsXzNnDgQDVu3Fi1a9dWx44dNWHChLD/mMW6Xan4P1Tdu3dXSkpKyNnNWEM3sJ/R/Luw+b//+z/17NlTqampSktLU79+/fT3v/894ucxltCVpL/97W+6+uqrVa9eveAvjNi5c6caN26svn37RrXtih4fYEPoAgmiPN+IAcCFffv2yRijYcOGVfauoIYjdIEEQegCqAyR3novcI3ua6+9Vgl7BPwXoQskCEIXQGXo2LGjfvazn2n69Ol69tlng68L6NOnT1SXKwEuEbpAgiB0AVSGBx98UJ07d1Zqaqr8fr86dOig0aNHR/y1w4DXCF0AAAAkJEIXAAAACYnQBQAAQEIidAEAAJCQCF1Hjh07ptzcXOXl5WnPnj0sLCwsLCwsLE6WvLw85ebmRvzFQDUdoetIbm5u8DcBsbCwsLCwsLC4XnJzcys7f6ocQteRvLy84NBV9v/0WFhYWFhYWBJ3CZxcy8vLq+z8qXIIXUf27NkjY4z27NlT2bsCAAASGM1hR+g6wtABAAAv0Bx2hK4jDB0AAPACzWFH6DrC0AEAAC/QHHaEriMMHQAA8ALNYUfoOhLN0BUVFWnv3r3atWuXdu7cyVKJy65du7R3714VFRV5OCUAAFQcoWtH6DpS1tAVFRVp9+7d2rJli7Zt26YdO3ZUeuzV1GXHjh3atm2btmzZot27dxO7AIBqhdC1I3QdKWvo9u7dqy1btmj//v0e7xls9u/fry1btmjv3r2VvSsAAESN0LUjdB0pa+h27dqlbdu2ebxXKMu2bdu0a9euyt4NAACiRujaEbqOlDV0gR+Zo2oJXEICAEB1QejaEbqORBO6BFXVw/MCAKhuCF07QtcRQrd64nkBAFQ3hK4doetITQrdrKwsGWPClosuuki9e/dWnz59wu7TqVMn1apVSwcPHgxZ/9BDD6levXoqLCyUJKWnp+t///d/Iz5uWlqasrKywvajbdu2EW9/9tlnyxhj3Z6UWM8LAFSawgLp46XSopukWX2K//x4afF6xB2ha0foOlLTQjc1NVWbNm0KWf7xj39o9OjRIeEqSfv27ZMxRvXq1dOqVatCttWzZ09deumlwb/HGropKSmqXbu2Nm3aFHLbLVu2yOfzqX79+oQuALiUnydN7S5lNZQmNAr9c2r34o8jrghdu4QO3a1bt+qKK65QvXr11Lx5cz344IM6duxYqff59NNPde+99+qss85S3bp11bZtW91zzz0xvw2Yl6FbUHhcf9i8R3e98L76Z6/XXS+8rz9s3qOCwuNx2X5ZsrKylJaWFvFjK1askDFGH3zwQXDdsmXL1LJlS91www165JFHguuPHTumOnXqaNy4ccF1sYZuWlqa+vXrpxEjRoTc9pFHHlHPnj1L3Z5E6AJAhRQWFMdsIGxLLhMaSdnncmY3zghdu4QN3QMHDqhly5bq06ePVq1apfnz5ystLU333ntvqfebNm2aMjIyNGXKFK1bt04vvviiTj/9dHXp0qXMSD6ZV6G7+8BhXTJ5ndJHvaF2o98I+fOSyeu0+8DhCj9GWUoL3W+++UY+n0/PPfdccN1DDz2kgQMHauLEibrsssuC6zdu3ChjjP70pz8F15UndBcuXKgWLVroxIkTwY916NBB06dPJ3QBwKWPl0YO3JLL316p7D1NKISuXcKG7pNPPqnU1FR98803wXWzZ89WUlKS/vnPf1rvt3///rDfjLVhwwYZY/SHP/wh6sf3InQLCo/rksnrgmFbcmk3+g1dOnmd8zO7gcAsLCwMWQKfx7POOkuDBg0K3r5Xr1565pln9M4776h+/fo6frx4/5555pmw63bT09M1YsSIsG0XFhZaQ/fbb79V3bp19ec//1mSlJubq6SkJH399deELgC4tOgm+9nck8/qLhpU9rYQNULXLmFDt3fv3howYEDIuvz8fPl8PuXk5MS0rSNHjsgYoxkzZkR9Hy9C9w+b90QM3JLLHza7HXzbi9Fef/11SdKQIUPUunVrSf+9PGHjxo06cuSIateurY8++kiSNHDgQGVkZIRsOz09PeK2A0uk0JWkm266SUOGDJEkjRw5UldeeWVwe4QuADgy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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24026\n",
      "384 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[3],\n",
    "           121,\n",
    "           159,\n",
    "           179)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.3192859672732885e-07\n",
      "Cost function before refinement: 2.3192859672732885e-07\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.00000556e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.0856624751999954e-10\n",
      "     jac: array([-2.72031959e-07,  2.34632462e-08, -3.13650477e-11,  1.14575097e-09,\n",
      "       -9.14368789e-11, -1.88744526e-07,  5.83778581e-11])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19996884e-01,  3.16531473e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.00000599e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.0856624751999954e-10\n",
      "GonioParam(dist=0.719996884236354, poni1=0.031653147292955666, poni2=0.004, rot1=0.0, offset=-60.00005992106343, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.031653147292955666\n",
      " Number of peaks found and used for refinement\n",
      "864\n",
      "Cost function before refinement: 3.883355149577502e-07\n",
      "[ 7.19996884e-01  3.16531473e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.00000599e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 8.35586015918641e-08\n",
      "     jac: array([-2.49360177e-09, -2.03934647e-11,  4.26768070e-06, -3.07547620e-06,\n",
      "       -2.94530622e-10,  1.68280037e-04,  1.16002486e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20644233e-01,  3.20496137e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.00000548e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 8.35586015918641e-08\n",
      "GonioParam(dist=0.7206442326818199, poni1=0.032049613716226354, poni2=0.004, rot1=0.0, offset=-60.000054800019825, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.719996884236354 --> 0.7206442326818199\n",
      "Cost function before refinement: 8.35586015918641e-08\n",
      "[ 7.20644233e-01  3.20496137e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.00000548e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 3.3388878229483034e-10\n",
      "     jac: array([-3.34948071e-07, -1.35145738e-09, -1.13491295e-07,  8.31385815e-08,\n",
      "       -3.43393425e-10,  3.68209766e-09,  5.32985622e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 46\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20645314e-01,  3.22371238e-02,  3.97565133e-03,  1.75424155e-05,\n",
      "       -6.00000524e+01,  9.99011856e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 3.3388878229483034e-10\n",
      "GonioParam(dist=0.7206453140156728, poni1=0.03223712376780837, poni2=0.003975651331253134, rot1=1.7542415484114082e-05, offset=-60.000052437600765, scale=0.999011855791219, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.999011855791219\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOydeZgV1Zm4qxsU2aTVAMoMi0aNiBIUcUnStCJqnMnzy4BjxswwWYwgi7siEzG0WzoqbkGDGMImoigquLMYAXcERaNhcQOhUWyWZgkgIny/PzqU3XbXvWf56t5b5fs+Tz1P+E6d73zn3GPyBqtOBQIAAAAAkEKCfBcAAAAAABAHiC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAAAAIJUgugAAAACQShBdAAAAAEgliC4AAAAApBJEFwAAAABSCaILAAAAAKkE0QUAAACAVILoAgAAAEAqQXQBAGoRBIH88pe/zHcZBQvrAwBJAtEFgIKjoqJCzjnnHOnYsaMEQSDf+973Iu8tKyuTIAjCa7/99pODDz5YTj31VBkxYoSsWLHCamxfkZs7d66Ul5dLdXW1c458Ul1dLeXl5TJ37twG2xFdAEgSiC4AFBxBEMhBBx0kZ555prRo0SKr6O6zzz4yefJkmTx5sowfP15uueUW6dOnj+y7777SpEkT+eMf/2g89o4dO+TLL790rr28vFyCILAW7EJhxYoVEgSBlJeXN9juuz4AALkE0QWAguOjjz4K/3PHjh2zim6TJk0i83Tu3FmCIJBHHnlEvc6GKCTR3bx5s3WfbKILAJAkEF0AKGh8RFdEZMmSJVJcXCyHH3640XgN/av5vbFXX31VevbsKc2aNZMDDzxQfvOb38jWrVvr1FL7MYq9V21p3LRpk1x99dXy3e9+V/bdd1/5zne+I+edd14dud/LqlWr5Gc/+5m0atVKWrRoIb1795bFixdLWVmZdOzYsc69HTt2lLKyMlm8eLH8+Mc/llatWklJSYmIiGzZskWGDx8uJ554ohx00EGy7777yne/+10ZNmyYbNu2LcwxYcKEBuuvPVbUowsTJkyQ7t27S9OmTaVFixZy6qmnyqxZs+rdt7fOpUuXyr/9279JixYtZP/995dzzjlHPvvsswy/DACAPYguABQ0vqIrItKzZ08JgkCWLVuWdbwo0f3+978vBx54oFx55ZUyZswYOe+88yQIAunfv3943+zZs6VPnz4SBIHceeed4eMU77zzjojUSO7RRx8tzZs3l4svvljGjBkj1113nbRt21a+853vyMqVK8NcGzdulA4dOkijRo1k4MCBMnr0aLngggvkgAMOkMMPP7xB0T300EOlpKREfvOb38iYMWOkoqJCRESWLl0qbdu2lcGDB8tdd90l99xzj5x77rlSVFQkZ555Zpjjo48+kjvvvFOCIJA+ffqE9U+fPj3j+vz2t7+VIAike/fuctttt8lNN90khx56qBQVFckDDzxQr87DDz9c2rZtKwMHDpR7771XBg4cKEVFRXLGGWdk/X0AAGxAdAGgoNEQ3YsvvliCIJAnn3wy63hRoltUVCSvv/56nfi//du/SePGjev8rW6mRxcuueQSadKkibz55pt14itXrpSWLVvWGXfYsGESBIGMGzeuzr1//OMf6/0tq4iEL+6NHTu23rg7d+5s8Lnaa6+9VoIgkAULFoSxbI8ufHN9li9fLkVFRXLSSSfJF198EcbXr18vBx98sBxwwAHyj3/8o16dDz/8cJ28gwcPNv4/IwAApiC6OeCDDz6QAQMGyLHHHivFxcVSVlYWa56pU6dKnz595OCDD5YgCGTChAnOtQPkGw3RHT58uARBUO9vFxsiSnR/8IMf1Lv3tttukyAI5N133w1jUaK7Z88eOeigg6RXr16ybt26etcZZ5whhxxySHj/UUcdJa1bt5avvvqqTp6dO3fK/vvv36DoHnjggfXu/ya7du2SjRs3yrp162TevHkSBIGMGjUqbLcV3VtvvVWCIJDHHnus3r033HCDBEEgTz31VJ0627VrV+/eRx99tN69AAC+ILo5YMaMGdK+fXs599xz5cgjj3QWXdM8//mf/ynHH3+8nH/++YguJJ5C+Rvdfv361bt37zOt8+bNC2NRovv55583+Pxr7au4uDi8v0mTJnLKKac0WGO3bt0aFN0ePXpEzmvMmDHStWtXadSoUb1xr7/++vA+W9EdOHBg5N/ETp8+XYIgqHPqRceOHeVHP/pRvXvnzp0rQRDIxIkTI+cAAGALopsDdu/eHf7nn/70p86ia5pn733V1dWILiQezWd0ly9fnnW8TC+jfZO9olv7zNko0V27dq0EQSCnnXaazJkzJ/Lai4voRv13wt7nbs8880wZO3asPPPMMzJnzhyZOHFiPanNheg2VOde0eW/rwBAE0Q3x0QJ6u7du+Xmm2+Www8/PHwjesyYMdZ5aoPoQhrQOnXhyCOPNBrPV3Svu+66BkV39+7dUlJSIscff7xRHS6PLkT9d8Jxxx0nnTp1qvN/lkVEnnvuuXpSu3LlSrVHF2688UYJgkCefvrprHUiugAQB4hujokS1MGDB0uzZs2koqJC5syZI9dee600atRIHnroIas8tUF0IQ1onaP76KOPGo3nK7p7n9v95gtnIiJDhgyRIAhk6tSpDY79+eefh//56quvtn4ZLeq/E7p37y6HHnpoHWnetWtXeBxabaldv369BEEgF198cYO5vrkW77//vhQVFckpp5wiO3fuDOMbNmyQQw45pMGX0RBdAMgViG6OaUhQP/jgAykqKqr3P2iDBg2SI444wjjPN0F0Iancf//9cuONN8qNN94oJSUl8p3vfCf88913313n3oa+jHbrrbdK3759wy+jfbNPJnxF9+WXX5YgCKR3794yYcIEeeihh8KX1TZt2iTdunWToqIiOffcc+XOO++U0aNHy9VXXy3HHHNMnTHWr18v7du3l0aNGsmgQYNk9OjR0r9/fznwwAPl8MMPl06dOtWpJZPo/uEPf5AgCOSMM86Qe++9V2655Rb5/ve/LyeccEKDf3t7+OGHS+vWreWuu+6Shx56qM6zzZmOFzvhhBPk9ttvl9///vdy2GGHRR4vhugCQK5AdHNMQ4I6ZswYKS4ulurqatm1a1d47X0LedOmTUZ5vgmiC0kl6sMLDf1N5jfvbdKkibRt21bKyspkxIgR1l8o8xVdEZFbbrlFDj30UGncuHE9kdy2bZvccMMNcswxx8h+++0nLVq0kKOOOkouuOCCeseXrVy5Us4991zZf//9pXnz5tK7d295++235fjjj5fOnTvXuTeT6H711VdSUVERfqSiQ4cOMnToUFmyZEmDortgwQL5wQ9+IM2aNTP+YMT48ePl+OOPl/3220+aN28uZWVlMnPmzHr3IboAkEsQ3RzTkKDedNNNGd/E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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeXRU9f3/8RuyQcgmWwigARHUsijWupJEAde6AeJS7Re1ULG4tAUEBAyVFoGgsskiAiq41KW4tiAK/IqKGi3FarAWxAC2lS1AlaVAXr8/0hkzmflMZibzuZkZno9z7uFwM3PnJvMOeXJz544jAAAAIAE5Db0DAAAAgA2ELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQsAAICEROgCAAAgIRG6AAAASEiELgAAABISoQv8z6pVq+Q4jhYtWmT1cQYOHCjH4VsP0XHkyBGNHTtW7du3V3JysnJychp6l0JSUFCg4uLiht6NsGzcuFFXXHGFmjdvLsdxdM8990S0Hbf+rYlF8fi8I77x0xYxwfMPf82ladOmOuOMMzRt2jQdOXLEtX0gdMP36quv6pxzzlFWVpaOO+44nXvuuZozZ05D79YxYf78+XIcR4MGDdKTTz6p3//+9w29S14lJSVaunRpwI/FY/Ccf/75atasmaZOnarFixfro48+Mt528+bNKikp0bp16/w+RugWN/Ru4BiSWD9tEbc8//Bff/31Wrx4sZ566ilNmjRJp5xyihzH0eDBg13bB0I3PMuWLVNSUpJOOukkPfTQQ5o+fbpuuukmnXvuuQ29a8eEG264QTk5OaqqqmroXfHjOI4GDhwY8GMHDx7UoUOH3N2hejhw4ICSkpJ09913h3T7YP+eELrFDb0bOIYkzk9bxDXPP/wPPvigz/q9e/eqTZs2SkpK0r///W9X9oHQDc+NN94ox3FUUVHhs/7gwYOu78u3336ro0ePBvxYVVWV/vOf/0TlcWIp0i688EIVFBQ09G4EFCx0401FRYUcx1FJSUlItyd0AyN04bbE+WmLuGYKXUnq37+/HMfRe++95123Z88e3XvvverYsaPS0tLUokUL3XDDDdq0aZPPffft26cxY8borLPOUvPmzZWWlqaOHTtq5MiR+u677wLuQ+0fPk8//bTS0tJ0+eWX69tvvw36ebz++usqKipSixYtlJ6ernbt2unqq6/WZ5995r2NJ3T37NmjIUOGqGXLlkpPT9d5552n999/32d7R48e1W9/+1sVFhYqLy9PqampOv744zVkyBDt3LnT57abN2/2/iB+9tln1b17d+8+jBkzJmCY/fOf/9SQIUN0/PHHKzU1Vfn5+Ro8eLC++eaboJ9nTT/5yU/kOE7U/iNSVlama665xvt8de7cWb/97W91+PBhn9sVFxeroKBAX375pQYMGKBmzZrJcRxVVlb6PJezZ89Wly5dlJaW5nNO5TvvvKNLLrlEOTk5aty4sbp3764ZM2b4HRn1PF/bt2/Xz372M+Xl5SkpKSngr6Q9wpm7o0eP6pFHHlG3bt2UmZmpzMxMderUSbfccov2799vfIxFixb5ne5TM8RMQRFozj3bevvtt1VaWqoTTzxRaWlp6tSpk5544omAj79y5UpdfvnlatasmdLT09WhQwfddttt2rFjR8BTkTyLh2n/XnvtNRUWFiozM1MZGRn60Y9+pGeeecbvdp7n/+uvv9YNN9yg3NxcNWnSRBdffLH+/ve/G79utX366afq37+/z7z95je/8fmPWnFxccDPZfPmzQG3WVJSEvD2ns+35nOwcOFC/eAHP1BaWppOOOEETZ48OeA2Q/2+MHnuued05ZVX6vjjj1daWpqaN2+uq6++WuvXr/e7ree52bBhgy6//HJlZmYqOztb/fv317/+9a+AX8PLLrtMTZs2VU5Ojvr27avNmzcHfI5Nz3t9Pz/AhNBFTDCFblVVlU477TQ5jqMvvvhCUnXk/uAHP1DTpk111113ae7cuRo/frzy8vLUokULffXVV977b9iwQXl5efrFL36hadOmadasWRowYICSkpJ08cUXB9yHmgEwefJkJSUl6Wc/+1md/+CuXr1ajRo1Uvfu3TV16lQ9/vjjmjBhgi688EL94Q9/8N7OE05nn322rrjiCs2cOVPjx49Xdna2mjdvrn379nlve+DAAeXk5Oi2227T1KlTNWfOHN12221KTU1V165dfeLVE7o9evRQdna2Ro8erZkzZ+qSSy7xnhZSU0VF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6fq13377rVq1aqV27doF/Fru37/f54oUkYau58Vo2dnZ2rZtm3f90aNHdfnll8txAr8YLRzhzF2gz9VzBPPOO++s87FMX4cbbrhBqampPp/jwYMH1b1793qFrufFaCeffHLAK3PUPHKfmZkZMCQl84vROnTooL1793rXHzhwQKeffnrAF6PVJ3Sl6hejJScn669//avP+iFDhshxHJ/LmoUbup5zhQOFezihG+73RSAzZ86U4/i/YOyxxx6T4zgRh64kXXfddQG3HeqL0aLx+QHBELqICeGE7p49e3T66acrKSlJAwYM0COPPKLZs2fr3nvvVdeuXX3i78EHH5TjOLrooos0Z84cTZ48WaeddprOPPPMOkNXqj76d9xxx+nEE0/0uWxZINdcc43OPPNM3XfffZo3b55mzJihnj17ynF8X4gVTuh6zm/90Y9+pJkzZ+rhhx9WUVGRd/8DhW7ty4t5riRQ+zI9W7Zs0QknnKCUlBTdeuutmjVrlmbMmKFf/vKX6tChQ0g/0FesWKHGjRsrNTVVgwYN0pw5czR9+nRdfvnlSkpKUu/evb1/hnLO6bJly9S4cWM1b95cw4cP17x58zRlyhTddtttys3N9bvqQiShK31/ebH8/HyNHz9e06dP90ao6fJi4Qhn7lq0aKErrrhCDzzwgBYsWKCJEyeqQ4cOSklJ8bl2tInp6/DOO+/IcRydcsopmjZtmqZMmaJu3bp5L2EVaehK0uzZs5WUlKR27dpp7Nixmj9/vsaPH68ePXr4vGivT58+atKkiSZNmqRnnnlGzz77rPdjgWJq7ty5chxHnTt31oMPPqipU6fq9NNPl+MEvrxYfUP3448/VtOmTb3fL7NmzdJVV13l/c1IzSPy4Ybu/v37lZWVpY4dO2rOnDl69tlnvTEYTuhK4X1fBLJx40ZlZGSoTZs2mjhxoubMmaObb75ZzZo1U8eOHesVul988YVycnK8lxebPXu2rrvuOu/lxWqew2/adn0/PyAYQhcxIZzQlaovw/PAAw+oa9euaty4sTIzM3XKKado0KBBPkcXjxw5ookTJ3rfWOKEE07QiBEjVF5eHlLoStVH11q0aKETTjhBGzduNO7TSy+9pCuvvFJt27b1volFz549/S52H07oStVHXU499VSlp6erdevWGjx4sHbt2mUM3ZKSEj3zzDPeN4xo27atRo8eHfCyXzt27NDw4cPVqVMnpaenKycnR127dtXdd98d8nlxn332mW6++Wbl5+crJSXFG26ecy0nTJggx3F0zTXXhHRt07/97W+66aab1KZNG6WmpqpVq1Y699xz9cADD/i8OLE+oStVn6Zw8cUXKzs7W+np6erataumT59ufMOIcIQzdw8++KAKCwvVsmVLpaamqm3bturbt2+dL97zCPZ1eOKJJ9S5c2elpqaqffv2mjx5st5+++16h64kLV++XH369PF+/Tp06KBBgwb5vJHJF198oYsuukhZWVlynNDeMOLVV19Vz549lZGRoSZNmuhHP/pRwNMkohG6UvW89evXT82aNVNqaqo6deqk8ePH+/3HLNztStX/oerRo4fS09N9jm6GG7qe/Qzl+8Lk//2//6fzzz9fmZmZysnJ0eWXX66//e1vAb+O4YSuJH3yySe65JJLlJGR4X3DiK+++krNmjXTZZddFtK26/v5ASaELpAgIvlBDAA27NixQ47j6Pbbb2/oXcExjtAFEgShC6AhBLr0nucc3ZdeeqkB9gj4HqELJAhCF0BD6NSpk37+859r1qxZeuihh7yvCygqKgrpdCXAJkIXSBCELoCGMGLECJ1yyinKzMxUWlqaTjrpJI0aNSrg2w4DbiN0AQAAkJAIXQAAACQkQhcAAAAJidAFAABAQiJ0LTl06JDKyspUUVGhbdu2sbCwsLCwsLBYWSoqKlRWVhbwjYGOdYSuJWVlZd53AmJhYWFhYWFhsb2UlZU1dP7EHELXkoqKCu/QNfT/9FhYWFhYWFgSd/EcXKuoqGjo/Ik5hK4l27Ztk+M42rZtW0PvCgAASGA0hxmhawlDBwAA3EBzmBG6ljB0AADADTSHGaFrCUMHAADcQHOYEbqWMHQAAMANNIcZoWsJQwcAiEdVVVXavn27tmzZoq+++oqlgZctW7Zo+/btqqqqMj5nNIcZoWsJQwcAiDdVVVXaunWrysvLtXHjRm3evLnBQ+9YXjZv3qyNGzeqvLxcW7duNcYuzWFG6FrC0AEA4s327dtVXl6unTt3NvSuoIadO3eqvLxc27dvD/hxmsOM0LWEoQMAxJstW7Zo48aNDb0bCGDjxo3asmVLwI/RHGaEriUMHQAg3nh+XY7Y4zmNJBCaw4zQtYShAwDEG8+5oYg9wZ4bmsOM0LWEoQMAxBtCN3YRupEhdC1h6AAAPg4flNY/Ly25VppbVP3n+uer18eIRArdkpISOY7jt5x99tkqLCxUUVGR3306d+6sRo0aac+ePT7r7733XmVkZOjw4cOSpIKCAt1zzz0BHzcnJ0clJSV++9G+ffuAtz/ttNPkOI5xex6EbmQIXUsYOgCAV2WFNL2HVJItjc/1/XN6j+qPx4BEC93MzEytXbvWZ/n00081atQon3CVpB07dshxHGVkZGjZsmU+2zr//PN14YUXev8ebuimp6crNTVVa9eu9blteXm5kpKS1LRpU0LXEkLXEoYOACCp+ojt9B7fh23tZXyuNOOMmDiyG83QPXj4iF5et023LPxAV8xYo1sWfqCX123TwcNHorL9upSUlCgnJyfgx1577TU5jqMPP/zQu+6VV15Rfn6+rrnmGo0bN867/tChQ2rcuLHGjh3rXRdu6Obk5Ojyyy/X3Xff7XPbcePG6fzzzw+6PQ9CNzKEriUMHQBAUvXpCYECt/byyQsNvadRC92tu7/TBaWrVDDydXUY9brPnxeUrtLW3d9FYW+DCxa6u3btUlJSkh555BHvunvvvVf9+vXT5MmT1atXL+/69957T47j6E9/+pN3XSShu3jxYrVu3VpHjx71fuykk07SrFmzCF2LCF1LGDoAgKTqc3FNR3NrHtVdMqCh9zQqoXvw8BFdULrKG7a1lw6jXteFpausH9n1BObhw4d9Fs+7i5166qkaMOD7r3nPnj01depU/fnPf1bTpk115Ej1/k2dOtXvvN2CggLdfffdfts+fPiwMXT37dunJk2a6K233pIklZWVKTk5Wd988w2haxGhawlDBwCQVP3Cs1CO6M4rbug9jUrovrxuW8DArb28vM7uz0fTi9GWLl0qSRo0aJDatm0r6fvTE9577z3t379fqamp+vjjjyVJ/fr1U/fu3X22XVBQEHDbniVQ6ErStddeq0GDBkmShg0bposuusi7PULXDkLXEoYOACDpmDuie8vCD4xHc2se1b110Yd1b6wePC9GKysr81kqKyslSYsWLZLjOPrqq6+0du1apaen6+DB6vOkzzzzTM2YMUOS1Lp1a91xxx0+2y4oKNCNN97ot+2ysjJlZmYaQ/fFF1/Ucccdp4MHD6pdu3ZasGCBd3uErh2EriUMHQBA0jF3ju4VM9aEdET3ihlrorTXgQU7R1eSvvji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d928efOUnJysr7/+2ni/nTt3qqqqymfdu+++K8dx9PLLL4f8+AwdAABwA81hlrChW1hYqL59+/qsq6ysVFJSkhYtWhTWtvbv3y/HcTR79uyQ78PQAQAAN9AcZgkbui1bttSYMWP81rdp00YjR44Ma1tvvvmmHMfRqlWrQr4PQwcAANxAc5glbOimpKSotLTUb32XLl00ePDgkLdz4MABde/eXT/84Q/9Tmmoae/evdq2bZt3KSsrY+gAAIB1hK4ZoVuHgQMHKisrS59++mnQ25WUlMhxHL+FoQMAADYRumYJG7rROHVhzJgxSklJ0bJly+q8LUd0AQBAQyB0zRI2dAsLC9WvXz+fdXv27An5xWgzZsxQUlKSnnzyyYgen6EDAABuoDnMEjZ0J06cqKysLFVWVnrXzZ8/v87Li0nSM888o6SkJE2aNCnix2foAACAG2gOs4QNXc8bRhQXF2v58uVauHChcnNz/d4wolevXurVq5f376tXr1Zqaqp69+6ttWvX+ixbt24N+fEZOgAA4AaawyxhQ1eSysvL1bt3bzVp0kStWrXS8OHD/d7drLi4WMXFxd6/m15U5jiOSkpKQn5shg4AALiB5jBL6NBtSAwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZgkduhs2bFCfPn2UkZGhvLw8jRgxQocOHarzfr/5zW/Uq1cvZWVlyXEcbd68OezHZugAAIAbaA6zhA3d3bt3Kz8/X0VFRVq2bJkWLFignJwcDR06tM77tm3bVhdccIGuvPJKQhcAAMQ0msMsYUN34sSJyszM1K5du7zr5s2bp+TkZH399ddB73v06FFJ0tKlSwldAAAQ02gOs4QN3cLCQvXt29dnXWVlpZKSkrRo0aKQtkHoAgCAWEdzmCVs6LZs2VJjxozxW9+mTRuNHDkypG0QugAAINbRHGYJG7opKSkqLS31W9+lSxcNHjw4pG2EE7p79+7Vtm3bvEtZWRlDBwAArCN0zQjdIMIJ3ZKSEjmO47cwdAAAwCZC1yxhQ9ftUxc4ogsAABoCoWuWsKFbWFiofv36+azbs2cPL0YDAAAJheYwS9jQnThxorKyslRZWeldN3/+/JAuL+ZB6AIAgFhHc5glbOh63jCiuLhYy5cv18KFC5Wbm+v3hhG9evVSr169fNatXr1aL7zwgu699145jqPZs2frhRdeUFlZWciPz9ABABADDh+U1j8vLblWmltU/ef656vXJwiawyxhQ1eSysvL1bt3bzVp0kStWrXS8OHD/d4CuLi4WMXFxX7rAr2wbODAgSE/NkMHAEADq6yQpveQSrKl8bm+f07vUf3xBEBzmCV06DYkhg4AgAZ0+GB1zHrCtvYyPleacUZCHNmlOcwIXUsYOgAAGtD65wMHbu3lkxcaek/rjeYwI3QtYegAAGhAS641H82teVR3yYCG3tN6oznMCF1LGDoAABrQ3KLQjujOK27oPa03msOM0LWEoQMAoAFxRBcidK1h6AAAaECcowsRutYwdAAANCCuugARutYwdAAANLDKiuqYDXQd3RlncB3dYwChawlDBwBADDh8sPr0hCUDql94tmRA9d8T4EiuB81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdACAuHT4orX9eWnKtNLeo+s/1z1evR0yiOcwIXUsYOgBA3KmskKb3kEqypfG5vn9O71H9ccQcmsOM0LWEoQMAxJXDB6tj1hO2tZfxudKMMziyG4NoDjNC1xKGDgAQV9Y/Hzhway+fvNDQe4paaA4zQtcShg4AEFeWXGs+mlvzqO6SAQ29p6iF5jAjdC1h6AAAcWVuUWhHdOcVN/Seohaaw4zQtYShAwDEFY7oxi2aw4zQtYShAwDEFc7RjVs0hxmhawlDBwCIK1x1IW7RHGaEriUMHQAg7lRWVMdsoOvozjiD6+jGKJrDjNC1hKEDAMSlwwerT09YMqD6hWdLBlT/nSO5MYvmMCN0LWHoAACAG2gOM0LXEoYOAAC4geYwI3QtYegAAIAbaA4zQtcShg4AALiB5jAjdC1h6AAAgBtoDjNC1xKGDgAAuIHmMCN0LWHoAACAG2gOM0LXEoYOAOw6ePiIXl63Tbcs/EBXzFijWxZ+oJfXbdPBw0fqtY0XP9qiFz7a4rfdfQf+W6/bhrtvQKhoDjNC1xKGDkAsMUVhuEEW7naisT5QTC5850sVT1mpgpGvq8Oo133+vKB0lbbu/q7O/Q60jfYjq/8sGPm62tfabsfRb0R822D7BtQXzWFG6FrC0AHuCHZUr64jfpHeN5IjiZFsL9xIND3+1t3f6YLSVQHDK5wgi2Q79V0fKCZrrgu0dBj1ui4sXeX9egTa77q2YWupvW9ANNAcZoSuJQwdGlqoMVafGAz3sSLdV9PHN23/jzG8zp/0tnpOetsYcWWbd0V037q2G+hoXbBADLa9cCPRdCTzgtJV3ttEGmSRbqchF88MxeJ+v7yOnw2IHprDjNC1hKGLP9E436++247W7YKFVc0Yqut2wWLQs51QH8ukPvvQcfQb3qN84Szt/3ffaMdPoKN1boZWoMd/ed22qARZfbfj9tJh1Ou6ddGHMbnfnn0DooXmMCN0LbE5dDaDLNrbt32kL1r3q2+sBROt6Az1dp6jnKaw8sTQvgP/DXq7umKww6jXdcGUlSqesrLOxwp2vmd99iFWl5pH6xoitGo+/i0LP4j461czyOqznYZaPN/7sbjfV8xYE/G/KUBthK4ZoWuJraGzGWTR3r7tI32m+4d7v7piqz7n1IW67bqiM5zb/WjCipB+0I5d+jfXfqibfk0bi0fb6rvUPlrndmjVfvwrZqyp1/Y8QVbf7TTU8xCL+80RXUQboWtG6FpiY+hsBlm0t1/fbUV6/0juF2psRXJOXajbDjU6Q71dKC/WOeOBN137dbrph3qsHm2r71LzaF1DhFbNxz+Wj+h6fqsTi/vNObqIJkLXjNC1xMbQ2QyyaG+/vtuK9P6R3C+UH4SRHoEJdduhRGe04/SUsX907Ye66de0sXi0rb5LrB3RPRbP0a35H9pY22+uugAbCF0zQtcSG0NnM8iivf36bivS+0dyv1BjK5Jz6kLddqjRGa045Yiu3SWWztE9Fq66UPsUpQtrnKIU6n57Pt4+yHZPCnLps7puG2jfgGghdM0IXUtsDJ3NIIv29uu7rUjvH8n9Eu2IbqjXBz2Wz9E9lq66IFWft36h4bz1cIIsku3Ud32wmLxgykotfOdL77m4nqsshPP5B9rGix9t0YsfbfHbruf6xZHelndGgy2ErhmhawlHdOPniG4inqN75m9X1PuFbfFw1YX2QYKp56S31XNy4OvTXvi/y5aZ4ifYfevaruk6upE8VriRGOxooefX+PUNsnC3E431ppiM5K1+CU8kIkLXjNC1hHN04+cc3US76sKF/7vEmCmsasZQsACrKwY926lrG6FcXaM++7Bp+3+MAVNX3AT7eKQfCzYL4W4v3Egk2hCzDh+U1j8vLblWmltU/edfnpbWPe27bv3z1bdFWAhdM0LXEq66ED9XXZDqjq36Xkc3GtEZ7u1CjbH6xGCo26hLNPbhmBIoGggExKrKCml6D6kkWxqfW/1nSc7//qyxzvPn9B7V90HICF0zQtcSm9fRtRVk0d6+7SN9wa6jG8n9bMZUtKLTjX3140ZUNVS4xUowhrMfgaLBzUAI92sWK1/jGBDOG9kEuu2LH23RCx9tqXNdzaP+kdzftM1I9vOa6Sv1rwmnqqok9/uwrWOpGp8rzTjDZ0ZC/XqE+k6S9fla1PdrbuPfakLXjNC1xI13RrMVOdHcvu0jfW58DjEplHgINTCC3S7UqKpPzITyGMG2H+nH6nrcHf+IbLvhPmc7/mHej2mnS2tnf3+fp/pJpZ1qHBWrtQQIhDof/8De6ER27X1dcq20do40/XSO2im8N7IJdNuaL8prH2Sd5/Ydg7yoL9j9g20zkv28a/TokAPXb/nkhbC+HoH2sz5fSxtfc9PXsr4IXbOEDt0NGzaoT58+ysjIUF5enkaMGKFDhw7Veb9Dhw5p+PDhysvLU0ZGhvr06aPPP/88rMdm6KIk0oCKZohE48hTNKLTI5QwDDVQ6wqXR7rVHVXBQq2umDl8sPo2wR7jkW7mWHq4a/XHw/1YXZ9bSY70m+bhb9f0+Qb7Ov+muTQ+x7AftX61W1LH7WoFQsiPH8rnUtdzFfa+5lRH++J+dYe36VzOcCI9nNCP8rmj4ZxSFeuXcQt3P98eW6Qj94c4tzWWIyU5OrL4Wu/jnDxqqe4aPVpvjy3S+nGn6e2xRbpr9Gh1GrnUuJ91vaYhVr6W0UBzmCVs6O7evVv5+fkqKirSsmXLtGDBAuXk5Gjo0KF13vf2229XTk6OFixYoGXLlqmwsFBt27bVnj17Qn78uB66aAaf7SN90bqfzV8HRyM6ax7ZrCsMp/eoDsO6AvXA3jrCJcQfTpEeYZSqZyGkH3zh/6B0d3tBPt9QAzGa+7BkQP0fv/bnEvJzFeFzYQrvYOdyhhrp4YR+sMcLdNQ6hAjf/ci5QcPMs7y8blvYl9zrNDL0AIzWEs5+rh93WsSzsfuRc/Xyum06b+QibRrXWSrJ9kaz589N4zrrvJGLAj62m5dQrM/XMhriujksS9jQnThxojIzM7Vr1y7vunnz5ik5OVlff/218X5bt25VcnKyHnvsMe+6Xbt2qWnTppo8eXLIj2916GweeYxm8NVnW6EEXaCAiuR+kT5WKELddl3R6bnduqejFxivD4tepNS11D7C6LHkWvcC0M2l5udrLRCDLPOKo/f4ns8lnp6rmt+zNv6jEUGE1xVmnssehvMmKpEGYH2PRIaznxEf0b0/R3+ddJEGLVijTeM6G7dx5P4cbRx3sl/Ydxjl3pvi1PdrGQ2ErlnChm5hYaH69u3rs66yslJJSUlatGiR8X4LFixQUlKSKisrfdb37dtXxcXFIT++taGzeeQxmsFX322F+sO5dkBFcr9IHysUoW471Oicc350fmCPz5Umn+hOuNQ+wljT3CL7j+/2UvvzdTsQo/n4NbcVj8/VJy80zH80giymMCsYWf1GNqG+6U2nkUvDDsBoHf0NZz/rc47ulNIJKi2dENJt7xp9n99ju/k255Eukb7BU22ErlnChm7Lli01ZswYv/Vt2rTRyJEjjfcbMWKE2rZt5fBNjgAAGPVJREFU67f+vvvuU15eXsiPb2XobB55lKIbfPXdVig/nAMFVCT3i/SxQhHqtkOJzvG50sR20fuh+9s8qz/QfZZ5xZF/feJxqfn5NkQg1vy+qu/jez6XeHuuPN+zMbrftcMs3COloQak53GidfQ33P2sK8gDLZ5IH7zwHf11Up8673vk/hy9NbbYbz85ogspgUM3JSVFpaWlfuu7dOmiwYMHG+83aNAgdenSxW99aWmpUlNTjffbu3evtm3b5l3KysqiP3Q2jzxK0Q2++m4r1B/O84rrf79IHysUoW471Oic2C4Gj+iG8EIq0/McY0fborI05BHdQP/ZjdYR3Xh8ruYVx+SR6EBhVjAyvHNfQzklwPM4kRz9DbaEey7xeSMXaeO4k72PVf2n7+PX/HPjuJN13shFenndNu1+5NyQvqbrx53m97icowuJ0PUTaeiWlJTIcRy/JapDZ/PIoxTd4KvvtjiiG/h2s8+P3g/ckM/RNfwwHZ9b/UK0ULZh+s9XnedPWnrRmO3tu3aObq0Xcs04w//0pWido+v2i+rqu8T4Ed2aYRbJ1QxCfZHX3vvzVDGuY0i3DfTr/9pHICO9OkT1aRP36a2xxVo/7jS9NbZYvxo9Ur8cfa/PurtG36eTRy31Ps6Rxf11pI7v09r/ceCqC6gpYUPX7VMXXDmia/PIoxRbR3Q5Rzfwsu4Z9666MD73f5f2MpwTXvPSYvU5naayovo2gR5jeo86LgMW4VLX5xbKJb9C/XxDiflgr/w33ae0k7S4f/X3+5IB1fNpuqxWNK66YHquQv3PQri3j8YSg+foquT7MDO9kU2gN71pXyuSQn2RV9X9vn/WtU+1H6fmn5HsZzjrAj5OiM/fXaPvC/mdJOuzj8H2+6Qg19G18QZPNRG6ZgkbuoWFherXr5/Puj179oT8YrTalxLr169fw78YzfYR3Vg6R5erLpj3IVgYeo7ohXIbKbTbHT5Y/TwtGRA4qkJ9rLq+TqbHCLb9R7pJ07qH/7G6Prcd/4jsMU2fb11fox3/8N+PtXOC/ycj3CugmB7fdIku02ME+poF29fpPao/7rn9U/2DX5IuGkvN75cYPRI9pXRC0DeyCfSmNy9+tEUvfrRFty76MOQXaYWzfPHAD/0ep6433KlrP8Nd5/c4/3v+qgzPX1VJrv454Qe6ZvrKsN5Jsj77aNpvzzujhf05RgGha5awoTtx4kRlZWX5XD1h/vz5IV9e7PHHH/eu2717tzIzMxv+8mK2z9GNpasuSJEHVCT3i0as1ffzCGcf6orPUG8Tzu2CicY2It1+pB+z9ZiRbC+a9wl3Wwf2RucxwtnXcMI7kuvo1v5+qe/jRfModKj/jtZ1GcloB3x9DpLYZvPf5wRB6JolbOh63jCiuLhYy5cv18KFC5Wbm+v3hhG9evVSr169fNbdfvvtys3N1cKFC7V8+XIVFxfHxhtG2L7qghTdf1BsH+mL9v1sxpqb0QnEg3DCe90z1Ut9Ir2+jxfoqHU0IjyQcN5kxu9UknoskR4kcQP/NgZF6JolbOhKUnl5uXr37q0mTZqoVatWGj58uN9bABcXF/udknDw4EENGzZMrVq1UpMmTdSnTx9t2LAhrMe2eh1d2/+zdeMoEv84AYg3gf49i0aE136McA5o1N6nSC5BGI2DJGhQhK5ZQoduQ7L+zmjEIwAkHjeuQV77KDS//o97hK4ZoWsJQwcACJtbV6x5pBsHSRIIzWFG6FrC0AEAwlbfy0i68VoOxByaw4zQtYShAwCELRqXkeQqBcccmsOM0LWEoQMAhC1al5HktRzHFJrDjNC1hKEDAIQtEU49qOsawPH2OHGA5jAjdC1h6AAAEYnnUw9CvQZwvDxOnKA5zAhdSxg6AEDE3Dr1IJpHRd06Gp0IR72jjOYwI3QtYegAADEt2kdFbb9NvduPE0doDjNC1xKGDgAQs2wcFY3GFSNi6XHiCM1hRuhawtABAGKWjaOi9b0GcKw9ThyhOcwIXUsYOgBAzLJxVJQjug2G5jAjdC1h6AAAMcvGUVHO0W0wNIcZoWsJQwcAiFk2jopy1YUGQ3OYEbqWMHQAgJhl66ioW9cAjudrDVtAc5gRupYwdACAqIqXa966eQ1g3uZYEs0RDKFrCUMHAIgaG+8ExlHRhEFzmBG6ljB0AICoSISjr7CK5jAjdC1h6AAAURHLVxmI5ukUiBjNYUboWsLQAQCiIlavG2vjdApEhOYwI3QtYegAAFERi+8ExiW+YgrNYUboWsLQAQCiIhaP6Mby6RTHIJrDjNC1hKEDAERFLEZlLMb3MYzmMCN0LWHoAABREYunCcTi6RTHMJrDjNC1hKEDAERNrF3zliO6MYXmMCN0LWHoAABRFUvXvI3F0ymOYTSHGaFrCUMHAEhYsXg6xTGM5jAjdC1h6AAACS3WTqc4htEcZoSuJQwdACDhxdLpFMcwmsOM0LWEoQMAAG6gOcwIXUsYOgAA4Aaaw4zQtYShAwAAbqA5zAhdSxg6AADgBprDjNC1hKEDAABuoDnMCF1LGDoAAOAGmsOM0LWEoQMAAG6gOcwIXUsYOgAA4Aaaw4zQtYShAwAAbqA5zAhdSxg6AADgBprDjNC1hKEDAABuoDnMCF1LKioq5DiOysrKtG3bNhYWFhYWFhYWK0tZWZkcx1FFRUVD50/MIXQt8QwdCwsLCwsLC4sbS1lZWUPnT8whdC05dOiQysrKVFFR0eD/04v3xfOfBo6OJ87Cc5p4C89p4i08p/GzVFRUqKysTIcOHWro/Ik5hC5i3rZtnHuUaHhOEw/PaeLhOUUiIHQR8/jHNvHwnCYentPEw3OKREDoIubxj23i4TlNPDyniYfnFImA0EXM27t3r0pKSrR3796G3hVECc9p4uE5TTw8p0gEhC4AAAASEqELAACAhEToAgAAICERugAAAEhIhC4AAAASEqGLmPD888/rqquuUtu2bZWRkaHTTjtNixYtUlVVlc/tHn/8cXXq1Enp6enq3r27XnvttQbaY4TjP//5j9q2bSvHcbRu3Tqfj/Gcxo8jR45oypQp6ty5s9LS0tSmTRvdfvvtPrepqqrSgw8+qOOPP16NGzfWOeeco7Vr1zbQHqMur7zyis466yxlZmaqdevWuu666/Tll1/63Y7vU8QrQhcx4ZxzztENN9yg5557Tm+//bZGjRqlRo0a6be//a33Ns8++6ySkpI0duxYrVy5UrfffrtSUlL4IRoH7r33XuXl5fmFLs9pfBk4cKDy8/M1e/ZsrV69Wk8//bSGDRvmc5sHH3xQaWlpevjhh/XWW2+pb9++ysrK0qZNmxpor2GyatUqNWrUSLfccotWrFih5557Tp07d1bnzp114MAB7+34PkU8I3QRE3bs2OG3bvDgwTruuOO8f+/cubN+8pOf+Nzm3HPP1WWXXWZ9/xC5DRs2qGnTppo7d65f6PKcxo/ly5crJSVFn332mfE2Bw4cUHZ2tu677z7vukOHDqmgoEB33HGHG7uJMNx+++3q0KGDz2/OVq5cKcdx9N5773nX8X2KeEboImbNnj1bjuNo//792rRpkxzH0SuvvOJzm+nTpystLU0HDx5soL1EXfr06aNhw4Zp1apVPqHLcxpfrrvuOl188cVBb/P222/LcRytX7/eZ/2vfvUrFRQUWNw7ROK2225T9+7dfdZ9/PHHchxH7777riS+TxH/CF3ErJ/85CfeH45vvPGGHMfRP/7xD5/bvPnmm3IcRxs2bGiAPURdXnjhBeXl5Wnv3r1+octzGl9OOOEE3Xnnnbr77ruVnZ2txo0b68c//rHP+ZyPPvqokpKSdOj/t3fvQVFVDxzAD8uyyC4iipCAtDSapvJUEAsFEw0tSNPBoproMaQzjcGgNZVJg/nIMUbCV4OZphQgKAOKQvFQUEmxyaxmtKFkWhwfmUuDYrTA9/eHszcuy8Ii2I9dv5+Z+8eePffsuWfn6pezZ8+2tsrOzcrKgp2dHVpaWv7rblMPqquroVQqsXXrVjQ1NeHXX39FdHQ0QkJC0N7eDoD3KVk/Bl0alGpqaqBQKJCZmQkAyM7OhhDCZIlDXV2dbPaBBo9bt27Bx8cHO3fuBACToMv31LqoVCo4Oztj2rRpKCkpwb59+zBmzBhMmDABBoMBALBmzRpoNBqTc/Pz8yGEwKVLl/7rblMviouL4ezsDCEEhBAIDg7G1atXped5n5K1Y9ClQUen08HLywtRUVHSrAL/sbU+7777LkJCQqT1fwy61s3BwQFqtVr2fhk/5i4oKADAoGttjh8/DldXV6SkpKCyshL5+fkICAhAaGiotCSB9ylZOwZdGlT0ej38/Pzg7++PpqYmqZwfn1mXhoYGqFQqlJSUQK/XQ6/X4+DBgxBCoLq6Gs3NzXxPrYyHhwfCwsJMyocNG4bVq1cD4NIFazNlyhTExcXJynQ6Hezs7KRPYnifkrVj0KVBo6WlBeHh4fDx8UFjY6PsOeMXIoqLi2XlmZmZUKlUJv+x0v+XcfbW3BEZGcn31MpERkaaDbrGbQCNX0Y7d+6crE5KSgq/jDYIOTk5Ye3atSbl7u7u0s4ZvE/J2jHo0qBgMBgQExODESNGmN2+aNy4cXjxxRdlZeHh4dziZhDS6/WoqqqSHZs2bYIQAjt27JCWL/A9tR4bN26Ek5MTrl27JpUZP742/niAcXux999/X6rzzz//wNfXl9uLDUKPPPIIFi5cKCtraGiAnZ0dsrKypDLep2TNGHRpUEhMTIQQAunp6aitrZUdxrViX331Fezs7JCamoqqqiosXboUSqVStt8jDV5d1+gCfE+tyV9//YUHH3wQU6dORVFREXJycvDQQw8hNDRUtg/r+vXr4ejoiIyMDFRUVGDRokX8wYhBKiMjA0IIvPnmm9IPRvj5+cHT0xM3btyQ6vE+JWvGoEuDglarNfsx98WLF6V6n332GcaOHQuVSgV/f3/+DKUV6S7oAnxPrUl9fT2efPJJaDQaDBs2DPHx8bhy5YqsTkdHB9atW4fRo0fD0dERYWFhDESDVEdHB7Zv346AgABoNBqMGjUKzzzzDM6fP29Sl/cpWSsGXSIiIiKySQy6RERERGSTGHSJiIiIyCYx6BIRERGRTWLQJSIiIiKbxKBLRERERDaJQZeIiIiIbBKDLhERERHZJAZdIiIiIrJJDLpEREREZJMYdImIiIjIJjHoElG/7dmzB1OmTMHQoUPh4uKCSZMmYenSpWhubh7Q18nJycGuXbssLu+PhIQEBAYGDmibg81AXeO+ffvw9NNPw9vbG2q1GoGBgdi1axc6Ojq6rX/mzBnMmjULarUaPj4+2LlzZ6+v0dHRgcmTJ+PTTz+VynQ6HWJjYxEQEAB/f3+Ul5dLzy1ZsgSvvPJKv6+NiKwbgy4R9cuGDRugUCiwYsUKlJaWoqSkBOvWrcOECROg0+kG9LXmz5+PyMhIi8v7o76+HufOnRvQNgebgQq606ZNw3PPPYfc3FxUVFTgnXfegUKhwJo1a0zq1tTUQKPR4K233kJVVRWWLl0KhULR61gXFBTA09MTf//9NwCgvb0dQUFBOHLkCADghx9+gK+vr1S/vr4eKpUKFy5c6Pf1EZH1YtAlon7x9vZGYmJit8+Zm9G7W/9F0G1vb5fClK0bqKD7xx9/mJQlJiZi+PDhsrKWlhb4+Pjgvffek8ra2trg7u6OVatW9fgaERERePvtt6XHhw4dQmxsrPTYYDBAo9HIznn88ceRlJTUp2shItvCoEtE/aJWq5GamtprvePHjyMqKgrOzs4YOnQowsPDcfz4cQDAyZMnERMTg1GjRkGj0SA4OBj5+fmy8xMSEiCEkB0ffPCB2XKjmpoazJw5E2q1Gq6urkhISMCNGzdk7QYGBuLgwYPw8/ODUqnEkSNHTEKg8XFZWRkmTZoEjUaDiIgI/PLLLybXunnzZowePRpqtRrz5s1DTU0NhBAoLCw0Oz6WjEFf+mFJH7oLur2Nl6W2bdsGIQRaWlpkfXJ1dcXNmzdldQMDA/HSSy+Zbeu3336DnZ0dTp8+LZWtX78eK1eulB5/9913CAsLM+nDyJEjYTAY+tx/IrINDLpE1C8zZsyAm5sbdu7ciatXr3Zb59ixY3BwcMDMmTOxb98+lJaWIi0tDbm5uQDurLHdsGEDDh8+jPLycqxcuRIKhQLFxcVSG/X19YiIiEBwcDBqa2tRW1sLnU5nthy4E65VKhUWLlyIQ4cO4csvv4RWq0V0dLTUbkJCAkaMGIGxY8diz549KC8vR0NDQ7dBd+TIkQgKCkJeXh4KCwuh1WoRGhoqu9YDBw5ACIElS5agrKwMaWlp8PX17TXoWjIGlvbD0j50vUZLxstSzz//PLRaraxs6tSpSEhIgMFgkB0PP/wwXnvtNbNt7dixA0OGDJEF1r1792LBggUAgObmZkRGRpr8YXD27FkIIXDmzJk+95+IbAODLhH1y48//oixY8dKs6njxo3DihUrcOXKFanOo48+Cn9/f7S1tfXaXnt7OwwGAxYvXiz7aBro+9KF6dOnIyIiQlZ26tQpCCFw4sQJAP/OFHcNQ90FXYVCIVvzuXv3bgghZGuRQ0JC8MQTT8jaWr58ea9Bt7OexsCSfljah67XaMl4WaKmpgYKhQKZmZlSWVNTExQKhcnsu/FIS0sz297rr7+OoKAgWZnBYMALL7yAiRMnYuLEidi+fbvJeQaDAfb29ti2bZvFfSci28KgS0T91traipKSEiQlJSEoKAhCCHh4eECn0+HmzZtQKBRIT083e/6ff/6JN954Az4+PrC3t5fCz/jx42X1+hJ0b926BXt7e2zevNlkBtHFxQUZGRkA7oS9Bx54wKTN7oJu1xlKYwisra0F8G+w2rJli6xedXV1r0HX0jHorR996UPna7R0vHqj0+ng5eWFqKgotLe3S+VHjx6FEAIHDhxAXV2ddBhDeteZ685iY2Mxe/Zsi16/Kzc3N4uW1hCRbWLQJaIBV1paCnt7eyQnJ0On00EIgZycHLP1Y2Ji4OHhgS1btqCyshJ1dXWIi4szCXR9CbqNjY1mZw+FEFi+fDmAO2EvICDApE1za3Q7+/777yGEQFVVFQDg8uXLEEIgLy9PVu/8+fO9Bl1Lx6C3fvSlD53bsnS8eqLX6+Hn5wd/f380NTXJntu7dy+EENDr9bLyjRs3QqVSmdTvbM6cOXjqqad6ff3ueHl5yb7ERkT3FwZdIronJk+ejLlz5/Y6o3v79m0oFAqTGcgFCxb0K+jevHkTdnZ2SE1Nlc0gGo/ff/8dgPmdB+4m6N7tjG5fxqC3ftztjK6l42VOS0sLwsPD4ePjg8bGRpPnd+3aBSGEyd7KQUFBWLRoUY9tP/vsswgPD++xjjlqtRofffTRXZ1LRNaPQZeI+qXzWlyjlpYWuLu74+WXXwZwZ41uYGCg7KNsI71eDyEEsrKypLLr16/D2dnZJOTFxcWZfLO+p/LHHnsMixcv7rH/Axl0gTvrY+fMmSOrl5KS0mPQ7csYWNIPS/vQtS1Lxqs7BoMBMTExGDFiBH7++edu61RWVpqshc7NzYVSqcTZs2d7bD81NRVeXl597te1a9ek5RJEdH9i0CWifnF3d8err76KvLw8VFdXIzc3F+Hh4XBwcMC3334L4N9dF2bNmoX8/Hx8/fXXWLt2rbTrwpQpU+Dr64uCggLs378fwcHB8PX1NQl5q1atglqtRmFhIerq6nDp0qUey0+cOAFHR0fEx8ejsLAQlZWV+OKLLxAfHy8FroEOuvv375fteLB69WpotVoIIVBUVGR2HC0dA0v6YWkfurZlyXh1JzExEUIIpKenSztfGA/jnsStra0YPXo0pk2bhm+++QYZGRlQq9X4+OOPzbZrVFZWBiEELl++3Gvdzg4fPgwhRLd/jBHR/YFBl4j6ZevWrYiOjoaXlxeUSiWGDx+OuXPnoqamRlbv2LFjiIiIgJOTE1xcXDB9+nScPHkSAHDhwgVp71atVotPPvkESUlJJiHv6tWrmD9/PlxdXWX75ZorB4DTp09j3rx5cHFxgZOTE8aPH49ly5ZJW6ENdNAFgMzMTHh7e2PIkCGYPXs2ioqKIITA0aNHzY6jpWNgaT8s6UN3bfU2Xt0xhujujosXL0r1Tp06hcDAQDg6OmLSpEnIzs4222Znra2tcHNzw+eff25RfaNly5ZhxowZfTqHiGwLgy4R0T22adMm2Nvb4/r16/d1H/ojOTnZZDlGT9ra2uDp6Yndu3ffw14R0WDHoEtENICuXbuG5ORkFBUVoby8HB9++CHUajUSEhLuqz4MtMbGRqjVavz0008W1c/OzsaYMWP4q2hE9zkGXSKiAdTU1IR58+Zh5MiRUCqV8Pb2RkpKCm7fvn1f9eFeyMvLQ0VFhUV1s7OzcezYsXvcIyIa7Bh0iYiIiMgmMegSERERkU1i0CUiIiIim8SgS0REREQ2iUGXiIiIiGwSgy4RERER2SQGXSIiIiKySQy6RERERGSTGHSJiIiIyCb9D2/Smy+gKVAkAAAAAElFTkSuQmCC\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "22258\n",
      "578 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[4],\n",
    "           150,\n",
    "           188,\n",
    "           208)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.496585538687667e-06\n",
      "Cost function before refinement: 1.496585538687667e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -5.43998333e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.0171535150920134e-10\n",
      "     jac: array([-2.79014458e-07,  1.12723053e-07,  2.76456642e-09, -8.39426390e-10,\n",
      "        1.01678678e-09, -1.46581687e-07, -5.97716569e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20008138e-01,  3.28813990e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -5.43998223e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.0171535150920134e-10\n",
      "GonioParam(dist=0.7200081378039512, poni1=0.03288139900481467, poni2=0.004, rot1=0.0, offset=-54.399822256631786, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03288139900481467\n",
      " Number of peaks found and used for refinement\n",
      "754\n",
      "Cost function before refinement: 3.084426464441637e-07\n",
      "[ 7.20008138e-01  3.28813990e-02  4.00000000e-03  0.00000000e+00\n",
      " -5.43998223e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 6.551090453612858e-08\n",
      "     jac: array([-1.59759495e-09, -1.69126935e-11,  3.81129886e-06, -2.74614198e-06,\n",
      "       -3.33598038e-10,  1.33732118e-04,  8.98242363e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20526837e-01,  3.32363709e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -5.43998177e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 6.551090453612858e-08\n",
      "GonioParam(dist=0.7205268365472406, poni1=0.03323637090038128, poni2=0.004, rot1=0.0, offset=-54.39981766227154, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7200081378039512 --> 0.7205268365472406\n",
      "Cost function before refinement: 6.551090453612858e-08\n",
      "[ 7.20526837e-01  3.32363709e-02  4.00000000e-03  0.00000000e+00\n",
      " -5.43998177e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.9801782405594906e-10\n",
      "     jac: array([-6.28824819e-07, -6.16534335e-09, -8.41801711e-08,  6.31905195e-08,\n",
      "       -4.25490289e-10,  1.87107307e-09,  5.29587814e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 46\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20528271e-01,  3.33948197e-02,  3.97295090e-03,  1.94838596e-05,\n",
      "       -5.43998157e+01,  9.99025942e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.9801782405594906e-10\n",
      "GonioParam(dist=0.7205282706408196, poni1=0.033394819722196205, poni2=0.003972950903091611, rot1=1.948385963684671e-05, offset=-54.399815665191156, scale=0.999025941539747, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.999025941539747\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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zqkXHTt2lB/96Ef17p0/f74EQSAPPvhg5BwAAGxBdHPA3r17w3/+yU9+4iy6pnn231ddXY3oQuLR/I3uihUrso6X6WG0r7NfdGufORsluuvXr5cgCOSss86SefPmRV77cRHdqP9N2P+723PPPVfGjh0rzzzzjMybN08efPDBelKbC9FtqM79osv/XgGAJohujokS1L1798ptt90mxxxzTPhE9JgxY6zz1AbRhTSgderCcccdZzSer+jecMMNDYru3r17paSkRE455RSjOlx+uhD1vwknn3yydOrUqc6/LIuIPPfcc/WkdvXq1Wo/Xbj55pslCAJ5+umns9aJ6AJAHCC6OSZKUAcPHizNmjWTiooKmTdvnlx33XXSqFEjmTp1qlWe2iC6kAa0ztGdMWOG0Xi+orv/d7tff+BMRGTIkCESBIE88sgjDY796aefhv98zTXXWD+MFvW/Cd27d5fvfOc7daR5z5494XFotaV206ZNEgSBXHbZZQ3m+vpavP/++1JUVCRnnHGG7N69O4xv3rxZjjrqqAYfRkN0ASBXILo5piFBXblypRQVFdX7P7RBgwbJsccea5zn6yC6kFQeeughufnmm+Xmm2+WkpIS+da3vhX++d57761zb0NvRrvjjjukb9++4ZvRvt4nE76i+/LLL0sQBNK7d2+ZMGGCTJ06NXxYbevWrdKtWzcpKiqSCy+8UO6++24ZPXq0XHPNNXLiiSfWGWPTpk3Svn17adSokQwaNEhGjx4t/fv3l8MPP1yOOeYY6dSpU51aMonu73//ewmCQM455xz585//LLfffrt873vfk1NPPbXBb2+POeYYad26tdxzzz0yderUOr9tznS82Kmnnip33XWX3HrrrXL00UdHHi+G6AJArkB0c0xDgjpmzBgpLi6W6upq2bNnT3jtfwp569atRnm+DqILSSXqxQsNfZP59XubNGkibdu2lbKyMrn++uut31DmK7oiIrfffrt85zvfkcaNG9cTyZ07d8pNN90kJ554ohxyyCHSokULOf744+Xiiy+ud3zZ6tWr5cILL5RDDz1UmjdvLr1795Y333xTTjnlFOncuXOdezOJ7ldffSUVFRXhSyo6dOggw4YNk6VLlzYouosWLZIf/OAH0qxZM+MXRowfP15OOeUUOeSQQ6R58+ZSVlYms2fPrncfogsAuQTRzTENCeot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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeXwU9eH/8QkJiYQcyBUIaEAEUQ6BelQlWQ14Fg9Aqlb7wwMqikdbQUDAULURBMsphxxRQbGixXq0IAq0KKjRIlaDtVgMR61cAb4ioYG8f3/E3Waz+0lmNzuT7Ob1fDzmEZjsHLv7SfLKZHbWEgAAABCDrLreAQAAAMAJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqELAACAmEToAgAAICYRugAAAIhJhC4AAABiEqEL/GDdunWyLEsFBQWObmfo0KGyLL70EBnHjx/XhAkT1KFDB8XHxys9Pb2ud8mWrKwseTyeut6NkGzbtk0DBgxQixYtZFmW7r///rDW49b3mvooGp93RDd+2qJe8H7jrzw1bdpUffr00YwZM3T8+HHX9oHQDd1rr72mH//4x0pNTdXJJ5+sCy64QPPmzavr3WoQFi5cKMuyNGzYMD377LP6/e9/X9e75JOXl6eVK1cG/Vw0Bs9FF12k5s2ba9q0aVq6dKk++ugj4223b9+uvLw8bd68OeBzhK6nrncDDUhs/bRF1PJ+47/hhhu0dOlSPffcc5o8ebK6du0qy7I0fPhw1/aB0A3NqlWrFBcXp9NPP11PPvmkZs6cqZtvvlkXXHBBXe9ag3DjjTcqPT1d5eXldb0rASzL0tChQ4N+rrS0VMeOHXN3h2rh6NGjiouL03333Wfr9tV9PyF0PXW9G2hAYuenLaKa9xv/448/7jf/0KFDyszMVFxcnP7zn/+4sg+EbmhuuukmWZal4uJiv/mlpaWu78t3332nEydOBP1ceXm5/u///i8i26lPkXbJJZcoKyurrncjqOpCN9oUFxfLsizl5eXZuj2hGxyhC7fFzk9bRDVT6ErS4MGDZVmWNm7c6Jt38OBBPfjgg+rUqZMSExPVsmVL3Xjjjfrqq6/8lj18+LDGjx+v8847Ty1atFBiYqI6deqkMWPG6MiRI0H3oeoPn+eff16JiYm66qqr9N1331V7P9544w3l5OSoZcuWSkpKUvv27XXttdfq888/993GG7oHDx7UiBEj1KpVKyUlJenCCy/U+++/77e+EydO6LHHHlN2drYyMjLUuHFjnXLKKRoxYoT27dvnd9vt27f7fhAvX75cPXv29O3D+PHjg4bZv//9b40YMUKnnHKKGjdurLZt22r48OH69ttvq72flf3sZz+TZVkR+0WksLBQ1113ne/56tKlix577DGVlZX53c7j8SgrK0v/+te/NGTIEDVv3lyWZamkpMTvuZw7d666deumxMREv3Mq3333XV1++eVKT0/XSSedpJ49e2rWrFkBR0a9z9eePXt0xx13KCMjQ3FxcUH/JO0Vyrg7ceKEpk+frh49eiglJUUpKSnq3Lmzbr31Vn3//ffGbRQUFASc7lM5xExBEWyce9f1zjvvaOrUqTrttNOUmJiozp0765lnngm6/bVr1+qqq65S8+bNlZSUpI4dO+r222/X3r17g56K5J28TPv3+uuvKzs7WykpKUpOTta5556rF154IeB23ud/9+7duvHGG9WsWTM1adJEl112mf7xj38YH7eqPvvsMw0ePNhvvP3mN7/x+0XN4/EEvS/bt28Pus68vLygt/fe38rPwZIlS3TWWWcpMTFRp556qqZMmRJ0nXa/LkxefPFFXX311TrllFOUmJioFi1a6Nprr9WWLVsCbut9brZu3aqrrrpKKSkpSktL0+DBg/XNN98EfQyvvPJKNW3aVOnp6Ro4cKC2b98e9Dk2Pe+1vX+ACaGLesEUuuXl5Tr77LNlWZa+/PJLSRWRe9ZZZ6lp06a69957NX/+fE2aNEkZGRlq2bKlvv76a9/yW7duVUZGhu6++27NmDFDc+bM0ZAhQxQXF6fLLrss6D5UDoApU6YoLi5Od9xxR43fcNevX69GjRqpZ8+emjZtmhYtWqRHH31Ul1xyif7whz/4bucNp/PPP18DBgzQ7NmzNWnSJKWlpalFixY6fPiw77ZHjx5Venq6br/9dk2bNk3z5s3T7bffrsaNG6t79+5+8eoN3d69eystLU3jxo3T7Nmzdfnll/tOC6msuLhYmZmZat68uR588EE9/fTTGjNmjFJTU3X66afr4MGDNTxrFTZs2KC4uDhdccUV+u9//2trGZM33nhDiYmJOvPMM/Xb3/5W8+fP19ChQ9WoUSNdf/31frf1eDxq0aKF2rdvryFDhuipp57So48+qiNHjviey169eqldu3aaNGmSnn76ad/z8OabbyohIUFt2rRRXl6eZsyYoezs7KCnyXifr169eunSSy/VzJkzNXXq1IAj2JWFMu4eeeQRWZalq6++Wk899ZTmz5+vsWPHqlu3btq7d69xG1999ZWWLl2qrl27qmXLllq6dKmWLl3qC5dwQvf8889Xz549NWXKFM2YMUNnnHGGLMvSu+++67eO+fPnKy4uTu3atdP48eO1YMECTZw4UWeffbY2b96s//znP1q6dKksy1J2drZv35YuXepbR7D9W7BggSzLUufOnfXb3/5WU6dO9X39//a3v/W7rcfjUcuWLdWpUyfdfPPNmjt3rkaPHq3ExER17drV1nn9H3/8sVJSUpSamqqxY8dqzpw5uvrqq2VZlq644grfXwfeeustTZ8+XZZlaeDAgb77YvrFd8uWLXrooYdkWZZ+8Ytf+G7/1ltv+T0H559/vjp06KBHH31Us2fP1vnnny/LsvT888/7rS+UrwuTvn376tprr9Wjjz6qhQsXauzYsWrevLlSUlJ831u9srKydPrppysjI0MjRozQvHnzNGLECMXFxenSSy/1u+22bdt8v2SMGjVKTz31lIYMGaKsrCy1bNnSVuhG4v4BJoQu6gXvN/6JEydq79692rNnj7Zs2aJhw4b5fiB43XfffUpKStLHH3/st46vv/5aqampfn8qPXbsWND4mjBhgizL0gcffBCwDwUFBTpx4oTuvffekP5U+atf/UqWZdV4NNQbTnfddZff/JdeekmWZWn+/Pm+eeXl5UGP6i1atEiWZfm98Mgbuo0aNfJ7kUx5ebluuOEG3xE7r2uuuUYtWrQICLbCwkLFx8fbvt+LFi1SYmKiEhISdO2114b9J/2jR48qIyNDF154YcBz9rvf/U6WZWndunW+ed6jbOPHjw9Yl/e5PPnkkwOej+PHjysrK0upqanauXOn3/wrrrhClmXpvffe8833Pl8333yz7fsSyrjr3bu3zjzzTNvrrsp7ZLOqcEK3V69efs/frl27lJiYqBtvvNE3b+fOnb4jbgcOHAhYf+VTR6o7daHq/pWUlKhp06bq0KGD3y9ZR44cUc+ePZWQkOA3Vr3Pf9UjoE888YQsy9KqVauCbreyiy66SI0aNQr4XjJ8+PCA4Kz8FxM77Jy60LZt24D72rJlS/34xz/2zQv168IkWJQXFRUpMTEx4HtRVlZWwPcXSbr77rtlWZa++OIL37xg31uk/30/rCl0I3X/ABNCF/WC6U+djRo10oABA/Tvf/9bUkW0tWjRQrm5udq7d2/AdOmll6pt27ZBt1FWVqYDBw5o7969Wr9+vSzL0qxZswL2Yd68eRo0aJDi4+O1cOFC2/dh0qRJsixLc+fOrfborzecqh5F2bdvnyzL0gMPPBB0uePHj6ukpER79+7Vv/71L1mWpV//+te+z3t/EF9++eUBy/7tb3+TZVkaOXKkpIqj4o0aNdLQoUODPo5nnHGGrReTLVu2TJZlaeHChXrllVeUkJCgK6+8UkePHvXd5vPPP5dlWXriiSeqXddrr70my7L09NNPB+zPF198IcuyNG7cON/tvaFTUlISsC7vcxns8k8ffvihLMvSvffeG/C5v/71rwHPgff5qu5UherUNO4uvvhipaWlacOGDWGtP5Kh+/TTTwfcvnv37vrRj37k+783PpYtW1bjvoUSut5f9J588smA2z733HOyLEuzZ8/2zfN4PGrUqJHfWJOkjz76KOC2wXz77be+I+lV7dixQ5ZlafDgwb55ToTuQw89FPA57+XLvEL9uqhJeXm5Dh8+7FtHjx491KdPH7/bZGVlKTMzM2DZl19+WZZl6fXXX5dU8T2padOm6t27d8Bt//Of/9gK3UjfP6AqQhf1gvcb/x133KE1a9bo7bff1saNG7V//36/23l/OFU3NWrUyG+Z+fPnq2fPnoqPjw+47W9+85uAfUhLS5NlWXr22WdDug/79u1T7969ZVmWUlNTdcUVV2jGjBkB5656wynYn1Yty9Ktt97qN+/ll1/Weeedp8aNGwfs/2233ea7nfcH8S9/+cuA9XpfMX7FFVdIkj744IMaH8fTTjut2vtbWlqqVq1a6eKLL/bNW7FihRISEtSvXz/fuajLly+XZVnatGlTteubMmVKjft0++23+27v8XjUqlWroOvyPpdPPfVUwOdefPHFgCPnXiUlJb4/T3t5n6+q59bWxO6427hxozIyMnxH+G666SYtXbrU9ov5Ihm6b7/9dtD1d+jQwff/u+66S5Zl+Z13bhJK6E6ePNl4JHbz5s2yLEu/+tWv/Parffv2Abf1fh1MmjSp2n17//33ZVmWxo4dG/Tz6enpfgHnROguWrQo4HNVX6wa6teFyebNmzVgwAClpKQELN+xY0e/22ZlZalv377G/faet/3NN9/IsizddNNNQbfZrFmzGkM3UvcPMCF0US9U92K0yrxHCS655BKtWbPGOHl5z6u77LLLtHDhQr355ptas2aNnnnmmYAfWt59+PnPf67k5GT16NEjpBdlSRVHONavX6/x48crOztb8fHxSktL8/vTW3VXXagaBitXrpRlWTrvvPM0d+5cvf7661qzZo1WrVoVcNtQQtf7Q/6mm24yPoZVz8usynuU+OGHH/ab/+KLLyo+Pl7Z2dk6fPiw+vbtq27dutV4+Stv6EyePNm4T5XjyhR4UvWREW7ohiKUcSdV/Fn5D3/4g+655x51795dllVxnqqd8Wd6HDp06BA0dNesWWMM3WB/Iq66/voUusHut90grQ+hG+xzVcdbqF8XwezYsUOpqanKzMzU5MmTtXLlSr311ltas2aNunXrFvA42v0lKRKhG4n7B1SH0EW9YDd0T5w4oWbNmgX8qc2kd+/e6tChQ8Alp/785z8bQ7egoEDr169XSkqKzjzzzKCvMrbr888/V1JSkt839lBCd+DAgTrppJMCjiZu3brVGLp2Tl3Yt2+f4uLiNGjQoLDv2yeffOL7xaCqF154QfHx8erUqZMsy9Kbb75Z4/peeeUVWZb/n/WrE27oVnfqwoYNG2RZlkaNGuWbF07ohjLuglm8eLHtqDI9Dn369FGPHj0C5ntf8BVu6HojvuoLpoIJJXSrO3XB+8K2OXPmGPfLy26Q7tmzR5YV/NSFnTt3yrIsvxdChRq63tNUahu6oX5dBDNz5kxZlqW1a9cGfK5NmzZhh24kTl2IxP0DqkPool6wG7qSNHLkSFmWpRdffDHo5ysfBfvRj36kjh07+p0mUFZW5ju/0xS6kvTee+8pLS1NXbp08XvRkkmwV8iXlZWpRYsW6t69u29eKKE7ePBgNWnSxO/6r+Xl5br55puNoVv1xTWVX4xW+U/TP/nJTxQfHx/0yG15ebn27NlT7f09fvy471JFVS+LJsn3Yr727dvbun7td999p9atW6t9+/ZBH8vvv//e74oU4Yau98VoaWlp2rVrl2/+iRMndNVVV8mygr8YLRShjLtg99V7BPOee+6pcVumx+HGG29U48aN/e5jaWmpevbsWavQ9b4Y7Ywzzgh6ZY7KR+5TUlKChqRkfjFax44ddejQId/8o0ePqlevXkFfjFab0JUqXowWHx+vTz75xG/+iBEjZFmW32XNQg1d77nCwcI9lNAN9esimNmzZ8uyAl8w9vTTT8uyrLBDV5J++tOfBl233RejReL+AdUhdFEvhBK6Bw8eVK9evRQXF6chQ4Zo+vTpmjt3rh588EF1797dL/4ef/xxWZalSy+9VPPmzdOUKVN09tln65xzzqkxdKWKo38nn3yyTjvtNL/LlgVz3XXX6ZxzztFDDz2kBQsWaNasWerbt68sy/+FWKGErvf81nPPPVezZ8/W7373O+Xk5Pj2P1joVr28mPdKAlUv07Njxw6deuqpSkhI0G233aY5c+Zo1qxZ+uUvf6mOHTva+oG+Zs0anXTSSWrcuLGGDRumefPmaebMmbrqqqsUFxenfv36+T7aOed01apVOumkk9SiRQuNGjVKCxYs0BNPPKHbb79dzZo1C7jqQjihK/3v8mJt27bVpEmTNHPmTF+Emi4vFopQxl3Lli01YMAAPfLII1q8eLHy8/PVsWNHJSQk+F072sT0OLz77ruyLEtdu3bVjBkz9MQTT6hHjx6+S1iFG7qSNHfuXMXFxal9+/aaMGGCFi5cqEmTJql3795+L9rr37+/mjRposmTJ+uFF17Q8uXLfZ8LFlPz58+XZVnq0qWLHn/8cU2bNk29evWSZQW/vFhtQ/fjjz9W06ZNfV8vc+bM0TXXXOP7y0jlI/Khhu7333+v1NRUderUSfPmzdPy5ct9MRhK6EqhfV0Es23bNiUnJyszM1P5+fmaN2+ebrnlFjVv3lydOnWqVeh++eWXSk9P911ebO7cufrpT3/qu7xY5XP4Teuu7f0DqkPool4IJXSlisvwPPLII+revbtOOukkpaSkqGvXrho2bJjf0cXjx48rPz/f98YSp556qkaPHq2ioiJboStVHF1r2bKlTj31VG3bts24T6+88oquvvpqtWvXzvcmFn379g242H0ooStVHHU588wzlZSUpDZt2mj48OHav3+/MXTz8vL0wgsv+N4wol27dho3blzQy37t3btXo0aNUufOnZWU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aJDeeOMNPf/888rKytLll18u6X+h265dO40bN07vvPOONmzYIKnisW7Tpo0GDx6sP/3pT3rttdckSU8//bTvF45Vq1Zp7NixiouL06OPPurbbl5enpKSktSpUyfNnTtXa9eu1eeff16r+0LoAgCiDaFrFrOhm52drYEDB/rNKykpUVxcnIKVc4EAACAASURBVAoKCqpdNmpCd8tLwQO36vTpitptpwZ9+/ZVTk6O37wPPvhAlmXpvffe84XuPffcE7CsZVnq0aOHysvLffNOnDihzMxM3XLLLX63veuuu5SSkqIjR45Iqghdy7L08ssvR+y+ELoAgGhD6JrFbOi2atVK48ePD5ifmZmpMWPGVLusZVlq0aKF4uPjdfLJJ+vmm2/WN998E9L2XQndZdebj+ZWPqq7bEjttlONI0eOKD4+XrNnz1ZZWZnflJaWphkzZvhC989//nPA8pZlBTwfxcXFsixLf/zjH/3mr1+/XpZlaePGjZL+F7q1PS+3MkIXABBtCF2zmA3dhIQETZ06NWB+t27dNHz48GqXHTp0qFasWKG//OUvmjVrllq1aqUuXbr4jiQGc+jQIe3atcs3FRYWOh+683PsHdFd4Knddqrh/eIyTQ888IAvdP/2t78FLG9Zln73u9/5zXv//fdlWZbef/99v/lbt26VZVl64403JFWEblpaWkTvD6ELAIg2hK4ZoWvDxo0bZVmWFi1aZLyN9+hi1SnWj+h+9913iouL08MPP6zCwsKAaceOHb7Q3bx5c8DywU4T8R7R9Z6v6xXsiG56enpE7w+hCwCINoSuWcyGbm1OXQgmMzNTd911l/HzdXJEt56co3vhhRfqpz/9qfHzoYau9xzdn//8537z77777oBzdAldAEBDR+iaxWzoZmdna9CgQX7zDh48aOvFaMFkZmbq7rvvtn37hnTVhffee09JSUm66aabtHLlSq1du1bPPvusbrrpJn300Uchh670v6suPPDAA1q9erUeeuihoFddIHQBAA0doWsWs6Gbn5+v1NRUlZSU+OYtXLjQ1uXFqnr33XdlWZYWL15sexlXr6M7q0/w6+jO6uPadXQ//PBDXXnllUpLS1OTJk10xhln6N5779W3334bVuhK0pw5c3T66aercePG6tChQ8CpKIQuAACEbnViNnS9bxjh8Xi0evVqLVmyRM2aNQt4w4jc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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20560\n",
      "758 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[5],\n",
    "           178,\n",
    "           216,\n",
    "           236)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7.414763745399852e-08\n",
      "Cost function before refinement: 7.414763745399852e-08\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.85998889e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 5.6513401976066356e-11\n",
      "     jac: array([-2.81311437e-07,  1.90457697e-08, -2.47022619e-10,  1.33814411e-09,\n",
      "       -1.23389936e-10, -2.00557892e-07,  7.73080818e-11])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19998572e-01,  3.18038587e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.85998914e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 5.6513401976066356e-11\n",
      "GonioParam(dist=0.719998571752675, poni1=0.031803858748058605, poni2=0.004, rot1=0.0, offset=-48.599891358709684, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.031803858748058605\n",
      " Number of peaks found and used for refinement\n",
      "626\n",
      "Cost function before refinement: 2.383350348017308e-07\n",
      "[ 7.19998572e-01  3.18038587e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.85998914e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 5.1984312387232055e-08\n",
      "     jac: array([-2.19915020e-09, -2.37196929e-11,  3.57712533e-06, -2.57769667e-06,\n",
      "       -2.59923194e-10,  1.07698151e-04,  7.05422505e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20606858e-01,  3.21138531e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.85998873e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 5.1984312387232055e-08\n",
      "GonioParam(dist=0.7206068584664383, poni1=0.03211385308050831, poni2=0.004, rot1=0.0, offset=-48.599887342357356, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.719998571752675 --> 0.7206068584664383\n",
      "Cost function before refinement: 5.1984312387232055e-08\n",
      "[ 7.20606858e-01  3.21138531e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.85998873e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.5561187046317613e-10\n",
      "     jac: array([-6.63680455e-07,  8.68967625e-08, -6.74647493e-08,  5.12958215e-08,\n",
      "        7.87452992e-10,  2.88084273e-09,  4.15782562e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 54\n",
      "     nit: 6\n",
      "    njev: 6\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20609298e-01,  3.22472627e-02,  3.96893520e-03,  2.23757106e-05,\n",
      "       -4.85998857e+01,  9.99040899e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.5561187046317613e-10\n",
      "GonioParam(dist=0.7206092976334295, poni1=0.03224726268736372, poni2=0.003968935202854616, rot1=2.237571059770315e-05, offset=-48.599885660072495, scale=0.9990408988314912, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9990408988314912\n",
      "area_pixel=0.041071116230573246 area_sum=0.04123092083600752, Error= -0.0038909243307907342\n",
      "area_pixel=0.0404747680993891 area_sum=0.04058389121931238, Error= -0.0026960777058762783\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOy9eZRV1Zmwf6pAkUlKDaD0x6BRI6IERRySlKWI2nZnfWmwTZtf6C+JUWRwRqUjtuWUUkGjQUMgCIiIojjgGMChwBlBcQQVFYRCsRiqAAER4f39UeFQZdW5dw/vufeek+dZ66yl7z773e/edyf9pPqcfQIBAAAAAEghQb4LAAAAAACIA0QXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAAAAJBKEF0AAAAASCWILgAAAACkEkQXAAAAAFIJogsAAAAAqQTRBQAAAIBUgugCAAAAQCpBdAEAAAAglSC6AAD1CIJAfvOb3+S7jIKF9QGAJIHoAkDBUVFRIWeeeaZ07dpVgiCQH/3oR5H3lpWVSRAE4bXXXnvJ/vvvLyeddJJcc801smzZMquxfUWusrJSysvLpaamxjlHPqmpqZHy8nKprKxssh3RBYAkgegCQMERBIHst99+ctppp0mbNm2yiu4ee+whU6dOlalTp8qkSZPklltukf79+8uee+4pLVq0kD//+c/GY2/dulW+/fZb59rLy8slCAJrwS4Uli1bJkEQSHl5eZPtvusDAJBLEF0AKDg+/fTT8J+7du2aVXRbtGgRmad79+4SBIE89NBD6nU2RSGJ7oYNG6z7ZBNdAIAkgegCQEHjI7oiIosXL5bi4mI5+OCDjcZr6v81vyv26quvyoknniitWrWSfffdV37/+9/Lpk2bGtRS/zGKXVd9aaytrZUrr7xSfvjDH8qee+4pP/jBD+Tss89uIPe7WLFihfzyl7+Udu3aSZs2baRfv36yaNEiKSsrk65duza4t2vXrlJWViaLFi2Sf/3Xf5V27dpJSUmJiIhs3LhRRo4cKccee6zst99+sueee8oPf/hDGTFihGzevDnMMXny5Cbrrz9W1KMLkydPlt69e0vLli2lTZs2ctJJJ8ns2bMb3berziVLlsi//du/SZs2bWTvvfeWM888U7788ssMvwwAgD2ILgAUNL6iKyJy4oknShAE8uGHH2YdL0p0f/zjH8u+++4rw4cPl3HjxsnZZ58tQRDIeeedF943Z84c6d+/vwRBILfffnv4OMU777wjInWSe/jhh0vr1q3lwgsvlHHjxsm1114rHTt2lB/84AeyfPnyMNf69eulS5cu0qxZMxk8eLCMHTtWzj33XNlnn33k4IMPblJ0DzzwQCkpKZHf//73Mm7cOKmoqBARkSVLlkjHjh1l6NChcscdd8hdd90lZ511lhQVFclpp50W5vj000/l9ttvlyAIpH///mH9jz32WMb1+cMf/iBBEEjv3r3l1ltvlRtvvFEOPPBAKSoqkvvuu69RnQcffLB07NhRBg8eLH/9619l8ODBUlRUJKeeemrW3wcAwAZEFwAKGg3RvfDCCyUIAnniiSeyjhclukVFRfL66683iP/bv/2bNG/evMFfdTM9unDRRRdJixYt5M0332wQX758ubRt27bBuCNGjJAgCGTixIkN7v3zn//c6K+sIhK+uDdhwoRG427btq3J52qvvvpqCYJA5s+fH8ayPbrw/fX56KOPpKioSI477jj55ptvwvjatWtl//33l3322Ue+/vrrRnU++OCDDfIOHTrU+H+MAACYgujmgKVLl8qgQYPkyCOPlOLiYikrK4s1z/Tp06V///6y//77SxAEMnnyZOfaAfKNhuiOHDlSgiBo9NfFpogS3Z/85CeN7r311lslCAJ57733wliU6O7cuVP2228/6du3r6xZs6bRdeqpp8oBBxwQ3n/YYYdJ+/bt5bvvvmuQZ9u2bbL33ns3Kbr77rtvo/u/z/bt22X9+vWyZs0amTt3rgRBIGPGjAnbbUV31KhREgSBPPLII43uvf766yUIAnnyyScb1NmpU6dG9z788MON7gUA8AXRzQEzZ86Uzp07y1lnnSWHHnqos+ia5vnP//xPOfroo+Wcc85BdCHxFMpfdAcOHNjo3l3PtM6dOzeMRYnuV1991eTzr/Wv4uLi8P4WLVrICSec0GSNvXr1alJ0+/TpEzmvcePGSc+ePaVZs2aNxr3uuuvC+2xFd/DgwZF/iX3sscckCIIG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x1xr0xzPdc00x3OZr9Y65XIenuNXvfwyzhFBQYnuMcccI0cffbTMmzdPqqurpba2ttFlSmlpqfTv379BrKamRoqKimTy5MmR/Z555hkJgiCjDJuA6NrBObq8jKbSHsfv5dKm2cd2Thr5bcb0rdu3Lu2YaY1xx1xr0xzPdc00x3OZr9Y65XIenuPzMlo0BSW6rVu3llmzZqnkat++vYwcObJRvFOnTuERZk1xzTXXyH777SePPfaYHHLIIdKsWTM57LDDZPr06VbjI7p2ILqco6vSjugiur4x0xoRXUQX0U0EBSW6xx13nEyZMkUlV/PmzWX06NGN4j169JDzzjsvst+gQYNkr732kn333VfGjh0rzz33nAwcOFCCIJCXX345st+GDRukqqoqvBYsWMCmswDRRXRV2hFdRNc3ZlojoovoIrqJoKBE96233pJevXrJCy+8IDt27PDK5Sq65513ngRBIH/5y1/C2M6dO6Vnz57y85//PLJfeXm5BP/YaPUvNp0ZnKPLowsq7YguousbM60R0UV0Ed1EUFCiW1JSIi1btpTi4mLZY489ZJ999ml0meL66MKVV14pQRDIkiVLGsQvvvhiOeiggyL78RddP/iLLqKr0o7oIrq+MdMaEV1EF9FNBAUluuXl5XLttddmvEwpLS2VAQMGNIjV1tZmfRlt8uTJ0pToXnTRRXLwwQcbj88zunYguoiuSjuii+j6xkxrRHQRXUQ3EQT5LiAuKioqpG3btlJTUxPGJkyYkPV4sS+++EKaN28ud955ZxjbuXOnHHnkkXLmmWcaj4/o2oHoIroq7YguousbM60R0UV0Ed1EUJCiu3XrVnn33Xfl6aeflg0bNjjl2PXBiLKyMpk9e7ZMmjRJSkpKGn0wom/fvtK3b98GsYsvvljatGkjY8aMkVmzZsnZZ58tzZo144MRMYLoIroq7YguousbM60R0UV0Ed1EUHCie8stt8i+++4bfiDizTffFBGR008/XSoqKqxyLV68WE455RRp2bKldOjQQS6//PJGnwAuKyuTsrKyBrHt27fL1VdfLZ06dZI999xTevfubX3sGaJrx92z35OBv7xeBv7yelnz1Xq1vD+67OEwr2zebJ9g82aR2bPrLpv+Dv1G3Puaea2udfnmy3afSR7fHJna4/i9XNo0+9jOSSO/zZi+dfvWpR0zrTHumGtt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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeXhU5d3/8RMSEoEsCEhYDciilk2odYMQF1ywuIDi3selULBWu4CyE6oWWVwgIIuA0YLA41JUsAUR4lMExGgpVsGfhUIAa2ULoEAokM/vjzhjJjN3MjOZ+2RmeL+u61zoycyZ7Ut45+TMGUcAAABAHHJq+g4AAAAANhC6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELgAAAOISoQsAAIC4ROgCAAAgLhG6AAAAiEuELvC9goICOY6j/Px8q7dz7733ynH4q4fIOHnypEaPHq1WrVopMTFRGRkZNX2XgpKVlaWcnJyavhsh2bp1q/r06aOGDRvKcRz9+te/Dms7bn2viUax+LojtvGvLaKC5xt/+aVevXrq1q2bpkyZopMnT7p2Hwjd0L399tu65JJLlJaWpjPPPFOXXnqpZs6cWdN367QwZ84cOY6jAQMG6OWXX9b//u//1vRd8srNzdWSJUsCfi0Wg6d79+5q0KCBnn76ac2fP18ff/yx8bLbt29Xbm6uNm7c6Pc1Qjenpu8GTiPx9a8tYpbnG//tt9+u+fPn649//KMmTJig8847T47jaODAga7dB0I3NMuXL1dCQoLatm2rZ555RlOnTtXdd9+tSy+9tKbv2mnhjjvuUEZGhkpLS2v6rvhxHEf33ntvwK+VlJTo+PHj7t6hajh27JgSEhL0yCOPBHX5yr6fELo5NX03cBqJn39tEdM83/ifeuopn/WHDh1Ss2bNlJCQoP/85z+u3AdCNzR33nmnHMdRUVGRz/qSkhLX78t3332nU6dOBfxaaWmpvv3224jcTjRF2hVXXKGsrKyavhsBVRa6saaoqEiO4yg3NzeoyxO6gRG6cFv8/GuLmGYKXUm65ZZb5DiO1q1b51138OBBPfbYY2rTpo2Sk5PVqFEj3XHHHdq2bZvPdQ8fPqxRo0bpoosuUsOGDZWcnKw2bdpo2LBhOnLkSMD7UPEfn1deeUXJycm6/vrr9d1331X6OJYtW6aePXuqUaNGSklJUYsWLXTTTTfp888/917GE7oHDx7U4MGDddZZZyklJUWXXXaZPvzwQ5/tnTp1Sk8++aSys7OVmZmp2rVrq2XLlho8eLD27dvnc9nt27d7/yFetGiROnfu7L0Po0aNChhm//73vzV48GC1bNlStWvXVtOmTTVw4EB98803lT7O8u666y45jhOxH0QKCwt18803e1+v9u3b68knn9SJEyd8LpeTk6OsrCz961//Uv/+/dWgQQM5jqPi4mKf13LGjBnq0KGDkpOTfY6p/OCDD3TttdcqIyNDZ5xxhjp37qy8vDy/PaOe12vPnj36+c9/rszMTCUkJAT8lbRHKHN36tQpPffcc+rUqZNSU1OVmpqqdu3a6b777tPRo0eNt5Gfn+93uE/5EDMFRaA592xr1apVmjx5ss455xwlJyerXbt2eumllwLe/urVq3X99derQYMGSklJUevWrfXAAw9o7969AQ9F8iwepvu3dOlSZWdnKzU1VXXr1tVPfvITLVy40O9yntf/q6++0h133KH69eurTp06uuaaa/T//t//Mz5vFX322We65ZZbfObt97//vc8Pajk5OQEfy/bt2wNuMzc3N+DlPY+3/Gvw4osv6kc/+pGSk5N19tlna+LEiQG3GezfC5PFixfrhhtuUMuWLZWcnKyGDRvqpptu0qZNm/wu63lttmzZouuvv16pqalKT0/XLbfcoq+//jrgc9i7d2/Vq1dPGRkZ6tu3r7Zv3x7wNTa97tV9fIAJoYuoYArd0tJSdenSRY7j6Msvv5RUFrk/+tGPVK9ePT388MOaNWuWxo0bp8zMTDVq1Eg7duzwXn/Lli3KzMzUL3/5S02ZMkXTp09X//79lZCQoGuuuSbgfSgfABMnTlRCQoJ+/vOfV/kN9/3331etWrXUuXNnPf3005o7d66eeOIJXXHFFfrTn/7kvZwnnC6++GL16dNH06ZN07hx45Senq6GDRvq8OHD3sseO3ZMGRkZeuCBB/T0009r5syZeuCBB1S7dm117NjRJ149odu1a1elp6drxIgRmjZtmq699lrvYSHlFRUVqVmzZmrQoIEee+wxvfDCCxo2bJjS0tLUtm1bHTx4sIpXrcyaNWuUkJCg6667Tv/973+Duo7JsmXLlJycrPPPP19/+MMfNGvWLN17772qVauWbr31Vp/L5uTkqGHDhmrRooX69++v559/Xk888YSOHDnifS0vuOACNW/eXOPGjdMLL7zgfR3eeecdJSUlqUmTJsrNzdWUKVOUnZ0d8DAZz+t1wQUX6Oqrr9bUqVM1efJkvz3Y5YUyd48//rgcx9ENN9yg559/XrNmzdLw4cPVoUMH7d2713gb27Zt0/z583XeeeepUaNGmj9/vubPn+8Nl3BC9+KLL1bnzp01ceJETZkyReeee64cx9EHH3zgs41Zs2YpISFBzZs316hRozR79myNGTNGXbp00caNG/Wf//xH8+fPl+M4ys7O9t63+fPne7cR6P7Nnj1bjuOoXbt2+sMf/qDJkyd7//7/4Q9/8LlsTk6OGjVqpDZt2ujuu+/WjBkz9Oijjyo5OVnnnXdeUMf1f/LJJ0pNTVVaWpqGDx+u6dOn64YbbpDjOLruuuu8vx1499139dxzz8lxHPXt29f7WEw/+G7atEkjR46U4zj6xS9+4b38u+++6/MaXHzxxWrVqpWeeOIJTZs2TRdffLEcx9Err7zis71Q/l6Y9OjRQzfddJOeeOIJzZkzR8OHD1eDBg2Umprq/d7qkZWVpbZt2yozM1ODBw/WzJkzNXjwYCUkJOjqq6/2uezWrVu9P2QMHTpUzz//vPr376+srCw1atQoqNCNxOMDTAhdRAXPN/4xY8Zo79692rNnjzZt2qQBAwZ4/0HweOSRR5SSkqJPPvnEZxs7duxQWlqaz69Kjx8/HjC+Ro8eLcdxtGHDBr/7kJ+fr1OnTunhhx8O6VeVv/3tb+U4TpV7Qz3h9OCDD/qsf/XVV+U4jmbNmuVdV1paGnCv3ty5c+U4js8bjzyhW6tWLZ83yZSWlur222/37rHzuPHGG9WwYUO/YCssLFRiYmLQj3vu3LlKTk5WUlKSbrrpprB/pX/s2DFlZmbqsssu83vNnn32WTmOo4KCAu86z162UaNG+W3L81qeeeaZfq/HyZMnlZWVpbS0NO3atctn/XXXXSfHcbR27Vrves/rdffddwf9WEKZu65du+r8888PetsVefZsVhRO6F5wwQU+r9/u3buVnJysO+64w7tu165d3j1uBw4c8Nt++UNHKjt0oeL9Ky4uVr169dSqVSufH7KOHDmizp07KykpyWdWPa9/xT2gkyZNkuM4Wr58ecDbLa979+6qVauW3/eSgQMH+gVn+d+YBCOYQxeaNm3q91gbNWqkSy65xLsu1L8XJoGifPPmzUpOTvb7XpSVleX3/UWSfvnLX8pxHH3xxRfedYG+t0g/fD+sKnQj9fgAE0IXUcH0q85atWqpT58++ve//y2pLNoaNmyoK6+8Unv37vVbrr76ajVt2jTgbZw4cUIHDhzQ3r179f7778txHOXl5fndh5kzZ6pfv35KTEzUnDlzgn4M48aNk+M4mjFjRqV7fz3hVHEvyr59++Q4joYMGRLweidPnlRxcbH27t2rf/3rX3IcR7/73e+8X/f8Q3zttdf6Xfdvf/ubHMfRQw89JKlsr3itWrV07733Bnwezz333KDeTLZgwQI5jqM5c+bojTfeUFJSknr37q1jx455L/P555/LcRxNmjSp0m29/fbbchxHL7zwgt/9+eKLL+Q4jkaMGOG9vCd0iouL/bbleS0Dnf7po48+kuM4evjhh/2+9te//tXvNfC8XpUdqlCZqubu8ssvV3p6utasWRPW9iMZui+88ILf5Tt27Kgf//jH3v/3xMeCBQuqvG+hhK7nB71nnnnG77J//OMf5TiOpk2b5l2Xk5OjWrVq+cyaJH388cd+lw3km2++8e5Jr2jnzp1yHEe33HKLd52N0B05cqTf1zynL/MI9e9FVUpLS3X48GHvNjp16qRu3br5XCYrK0vNmjXzu+7rr78ux3G0dOlSSWXfk+rVq6euXbv6XfY///lPUKEb6ccHVEToIip4vvH//Oc/18qVK/Xee+9p3bp12r9/v8/lPP84VbbUqlXL5zqzZs1S586dlZiY6HfZ3//+9373IT09XY7j6OWXXw7pMezbt09du3aV4zhKS0vTddddpylTpvgdu+oJp0C/WnUcR/fdd5/Putdff10XXXSRateu7Xf/77//fu/lPP8Q/+Y3v/Hbrucd49ddd50kacOGDVU+j+ecc06lj7ekpERnnXWWLr/8cu+61157TUlJSbrqqqu8x6IuWrRIjuNo/fr1lW5v4sSJVd6nBx54wHv5nJwcnXXWWQG35Xktn3/+eb+vLV682G/PuUdxcbH319Menter4rG1VQl27tatW6fMzEzvHr4777xT8+fPD/rNfJEM3ffeey/g9lu1auX9/wcffFCO4/gcd24SSuhOmDDBuCd248aNchxHv/3tb33uV4sWLfwu6/l7MG7cuErv24cffijHcTR8+PCAX8/IyPAJOBuhO3fuXL+vVXyzaqh/L0w2btyoPn36KDU11e/6rVu39rlsVlaWevToYbzfnuO2v/76azmOozvvvDPgbdavX7/K0I3U4wNMCF1EhcrejFaeZy/BFVdcoZUrVxoXD89xdddcc43mzJmjd955RytXrtRLL73k94+W5z787Gc/U926ddWpU6eQ3pQlle3heP/99zVq1ChlZ2crMTFR6enpPr96q+ysCxXDYMmSJXIcRxdddJFmzJihpUuXauXKlVq+fLnfZUMJXc8/8nfeeafxOax4XGZFnr3EY8eO9Vm/ePFiJSYmKjs7W4cPH1aPHj3UoUOHKk9/5QmdCRMmGO9T+bgyBZ5UeWSEG7qhCGXupLJfK//pT3/Sr371K3Xs2FGOU3acajDzZ3oeWrVqFTB0V65caQzdQL8irrj9aArdQI872CCNhtAN9LWK8xbq34tAdu7cqbS0NDVr1kwTJkzQkiVL9O6772rlypXq0KGD3/MY7A9JkQjdSDw+oDKELqJCsKF76tQp1a9f3+9XbSZdu3ZVq1at/E459Ze//MUYuvn5+Xr//feVmpqq888/P+C7jIP1+eefKyUlxecbeyih27dvX51xxhl+exO3bNliDN1gDl3Yt2+fEhIS1K9fv7Af29///nfvDwYVLVy4UImJiWrTpo0cx9E777xT5fbeeOMNOY7vr/UrE27oVnbowpo1a+Q4joYOHepdF07ohjJ3gcybNy/oqDI9D926dVOnTp381nve8BVu6HoivuIbpgIJJXQrO3TB88a26dOnG++XR7BBumfPHjlO4EMXdu3aJcdxfN4IFWroeg5TqW7ohvr3IpCpU6fKcRytXr3a72tNmjQJO3QjcehCJB4fUBlCF1Eh2NCVpIceekiO42jx4sUBv15+L9iPf/xjtW7d2ucwgRMnTniP7zSFriStXbtW6enpat++vc+blkwCvUP+xIkTatiwoTp27OhdF0ro3nLLLapTp47P+V9LS0t19913G0O34ptryr8Zrfyvpn/6058qMTEx4J7b0tJS7dmzp9LHe/LkSe+piiqeFk2S9818LVq0COr8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wtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hRuhawtABAAA30BxmhK4lDB0AAHADzWFG6FrC0AEAADfQHGaEriUMHQAAcAPNYUboWsLQAQAAN9AcZoSuJQwdAABwA81hFtehO3fuXLVr104pKSnq3Lmzli5dGtL1v/32WzVv3lyO42jjxo0hXZehAwAAbqA5zOI2dBctWqSEhASNHj1aq1ev1qBBg5SUlKT169cHvY3HHntMmZmZhC4AAIhaNIdZ3IZu+/btddddd/msu/TSS9W7d++grr9lyxbVq1dPs2bNInQBAEDUojnM4jJ0t23bJsdx9NZbb/msnzp1qpKTk1VSUlLlNnr16qUhQ4aooKCA0AUAAFGL5jCLy9B955135DiO/vnPf/qsf/fdd+U4jrZs2VLp9V977TVlZmbq0KFDhC4AAIhqNIdZXIbuggUL5DiO9u7d67O+sLBQjuNo7dq1xuseOXJELVu21Lx58yQp6NA9dOiQdu/e7V08t8XQAQAAmwhds5gJ3YMHD2rLli1VLidPnqxW6I4YMUIXXnihSktLJQUfurm5uXIcx29h6AAAgE2ErlnMhG5+fn7AkKy4fP3112EfurBjxw4lJyfrnXfeUXFxsYqLi7V06VI5jqO//vWv+vbbb433jz26AACgJhC6ZjETuqHwvBnt7bff9lmfl5en5ORkHT9+POD1PHtvTUtOTk7Q94GhAwAAbqA5zOIydKWy04vdc889Puu6d+9e6enFiouLVVBQ4LM899xzchxHc+bM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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18647\n",
      "952 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[6],\n",
    "           207,\n",
    "           245,\n",
    "           266)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.37748174147368e-06\n",
      "Cost function before refinement: 4.37748174147368e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.27998889e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 9.109058243486396e-11\n",
      "     jac: array([-3.53771074e-07,  3.50167703e-09, -7.17406458e-10,  1.96667227e-09,\n",
      "       -3.65232464e-10, -2.61708398e-07,  2.20481224e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19986034e-01,  3.04925065e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.27999078e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 9.109058243486396e-11\n",
      "GonioParam(dist=0.7199860338026991, poni1=0.030492506521307684, poni2=0.004, rot1=0.0, offset=-42.79990784447931, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.030492506521307684\n",
      " Number of peaks found and used for refinement\n",
      "543\n",
      "Cost function before refinement: 1.9115723976987742e-07\n",
      "[ 7.19986034e-01  3.04925065e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.27999078e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 4.1213792481813325e-08\n",
      "     jac: array([-3.06070636e-09, -2.41167086e-11,  3.21647439e-06, -2.31812136e-06,\n",
      "       -3.62528230e-10,  8.61096023e-05,  5.54324342e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20705559e-01,  3.07684347e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.27999042e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 4.1213792481813325e-08\n",
      "GonioParam(dist=0.7207055592224313, poni1=0.030768434748054685, poni2=0.004, rot1=0.0, offset=-42.79990417388946, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7199860338026991 --> 0.7207055592224313\n",
      "Cost function before refinement: 4.1213792481813325e-08\n",
      "[ 7.20705559e-01  3.07684347e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.27999042e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.9055962541521217e-10\n",
      "     jac: array([-5.20672544e-07, -3.45117956e-07, -5.78527760e-08,  4.38009067e-08,\n",
      "       -4.68311260e-09,  9.35212499e-08,  5.08197212e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 45\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20707163e-01,  3.08633971e-02,  3.96520588e-03,  2.50699030e-05,\n",
      "       -4.27999030e+01,  9.99050597e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 1.9055962541521217e-10\n",
      "GonioParam(dist=0.7207071627511924, poni1=0.03086339714237221, poni2=0.003965205877861361, rot1=2.5069903048049418e-05, offset=-42.79990297383393, scale=0.99905059684665, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.99905059684665\n",
      "area_pixel=0.04131177354259297 area_sum=0.04228396460577287, Error= -0.023533026539699672\n",
      "area_pixel=0.0435894947035802 area_sum=0.04387578172532226, Error= -0.006567798587455262\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOy9eZhV1ZWwf6pAkUlKjaD0x6BRI6IERTQmKUoRtU3375cG27T5QncmRQaNGkU6YizHioqJBg2BICAioOKAM4MKOCEWiiOgqCAUisVQDAIiwvr+qHCosurcu4d17r3n+L7Pc54nrn32Wmvve0y/qb53n0AAAAAAAFJIkO8GAAAAAADiANEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAEAdgiCQX/7yl/luo2BhfwAgSSC6AFBwVFRUyDnnnCOdOnWSIAjke9/7XuS9ZWVlEgRBeO23335yyCGHyKmnnirXXHONLF++3Kq2r8jNmTNHysvLpaamxjlHPqmpqZHy8nKZM2dOo+OILgAkCUQXAAqOIAjkoIMOkjPPPFNatWqVVXT32WcfmTRpkkyaNEnGjx8vt9xyi/Tt21f23Xdfadasmfz1r381rr19+3b56quvnHsvLy+XIAisBbtQWL58uQRBIOXl5Y2O++4PAEAuQXQBoOD46KOPwv/cqVOnrKLbrFmzyDxdunSRIAjkwQcfVO+zMQpJdDdt2mQ9J5voAgAkCUQXAAoaH9EVEVm8eLEUFxfLEUccYVSvsf/X/J7YK6+8Ir169ZIWLVrIgQceKL/97W9ly5Yt9Xqp+zWKPVddady4caNceeWV8t3vflf23Xdf+c53viPnnXdePbnfw8qVK+VnP/uZtGnTRlq1aiV9+vSRRYsWSVlZmXTq1KnevZ06dZKysjJZtGiR/Ou//qu0adNGSkpKRERk8+bNMnz4cDnppJPkoIMOkn333Ve++93vyrBhw2Tr1q1hjgkTJjTaf91aUV9dmDBhgvTo0UOaN28urVq1klNPPVVmzpzZ4L49fS5ZskR+8pOfSKtWrWT//feXc845Rz777LMMnwwAgD2ILgAUNL6iKyLSq1cvCYJAli5dmrVelOh+//vflwMPPFAuv/xyGT16tJx33nkSBIFccMEF4X2zZs2Svn37ShAEcvvtt4dfp3jrrbdEpFZyjznmGGnZsqVcfPHFMnr0aLn22mulXbt28p3vfEdWrFgR5tqwYYN07NhRmjRpIgMHDpRRo0bJ+eefLwcccIAcccQRjYruYYcdJiUlJfLb3/5WRo8eLRUVFSIismTJEmnXrp0MHjxY7rjjDrnrrrvk3HPPlaKiIjnzzDPDHB999JHcfvvtEgSB9O3bN+z/0Ucfzbg/f/jDHyQIAunRo4fcdtttcuONN8phhx0mRUVFct999zXo84gjjpB27drJwIED5e9//7sMHDhQioqK5Iwzzsj6+QAA2IDoAkBBoyG6F198sQRBII8//njWelGiW1RUJK+++mq9+E9+8hNp2rRpvb/qZvrqwu9+9ztp1qyZvP766/XiK1askNatW9erO2zYMAmCQMaNG1fv3r/+9a8N/soqIuEP98aOHdug7o4dOxr9Xu3VV18tQRDIggULwli2ry58c3/ef/99KSoqkpNPPlm+/PLLML5u3To55JBD5IADDpAvvviiQZ8PPPBAvbyDBw82/h8jAACmILo5YNmyZTJgwAA57rjjpLi4WMrKymLNc//990vfvn3lkEMOkSAIZMKECc69A+QbDdEdPny4BEHQ4K+LjREluj/84Q8b3HvbbbdJEATyzjvvhLEo0d29e7ccdNBB0rt3b1m7dm2D64wzzpBDDz00vP/oo4+Wgw8+WL7++ut6eXbs2CH7779/o6J74IEHNrj/m+zcuVM2bNgga9eulblz50oQBDJy5Mhw3FZ0b731VgmCQB5++OEG915//fUSBIE88cQT9fps3759g3sfeuihBvcCAPiC6OaA6dOnS4cOHeTcc8+Vo446yll0TfP853/+p5xwwgnym9/8BtGFxFMof9Ht379/g3v3fKd17ty5YSxKdD///PNGv/9a9youLg7vb9asmZxyyimN9ti9e/dGRbdnz56R6xo9erR069ZNmjRp0qDuddddF95nK7oDBw6M/Evso48+KkEQ1Dv1olOnTvLjH/+4wb1z5syRIAjknnvuiVwDAIAtiG4O2LVrV/iff/rTnzqLrmmePffV1NQgupB4NL+j+/7772etl+nHaN9kj+jWPXM2SnTXrFkjQRDIaaedJrNnz4689uAiulH/nbDne7dnnnmmjB07Vp566imZPXu23HPPPQ2kNhei21ife0SX/74CAE0Q3RwTJai7du2Sm2++WY444ojwF9GjR4+2zlMXRBfSgNapC0cddZRRPV/RvfbaaxsV3V27dklJSYmccMIJRn24fHUh6r8Tjj/+eOncuXO9/7EsIvLMM880kNoVK1aofXXhhhtukCAI5Mknn8zaJ6ILAHGA6OaYKEEdPHiwtGjRQioqKmT27Nly9dVXS5MmTWTq1KlWeeqC6EIa0DpH96GHHjKq5yu6e763+80fnImIDBkyRIIgkPvvv7/R2p9//nn4n6+88krrH6NF/XdCjx495LDDDqsnzTt37gyPQ6srtevWrZMgCOTiiy9uNNc39+KDDz6QoqIiOeWUU2THjh1hfP369XLooYc2+mM0RBcAcgWim2MaE9Rly5ZJUVFRg/+DNmjQIDnyyCON83wTRBeSyr333is33HCD3HDDDVJSUiLf+c53wn++8847693b2JvRbr31VunXr1/4ZrRvzsmEr+i+9NJLEgSB9OnTRyZMmCBTp04Nf6y2ceNG6d69uxQVFcm5554rt99+u4waNUquvPJKOfbYY+vVWLdunXTo0EGaNGkigwYNklGjRskFF1wgBx54oBxxxBHSuXPner1kEt0//elPEgSBnHHGGfL3v/9dbrnlFvn+978vJ554YqN/vT3iiCPk4IMPljvuuEOmTp1a77vNmY4XO/HEE+XPf/6z3HTTTXL44YdHHi+G6AJArkB0c0xjgjp69GgpLi6Wmpoa2blzZ3jt+RXyxo0bjfJ8E0QXkkrUixca+0vmN+9t1qyZtGvXTsrKyuSaa66xfkOZr+iKiNxyyy1y2GGHSdOmTRuI5NatW+X666+XY489Vvbbbz9p1aqVHH300XL++ec3OL5sxYoVcu6558r+++8vLVu2lD59+sibb74pJ5xwgnTp0qXevZlE9+uvv5aKiorwJRUdO3aUoUOHyuLFixsV3QULFsgPf/hDadGihfELI8aPHy8nnHCC7LffftKyZUspKyuTGTNmNLgP0QWAXILo5pjG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GCHV1RvV8h51+SNhXtm+3T7B9u0iL79ce9nMd5lnM8e1L9982e4zyeObI9N4HJ+Xy5jmHNs1aeTXeBZ9nynTvrRjpj3GHXPtTbOe655p1nNZr9Y+5XIdnvWrpk/HOSIoONH9+OOP5Y9//KN06tRJiouL5cwzz5Rp06bJV//8fsquXbvk8ssvl3bt2uW508wgunZMnfJ8+AX7dW++p5aXH6Mp95vtPpM8vjkyjcfxebmMac6xXZNGfo1n0feZMu1LO2baY9wx194067numWY9l/Vq7VMu1+FZnx+jRVNQonvqqadKkyZNpEOHDnLNNddEfkXhtddek6Kiohx3ZweiaweiazkH0bWX0kwgum4CqNE3ott4DNF1X6/WPiG6qSDIdwN16devnzz99NOye/fujPd99dVXBf89XUTXDkTXcg6iay+lmUB03QRQo29Et/EYouu+Xq19QnRTQZDvBuoyb9482bKl8aOltmzZIvPmzctxR+4gunYgupZzEF17Kc0EousmgBp9I7qNxxBd9/Vq7ROimwoKSnSLi4tlwYIFjY4tXLhQiouLc9yRO4iuHVOmPBf+y4voIrrO44guousbM+0R0UV0Ed1EUFCiW1RUFCm6c+fOlVatWuW4I3cQXTsQXcs5iK69lGYC0XUTQI2+Ed3GY4iu+3q19gnRTQV5F9158+bJddddJ9ddd50UFRXJBRdcEP7znusPf/iDdOvWTX7wgx/ku11jEF07+OqC5RxE115KM4HougmgRt+IbuMxRNd9vVr7hOimgryL7s033ywlJSVSUlIixcXF0rp16/Cf91xt27aVXr16SWVlZb7bNQbRtQPRtZyD6NpLaSYQXTcB1Ogb0W08hui6r1drnxDdVJB30a1L586dZdGiRfluQwVE1467Zy+Wf/31SPnXX4+U6rWb1PIeefmjYV750uGNa19+KfLmm7WXzXyHeRs3bJGBl4+Tu25/KPsc175882W7zySPb45M43F8Xi5jmnNs16SR36amb9++fWnHTHuMO+bam2Y91z3TrOeyXq19yuU6POtXzZyJc0RQUKKbJhBdO3gFsMgNT7yXmF4BAKBwwDmiybvoPvbYY7Jx48bwP2e7kgIPnR2Irsiwh95KTK8AAFA44BzR5F106560UFRUlPHieLH0wlcXRK6aWmneK19d4KsLtmvhqwt8dYGvLvDVhW8heRfdFStWyI4dO8L/nO1KCoiuHRwvJnLLXU/6/wDIFX6M5paTH6PxY7S4YvwYzX29WvvEj9FSQZDvBtIKomsHoovoqowjuoiub8y0R0QX0UV0E0FBie7ChQtl9uzZ4T/X1NTIwIEDpaysTG644QbZvXu3Vb4lS5ZInz59pEWLFtKuXTsZOnRo+NfjbLz44oty2mmnScuWLWX//feXH/3oR/L+++8b10Z07UB0EV2VcUQX0fWNmfaI6CK6iG4iKCjRLS0tlfLy8vCff/WrX8n+++8v55xzjrRs2VJuvPFG41wbNmyQQw89VHr16iUzZsyQcePGSZs2bWTIkCFZ586aNUv23Xdfueiii2T27Nny5JNPylVXXSVvvvmmcX1E1w7O0UV0VcYRXUTXN2baI6KL6CK6iaCgRPeggw6Sp556SkREtm3bJi1atJDx48eLiMhdd90lRx11lHGuiooKadWqlaxfvz6MjRkzRpo0aSKrV6+OnLdz507p2LGj/OEPf3BcRS2Irh2IrsjNdyK63uOILqLrGzPtEdFFdBHdRFBQotu8eXOZO3euiIjMnj1bmjRpEorqCy+8IM2bNzfOVVpaKn379q0Xq6mpkaKiIpkwYULkvKefflqCIMgowyYgunYguoiuyjiii+j6xkx7RHQRXUQ3EQT5bqAuXbt2lWHDholI7dcWTjrppHDsoYceknbt2hnnOvjgg2X48OEN4u3btw9rNMY111wjBx10kDz66KNy5JFHSpMmTeToo4+W+++/32IliK4tiC6iqzKO6CK6vjHTHhFdRBfRTQQFJbrjxo2ToqIi+c53viPFxcUyefLkcOyiiy6SPn36GOdq2rSpjBgxokG8a9eucsEFF0TOGzBggOy3335y4IEHyqhRo+TZZ5+V/v37SxAE8tJLL0XO27Rpk1RVVYVXZWUlD50FiC7f0VUZR3QRXd+YaY+ILqKL6CaCghJdEZF58+bJbbfdJs8//3y9eHl5uTz5pPkbo1xF94ILLpAgCORvf/tbGNu9e7d069ZN/v3f/z1yXnl5uQT/fNDqXjx0Ztw96z3p+4sR0vcXI6S6eqNa3qMufyTMK9u32yfYvl3k5ZdrL5v5DvOGT3nNvFfXvnzzZbvPJI9vjkzjcXxeLmOac2zXpJHfpqZv3759acdMe4w75tqbZj3XPdOs57JerX3K5To861dNn45zRFBwoquF61cXrrzySgmCQJYsWVIvfskll8jhhx8eOY+/6PoxZt6HvAKYVwADAIADfF0ymoIT3Z07d8rLL78sDzzwgEycOLHede+99xrnKS0tlX79+tWLbdy4MeuP0SZMmNCo6P7ud7+TI444wrg+D50diK7IldMQXQAAsAfniKagRPe1116TDh06SHFxsRQVFTW4iouLjXNVVFRI69atpaamJoyNHTs26/Fin376qTRt2lTuvPPOMLZ792457rjj5JxzzjGuz0Nnxz+eWyKlA8ZK6YCxUr1+i1re714xPcwrX31ln+Crr/Z+D8pmvsO8/5260LxX175882W7zySPb45M43F8Xi5jmnNs16SR36amb9++fWnHTHuMO+bam2Y91z3TrOeyXq19yuU6POtXvfQSzhFBQYnuiSeeKCeccILMmzdPqqurZePGjQ0uU/a8MKKsrExmzpwp48ePl5KSkgYvjOjdu7f07t27XuySSy6RVq1ayciRI2XGjBly3nnnSZMmTXhhRIzwYzROXVAZj+PzchnTnGO7Jo38NjV9+/btSztm2mPcMdfeNOu57plmPZf1au1TLtfhWZ8fo0VTUKLbsmVLmTFjhlq+xYsXy+mnny7NmzeXtm3byhVXXNHgFcBlZWVSVlZWL7Zz5065+uqrpX379rLvvvtKjx49rPtCdO1AdBFdlXFEF9H1jZn2iOgiuohuIigo0T355JNl4sSJ+W5DBUTXDkQX0VUZR3QRXd+YaY+ILqKL6CaCghLdN954Q7p37y7PP/+87Nq1K9/teIHo2oHoIroq44guousbM+0R0UV0Ed1EUFCiW1JSIs2bN5fi4mLZZ5995IADDmhwJQVE1w5ElxdGqIwjuoiub8y0R0QX0UV0E0FBiW55eblce+21Ga+kgOjaMWXKc+G/vN9W0eUvugrjiC6i6xsz7RHRRXQR3UQQ5LuBtILo2oHoIroq44guousbM+0R0UV0Ed1EUJCiu337dnn77bflqaeekk2bNuW7HScQXTvqiu76txBdRBfRdV4ToovoatXLt8S5rldrnxDdVFBwonvLLbfIgQceGL4g4vXXXxcRkbPOOksqKiry3J05iK4dd898R/r/7Hrp/7PrpXrNBrW83/v9Q2Fe2brVPsHWrSIzZ9ZeNvMd5g2/71XzXl378s2X7T6TPL45Mo3H8Xm5jGnOsV2T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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeXxU1f3/8RtCEgjZZAubBmQRZVFcqxKigGuxCkjVr/brUlAsLm0B2cRQaRGIVjZZhWjBpS7FKm2DqPgrKmq0iNVg/WIhgLayBahIaCDv3x/pTDOZOcmdyZybyfh6Ph73Ablz77l35n6Seefk3DOOAAAAgDjkNPQJAAAAADYQdAEAABCXCLoAAACISwRdAAAAxCWCLgAAAOISQRcAAABxiaALAACAuETQBQAAQFwi6AIAACAuEXQBAAAQlwi6AAAAiEsEXQAAAMQlgi4AAADiEkEXAAAAcYmgCwAAgLhE0AUAAEBcIugCAAAgLhF0AQAAEJcIugAAAIhLBF0AAADEJYIuAAAA4hJBFwAAAHGJoAsAAIC4RNAFAABAXCLoAgAAIC4RdAEAABCXCLoAAACISwRdAAAAxCWCLgAAAOISQRcAAABxiaALAACAuETQBQAAQFwi6AIAACAuEXQBAAAQlwi6AAAAiEsEXQAAAMQlgi4AAADiEkEXAAAAcYmgC/zH+vXr5TiOCgsLrR7n5ptvluPwrYfoOHbsmO6//3517txZiYmJyszMbOhTciUnJ0d5eXkNfRph2bp1q4YMGaJWrVrJcRzde++9EbXj1c+aWNQYrzsaN95tERN8P/irLy1atNCZZ56pOXPm6NixY56dA0E3fC+//LK+973vKT09XSeccILOP/98LVq0qKFP6zth2bJlchxHI0eO1JNPPqnf/va3DX1Kfvn5+Vq9enXIxxpj4LnwwgvVsmVLPfzww1q5cqU++OAD47bbtm1Tfn6+Nm3aFPQYQTevoU8D3yHx9W6LRsv3g/+6667TypUr9Zvf/EYzZ85Uz5495TiORo0a5dk5EHTDU1RUpISEBHXr1k2PPPKI5s6dqxtvvFHnn39+Q5/ad8L111+vzMxMVVZWNvSpBHEcRzfffHPIx8rLy3X06FFvT6gejhw5ooSEBN1zzz2utq/t5wlBN6+hTwPfIfHzbotGzfeD/6GHHgpYf/DgQXXo0EEJCQn65z//6ck5EHTDc8MNN8hxHJWWlgasLy8v9/xcvvnmGx0/fjzkY5WVlfrXv/4VlePEUki7+OKLlZOT09CnEVJtQbexKS0tleM4ys/Pd7U9QTc0gi68Fj/vtmjUTEFXkoYPHy7HcfTOO+/41x04cED33XefunbtquTkZLVu3VrXX3+9vvjii4B9Dx06pClTpujcc89Vq1atlJycrK5du2rChAk6fPhwyHOo+ebz1FNPKTk5WVdeeaW++eabWp/HmjVrNGDAALVu3VopKSnq1KmTrr76an366af+bXxB98CBAxo9erTatGmjlJQUXXDBBXr33XcD2jt+/Lh++ctfKjc3V9nZ2UpKStKJJ56o0aNHa+/evQHbbtu2zf9G/Mwzz6hv377+c5gyZUrIYPbVV19p9OjROvHEE5WUlKT27dtr1KhR+vrrr2t9ntX9z//8jxzHidovIsXFxbrmmmv816tHjx765S9/qYqKioDt8vLylJOTo7///e8aMWKEWrZsKcdxVFZWFnAtFy5cqF69eik5OTlgTOVbb72lyy67TJmZmWrWrJn69u2refPmBfWM+q7X7t279eMf/1jZ2dlKSEgI+Sdpn3Dq7vjx43r00UfVp08fpaWlKS0tTd27d9ctt9yib7/91niMwsLCoOE+1YOYKVCEqnNfW6+//roKCgp08sknKzk5Wd27d9cTTzwR8vhvvPGGrrzySrVs2VIpKSnq0qWLbrvtNu3ZsyfkUCTf4mM6v1deeUW5ublKS0tTamqqzjnnHD399NNB2/mu/5dffqnrr79eWVlZat68uS699FL97W9/M75uNX3yyScaPnx4QL394he/CPhFLS8vL+Rz2bZtW8g28/PzQ27ve77Vr8GKFSt02mmnKTk5WSeddJJmzZoVsk233xcmzz77rK666iqdeOKJSk5OVqtWrXT11Vdr8+bNQdv6rs2WLVt05ZVXKi0tTRkZGRo+fLj+8Y9/hHwNr7jiCrVo0UKZmZkaOnSotm3bFvIam657fZ8fYELQRUwwBd3KykqdfvrpchxHn3/+uaSqkHvaaaepRYsWuvvuu7V48WJNmzZN2dnZat26tbZv3+7ff8uWLcrOztZPfvITzZkzRwsWLNCIESOUkJCgSy+9NOQ5VA8As2bNUkJCgn784x/X+QP3zTffVJMmTdS3b189/PDDevzxxzV9+nRdfPHF+t3vfuffzheczjvvPA0ZMkTz58/XtGnTlJGRoVatWunQoUP+bY8cOaLMzEzddtttevjhh7Vo0SLddtttSkpKUu/evQPCqy/o9uvXTxkZGZo0aZLmz5+vyy67zD8spLrS0lJ16NBBLVu21H333aelS5dqwoQJSk9PV7du3XTgwIE6rlqVDRs2KCEhQZdffrn+/e9/u9rHZM2aNUpOTtapp56qX/3qV1q8eLFuvvlmNWnSRNdee23Atnl5eWrVqpU6deqkESNG6LHHHtP06dN1+PBh/7U844wz1LFjR02bNk1Lly71X4c//OEPatq0qdq1a6f8/HzNmTNHubm5IYfJ+K7XGWecoUsuuURz585VQUFBUA92deHU3YMPPijHcXTVVVfpscce0+LFizVx4kT16tVLe/bsMR7jiy++0MqVK9WzZ0+1bt1aK1eu1MqVK/3BJZKge95556lv376aNWuW5syZo1NOOUWO4+itt94KaGPx4sVKSEhQx44dNWXKFC1ZskRTp07V6aefrk2bNumf//ynVq5cKcdxlJub6z+3lStX+tsIdX5LliyR4zjq3r27fvWrX6mgoMD//f+rX/0qYNu8vDy1bt1aXbt21Y033qiFCxdq/PjxSk5OVs+ePV2N6//www+Vlpam9PR0TZw4UQsWLNBVV10lx3F0+eWX+/868Oqrr+rRRx+V4zgaOnSo/7mYfvHdvHmzJk+eLMdxdPvtt/u3f/XVVwOuwXnnnafOnTtr+vTpmj9/vs477zw5jqOnnnoqoL1wvi9M+vfvr6uvvlrTp0/XsmXLNHHiRLVs2VJpaWn+n60+OTk56tatm7KzszV69GgtWrRIo0ePVkJCgi655JKAbbdu3er/JWPcuHF67LHHNGLECOXk5Kh169augm40nh9gQtBFTPD94J86dar27Nmj3bt3a/PmzRo5cqT/DcHnnnvuUUpKij788MOANrZv36709PSAP5UePXo0ZPi6//775TiO3nvvvaBzKCws1PHjx3X33XeH9afKn/3sZ3Icp87eUF9wuvPOOwPWP/fcc3IcR4sXL/avq6ysDNmr9/jjj8txnIAbj3xBt0mTJgE3yVRWVuq6667z99j5/OAHP1CrVq2CAltxcbESExNdP+/HH39cycnJatq0qa6++uqI/6R/5MgRZWdn64ILLgi6Zr/+9a/lOI7Wr1/vX+frZZsyZUpQW75recIJJwRdj2PHjiknJ0fp6enauXNnwPrLL79cjuPo7bff9q/3Xa8bb7zR9XMJp+769eunU0891XXbNfl6NmuKJOieccYZAddv165dSk5O1vXXX+9ft3PnTn+P2/79+4Parz50pLahCzXPr6ysTC1atFDnzp0Dfsk6fPiw+vbtq6ZNmwbUqu/61+wBnT17thzHUVFRUcjjVnfhhReqSZMmQT9LRo0aFRQ4q//FxA03Qxfat28f9Fxbt26t733ve/514X5fmIQK5SUlJUpOTg76WZSTkxP080WSfvKTn8hxHH322Wf+daF+tkj//XlYV9CN1vMDTAi6iAmmP3U2adJEQ4YM0VdffSWpKrS1atVKAwcO1J49e4KWSy65RO3btw95jIqKCu3fv1979uzRm2++KcdxNG/evKBzWLRokYYNG6bExEQtW7bM9XOYNm2aHMfRwoULa+399QWnmr0oe/fuleM4Gjt2bMj9jh07prKyMu3Zs0d///vf5TiOfv7zn/sf970RX3bZZUH7/uUvf5HjOBozZoykql7xJk2a6Oabbw75Op5yyimubiZbtWqVHMfRsmXL9OKLL6pp06a64oordOTIEf82n376qRzH0ezZs2tt6+WXX5bjOFq6dGnQ+Xz22WdyHEeTJk3yb+8LOmVlZUFt+a5lqOmf3n//fTmOo7vvvjvosT//+c9B18B3vWobqlCbuuruoosuUkZGhjZs2BBR+9EMukuXLg3avnfv3jrrrLP8X/vCx6pVq+o8t3CCru8XvUceeSRo29/85jdyHEfz58/3r8vLy1OTJk0Cak2SPvjgg6BtQ/n666/9Pek17dixQ47jaPjw4f51NoLu5MmTgx7zTV/mE+73RV0qKyt16NAhfxt9+vTRmWeeGbBNTk6OOnToELTvCy+8IMdx9Morr0iq+pnUokUL9evXL2jbf/7zn66CbrSfH1ATQRcxwfeD/8c//rHWrVun1157Te+884727dsXsJ3vzam2pUmTJgH7LF68WH379lViYmLQtr/4xS+CziEjI0OO4+jJJ58M6zns3btX/fr1k+M4Sk9P1+WXX645c+YEjV31BadQf1p1HEe33HJLwLoXXnhB5557rpKSkoLO/9Zbb/Vv53sj/ulPfxrUru+O8csvv1yS9N5779X5Op588sm1Pt/y8nK1adNGF110kX/d888/r6ZNm2rQoEH+sajPPPOMHMfRxo0ba21v1qxZdZ7Tbbfd5t8+Ly9Pbdq0CdmW71o+9thjQY89++yzQT3nPmVlZf4/T/v4rlfNsbV1cVt377zzjrKzs/09fDfccINWrlzp+ma+aAbd1157LWT7nTt39n995513ynGcgHHnJuEE3ZkzZxp7Yjdt2iTHcfSzn/0s4Lw6deoUtK3v+2DatGm1ntu7774rx3E0ceLEkI9nZmYGBDgbQffxxx8Peqzmzarhfl+YbNq0SUOGDFFaWlrQ/l26dAnYNicnR/379zeet2/c9j/+8Q85jqMbbrgh5DGzsrLqDLrRen6ACUEXMaG2m9Gq8/USXHzxxVq3bp1x8fGNq7v00ku1bNky/eEPf9C6dev0xBNPBL1p+c7hRz/6kVJTU9WnT5+wbsqSqno43nzzTU2ZMkW5ublKTExURkZGwJ/eapt1oWYwWL16tRzH0bnnnquFCxfqlVde0bp161RUVBS0bThB1/cmf8MNNxhfw5rjMmvy9RI/8MADAeufffZZJSYmKjc3V4cOHVL//v3Vq1evOqe/8gWdmTNnGs+pergyBTyp9pARadANRzh1J1X9Wfl3v/ud7rrrLvXu3VuOUzVO1U39mV6Hzp07hwy669atMwbdUH8irtl+LAXdUM/bbSCNhaAb6rGa9Rbu90UoO3bsUHp6ujp06KCZM2dq9erVevXVV7Vu3Tr16tUr6HV0+0tSNIJuNJ4fUBuCLmKC26B7/PhxZWVlBf2pzaRfv37q3Llz0JRTf/rTn4xBt7CwUG+++abS0tJ06qmnhrzL2K1PP/1UKSkpAT/Ywwm6Q4cOVbNmzYJ6E7ds2WIMum6GLuzdu1cJCQkaNmxYxM/to48+8v9iUNPTTz+txMREde3aVY7j6A9/+EOd7b344otynMA/69cm0qBb29CFDRs2yHEcjRs3zr8ukqAbTt2Fsnz5ctehyvQ6nHnmmerTp0/Qet8NX5EGXV+Ir3nDVCjhBN3ahi74bmxbsGCB8bx83AbS3bt3y3FCD13YuXOnHMcJuBEq3KDrG6ZS36Ab7vdFKHPnzpXjOHrjjTeCHmvXrl3EQTcaQxei8fyA2hB0ERPcBl1JGjNmjBzH0bPPPhvy8eq9YGeddZa6dOkSMEygoqLCP77TFHQl6e2331ZGRoZ69OgRcNOSSag75CsqKtSqVSv17t3bvy6coDt8+HA1b948YP7XyspK3XjjjcagW/Pmmuo3o1X/0/T3v/99JSYmhuy5rays1O7du2t9vseOHfNPVVRzWjRJ/pv5OnXq5Gr+2m+++UZt27ZVp06dQr6W3377bcCMFJEGXd/NaBkZGdq1a5d//fHjx3XllVfKcULfjBaOcOou1HP19WDedddddR7L9Dpcf/31SkpKCniO5eXl6tu3b72Cru9mtFNOOSXkzBzVe+7T0tJCBknJfDNaly5ddPDgQf/6I0eO6Iwzzgh5M1p9gq5UdTNaYmKiPvroo4D1o0ePluM4AdOahRt0fWOFQwX3cIJuuN8XocyfP1+OE3zD2NKlS+U4TsRBV5J++MMfhmzb7c1o0Xh+QG0IuogJ4QTdAwcO6IwzzlBCQoJGjBihRx99VAsXLtR9992n3r17B4S/hx56SI7j6JJLLtGiRYs0a9YsnX766Tr77LPrDLpSVe/fCSecoJNPPjlg2rJQrrnmGp199tmaPHmylixZonnz5ql///5ynMAbscIJur7xreecc47mz5+vX//61xowYID//EMF3ZrTi/lmEqg5Tc+OHTt00kknqWnTprr11lu1YMECzZs3Tz/96U/VpUsXV2/o69atU7NmzZSUlKSRI0dq0aJFmjt3rq688kolJCRo0KBB/n/djDktKipSs2bN1KpVK40bN05LlizR7NmzddtttykrKyto1oVIgq703+nF2rdvr2nTpmnu3Ln+EGqaXiwc4dRd69atNWTIED344INavny5ZsyYoS5duqhp06YBc0ebmF6Ht956S47jqGfPnpozZ45mz56tPn36+KewijToStLChQuVkJCgTp066f7779eyZcs0bdo09evXL+CmvcGDB6t58+aaOXOmnn76aT3zzDP+x0KFqcWLF8txHPXo0UMPPfSQHn74YZ1xxhlynNDTi9U36H744Ydq0aKF//tlwYIF+sEPfuD/y0j1Hvlwg+63336r9PR0de3aVYsWLdIzzzzjD4PhBF0pvO+LULZu3arU1FR16NBBM2bM0KJFi3TTTTepZcuW6tq1a72C7ueff67MzEz/9GILFy7UD3/4Q//0YtXH8Jvaru/zA2pD0EVMCCfoSlXT8Dz44IPq3bu3mjVrprS0NPXs2VMjR44M6F08duyYZsyY4f9giZNOOknjx49XSUmJq6ArVfWutW7dWieddJK2bt1qPKcXX3xRV111lTp27Oj/EIv+/fsHTXYfTtCVqnpdTj31VKWkpKhdu3YaNWqU9u3bZwy6+fn5evrpp/0fGNGxY0dNmjQp5LRfe/bs0bhx49S9e3elpKQoMzNTvXv31j333ON6XNynn36qm266Se3bt1fTpk39wc031nL69OlyHEfXXHONq7lN//rXv+rGG29Uhw4dlJSUpLZt2+r888/Xgw8+GHBzYn2CrlQ1TOHSSy9VRkaGUlJS1Lt3b82dO9f4gRHhCKfuHnroIeXm5qpNmzZKSkpSx44dNXTo0Dpv3vOp7XV44okn1KNHDyUlJalz586aNWuWXn/99XoHXUlau3atBg8e7H/9unTpopEjRwZ8kMnnn3+uSy65ROnp6XIcdx8Y8fLLL6t///5KTU1V8+bNdc4554QcJhGNoCtV1duwYcPUsmVLJSUlqXv37po2bVrQL2bhtitV/ULVr18/paSkBPRuhht0fefp5vvC5P/9v/+nCy+8UGlpacrMzNSVV16pv/71ryFfx3CCriR9/PHHuuyyy5Samur/wIjt27erZcuWuuKKK1y1Xd/nB5gQdIE4EckbMQDYsGfPHjmOozvuuKOhTwXfcQRdIE4QdAE0hFBT7/nG6L744osNcEbAfxF0gThB0AXQELp3767bb79dCxYs0COPPOK/L2DAgAGuhisBNhF0gThB0AXQEMaPH6+ePXsqLS1NycnJ6tatmyZOnBjyY4cBrxF0AQAAEJcIugAAAIhLBF0AAADEpbgNuv/3f/+n22+/XX369FGTJk1CztsXytGjRzVu3DhlZ2crNTVVgwcP1meffWb3ZAEAABB1cRt0X3rpJZ144okaMWKEevTo4Tro3nHHHcrMzNTy5ctVVFSk3NxcdezYMeRHXdbm6NGjKi4uVmlpqXbt2sXCwsLCwsLCYmUpLS1VcXFxyA8G+q6L26Bb/aMbr776aldBd+fOnUpMTNTSpUv96/bt26cWLVpo1qxZYR2/uLjY/0lALCwsLCwsLCy2l+Li4rCyyndB3Abd6twG3eXLlyshIUFlZWUB64cOHeq6R9intLTUX3QN/ZseCwsLCwsLS/wuvs610tLSsLLKdwFBt5rx48erY8eOQesnT56s7OzssI65a9cuOY6jXbt2hbUfAABAOMgcZgTdakaOHKlevXoFrS8oKFBSUlKt+x48eDDkb1cUHQAAsImga0bQraY+QTc/Pz/keBmKDgAA2ETQNSPoVlOfoQv06AIAgIZA0DUj6Fbjuxmt5lRiw4YNC/tmNIoOAAB4gcxhRtCtxje92OOPP+5ft3//fqWlpYU9vRhFBwBojCorK7V7927t2LFD27dvZ2ngZceOHdq9e7cqKyuN14zMYRa3Qffw4cN6/vnn9fzzz+ucc87Raaed5v969+7dkqSBAwdq4MCBAfvdcccdysrK0ooVK7R27Vrl5eVF9IERFB0AoLGprKzUzp07VVJSoq1bt2rbtm0NHvS+y8u2bdu0detWlZSUaOfOncawS+Ywi9ugu23bNuOEyuvXr5ck5eXlBfX0lpeXa+zYsWrbtq2aN2+uwYMHa8uWLWEfn6IDADQ2u3fvVklJifbu3dvQp4Jq9u7dq5KSEn9HXU1kDrO4DboNjaIDADQ2O3bs0NatWxv6NBDC1q1btWPHjpCPkTnMCLqWUHQAgMbG9+dyxB7fMJJQyBxmBF1LKDoAQGPjGxuK2FPbtSFzmBF0LaHoAACNDUE3dhF0I0PQtYSiAxBTKsqlzc9Jq66VFg+o+nfzc1Xrgf+Ip6Br+sTS8847T7m5uRowYEDQPj169FCTJk2CZlq67777lJqaqoqKCklSTk6O7r333pDHzczMVH5+ftB5dO7cOeT2p59+uhzHMbbnQ9CNDEHXEooOQMwoK5Xm9pPyM6RpWYH/zu1X9Tig+Au6aWlp2rhxY8DyySefaOLEiQHBVZL27Nkjx3GUmpqqoqKigLYuvPBCXXzxxf6vww26KSkpSkpK0saNGwO2LSkpUUJCglq0aEHQtYSgawlFByAmVJRXhVlfsK25TMuS5p1Jzy4kRTfollcc00ubdumWFe9pyLwNumXFe3pp0y6VVxyLSvt1yc/PV2ZmZsjHXnnlFTmOo/fff9+/7ve//73at2+va665RlOnTvWvP3r0qJo1a6b777/fvy7coJuZmakrr7xS99xzT8C2U6dO1YUXXlhrez4E3cgQdC2h6ADEhM3PhQ64NZePn2/oM0UMiFbQ3bn/sC4qWK+cCWvUZeKagH8vKlivnfsPR+Fsa1db0N23b58SEhL06KOP+tfdd999GjZsmGbNmhXwYVLvvPOOHMfRn/70J/+6SILuypUr1a5dOx0/ftz/WLdu3bRgwQKCrkUEXUsoOgAxYdW15t7c6r26q0Y09JkiBkQj6JZXHNNFBev9wbbm0mXiGl1csN56z64vYFZUVAQsvk8XO/XUUzVixH/rvn///nr44Yf15z//WS1atNCxY1Xn9/DDDweN283JydE999wT1HZFRYUx6B46dEjNmzfXa6+9JkkqLi5WYmKivv76a4KuRQRdSyg6ADFh8QB3PbpL8hr6TBEDohF0X9q0K2TArbm8tMnu+6PpZrTVq1dLkkaOHKmOHTtK+u/whHfeeUfffvutkpKS9OGHH0qShg0bpr59+wa0nZOTY/z0VcdxQgZdSbr22ms1cuRISdLYsWN1ySWX+Nsj6NpB0LWEogMQE+jRRRiiEXRvWfGesTe3eq/urYXv191YPfhuRisuLg5YysrKJEmFhYVyHEfbt2/Xxo0blZKSovLyqrHqZ599tubNmydJateune68886AtnNycnTDDTcEtV1cXKy0tDRj0H3hhRd0wgknqLy8XJ06ddLy5cv97RF07SDoWkLRAYgJjNFFGKIRdIfM2+CqR3fIvA1ROuvQahujK0mff/65HMfR008/rUceeUTnn3++/7F77rlH1113nb744gs5jqOnnnoqYN9IxuhK0pEjR5Senq6xY8cqOTnZH7oJuvYQdC2h6ADEBGZdQBjirUe3tqArSW3bttWYMWM0bNgw/fznP/evf+aZZ9SpUyf95je/8ff6Vhdp0JWk//3f/1WTJk109dVXu2rPh6AbGYKuJRQdgJhRVloVZkPNozvvTObRhV+8jdGtK+hec8016tevn9q3b68XXnjBv3779u1yHEff//73/eN4q6tP0H3rrbd09dVXa+3ata7aq35OBN3wEXQtoegAxJSK8qrhCatGVN14tmpE1df05KKaeJx1oTYFBQVKSEiQ4zj68ssvAx5r3769EhISdN111wXtV5+gGwpB1x6CriUUHQCgsYnmPLoXG+bRvTgG5tH18c2Rm5OTE/TYsGHD5DiO/6a06gi6jQdB1xKKDgDQ2Nj4ZLRbC9/XkHkbdGvh+55+Mlq8IehGhqBrCUUHAGhsohl0EV0E3cgQdC2h6AAAjQ1BN3YRdCND0LWEogMANDYE3dhF0I0MQdcSig4A0NgQdGMXQTcyBF1LKDoAQGND0I1dBN3IEHQtoegAAI0NQTd2EXQjQ9C1hKIDADQ2BN3YRdCNDEHXEooOANDYEHRjF0E3MgRdSyg6AEBjQ9CNXQTdyBB0LaHoAACNDUE3dhF0I0PQtYSiAwA0NgTd2EXQjQxB1xKKDgDQ2EQ16FaUS5ufk1ZdKy0eUPXv5ueq1sewb7/9Nqz1bh05cqRe+xN0I0PQtYSiAwA0NlELumWl0tx+Un6GNC0r8N+5/aoe98iGDRt00UUXKTU1VVlZWbr55pu1f/9+SdL69evlOI7++Mc/aujQoUpLS9N1110nSXIcR7Nnz9bYsWPVtm1btWvXzt/mY489pu7duys5OVknn3yyHn744YBj5ufnKzMzUxTcqkMAACAASURBVBs3btS5556r5ORkLVq0qF7Pg6AbGYKuJRQdAKCxiUrQrSivCrO+YFtzmZYlzTvTk57dt956S8nJyRo2bJjWrFmjp556Sjk5Obrssssk/TfoduzYUZMmTdLrr7+uDRs2SKoKuu3atdPw4cP1xz/+US+//LIkaenSpXIcRz/96U9VVFSkiRMnKiEhQdOnT/cfNz8/XykpKeratasWLlyoN954Q59++mm9ngtBNzIEXUsoOgBAYxOVoLv5udABt+by8fPROela9O/fXwMGDAhY995778lxHL399tv+oHvXXXcF7es4jvr06aPKykr/uuPHj6tDhw666aabAra98847lZaWpsOHD0uqCrqO4+iFF16I2nMh6EaGoGsJRQcAaGyiEnRXXWvuza3eq7tqRHRO2uDw4cNKTEzU/PnzVVFREbBkZGRozpw5/qD7pz/9KWh/x3E0YcKEgHWlpaVyHEe///3vA9a/+eabchxH77zzjqT/Bt36jsutjqAbGYKuJRQdAKCxiUrQXTzAXY/ukrxonLKR733YtIwdO9YfdP/yl78E7e84jn79618HrHv33XflOI7efffdgPVbtmyR4zhas2aNpKqgm5GREdXnQ9CNDEHXEooOANDYxFOP7jfffKOEhAQ98MADKi4uDlp27NjhD7qbNm0K2t9xHD366KMB63w9ur7xuj6henQzMzOj+nwIupEh6FpC0QEAGpt4G6N7wQUX6Ic//KHx8XCDrm+M7o9+9KOA9T/5yU+CxugSdGMDQdcSig4A0NjE26wLb7/9tlJSUnTDDTdo9erVeuONN/Tkk0/qhhtu0AcffBB20JX+O+vC2LFjtXbtWk2ePDnkrAsE3dhA0LWEogMANDZRnUd33pmh59Gdd6an8+i+//77uuKKK5SRkaHmzZvrlFNO0d13362vv/46oqArSQsWLFC3bt2UlJSkzp07q6CgIOBxgm7sIOhaQtEBABqbqH8y2sfPV43FXZJX9e/Hz8f8J6PFKoJu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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16809\n",
      "1107 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[7],\n",
    "           236,\n",
    "           273,\n",
    "           293)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.734044802496035e-08\n",
      "Cost function before refinement: 9.734044802496035e-08\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -3.72000000e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.3838347147363678e-10\n",
      "     jac: array([-5.98673543e-07,  2.23605236e-08, -1.03159942e-10,  2.50403027e-09,\n",
      "       -2.11195058e-10, -4.33428498e-07,  1.29258940e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19998053e-01,  3.17753501e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -3.72000028e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.3838347147363678e-10\n",
      "GonioParam(dist=0.7199980533232613, poni1=0.03177535006475983, poni2=0.004, rot1=0.0, offset=-37.20000282727144, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03177535006475983\n",
      " Number of peaks found and used for refinement\n",
      "454\n",
      "Cost function before refinement: 1.430842008138168e-07\n",
      "[ 7.19998053e-01  3.17753501e-02  4.00000000e-03  0.00000000e+00\n",
      " -3.72000028e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 3.226849481117596e-08\n",
      "     jac: array([-3.92485422e-09, -5.23527888e-11,  2.95969591e-06, -2.13336162e-06,\n",
      "       -3.04084313e-10,  6.79809093e-05,  4.29992953e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20809333e-01,  3.20129561e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -3.71999997e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 3.226849481117596e-08\n",
      "GonioParam(dist=0.7208093328161905, poni1=0.032012956081398876, poni2=0.004, rot1=0.0, offset=-37.19999969780997, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7199980533232613 --> 0.7208093328161905\n",
      "Cost function before refinement: 3.226849481117596e-08\n",
      "[ 7.20809333e-01  3.20129561e-02  4.00000000e-03  0.00000000e+00\n",
      " -3.71999997e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.8511910126699818e-10\n",
      "     jac: array([-5.57402301e-07,  1.08439870e-09, -4.85885850e-08,  3.72815016e-08,\n",
      "       -3.49842101e-10,  3.44041984e-09,  3.16520936e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 45\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20810790e-01,  3.20817605e-02,  3.95963325e-03,  2.90908690e-05,\n",
      "       -3.71999988e+01,  9.99058845e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 1.8511910126699818e-10\n",
      "GonioParam(dist=0.7208107904725951, poni1=0.03208176053609102, poni2=0.003959633245361843, rot1=2.9090869024017394e-05, offset=-37.1999988266373, scale=0.9990588449954669, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9990588449954669\n",
      "area_pixel=0.04876436188373834 area_sum=0.050127698054059644, Error= -0.027957633764832325\n",
      "area_pixel=0.057546003803974344 area_sum=0.05775905585124136, Error= -0.0037022909182844216\n",
      "area_pixel=0.049658293833474865 area_sum=0.05076774880169413, Error= -0.022341785884543948\n",
      "area_pixel=0.05525805937418937 area_sum=0.055742972286024095, Error= -0.00877542420646828\n",
      "area_pixel=0.05413146279471537 area_sum=0.05471036770655596, Error= -0.010694425791447673\n",
      "area_pixel=0.045739492253746405 area_sum=0.04707526635197212, Error= -0.029203955540549473\n",
      "area_pixel=0.04829832444085547 area_sum=0.04934824839708468, Error= -0.021738310146036582\n",
      "area_pixel=0.05408463708295397 area_sum=0.054632906002321624, Error= -0.010137239499762784\n",
      "area_pixel=0.04180745340076797 area_sum=0.04491414146774922, Error= -0.0743094308376167\n",
      "area_pixel=0.04855682651641935 area_sum=0.04971370658799365, Error= -0.023825281728061563\n",
      "area_pixel=0.05821213808510883 area_sum=0.058390691277043244, Error= -0.0030672845528085186\n",
      "area_pixel=0.053533284197945896 area_sum=0.0542348167245984, Error= -0.013104604680305085\n",
      "area_pixel=0.05444126075367084 area_sum=0.055046238495225275, Error= -0.011112485882569193\n",
      "area_pixel=0.05139325908436465 area_sum=0.052436334224842895, Error= -0.020295952408193915\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOydeZgV1bXoqxsVmaTVAEqegEaNihoUh2gCrYh6zc17ueA117zwbmIiyOA8cSPGdmwHTDRoCAQBEXECFWcmBZwQG8WRQYK00Cg2Q7cgAiKs90eHstvuOmcPq845Vfn9vq++L6xde621dxf6s3POrkAAAAAAAFJIkO8GAAAAAADiANEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAAAAAKQSRBcAAAAAUgmiCwAAAACpBNEFAAAAgFSC6AIAAABAKkF0AQAAACCVILoAAAAAkEoQXQAAAABIJYguAEA9giCQ3/zmN/luo2BhfwAgSSC6AFBwlJeXy9lnny2dO3eWIAjkhz/8YeS9paWlEgRBeO25556y3377ySmnnCLXXXedrFixwqq2r8jNnj1bysrKpKamxjlHPqmpqZGysjKZPXt2k+OILgAkCUQXAAqOIAhk3333lTPOOENat26dVXR33313mThxokycOFHGjRsnt99+u/Tp00f22GMPad68ufzlL38xrr1lyxb5+uuvnXsvKyuTIAisBbtQWLFihQRBIGVlZU2O++4PAEAuQXQBoOBYvnx5+L87d+6cVXSbN28emefwww+XIAjkscceU++zKQpJdL/44gvrOdlEFwAgSSC6AFDQ+IiuiMiiRYukuLhYDj74YKN6Tf1f87tir7/+uvTs2VNatmwp++yzj/z+97+XTZs2Neil/scodl31pbG2tlauvvpq+cEPfiB77LGHfO9735Nzzz23gdzvYuXKlfLLX/5S2rZtK61bt5bevXvLwoULpbS0VDp37tzg3s6dO0tpaaksXLhQ/u3f/k3atm0rJSUlIiKyceNGGTZsmJxwwgmy7777yh577CE/+MEPZOjQobJ58+Ywx/jx45vsv36tqI8ujB8/Xrp37y4tWrSQ1q1byymnnCLTp09vdN+uPhcvXiw/+9nPpHXr1rLXXnvJ2WefLZ999lmGnwwAgD2ILgAUNL6iKyLSs2dPCYJAlixZkrVelOj+6Ec/kn322UeuuOIKGTVqlJx77rkSBIH0798/vG/GjBnSp08fCYJA7rrrrvDjFO+++66I1EnuEUccIa1atZKLLrpIRo0aJddff7106NBBvve970llZWWYa8OGDdKpUydp1qyZDBw4UEaOHCnnn3++7L333nLwwQc3KboHHniglJSUyO9//3sZNWqUlJeXi4jI4sWLpUOHDjJ48GC5++675d5775VzzjlHioqK5IwzzghzLF++XO666y4JgkD69OkT9v/kk09m3J8//OEPEgSBdO/eXe688065+eab5cADD5SioiJ58MEHG/V58MEHS4cOHWTgwIHyt7/9TQYOHChFRUVy+umnZ/35AADYgOgCQEGjIboXXXSRBEEgTz/9dNZ6UaJbVFQkb7zxRoP4z372M9ltt90a/FY300cXLr74YmnevLm89dZbDeKVlZXSpk2bBnWHDh0qQRDI2LFjG9z7l7/8pdFvWUUk/OLemDFjGtXdtm1bk5+rvfbaayUIApk/f34Yy/bRhe/uz9KlS6WoqEhOPPFE2bp1axhft26d7LfffrL33nvLl19+2ajPRx99tEHewYMHG//HCACAKYhuDli2bJkMGDBAjjrqKCkuLpbS0tJY8zzyyCPSp08f2W+//SQIAhk/frxz7wD5RkN0hw0bJkEQNPrtYlNEie7JJ5/c6N4777xTgiCQ999/P4xFie7OnTtl3333lV69esnatWsbXaeffrrsv//+4f2HHXaYtGvXTr755psGebZt2yZ77bVXk6K7zz77NLr/u2zfvl02bNgga9eulTlz5kgQBDJixIhw3FZ077jjDgmCQB5//PFG9954440SBIE888wzDfrs2LFjo3unTJnS6F4AAF8Q3RwwdepUOeCAA+Scc86RQw891Fl0TfP853/+pxx77LHyu9/9DtGFxFMov9Ht169fo3t3faZ1zpw5YSxKdD///PMmP/9a/youLg7vb968uZx00klN9titW7cmRff444+PXNeoUaPk6KOPlmbNmjWqe8MNN4T32YruwIEDI38T++STT0oQBA1Ovejc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GdOcY7smjfw2NX379u1LO2baY9wx194067numWY9l/Vq7VMu1+FZv+rVV3GOCApKdI877jg59thjZe7cuVJdXS21tbWNrqSA6NrB8WKco6syHsfPy2VMc47tmjTy29T07du3L+2YaY9xx1x706znumea9VzWq7VPuVyHZ32+jBZNQYluq1atrI/xKlQQXTs4dYFTF1TGEV1E1zdm2iOii+giuomgoET3xBNPlAkTJuS7DRUQXTsQXURXZRzRRXR9Y6Y9IrqILqKbCApKdN9++23p1q2bvPTSS7Jjx458t+MFomsHoovoqowjuoiub8y0R0QX0UV0E0FBiW5JSYm0aNFCiouLZffdd5e999670ZUUEF07EF1EV2Uc0UV0fWOmPSK6iC6imwgKSnTLysrk+uuvz3glBUTXDkSXL6OpjCO6iK5vzLRHRBfRRXQTQZDvBtIKomsHoovoqowjuoiub8y0R0QX0UV0E0FBiu6WLVvkvffek+eee06++OKLfLfjBKJrB6KL6KqMI7qIrm/MtEdEF9FFdBNBwYnu7bffLvvss0/4goi33npLRETOPPNMKS8vz3N35iC6dtw3/X3p98sbpd8vb5TqNRvU8v7w8ilhXtm82T7B5s0i06fXXTbzHeYNe/AN815d+/LNl+0+kzy+OTKNx/HzchnTnGO7Jo38NjV9+/btSztm2mPcMdfeNOu57plmPZf1au1TLtfhWb9q0iScI4KCEt2bbrpJWrZsKXfccYdUVFRIUVFRKLr33nuvnHDCCXnu0BxE1w5eASwydAqvAAYAAHtwjmgKSnQPOOAA+fOf/ywiIt98800D0Z0xYwanLqQYRBfRBQAAN3COaApKdJs3by6zZs0SkcaiO336dGnZsmU+27OCh86Ov7+4RLpfOFG6XzhRqjd8qZb3oKueCvPK9u32CbZvF1mzpu6yme8w7w+PvmXeq2tfvvmy3WeSxzdHpvE4fl4uY5pzbNekkd+mpm/fvn1px0x7jDvm2ptmPdc906znsl6tfcrlOjzrVy1ciHNEUFCie+SRR8o111wjIo1F95prruGjCymGL6PxZTSVcb6MxpfRfGOmPfJlNL6MxpfREkFBie7YsWNl9913l+uvv14++OADKSoqkmeffVZGjRolLVu2lEceeSTfLRqD6NqB6CK6KuOILqLrGzPtEdFFdBHdRFBQoisi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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeXxU9b3/8TNkMxuJLAkQNKCA2gCKdamFMApxLVYTxb11g4KlWnsJgqANVYtitAoiexItKF7RWtcmWsVbFNRorW1JuBbLXitLElQgXJb374/8Zspk5ptkJnNOZiav5+NxHujJLGeST5JXzpw5YwkAAACIQVZHbwAAAABgB0IXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBQAAQEwidAEAABCTCF0AAADEJEIXAAAAMYnQBf6/VatWybIsVVRU2Ho/N954oyyLbz2Ex6FDh3TPPfeoX79+iouLU0ZGRkdvUpvk5ubK7XZ39GYEZcOGDRozZoy6d+8uy7L085//PKTbcepnTSSKxq87ohu/bRERPD/4j15SU1N1+umn6/HHH9ehQ4cc2wZCN3ivvPKKvve97yk9PV3HHnuszjnnHC1YsKCjN6tTWLJkiSzL0rhx4/T000/rv//7vzt6k7xKSkr00ksvBfxYNAbP8OHD1a1bNz3yyCNatmyZPv74Y+NlN27cqJKSEn366ad+HyN03R29GehEYuu3LaKW5wf/1VdfrWXLlum3v/2tHnroIZ188smyLEvjx493bBsI3eBUVlbK5XJpwIABevTRRzVnzhxdf/31Ouecczp60zqFa665RhkZGTpy5EhHb4ofy7J04403BvxYY2OjDhw44OwGtcP+/fvlcrl0xx13tOnyLf08IXTdHb0Z6ERi57ctoprnB/+DDz7os37Pnj3q06ePXC6X/v3vfzuyDYRucK699lpZlqXNmzf7rG9sbHR8W7799lsdPnw44MeOHDmib775Jiz3E0mRdt555yk3N7ejNyOglkI32mzevFmWZamkpKRNlyd0AyN04bTY+W2LqGYKXUm64oorZFmW1qxZ413X0NCgu+66SyeeeKISExPVo0cPXXPNNfriiy98rvv1119rxowZOuuss9S9e3clJibqxBNP1NSpU7V3796A29D8l88zzzyjxMREXXLJJfr2229bfByvvfaaRo4cqR49eigpKUl9+/bVZZddpnXr1nkv4wndhoYGTZw4UT179lRSUpK+//3v64MPPvC5vcOHD+uBBx5Qfn6+srOzlZCQoOOOO04TJ07Url27fC67ceNG7y/iFStWaOjQod5tmDFjRsAw+9e//qWJEyfquOOOU0JCgnr37q3x48frq6++avFxHu26666TZVlh+0Okurpal19+uffrNWjQID3wwAM6ePCgz+Xcbrdyc3P1z3/+U2PHjlW3bt1kWZbq6+t9vpbz589XXl6eEhMTfY6pfO+993ThhRcqIyNDxxxzjIYOHaq5c+f67Rn1fL127NihW2+9VdnZ2XK5XAGfkvYIZu4OHz6sxx57TEOGDFFaWprS0tI0cOBA3XTTTdq3b5/xPioqKvwO9zk6xExBEWjOPbf19ttvq7S0VCeccIISExM1cOBAPfXUUwHv/5133tEll1yibt26KSkpSf3799ctt9yinTt3BjwUybN4mLbv1VdfVX5+vtLS0pSSkqIzzzxTzz77rN/lPF//7du365prrlFmZqaSk5N1wQUX6H//93+Nn7fm/v73v+uKK67wmbdf/epXPn+oud3ugI9l48aNAW+zpKQk4OU9j/for0F5ebm+853vKDExUccff7xmz54d8Dbb+n1h8txzz+nSSy/Vcccdp8TERHXv3l2XXXaZPvvsM7/Ler42tbW1uuSSS5SWlqauXbvqiiuu0Jdffhnwc3jxxRcrNTVVGRkZKiws1MaNGwN+jU1f9/Y+PsCE0EVEMIXukSNHdOqpp8qyLH3++eeSmiL3O9/5jlJTU3X77bdr4cKFmjlzprKzs9WjRw9t2rTJe/3a2lplZ2frpz/9qR5//HHNmzdPY8eOlcvl0gUXXBBwG44OgNmzZ8vlcunWW29t9Qfuu+++qy5dumjo0KF65JFHtHTpUt1///0677zz9Lvf/c57OU84nX322RozZoyeeOIJzZw5U127dlX37t319ddfey+7f/9+ZWRk6JZbbtEjjzyiBQsW6JZbblFCQoIGDx7sE6+e0B02bJi6du2qu+++W0888YQuvPBC72EhR9u8ebP69Omjbt266a677tLixYs1depUpaena8CAAWpoaGjlq9Zk9erVcrlcuuiii/R///d/bbqOyWuvvabExESdcsop+vWvf62FCxfqxhtvVJcuXXTllVf6XNbtdqt79+7q27evxo4dqyeffFL333+/9u7d6/1annbaacrJydHMmTO1ePFi79fh9ddfV3x8vHr16qWSkhI9/vjjys/PD3iYjOfrddppp+n888/XnDlzVFpa6rcH+2jBzN19990ny7J06aWX6sknn9TChQs1bdo05eXlaefOncb7+OKLL7Rs2TKdfPLJ6tGjh5YtW6Zly5Z5wyWU0D377LM1dOhQzZ49W48//rhOOukkWZal9957z+c2Fi5cKJfLpZycHM2YMUOLFi3Svffeq1NPPVWffvqp/v3vf2vZsmWyLEv5+fnebVu2bJn3NgJt36JFi2RZlgYOHKhf//rXKi0t9X7///rXv/a5rNvtVo8ePXTiiSfq+uuv1/z58zVlyhQlJibq5JNPbtNx/Z988onS0tKUnp6uadOmad68ebr00ktlWZYuuugi77MDb775ph577DFZlqXCwkLvYzH94fvZZ59p+vTpsixLP/nJT7yXf/PNN32+Bmeffbb69eun+++/X0888YTOPvtsWZalZ555xuf2gvm+MBkxYoQuu+wy3X///VqyZImmTZumbt26KS0tzfuz1SM3N1cDBgxQdna2Jk6cqAULFmjixIlyuVw6//zzfS67YcMG7x8ZxcXFevLJJzV27Fjl5uaqR48ebQrdcDw+wITQRUTw/OC/9957tXPnTu3YsUOfffaZxo0b5/2F4HHHHXcoKSlJn3zyic9tbNq0Senp6T5PlR44cCBgfN1zzz2yLEsffvih3zZUVFTo8OHDuv3224N6qvIXv/iFLMtqdW+oJ5xuu+02n/XPP/+8LMvSwoULveuOHDkScK/e0qVLZVmWzwuPPKHbpUsXnxfJHDlyRFdffbV3j53HD3/4Q3Xv3t0v2KqrqxUXF9fmx7106VIlJiYqPj5el112WchP6e/fv1/Z2dn6/ve/7/c1+81vfiPLsrRq1SrvOs9ethkzZvjdludreeyxx/p9PQ4dOqTc3Fylp6dr69atPusvuugiWZal999/37ve8/W6/vrr2/xYgpm7YcOG6ZRTTmnzbTfn2bPZXCihe9ppp/l8/bZt26bE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KytLkyZNUlFRkf7rv/7Lu37FihXq27evfvvb33r3+h4t1NCVpB//+Mfq0qWLLrvssjbdngehGxpC1yYMHQAg2sTaMbqthe7ll1+uYcOGqXfv3nrhhRe86zdt2iTLsvSDH/zAexzv0doTuu+9954uu+wyVVVVten2jt4mQjd4hK5NGDoAQLSJxbMutKS0tFQul0uWZWn79u0+H+vdu7dcLpeuvvpqv+u1J3QDIXTtQ+jahKEDAESbcJ5H9zzDeXTPi4Dz6Hp4zpGbm5vr97GioiJZluV9UdrRCN3oQejahKEDAEQbO94Z7eaKjzRm7mrdXPGRo++MFmsI3dAQujZh6AAA0SacoYvwInRDQ+jahKEDAEQbQjdyEbqhIXRtwtABAKINoRu5CN3QELo2YegAANGG0I1chG5oCF2bMHQAgGhD6EYuQjc0hK5NGDoAQLQhdCMXoRsaQtcmDB0AINoQupGL0A0NoWsThg4AEG0I3chF6IaG0LUJQwcAiDaEbuQidEND6NqEoQMARBtCN3IRuqEhdG3C0AEAog2hG7kI3dAQujZh6AAA0SasoXuwUfrseWn5ldLCkU3/fvZ80/oItm/fvqDWt9X+/fvbdX1CNzSErk0YOgBAtAlb6NZvluYMk0q6SjMzff+dM6zp4w5ZvXq1zj33XKWkpCgzM1M33nij6urqJEmrVq2SZVl64403VFhYqLS0NF199dWSJMuy9PDDD2vy5MnKyspSr169vLf55JNPauDAgUpMTNQJJ5ygRx55xOc+S0pKlJGRobVr1+qss85SYmKiFixY0K7HQeiGhtC1CUMHAIg2YQndg41NMesJ2+bLzExp7umO7Nl97733lJiYqKKiIr322mt65plnlJubqwsvvFDSf0I3JydHd999t95++22tXr1aUlPo9urVS1dccYXeeOMNvfLKK5KkxYsXy7Is3XnnnaqsrNS0adPkcrl0//33e++3pKRESUlJOvHEEzV//ny98847WrduXbseC6EbGkLXJgwdACDahCV0P3s+cOA2X/66Mjwb3YIRI0Zo5MiRPus+/PBDWZal999/3xu6P/vZz/yua1mWhgwZoiNHjnjXHT58WH369NENN9zgc9nbbrtNaWlp2rt3r6Sm0LUsSy+88ELYHguhGxpC1yYMHQAg2oQldJdfad6be/Re3eVjw7PRBnv37lVcXJye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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16876\n",
      "1111 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[8],\n",
    "           264,\n",
    "           302,\n",
    "           322)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(goniometers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02 7.2310e-01 3.2054e-02 3.9849e-03 1.0948e-05 -8.2800e+01 9.9942e-01 1.7027e+01\n",
      "data_03 7.2068e-01 3.3678e-02 4.0580e-03 -4.4486e-05 -7.7200e+01 9.9897e-01 1.7027e+01\n",
      "data_04 7.2069e-01 3.4825e-02 4.0432e-03 -3.3769e-05 -7.1600e+01 9.9898e-01 1.7027e+01\n",
      "data_05 7.2048e-01 3.3410e-02 3.9779e-03 1.5910e-05 -6.5800e+01 9.9900e-01 1.7027e+01\n",
      "data_07 7.2065e-01 3.2237e-02 3.9757e-03 1.7542e-05 -6.0000e+01 9.9901e-01 1.7027e+01\n",
      "data_08 7.2053e-01 3.3395e-02 3.9730e-03 1.9484e-05 -5.4400e+01 9.9903e-01 1.7027e+01\n",
      "data_09 7.2061e-01 3.2247e-02 3.9689e-03 2.2376e-05 -4.8600e+01 9.9904e-01 1.7027e+01\n",
      "data_10 7.2071e-01 3.0863e-02 3.9652e-03 2.5070e-05 -4.2800e+01 9.9905e-01 1.7027e+01\n",
      "data_11 7.2081e-01 3.2082e-02 3.9596e-03 2.9091e-05 -3.7200e+01 9.9906e-01 1.7027e+01\n",
      "data_12 7.2081e-01 3.2082e-02 3.9596e-03 2.9091e-05 -3.7200e+01 9.9906e-01 1.7027e+01\n"
     ]
    }
   ],
   "source": [
    "# print all the parameters to be able to compare them visually\n",
    "goniometers[\"data_12\"] = goniometers[\"data_11\"]\n",
    "for name in ds_names:\n",
    "    print(name, *[\"%8.4e\"%i for i in goniometers[name].param])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Use the negative part of the spectum ...\n",
    "\n",
    "Until now, we used only the data where 2th >0 \n",
    "For the last modules, this thows away half of the data.\n",
    "\n",
    "We setup here a way to assign the peaks for the negative part of the spectrum."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "def complete_gonio(module_id=None, name=None):\n",
    "    \"Scan missing frames for un-indexed peaks\"\n",
    "    if name is None:\n",
    "        name = ds_names[module_id]\n",
    "    gonioref = goniometers[name]\n",
    "    ds = data[name]\n",
    "    print(\"Number of peaks previously found:\",\n",
    "           sum([len(sg.geometry_refinement.data) for sg in gonioref.single_geometries.values()]))\n",
    "\n",
    "    tths = LaB6.get_2th()\n",
    "\n",
    "    for i in range(ds.shape[0]):\n",
    "        frame_name = \"%s_%04i\"%(name, i)\n",
    "        if frame_name in gonioref.single_geometries:\n",
    "                continue\n",
    "        peak = peak_picking(name, i)\n",
    "        ai=gonioref.get_ai(get_position(i))\n",
    "        tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "        tth_low = tth[20]\n",
    "        tth_hi = tth[-20]\n",
    "        ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "        valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "        cnt = valid_peaks.sum()\n",
    "        if (len(peak) ==  cnt) and cnt>0:    \n",
    "            cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "            #revert the order of assignment if needed !!\n",
    "            if tth_hi < tth_low:\n",
    "                peak = peak[-1::-1]\n",
    "            for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "                cp.append([p], ring=r)\n",
    "            img = ds[i].reshape((-1,1))\n",
    "            sg = gonioref.new_geometry(frame_name, \n",
    "                                        image=img, \n",
    "                                        metadata=i, \n",
    "                                        control_points=cp, \n",
    "                                        calibrant=LaB6)\n",
    "            sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "            #print(frame_name, len(sg.geometry_refinement.data))\n",
    "\n",
    "    print(\"Number of peaks found after re-scan:\",\n",
    "            sum([len(sg.geometry_refinement.data) for sg in gonioref.single_geometries.values()]))\n",
    "    return gonioref"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 454\n",
      "Number of peaks found after re-scan: 1006\n",
      "Cost function before refinement: 4.70706125439368e-09\n",
      "[ 7.20810790e-01  3.20817605e-02  3.95963325e-03  2.90908690e-05\n",
      " -3.71999988e+01  9.99058845e-01  1.70270825e+01]\n",
      "     fun: 9.802737682604375e-10\n",
      "     jac: array([-8.29338917e-07,  1.79786978e-08, -2.22576465e-07,  1.63791395e-07,\n",
      "       -1.37361011e-10, -3.00380388e-08,  3.83178298e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20813440e-01,  3.20849228e-02,  3.96153953e-03,  2.77060750e-05,\n",
      "       -3.71999988e+01,  9.98991349e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.802737682604375e-10\n",
      "GonioParam(dist=0.7208134400755615, poni1=0.03208492277691861, poni2=0.003961539527372513, rot1=2.770607503862905e-05, offset=-37.19999878574453, scale=0.9989913487191389, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9990588449954669 --> 0.9989913487191389\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20813440e-01,  3.20849228e-02,  3.96153953e-03,  2.77060750e-05,\n",
       "       -3.71999988e+01,  9.98991349e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio8 = complete_gonio(module_id=8)\n",
    "gonio8.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 543\n",
      "Number of peaks found after re-scan: 1004\n"
     ]
    }
   ],
   "source": [
    "gonio7 = complete_gonio(module_id=7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 2.049750654664114e-09\n",
      "[ 7.20707163e-01  3.08633971e-02  3.96520588e-03  2.50699030e-05\n",
      " -4.27999030e+01  9.99050597e-01  1.70270825e+01]\n",
      "     fun: 6.982178014396509e-10\n",
      "     jac: array([-6.61610503e-07,  1.82061135e-08, -2.31096076e-07,  1.69227578e-07,\n",
      "       -1.05927128e-10, -2.98934004e-08,  2.67495021e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20709219e-01,  3.08662496e-02,  3.96669042e-03,  2.39916666e-05,\n",
      "       -4.27999029e+01,  9.99006679e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.982178014396509e-10\n",
      "GonioParam(dist=0.7207092190734912, poni1=0.030866249621701404, poni2=0.0039666904208374675, rot1=2.3991666571782472e-05, offset=-42.799902936952186, scale=0.9990066787571606, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.99905059684665 --> 0.9990066787571606\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20709219e-01,  3.08662496e-02,  3.96669042e-03,  2.39916666e-05,\n",
       "       -4.27999029e+01,  9.99006679e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio7.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 626\n",
      "Number of peaks found after re-scan: 990\n",
      "Cost function before refinement: 9.054048566564434e-10\n",
      "[ 7.20609298e-01  3.22472627e-02  3.96893520e-03  2.23757106e-05\n",
      " -4.85998857e+01  9.99040899e-01  1.70270825e+01]\n",
      "     fun: 6.093728642246349e-10\n",
      "     jac: array([-8.02155920e-07,  3.63691515e-08, -2.33166253e-07,  1.71261021e-07,\n",
      "        1.53140861e-10, -6.90587253e-08,  3.30203031e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20611756e-01,  3.22490408e-02,  3.97006720e-03,  2.15500507e-05,\n",
      "       -4.85998856e+01,  9.99018033e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.093728642246349e-10\n",
      "GonioParam(dist=0.7206117564391414, poni1=0.03224904075932756, poni2=0.003970067202282311, rot1=2.1550050733043843e-05, offset=-48.599885636781195, scale=0.9990180333619139, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9990408988314912 --> 0.9990180333619139\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20611756e-01,  3.22490408e-02,  3.97006720e-03,  2.15500507e-05,\n",
       "       -4.85998856e+01,  9.99018033e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio6 = complete_gonio(module_id=6)\n",
    "gonio6.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 754\n",
      "Number of peaks found after re-scan: 1038\n",
      "Cost function before refinement: 5.322312447273672e-10\n",
      "[ 7.20528271e-01  3.33948197e-02  3.97295090e-03  1.94838596e-05\n",
      " -5.43998157e+01  9.99025942e-01  1.70270825e+01]\n",
      "     fun: 5.247814297615004e-10\n",
      "     jac: array([-6.54781369e-07,  1.29256630e-07, -1.62656541e-07,  1.19840950e-07,\n",
      "        1.28911966e-09, -2.77499652e-07,  2.46511989e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20530687e-01,  3.33953448e-02,  3.97363667e-03,  1.89799990e-05,\n",
      "       -5.43998157e+01,  9.99021890e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 5.247814297615004e-10\n",
      "GonioParam(dist=0.7205306865337416, poni1=0.033395344810677706, poni2=0.0039736366657854355, rot1=1.8979998986411344e-05, offset=-54.39981565735447, scale=0.999021890228638, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.999025941539747 --> 0.999021890228638\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20530687e-01,  3.33953448e-02,  3.97363667e-03,  1.89799990e-05,\n",
       "       -5.43998157e+01,  9.99021890e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio5 = complete_gonio(module_id=5)\n",
    "gonio5.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 864\n",
      "Number of peaks found after re-scan: 1081\n",
      "Cost function before refinement: 4.522981580650044e-10\n",
      "[ 7.20645314e-01  3.22371238e-02  3.97565133e-03  1.75424155e-05\n",
      " -6.00000524e+01  9.99011856e-01  1.70270825e+01]\n",
      "     fun: 4.329968320302878e-10\n",
      "     jac: array([-3.23619143e-07, -1.33810126e-08, -8.07893403e-08,  5.95277891e-08,\n",
      "       -4.92710775e-10,  3.16598865e-08,  5.83323419e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20646423e-01,  3.22359951e-02,  3.97581932e-03,  1.74168753e-05,\n",
      "       -6.00000525e+01,  9.99019702e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 4.329968320302878e-10\n",
      "GonioParam(dist=0.7206464234341815, poni1=0.032235995133433754, poni2=0.0039758193176266145, rot1=1.7416875286579755e-05, offset=-60.00005245067518, scale=0.9990197021796172, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.999011855791219 --> 0.9990197021796172\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20646423e-01,  3.22359951e-02,  3.97581932e-03,  1.74168753e-05,\n",
       "       -6.00000525e+01,  9.99019702e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio4 = complete_gonio(module_id=4)\n",
    "gonio4.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 978\n",
      "Number of peaks found after re-scan: 1156\n",
      "Cost function before refinement: 7.053238687700532e-10\n",
      "[ 7.20482931e-01  3.34099564e-02  3.97791142e-03  1.59099880e-05\n",
      " -6.57999266e+01  9.98999110e-01  1.70270825e+01]\n",
      "     fun: 6.316819601296489e-10\n",
      "     jac: array([-4.99814708e-07, -1.63155748e-08,  9.67096626e-09, -4.95315009e-09,\n",
      "       -5.75364555e-10,  3.90058487e-08,  1.04654441e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20484799e-01,  3.34074959e-02,  3.97770054e-03,  1.60543912e-05,\n",
      "       -6.57999266e+01,  9.99015617e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.316819601296489e-10\n",
      "GonioParam(dist=0.7204847991260711, poni1=0.03340749593129299, poni2=0.003977700542249465, rot1=1.605439120863723e-05, offset=-65.79992658922357, scale=0.9990156171464057, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9989991098968561 --> 0.9990156171464057\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20484799e-01,  3.34074959e-02,  3.97770054e-03,  1.60543912e-05,\n",
       "       -6.57999266e+01,  9.99015617e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio3 = complete_gonio(module_id=3)\n",
    "gonio3.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 1093\n",
      "Number of peaks found after re-scan: 1229\n",
      "Cost function before refinement: 8.306533586355894e-10\n",
      "[ 7.20686437e-01  3.48247495e-02  4.04316666e-03 -3.37686772e-05\n",
      " -7.15999088e+01  9.98982863e-01  1.70270825e+01]\n",
      "     fun: 7.771891010372871e-10\n",
      "     jac: array([ 9.15257278e-08, -1.05189468e-09,  5.61627546e-08, -4.08345480e-08,\n",
      "       -4.25668376e-10,  2.85157377e-09,  1.17395008e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20686041e-01,  3.48226304e-02,  4.04289725e-03, -3.35729680e-05,\n",
      "       -7.15999088e+01,  9.98998235e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 7.771891010372871e-10\n",
      "GonioParam(dist=0.7206860412873665, poni1=0.0348226304357366, poni2=0.004042897251336869, rot1=-3.357296798617952e-05, offset=-71.59990883821092, scale=0.9989982349992665, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9989828627069963 --> 0.9989982349992665\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20686041e-01,  3.48226304e-02,  4.04289725e-03, -3.35729680e-05,\n",
       "       -7.15999088e+01,  9.98998235e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio2 = complete_gonio(module_id=2)\n",
    "gonio2.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 1183\n",
      "Number of peaks found after re-scan: 1285\n",
      "Cost function before refinement: 9.822658405373417e-10\n",
      "[ 7.20682081e-01  3.36782425e-02  4.05801126e-03 -4.44860018e-05\n",
      " -7.71999788e+01  9.98967223e-01  1.70270825e+01]\n",
      "     fun: 9.683803822381625e-10\n",
      "     jac: array([ 1.05204414e-07, -1.40910812e-09, -2.64455137e-09,  1.49411766e-09,\n",
      "       -3.43193224e-10,  4.36284460e-09,  1.50605559e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20681597e-01,  3.36766788e-02,  4.05808287e-03, -4.45357208e-05,\n",
      "       -7.71999788e+01,  9.98975895e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.683803822381625e-10\n",
      "GonioParam(dist=0.7206815966774245, poni1=0.03367667883450645, poni2=0.004058082874451283, rot1=-4.4535720801764846e-05, offset=-77.19997881123506, scale=0.9989758952763078, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9989672227193093 --> 0.9989758952763078\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20681597e-01,  3.36766788e-02,  4.05808287e-03, -4.45357208e-05,\n",
       "       -7.71999788e+01,  9.98975895e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio1 = complete_gonio(module_id=1)\n",
    "gonio1.refine2()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 1203\n",
      "Number of peaks found after re-scan: 1255\n",
      "Cost function before refinement: 2.580092692155849e-06\n",
      "[ 7.23096248e-01  3.20537111e-02  3.98485468e-03  1.09479202e-05\n",
      " -8.27999440e+01  9.99415047e-01  1.70270825e+01]\n",
      "     fun: 2.5799877551962334e-06\n",
      "     jac: array([-1.43881863e-07,  3.61314392e-08,  5.52834337e-07, -3.99174581e-07,\n",
      "        1.01925934e-09, -1.14581923e-07, -1.57262758e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.23096999e-01,  3.20658547e-02,  3.98130190e-03,  1.35139061e-05,\n",
      "       -8.27999438e+01,  9.99396229e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.5799877551962334e-06\n",
      "GonioParam(dist=0.7230969991414224, poni1=0.03206585469442816, poni2=0.003981301898312368, rot1=1.351390607705048e-05, offset=-82.79994383949249, scale=0.9993962290572798, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9994150470263444 --> 0.9993962290572798\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.23096999e-01,  3.20658547e-02,  3.98130190e-03,  1.35139061e-05,\n",
       "       -8.27999438e+01,  9.99396229e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio0 = complete_gonio(module_id=0)\n",
    "gonio0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 0\n",
      "Number of peaks found after re-scan: 1250\n",
      "Cost function before refinement: 9.454138761636617e-07\n",
      "[ 7.23096999e-01  3.20658547e-02  3.98130190e-03  1.35139061e-05\n",
      " -8.27999438e+01  9.99396229e-01  1.70270825e+01]\n",
      "     fun: 9.315197221462237e-07\n",
      "     jac: array([-1.20646249e-08, -1.14537357e-08,  1.03723337e-07, -7.48339701e-08,\n",
      "        1.34221523e-10, -9.52891099e-09, -5.30292098e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 82\n",
      "     nit: 9\n",
      "    njev: 9\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.21973759e-01,  3.22003255e-02,  3.94381184e-03,  4.51413618e-05,\n",
      "       -8.27999423e+01,  9.99140776e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.315197221462237e-07\n",
      "GonioParam(dist=0.7219737589812981, poni1=0.03220032545666352, poni2=0.003943811844450548, rot1=4.5141361782464955e-05, offset=-82.79994226310926, scale=0.9991407764529461, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7230969991414224 --> 0.7219737589812981\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.21973759e-01,  3.22003255e-02,  3.94381184e-03,  4.51413618e-05,\n",
       "       -8.27999423e+01,  9.99140776e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Rescan module0 which looks much different:\n",
    "gonio0.single_geometries.clear()\n",
    "gonio0 = complete_gonio(module_id=0)\n",
    "gonio0.refine2()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Discard wronly assigned peaks\n",
    "\n",
    "We have seen previously that some modules have a much higher residual error, while all have almost the same number of peaks recorded and fitted.\n",
    "\n",
    "Some frames are contributing much more than all the other in those badly-fitted data. \n",
    "Let's spot them and re-assign them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02_0455 6.313051349592421e-07\n",
      "data_02_0464 6.523630272471416e-07\n",
      "data_02_0465 6.891655641669719e-07\n",
      "data_02_0457 7.370430556294668e-07\n",
      "data_02_0456 7.376242032882277e-07\n",
      "data_02_0460 7.45857621330519e-07\n",
      "data_02_0466 7.67143438989774e-07\n",
      "data_02_0461 7.935716411266278e-07\n",
      "data_02_0462 7.971563845471846e-07\n",
      "data_02_0480 0.001130766003993148\n"
     ]
    }
   ],
   "source": [
    "#search for mis-assigned peaks in module #0\n",
    "labels = []\n",
    "errors = []\n",
    "\n",
    "for lbl,sg in gonio0.single_geometries.items():\n",
    "    labels.append(lbl)\n",
    "    errors.append(sg.geometry_refinement.chi2())\n",
    "\n",
    "s = numpy.argsort(errors)\n",
    "for i in s[-10:]:\n",
    "    print(labels[i], errors[i])\n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ControlPoints instance containing 4 group of point:\n",
      "LaB6 Calibrant with 109 reflections at wavelength 7.281587849134994e-11\n",
      "Containing 4 groups of points:\n",
      "#psg ring 52: 1 points\n",
      "#psh ring 53: 1 points\n",
      "#psi ring 54: 1 points\n",
      "#psj ring 55: 1 points\n",
      "Cost function before refinement: 8.041228082228945e-09\n",
      "[ 7.21973759e-01  3.22003255e-02  3.94381184e-03  4.51413618e-05\n",
      " -8.27999423e+01  9.99140776e-01  1.70270825e+01]\n",
      "     fun: 9.214430277838577e-10\n",
      "     jac: array([-3.08678332e-08, -3.82866689e-08, -1.82877549e-07,  1.31905635e-07,\n",
      "       -8.44315805e-10, -1.61540448e-08,  1.38174042e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 82\n",
      "     nit: 9\n",
      "    njev: 9\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20595797e-01,  3.22844186e-02,  4.04252687e-03, -2.05352660e-05,\n",
      "       -8.27999410e+01,  9.98975164e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.214430277838577e-10\n",
      "GonioParam(dist=0.720595797367119, poni1=0.03228441857336863, poni2=0.0040425268658778706, rot1=-2.0535266006967913e-05, offset=-82.79994103917592, scale=0.9989751641349021, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7219737589812981 --> 0.720595797367119\n",
      "Number of peaks previously found: 1246\n",
      "Number of peaks found after re-scan: 1263\n",
      "Cost function before refinement: 9.385263673786183e-10\n",
      "[ 7.20595797e-01  3.22844186e-02  4.04252687e-03 -2.05352660e-05\n",
      " -8.27999410e+01  9.98975164e-01  1.70270825e+01]\n",
      "     fun: 9.382286239666452e-10\n",
      "     jac: array([-2.66626459e-08, -1.46606972e-06, -1.81711541e-07,  1.31048747e-07,\n",
      "       -1.88137349e-08, -4.38931502e-08,  2.40047863e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 11\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20595804e-01,  3.22848040e-02,  4.04257464e-03, -2.05697223e-05,\n",
      "       -8.27999410e+01,  9.98975176e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.382286239666452e-10\n",
      "GonioParam(dist=0.7205958043774563, poni1=0.032284804043109315, poni2=0.00404257464280098, rot1=-2.0569722299120257e-05, offset=-82.79994103422928, scale=0.9989751756756091, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03228441857336863 --> 0.032284804043109315\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20595804e-01,  3.22848040e-02,  4.04257464e-03, -2.05697223e-05,\n",
       "       -8.27999410e+01,  9.98975176e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#remove wrongly assigned peak for frame 480\n",
    "print(gonio0.single_geometries.pop(\"data_02_0480\").control_points)\n",
    "gonio0.refine2()\n",
    "gonio0 = complete_gonio(module_id=0)\n",
    "gonio0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_11_0495 1.4653542984471542e-06 1.4653542984471542e-06 1.0\n",
      "data_11_0496 1.4360982661347142e-06 1.4653542984471542e-06 1.0203718874970744\n",
      "data_11_0499 1.4166548534532985e-06 1.4360982661347142e-06 1.0137248763409235\n",
      "data_11_0497 1.4084572221561037e-06 1.4166548534532985e-06 1.0058202912862668\n",
      "data_11_0498 1.3833016059917487e-06 1.4084572221561037e-06 1.0181851998547489\n",
      "data_11_0500 1.3709107012975464e-06 1.3833016059917487e-06 1.0090384477139718\n",
      "data_11_0492 1.3295890859461896e-06 1.3709107012975464e-06 1.0310784856675854\n",
      "data_11_0489 1.3287700089647162e-06 1.3295890859461896e-06 1.0006164174205825\n",
      "data_11_0491 1.3216144771699174e-06 1.3287700089647162e-06 1.0054142353298985\n",
      "data_11_0490 1.301822888645974e-06 1.3216144771699174e-06 1.015202980909737\n",
      "data_11_0494 1.2865582016523121e-06 1.301822888645974e-06 1.0118647465571768\n",
      "data_11_0493 1.2861450147452866e-06 1.2865582016523121e-06 1.0003212599685793\n",
      "data_11_0483 1.2244483499124188e-06 1.2861450147452866e-06 1.0503873151017604\n",
      "data_11_0486 1.207372827265345e-06 1.2244483499124188e-06 1.0141427090799693\n",
      "data_11_0485 1.201809830402108e-06 1.207372827265345e-06 1.0046288495255324\n",
      "data_11_0484 1.1994812838848202e-06 1.201809830402108e-06 1.0019412945817263\n",
      "data_11_0487 1.1764652443222126e-06 1.1994812838848202e-06 1.019563722493024\n",
      "data_11_0477 1.1389594650443204e-06 1.1764652443222126e-06 1.0329298631153943\n",
      "data_11_0478 1.1156745972945301e-06 1.1389594650443204e-06 1.0208706622936967\n",
      "data_11_0481 1.1104824081112956e-06 1.1156745972945301e-06 1.0046756158812686\n",
      "data_11_0479 1.1057757403752895e-06 1.1104824081112956e-06 1.0042564396777314\n",
      "data_11_0480 1.1002412230846842e-06 1.1057757403752895e-06 1.0050302762471384\n",
      "data_11_0482 8.673291356185134e-07 1.1002412230846842e-06 1.26853944817624\n",
      "Cost function before refinement: 1.059476333549205e-09\n",
      "[ 7.20813440e-01  3.20849228e-02  3.96153953e-03  2.77060750e-05\n",
      " -3.71999988e+01  9.98991349e-01  1.70270825e+01]\n",
      "     fun: 1.0589449037804424e-09\n",
      "     jac: array([-8.45058784e-07, -1.25301789e-06, -2.51805109e-07,  1.84923760e-07,\n",
      "       -1.61392479e-08,  9.17399903e-08,  8.34009091e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 11\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20813810e-01,  3.20854710e-02,  3.96164970e-03,  2.76251683e-05,\n",
      "       -3.71999988e+01,  9.98991309e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 1.0589449037804424e-09\n",
      "GonioParam(dist=0.7208138098008553, poni1=0.032085470990150605, poni2=0.00396164969570614, rot1=2.762516825116013e-05, offset=-37.19999877868338, scale=0.9989913085815821, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03208492277691861 --> 0.032085470990150605\n",
      "Number of peaks previously found: 918\n",
      "Number of peaks found after re-scan: 1006\n",
      "Cost function before refinement: 9.804599649789273e-10\n",
      "[ 7.20813810e-01  3.20854710e-02  3.96164970e-03  2.76251683e-05\n",
      " -3.71999988e+01  9.98991309e-01  1.70270825e+01]\n",
      "     fun: 9.798014434813442e-10\n",
      "     jac: array([-8.28830624e-07,  2.04374424e-06, -2.22646167e-07,  1.63839575e-07,\n",
      "        2.53636863e-08,  1.00410517e-06,  4.36574660e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 11\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20813997e-01,  3.20850099e-02,  3.96169993e-03,  2.75882029e-05,\n",
      "       -3.71999988e+01,  9.98991082e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.798014434813442e-10\n",
      "GonioParam(dist=0.7208139968009581, poni1=0.032085009882209824, poni2=0.0039616999289563675, rot1=2.7588202897190342e-05, offset=-37.19999878440591, scale=0.9989910820361755, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032085470990150605 --> 0.032085009882209824\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20813997e-01,  3.20850099e-02,  3.96169993e-03,  2.75882029e-05,\n",
       "       -3.71999988e+01,  9.98991082e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def search_outliers(module_id=None, name=None, threshold=1.2):\n",
    "    \"Search for wrongly assigned peaks\"\n",
    "    if name is None:\n",
    "        name = ds_names[module_id]\n",
    "    gonioref = goniometers[name]\n",
    "    labels = []\n",
    "    errors = []\n",
    "\n",
    "    for lbl,sg in gonioref.single_geometries.items():\n",
    "        labels.append(lbl)\n",
    "        errors.append(sg.geometry_refinement.chi2())\n",
    "    s = numpy.argsort(errors)\n",
    "    last = errors[s[-1]]\n",
    "    to_remove = []\n",
    "    for i in s[-1::-1]:\n",
    "        lbl = labels[i]\n",
    "        current = errors[i]\n",
    "        print(lbl , current, last, last/current)\n",
    "        if threshold*current<last:\n",
    "            break\n",
    "        last=current\n",
    "        to_remove.append(lbl)\n",
    "    return to_remove\n",
    "\n",
    "\n",
    "        \n",
    "for lbl in search_outliers(8):\n",
    "    gonio8.single_geometries.pop(lbl)\n",
    "gonio8.refine2()\n",
    "gonio8 = complete_gonio(module_id=8)\n",
    "gonio8.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.982178014396509e-10\n",
      "data_10_0292 4.478307386585731e-06 4.478307386585731e-06 1.0\n",
      "data_10_0291 4.441611877573707e-06 4.478307386585731e-06 1.0082617549717265\n",
      "data_10_0288 4.42110785615644e-06 4.441611877573707e-06 1.0046377564367075\n",
      "data_10_0285 4.41519072824658e-06 4.42110785615644e-06 1.0013401749265336\n",
      "data_10_0290 4.411402144902852e-06 4.41519072824658e-06 1.0008588161358412\n",
      "data_10_0289 4.40449960049467e-06 4.411402144902852e-06 1.001567157460386\n",
      "data_10_0284 4.3863439763980785e-06 4.40449960049467e-06 1.004139124563482\n",
      "data_10_0275 4.376867017048265e-06 4.3863439763980785e-06 1.0021652381287574\n",
      "data_10_0286 4.374938577698873e-06 4.376867017048265e-06 1.0004407923254561\n",
      "data_10_0283 4.360023596330053e-06 4.374938577698873e-06 1.0034208487727851\n",
      "data_10_0281 4.358112634515273e-06 4.360023596330053e-06 1.000438483805959\n",
      "data_10_0282 4.355265304875879e-06 4.358112634515273e-06 1.0006537672082128\n",
      "data_10_0278 4.352327511323348e-06 4.355265304875879e-06 1.0006749936774948\n",
      "data_10_0280 4.35154401569245e-06 4.352327511323348e-06 1.000180050030075\n",
      "data_10_0277 4.349860479592271e-06 4.35154401569245e-06 1.0003870322066828\n",
      "data_10_0276 4.339663932302855e-06 4.349860479592271e-06 1.0023496168017796\n",
      "data_10_0279 4.33808469320417e-06 4.339663932302855e-06 1.0003640406332222\n",
      "data_10_0274 4.337318248584353e-06 4.33808469320417e-06 1.000176709334176\n",
      "data_10_0287 4.319683506474051e-06 4.337318248584353e-06 1.0040824153167407\n",
      "data_10_0496 1.9508464721227965e-06 4.319683506474051e-06 2.2142611262349234\n",
      "Cost function before refinement: 6.590257595658292e-10\n",
      "[ 7.20709219e-01  3.08662496e-02  3.96669042e-03  2.39916666e-05\n",
      " -4.27999029e+01  9.99006679e-01  1.70270825e+01]\n",
      "     fun: 6.580251686582122e-10\n",
      "     jac: array([-6.41067336e-07,  7.99913209e-09, -1.44533165e-07,  1.06757288e-07,\n",
      "       -2.37724944e-10, -3.75138453e-07,  6.15574400e-09])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20709357e-01,  3.08656493e-02,  3.96672263e-03,  2.39678916e-05,\n",
      "       -4.27999029e+01,  9.99006434e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.580251686582122e-10\n",
      "GonioParam(dist=0.720709357471267, poni1=0.030865649336609666, poni2=0.003966722633045513, rot1=2.3967891595469488e-05, offset=-42.79990294443424, scale=0.999006433638064, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.030866249621701404 --> 0.030865649336609666\n",
      "Number of peaks previously found: 985\n",
      "Number of peaks found after re-scan: 1004\n",
      "Cost function before refinement: 6.991420234285395e-10\n",
      "[ 7.20709357e-01  3.08656493e-02  3.96672263e-03  2.39678916e-05\n",
      " -4.27999029e+01  9.99006434e-01  1.70270825e+01]\n",
      "     fun: 6.980031455333567e-10\n",
      "     jac: array([-6.60879262e-07,  1.52170131e-07, -2.32103327e-07,  1.69950571e-07,\n",
      "        1.58023172e-09,  9.61263490e-08,  3.00039453e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20709502e-01,  3.08662430e-02,  3.96677226e-03,  2.39315396e-05,\n",
      "       -4.27999029e+01,  9.99006765e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.980031455333567e-10\n",
      "GonioParam(dist=0.7207095017700934, poni1=0.03086624296585714, poni2=0.003966772262865057, rot1=2.393153960923883e-05, offset=-42.79990293688988, scale=0.9990067647525397, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.030865649336609666 --> 0.03086624296585714\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20709502e-01,  3.08662430e-02,  3.96677226e-03,  2.39315396e-05,\n",
       "       -4.27999029e+01,  9.99006765e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(gonio7.chi2())\n",
    "for lbl in search_outliers(7):\n",
    "    gonio7.single_geometries.pop(lbl)\n",
    "gonio7.refine2()\n",
    "gonio7 = complete_gonio(module_id=7)\n",
    "gonio7.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.382286239666452e-10\n",
      "data_02_0462 7.971563845471846e-07 7.971563845471846e-07 1.0\n",
      "data_02_0461 7.935716411266278e-07 7.971563845471846e-07 1.004517227222822\n",
      "data_02_0466 7.67143438989774e-07 7.935716411266278e-07 1.034450144254191\n",
      "data_02_0460 7.45857621330519e-07 7.67143438989774e-07 1.0285387144282092\n",
      "data_02_0456 7.376242032882277e-07 7.45857621330519e-07 1.0111620768483298\n",
      "data_02_0457 7.370430556294668e-07 7.376242032882277e-07 1.000788485359603\n",
      "data_02_0465 6.891655641669719e-07 7.370430556294668e-07 1.0694716827883974\n",
      "data_02_0464 6.523630272471416e-07 6.891655641669719e-07 1.056414197897037\n",
      "data_02_0455 6.313051349592421e-07 6.523630272471416e-07 1.0333561238801883\n",
      "data_02_0463 6.240813179531244e-07 6.313051349592421e-07 1.0115751213797115\n",
      "data_02_0459 6.163901121421231e-07 6.240813179531244e-07 1.0124778215281103\n",
      "data_02_0448 6.082027920092041e-07 6.163901121421231e-07 1.013461497119854\n",
      "data_02_0454 5.868929875551012e-07 6.082027920092041e-07 1.036309523040778\n",
      "data_02_0439 5.868112798407111e-07 5.868929875551012e-07 1.0001392401904958\n",
      "data_02_0435 5.859910233268107e-07 5.868112798407111e-07 1.0013997765857292\n",
      "data_02_0426 5.755884184129568e-07 5.859910233268107e-07 1.0180729920566098\n",
      "data_02_0458 5.724220421407079e-07 5.755884184129568e-07 1.0055315414836359\n",
      "data_02_0453 5.590340754134061e-07 5.724220421407079e-07 1.0239483911913623\n",
      "data_02_0434 5.570146124178882e-07 5.590340754134061e-07 1.0036255117020212\n",
      "data_02_0444 5.524804844432388e-07 5.570146124178882e-07 1.0082068563547881\n",
      "data_02_0430 5.489356696711307e-07 5.524804844432388e-07 1.0064576141940855\n",
      "data_02_0443 5.459478619353463e-07 5.489356696711307e-07 1.005472697933449\n",
      "data_02_0447 5.424219010224628e-07 5.459478619353463e-07 1.0065004029266464\n",
      "data_02_0468 5.360729258271283e-07 5.424219010224628e-07 1.0118434916024501\n",
      "data_02_0425 5.340453928849802e-07 5.360729258271283e-07 1.0037965554410928\n",
      "data_02_0467 5.066740382282769e-07 5.340453928849802e-07 1.0540216245387561\n",
      "data_02_0438 5.014377962589753e-07 5.066740382282769e-07 1.0104424556911487\n",
      "data_02_0429 4.994042990677361e-07 5.014377962589753e-07 1.0040718455869027\n",
      "data_02_0442 4.988918594371316e-07 4.994042990677361e-07 1.0010271557270602\n",
      "data_02_0421 4.887207364704953e-07 4.988918594371316e-07 1.020811727859332\n",
      "data_02_0452 4.818408313589759e-07 4.887207364704953e-07 1.0142783771398438\n",
      "data_02_0441 4.708090789077316e-07 4.818408313589759e-07 1.0234314777379352\n",
      "data_02_0433 4.6907543413049604e-07 4.708090789077316e-07 1.0036958762942876\n",
      "data_02_0437 4.6744164098782785e-07 4.6907543413049604e-07 1.0034951810010242\n",
      "data_02_0420 4.599765374239142e-07 4.6744164098782785e-07 1.0162293137943985\n",
      "data_02_0451 4.5329173383081183e-07 4.599765374239142e-07 1.0147472435391849\n",
      "data_02_0446 4.4537990827667195e-07 4.5329173383081183e-07 1.0177642174851431\n",
      "data_02_0428 4.424570034888956e-07 4.4537990827667195e-07 1.006606076442973\n",
      "data_02_0424 4.374993360555643e-07 4.424570034888956e-07 1.0113318284732244\n",
      "data_02_0432 4.3734600098152413e-07 4.374993360555643e-07 1.0003506035809087\n",
      "data_02_0436 4.331873497281146e-07 4.3734600098152413e-07 1.0096001216471804\n",
      "data_02_0450 4.2621140965589126e-07 4.331873497281146e-07 1.0163673236196455\n",
      "data_02_0445 4.1944505996655087e-07 4.2621140965589126e-07 1.016131670950851\n",
      "data_02_0427 4.184060457298792e-07 4.1944505996655087e-07 1.0024832677426043\n",
      "data_02_0423 4.1312003395546793e-07 4.184060457298792e-07 1.012795341159807\n",
      "data_02_0419 3.876880857648326e-07 4.1312003395546793e-07 1.06559899342912\n",
      "data_02_0408 3.542342460674882e-07 3.876880857648326e-07 1.0944398800193103\n",
      "data_02_0418 3.436569950091102e-07 3.542342460674882e-07 1.0307785123305802\n",
      "data_02_0412 3.4365083733233073e-07 3.436569950091102e-07 1.0000179184105218\n",
      "data_02_0398 3.357907683844476e-07 3.4365083733233073e-07 1.0234076385890518\n",
      "data_02_0389 3.271544614435567e-07 3.357907683844476e-07 1.0263982551324031\n",
      "data_02_0394 3.2138316313793743e-07 3.271544614435567e-07 1.0179576871708809\n",
      "data_02_0416 3.194683144152933e-07 3.2138316313793743e-07 1.0059938611631918\n",
      "data_02_0403 3.071333103624269e-07 3.194683144152933e-07 1.0401617266401704\n",
      "data_02_0411 3.0688042859822684e-07 3.071333103624269e-07 1.0008240400515445\n",
      "data_02_0407 3.0628793103577707e-07 3.0688042859822684e-07 1.0019344463245616\n",
      "data_02_0402 3.0490188744369036e-07 3.0628793103577707e-07 1.0045458675369554\n",
      "data_02_0393 2.980904108777663e-07 3.0490188744369036e-07 1.022850371287915\n",
      "data_02_0388 2.945092984652161e-07 2.980904108777663e-07 1.0121595903124707\n",
      "data_02_0397 2.920821886183787e-07 2.945092984652161e-07 1.0083096811151624\n",
      "data_02_0384 2.824639030221881e-07 2.920821886183787e-07 1.034051379639242\n",
      "data_02_0406 2.8172340654452183e-07 2.824639030221881e-07 1.0026284520933098\n",
      "data_02_0401 2.8153081654147476e-07 2.8172340654452183e-07 1.000684081428147\n",
      "data_02_0417 2.810860465158435e-07 2.8153081654147476e-07 1.0015823269463011\n",
      "data_02_0392 2.739808285543106e-07 2.810860465158435e-07 1.0259332669333994\n",
      "data_02_0410 2.7025873527903e-07 2.739808285543106e-07 1.0137723329143744\n",
      "data_02_0415 2.650180952687086e-07 2.7025873527903e-07 1.0197746497461155\n",
      "data_02_0405 2.6433948563352065e-07 2.650180952687086e-07 1.002567189814876\n",
      "data_02_0414 2.5775864796179354e-07 2.6433948563352065e-07 1.0255310063261294\n",
      "data_02_0396 2.5700799922953914e-07 2.5775864796179354e-07 1.0029207212791225\n",
      "data_02_0391 2.4851756352407427e-07 2.5700799922953914e-07 1.0341643286094844\n",
      "data_02_0387 2.4757346323797714e-07 2.4851756352407427e-07 1.0038134147083027\n",
      "data_02_0383 2.436319262841532e-07 2.4757346323797714e-07 1.016178244838186\n",
      "data_02_0400 2.411208711876606e-07 2.436319262841532e-07 1.0104140926669858\n",
      "data_02_0395 2.386282639357738e-07 2.411208711876606e-07 1.0104455658804845\n",
      "data_02_0399 2.307240689353976e-07 2.386282639357738e-07 1.0342582160450255\n",
      "data_02_0386 2.2832923413210657e-07 2.307240689353976e-07 1.0104885159028976\n",
      "data_02_0409 2.2099257445959475e-07 2.2832923413210657e-07 1.033198670545617\n",
      "data_02_0404 2.2006310772588735e-07 2.2099257445959475e-07 1.004223637225305\n",
      "data_02_0390 2.185528631262913e-07 2.2006310772588735e-07 1.0069102027673889\n",
      "data_02_0382 2.1738267272521252e-07 2.185528631262913e-07 1.0053830895830322\n",
      "data_02_0381 2.0686178374626022e-07 2.1738267272521252e-07 1.0508595100961586\n",
      "data_02_0413 2.0388171846465108e-07 2.0686178374626022e-07 1.014616638039206\n",
      "data_02_0385 2.014026959293881e-07 2.0388171846465108e-07 1.0123087852614054\n",
      "data_02_0360 1.9864831310383662e-07 2.014026959293881e-07 1.013865624039363\n",
      "data_02_0375 1.9263499624078313e-07 1.9864831310383662e-07 1.0312161184644622\n",
      "data_02_0370 1.9202965590739344e-07 1.9263499624078313e-07 1.003152327334699\n",
      "data_02_0365 1.9112544339834668e-07 1.9202965590739344e-07 1.0047309897257488\n",
      "data_02_0380 1.896068545228752e-07 1.9112544339834668e-07 1.0080091454462068\n",
      "data_02_0369 1.7565509702989891e-07 1.896068545228752e-07 1.0794270005760294\n",
      "data_02_0355 1.7104015084110744e-07 1.7565509702989891e-07 1.0269816541092662\n",
      "data_02_0374 1.699946080760567e-07 1.7104015084110744e-07 1.006150446634066\n",
      "data_02_0364 1.694066729270692e-07 1.699946080760567e-07 1.0034705548419607\n",
      "data_02_0350 1.6598878773796802e-07 1.694066729270692e-07 1.0205910606112547\n",
      "data_02_0363 1.5748085176203178e-07 1.6598878773796802e-07 1.0540252092920637\n",
      "data_02_0373 1.5391498398723758e-07 1.5748085176203178e-07 1.0231677753680557\n",
      "data_02_0354 1.5253285693309903e-07 1.5391498398723758e-07 1.0090611759454866\n",
      "data_02_0358 1.511161110628414e-07 1.5253285693309903e-07 1.0093752139351209\n",
      "data_02_0349 1.4524762167521378e-07 1.511161110628414e-07 1.0404033423745145\n",
      "data_02_0368 1.4209107029916782e-07 1.4524762167521378e-07 1.0222149876793802\n",
      "data_02_0359 1.3720480308760376e-07 1.4209107029916782e-07 1.0356129457687004\n",
      "data_02_0379 1.37066156653446e-07 1.3720480308760376e-07 1.0010115293048474\n",
      "data_02_0367 1.3261291173680126e-07 1.37066156653446e-07 1.033580779264414\n",
      "data_02_0378 1.3251823783043865e-07 1.3261291173680126e-07 1.000714421712155\n",
      "data_02_0362 1.282724946539807e-07 1.3251823783043865e-07 1.0330994044195598\n",
      "data_02_0372 1.2748563415571346e-07 1.282724946539807e-07 1.0061721503248449\n",
      "data_02_0344 1.2737953092948706e-07 1.2748563415571346e-07 1.000832969201976\n",
      "data_02_0353 1.2704886278297964e-07 1.2737953092948706e-07 1.0026026848195584\n",
      "data_02_0345 1.2601025966375946e-07 1.2704886278297964e-07 1.0082422107691196\n",
      "data_02_0343 1.2167382799218998e-07 1.2601025966375946e-07 1.0356398063834058\n",
      "data_02_0357 1.1836424233191197e-07 1.2167382799218998e-07 1.0279610260250507\n",
      "data_02_0348 1.1627425873642544e-07 1.1836424233191197e-07 1.0179746026179723\n",
      "data_02_0371 1.1505385901264026e-07 1.1627425873642544e-07 1.0106072037414329\n",
      "data_02_0366 1.1444835172079907e-07 1.1505385901264026e-07 1.0052906597844096\n",
      "data_02_0352 1.1166457889201498e-07 1.1444835172079907e-07 1.0249297750137591\n",
      "data_02_0356 1.1066756046305904e-07 1.1166457889201498e-07 1.0090091299092903\n",
      "data_02_0377 1.0535372743708623e-07 1.1066756046305904e-07 1.0504380163402007\n",
      "data_02_0351 1.0243849172311388e-07 1.0535372743708623e-07 1.0284584013776001\n",
      "data_02_0361 1.0153729138473774e-07 1.0243849172311388e-07 1.0088755601620432\n",
      "data_02_0347 1.0133967083838374e-07 1.0153729138473774e-07 1.001950080799741\n",
      "data_02_0376 9.832281368484997e-08 1.0133967083838374e-07 1.03068318572741\n",
      "data_02_0342 9.289884923302538e-08 9.832281368484997e-08 1.0583857011858053\n",
      "data_02_0329 9.160009106881351e-08 9.289884923302538e-08 1.014178568482385\n",
      "data_02_0346 9.116900169134509e-08 9.160009106881351e-08 1.0047284643845051\n",
      "data_02_0111 9.091539210337593e-08 9.116900169134509e-08 1.0027895121178247\n",
      "data_02_0074 9.069381193217852e-08 9.091539210337593e-08 1.0024431674717027\n",
      "data_02_0137 9.03293903149745e-08 9.069381193217852e-08 1.0040343637428892\n",
      "data_02_0095 8.74523334288432e-08 9.03293903149745e-08 1.0328985719800405\n",
      "data_02_0148 8.648891600653159e-08 8.74523334288432e-08 1.0111392010305558\n",
      "data_02_0125 8.424378155556433e-08 8.648891600653159e-08 1.026650447184478\n",
      "data_02_0334 8.326823915639806e-08 8.424378155556433e-08 1.011715660245126\n",
      "data_02_0112 8.320651139064705e-08 8.326823915639806e-08 1.00074186220188\n",
      "data_02_0075 8.138214185974406e-08 8.320651139064705e-08 1.022417320178758\n",
      "data_02_0126 8.103496124197184e-08 8.138214185974406e-08 1.0042843312621021\n",
      "data_02_0096 8.045245724801484e-08 8.103496124197184e-08 1.0072403505608447\n",
      "data_02_0076 8.031554364195923e-08 8.045245724801484e-08 1.0017046962499059\n",
      "data_02_0341 7.826151987085865e-08 8.031554364195923e-08 1.026245641210265\n",
      "data_02_0138 7.734375527363778e-08 7.826151987085865e-08 1.0118660465085239\n",
      "data_02_0313 7.682133122854972e-08 7.734375527363778e-08 1.00680050757691\n",
      "data_02_0097 7.680635206094798e-08 7.682133122854972e-08 1.0001950251144573\n",
      "data_02_0176 7.667712300125079e-08 7.680635206094798e-08 1.0016853665687884\n",
      "data_02_0328 7.592352186880232e-08 7.667712300125079e-08 1.0099257926120802\n",
      "data_02_0113 7.555625875837318e-08 7.592352186880232e-08 1.0048607900452515\n",
      "data_02_0327 7.544587994012269e-08 7.555625875837318e-08 1.0014630198274326\n",
      "data_02_0127 7.131617497589785e-08 7.544587994012269e-08 1.0579069890613246\n",
      "data_02_0312 6.911458700835583e-08 7.131617497589785e-08 1.0318541723656087\n",
      "data_02_0139 6.909281513713483e-08 6.911458700835583e-08 1.0003151104956105\n",
      "data_02_0340 6.902017219074813e-08 6.909281513713483e-08 1.0010524886287728\n",
      "data_02_0333 6.774003441754105e-08 6.902017219074813e-08 1.0188978022260289\n",
      "data_02_0307 6.766423353429927e-08 6.774003441754105e-08 1.001120250378708\n",
      "data_02_0185 6.763913389841048e-08 6.766423353429927e-08 1.0003710815683489\n",
      "data_02_0150 6.745605433758126e-08 6.763913389841048e-08 1.0027140567681738\n",
      "data_02_0177 6.735816862166664e-08 6.745605433758126e-08 1.0014532122520199\n",
      "data_02_0193 6.662196525645216e-08 6.735816862166664e-08 1.0110504600454304\n",
      "data_02_0208 6.626142349356137e-08 6.662196525645216e-08 1.0054412015903313\n",
      "data_02_0098 6.592232057059097e-08 6.626142349356137e-08 1.0051439773362845\n",
      "data_02_0302 6.58293955726229e-08 6.592232057059097e-08 1.0014116033902445\n",
      "data_02_0140 6.57617458135232e-08 6.58293955726229e-08 1.0010287099021296\n",
      "data_02_0077 6.529890651328317e-08 6.57617458135232e-08 1.0070880099676076\n",
      "data_02_0201 6.303178713082955e-08 6.529890651328317e-08 1.0359678740783276\n",
      "data_02_0114 6.24588267473577e-08 6.303178713082955e-08 1.0091734093211426\n",
      "data_02_0318 6.23915354946696e-08 6.24588267473577e-08 1.0010785317616337\n",
      "data_02_0178 6.168559077605915e-08 6.23915354946696e-08 1.0114442402144332\n",
      "data_02_0326 6.156183810355442e-08 6.168559077605915e-08 1.0020102173085956\n",
      "data_02_0215 6.154477086377611e-08 6.156183810355442e-08 1.0002773142143317\n",
      "data_02_0311 6.138443821108707e-08 6.154477086377611e-08 1.0026119429836222\n",
      "data_02_0099 6.072998722692139e-08 6.138443821108707e-08 1.0107764057601443\n",
      "data_02_0301 6.069678376201197e-08 6.072998722692139e-08 1.000547038291841\n",
      "data_02_0186 6.061842645466519e-08 6.069678376201197e-08 1.0012926318271456\n",
      "data_02_0078 6.05546756955427e-08 6.061842645466519e-08 1.0010527801262288\n",
      "data_02_0079 5.9490831431307015e-08 6.05546756955427e-08 1.0178824911106525\n",
      "data_02_0306 5.912412014746122e-08 5.9490831431307015e-08 1.0062023973114724\n",
      "data_02_0332 5.727287901213354e-08 5.912412014746122e-08 1.0323231722808188\n",
      "data_02_0141 5.719393063976436e-08 5.727287901213354e-08 1.001380362767274\n",
      "data_02_0115 5.7162314210649325e-08 5.719393063976436e-08 1.000553099179969\n",
      "data_02_0128 5.695517599620114e-08 5.7162314210649325e-08 1.0036368637410935\n",
      "data_02_0168 5.679691102721794e-08 5.695517599620114e-08 1.0027865066272241\n",
      "data_02_0100 5.6595898537117144e-08 5.679691102721794e-08 1.0035517147937667\n",
      "data_02_0216 5.525228959512556e-08 5.6595898537117144e-08 1.024317706140998\n",
      "data_02_0217 5.47644402484414e-08 5.525228959512556e-08 1.0089081408386722\n",
      "data_02_0278 5.440662246210061e-08 5.47644402484414e-08 1.0065767322092094\n",
      "data_02_0194 5.3362822837444934e-08 5.440662246210061e-08 1.0195604274503116\n",
      "data_02_0169 5.3331502269719944e-08 5.3362822837444934e-08 1.0005872808076282\n",
      "data_02_0325 5.306137939665337e-08 5.3331502269719944e-08 1.005090762361214\n",
      "data_02_0284 5.276534268889967e-08 5.306137939665337e-08 1.0056104384557703\n",
      "data_02_0151 5.236684455771947e-08 5.276534268889967e-08 1.007609741135748\n",
      "data_02_0116 5.2353104395197217e-08 5.236684455771947e-08 1.0002624517243244\n",
      "data_02_0129 5.1837121282096003e-08 5.2353104395197217e-08 1.009953930703313\n",
      "data_02_0209 5.183704252339118e-08 5.1837121282096003e-08 1.0000015193518186\n",
      "data_02_0101 5.166940982917213e-08 5.183704252339118e-08 1.0032443315062678\n",
      "data_02_0331 5.10784819468508e-08 5.166940982917213e-08 1.0115690181030872\n",
      "data_02_0117 5.101344618415161e-08 5.10784819468508e-08 1.001274874911693\n",
      "data_02_0170 4.9929536344196644e-08 5.101344618415161e-08 1.0217087904138118\n",
      "data_02_0202 4.9799913904246315e-08 4.9929536344196644e-08 1.0026028647398781\n",
      "data_02_0187 4.912196530061741e-08 4.9799913904246315e-08 1.0138013330590496\n",
      "data_02_0195 4.909538480270249e-08 4.912196530061741e-08 1.000541405226209\n",
      "data_02_0179 4.884846763021287e-08 4.909538480270249e-08 1.0050547577942222\n",
      "data_02_0152 4.873638547160228e-08 4.884846763021287e-08 1.0022997634626782\n",
      "data_02_0338 4.8632146045461504e-08 4.873638547160228e-08 1.0021434264086009\n",
      "data_02_0080 4.7763280379444634e-08 4.8632146045461504e-08 1.0181910802422773\n",
      "data_02_0300 4.730742686172498e-08 4.7763280379444634e-08 1.0096359820848442\n",
      "data_02_0289 4.716153229696035e-08 4.730742686172498e-08 1.0030935077309613\n",
      "data_02_0305 4.6948242098731506e-08 4.716153229696035e-08 1.0045430923223984\n",
      "data_02_0130 4.678355070538744e-08 4.6948242098731506e-08 1.003520284178112\n",
      "data_02_0317 4.676546738965695e-08 4.678355070538744e-08 1.0003866809579773\n",
      "data_02_0142 4.632745138531294e-08 4.676546738965695e-08 1.009454783098275\n",
      "data_02_0203 4.572488727574456e-08 4.632745138531294e-08 1.0131780337901022\n",
      "data_02_0180 4.515676608235293e-08 4.572488727574456e-08 1.0125810867934064\n",
      "data_02_0236 4.490529491814043e-08 4.515676608235293e-08 1.0056000336858029\n",
      "data_02_0210 4.4003898110153527e-08 4.490529491814043e-08 1.020484476300951\n",
      "data_02_0081 4.364487731859856e-08 4.4003898110153527e-08 1.0082259548797488\n",
      "data_02_0131 4.354469124643211e-08 4.364487731859856e-08 1.002300764325081\n",
      "data_02_0310 4.337805656983698e-08 4.354469124643211e-08 1.0038414509494415\n",
      "data_02_0153 4.3177978520711517e-08 4.337805656983698e-08 1.0046337984310565\n",
      "data_02_0339 4.314187273202065e-08 4.3177978520711517e-08 1.0008369082379696\n",
      "data_02_0196 4.237750464559882e-08 4.314187273202065e-08 1.0180371188160844\n",
      "data_02_0188 4.222868848388736e-08 4.237750464559882e-08 1.0035240536008654\n",
      "data_02_0229 4.208902026815251e-08 4.222868848388736e-08 1.0033184002584286\n",
      "data_02_0290 4.1538712914667085e-08 4.208902026815251e-08 1.0132480598187026\n",
      "data_02_0172 4.1159063517690975e-08 4.1538712914667085e-08 1.0092239561479073\n",
      "data_02_0102 4.110134448475783e-08 4.1159063517690975e-08 1.0014043100939083\n",
      "data_02_0330 4.090674876110997e-08 4.110134448475783e-08 1.0047570567092554\n",
      "data_02_0337 4.0521522816559524e-08 4.090674876110997e-08 1.0095066995950364\n",
      "data_02_0309 3.9743834361041264e-08 4.0521522816559524e-08 1.019567524573839\n",
      "data_02_0232 3.95881697490978e-08 3.9743834361041264e-08 1.0039320992339387\n",
      "data_02_0171 3.952375116045423e-08 3.95881697490978e-08 1.0016298703122093\n",
      "data_02_0230 3.9452258328963335e-08 3.952375116045423e-08 1.00181213533823\n",
      "data_02_0242 3.92165458923428e-08 3.9452258328963335e-08 1.0060105353813569\n",
      "data_02_0316 3.9097426632861917e-08 3.92165458923428e-08 1.0030467288959821\n",
      "data_02_0239 3.897250747507658e-08 3.9097426632861917e-08 1.003205314871393\n",
      "data_02_0237 3.875841552078056e-08 3.897250747507658e-08 1.005523754039461\n",
      "data_02_0299 3.8590389027237044e-08 3.875841552078056e-08 1.0043541020906765\n",
      "data_02_0324 3.826943275819106e-08 3.8590389027237044e-08 1.0083867527139474\n",
      "data_02_0249 3.810908415306902e-08 3.826943275819106e-08 1.0042076215864433\n",
      "data_02_0143 3.810734842935843e-08 3.810908415306902e-08 1.0000455482677786\n",
      "data_02_0118 3.8100868267354914e-08 3.810734842935843e-08 1.0001700791162564\n",
      "data_02_0189 3.800238507610693e-08 3.8100868267354914e-08 1.0025915002716475\n",
      "data_02_0082 3.7741970920329645e-08 3.800238507610693e-08 1.0068998557687143\n",
      "data_02_0238 3.7560067152157576e-08 3.7741970920329645e-08 1.0048430096632992\n",
      "data_02_0323 3.7514981288697336e-08 3.7560067152157576e-08 1.0012018095681103\n",
      "data_02_0181 3.706262245040685e-08 3.7514981288697336e-08 1.0122052571669957\n",
      "data_02_0231 3.682093806366573e-08 3.706262245040685e-08 1.0065637759234496\n",
      "data_02_0103 3.677818704763357e-08 3.682093806366573e-08 1.001162401397785\n",
      "data_02_0255 3.628478717876916e-08 3.677818704763357e-08 1.0135979816123355\n",
      "data_02_0204 3.6164805825293285e-08 3.628478717876916e-08 1.003317627476157\n",
      "data_02_0272 3.59921912272354e-08 3.6164805825293285e-08 1.0047958902243013\n",
      "data_02_0154 3.59388385340999e-08 3.59921912272354e-08 1.001484541385078\n",
      "data_02_0083 3.589470383774043e-08 3.59388385340999e-08 1.001229560120038\n",
      "data_02_0315 3.540817833102809e-08 3.589470383774043e-08 1.01374048396853\n",
      "data_02_0271 3.5405106755531584e-08 3.540817833102809e-08 1.0000867551542132\n",
      "data_02_0132 3.539125941837753e-08 3.5405106755531584e-08 1.0003912643229325\n",
      "data_02_0211 3.531821770801946e-08 3.539125941837753e-08 1.0020681029536063\n",
      "data_02_0283 3.508204848587925e-08 3.531821770801946e-08 1.0067319108299866\n",
      "data_02_0304 3.46937021763495e-08 3.508204848587925e-08 1.0111935678572375\n",
      "data_02_0266 3.438001280908393e-08 3.46937021763495e-08 1.009124178312775\n",
      "data_02_0282 3.424029328669515e-08 3.438001280908393e-08 1.0040805585752115\n",
      "data_02_0308 3.4026021582491746e-08 3.424029328669515e-08 1.0062972893755424\n",
      "data_02_0259 3.394370834991172e-08 3.4026021582491746e-08 1.002424992335295\n",
      "data_02_0119 3.39277719321542e-08 3.394370834991172e-08 1.0004697160128697\n",
      "data_02_0253 3.390653579404228e-08 3.39277719321542e-08 1.0006263140015517\n",
      "data_02_0197 3.38095060042918e-08 3.390653579404228e-08 1.002869896701187\n",
      "data_02_0251 3.3593072697069164e-08 3.38095060042918e-08 1.0064427957863324\n",
      "data_02_0144 3.3247539466691447e-08 3.3593072697069164e-08 1.0103927459270747\n",
      "data_02_0182 3.304665329402803e-08 3.3247539466691447e-08 1.0060788658650563\n",
      "data_02_0336 3.2916725727484065e-08 3.304665329402803e-08 1.0039471594963494\n",
      "data_02_0264 3.2731613308230714e-08 3.2916725727484065e-08 1.0056554627329293\n",
      "data_02_0104 3.252823750998902e-08 3.2731613308230714e-08 1.0062522845936317\n",
      "data_02_0298 3.2495750930895934e-08 3.252823750998902e-08 1.0009997177527046\n",
      "data_02_0250 3.242473482590026e-08 3.2495750930895934e-08 1.0021901830616962\n",
      "data_02_0256 3.2363258701190245e-08 3.242473482590026e-08 1.0018995653459257\n",
      "data_02_0173 3.2333215504007045e-08 3.2363258701190245e-08 1.000929174433006\n",
      "data_02_0258 3.22692930607046e-08 3.2333215504007045e-08 1.0019809062188687\n",
      "data_02_0243 3.217059036351489e-08 3.22692930607046e-08 1.0030681033849367\n",
      "data_02_0190 3.2140929821276446e-08 3.217059036351489e-08 1.0009228277589781\n",
      "data_02_0262 3.193213502090787e-08 3.2140929821276446e-08 1.0065387046695082\n",
      "data_02_0269 3.151811464075576e-08 3.193213502090787e-08 1.013135950067798\n",
      "data_02_0120 3.150485879015733e-08 3.151811464075576e-08 1.0004207557534768\n",
      "data_02_0191 3.141975700735102e-08 3.150485879015733e-08 1.0027085436334342\n",
      "data_02_0261 3.124494956345661e-08 3.141975700735102e-08 1.0055947423931468\n",
      "data_02_0218 3.055804122628002e-08 3.124494956345661e-08 1.0224788078558469\n",
      "data_02_0252 3.01864634170887e-08 3.055804122628002e-08 1.0123094184322687\n",
      "data_02_0322 3.011726260592752e-08 3.01864634170887e-08 1.0022977125134724\n",
      "data_02_0314 3.009776780454749e-08 3.011726260592752e-08 1.0006477158541\n",
      "data_02_0265 3.00514365542048e-08 3.009776780454749e-08 1.0015417316326667\n",
      "data_02_0268 2.9905581231323254e-08 3.00514365542048e-08 1.0048771940512822\n",
      "data_02_0155 2.9791563025984525e-08 2.9905581231323254e-08 1.0038271978291062\n",
      "data_02_0267 2.959671671172861e-08 2.9791563025984525e-08 1.0065833759924694\n",
      "data_02_0198 2.8804718503755165e-08 2.959671671172861e-08 1.027495433009359\n",
      "data_02_0084 2.854152152077937e-08 2.8804718503755165e-08 1.0092215470287447\n",
      "data_02_0257 2.84619388223748e-08 2.854152152077937e-08 1.0027961095307396\n",
      "data_02_0303 2.8461846228197857e-08 2.84619388223748e-08 1.0000032532737406\n",
      "data_02_0281 2.8445514310204485e-08 2.8461846228197857e-08 1.000574147396854\n",
      "data_02_0219 2.827617732882481e-08 2.8445514310204485e-08 1.0059886801320579\n",
      "data_02_0174 2.7830138583431962e-08 2.827617732882481e-08 1.01602718376898\n",
      "data_02_0212 2.7693009266450745e-08 2.7830138583431962e-08 1.0049517665509666\n",
      "data_02_0133 2.7647470492804285e-08 2.7693009266450745e-08 1.0016471226059653\n",
      "data_02_0297 2.7423848405637794e-08 2.7647470492804285e-08 1.0081542927111762\n",
      "data_02_0205 2.7191991306331825e-08 2.7423848405637794e-08 1.0085266686317298\n",
      "data_02_0321 2.696072330617148e-08 2.7191991306331825e-08 1.008577959780011\n",
      "data_02_0277 2.69174511955274e-08 2.696072330617148e-08 1.001607585737957\n",
      "data_02_0105 2.6823918307999324e-08 2.69174511955274e-08 1.0034869211296464\n",
      "data_02_0199 2.6596816541850855e-08 2.6823918307999324e-08 1.0085386822814346\n",
      "data_02_0145 2.6321883880191714e-08 2.6596816541850855e-08 1.0104450222070176\n",
      "data_02_0134 2.5886482512495037e-08 2.6321883880191714e-08 1.0168196419689897\n",
      "data_02_0244 2.5860887274560485e-08 2.5886482512495037e-08 1.00098972775616\n",
      "data_02_0288 2.5814184934311998e-08 2.5860887274560485e-08 1.0018091735364618\n",
      "data_02_0280 2.5567408398686068e-08 2.5814184934311998e-08 1.0096519964705775\n",
      "data_02_0200 2.5161825000061712e-08 2.5567408398686068e-08 1.0161189976729972\n",
      "data_02_0286 2.5066528318774607e-08 2.5161825000061712e-08 1.0038017502892784\n",
      "data_02_0085 2.5059766982601205e-08 2.5066528318774607e-08 1.0002698084215267\n",
      "data_02_0270 2.501467899802678e-08 2.5059766982601205e-08 1.001802461050089\n",
      "data_02_0263 2.4817500914856054e-08 2.501467899802678e-08 1.007945122429821\n",
      "data_02_0156 2.4613349978552404e-08 2.4817500914856054e-08 1.008294317371733\n",
      "data_02_0276 2.4560296850560702e-08 2.4613349978552404e-08 1.0021601175390715\n",
      "data_02_0285 2.4538500163829094e-08 2.4560296850560702e-08 1.0008882648322466\n",
      "data_02_0121 2.405843208864701e-08 2.4538500163829094e-08 1.0199542544340878\n",
      "data_02_0296 2.4058301360074324e-08 2.405843208864701e-08 1.00000543382389\n",
      "data_02_0207 2.3903461559909207e-08 2.4058301360074324e-08 1.0064777145258665\n",
      "data_02_0449 2.373280894028847e-08 2.3903461559909207e-08 1.007190578243397\n",
      "data_02_0275 2.351749156807309e-08 2.373280894028847e-08 1.0091556266361201\n",
      "data_02_0183 2.3500539027225123e-08 2.351749156807309e-08 1.000721368170676\n",
      "data_02_0206 2.3061812947513062e-08 2.3500539027225123e-08 1.0190239197894184\n",
      "data_02_0220 2.2994988953888147e-08 2.3061812947513062e-08 1.0029060241672183\n",
      "data_02_0146 2.2740881631130188e-08 2.2994988953888147e-08 1.011174031283383\n",
      "data_02_0221 2.2573026012461166e-08 2.2740881631130188e-08 1.007436115059468\n",
      "data_02_0295 2.222224858006809e-08 2.2573026012461166e-08 1.0157849657350924\n",
      "data_02_0106 2.2203112981640488e-08 2.222224858006809e-08 1.0008618430417133\n",
      "data_02_0287 2.1985254420659646e-08 2.2203112981640488e-08 1.0099093036092464\n",
      "data_02_0335 2.174038356223434e-08 2.1985254420659646e-08 1.011263410221091\n",
      "data_02_0157 2.1600786574131115e-08 2.174038356223434e-08 1.0064625881851175\n",
      "data_02_0086 2.1280953876238953e-08 2.1600786574131115e-08 1.0150290583660946\n",
      "data_02_0135 2.0605224158770496e-08 2.1280953876238953e-08 1.032794096888329\n",
      "data_02_0245 2.0214746920241275e-08 2.0605224158770496e-08 1.0193164544710789\n",
      "data_02_0147 2.012235348938875e-08 2.0214746920241275e-08 1.0045915817402395\n",
      "data_02_0122 2.0049202575832967e-08 2.012235348938875e-08 1.003648569726357\n",
      "data_02_0107 1.938714534962891e-08 2.0049202575832967e-08 1.0341492888336308\n",
      "data_02_0184 1.9329784881362546e-08 1.938714534962891e-08 1.002967465422839\n",
      "data_02_0233 1.9242219372987482e-08 1.9329784881362546e-08 1.004550696916905\n",
      "data_02_0175 1.9131945757118e-08 1.9242219372987482e-08 1.0057638474031558\n",
      "data_02_0192 1.9060909360862577e-08 1.9131945757118e-08 1.0037268104532977\n",
      "data_02_0214 1.8668523669383202e-08 1.9060909360862577e-08 1.0210185710679895\n",
      "data_02_0246 1.8085116798197382e-08 1.8668523669383202e-08 1.0322589495935117\n",
      "data_02_0224 1.7865119734937927e-08 1.8085116798197382e-08 1.012314334665735\n",
      "data_02_0123 1.7783980521679194e-08 1.7865119734937927e-08 1.0045624888736142\n",
      "data_02_0234 1.7743067624651617e-08 1.7783980521679194e-08 1.0023058525105735\n",
      "data_02_0087 1.7689307353746686e-08 1.7743067624651617e-08 1.00303913939816\n",
      "data_02_0136 1.685611853058975e-08 1.7689307353746686e-08 1.0494294591987414\n",
      "data_02_0222 1.685223127976849e-08 1.685611853058975e-08 1.0002306668331764\n",
      "data_02_0223 1.684111800097649e-08 1.685223127976849e-08 1.0006598896101409\n",
      "data_02_0108 1.6692689326756842e-08 1.684111800097649e-08 1.0088918370979163\n",
      "data_02_0124 1.649772171738971e-08 1.6692689326756842e-08 1.0118178505315447\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02_0274 1.646811134730673e-08 1.649772171738971e-08 1.0017980428634776\n",
      "data_02_0158 1.609217982956011e-08 1.646811134730673e-08 1.0233611307932355\n",
      "data_02_0240 1.5068640073540352e-08 1.609217982956011e-08 1.0679251578791795\n",
      "data_02_0320 1.503683121703211e-08 1.5068640073540352e-08 1.0021153962593006\n",
      "data_02_0247 1.4173933717675753e-08 1.503683121703211e-08 1.0608791826280568\n",
      "data_02_0248 1.4169011127970798e-08 1.4173933717675753e-08 1.0003474194254276\n",
      "data_02_0088 1.387514072593158e-08 1.4169011127970798e-08 1.0211796339830987\n",
      "data_02_0235 1.3468333617225374e-08 1.387514072593158e-08 1.030204709822893\n",
      "data_02_0160 1.3120004952502951e-08 1.3468333617225374e-08 1.026549430886912\n",
      "data_02_0161 1.2298582595302832e-08 1.3120004952502951e-08 1.0667900020864065\n",
      "data_02_0260 1.216723491447803e-08 1.2298582595302832e-08 1.010795195600975\n",
      "data_02_0159 1.199993752002408e-08 1.216723491447803e-08 1.0139415221266597\n",
      "data_02_0294 1.1975844891213482e-08 1.199993752002408e-08 1.002011768608349\n",
      "data_02_0273 1.1970496190147518e-08 1.1975844891213482e-08 1.0004468236722188\n",
      "data_02_0241 1.180009018680682e-08 1.1970496190147518e-08 1.0144410763513674\n",
      "data_02_0109 1.175617850876184e-08 1.180009018680682e-08 1.0037352000067243\n",
      "data_02_0254 1.1681359586635138e-08 1.175617850876184e-08 1.0064049840749962\n",
      "data_02_0089 1.0944685681180611e-08 1.1681359586635138e-08 1.0673088224654308\n",
      "data_02_0319 1.071026016339414e-08 1.0944685681180611e-08 1.0218879386877733\n",
      "data_02_0291 9.647626338630572e-09 1.071026016339414e-08 1.1101445876389946\n",
      "data_02_0110 9.297424836505559e-09 9.647626338630572e-09 1.0376665053262895\n",
      "data_02_0090 8.94600182435908e-09 9.297424836505559e-09 1.0392826895238931\n",
      "data_02_0440 8.921549332760699e-09 8.94600182435908e-09 1.002740834656217\n",
      "data_02_0292 8.845576776004658e-09 8.921549332760699e-09 1.008588762347542\n",
      "data_02_0293 8.013141726493833e-09 8.845576776004658e-09 1.103883729743422\n",
      "data_02_0091 5.400087708579987e-09 8.013141726493833e-09 1.4838910326886112\n",
      "376\n"
     ]
    }
   ],
   "source": [
    "print(gonio0.chi2())\n",
    "print(len(search_outliers(0)))\n",
    "# for lbl in search_outliers(7):\n",
    "#     gonio7.single_geometries.pop(lbl)\n",
    "# gonio7.refine2()\n",
    "# gonio7 = complete_gonio(module_id=7)\n",
    "# gonio7.refine2()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overlay of the differents results\n",
    "\n",
    "We are getting to an end. Here are the first actually integrated data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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csZLTLNmzYJOp0N0dDS380XT1bQn8fXr1/H4449j6NChqKmpwd69e9G+fXvs2rWL6rdJx44dg06nw7fffmvSlq/KykrodDrRL2NMTEz3hhjoMjExmaV9+/bByckJ3bp1Q+vWrfG3v/0N48aNQ319vcDuzTffxIgRI9CuXTt06tQJr7/+Os6ePQsA+Pe//83t3dqzZ0/ExMRg8eLFRpD3/fffw93dHQ899JBgv1xaOQC88847GD9+PDp16oR27drh6aefxsKFC7mt0CwNugAQGxuL7t274/7778fo0aNRUlICnU6HkydPUsdR7hjIjUNODGK+TI2XmJogWuz68ssvObu3334bAwYMQNu2bfH888/j8OHDVJ98Xb9+HY888gjS0tJk2Tdp4cKFGD58uKI2TExM9iUGukxMTEwaa8+ePWjVqhV++umnezoGc7RkyRKj5RhSunnzJh577DEcPHhQw6iYmJhsXQx0mZiYmCyoH374AUuWLEFJSQn0ej22bt2K9u3bIygo6J6KwdK6dOkS2rdvj3/961+y7A8fPoynnnqKnYrGxHSPi4EuExMTkwV15coVjB8/Hn//+9/RunVrdO/eHcuWLcOff/55T8WghXJyclBbWyvL9vDhw3jzzTc1joiJicnWxUCXiYmJiYmJiYnJLsVAl4mJiYmJiYmJyS7FQJeJiYmJiYmJickuxUCXiYmJiYmJiYnJLsVAl4mJiYmJiYmJyS7FQJeJiYmJiYmJickuxUCXiYmJiYmJiYnJLsVAl4mJiYmJiYmJyS7FQJeJiYmJiYmJicku9f8Bz9eS++MJ8QYAAAAASUVORK5CYII=\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "area_pixel=0.05054585816712631 area_sum=0.05084240089824814, Error= -0.005866805745810646\n",
      "area_pixel=0.05448433978731071 area_sum=0.05460194376540826, Error= -0.002158491385903477\n",
      "area_pixel=0.05706893234299759 area_sum=0.057097754167008734, Error= -0.0005050352762500703\n",
      "area_pixel=0.04575136894640419 area_sum=0.046103520693760155, Error= -0.007697075638731046\n",
      "area_pixel=0.0503875602291064 area_sum=0.05041948354020665, Error= -0.0006335554044510445\n",
      "area_pixel=0.050887046288177196 area_sum=0.05090400923674137, Error= -0.0003333451202514585\n",
      "area_pixel=0.047764037615231736 area_sum=0.047787742717740125, Error= -0.0004962960355099896\n",
      "area_pixel=0.054600585079026764 area_sum=0.05461392295287675, Error= -0.00024428078619822223\n",
      "area_pixel=0.04398098576245957 area_sum=0.0451093409852144, Error= -0.025655523704017393\n",
      "area_pixel=0.05413585962925449 area_sum=0.054261047973434326, Error= -0.0023124846458000116\n",
      "area_pixel=0.05074179597564754 area_sum=0.051022305153632666, Error= -0.005528168102677118\n",
      "area_pixel=0.05670749981502521 area_sum=0.0567493721010123, Error= -0.0007383906207058524\n",
      "area_pixel=0.0522725582237884 area_sum=0.052599157191360185, Error= -0.006248000455105984\n",
      "area_pixel=0.04886833409786284 area_sum=0.05916004122953074, Error= -0.21060073607293242\n",
      "area_pixel=0.05605479751870135 area_sum=0.06334656311501353, Error= -0.13008281037639038\n",
      "area_pixel=0.07613865216960036 area_sum=0.07747175549456228, Error= -0.01750889051716343\n",
      "area_pixel=0.08243566371888811 area_sum=0.0829475211134128, Error= -0.006209174178182975\n",
      "area_pixel=0.05072162137920344 area_sum=0.060175244255315306, Error= -0.18638250550854787\n",
      "area_pixel=0.05147481897381212 area_sum=0.060582440472418876, Error= -0.17693353138823606\n",
      "area_pixel=0.07995593516658417 area_sum=0.08078232411070743, Error= -0.010335554732760278\n",
      "area_pixel=0.07870547782261994 area_sum=0.07967188659348057, Error= -0.012278799361826395\n",
      "area_pixel=0.05682851643920728 area_sum=0.06386061246732938, Error= -0.12374238267586556\n",
      "area_pixel=0.0400252869217077 area_sum=0.05503561919587382, Error= -0.3750212285430305\n",
      "area_pixel=0.06340122634469303 area_sum=0.06793436007101032, Error= -0.07149914895450184\n",
      "area_pixel=0.07356612496032433 area_sum=0.07505451304442162, Error= -0.020231976128958933\n",
      "area_pixel=0.08519548136319521 area_sum=0.08544563508127642, Error= -0.0029362322282655237\n",
      "area_pixel=0.053160030339890696 area_sum=0.06157431522706344, Error= -0.1582821686401251\n",
      "area_pixel=0.045930287163253425 area_sum=0.057201385537067204, Error= -0.2453957741163707\n",
      "area_pixel=0.06732209973204561 area_sum=0.07040744500060567, Error= -0.045829605446655645\n",
      "area_pixel=0.07017129920940413 area_sum=0.0721841810894871, Error= -0.02868525882748959\n",
      "area_pixel=0.048616431082022515 area_sum=0.058747282374172344, Error= -0.2083832783829341\n",
      "area_pixel=0.05084741072757204 area_sum=0.06014651274983808, Error= -0.1828825084543311\n",
      "area_pixel=0.08582264210207136 area_sum=0.08598966627233767, Error= -0.0019461550725468225\n",
      "area_pixel=0.07293769354366653 area_sum=0.07452580505574181, Error= -0.021773536218615323\n",
      "area_pixel=0.06333498912628421 area_sum=0.06785807669315522, Error= -0.07141530501966896\n",
      "area_pixel=0.03963769199827816 area_sum=0.054891531459535764, Error= -0.3848316764235472\n",
      "area_pixel=0.06112439445008455 area_sum=0.0664864916591485, Error= -0.08772434078578469\n",
      "area_pixel=0.07314430360340829 area_sum=0.07481382789893049, Error= -0.022825076093067092\n",
      "area_pixel=0.0854466193934389 area_sum=0.08560825287900438, Error= -0.0018916311343020336\n",
      "area_pixel=0.04673599374915405 area_sum=0.057774642096181, Error= -0.23619158300719262\n",
      "area_pixel=0.05583010601315941 area_sum=0.06324832936851839, Error= -0.13287138221823314\n",
      "area_pixel=0.07322943409217153 area_sum=0.07499526481604342, Error= -0.02411367431365501\n",
      "area_pixel=0.0852345027976682 area_sum=0.08533894045176349, Error= -0.0012252978625710697\n",
      "area_pixel=0.04599237073951734 area_sum=0.05746828088313036, Error= -0.24951769084938125\n",
      "area_pixel=0.06070260492291091 area_sum=0.061073736040080526, Error= -0.006113924067030317\n",
      "area_pixel=0.044319725410217004 area_sum=0.047768636124481664, Error= -0.07781886467801953\n",
      "area_pixel=0.044174329257337774 area_sum=0.047917627993498656, Error= -0.0847392320176335\n",
      "area_pixel=0.05696363265076698 area_sum=0.05803312066746481, Error= -0.018774926508894813\n",
      "area_pixel=0.058320415107782964 area_sum=0.059174815319163986, Error= -0.014650105109882882\n",
      "area_pixel=0.042924164383912 area_sum=0.04741622416589007, Error= -0.10465107117290089\n",
      "area_pixel=0.06337332199284873 area_sum=0.06344873015210023, Error= -0.0011899038409255117\n",
      "area_pixel=0.052121672519851 area_sum=0.05393823010119017, Error= -0.03485225038869034\n",
      "area_pixel=0.0479534333591225 area_sum=0.05044117779204517, Error= -0.05187833818471332\n",
      "area_pixel=0.04600451074681722 area_sum=0.048891635204346216, Error= -0.06275742118893726\n",
      "area_pixel=0.05666618800179535 area_sum=0.057795805715150514, Error= -0.01993459862377502\n",
      "area_pixel=0.053340349058393244 area_sum=0.055062805328933664, Error= -0.03229180725185726\n",
      "area_pixel=0.04918182529843129 area_sum=0.05170780411764328, Error= -0.051360005528151\n",
      "area_pixel=0.0542987243748243 area_sum=0.05587411994858145, Error= -0.029013491419838604\n",
      "area_pixel=0.048922568471164496 area_sum=0.05165291259833061, Error= -0.05580950086002555\n",
      "area_pixel=0.041726822421832566 area_sum=0.042106909997024614, Error= -0.00910895086497591\n",
      "area_pixel=0.039582151362063556 area_sum=0.04069836796135787, Error= -0.02819999825386246\n",
      "area_pixel=0.05048661327088855 area_sum=0.051104638944560715, Error= -0.012241377142018202\n",
      "area_pixel=0.05462653755615676 area_sum=0.054859630660605146, Error= -0.004267030547355515\n",
      "area_pixel=0.052955102565457324 area_sum=0.053292036127629394, Error= -0.006362626939596422\n",
      "area_pixel=0.05776491656818106 area_sum=0.05779778818874337, Error= -0.0005690585655657377\n",
      "area_pixel=0.04640522109095535 area_sum=0.0470074553630645, Error= -0.012977726599529699\n",
      "area_pixel=0.04660652023051526 area_sum=0.04708417266487089, Error= -0.010248618261847633\n",
      "area_pixel=0.055970272141323996 area_sum=0.05607648098314985, Error= -0.0018975938076141565\n",
      "area_pixel=0.04137995412261919 area_sum=0.04379345464441353, Error= -0.058325355186294676\n",
      "area_pixel=0.04876562355702152 area_sum=0.04919111397280354, Error= -0.008725212244738255\n",
      "area_pixel=0.052309101601506036 area_sum=0.05260266489758367, Error= -0.005612088280812288\n",
      "area_pixel=0.043221450987522836 area_sum=0.044503584967261894, Error= -0.029664297482960136\n",
      "area_pixel=0.042611371967804956 area_sum=0.04391185184599117, Error= -0.030519549550500034\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/mntdirect/_scisoft/users/jupyter/jupy35/lib/python3.5/site-packages/ipykernel_launcher.py:22: RuntimeWarning: invalid value encountered in true_divide\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "summed, counted, radial = None, None, None\n",
    "\n",
    "for i in range(9):\n",
    "    name = ds_names[i]\n",
    "    ds = data[name]\n",
    "    gonioref = goniometers[name]\n",
    "    mg = gonioref.get_mg(position)\n",
    "    mg.radial_range = (0, 95)\n",
    "    images = [i.reshape(-1, 1) for i in ds]\n",
    "    res_mg = mg.integrate1d(images, 50000)\n",
    "    results[name] = res_mg    \n",
    "    if summed is None:\n",
    "        summed = res_mg.sum\n",
    "        counted = res_mg.count\n",
    "    else:\n",
    "        summed += res_mg.sum\n",
    "        counted += res_mg.count\n",
    "    radial = res_mg.radial\n",
    "    jupyter.plot1d(res_mg, label=\"%i %s\"%(i, name), calibrant=LaB6, ax=ax )\n",
    "    \n",
    "ax.plot(radial, summed/counted, label=\"Merged\")\n",
    "ax.legend()\n",
    "fig.show()    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Multi-Gonio fit\n",
    "\n",
    "Can we fit everything togeather ?\n",
    "Just assume energy and scale parameter of the goniometer are the same for all modules and fit everything."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.optimize import minimize\n",
    "class MultiGoniometer:\n",
    "    def __init__(self, list_of_goniometers,\n",
    "                param_name_split,\n",
    "                param_name_common):\n",
    "        self.nb_gonio = len(list_of_goniometers)\n",
    "        self.goniometers = list_of_goniometers\n",
    "        self.names_split = param_name_split\n",
    "        self.names_common = param_name_common\n",
    "        self.param = None\n",
    "        \n",
    "    def init_param(self):\n",
    "        param = []\n",
    "        for gonio in self.goniometers:\n",
    "            param += list(gonio.param[:len(self.names_split)])\n",
    "        param += list(gonio.param[len(self.names_split):])\n",
    "        self.param = numpy.array(param)\n",
    "    \n",
    "    def residu2(self, param):\n",
    "        \"Actually performs the calulation of the average of the error squared\"\n",
    "        sumsquare = 0.0\n",
    "        npt = 0\n",
    "        for idx, gonio in enumerate(self.goniometers):\n",
    "            gonio_param = numpy.concatenate((param[len(self.names_split)*idx:len(self.names_split)*(1+idx)],\n",
    "                                             param[len(self.names_split)*len(self.goniometers):]))\n",
    "            sumsquare += gonio.residu2(gonio_param)\n",
    "        return sumsquare\n",
    "\n",
    "    def chi2(self, param=None):\n",
    "        \"\"\"Calculate the average of the square of the error for a given parameter set\n",
    "        \"\"\"\n",
    "        if param is not None:\n",
    "            return self.residu2(param)\n",
    "        else:\n",
    "            if self.param is None:\n",
    "                self.init_param()\n",
    "            return self.residu2(self.param)\n",
    "    def refine2(self, method=\"slsqp\", **options):\n",
    "        \"\"\"Geometry refinement tool\n",
    "\n",
    "        See https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html\n",
    "\n",
    "        :param method: name of the minimizer\n",
    "        :param options: options for the minimizer\n",
    "        \"\"\"\n",
    "        if method.lower() in [\"simplex\", \"nelder-mead\"]:\n",
    "            method = \"Nelder-Mead\"\n",
    "\n",
    "        former_error = self.chi2()\n",
    "        print(\"Cost function before refinement: %s\" % former_error)\n",
    "        param = numpy.asarray(self.param, dtype=numpy.float64)\n",
    "        print(param)\n",
    "        res = minimize(self.residu2, param, method=method,\n",
    "                       tol=1e-12,\n",
    "                       options=options)\n",
    "        print(res)\n",
    "        newparam = res.x\n",
    "        new_error = res.fun\n",
    "        print(\"Cost function after refinement: %s\" % new_error)\n",
    "\n",
    "        if new_error < former_error:\n",
    "            self.param = newparam\n",
    "        return self.param\n",
    "    \n",
    "    def integrate(self, list_of_dataset, npt=50000, radial_range=(0,100)):\n",
    "        summed = None\n",
    "        counted = None\n",
    "        param = self.param\n",
    "        for idx, ds in enumerate(list_of_dataset):\n",
    "            gonio = self.goniometers[idx]\n",
    "            gonio_param = numpy.concatenate((param[len(self.names_split)*idx:len(self.names_split)*(1+idx)],\n",
    "                                             param[len(self.names_split)*len(self.goniometers):]))\n",
    "            print(gonio_param)\n",
    "            gonio.param = gonio_param\n",
    "            mg = gonio.get_mg(position)\n",
    "            mg.radial_range = radial_range\n",
    "            images = [i.reshape(-1, 1) for i in ds]\n",
    "            res_mg = mg.integrate1d(images, 50000)\n",
    "            if summed is None:\n",
    "                summed = res_mg.sum\n",
    "                counted = res_mg.count\n",
    "            else:\n",
    "                summed += res_mg.sum\n",
    "                counted += res_mg.count\n",
    "            radial = res_mg.radial\n",
    "        res = Integrate1dResult(radial, summed/numpy.maximum(counted, 1e-10))\n",
    "        res._set_unit(res_mg.unit)\n",
    "        res._set_count(counted)\n",
    "        res._set_sum(summed)\n",
    "        return res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "multigonio = MultiGoniometer([goniometers[ds_names[i]] for i in range(9)],\n",
    "                 [\"dist\", \"poni1\", \"poni2\", \"rot1\", \"offset\"], \n",
    "                [\"scale\", \"nrj\"])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8.603112017040267e-09\n",
      "CPU times: user 7.43 s, sys: 12 ms, total: 7.44 s\n",
      "Wall time: 644 ms\n",
      "6.1395983620232986e-09\n",
      "CPU times: user 6.41 s, sys: 12 ms, total: 6.42 s\n",
      "Wall time: 541 ms\n"
     ]
    }
   ],
   "source": [
    "%time print(multigonio.chi2())\n",
    "multigonio.param = numpy.array([ 7.20594053e-01,  3.22408604e-02,  4.05228023e-03, -2.75578440e-05,\n",
    "       -8.27999414e+01,  7.20612302e-01,  3.36369797e-02,  4.02094516e-03,\n",
    "       -1.74996556e-05, -7.71999791e+01,  7.20636130e-01,  3.47920978e-02,\n",
    "        4.01341931e-03, -1.21330600e-05, -7.15999090e+01,  7.20757808e-01,\n",
    "        3.33850817e-02,  3.95036100e-03,  3.46517345e-05, -6.57999267e+01,\n",
    "        7.20813915e-01,  3.22167822e-02,  3.97128822e-03,  2.00055269e-05,\n",
    "       -6.00000525e+01,  7.20881596e-01,  3.33801850e-02,  3.97760147e-03,\n",
    "        1.47074593e-05, -5.43998157e+01,  7.21048510e-01,  3.22346939e-02,\n",
    "        4.02104962e-03, -1.69519259e-05, -4.85998856e+01,  7.21074630e-01,\n",
    "        3.08484557e-02,  4.09385968e-03, -6.91378973e-05, -4.27999030e+01,\n",
    "        7.21154891e-01,  3.20619921e-02,  4.24950906e-03, -1.81328256e-04,\n",
    "       -3.71999987e+01,  9.99038595e-01,  1.70266104e+01])\n",
    "%time print(multigonio.chi2())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 6.1395983620232986e-09\n",
      "[ 7.20594053e-01  3.22408604e-02  4.05228023e-03 -2.75578440e-05\n",
      " -8.27999414e+01  7.20612302e-01  3.36369797e-02  4.02094516e-03\n",
      " -1.74996556e-05 -7.71999791e+01  7.20636130e-01  3.47920978e-02\n",
      "  4.01341931e-03 -1.21330600e-05 -7.15999090e+01  7.20757808e-01\n",
      "  3.33850817e-02  3.95036100e-03  3.46517345e-05 -6.57999267e+01\n",
      "  7.20813915e-01  3.22167822e-02  3.97128822e-03  2.00055269e-05\n",
      " -6.00000525e+01  7.20881596e-01  3.33801850e-02  3.97760147e-03\n",
      "  1.47074593e-05 -5.43998157e+01  7.21048510e-01  3.22346939e-02\n",
      "  4.02104962e-03 -1.69519259e-05 -4.85998856e+01  7.21074630e-01\n",
      "  3.08484557e-02  4.09385968e-03 -6.91378973e-05 -4.27999030e+01\n",
      "  7.21154891e-01  3.20619921e-02  4.24950906e-03 -1.81328256e-04\n",
      " -3.71999987e+01  9.99038595e-01  1.70266104e+01]\n",
      "     fun: 6.1395983620232986e-09\n",
      "     jac: array([ 5.90883473e-08, -1.08561671e-07, -2.52646911e-08,  1.79747064e-08,\n",
      "       -1.72926662e-09,  1.79298213e-08,  9.69570013e-09,  4.03865801e-08,\n",
      "       -2.91714863e-08, -1.94683714e-10,  2.72323741e-08, -6.07769467e-08,\n",
      "        2.33525472e-08, -1.69337616e-08, -1.17130239e-09,  2.09023376e-07,\n",
      "       -5.80926751e-09,  1.58839289e-08, -1.22906173e-08, -4.71553241e-10,\n",
      "        1.47614749e-07, -1.33281402e-07, -1.82833877e-08,  1.25890469e-08,\n",
      "       -2.00339789e-09,  2.45125083e-07, -6.85051675e-08, -3.08888884e-08,\n",
      "        2.12864152e-08, -1.23765842e-09,  2.99788196e-07, -2.02647332e-08,\n",
      "       -7.85245061e-08,  5.54326079e-08, -5.67168867e-10,  2.54716680e-07,\n",
      "        1.39967174e-07, -1.44580129e-07,  1.03263413e-07,  1.46673401e-09,\n",
      "        1.30733052e-08,  8.84376917e-08, -1.94036564e-07,  1.39886310e-07,\n",
      "        7.47406914e-10, -3.89892417e-08,  6.53007231e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 49\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20594053e-01,  3.22408604e-02,  4.05228023e-03, -2.75578440e-05,\n",
      "       -8.27999414e+01,  7.20612302e-01,  3.36369797e-02,  4.02094516e-03,\n",
      "       -1.74996556e-05, -7.71999791e+01,  7.20636130e-01,  3.47920978e-02,\n",
      "        4.01341931e-03, -1.21330600e-05, -7.15999090e+01,  7.20757808e-01,\n",
      "        3.33850817e-02,  3.95036100e-03,  3.46517345e-05, -6.57999267e+01,\n",
      "        7.20813915e-01,  3.22167822e-02,  3.97128822e-03,  2.00055269e-05,\n",
      "       -6.00000525e+01,  7.20881596e-01,  3.33801850e-02,  3.97760147e-03,\n",
      "        1.47074593e-05, -5.43998157e+01,  7.21048510e-01,  3.22346939e-02,\n",
      "        4.02104962e-03, -1.69519259e-05, -4.85998856e+01,  7.21074630e-01,\n",
      "        3.08484557e-02,  4.09385968e-03, -6.91378973e-05, -4.27999030e+01,\n",
      "        7.21154891e-01,  3.20619921e-02,  4.24950906e-03, -1.81328256e-04,\n",
      "       -3.71999987e+01,  9.99038595e-01,  1.70266104e+01])\n",
      "Cost function after refinement: 6.1395983620232986e-09\n",
      "CPU times: user 1h 53min 26s, sys: 6.39 s, total: 1h 53min 32s\n",
      "Wall time: 11min 2s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20594053e-01,  3.22408604e-02,  4.05228023e-03, -2.75578440e-05,\n",
       "       -8.27999414e+01,  7.20612302e-01,  3.36369797e-02,  4.02094516e-03,\n",
       "       -1.74996556e-05, -7.71999791e+01,  7.20636130e-01,  3.47920978e-02,\n",
       "        4.01341931e-03, -1.21330600e-05, -7.15999090e+01,  7.20757808e-01,\n",
       "        3.33850817e-02,  3.95036100e-03,  3.46517345e-05, -6.57999267e+01,\n",
       "        7.20813915e-01,  3.22167822e-02,  3.97128822e-03,  2.00055269e-05,\n",
       "       -6.00000525e+01,  7.20881596e-01,  3.33801850e-02,  3.97760147e-03,\n",
       "        1.47074593e-05, -5.43998157e+01,  7.21048510e-01,  3.22346939e-02,\n",
       "        4.02104962e-03, -1.69519259e-05, -4.85998856e+01,  7.21074630e-01,\n",
       "        3.08484557e-02,  4.09385968e-03, -6.91378973e-05, -4.27999030e+01,\n",
       "        7.21154891e-01,  3.20619921e-02,  4.24950906e-03, -1.81328256e-04,\n",
       "       -3.71999987e+01,  9.99038595e-01,  1.70266104e+01])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time multigonio.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LaB6 Calibrant with 109 reflections at wavelength 7.281789761742598e-11 \n",
      " LaB6 Calibrant at wavelength 7.281789768115395e-11\n"
     ]
    }
   ],
   "source": [
    "LaB6_new = get_calibrant(\"LaB6\")\n",
    "LaB6_new.wavelength = 1e-10*hc/multigonio.param[-1]\n",
    "print(LaB6,\"\\n\", LaB6_new)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 7.20594053e-01  3.22408604e-02  4.05228023e-03 -2.75578440e-05\n",
      " -8.27999414e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.053413862261281864 area_sum=0.055214882933248166, Error= -0.033718225863472326\n",
      "area_pixel=0.045333067243413794 area_sum=0.04986384765291535, Error= -0.09994427213966664\n",
      "area_pixel=0.03918749031126367 area_sum=0.04563241935519968, Error= -0.16446393970995232\n",
      "area_pixel=0.04641997394066166 area_sum=0.05056017758649528, Error= -0.0891901329183427\n",
      "area_pixel=0.04963019502342725 area_sum=0.052784706110374724, Error= -0.06356032019335069\n",
      "area_pixel=0.041808779534353135 area_sum=0.04729034242949584, Error= -0.13111033032281305\n",
      "area_pixel=0.053529818242976646 area_sum=0.05553764984245543, Error= -0.03750865714441734\n",
      "area_pixel=0.05746249488342414 area_sum=0.05828939512131753, Error= -0.014390259935127214\n",
      "area_pixel=0.03804626259786659 area_sum=0.04468957516491201, Error= -0.17461143653615904\n",
      "area_pixel=0.0579645518625469 area_sum=0.05860457337617547, Error= -0.011041602031984604\n",
      "area_pixel=0.0514530597536762 area_sum=0.05403218600224738, Error= -0.05012580905622247\n",
      "area_pixel=0.04708587038231293 area_sum=0.05104328125237842, Error= -0.08404667552990643\n",
      "area_pixel=0.0414210821500145 area_sum=0.04727614277194664, Error= -0.1413546029707022\n",
      "area_pixel=0.057188034039880264 area_sum=0.05760891916847055, Error= -0.0073596712259208176\n",
      "[ 7.20612302e-01  3.36369797e-02  4.02094516e-03 -1.74996556e-05\n",
      " -7.71999791e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.20636130e-01  3.47920978e-02  4.01341931e-03 -1.21330600e-05\n",
      " -7.15999090e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.20757808e-01  3.33850817e-02  3.95036100e-03  3.46517345e-05\n",
      " -6.57999267e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.06406776393820302 area_sum=0.06431614060731783, Error= -0.003876780674824036\n",
      "area_pixel=0.036519974544861 area_sum=0.045063743745274665, Error= -0.23394784106211602\n",
      "area_pixel=0.06022365655235262 area_sum=0.06045501049825683, Error= -0.0038415791924405825\n",
      "area_pixel=0.06470520384919531 area_sum=0.06480584410676266, Error= -0.0015553657446454841\n",
      "area_pixel=0.042761484590993604 area_sum=0.04894851144272455, Error= -0.14468690483758498\n",
      "area_pixel=0.05556804666999149 area_sum=0.0572738285392099, Error= -0.030697171692011003\n",
      "area_pixel=0.05157759645584292 area_sum=0.054703089692101546, Error= -0.06059788456669262\n",
      "area_pixel=0.04628344743831292 area_sum=0.051193164385785, Error= -0.1060793268266329\n",
      "area_pixel=0.04441767384784612 area_sum=0.04995426406033848, Error= -0.12464836027789516\n",
      "area_pixel=0.05377034832596905 area_sum=0.05619131504982555, Error= -0.04502419640616803\n",
      "area_pixel=0.05745532746690074 area_sum=0.0586344668434077, Error= -0.020522716143011228\n",
      "area_pixel=0.04107664840957703 area_sum=0.047752702889470366, Error= -0.16252675761970906\n",
      "area_pixel=0.05946818134114551 area_sum=0.05993335889343876, Error= -0.00782229322979813\n",
      "area_pixel=0.07058082407797173 area_sum=0.07058105681613237, Error= -3.2974701512325326e-06\n",
      "area_pixel=0.046987941054872806 area_sum=0.05167050922411581, Error= -0.09965467871372943\n",
      "area_pixel=0.051123579128637076 area_sum=0.05437612755835594, Error= -0.063621297357425\n",
      "area_pixel=0.05248017980128061 area_sum=0.055180053859511885, Error= -0.05144559466934963\n",
      "area_pixel=0.047912061925078575 area_sum=0.05226569446005236, Error= -0.09086715035937463\n",
      "area_pixel=0.04572012763952671 area_sum=0.05084193350468269, Error= -0.11202518736470006\n",
      "[ 7.20813915e-01  3.22167822e-02  3.97128822e-03  2.00055269e-05\n",
      " -6.00000525e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.20881596e-01  3.33801850e-02  3.97760147e-03  1.47074593e-05\n",
      " -5.43998157e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.21048510e-01  3.22346939e-02  4.02104962e-03 -1.69519259e-05\n",
      " -4.85998856e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.21074630e-01  3.08484557e-02  4.09385968e-03 -6.91378973e-05\n",
      " -4.27999030e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.0991017473223863 area_sum=0.10463027384689139, Error= -0.05578636778744499\n",
      "area_pixel=0.07069194828200054 area_sum=0.08784192624601114, Error= -0.24260157458946852\n",
      "area_pixel=0.07363944575302739 area_sum=0.08917599048958212, Error= -0.21098128289369983\n",
      "area_pixel=0.11866235123215318 area_sum=0.12004419996868715, Error= -0.011645216213780306\n",
      "area_pixel=0.042113113396123225 area_sum=0.07678977886848182, Error= -0.8234172844497124\n",
      "area_pixel=0.10206300321222628 area_sum=0.10662320384564644, Error= -0.044680251314355705\n",
      "area_pixel=0.09032959255696227 area_sum=0.09890206075850298, Error= -0.09490210194554875\n",
      "area_pixel=0.05405730719101953 area_sum=0.0803776405557316, Error= -0.4868968643167011\n",
      "area_pixel=0.06486418102965885 area_sum=0.08504369583806178, Error= -0.3111041330989122\n",
      "area_pixel=0.07961206312065627 area_sum=0.09217586427332167, Error= -0.15781278188487957\n",
      "area_pixel=0.11567416847953638 area_sum=0.11751408489279526, Error= -0.015906026707979987\n",
      "area_pixel=0.03899188493468486 area_sum=0.07583816249914746, Error= -0.9449729764586564\n",
      "area_pixel=0.10530031424726971 area_sum=0.10890885634782618, Error= -0.03426905348148129\n",
      "area_pixel=0.08974770209027838 area_sum=0.09849411368900213, Error= -0.09745554922315022\n",
      "area_pixel=0.05474040940657332 area_sum=0.08072049604999723, Error= -0.47460526738961833\n",
      "area_pixel=0.06644918714957981 area_sum=0.08579443366184009, Error= -0.29112841468945794\n",
      "area_pixel=0.07815101996878226 area_sum=0.09155079246491357, Error= -0.17145998224314793\n",
      "area_pixel=0.11811873530334793 area_sum=0.11959505854816217, Error= -0.012498637417872821\n",
      "area_pixel=0.0413972494959971 area_sum=0.07656418842293432, Error= -0.8494994076922351\n",
      "area_pixel=0.10302869305435536 area_sum=0.10744525208257137, Error= -0.04286727218684554\n",
      "area_pixel=0.09483751702327226 area_sum=0.10192184423145179, Error= -0.07469962764251938\n",
      "area_pixel=0.04968735428679949 area_sum=0.07918713886310795, Error= -0.5937080973567899\n",
      "area_pixel=0.12624685135862634 area_sum=0.12658534425443493, Error= -0.002681198716370686\n",
      "area_pixel=0.07292481749928825 area_sum=0.08901112957273391, Error= -0.22058762195191864\n",
      "area_pixel=0.07174377634256857 area_sum=0.08841385728354262, Error= -0.23235577761304713\n",
      "area_pixel=0.12450135731947398 area_sum=0.1250951579271622, Error= -0.004769430795557527\n",
      "area_pixel=0.04788770278107535 area_sum=0.07864101722504067, Error= -0.6421964859028207\n",
      "area_pixel=0.09665547391303164 area_sum=0.10315078444549604, Error= -0.0672006485458726\n",
      "area_pixel=0.10207284410790507 area_sum=0.10684959089949136, Error= -0.04679743014250308\n",
      "area_pixel=0.042451700156050265 area_sum=0.0768864287184544, Error= -0.8111507533461285\n",
      "area_pixel=0.11913084304184807 area_sum=0.12046110661371978, Error= -0.011166407774050775\n",
      "area_pixel=0.08064791594041765 area_sum=0.09288655545895187, Error= -0.1517539464699383\n",
      "area_pixel=0.06402646673778989 area_sum=0.08456843952285309, Error= -0.32083564550250054\n",
      "area_pixel=0.05908485149852538 area_sum=0.082224048127862, Error= -0.3916265513490226\n",
      "area_pixel=0.08552527294591528 area_sum=0.09559064428749622, Error= -0.11768885377245293\n",
      "area_pixel=0.1130597812463634 area_sum=0.1152323204339288, Error= -0.019215844605530538\n",
      "area_pixel=0.03630453556874613 area_sum=0.07491578714204401, Error= -1.0635379565780083\n",
      "area_pixel=0.10811519768928335 area_sum=0.11098173966156559, Error= -0.026513774506711926\n",
      "area_pixel=0.09033065463596301 area_sum=0.09884960024462953, Error= -0.09430846751856599\n",
      "area_pixel=0.054267862709590275 area_sum=0.08066441123732206, Error= -0.486412163843463\n",
      "area_pixel=0.0660267344673997 area_sum=0.08556065653189811, Error= -0.295848677389053\n",
      "area_pixel=0.07857345851699904 area_sum=0.09182668967701964, Error= -0.16867312970770298\n",
      "area_pixel=0.12006247452697849 area_sum=0.1212559689588405, Error= -0.009940611640432457\n",
      "area_pixel=0.043405378913874415 area_sum=0.07716694788085048, Error= -0.7778199341138401\n",
      "area_pixel=0.10101357172294456 area_sum=0.10609344882377486, Error= -0.0502890553634036\n",
      "area_pixel=0.09613856114754782 area_sum=0.10276910367737876, Error= -0.06896860584021826\n",
      "area_pixel=0.0483056484857336 area_sum=0.0787464207027933, Error= -0.6301700354162506\n",
      "area_pixel=0.12487824294881023 area_sum=0.1253883621026603, Error= -0.004084932185178019\n",
      "area_pixel=0.07046401268653213 area_sum=0.08773584962849086, Error= -0.2451157162847741\n",
      "area_pixel=0.07408554985093474 area_sum=0.08955623311268268, Error= -0.20882187272519442\n",
      "area_pixel=0.12263118597297762 area_sum=0.12342299996291214, Error= -0.006456872969564248\n",
      "area_pixel=0.04610184051389865 area_sum=0.077977834716309, Error= -0.6914256317554276\n",
      "area_pixel=0.09827120932201439 area_sum=0.10420386190981694, Error= -0.06037020027261983\n",
      "area_pixel=0.09671215194481775 area_sum=0.10311234681820346, Error= -0.06617777336851678\n",
      "area_pixel=0.04760569306460383 area_sum=0.07848600072570878, Error= -0.648668377103522\n",
      "area_pixel=0.12413022185356226 area_sum=0.12469829377225909, Error= -0.004576419104180694\n",
      "area_pixel=0.06980256509773852 area_sum=0.08738524192866963, Error= -0.25189155737058655\n",
      "area_pixel=0.0746069729825436 area_sum=0.08975411958430458, Error= -0.20302588345602884\n",
      "area_pixel=0.11830304345944853 area_sum=0.11971177541148283, Error= -0.011907825114551468\n",
      "area_pixel=0.04176754779718905 area_sum=0.07662006234205823, Error= -0.8344400469499132\n",
      "area_pixel=0.10237967149596372 area_sum=0.10685275736700003, Error= -0.04369115280090212\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 7.21154891e-01  3.20619921e-02  4.24950906e-03 -1.81328256e-04\n",
      " -3.71999987e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.3162483597934198 area_sum=0.3174253016954389, Error= -0.003721574723068656\n",
      "area_pixel=0.24311057254745805 area_sum=0.2600497496702889, Error= -0.0696768427030219\n",
      "area_pixel=0.16860365236765773 area_sum=0.21967653369346593, Error= -0.3029168147226045\n",
      "area_pixel=0.09285566528839695 area_sum=0.19579635166280646, Error= -1.108609647614821\n",
      "area_pixel=0.01576774945500148 area_sum=0.18814793828945114, Error= -10.932453570903947\n",
      "area_pixel=0.06752863879084003 area_sum=0.19124575955043382, Error= -1.8320689262342347\n",
      "area_pixel=0.14373310781029858 area_sum=0.20978466196882295, Error= -0.4595430737203592\n",
      "area_pixel=0.2186034780352415 area_sum=0.24470325423963207, Error= -0.11939323399137768\n",
      "area_pixel=0.29216108377022465 area_sum=0.2964675523040342, Error= -0.014740048463115846\n",
      "area_pixel=0.2878799981328086 area_sum=0.29298295310643363, Error= -0.01772597959817564\n",
      "area_pixel=0.2141720790742454 area_sum=0.24241780051917625, Error= -0.13188330414973987\n",
      "area_pixel=0.13916339910938547 area_sum=0.20843974100945917, Error= -0.4978057617407073\n",
      "area_pixel=0.0628024143954562 area_sum=0.1908539162651179, Error= -2.0389582646193034\n",
      "area_pixel=0.02057417287076646 area_sum=0.18799678892623883, Error= -8.137513819248632\n",
      "area_pixel=0.09756650515308962 area_sum=0.1966136235495598, Error= -1.0151754256346208\n",
      "area_pixel=0.17331785333976057 area_sum=0.22152013322326974, Error= -0.2781149140418713\n",
      "area_pixel=0.24768782015379998 area_sum=0.26307840899106155, Error= -0.062137043427104736\n",
      "area_pixel=0.32077011484482654 area_sum=0.32158395824315333, Error= -0.002537154680761005\n",
      "area_pixel=0.3351439885154548 area_sum=0.33514501546596653, Error= -3.064206869080088e-06\n",
      "area_pixel=0.2622778760051361 area_sum=0.2734626246584369, Error= -0.04264465163307102\n",
      "area_pixel=0.18810753539353442 area_sum=0.22869440854779, Error= -0.21576420673071356\n",
      "area_pixel=0.112597089661854 area_sum=0.2004521249652375, Error= -0.780260267536447\n",
      "area_pixel=0.03576657783084869 area_sum=0.18854905950201395, Error= -4.271655018093185\n",
      "area_pixel=0.04773197420838926 area_sum=0.18923075728158525, Error= -2.964444388062342\n",
      "area_pixel=0.12433631227782627 area_sum=0.20352544620810403, Error= -0.6368946647969718\n",
      "area_pixel=0.1996043725727077 area_sum=0.23418135417408037, Error= -0.1732275759078259\n",
      "area_pixel=0.27356688770897364 area_sum=0.2817900736563061, Error= -0.030059142084770358\n",
      "area_pixel=0.30870886862268065 area_sum=0.31065734495751024, Error= -0.006311695363734788\n",
      "area_pixel=0.23532601277882037 area_sum=0.2552151726304691, Error= -0.08451747266181867\n",
      "area_pixel=0.1606497150495585 area_sum=0.21645063902789305, Error= -0.3473453031716903\n",
      "area_pixel=0.08461056606855522 area_sum=0.1941600618585331, Error= -1.2947495907451565\n",
      "area_pixel=0.007332538774193154 area_sum=0.1882600255178571, Error= -24.674603478462007\n",
      "area_pixel=0.07599244125652405 area_sum=0.19260768104550913, Error= -1.534563673186029\n",
      "area_pixel=0.15213168229737306 area_sum=0.21286801714864104, Error= -0.39923528047593765\n",
      "area_pixel=0.22694519825502368 area_sum=0.24981889990694206, Error= -0.1007895378610948\n",
      "area_pixel=0.30045187561808007 area_sum=0.30355525113576626, Error= -0.010329026940843773\n",
      "area_pixel=0.28385714726268674 area_sum=0.2899091102978157, Error= -0.021320453240264367\n",
      "area_pixel=0.2100425868147937 area_sum=0.24016681336221424, Error= -0.14341961315674875\n",
      "area_pixel=0.1348303695541304 area_sum=0.20700277247283105, Error= -0.5352829867437658\n",
      "area_pixel=0.0583768113827432 area_sum=0.19030045072148266, Error= -2.2598637406519515\n",
      "area_pixel=0.02517023462095125 area_sum=0.1882066162598655, Error= -6.477348506843306\n",
      "area_pixel=0.10217425061892982 area_sum=0.19774440981658253, Error= -0.9353644251729548\n",
      "area_pixel=0.17791520734201782 area_sum=0.22364028455116752, Error= -0.2570048839121967\n",
      "area_pixel=0.25227715387468663 area_sum=0.26636300595097906, Error= -0.05583483030448836\n",
      "area_pixel=0.32534669913203373 area_sum=0.32585733184571547, Error= -0.0015695032869367097\n",
      "area_pixel=0.3325208268647728 area_sum=0.332574505940386, Error= -0.00016143071734583676\n",
      "area_pixel=0.25955692012336584 area_sum=0.2715951569509286, Error= -0.046379949422427555\n",
      "area_pixel=0.1852598537926653 area_sum=0.22735970352347062, Error= -0.22724755994853388\n",
      "area_pixel=0.10962093428884856 area_sum=0.1996581937297021, Error= -0.8213509584182843\n",
      "area_pixel=0.03270177267216923 area_sum=0.18846476744745183, Error= -4.7631361252732445\n",
      "area_pixel=0.050905655057214005 area_sum=0.18960967509690219, Error= -2.72472714247161\n",
      "area_pixel=0.12750526999172962 area_sum=0.2045753610924949, Error= -0.6044463190091225\n",
      "area_pixel=0.20284220619853954 area_sum=0.23605078743082697, Error= -0.16371632834531125\n",
      "area_pixel=0.2767808299573389 area_sum=0.2843384019164127, Error= -0.027305257955323996\n",
      "area_pixel=0.3091107047459474 area_sum=0.311041079994932, Error= -0.0062449317326981335\n",
      "area_pixel=0.23571594882840685 area_sum=0.25550239591555235, Error= -0.08394191053041283\n",
      "area_pixel=0.16096577478506902 area_sum=0.2166355213576317, Error= -0.34584834351834237\n",
      "area_pixel=0.08487537174418236 area_sum=0.1942563498502238, Error= -1.2887245835661247\n",
      "area_pixel=0.007541255126128021 area_sum=0.1883390724048897, Error= -23.974499503717286\n",
      "area_pixel=0.07587563674286457 area_sum=0.1927295874102262, Error= -1.5400720927505192\n",
      "area_pixel=0.15205655202905177 area_sum=0.21297699584831323, Error= -0.40064333306480643\n",
      "area_pixel=0.22698276515797033 area_sum=0.24989298302707477, Error= -0.1009337332425213\n",
      "area_pixel=0.3005084896190553 area_sum=0.3036349158753642, Error= -0.01040378679574792\n",
      "area_pixel=0.28301025224994447 area_sum=0.28927039620193623, Error= -0.02211984867058111\n",
      "area_pixel=0.20910608233180739 area_sum=0.2396737877741661, Error= -0.14618276571149272\n",
      "area_pixel=0.1338366984023267 area_sum=0.20668548113632879, Error= -0.5443109670488975\n",
      "area_pixel=0.05732856593776603 area_sum=0.19028903236880437, Error= -2.319270755444603\n",
      "area_pixel=0.02633581865649859 area_sum=0.18833998696365073, Error= -6.151476451907305\n",
      "area_pixel=0.10334170301746326 area_sum=0.19810608231739957, Error= -0.9170003641600767\n",
      "area_pixel=0.17911164193798612 area_sum=0.2242924149012735, Error= -0.2522492255357155\n",
      "area_pixel=0.2535589826204898 area_sum=0.26731587383154576, Error= -0.05425519170680039\n",
      "area_pixel=0.3266280719613661 area_sum=0.32707163550693535, Error= -0.0013580080331298092\n",
      "area_pixel=0.2633131348180413 area_sum=0.27429164136797396, Error= -0.04169372924567242\n",
      "area_pixel=0.18902017801996607 area_sum=0.22923213673949794, Error= -0.2127389739061843\n",
      "area_pixel=0.11342920572148785 area_sum=0.20075891426654055, Error= -0.7699049639779775\n",
      "area_pixel=0.03652948116938859 area_sum=0.18868389615681366, Error= -4.165249823338012\n",
      "area_pixel=0.04716666270215342 area_sum=0.18943842789912257, Error= -3.0163627665451442\n",
      "area_pixel=0.12387038478473755 area_sum=0.2036488774743464, Error= -0.6440481542722922\n",
      "area_pixel=0.19928650128962033 area_sum=0.23423648635203115, Error= -0.17537557655055866\n",
      "area_pixel=0.2733680167453443 area_sum=0.28170080809666015, Error= -0.030481954145639048\n",
      "area_pixel=0.3151046330341387 area_sum=0.31633237117646545, Error= -0.003896287180879773\n",
      "area_pixel=0.24177139290826233 area_sum=0.25938686981480646, Error= -0.07286005467664303\n",
      "area_pixel=0.16712300479208864 area_sum=0.21924139304837004, Error= -0.31185645759014385\n",
      "area_pixel=0.0910896551757503 area_sum=0.195600147785569, Error= -1.1473365708561962\n",
      "area_pixel=0.013839860300606688 area_sum=0.18831736949485467, Error= -12.606883697128037\n",
      "area_pixel=0.06971547380450005 area_sum=0.1919289271858045, Error= -1.7530319556318605\n",
      "area_pixel=0.1460448710809601 area_sum=0.21093711727245834, Error= -0.4443308807162778\n",
      "area_pixel=0.2211077637641452 area_sum=0.2464380208952605, Error= -0.11456068615543955\n",
      "area_pixel=0.2947892935060068 area_sum=0.29874459478635623, Error= -0.01341738444197885\n",
      "area_pixel=0.2931110358344142 area_sum=0.29731957113173924, Error= -0.014358160501682777\n",
      "area_pixel=0.21932969808296576 area_sum=0.2454634010956124, Error= -0.1191525964840432\n",
      "area_pixel=0.14425529718059948 area_sum=0.2103559341545839, Error= -0.45821982461573074\n",
      "area_pixel=0.0678768532043108 area_sum=0.19170761485521115, Error= -1.8243444680348846\n",
      "area_pixel=0.015722368042034418 area_sum=0.18830140786212451, Error= -10.976656910631574\n",
      "area_pixel=0.09294335108705098 area_sum=0.19596483295523684, Error= -1.1084330472622583\n",
      "area_pixel=0.16891666467091682 area_sum=0.21997849216163964, Error= -0.3022900528506255\n",
      "area_pixel=0.24357351180874787 area_sum=0.2605144924477917, Error= -0.06955181831243516\n",
      "area_pixel=0.3168708228495447 area_sum=0.3179731509015596, Error= -0.003478793162784448\n",
      "area_pixel=0.2710631871144926 area_sum=0.27991283223707675, Error= -0.03264790478113202\n",
      "area_pixel=0.19696115396294545 area_sum=0.23316205130188028, Error= -0.18379714278961504\n",
      "area_pixel=0.1214387298301034 area_sum=0.20303492624664138, Error= -0.6719124659051822\n",
      "area_pixel=0.0446689612829303 area_sum=0.18930859299093517, Error= -3.238034365560167\n",
      "area_pixel=0.03903613195652156 area_sum=0.18885585878134378, Error= -3.8379757244311867\n",
      "area_pixel=0.11591426957792095 area_sum=0.20145300012799877, Error= -0.7379482341695316\n",
      "area_pixel=0.19150018698596227 area_sum=0.23045358088976126, Error= -0.20341177999295856\n",
      "area_pixel=0.2657337485833722 area_sum=0.2760045347974807, Error= -0.038650665445627994\n",
      "area_pixel=0.3222386194771545 area_sum=0.3229856609524451, Error= -0.002318286605443799\n",
      "area_pixel=0.2490296734347055 area_sum=0.26414082364545255, Error= -0.06068011896867032\n",
      "area_pixel=0.17448194563318253 area_sum=0.2223541778052593, Error= -0.2743678264152308\n",
      "area_pixel=0.09859402488583413 area_sum=0.1971960039311532, Error= -1.0000806758776117\n",
      "area_pixel=0.021441183690896537 area_sum=0.18837731126207918, Error= -7.785770131807607\n",
      "area_pixel=0.06218567341007741 area_sum=0.19086877457137236, Error= -2.0693367797548268\n",
      "area_pixel=0.13869416433347936 area_sum=0.20839072580829415, Error= -0.5025197837973544\n",
      "area_pixel=0.21387740728798832 area_sum=0.24236963199299888, Error= -0.1332175523646846\n",
      "area_pixel=0.2877265125863744 area_sum=0.29298711444407266, Error= -0.018283340698814\n",
      "area_pixel=0.3004402363939178 area_sum=0.303600641483933, Error= -0.010519247115328041\n",
      "area_pixel=0.2268235323436727 area_sum=0.24984623093141892, Error= -0.10150048520037716\n",
      "area_pixel=0.15189401551023707 area_sum=0.21303058804816452, Error= -0.40249493920191404\n",
      "area_pixel=0.07560254653373022 area_sum=0.19280996485282426, Error= -1.5503104550426978\n",
      "area_pixel=0.007855636670086596 area_sum=0.1883701121219128, Error= -22.978974592753957\n",
      "area_pixel=0.08524286926645885 area_sum=0.19435012991211917, Error= -1.2799576267734991\n",
      "area_pixel=0.16136464619074076 area_sum=0.21680879610280904, Error= -0.3435953985021641\n",
      "area_pixel=0.23612869121810576 area_sum=0.2557847081568589, Error= -0.08324281491315001\n",
      "area_pixel=0.3095662602127476 area_sum=0.31145228925042306, Error= -0.006092489008263765\n",
      "area_pixel=0.27737650871887354 area_sum=0.28484318767074285, Error= -0.02691893046875478\n",
      "area_pixel=0.20335720410827207 area_sum=0.2364081307812203, Error= -0.16252646085432584\n",
      "area_pixel=0.12796221102990302 area_sum=0.20484257754165658, Error= -0.6008052368975374\n",
      "area_pixel=0.05132761493532456 area_sum=0.18980200252948415, Error= -2.697853538853197\n",
      "area_pixel=0.032348638250020656 area_sum=0.18852647031578124, Error= -4.827956925378794\n",
      "area_pixel=0.10935502368892713 area_sum=0.19961445968068325, Error= -0.8253798769090792\n",
      "area_pixel=0.18502779705186612 area_sum=0.22726292353672958, Error= -0.2282636833914437\n",
      "area_pixel=0.25940934304914265 area_sum=0.2715159237570396, Error= -0.04666979440907595\n",
      "area_pixel=0.33239200799186364 area_sum=0.3324826590476647, Error= -0.0002727233315528516\n",
      "area_pixel=0.32806663025375826 area_sum=0.32842573916217543, Error= -0.0010946218703785946\n",
      "area_pixel=0.25501563476734646 area_sum=0.2683640057705975, Error= -0.05234334363627901\n",
      "area_pixel=0.1805523038249106 area_sum=0.22502046808368545, Error= -0.24628965300768216\n",
      "area_pixel=0.10484839677616975 area_sum=0.19849448753573104, Error= -0.8931571072038123\n",
      "area_pixel=0.027780706427876112 area_sum=0.18839753156619068, Error= -5.781596143183247\n",
      "area_pixel=0.055901844324466765 area_sum=0.19019891689204785, Error= -2.4023728410120233\n",
      "area_pixel=0.13245086773965653 area_sum=0.20621132104509224, Error= -0.5568891662561106\n",
      "area_pixel=0.2077403838853087 area_sum=0.23890216466206007, Error= -0.15000348123913876\n",
      "area_pixel=0.28168838271031404 area_sum=0.2882412679482228, Error= -0.023262887787061096\n",
      "area_pixel=0.3036679509148854 area_sum=0.3063570335937469, Error= -0.008855339099038458\n",
      "area_pixel=0.23013353029770656 area_sum=0.2519202767485691, Error= -0.09467002232433774\n",
      "area_pixel=0.15527976347109984 area_sum=0.21418418731666777, Error= -0.37934385349917815\n",
      "area_pixel=0.07912305701536582 area_sum=0.1932629017618802, Error= -1.442561107369098\n",
      "area_pixel=0.004270495138143815 area_sum=0.188569657946917, Error= -43.15639213884679\n",
      "area_pixel=0.08171443432242143 area_sum=0.19372282563559082, Error= -1.370729568673471\n",
      "area_pixel=0.15785913032920718 area_sum=0.21533079423596513, Error= -0.36406930525275116\n",
      "area_pixel=0.23267664257012655 area_sum=0.25358055258180084, Error= -0.08984103337907696\n",
      "area_pixel=0.30615817813110624 area_sum=0.30851641426865656, Error= -0.007702672363501097\n",
      "area_pixel=0.2827987436141157 area_sum=0.28907071497267317, Error= -0.022178215074094083\n",
      "area_pixel=0.20893762266676674 area_sum=0.23950680288442894, Error= -0.1463076866075804\n",
      "area_pixel=0.13369499035069055 area_sum=0.20655228590143038, Error= -0.5449515749216217\n",
      "area_pixel=0.05717610973642451 area_sum=0.19016647747794538, Error= -2.3259779015150146\n",
      "area_pixel=0.026447626860885975 area_sum=0.18843138062414674, Error= -6.124698999093276\n",
      "area_pixel=0.10350506590110342 area_sum=0.19822878807513072, Error= -0.9151602518135057\n",
      "area_pixel=0.17925718032221027 area_sum=0.2244265387471306, Error= -0.25198074823964944\n",
      "area_pixel=0.2537146360561806 area_sum=0.2674670217120998, Error= -0.054204147895015264\n",
      "area_pixel=0.32676999984669663 area_sum=0.32721468540180676, Error= -0.0013608518386594483\n",
      "area_pixel=0.33228527791060714 area_sum=0.33234618542055966, Error= -0.00018329885192478853\n",
      "area_pixel=0.2593125452043026 area_sum=0.27137676375823494, Error= -0.04652385230505303\n",
      "area_pixel=0.1850399926603572 area_sum=0.22717013127999455, Error= -0.22768125967756417\n",
      "area_pixel=0.10939551576598205 area_sum=0.19950410594224735, Error= -0.8236954645291387\n",
      "area_pixel=0.0324803256059738 area_sum=0.188350920570647, Error= -4.798923411531484\n",
      "area_pixel=0.05116354009351909 area_sum=0.1897881212412188, Error= -2.7094407637609765\n",
      "area_pixel=0.12777032001296362 area_sum=0.20477853245211183, Error= -0.6027081440457763\n",
      "area_pixel=0.20311429628934263 area_sum=0.2362889406485346, Error= -0.16332993277801403\n",
      "area_pixel=0.27710401884821323 area_sum=0.2846414590272934, Error= -0.02720076096481611\n",
      "area_pixel=0.3064926910713126 area_sum=0.3087457943571933, Error= -0.007351246380477145\n",
      "area_pixel=0.23304752811979768 area_sum=0.25371599247601223, Error= -0.08868776477899379\n",
      "area_pixel=0.15832508960892255 area_sum=0.2153977937851785, Error= -0.36047795278203065\n",
      "area_pixel=0.08224645176300527 area_sum=0.19358374996717953, Error= -1.3537033612707674\n",
      "area_pixel=0.0048831529783157634 area_sum=0.18833217194333302, Error= -37.567739487098805\n",
      "area_pixel=0.07843739213718948 area_sum=0.1931715652964236, Error= -1.4627484422042032\n",
      "area_pixel=0.15459365008597103 area_sum=0.21394863116266327, Error= -0.38394190863392097\n",
      "area_pixel=0.2294679376169313 area_sum=0.25152957536458437, Error= -0.09614257214653789\n",
      "area_pixel=0.30292545925210845 area_sum=0.3057232072472447, Error= -0.009235763814780104\n",
      "area_pixel=0.28499139748399926 area_sum=0.2907294346234526, Error= -0.020134071379384253\n",
      "area_pixel=0.2112129043374864 area_sum=0.2407098282028552, Error= -0.13965493234370352\n",
      "area_pixel=0.1360951441490741 area_sum=0.20730767684290902, Error= -0.5232554999598743\n",
      "area_pixel=0.05965767815867906 area_sum=0.1903207599058092, Error= -2.190213997259314\n",
      "area_pixel=0.023880824440844606 area_sum=0.1883405233019016, Error= -6.88668430474172\n",
      "area_pixel=0.10089743077433866 area_sum=0.1975985528551173, Error= -0.9584101531490405\n",
      "area_pixel=0.1766548864688673 area_sum=0.22318010267156244, Error= -0.2633678418564125\n",
      "area_pixel=0.25109088769037413 area_sum=0.2655975809287263, Error= -0.057774670247056986\n",
      "area_pixel=0.32417700640380787 area_sum=0.32478500869308446, Error= -0.0018755256457617078\n",
      "area_pixel=0.33145182584890165 area_sum=0.3315266847325048, Error= -0.00022585147452852428\n",
      "area_pixel=0.2585468538588884 area_sum=0.2707660793719313, Error= -0.0472611649713285\n",
      "area_pixel=0.18431353138899453 area_sum=0.22673224761704203, Error= -0.230144341049614\n",
      "area_pixel=0.10871529186361073 area_sum=0.19921525714434177, Error= -0.832449269365603\n",
      "area_pixel=0.031879361127160166 area_sum=0.18817886639838455, Error= -4.902843085461407\n",
      "area_pixel=0.0516786050759066 area_sum=0.18972920865569384, Error= -2.6713299125821153\n",
      "area_pixel=0.12821845710443824 area_sum=0.20480976716609148, Error= -0.5973501147285452\n",
      "area_pixel=0.20348000269607525 area_sum=0.23646917599420864, Error= -0.1621248911983118\n",
      "area_pixel=0.27742223519467046 area_sum=0.2848668964954997, Error= -0.026835128394107295\n",
      "area_pixel=0.30448904708695324 area_sum=0.3069801039112242, Error= -0.008181104864371699\n",
      "area_pixel=0.23109311817280087 area_sum=0.25240391903066006, Error= -0.09221737551666921\n",
      "area_pixel=0.1563911444396311 area_sum=0.21450563771866094, Error= -0.37159708426753507\n",
      "area_pixel=0.08034023396766088 area_sum=0.19312989938141578, Error= -1.403900136252476\n",
      "area_pixel=0.003030390955018447 area_sum=0.18826638002902615, Error= -61.12610281100846\n",
      "area_pixel=0.08016458138626348 area_sum=0.19330112071777367, Error= -1.411303313446811\n",
      "area_pixel=0.15625257357013567 area_sum=0.2146009744277408, Error= -0.3734236148847482\n",
      "area_pixel=0.23094086131234093 area_sum=0.25241853923906143, Error= -0.09300077000090755\n",
      "area_pixel=0.3043974758491643 area_sum=0.3069515382822804, Error= -0.008390550631180861\n",
      "area_pixel=0.2794759217164895 area_sum=0.2863588885133661, Error= -0.024628120929354843\n",
      "area_pixel=0.2056873359875837 area_sum=0.23752623815656224, Error= -0.15479271981479928\n",
      "area_pixel=0.1305269986732256 area_sum=0.20527723159311873, Error= -0.5726802399481381\n",
      "area_pixel=0.05410651131387567 area_sum=0.1895974495526617, Error= -2.5041521796294273\n",
      "area_pixel=0.029328670887437625 area_sum=0.18822537933908215, Error= -5.417794384937672\n",
      "area_pixel=0.10622409484210493 area_sum=0.19865334343013114, Error= -0.8701344899706244\n",
      "area_pixel=0.18179639942024295 area_sum=0.22559809131176356, Error= -0.2409381705644678\n",
      "area_pixel=0.25606986659449404 area_sum=0.26906495574232875, Error= -0.05074821696382342\n",
      "area_pixel=0.32897514851033804 area_sum=0.32921667662545373, Error= -0.0007341834670775917\n",
      "area_pixel=0.324203523021545 area_sum=0.32475121655333133, Error= -0.0016893509567135576\n",
      "area_pixel=0.2512669572231374 area_sum=0.26555627768050605, Error= -0.05686907906748367\n",
      "area_pixel=0.17697580562618498 area_sum=0.22307486174973945, Error= -0.26048225044346823\n",
      "area_pixel=0.10136939449070326 area_sum=0.19729598245497995, Error= -0.9463072009675886\n",
      "area_pixel=0.024478376357279785 area_sum=0.18793028725846134, Error= -6.6774000250458405\n",
      "area_pixel=0.05889322163771027 area_sum=0.19029184769810842, Error= -2.231133268081594\n",
      "area_pixel=0.13523648926715737 area_sum=0.20704031204379167, Error= -0.5309500650729485\n",
      "area_pixel=0.21030702373043653 area_sum=0.2402176739630025, Error= -0.14222373414833878\n",
      "area_pixel=0.28401961730821057 area_sum=0.28994393843399036, Error= -0.020858844828844585\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1min 23s, sys: 92 ms, total: 1min 23s\n",
      "Wall time: 7.48 s\n"
     ]
    }
   ],
   "source": [
    "%time res = multigonio.integrate([data[ds_names[i]] for i in range(9)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/mntdirect/_scisoft/users/jupyter/jupy35/lib/python3.5/site-packages/matplotlib/pyplot.py:537: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).\n",
      "  max_open_warning, RuntimeWarning)\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOydebyVVb3/n3NQkUE9TqB0GSz1qqSZU1nhUUTN6t4ueC27cW+TEg7VLQd+qXkckOuYhmYYAplzmEOiMpiAaWrgXKChgXIsZPAgiEzC9/fHie0+ctbzrPVZ37XWwz6f9+u1X69c61nf74fv3tve0d7PzoQQQgghhJAaJEsdgBBCCCGEkBBQdAkhhBBCSE1C0SWEEEIIITUJRZcQQgghhNQkFF1CCCGEEFKTUHQJIYQQQkhNQtElhBBCCCE1CUWXEEIIIYTUJBRdQgghhBBSk1B0CSGEEEJITULRJYQQQgghNQlFlxBCCCGE1CQUXUIIIYQQUpNQdAkhhBBCSE1C0SWEEEIIITUJRZcQQgghhNQkFF1CCCGEEFKTUHQJIYQQQkhNQtElhBBCCCE1CUWXEEIIIYTUJBRdQgghhBBSk1B0CSGEEEJITULRJYQQQgghNQlFlxBCCCGE1CQUXUIIIYQQUpNQdAkhhBBCSE1C0SWEEEIIITUJRZcQQgghhNQkFF1CCCGEEFKTUHQJIYQQQkhNQtElhBBCCCE1CUWXEEIIIYTUJBRdQgghhBBSk1B0CSGEEEJITULRJYQQQgghNQlFlxBCCCGE1CQUXUIIIYQQUpNQdAkhhBBCSE1C0SWEkCqyLJNvfOMbqWOUFs6HELIlQdElhJSOUaNGyQknnCB9+/aVLMvkX//1X43XNjY2SpZllce2224ru+22mxx55JFywQUXyPz58516+4rc9OnTpampSVpaWuAaKWlpaZGmpiaZPn16u/sUXULIlgRFlxBSOrIsk5133lmOPfZY6d69e6Hobr311nLLLbfILbfcIuPHj5fLL79cBg8eLNtss4107txZfvazn1n3Xr16taxbtw7O3tTUJFmWOQt2WZg/f75kWSZNTU3t7vvOhxBCYkLRJYSUjtdee63yn/v27Vsoup07dzbW2XfffSXLMvnNb36jnrM9yiS677zzjvOZItElhJAtCYouIaTU+IiuiMicOXOkvr5e9txzT6t+7f1f85vW/vjHP8oRRxwhXbt2lZ122km+853vyMqVK9tkqf4YxaZHtTQuX75czjnnHPnYxz4m22yzjeyyyy5y0kkntZH7Tbzxxhvyla98RXbYYQfp3r27DBo0SJ577jlpbGyUvn37trm2b9++0tjYKM8995x8/vOflx122EEaGhpERGTFihVy3nnnyWGHHSY777yzbLPNNvKxj31MRowYIatWrarUmDBhQrv5q3uZProwYcIEOfjgg6VLly7SvXt3OfLII2XKlCmbXbcp59y5c+ULX/iCdO/eXbbffns54YQT5B//+EfOM0MIIe5QdAkhpcZXdEVEjjjiCMmyTF5++eXCfibR/cQnPiE77bSTnHnmmTJmzBg56aSTJMsyOeWUUyrXTZ06VQYPHixZlsk111xT+TjFCy+8ICKtkrvffvtJt27d5Hvf+56MGTNGLrzwQunZs6fssssusmDBgkqtt99+W/r06SOdOnWS4cOHyw033CAnn3yy7LjjjrLnnnu2K7p77LGHNDQ0yHe+8x0ZM2aMjBo1SkRE5s6dKz179pTTTjtNrr32Wrn++uvlxBNPlLq6Ojn22GMrNV577TW55pprJMsyGTx4cCX/vffemzufH//4x5JlmRx88MFy1VVXyciRI2WPPfaQuro6ufXWWzfLueeee0rPnj1l+PDh8otf/EKGDx8udXV1cswxxxQ+P4QQ4gJFlxBSajRE93vf+55kWSa/+93vCvuZRLeurk6eeuqpNutf+MIXZKuttmrzt7p5H134/ve/L507d5ZnnnmmzfqCBQtku+22a9N3xIgRkmWZjBs3rs21P/vZzzb7W1YRqXxxb+zYsZv1Xbt2bbufqz3//PMlyzJ5+umnK2tFH1348HxeeeUVqaurk0996lOyZs2ayvrSpUtlt912kx133FHefffdzXLeddddbeqedtpp1v9jhBBCbKHoRmDevHkybNgw2X///aW+vl4aGxuD1rnzzjtl8ODBsttuu0mWZTJhwgQ4OyGp0RDd8847T7Is2+xvF9vDJLqf+cxnNrv2qquukizL5KWXXqqsmUR348aNsvPOO8vAgQNlyZIlmz2OOeYY2X333SvX77PPPrLrrrvK+++/36bO2rVrZfvtt29XdHfaaafNrv8w69evl7fffluWLFkiM2bMkCzLZPTo0ZV9V9G94oorJMsy+e1vf7vZtRdffLFkWSYPPPBAm5y9evXa7Nq77757s2sJIcQXim4E7rvvPundu7eceOKJsvfee8Oia1vnP//zP+Wggw6Sb3/72xRdssVTlr/RHTp06GbXbvpM64wZMyprJtF9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VXRNyH10Lw9X2UQyaPawye9SN1Qv9KzmGppNs18siYqZB50XMnffLInlskxZKLpmstQBahWKrgWovORA0fWsVXRNyH10Lw9X2UQyaPawye9SN1Qv9KzmGppNs18siYqZB50XMnffLInlskxZKLpmstQBahWKrgWovORA0fWsVXRNyH10Lw9X2UQyaPawye9SN1Qv9KzmGppNs18siYqZB50XMnffLInlskxZKLpmstQBahWKrgWovORA0fWsVXRNyH10Lw9X2UQyaPawye9SN1Qv9KzmGppNs18siYqZB50XMnffLInlskxZKLpmstQBahWKrgUbNoisXNn62LBBpeTI370k+/5wouz7w4myZu26OJlcz7hcrzkjm1pF14TcR/fyMJ1zXdes5fv8u9QN1Qs9q7mGZtPsh2QK2UsjDzovZO6+WZAZhHqOEmdpfuUVOocBim4gKLppqP4J4NXr3k8dhxBCCAkOncNMTYvu3LlzZdCgQdK1a1fp2bOnnH322bJ27drCcwsWLJCTTjpJdtttN+nevbsccsghcs899zj15osuDZc+OIeiSwghpENB5zBTs6L79ttvy+677y5HHHGETJ48WcaNGyc77LCDnH766bnn1qxZI/vss4/ss88+ctddd8nUqVPlv//7v6Wurk4eeeQR6/580VmwcqXIPfe0PlauVCl5xd2zZNjgc2XY4HNl9dvL42RyPeNyveaMbGoVXRNyH93Lw3TOdV2zlu/z71I3VC/0rOYamk2zH5IpZC+NPOi8kLn7ZkFmEOo5SpyleexYOoeBmhXdUaNGSffu3WXZsmWVtRtvvFE6deokb775pvHck08+KVmWyfTp0ytrGzZskH79+smwYcOs+1N0LUC/YJRDmy+jzeWX0ZxrFV0Tch/dy8P1C2FIBs0eNvld6obqhZ7VXEOzafaL9UWnmHnQeSFz982S+AtgZcrCL6OZyVIHCMWAAQNk8ODBbdZaWlqkrq5OJkyYYDz32GOPSZZl8uyzz7ZZ33///eWUU06x7k/RtQCVlxwoup61iq4JuY/u5eEqm0gGzR42+V3qhuqFntVcQ7Np9oslUTHzoPNC5u6bJbFclikLRddMljpAKHbddVc577zzNlvv1auXjBgxwnhu/fr10r9/fzn++OPlb3/7m7S0tMjo0aOlc+fO8vTTT1v3p+hagMpLDhRdz1pF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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = jupyter.plot1d(res, calibrant=LaB6_new)\n",
    "ax.figure.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/mntdirect/_scisoft/users/jupyter/jupy35/lib/python3.5/site-packages/matplotlib/pyplot.py:537: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).\n",
      "  max_open_warning, RuntimeWarning)\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://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",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzde3xU9Z3/8RMSLgkJibgkQEqhLdBVLipbu9WQjA1ZLVVrSWWrFGvtQnHLtusuUKwgcatNC2lriVblkmRbUfoQdhUvNfECVS5RcXW9gbuglIv1J0gCXgkI798f2ZlmMvOdOZOZ78lcXs/H4zyoX2ZO5iSfkvd853O+X0cAAABAGnJ6+wUAAAAANhB0AQAAkJYIugAAAEhLBF0AAACkJYIuAAAA0hJBFwAAAGmJoAsAAIC0RNAFAABAWiLoAgAAIC0RdAEAAJCWCLoAAABISwRdAAAApCWCLgAAANISQRcAAABpiaALAACAtETQBQAAQFoi6AIAACAtEXQBAACQlgi6AAAASEsEXQAAAKQlgi4AAADSEkEXAAAAaYmgCwAAgLRE0AUAAEBaIugCAAAgLRF0AQAAkJYIugAAAEhLBF0AAACkJYIuAAAA0hJBFwAAAGmJoAsAAIC0RNAFAABAWiLoAgAAIC0RdAEAAJCWCLoAAABISwRdAAAApCWCLgAAANISQRcAAABpiaALIKk5jqOrr766x8+/+uqr5Tj8UwcAmYh//QGEtWnTJjmOI8dx9L3vfS/sYz744AMVFBTIcRx9/vOft/I6UiXo/uEPfwh8v1pbW+M6l/81hztKSkoS9IqT0+uvv67Fixfri1/8ok4//XQVFBTorLPOUm1trT788MOQx69atcr4vfrWt74V9mu0tLRo8uTJGjhwoAoLC3XppZfq1VdftX1pAHoBQRdAWP6gO2DAAA0aNEgfffRRyGOampoCj8nkoPvBBx9o5MiRys/PT2jQvf3223X33XcHHevXr0/Qq05O8+bNU0FBgWbOnKn6+nrdcccduvzyy+U4js455xx9/PHHQY/3B90bb7wx5Hu1devWkPNv2LBBffr00cSJE3Xbbbdp2bJlGjFihAYNGqTXXnvNq8sE4BGCLoCw/EH3yiuvlOM4+t3vfhfymMmTJ+v888/XyJEjMzroXnfddSotLdW//uu/JjTovv322zE/9+TJk/rggw/i+vq96bnnntPRo0dDxhcuXCjHcXTnnXcGjfuD7ubNm6Oe+/jx4yotLdWnP/1pvffee4HxN998U7m5ubrooovivwAASYWgCyAsf9D92c9+pr/5m7/RBRdcEPT3//M//yPHcbR69Wpj0N2yZYsuuugiFRYWasCAAZo4caLq6+t16tSpkMc+88wzqqioUG5urk4//XRdddVVOnjwYEjQ9b+upqamkHOEC7WmoPvnP/9Z1157rUaMGKG+fftq2LBhmj17tt555x2X36FO27dvV3Z2ttatW6eamhpPg64/5G3cuFH/9m//ps9+9rPKycnRbbfdJkl69NFHNX36dI0aNUr9+/dXUVGRLrzwQj399NMh5yorK9PnPvc57dmzR1//+tc1aNAgFRUV6bvf/a4++OADffLJJ7r55psD55o0aVLY6zx58qRuu+02nXPOOcrNzVV+fr4qKyv1xz/+Ma7vyQsvvCDHcTR37tyw34PNmzfrvffeU0dHh/EcLS0tchxHt9xyS8jffetb31KfPn30//7f/4vrdQJILgRdAGF1Dbq/+c1vlJWVpTfeeCPw9wsXLtTAgQP1/vvvhw26jzzyiHJycjR06FDV1NTo17/+tcrLy+U4jmbPnh302Oeee065ubk67bTTtGjRItXX16uyslKTJk2yEnT37t2r4cOHa/DgwfrRj36klStXauHChSooKNDo0aN15MgRV9+jEydO6Oyzz9bUqVMlKeFB97XXXtOhQ4eCjq5Bzh/yzj77bJ155pmqra3VnXfeGQiV06dP19/93d/ppptu0qpVq1RTU6PS0lLl5OSEfKxfVlam4uJijRo1St/97nd155136jvf+Y4cx9GMGTP0ve99T1/84hf1q1/9Sj/72c80ePBgnX766Xr//feDznPFFVeoT58++vu//3vddttt+sUvfqGzzz5b2dnZevjhh3v8PXnwwQflOI5+8pOfBI37vweDBg0K9OaOGzdOK1euDDnHzTffHHhj0N1vfvMbOY6jRx55pMevEUDyIegCCKtr0G1vb9eAAQO0ePFiSdInn3yiYcOG6ZprrpGkkKD7ySefaOTIkSooKND+/fuDxr/yla/IcZygoFVWVqbs7Gy98sorgbGTJ0/q0ksvtRJ0v/a1r+n000/X3r17g8b9s7M1NTWuvkc///nPlZubqzfffFNS4oNuuGPdunWBx/lD3hlnnBH2Rq1wLQx//vOfddppp+nSSy8NGi8rK5PjOFq+fHnQ+KWXXqqsrCx96Utf0okTJwLj//Ef/xGY0fe777775DiOVqxYEXSO48eP6+yzz9bo0aNj+0b8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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "28457\n",
      "68 60\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(*calc_fwhm(res, LaB6_new, 10, 95), \"o\", label=\"FWHM\")\n",
    "ax.plot(*calc_peak_error(res, LaB6_new, 10, 95), \"o\", label=\"error\")\n",
    "ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "ax.set_xlabel(res.unit.label)\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total run time:  1576.358293056488\n"
     ]
    }
   ],
   "source": [
    "print(\"total run time: \", time.time()-start_time)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion\n",
    "The calibration works and the FWHM of every single peak is pretty small: 0.02°. \n",
    "The geometry has been refined with the wavelength: \n",
    "The goniometer scale parameter refines to 0.999 instead of 1 and the wavelength is fitted with a change at the 5th digit which is pretty precise."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "00be1d22c3714f99b4998fbfa214c8a7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "013e6a7942fb40a6b72992b3f85f561a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0150e71008d34e71a80301d2a9d1e76b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0205d5daad574287a5e36dafcec7ecab": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_61007b90b4d04930a85fe7b55b9c65c1",
       "max": 9,
       "style": "IPY_MODEL_e87923908dee47598e73e14d161d2349"
      }
     },
     "03c04b2b16674d1691bb790f76a8b467": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "040f091b7afb4b5faedad29670cde2c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_a7e32f3234924ddaa85afa83a12f29de",
       "max": 9,
       "style": "IPY_MODEL_dcb97e7e3ff84fd1972570d86608ae86"
      }
     },
     "04a886f335d14bc08afd4308ce6472a5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0507af15cbd64bc3954c8955bbd5a1de": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_ce406a83f91a4492b820d715c0f66df2"
      }
     },
     "070af2d9d61f4e0ba8b84f45dd383ea5": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_e7dedbc092f0422e943528d878bc7b91"
      }
     },
     "08239fa193184ee28f28f29951ff2ab6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0cbd50d48b8a476ca67f7eff91ed942d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0d938ccb67e74edea9aa8f55108d8943": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_1161c0efee034045b4716939c217f8b2"
      }
     },
     "0dd43bfdb5664d78a53630b07bf966e7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1161c0efee034045b4716939c217f8b2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1639c8b38d5e4c0091a402ac212117e3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1ab6a052f2cb4341b0e7bb59593027cc": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1bbcc83ae38a4b6dadc93d0049db98c5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1c514eb48a154c7688c4205f96328493": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_74c1ea6a280f41baa91ca8f9ef727774"
      }
     },
     "2179b3cb4dbb4dd98728e17d9070ccf9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "25942cb3e2494e15803c2b1d32b6d4ff": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2774ca85f5ed480d8593321207297a92": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "28357404eecc40c88018a9308d195bf2": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_0dd43bfdb5664d78a53630b07bf966e7"
      }
     },
     "2bf4b349fc094ce487b5efb81aa42380": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_5f991c83f92345fbab1c3b19535c123f"
      }
     },
     "307fd8cc829246458237712078718fdb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "394ca8987deb4b07a4c7a866e836c679": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3b863574b18f49b893cff8153211bf06": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3d199ff19a02415eae116528c5dc16f6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "41e0e4a35d294726b8fcda341f21e775": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_307fd8cc829246458237712078718fdb"
      }
     },
     "425b83359dde4380ac0a4e4cfeb0283e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_8559ac90ab924f8885feab7a2f46e293",
       "max": 500,
       "style": "IPY_MODEL_4343b6421068418db324226a69e2a33c",
       "value": 214
      }
     },
     "4343b6421068418db324226a69e2a33c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "44a238152860438585576e2a18626c93": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4bb61694d54843b6b13421e600465348": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4e7a7469400d4b328755ece3a70e9953": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_856dd89d9a4445e1b11c285ebeb2de20"
      }
     },
     "5285e75b3f3b4edeb2f45474250f267d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "55033a5e8dd947e2886556cdb9d8e92d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "591b1e4e24ff4a6f8b1c44e2b64cecf0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5a453b3b96bc41d4a62affc50ba873d8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5b12719654274f1d842eeb2b60d298d2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5c339a2d07da4e2abe205b8f3282fdbf": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_1ab6a052f2cb4341b0e7bb59593027cc"
      }
     },
     "5f991c83f92345fbab1c3b19535c123f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5fb082dca8264d6191ad7f07de0c4f9a": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_d18b801643a54baf97048a81b491e1c8"
      }
     },
     "61007b90b4d04930a85fe7b55b9c65c1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "62c60c6ad25d44a3aeeb64cd2280576f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "62ce0c23ef574f639f9de0920030a78e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "6416199483114ebf9d034232e8033fc4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "644063599cd94a41961de434b1923475": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "6563060642ab4ebe84e9c9c17d928752": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "65d46021945a4d2d833e8a988972ee28": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "694bb2d7e05b4500ab105b7afae0918c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_0205d5daad574287a5e36dafcec7ecab",
        "IPY_MODEL_809d081102924a8695397a137bb45d4d",
        "IPY_MODEL_effe69d56e374ee28668c85a8959bcec"
       ],
       "layout": "IPY_MODEL_08239fa193184ee28f28f29951ff2ab6"
      }
     },
     "6ce9a736558a4ab99c33f65e0cd932f3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "6f9689536e214a4190553796ba6bf091": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "709c2bb5cb9a47d58ad71ffaa9b14949": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_040f091b7afb4b5faedad29670cde2c5",
        "IPY_MODEL_908f72e622ba483194fa6e33551e491b",
        "IPY_MODEL_8bccbcf68c444b0fbab1bbc43e5df7af"
       ],
       "layout": "IPY_MODEL_591b1e4e24ff4a6f8b1c44e2b64cecf0"
      }
     },
     "709d08c580cb4bb7a1b3144179de759e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "73761ce121a94af293289bbd1e5bcf02": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "74c1ea6a280f41baa91ca8f9ef727774": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "74d599e1b8bf492a844975dcd563213b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_841889510bc64a6e9e17f3c76ab6327a",
       "max": 500,
       "style": "IPY_MODEL_73761ce121a94af293289bbd1e5bcf02",
       "value": 250
      }
     },
     "79e01aa171324ebfaa812305d8598e3a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_cca78b86c1d140d79ec5003709dffd15",
        "IPY_MODEL_425b83359dde4380ac0a4e4cfeb0283e",
        "IPY_MODEL_2bf4b349fc094ce487b5efb81aa42380"
       ],
       "layout": "IPY_MODEL_bf8985f8594c4bbe91d810b4780a4704"
      }
     },
     "7a549c9118e34ac0bb49bc543eeaa5b1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7dbf697ea64a4eb9be2fe116cac9d0f3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7fd8c56dacd64c78879a1667e5804bd3": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_b941d34d7b8b426ebd8a63fbadbc598b"
      }
     },
     "80774e3ee4d5422a89f2803e0beb04a0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "809d081102924a8695397a137bb45d4d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_5b12719654274f1d842eeb2b60d298d2",
       "max": 500,
       "style": "IPY_MODEL_644063599cd94a41961de434b1923475",
       "value": 480
      }
     },
     "8330adbf332a4074b6a91b1d176d13ea": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_e6b238f1fb434d7e84fdbb96a4022d42"
      }
     },
     "841889510bc64a6e9e17f3c76ab6327a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "84634a8f7dce472abe79b0e24069754f": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_6416199483114ebf9d034232e8033fc4"
      }
     },
     "84f2c61385d543caaf09088fbed49402": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8559ac90ab924f8885feab7a2f46e293": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "856dd89d9a4445e1b11c285ebeb2de20": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "89f8a8891a414ef7b84886a9fa0eb873": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_0150e71008d34e71a80301d2a9d1e76b"
      }
     },
     "8ba0dc114726493fa636d40f818258a2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8bccbcf68c444b0fbab1bbc43e5df7af": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_d25a2af2da9c4b2ab62016079e11fbb9"
      }
     },
     "8f28275fdbba43b5a17d6553abfdce23": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "908f72e622ba483194fa6e33551e491b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_b15d4bf3f52f4f1da53233143ef0b5bd",
       "max": 500,
       "style": "IPY_MODEL_c3ab50d1c01649fdb62018d0abc10db8",
       "value": 495
      }
     },
     "90f5051569e9467891e502389a4b803b": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_d8fe52e2b5e048ffbc7495127f6c79d6"
      }
     },
     "934ad7f899ef41368b7f233e00506642": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_fff31fb004ae4bf6b7ccc8b2ac205de8",
        "IPY_MODEL_74d599e1b8bf492a844975dcd563213b",
        "IPY_MODEL_8330adbf332a4074b6a91b1d176d13ea"
       ],
       "layout": "IPY_MODEL_03c04b2b16674d1691bb790f76a8b467"
      }
     },
     "96cb6816c0c94655ac5f1872cc7aee1f": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_f9492ba5e81e40fabeedf91cc29a812f"
      }
     },
     "9968edfd33d0425ab43cf581e4ef50c7": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_2179b3cb4dbb4dd98728e17d9070ccf9"
      }
     },
     "a60aa3bc8aa84668b11742bd9e7c495a": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_a927a844201b428b8140b5ee06629b77"
      }
     },
     "a61d1c1bdc924b2e965f5a59653698df": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a7e32f3234924ddaa85afa83a12f29de": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a927a844201b428b8140b5ee06629b77": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ac90715928094acba545a86e996c384c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b15d4bf3f52f4f1da53233143ef0b5bd": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b2306b33f90c4473bd7ec0198a32edfa": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b73f32f580914908ae1c03cf4bb05e3f": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_e74470112e0b4253a6995395971459bf"
      }
     },
     "b7f38bb28e44465e8cb468415685207e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b941d34d7b8b426ebd8a63fbadbc598b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ba8f82017a424118a591f055eab51c8b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "bebfe94de147496fa38f9f0954738683": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "bf8985f8594c4bbe91d810b4780a4704": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c084be3c23c648058c01b4712b75bae1": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_1639c8b38d5e4c0091a402ac212117e3"
      }
     },
     "c1c0ab3ef278440c83c1f6494b3eec33": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_62c60c6ad25d44a3aeeb64cd2280576f"
      }
     },
     "c3ab50d1c01649fdb62018d0abc10db8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "c422f02a19b24cf59ffa27e59e6cbe76": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_3b863574b18f49b893cff8153211bf06"
      }
     },
     "c474be73f07e4a6bbc12f49e07924ce1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c516afff7ba44410b69f48d37b46cfa2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c5576a2c1810481d879da75b01c08534": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c826fa00cb0447e8b03b01940c449536": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c9cb9135eace43da87b31436944104aa": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_7a549c9118e34ac0bb49bc543eeaa5b1"
      }
     },
     "cca78b86c1d140d79ec5003709dffd15": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_80774e3ee4d5422a89f2803e0beb04a0",
       "max": 9,
       "style": "IPY_MODEL_f3b61123c15f4320ba75cb4b5f40a68a"
      }
     },
     "ce406a83f91a4492b820d715c0f66df2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d18b801643a54baf97048a81b491e1c8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d1953c95a05140598de14c4222d5e471": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d25a2af2da9c4b2ab62016079e11fbb9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d8137862d3c5400dbfa0ad6e265b4ce3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d8fe52e2b5e048ffbc7495127f6c79d6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "dcb882225ae9416aa0b9829d77dbd0cb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "dcb97e7e3ff84fd1972570d86608ae86": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "df5ecf54da984e68852e5c90bed11ad7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e126c84b89cd4731ade33684de68df8c": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_fcce55c2ae964623b8bd523832bea047"
      }
     },
     "e1e1012b18864633a1210945f8c320a5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e3a4e8a244524b34a312540188a1468e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e6b238f1fb434d7e84fdbb96a4022d42": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e74470112e0b4253a6995395971459bf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e7dedbc092f0422e943528d878bc7b91": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e87923908dee47598e73e14d161d2349": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "ef361c8bcf2e43cea87accf1f8a50258": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "efb9ab08375a43d89192229cbfece970": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "effe69d56e374ee28668c85a8959bcec": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_6563060642ab4ebe84e9c9c17d928752"
      }
     },
     "f3b61123c15f4320ba75cb4b5f40a68a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "f4a882a6889a40b99a1289e8c480f13b": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_00be1d22c3714f99b4998fbfa214c8a7"
      }
     },
     "f76dc12d5f8f4d2d9fa0ebe01319d9ae": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "f9492ba5e81e40fabeedf91cc29a812f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fa9b3a8e1a0a4870bd35b5ca0507f82d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "faced9f196f1415090e677c0d225fcbf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fcce55c2ae964623b8bd523832bea047": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fd28abe8abec4d0e8e265f2f34affd0a": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_8ba0dc114726493fa636d40f818258a2"
      }
     },
     "fff31fb004ae4bf6b7ccc8b2ac205de8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_ac90715928094acba545a86e996c384c",
       "max": 9,
       "style": "IPY_MODEL_f76dc12d5f8f4d2d9fa0ebe01319d9ae",
       "value": 4
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
