Format: application/octet-stream
⬇ Download File (1.8 MB)
   1  {
   2   "cells": [
   3    {
   4     "cell_type": "raw",
   5     "metadata": {
   6      "collapsed": true
   7     },
   8     "source": []
   9    },
  10    {
  11     "cell_type": "raw",
  12     "metadata": {},
  13     "source": [
  14      "---\n",
  15      "\n",
  16      "_You are currently looking at **version 1.0** of this notebook. To download notebooks and datafiles, as well as get help on Jupyter notebooks in the Coursera platform, visit the [Jupyter Notebook FAQ](https://www.coursera.org/learn/python-machine-learning/resources/bANLa) course resource._\n",
  17      "\n",
  18      "---"
  19     ]
  20    },
  21    {
  22     "cell_type": "markdown",
  23     "metadata": {
  24      "collapsed": true
  25     },
  26     "source": [
  27      "# Applied Machine Learning: Module 3 (Evaluation)"
  28     ]
  29    },
  30    {
  31     "cell_type": "markdown",
  32     "metadata": {},
  33     "source": [
  34      "## Evaluation for Classification"
  35     ]
  36    },
  37    {
  38     "cell_type": "markdown",
  39     "metadata": {},
  40     "source": [
  41      "### Preamble"
  42     ]
  43    },
  44    {
  45     "cell_type": "code",
  46     "execution_count": 1,
  47     "metadata": {
  48      "collapsed": false
  49     },
  50     "outputs": [
  51      {
  52       "name": "stdout",
  53       "output_type": "stream",
  54       "text": [
  55        "0 178\n",
  56        "1 182\n",
  57        "2 177\n",
  58        "3 183\n",
  59        "4 181\n",
  60        "5 182\n",
  61        "6 181\n",
  62        "7 179\n",
  63        "8 174\n",
  64        "9 180\n"
  65       ]
  66      }
  67     ],
  68     "source": [
  69      "%matplotlib notebook\n",
  70      "import numpy as np\n",
  71      "import pandas as pd\n",
  72      "import seaborn as sns\n",
  73      "import matplotlib.pyplot as plt\n",
  74      "from sklearn.model_selection import train_test_split\n",
  75      "from sklearn.datasets import load_digits # Database of images of hand written digits.\n",
  76      "\n",
  77      "dataset = load_digits()\n",
  78      "X, y = dataset.data, dataset.target\n",
  79      "\n",
  80      "for class_name, class_count in zip(dataset.target_names, np.bincount(dataset.target)):\n",
  81      "    print(class_name,class_count)"
  82     ]
  83    },
  84    {
  85     "cell_type": "code",
  86     "execution_count": 2,
  87     "metadata": {
  88      "collapsed": false
  89     },
  90     "outputs": [
  91      {
  92       "name": "stdout",
  93       "output_type": "stream",
  94       "text": [
  95        "Original labels:\t [1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9]\n",
  96        "New binary labels:\t [1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]\n"
  97       ]
  98      }
  99     ],
 100     "source": [
 101      "# Creating a dataset with imbalanced binary classes:  \n",
 102      "# Negative class (0) is 'not digit 1' \n",
 103      "# Positive class (1) is 'digit 1'\n",
 104      "y_binary_imbalanced = y.copy()\n",
 105      "y_binary_imbalanced[y_binary_imbalanced != 1] = 0\n",
 106      "\n",
 107      "print('Original labels:\\t', y[1:30])\n",
 108      "print('New binary labels:\\t', y_binary_imbalanced[1:30])"
 109     ]
 110    },
 111    {
 112     "cell_type": "code",
 113     "execution_count": 3,
 114     "metadata": {
 115      "collapsed": false,
 116      "scrolled": true
 117     },
 118     "outputs": [
 119      {
 120       "data": {
 121        "text/plain": [
 122         "array([1615,  182])"
 123        ]
 124       },
 125       "execution_count": 3,
 126       "metadata": {},
 127       "output_type": "execute_result"
 128      }
 129     ],
 130     "source": [
 131      "np.bincount(y_binary_imbalanced)    # Negative class (0) is the most frequent class"
 132     ]
 133    },
 134    {
 135     "cell_type": "code",
 136     "execution_count": 4,
 137     "metadata": {
 138      "collapsed": false
 139     },
 140     "outputs": [
 141      {
 142       "data": {
 143        "text/plain": [
 144         "0.90888888888888886"
 145        ]
 146       },
 147       "execution_count": 4,
 148       "metadata": {},
 149       "output_type": "execute_result"
 150      }
 151     ],
 152     "source": [
 153      "X_train, X_test, y_train, y_test = train_test_split(X, y_binary_imbalanced, random_state=0)\n",
 154      "\n",
 155      "# Accuracy of Support Vector Machine classifier\n",
 156      "from sklearn.svm import SVC\n",
 157      "\n",
 158      "svm = SVC(kernel='rbf', C=1).fit(X_train, y_train)\n",
 159      "svm.score(X_test, y_test)"
 160     ]
 161    },
 162    {
 163     "cell_type": "markdown",
 164     "metadata": {},
 165     "source": [
 166      "### Dummy Classifiers"
 167     ]
 168    },
 169    {
 170     "cell_type": "markdown",
 171     "metadata": {
 172      "collapsed": true
 173     },
 174     "source": [
 175      "DummyClassifier is a classifier that makes predictions using simple rules, which can be useful as a baseline for comparison against actual classifiers, especially with imbalanced classes."
 176     ]
 177    },
 178    {
 179     "cell_type": "code",
 180     "execution_count": 5,
 181     "metadata": {
 182      "collapsed": false
 183     },
 184     "outputs": [
 185      {
 186       "data": {
 187        "text/plain": [
 188         "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 189         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 190         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 191         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 192         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 193         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 194         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 195         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 196         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 197         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 198         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 199         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 200         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 201         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 202         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 203         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 204         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 205         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 206         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
 207         "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
 208        ]
 209       },
 210       "execution_count": 5,
 211       "metadata": {},
 212       "output_type": "execute_result"
 213      }
 214     ],
 215     "source": [
 216      "from sklearn.dummy import DummyClassifier\n",
 217      "\n",
 218      "# Negative class (0) is most frequent\n",
 219      "dummy_majority = DummyClassifier(strategy = 'most_frequent').fit(X_train, y_train)\n",
 220      "# Therefore the dummy 'most_frequent' classifier always predicts class 0\n",
 221      "y_dummy_predictions = dummy_majority.predict(X_test)\n",
 222      "\n",
 223      "y_dummy_predictions"
 224     ]
 225    },
 226    {
 227     "cell_type": "code",
 228     "execution_count": 6,
 229     "metadata": {
 230      "collapsed": false
 231     },
 232     "outputs": [
 233      {
 234       "data": {
 235        "text/plain": [
 236         "0.9044444444444445"
 237        ]
 238       },
 239       "execution_count": 6,
 240       "metadata": {},
 241       "output_type": "execute_result"
 242      }
 243     ],
 244     "source": [
 245      "dummy_majority.score(X_test, y_test)"
 246     ]
 247    },
 248    {
 249     "cell_type": "code",
 250     "execution_count": 7,
 251     "metadata": {
 252      "collapsed": false
 253     },
 254     "outputs": [
 255      {
 256       "data": {
 257        "text/plain": [
 258         "0.97777777777777775"
 259        ]
 260       },
 261       "execution_count": 7,
 262       "metadata": {},
 263       "output_type": "execute_result"
 264      }
 265     ],
 266     "source": [
 267      "svm = SVC(kernel='linear', C=1).fit(X_train, y_train)\n",
 268      "svm.score(X_test, y_test)"
 269     ]
 270    },
 271    {
 272     "cell_type": "markdown",
 273     "metadata": {},
 274     "source": [
 275      "### Confusion matrices"
 276     ]
 277    },
 278    {
 279     "cell_type": "markdown",
 280     "metadata": {},
 281     "source": [
 282      "#### Binary (two-class) confusion matrix"
 283     ]
 284    },
 285    {
 286     "cell_type": "code",
 287     "execution_count": 8,
 288     "metadata": {
 289      "collapsed": false
 290     },
 291     "outputs": [
 292      {
 293       "name": "stdout",
 294       "output_type": "stream",
 295       "text": [
 296        "Most frequent class (dummy classifier)\n",
 297        " [[407   0]\n",
 298        " [ 43   0]]\n"
 299       ]
 300      }
 301     ],
 302     "source": [
 303      "# sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)\n",
 304      "# Right column with TP and FP is 0. This makes sense since the classifier has been set to predict the negative class.\n",
 305      "# You are comparing the correct test data with your classifier's prediction.\n",
 306      "# Successful predictions on the diagonal of the matrix.\n",
 307      "\n",
 308      "from sklearn.metrics import confusion_matrix\n",
 309      "\n",
 310      "# Negative class (0) is most frequent\n",
 311      "dummy_majority = DummyClassifier(strategy = 'most_frequent').fit(X_train, y_train)\n",
 312      "y_majority_predicted = dummy_majority.predict(X_test)\n",
 313      "confusion = confusion_matrix(y_test, y_majority_predicted)\n",
 314      "\n",
 315      "print('Most frequent class (dummy classifier)\\n', confusion)"
 316     ]
 317    },
 318    {
 319     "cell_type": "code",
 320     "execution_count": 9,
 321     "metadata": {
 322      "collapsed": false
 323     },
 324     "outputs": [
 325      {
 326       "name": "stdout",
 327       "output_type": "stream",
 328       "text": [
 329        "Random class-proportional prediction (dummy classifier)\n",
 330        " [[374  33]\n",
 331        " [ 37   6]]\n"
 332       ]
 333      }
 334     ],
 335     "source": [
 336      "# produces random predictions w/ same class proportion as training set\n",
 337      "dummy_classprop = DummyClassifier(strategy='stratified').fit(X_train, y_train)\n",
 338      "y_classprop_predicted = dummy_classprop.predict(X_test)\n",
 339      "confusion = confusion_matrix(y_test, y_classprop_predicted)\n",
 340      "\n",
 341      "print('Random class-proportional prediction (dummy classifier)\\n', confusion)"
 342     ]
 343    },
 344    {
 345     "cell_type": "code",
 346     "execution_count": 10,
 347     "metadata": {
 348      "collapsed": false,
 349      "scrolled": true
 350     },
 351     "outputs": [
 352      {
 353       "name": "stdout",
 354       "output_type": "stream",
 355       "text": [
 356        "Support vector machine classifier (linear kernel, C=1)\n",
 357        " [[402   5]\n",
 358        " [  5  38]]\n"
 359       ]
 360      }
 361     ],
 362     "source": [
 363      "svm = SVC(kernel='linear', C=1).fit(X_train, y_train)\n",
 364      "svm_predicted = svm.predict(X_test)\n",
 365      "confusion = confusion_matrix(y_test, svm_predicted)\n",
 366      "\n",
 367      "print('Support vector machine classifier (linear kernel, C=1)\\n', confusion)"
 368     ]
 369    },
 370    {
 371     "cell_type": "code",
 372     "execution_count": 11,
 373     "metadata": {
 374      "collapsed": false
 375     },
 376     "outputs": [
 377      {
 378       "name": "stdout",
 379       "output_type": "stream",
 380       "text": [
 381        "Logistic regression classifier (default settings)\n",
 382        " [[401   6]\n",
 383        " [  6  37]]\n"
 384       ]
 385      }
 386     ],
 387     "source": [
 388      "from sklearn.linear_model import LogisticRegression\n",
 389      "\n",
 390      "lr = LogisticRegression().fit(X_train, y_train)\n",
 391      "lr_predicted = lr.predict(X_test)\n",
 392      "confusion = confusion_matrix(y_test, lr_predicted)\n",
 393      "\n",
 394      "print('Logistic regression classifier (default settings)\\n', confusion)"
 395     ]
 396    },
 397    {
 398     "cell_type": "code",
 399     "execution_count": 12,
 400     "metadata": {
 401      "collapsed": false
 402     },
 403     "outputs": [
 404      {
 405       "name": "stdout",
 406       "output_type": "stream",
 407       "text": [
 408        "Decision tree classifier (max_depth = 2)\n",
 409        " [[400   7]\n",
 410        " [ 17  26]]\n"
 411       ]
 412      }
 413     ],
 414     "source": [
 415      "from sklearn.tree import DecisionTreeClassifier\n",
 416      "\n",
 417      "dt = DecisionTreeClassifier(max_depth=2).fit(X_train, y_train)\n",
 418      "tree_predicted = dt.predict(X_test)\n",
 419      "confusion = confusion_matrix(y_test, tree_predicted)\n",
 420      "\n",
 421      "print('Decision tree classifier (max_depth = 2)\\n', confusion)"
 422     ]
 423    },
 424    {
 425     "cell_type": "markdown",
 426     "metadata": {},
 427     "source": [
 428      "### Evaluation metrics for binary classification"
 429     ]
 430    },
 431    {
 432     "cell_type": "code",
 433     "execution_count": 13,
 434     "metadata": {
 435      "collapsed": false
 436     },
 437     "outputs": [
 438      {
 439       "name": "stdout",
 440       "output_type": "stream",
 441       "text": [
 442        "Accuracy: 0.95\n",
 443        "Precision: 0.79\n",
 444        "Recall: 0.60\n",
 445        "F1: 0.68\n"
 446       ]
 447      }
 448     ],
 449     "source": [
 450      "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n",
 451      "# Accuracy = TP + TN / (TP + TN + FP + FN)\n",
 452      "# Precision = TP / (TP + FP)\n",
 453      "# Recall = TP / (TP + FN)  Also known as sensitivity, or True Positive Rate\n",
 454      "# F1 = 2 * Precision * Recall / (Precision + Recall) \n",
 455      "print('Accuracy: {:.2f}'.format(accuracy_score(y_test, tree_predicted)))\n",
 456      "print('Precision: {:.2f}'.format(precision_score(y_test, tree_predicted)))\n",
 457      "print('Recall: {:.2f}'.format(recall_score(y_test, tree_predicted)))\n",
 458      "print('F1: {:.2f}'.format(f1_score(y_test, tree_predicted)))"
 459     ]
 460    },
 461    {
 462     "cell_type": "code",
 463     "execution_count": 14,
 464     "metadata": {
 465      "collapsed": false
 466     },
 467     "outputs": [
 468      {
 469       "name": "stdout",
 470       "output_type": "stream",
 471       "text": [
 472        "             precision    recall  f1-score   support\n",
 473        "\n",
 474        "      not 1       0.96      0.98      0.97       407\n",
 475        "          1       0.79      0.60      0.68        43\n",
 476        "\n",
 477        "avg / total       0.94      0.95      0.94       450\n",
 478        "\n"
 479       ]
 480      }
 481     ],
 482     "source": [
 483      "# Combined report with all above metrics\n",
 484      "from sklearn.metrics import classification_report\n",
 485      "\n",
 486      "print(classification_report(y_test, tree_predicted, target_names=['not 1', '1']))"
 487     ]
 488    },
 489    {
 490     "cell_type": "code",
 491     "execution_count": 15,
 492     "metadata": {
 493      "collapsed": false,
 494      "scrolled": false
 495     },
 496     "outputs": [
 497      {
 498       "name": "stdout",
 499       "output_type": "stream",
 500       "text": [
 501        "Random class-proportional (dummy)\n",
 502        "              precision    recall  f1-score   support\n",
 503        "\n",
 504        "      not 1       0.91      0.92      0.91       407\n",
 505        "          1       0.15      0.14      0.15        43\n",
 506        "\n",
 507        "avg / total       0.84      0.84      0.84       450\n",
 508        "\n",
 509        "SVM\n",
 510        "              precision    recall  f1-score   support\n",
 511        "\n",
 512        "      not 1       0.99      0.99      0.99       407\n",
 513        "          1       0.88      0.88      0.88        43\n",
 514        "\n",
 515        "avg / total       0.98      0.98      0.98       450\n",
 516        "\n",
 517        "Logistic regression\n",
 518        "              precision    recall  f1-score   support\n",
 519        "\n",
 520        "      not 1       0.99      0.99      0.99       407\n",
 521        "          1       0.86      0.86      0.86        43\n",
 522        "\n",
 523        "avg / total       0.97      0.97      0.97       450\n",
 524        "\n",
 525        "Decision tree\n",
 526        "              precision    recall  f1-score   support\n",
 527        "\n",
 528        "      not 1       0.96      0.98      0.97       407\n",
 529        "          1       0.79      0.60      0.68        43\n",
 530        "\n",
 531        "avg / total       0.94      0.95      0.94       450\n",
 532        "\n"
 533       ]
 534      }
 535     ],
 536     "source": [
 537      "print('Random class-proportional (dummy)\\n', \n",
 538      "      classification_report(y_test, y_classprop_predicted, target_names=['not 1', '1']))\n",
 539      "print('SVM\\n', \n",
 540      "      classification_report(y_test, svm_predicted, target_names = ['not 1', '1']))\n",
 541      "print('Logistic regression\\n', \n",
 542      "      classification_report(y_test, lr_predicted, target_names = ['not 1', '1']))\n",
 543      "print('Decision tree\\n', \n",
 544      "      classification_report(y_test, tree_predicted, target_names = ['not 1', '1']))"
 545     ]
 546    },
 547    {
 548     "cell_type": "markdown",
 549     "metadata": {},
 550     "source": [
 551      "### Decision functions"
 552     ]
 553    },
 554    {
 555     "cell_type": "code",
 556     "execution_count": 16,
 557     "metadata": {
 558      "collapsed": false
 559     },
 560     "outputs": [
 561      {
 562       "data": {
 563        "text/plain": [
 564         "[(0, -23.172292973469546),\n",
 565         " (0, -13.542576515500063),\n",
 566         " (0, -21.717588760007867),\n",
 567         " (0, -18.903065133316439),\n",
 568         " (0, -19.733169947138638),\n",
 569         " (0, -9.7463217496747667),\n",
 570         " (1, 5.2327155658831135),\n",
 571         " (0, -19.308012306288916),\n",
 572         " (0, -25.099330209728528),\n",
 573         " (0, -21.824312362996),\n",
 574         " (0, -24.14378275072049),\n",
 575         " (0, -19.578811099762508),\n",
 576         " (0, -22.568371393280199),\n",
 577         " (0, -10.822590225240777),\n",
 578         " (0, -11.907918741521932),\n",
 579         " (0, -10.977026853802803),\n",
 580         " (1, 11.206811164226373),\n",
 581         " (0, -27.64415761980748),\n",
 582         " (0, -12.857692102545409),\n",
 583         " (0, -25.848149140240199)]"
 584        ]
 585       },
 586       "execution_count": 16,
 587       "metadata": {},
 588       "output_type": "execute_result"
 589      }
 590     ],
 591     "source": [
 592      "X_train, X_test, y_train, y_test = train_test_split(X, y_binary_imbalanced, random_state=0)\n",
 593      "y_scores_lr = lr.fit(X_train, y_train).decision_function(X_test)\n",
 594      "y_score_list = list(zip(y_test[0:20], y_scores_lr[0:20]))\n",
 595      "\n",
 596      "# show the decision_function scores for first 20 instances\n",
 597      "y_score_list"
 598     ]
 599    },
 600    {
 601     "cell_type": "code",
 602     "execution_count": 17,
 603     "metadata": {
 604      "collapsed": false
 605     },
 606     "outputs": [
 607      {
 608       "data": {
 609        "text/plain": [
 610         "[(0, 8.6377579220606777e-11),\n",
 611         " (0, 1.3138118599563783e-06),\n",
 612         " (0, 3.6997386039099529e-10),\n",
 613         " (0, 6.1730972504865465e-09),\n",
 614         " (0, 2.6914925394345074e-09),\n",
 615         " (0, 5.8506057771143608e-05),\n",
 616         " (1, 0.99468934644404694),\n",
 617         " (0, 4.1175302368500096e-09),\n",
 618         " (0, 1.2574750894253029e-11),\n",
 619         " (0, 3.3252290754668869e-10),\n",
 620         " (0, 3.2695529799373086e-11),\n",
 621         " (0, 3.1407283576084884e-09),\n",
 622         " (0, 1.5800864117150149e-10),\n",
 623         " (0, 1.9943442430612578e-05),\n",
 624         " (0, 6.7368003023860014e-06),\n",
 625         " (0, 1.7089540581641637e-05),\n",
 626         " (1, 0.9999864188091131),\n",
 627         " (0, 9.8694940340195476e-13),\n",
 628         " (0, 2.6059983600823893e-06),\n",
 629         " (0, 5.9469113009063784e-12)]"
 630        ]
 631       },
 632       "execution_count": 17,
 633       "metadata": {},
 634       "output_type": "execute_result"
 635      }
 636     ],
 637     "source": [
 638      "# Positive values have a high probability close to 1 whereas negative values have a very low probability.\n",
 639      "\n",
 640      "X_train, X_test, y_train, y_test = train_test_split(X, y_binary_imbalanced, random_state=0)\n",
 641      "y_proba_lr = lr.fit(X_train, y_train).predict_proba(X_test)\n",
 642      "y_proba_list = list(zip(y_test[0:20], y_proba_lr[0:20,1]))\n",
 643      "\n",
 644      "# show the probability of positive class for first 20 instances\n",
 645      "y_proba_list"
 646     ]
 647    },
 648    {
 649     "cell_type": "code",
 650     "execution_count": 18,
 651     "metadata": {
 652      "collapsed": true
 653     },
 654     "outputs": [],
 655     "source": [
 656      "# You can use either the decision function or predict_proba to find a range of values over which you can vary the decision threshold for a precision-recall curve."
 657     ]
 658    },
 659    {
 660     "cell_type": "markdown",
 661     "metadata": {},
 662     "source": [
 663      "### Precision-recall curves"
 664     ]
 665    },
 666    {
 667     "cell_type": "code",
 668     "execution_count": 19,
 669     "metadata": {
 670      "collapsed": false
 671     },
 672     "outputs": [
 673      {
 674       "data": {
 675        "application/javascript": [
 676         "/* Put everything inside the global mpl namespace */\n",
 677         "window.mpl = {};\n",
 678         "\n",
 679         "\n",
 680         "mpl.get_websocket_type = function() {\n",
 681         "    if (typeof(WebSocket) !== 'undefined') {\n",
 682         "        return WebSocket;\n",
 683         "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
 684         "        return MozWebSocket;\n",
 685         "    } else {\n",
 686         "        alert('Your browser does not have WebSocket support.' +\n",
 687         "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
 688         "              'Firefox 4 and 5 are also supported but you ' +\n",
 689         "              'have to enable WebSockets in about:config.');\n",
 690         "    };\n",
 691         "}\n",
 692         "\n",
 693         "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
 694         "    this.id = figure_id;\n",
 695         "\n",
 696         "    this.ws = websocket;\n",
 697         "\n",
 698         "    this.supports_binary = (this.ws.binaryType != undefined);\n",
 699         "\n",
 700         "    if (!this.supports_binary) {\n",
 701         "        var warnings = document.getElementById(\"mpl-warnings\");\n",
 702         "        if (warnings) {\n",
 703         "            warnings.style.display = 'block';\n",
 704         "            warnings.textContent = (\n",
 705         "                \"This browser does not support binary websocket messages. \" +\n",
 706         "                    \"Performance may be slow.\");\n",
 707         "        }\n",
 708         "    }\n",
 709         "\n",
 710         "    this.imageObj = new Image();\n",
 711         "\n",
 712         "    this.context = undefined;\n",
 713         "    this.message = undefined;\n",
 714         "    this.canvas = undefined;\n",
 715         "    this.rubberband_canvas = undefined;\n",
 716         "    this.rubberband_context = undefined;\n",
 717         "    this.format_dropdown = undefined;\n",
 718         "\n",
 719         "    this.image_mode = 'full';\n",
 720         "\n",
 721         "    this.root = $('<div/>');\n",
 722         "    this._root_extra_style(this.root)\n",
 723         "    this.root.attr('style', 'display: inline-block');\n",
 724         "\n",
 725         "    $(parent_element).append(this.root);\n",
 726         "\n",
 727         "    this._init_header(this);\n",
 728         "    this._init_canvas(this);\n",
 729         "    this._init_toolbar(this);\n",
 730         "\n",
 731         "    var fig = this;\n",
 732         "\n",
 733         "    this.waiting = false;\n",
 734         "\n",
 735         "    this.ws.onopen =  function () {\n",
 736         "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
 737         "            fig.send_message(\"send_image_mode\", {});\n",
 738         "            if (mpl.ratio != 1) {\n",
 739         "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
 740         "            }\n",
 741         "            fig.send_message(\"refresh\", {});\n",
 742         "        }\n",
 743         "\n",
 744         "    this.imageObj.onload = function() {\n",
 745         "            if (fig.image_mode == 'full') {\n",
 746         "                // Full images could contain transparency (where diff images\n",
 747         "                // almost always do), so we need to clear the canvas so that\n",
 748         "                // there is no ghosting.\n",
 749         "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
 750         "            }\n",
 751         "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
 752         "        };\n",
 753         "\n",
 754         "    this.imageObj.onunload = function() {\n",
 755         "        this.ws.close();\n",
 756         "    }\n",
 757         "\n",
 758         "    this.ws.onmessage = this._make_on_message_function(this);\n",
 759         "\n",
 760         "    this.ondownload = ondownload;\n",
 761         "}\n",
 762         "\n",
 763         "mpl.figure.prototype._init_header = function() {\n",
 764         "    var titlebar = $(\n",
 765         "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
 766         "        'ui-helper-clearfix\"/>');\n",
 767         "    var titletext = $(\n",
 768         "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
 769         "        'text-align: center; padding: 3px;\"/>');\n",
 770         "    titlebar.append(titletext)\n",
 771         "    this.root.append(titlebar);\n",
 772         "    this.header = titletext[0];\n",
 773         "}\n",
 774         "\n",
 775         "\n",
 776         "\n",
 777         "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
 778         "\n",
 779         "}\n",
 780         "\n",
 781         "\n",
 782         "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
 783         "\n",
 784         "}\n",
 785         "\n",
 786         "mpl.figure.prototype._init_canvas = function() {\n",
 787         "    var fig = this;\n",
 788         "\n",
 789         "    var canvas_div = $('<div/>');\n",
 790         "\n",
 791         "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
 792         "\n",
 793         "    function canvas_keyboard_event(event) {\n",
 794         "        return fig.key_event(event, event['data']);\n",
 795         "    }\n",
 796         "\n",
 797         "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
 798         "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
 799         "    this.canvas_div = canvas_div\n",
 800         "    this._canvas_extra_style(canvas_div)\n",
 801         "    this.root.append(canvas_div);\n",
 802         "\n",
 803         "    var canvas = $('<canvas/>');\n",
 804         "    canvas.addClass('mpl-canvas');\n",
 805         "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
 806         "\n",
 807         "    this.canvas = canvas[0];\n",
 808         "    this.context = canvas[0].getContext(\"2d\");\n",
 809         "\n",
 810         "    var backingStore = this.context.backingStorePixelRatio ||\n",
 811         "\tthis.context.webkitBackingStorePixelRatio ||\n",
 812         "\tthis.context.mozBackingStorePixelRatio ||\n",
 813         "\tthis.context.msBackingStorePixelRatio ||\n",
 814         "\tthis.context.oBackingStorePixelRatio ||\n",
 815         "\tthis.context.backingStorePixelRatio || 1;\n",
 816         "\n",
 817         "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
 818         "\n",
 819         "    var rubberband = $('<canvas/>');\n",
 820         "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
 821         "\n",
 822         "    var pass_mouse_events = true;\n",
 823         "\n",
 824         "    canvas_div.resizable({\n",
 825         "        start: function(event, ui) {\n",
 826         "            pass_mouse_events = false;\n",
 827         "        },\n",
 828         "        resize: function(event, ui) {\n",
 829         "            fig.request_resize(ui.size.width, ui.size.height);\n",
 830         "        },\n",
 831         "        stop: function(event, ui) {\n",
 832         "            pass_mouse_events = true;\n",
 833         "            fig.request_resize(ui.size.width, ui.size.height);\n",
 834         "        },\n",
 835         "    });\n",
 836         "\n",
 837         "    function mouse_event_fn(event) {\n",
 838         "        if (pass_mouse_events)\n",
 839         "            return fig.mouse_event(event, event['data']);\n",
 840         "    }\n",
 841         "\n",
 842         "    rubberband.mousedown('button_press', mouse_event_fn);\n",
 843         "    rubberband.mouseup('button_release', mouse_event_fn);\n",
 844         "    // Throttle sequential mouse events to 1 every 20ms.\n",
 845         "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
 846         "\n",
 847         "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
 848         "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
 849         "\n",
 850         "    canvas_div.on(\"wheel\", function (event) {\n",
 851         "        event = event.originalEvent;\n",
 852         "        event['data'] = 'scroll'\n",
 853         "        if (event.deltaY < 0) {\n",
 854         "            event.step = 1;\n",
 855         "        } else {\n",
 856         "            event.step = -1;\n",
 857         "        }\n",
 858         "        mouse_event_fn(event);\n",
 859         "    });\n",
 860         "\n",
 861         "    canvas_div.append(canvas);\n",
 862         "    canvas_div.append(rubberband);\n",
 863         "\n",
 864         "    this.rubberband = rubberband;\n",
 865         "    this.rubberband_canvas = rubberband[0];\n",
 866         "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
 867         "    this.rubberband_context.strokeStyle = \"#000000\";\n",
 868         "\n",
 869         "    this._resize_canvas = function(width, height) {\n",
 870         "        // Keep the size of the canvas, canvas container, and rubber band\n",
 871         "        // canvas in synch.\n",
 872         "        canvas_div.css('width', width)\n",
 873         "        canvas_div.css('height', height)\n",
 874         "\n",
 875         "        canvas.attr('width', width * mpl.ratio);\n",
 876         "        canvas.attr('height', height * mpl.ratio);\n",
 877         "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
 878         "\n",
 879         "        rubberband.attr('width', width);\n",
 880         "        rubberband.attr('height', height);\n",
 881         "    }\n",
 882         "\n",
 883         "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
 884         "    // upon first draw.\n",
 885         "    this._resize_canvas(600, 600);\n",
 886         "\n",
 887         "    // Disable right mouse context menu.\n",
 888         "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
 889         "        return false;\n",
 890         "    });\n",
 891         "\n",
 892         "    function set_focus () {\n",
 893         "        canvas.focus();\n",
 894         "        canvas_div.focus();\n",
 895         "    }\n",
 896         "\n",
 897         "    window.setTimeout(set_focus, 100);\n",
 898         "}\n",
 899         "\n",
 900         "mpl.figure.prototype._init_toolbar = function() {\n",
 901         "    var fig = this;\n",
 902         "\n",
 903         "    var nav_element = $('<div/>')\n",
 904         "    nav_element.attr('style', 'width: 100%');\n",
 905         "    this.root.append(nav_element);\n",
 906         "\n",
 907         "    // Define a callback function for later on.\n",
 908         "    function toolbar_event(event) {\n",
 909         "        return fig.toolbar_button_onclick(event['data']);\n",
 910         "    }\n",
 911         "    function toolbar_mouse_event(event) {\n",
 912         "        return fig.toolbar_button_onmouseover(event['data']);\n",
 913         "    }\n",
 914         "\n",
 915         "    for(var toolbar_ind in mpl.toolbar_items) {\n",
 916         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
 917         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
 918         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
 919         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
 920         "\n",
 921         "        if (!name) {\n",
 922         "            // put a spacer in here.\n",
 923         "            continue;\n",
 924         "        }\n",
 925         "        var button = $('<button/>');\n",
 926         "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
 927         "                        'ui-button-icon-only');\n",
 928         "        button.attr('role', 'button');\n",
 929         "        button.attr('aria-disabled', 'false');\n",
 930         "        button.click(method_name, toolbar_event);\n",
 931         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
 932         "\n",
 933         "        var icon_img = $('<span/>');\n",
 934         "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
 935         "        icon_img.addClass(image);\n",
 936         "        icon_img.addClass('ui-corner-all');\n",
 937         "\n",
 938         "        var tooltip_span = $('<span/>');\n",
 939         "        tooltip_span.addClass('ui-button-text');\n",
 940         "        tooltip_span.html(tooltip);\n",
 941         "\n",
 942         "        button.append(icon_img);\n",
 943         "        button.append(tooltip_span);\n",
 944         "\n",
 945         "        nav_element.append(button);\n",
 946         "    }\n",
 947         "\n",
 948         "    var fmt_picker_span = $('<span/>');\n",
 949         "\n",
 950         "    var fmt_picker = $('<select/>');\n",
 951         "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
 952         "    fmt_picker_span.append(fmt_picker);\n",
 953         "    nav_element.append(fmt_picker_span);\n",
 954         "    this.format_dropdown = fmt_picker[0];\n",
 955         "\n",
 956         "    for (var ind in mpl.extensions) {\n",
 957         "        var fmt = mpl.extensions[ind];\n",
 958         "        var option = $(\n",
 959         "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
 960         "        fmt_picker.append(option)\n",
 961         "    }\n",
 962         "\n",
 963         "    // Add hover states to the ui-buttons\n",
 964         "    $( \".ui-button\" ).hover(\n",
 965         "        function() { $(this).addClass(\"ui-state-hover\");},\n",
 966         "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
 967         "    );\n",
 968         "\n",
 969         "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
 970         "    nav_element.append(status_bar);\n",
 971         "    this.message = status_bar[0];\n",
 972         "}\n",
 973         "\n",
 974         "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
 975         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
 976         "    // which will in turn request a refresh of the image.\n",
 977         "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
 978         "}\n",
 979         "\n",
 980         "mpl.figure.prototype.send_message = function(type, properties) {\n",
 981         "    properties['type'] = type;\n",
 982         "    properties['figure_id'] = this.id;\n",
 983         "    this.ws.send(JSON.stringify(properties));\n",
 984         "}\n",
 985         "\n",
 986         "mpl.figure.prototype.send_draw_message = function() {\n",
 987         "    if (!this.waiting) {\n",
 988         "        this.waiting = true;\n",
 989         "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
 990         "    }\n",
 991         "}\n",
 992         "\n",
 993         "\n",
 994         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
 995         "    var format_dropdown = fig.format_dropdown;\n",
 996         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
 997         "    fig.ondownload(fig, format);\n",
 998         "}\n",
 999         "\n",
1000         "\n",
1001         "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
1002         "    var size = msg['size'];\n",
1003         "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
1004         "        fig._resize_canvas(size[0], size[1]);\n",
1005         "        fig.send_message(\"refresh\", {});\n",
1006         "    };\n",
1007         "}\n",
1008         "\n",
1009         "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
1010         "    var x0 = msg['x0'] / mpl.ratio;\n",
1011         "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
1012         "    var x1 = msg['x1'] / mpl.ratio;\n",
1013         "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
1014         "    x0 = Math.floor(x0) + 0.5;\n",
1015         "    y0 = Math.floor(y0) + 0.5;\n",
1016         "    x1 = Math.floor(x1) + 0.5;\n",
1017         "    y1 = Math.floor(y1) + 0.5;\n",
1018         "    var min_x = Math.min(x0, x1);\n",
1019         "    var min_y = Math.min(y0, y1);\n",
1020         "    var width = Math.abs(x1 - x0);\n",
1021         "    var height = Math.abs(y1 - y0);\n",
1022         "\n",
1023         "    fig.rubberband_context.clearRect(\n",
1024         "        0, 0, fig.canvas.width, fig.canvas.height);\n",
1025         "\n",
1026         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
1027         "}\n",
1028         "\n",
1029         "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
1030         "    // Updates the figure title.\n",
1031         "    fig.header.textContent = msg['label'];\n",
1032         "}\n",
1033         "\n",
1034         "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
1035         "    var cursor = msg['cursor'];\n",
1036         "    switch(cursor)\n",
1037         "    {\n",
1038         "    case 0:\n",
1039         "        cursor = 'pointer';\n",
1040         "        break;\n",
1041         "    case 1:\n",
1042         "        cursor = 'default';\n",
1043         "        break;\n",
1044         "    case 2:\n",
1045         "        cursor = 'crosshair';\n",
1046         "        break;\n",
1047         "    case 3:\n",
1048         "        cursor = 'move';\n",
1049         "        break;\n",
1050         "    }\n",
1051         "    fig.rubberband_canvas.style.cursor = cursor;\n",
1052         "}\n",
1053         "\n",
1054         "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
1055         "    fig.message.textContent = msg['message'];\n",
1056         "}\n",
1057         "\n",
1058         "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
1059         "    // Request the server to send over a new figure.\n",
1060         "    fig.send_draw_message();\n",
1061         "}\n",
1062         "\n",
1063         "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
1064         "    fig.image_mode = msg['mode'];\n",
1065         "}\n",
1066         "\n",
1067         "mpl.figure.prototype.updated_canvas_event = function() {\n",
1068         "    // Called whenever the canvas gets updated.\n",
1069         "    this.send_message(\"ack\", {});\n",
1070         "}\n",
1071         "\n",
1072         "// A function to construct a web socket function for onmessage handling.\n",
1073         "// Called in the figure constructor.\n",
1074         "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
1075         "    return function socket_on_message(evt) {\n",
1076         "        if (evt.data instanceof Blob) {\n",
1077         "            /* FIXME: We get \"Resource interpreted as Image but\n",
1078         "             * transferred with MIME type text/plain:\" errors on\n",
1079         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
1080         "             * to be part of the websocket stream */\n",
1081         "            evt.data.type = \"image/png\";\n",
1082         "\n",
1083         "            /* Free the memory for the previous frames */\n",
1084         "            if (fig.imageObj.src) {\n",
1085         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
1086         "                    fig.imageObj.src);\n",
1087         "            }\n",
1088         "\n",
1089         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
1090         "                evt.data);\n",
1091         "            fig.updated_canvas_event();\n",
1092         "            fig.waiting = false;\n",
1093         "            return;\n",
1094         "        }\n",
1095         "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
1096         "            fig.imageObj.src = evt.data;\n",
1097         "            fig.updated_canvas_event();\n",
1098         "            fig.waiting = false;\n",
1099         "            return;\n",
1100         "        }\n",
1101         "\n",
1102         "        var msg = JSON.parse(evt.data);\n",
1103         "        var msg_type = msg['type'];\n",
1104         "\n",
1105         "        // Call the  \"handle_{type}\" callback, which takes\n",
1106         "        // the figure and JSON message as its only arguments.\n",
1107         "        try {\n",
1108         "            var callback = fig[\"handle_\" + msg_type];\n",
1109         "        } catch (e) {\n",
1110         "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
1111         "            return;\n",
1112         "        }\n",
1113         "\n",
1114         "        if (callback) {\n",
1115         "            try {\n",
1116         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
1117         "                callback(fig, msg);\n",
1118         "            } catch (e) {\n",
1119         "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
1120         "            }\n",
1121         "        }\n",
1122         "    };\n",
1123         "}\n",
1124         "\n",
1125         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
1126         "mpl.findpos = function(e) {\n",
1127         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
1128         "    var targ;\n",
1129         "    if (!e)\n",
1130         "        e = window.event;\n",
1131         "    if (e.target)\n",
1132         "        targ = e.target;\n",
1133         "    else if (e.srcElement)\n",
1134         "        targ = e.srcElement;\n",
1135         "    if (targ.nodeType == 3) // defeat Safari bug\n",
1136         "        targ = targ.parentNode;\n",
1137         "\n",
1138         "    // jQuery normalizes the pageX and pageY\n",
1139         "    // pageX,Y are the mouse positions relative to the document\n",
1140         "    // offset() returns the position of the element relative to the document\n",
1141         "    var x = e.pageX - $(targ).offset().left;\n",
1142         "    var y = e.pageY - $(targ).offset().top;\n",
1143         "\n",
1144         "    return {\"x\": x, \"y\": y};\n",
1145         "};\n",
1146         "\n",
1147         "/*\n",
1148         " * return a copy of an object with only non-object keys\n",
1149         " * we need this to avoid circular references\n",
1150         " * http://stackoverflow.com/a/24161582/3208463\n",
1151         " */\n",
1152         "function simpleKeys (original) {\n",
1153         "  return Object.keys(original).reduce(function (obj, key) {\n",
1154         "    if (typeof original[key] !== 'object')\n",
1155         "        obj[key] = original[key]\n",
1156         "    return obj;\n",
1157         "  }, {});\n",
1158         "}\n",
1159         "\n",
1160         "mpl.figure.prototype.mouse_event = function(event, name) {\n",
1161         "    var canvas_pos = mpl.findpos(event)\n",
1162         "\n",
1163         "    if (name === 'button_press')\n",
1164         "    {\n",
1165         "        this.canvas.focus();\n",
1166         "        this.canvas_div.focus();\n",
1167         "    }\n",
1168         "\n",
1169         "    var x = canvas_pos.x * mpl.ratio;\n",
1170         "    var y = canvas_pos.y * mpl.ratio;\n",
1171         "\n",
1172         "    this.send_message(name, {x: x, y: y, button: event.button,\n",
1173         "                             step: event.step,\n",
1174         "                             guiEvent: simpleKeys(event)});\n",
1175         "\n",
1176         "    /* This prevents the web browser from automatically changing to\n",
1177         "     * the text insertion cursor when the button is pressed.  We want\n",
1178         "     * to control all of the cursor setting manually through the\n",
1179         "     * 'cursor' event from matplotlib */\n",
1180         "    event.preventDefault();\n",
1181         "    return false;\n",
1182         "}\n",
1183         "\n",
1184         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
1185         "    // Handle any extra behaviour associated with a key event\n",
1186         "}\n",
1187         "\n",
1188         "mpl.figure.prototype.key_event = function(event, name) {\n",
1189         "\n",
1190         "    // Prevent repeat events\n",
1191         "    if (name == 'key_press')\n",
1192         "    {\n",
1193         "        if (event.which === this._key)\n",
1194         "            return;\n",
1195         "        else\n",
1196         "            this._key = event.which;\n",
1197         "    }\n",
1198         "    if (name == 'key_release')\n",
1199         "        this._key = null;\n",
1200         "\n",
1201         "    var value = '';\n",
1202         "    if (event.ctrlKey && event.which != 17)\n",
1203         "        value += \"ctrl+\";\n",
1204         "    if (event.altKey && event.which != 18)\n",
1205         "        value += \"alt+\";\n",
1206         "    if (event.shiftKey && event.which != 16)\n",
1207         "        value += \"shift+\";\n",
1208         "\n",
1209         "    value += 'k';\n",
1210         "    value += event.which.toString();\n",
1211         "\n",
1212         "    this._key_event_extra(event, name);\n",
1213         "\n",
1214         "    this.send_message(name, {key: value,\n",
1215         "                             guiEvent: simpleKeys(event)});\n",
1216         "    return false;\n",
1217         "}\n",
1218         "\n",
1219         "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
1220         "    if (name == 'download') {\n",
1221         "        this.handle_save(this, null);\n",
1222         "    } else {\n",
1223         "        this.send_message(\"toolbar_button\", {name: name});\n",
1224         "    }\n",
1225         "};\n",
1226         "\n",
1227         "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
1228         "    this.message.textContent = tooltip;\n",
1229         "};\n",
1230         "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",
1231         "\n",
1232         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
1233         "\n",
1234         "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
1235         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
1236         "    // object with the appropriate methods. Currently this is a non binary\n",
1237         "    // socket, so there is still some room for performance tuning.\n",
1238         "    var ws = {};\n",
1239         "\n",
1240         "    ws.close = function() {\n",
1241         "        comm.close()\n",
1242         "    };\n",
1243         "    ws.send = function(m) {\n",
1244         "        //console.log('sending', m);\n",
1245         "        comm.send(m);\n",
1246         "    };\n",
1247         "    // Register the callback with on_msg.\n",
1248         "    comm.on_msg(function(msg) {\n",
1249         "        //console.log('receiving', msg['content']['data'], msg);\n",
1250         "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
1251         "        ws.onmessage(msg['content']['data'])\n",
1252         "    });\n",
1253         "    return ws;\n",
1254         "}\n",
1255         "\n",
1256         "mpl.mpl_figure_comm = function(comm, msg) {\n",
1257         "    // This is the function which gets called when the mpl process\n",
1258         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
1259         "\n",
1260         "    var id = msg.content.data.id;\n",
1261         "    // Get hold of the div created by the display call when the Comm\n",
1262         "    // socket was opened in Python.\n",
1263         "    var element = $(\"#\" + id);\n",
1264         "    var ws_proxy = comm_websocket_adapter(comm)\n",
1265         "\n",
1266         "    function ondownload(figure, format) {\n",
1267         "        window.open(figure.imageObj.src);\n",
1268         "    }\n",
1269         "\n",
1270         "    var fig = new mpl.figure(id, ws_proxy,\n",
1271         "                           ondownload,\n",
1272         "                           element.get(0));\n",
1273         "\n",
1274         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
1275         "    // web socket which is closed, not our websocket->open comm proxy.\n",
1276         "    ws_proxy.onopen();\n",
1277         "\n",
1278         "    fig.parent_element = element.get(0);\n",
1279         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
1280         "    if (!fig.cell_info) {\n",
1281         "        console.error(\"Failed to find cell for figure\", id, fig);\n",
1282         "        return;\n",
1283         "    }\n",
1284         "\n",
1285         "    var output_index = fig.cell_info[2]\n",
1286         "    var cell = fig.cell_info[0];\n",
1287         "\n",
1288         "};\n",
1289         "\n",
1290         "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
1291         "    var width = fig.canvas.width/mpl.ratio\n",
1292         "    fig.root.unbind('remove')\n",
1293         "\n",
1294         "    // Update the output cell to use the data from the current canvas.\n",
1295         "    fig.push_to_output();\n",
1296         "    var dataURL = fig.canvas.toDataURL();\n",
1297         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
1298         "    // the notebook keyboard shortcuts fail.\n",
1299         "    IPython.keyboard_manager.enable()\n",
1300         "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
1301         "    fig.close_ws(fig, msg);\n",
1302         "}\n",
1303         "\n",
1304         "mpl.figure.prototype.close_ws = function(fig, msg){\n",
1305         "    fig.send_message('closing', msg);\n",
1306         "    // fig.ws.close()\n",
1307         "}\n",
1308         "\n",
1309         "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
1310         "    // Turn the data on the canvas into data in the output cell.\n",
1311         "    var width = this.canvas.width/mpl.ratio\n",
1312         "    var dataURL = this.canvas.toDataURL();\n",
1313         "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
1314         "}\n",
1315         "\n",
1316         "mpl.figure.prototype.updated_canvas_event = function() {\n",
1317         "    // Tell IPython that the notebook contents must change.\n",
1318         "    IPython.notebook.set_dirty(true);\n",
1319         "    this.send_message(\"ack\", {});\n",
1320         "    var fig = this;\n",
1321         "    // Wait a second, then push the new image to the DOM so\n",
1322         "    // that it is saved nicely (might be nice to debounce this).\n",
1323         "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
1324         "}\n",
1325         "\n",
1326         "mpl.figure.prototype._init_toolbar = function() {\n",
1327         "    var fig = this;\n",
1328         "\n",
1329         "    var nav_element = $('<div/>')\n",
1330         "    nav_element.attr('style', 'width: 100%');\n",
1331         "    this.root.append(nav_element);\n",
1332         "\n",
1333         "    // Define a callback function for later on.\n",
1334         "    function toolbar_event(event) {\n",
1335         "        return fig.toolbar_button_onclick(event['data']);\n",
1336         "    }\n",
1337         "    function toolbar_mouse_event(event) {\n",
1338         "        return fig.toolbar_button_onmouseover(event['data']);\n",
1339         "    }\n",
1340         "\n",
1341         "    for(var toolbar_ind in mpl.toolbar_items){\n",
1342         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
1343         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
1344         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
1345         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
1346         "\n",
1347         "        if (!name) { continue; };\n",
1348         "\n",
1349         "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
1350         "        button.click(method_name, toolbar_event);\n",
1351         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
1352         "        nav_element.append(button);\n",
1353         "    }\n",
1354         "\n",
1355         "    // Add the status bar.\n",
1356         "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
1357         "    nav_element.append(status_bar);\n",
1358         "    this.message = status_bar[0];\n",
1359         "\n",
1360         "    // Add the close button to the window.\n",
1361         "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
1362         "    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",
1363         "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
1364         "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
1365         "    buttongrp.append(button);\n",
1366         "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
1367         "    titlebar.prepend(buttongrp);\n",
1368         "}\n",
1369         "\n",
1370         "mpl.figure.prototype._root_extra_style = function(el){\n",
1371         "    var fig = this\n",
1372         "    el.on(\"remove\", function(){\n",
1373         "\tfig.close_ws(fig, {});\n",
1374         "    });\n",
1375         "}\n",
1376         "\n",
1377         "mpl.figure.prototype._canvas_extra_style = function(el){\n",
1378         "    // this is important to make the div 'focusable\n",
1379         "    el.attr('tabindex', 0)\n",
1380         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
1381         "    // off when our div gets focus\n",
1382         "\n",
1383         "    // location in version 3\n",
1384         "    if (IPython.notebook.keyboard_manager) {\n",
1385         "        IPython.notebook.keyboard_manager.register_events(el);\n",
1386         "    }\n",
1387         "    else {\n",
1388         "        // location in version 2\n",
1389         "        IPython.keyboard_manager.register_events(el);\n",
1390         "    }\n",
1391         "\n",
1392         "}\n",
1393         "\n",
1394         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
1395         "    var manager = IPython.notebook.keyboard_manager;\n",
1396         "    if (!manager)\n",
1397         "        manager = IPython.keyboard_manager;\n",
1398         "\n",
1399         "    // Check for shift+enter\n",
1400         "    if (event.shiftKey && event.which == 13) {\n",
1401         "        this.canvas_div.blur();\n",
1402         "        // select the cell after this one\n",
1403         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
1404         "        IPython.notebook.select(index + 1);\n",
1405         "    }\n",
1406         "}\n",
1407         "\n",
1408         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
1409         "    fig.ondownload(fig, null);\n",
1410         "}\n",
1411         "\n",
1412         "\n",
1413         "mpl.find_output_cell = function(html_output) {\n",
1414         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
1415         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
1416         "    // IPython event is triggered only after the cells have been serialised, which for\n",
1417         "    // our purposes (turning an active figure into a static one), is too late.\n",
1418         "    var cells = IPython.notebook.get_cells();\n",
1419         "    var ncells = cells.length;\n",
1420         "    for (var i=0; i<ncells; i++) {\n",
1421         "        var cell = cells[i];\n",
1422         "        if (cell.cell_type === 'code'){\n",
1423         "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
1424         "                var data = cell.output_area.outputs[j];\n",
1425         "                if (data.data) {\n",
1426         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
1427         "                    data = data.data;\n",
1428         "                }\n",
1429         "                if (data['text/html'] == html_output) {\n",
1430         "                    return [cell, data, j];\n",
1431         "                }\n",
1432         "            }\n",
1433         "        }\n",
1434         "    }\n",
1435         "}\n",
1436         "\n",
1437         "// Register the function which deals with the matplotlib target/channel.\n",
1438         "// The kernel may be null if the page has been refreshed.\n",
1439         "if (IPython.notebook.kernel != null) {\n",
1440         "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
1441         "}\n"
1442        ],
1443        "text/plain": [
1444         "<IPython.core.display.Javascript object>"
1445        ]
1446       },
1447       "metadata": {},
1448       "output_type": "display_data"
1449      },
1450      {
1451       "data": {
1452        "text/html": [
1453         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkAAAARMCAYAAADBUV/1AAAAAXNSR0IArs4c6QAAQABJREFUeAHs0IEAAAAAgKD9qRcphAoDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGA0ZW4AADgUSURBVGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYuB06EAAAAAAQ5G+9wAiFkAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMHADAXaRAAGsLEZEAAAAAElFTkSuQmCC\" width=\"800\">"
1454        ],
1455        "text/plain": [
1456         "<IPython.core.display.HTML object>"
1457        ]
1458       },
1459       "metadata": {},
1460       "output_type": "display_data"
1461      }
1462     ],
1463     "source": [
1464      "# numpy.argmin(a, axis=None, out=None)[source]\n",
1465      "# Returns the indices of the minimum values along an axis.\n",
1466      "\n",
1467      "from sklearn.metrics import precision_recall_curve\n",
1468      "\n",
1469      "precision, recall, thresholds = precision_recall_curve(y_test, y_scores_lr)\n",
1470      "closest_zero = np.argmin(np.abs(thresholds)) # Index of the lowest threshold.\n",
1471      "closest_zero_p = precision[closest_zero]\n",
1472      "closest_zero_r = recall[closest_zero]\n",
1473      "\n",
1474      "plt.figure()\n",
1475      "plt.xlim([0.0, 1.01])\n",
1476      "plt.ylim([0.0, 1.01])\n",
1477      "plt.plot(precision, recall, label='Precision-Recall Curve')\n",
1478      "plt.plot(closest_zero_p, closest_zero_r, 'o', markersize = 12, fillstyle = 'none', c='r', mew=3)\n",
1479      "plt.xlabel('Precision', fontsize=16)\n",
1480      "plt.ylabel('Recall', fontsize=16)\n",
1481      "plt.axes().set_aspect('equal')\n",
1482      "plt.show()"
1483     ]
1484    },
1485    {
1486     "cell_type": "code",
1487     "execution_count": 20,
1488     "metadata": {
1489      "collapsed": false
1490     },
1491     "outputs": [
1492      {
1493       "data": {
1494        "text/plain": [
1495         "array([ -4.04847662,  -3.93819545,  -3.48628627,  -3.44776445,\n",
1496         "        -3.33892603,  -2.5783356 ,  -2.37746137,  -2.34718536,\n",
1497         "        -2.30446832,  -2.15792885,  -2.03386685,  -1.87131487,\n",
1498         "        -1.7495844 ,  -1.72691524,  -1.68712543,  -1.47668716,\n",
1499         "        -1.33979401,  -1.3051061 ,  -1.08033549,  -0.57099832,\n",
1500         "         0.13088342,   0.17583273,   0.47631823,   0.6418365 ,\n",
1501         "         1.00422797,   1.33670725,   1.68203683,   1.69861005,\n",
1502         "         1.87908244,   2.18989765,   2.43420944,   2.55168221,\n",
1503         "         3.71752409,   3.80620565,   4.21070117,   4.25093438,\n",
1504         "         4.30966876,   4.31558393,   4.55321241,   4.57143325,\n",
1505         "         4.93002949,   5.23271557,   5.73378353,   6.12856799,\n",
1506         "         6.55341039,   6.86404167,   6.92400179,   7.22184672,\n",
1507         "         7.37403798,   7.80959453,   8.26212674,   8.3930213 ,\n",
1508         "         8.45858117,   9.84572083,   9.87342932,  10.201736  ,\n",
1509         "        11.20681116,  11.4821926 ,  11.55476419,  11.68009017,\n",
1510         "        13.26095216,  14.73832302,  16.02811865])"
1511        ]
1512       },
1513       "execution_count": 20,
1514       "metadata": {},
1515       "output_type": "execute_result"
1516      }
1517     ],
1518     "source": [
1519      "thresholds"
1520     ]
1521    },
1522    {
1523     "cell_type": "markdown",
1524     "metadata": {},
1525     "source": [
1526      "### ROC curves, Area-Under-Curve (AUC)"
1527     ]
1528    },
1529    {
1530     "cell_type": "code",
1531     "execution_count": 21,
1532     "metadata": {
1533      "collapsed": false
1534     },
1535     "outputs": [
1536      {
1537       "data": {
1538        "application/javascript": [
1539         "/* Put everything inside the global mpl namespace */\n",
1540         "window.mpl = {};\n",
1541         "\n",
1542         "\n",
1543         "mpl.get_websocket_type = function() {\n",
1544         "    if (typeof(WebSocket) !== 'undefined') {\n",
1545         "        return WebSocket;\n",
1546         "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
1547         "        return MozWebSocket;\n",
1548         "    } else {\n",
1549         "        alert('Your browser does not have WebSocket support.' +\n",
1550         "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
1551         "              'Firefox 4 and 5 are also supported but you ' +\n",
1552         "              'have to enable WebSockets in about:config.');\n",
1553         "    };\n",
1554         "}\n",
1555         "\n",
1556         "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
1557         "    this.id = figure_id;\n",
1558         "\n",
1559         "    this.ws = websocket;\n",
1560         "\n",
1561         "    this.supports_binary = (this.ws.binaryType != undefined);\n",
1562         "\n",
1563         "    if (!this.supports_binary) {\n",
1564         "        var warnings = document.getElementById(\"mpl-warnings\");\n",
1565         "        if (warnings) {\n",
1566         "            warnings.style.display = 'block';\n",
1567         "            warnings.textContent = (\n",
1568         "                \"This browser does not support binary websocket messages. \" +\n",
1569         "                    \"Performance may be slow.\");\n",
1570         "        }\n",
1571         "    }\n",
1572         "\n",
1573         "    this.imageObj = new Image();\n",
1574         "\n",
1575         "    this.context = undefined;\n",
1576         "    this.message = undefined;\n",
1577         "    this.canvas = undefined;\n",
1578         "    this.rubberband_canvas = undefined;\n",
1579         "    this.rubberband_context = undefined;\n",
1580         "    this.format_dropdown = undefined;\n",
1581         "\n",
1582         "    this.image_mode = 'full';\n",
1583         "\n",
1584         "    this.root = $('<div/>');\n",
1585         "    this._root_extra_style(this.root)\n",
1586         "    this.root.attr('style', 'display: inline-block');\n",
1587         "\n",
1588         "    $(parent_element).append(this.root);\n",
1589         "\n",
1590         "    this._init_header(this);\n",
1591         "    this._init_canvas(this);\n",
1592         "    this._init_toolbar(this);\n",
1593         "\n",
1594         "    var fig = this;\n",
1595         "\n",
1596         "    this.waiting = false;\n",
1597         "\n",
1598         "    this.ws.onopen =  function () {\n",
1599         "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
1600         "            fig.send_message(\"send_image_mode\", {});\n",
1601         "            if (mpl.ratio != 1) {\n",
1602         "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
1603         "            }\n",
1604         "            fig.send_message(\"refresh\", {});\n",
1605         "        }\n",
1606         "\n",
1607         "    this.imageObj.onload = function() {\n",
1608         "            if (fig.image_mode == 'full') {\n",
1609         "                // Full images could contain transparency (where diff images\n",
1610         "                // almost always do), so we need to clear the canvas so that\n",
1611         "                // there is no ghosting.\n",
1612         "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
1613         "            }\n",
1614         "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
1615         "        };\n",
1616         "\n",
1617         "    this.imageObj.onunload = function() {\n",
1618         "        this.ws.close();\n",
1619         "    }\n",
1620         "\n",
1621         "    this.ws.onmessage = this._make_on_message_function(this);\n",
1622         "\n",
1623         "    this.ondownload = ondownload;\n",
1624         "}\n",
1625         "\n",
1626         "mpl.figure.prototype._init_header = function() {\n",
1627         "    var titlebar = $(\n",
1628         "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
1629         "        'ui-helper-clearfix\"/>');\n",
1630         "    var titletext = $(\n",
1631         "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
1632         "        'text-align: center; padding: 3px;\"/>');\n",
1633         "    titlebar.append(titletext)\n",
1634         "    this.root.append(titlebar);\n",
1635         "    this.header = titletext[0];\n",
1636         "}\n",
1637         "\n",
1638         "\n",
1639         "\n",
1640         "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
1641         "\n",
1642         "}\n",
1643         "\n",
1644         "\n",
1645         "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
1646         "\n",
1647         "}\n",
1648         "\n",
1649         "mpl.figure.prototype._init_canvas = function() {\n",
1650         "    var fig = this;\n",
1651         "\n",
1652         "    var canvas_div = $('<div/>');\n",
1653         "\n",
1654         "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
1655         "\n",
1656         "    function canvas_keyboard_event(event) {\n",
1657         "        return fig.key_event(event, event['data']);\n",
1658         "    }\n",
1659         "\n",
1660         "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
1661         "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
1662         "    this.canvas_div = canvas_div\n",
1663         "    this._canvas_extra_style(canvas_div)\n",
1664         "    this.root.append(canvas_div);\n",
1665         "\n",
1666         "    var canvas = $('<canvas/>');\n",
1667         "    canvas.addClass('mpl-canvas');\n",
1668         "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
1669         "\n",
1670         "    this.canvas = canvas[0];\n",
1671         "    this.context = canvas[0].getContext(\"2d\");\n",
1672         "\n",
1673         "    var backingStore = this.context.backingStorePixelRatio ||\n",
1674         "\tthis.context.webkitBackingStorePixelRatio ||\n",
1675         "\tthis.context.mozBackingStorePixelRatio ||\n",
1676         "\tthis.context.msBackingStorePixelRatio ||\n",
1677         "\tthis.context.oBackingStorePixelRatio ||\n",
1678         "\tthis.context.backingStorePixelRatio || 1;\n",
1679         "\n",
1680         "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
1681         "\n",
1682         "    var rubberband = $('<canvas/>');\n",
1683         "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
1684         "\n",
1685         "    var pass_mouse_events = true;\n",
1686         "\n",
1687         "    canvas_div.resizable({\n",
1688         "        start: function(event, ui) {\n",
1689         "            pass_mouse_events = false;\n",
1690         "        },\n",
1691         "        resize: function(event, ui) {\n",
1692         "            fig.request_resize(ui.size.width, ui.size.height);\n",
1693         "        },\n",
1694         "        stop: function(event, ui) {\n",
1695         "            pass_mouse_events = true;\n",
1696         "            fig.request_resize(ui.size.width, ui.size.height);\n",
1697         "        },\n",
1698         "    });\n",
1699         "\n",
1700         "    function mouse_event_fn(event) {\n",
1701         "        if (pass_mouse_events)\n",
1702         "            return fig.mouse_event(event, event['data']);\n",
1703         "    }\n",
1704         "\n",
1705         "    rubberband.mousedown('button_press', mouse_event_fn);\n",
1706         "    rubberband.mouseup('button_release', mouse_event_fn);\n",
1707         "    // Throttle sequential mouse events to 1 every 20ms.\n",
1708         "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
1709         "\n",
1710         "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
1711         "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
1712         "\n",
1713         "    canvas_div.on(\"wheel\", function (event) {\n",
1714         "        event = event.originalEvent;\n",
1715         "        event['data'] = 'scroll'\n",
1716         "        if (event.deltaY < 0) {\n",
1717         "            event.step = 1;\n",
1718         "        } else {\n",
1719         "            event.step = -1;\n",
1720         "        }\n",
1721         "        mouse_event_fn(event);\n",
1722         "    });\n",
1723         "\n",
1724         "    canvas_div.append(canvas);\n",
1725         "    canvas_div.append(rubberband);\n",
1726         "\n",
1727         "    this.rubberband = rubberband;\n",
1728         "    this.rubberband_canvas = rubberband[0];\n",
1729         "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
1730         "    this.rubberband_context.strokeStyle = \"#000000\";\n",
1731         "\n",
1732         "    this._resize_canvas = function(width, height) {\n",
1733         "        // Keep the size of the canvas, canvas container, and rubber band\n",
1734         "        // canvas in synch.\n",
1735         "        canvas_div.css('width', width)\n",
1736         "        canvas_div.css('height', height)\n",
1737         "\n",
1738         "        canvas.attr('width', width * mpl.ratio);\n",
1739         "        canvas.attr('height', height * mpl.ratio);\n",
1740         "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
1741         "\n",
1742         "        rubberband.attr('width', width);\n",
1743         "        rubberband.attr('height', height);\n",
1744         "    }\n",
1745         "\n",
1746         "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
1747         "    // upon first draw.\n",
1748         "    this._resize_canvas(600, 600);\n",
1749         "\n",
1750         "    // Disable right mouse context menu.\n",
1751         "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
1752         "        return false;\n",
1753         "    });\n",
1754         "\n",
1755         "    function set_focus () {\n",
1756         "        canvas.focus();\n",
1757         "        canvas_div.focus();\n",
1758         "    }\n",
1759         "\n",
1760         "    window.setTimeout(set_focus, 100);\n",
1761         "}\n",
1762         "\n",
1763         "mpl.figure.prototype._init_toolbar = function() {\n",
1764         "    var fig = this;\n",
1765         "\n",
1766         "    var nav_element = $('<div/>')\n",
1767         "    nav_element.attr('style', 'width: 100%');\n",
1768         "    this.root.append(nav_element);\n",
1769         "\n",
1770         "    // Define a callback function for later on.\n",
1771         "    function toolbar_event(event) {\n",
1772         "        return fig.toolbar_button_onclick(event['data']);\n",
1773         "    }\n",
1774         "    function toolbar_mouse_event(event) {\n",
1775         "        return fig.toolbar_button_onmouseover(event['data']);\n",
1776         "    }\n",
1777         "\n",
1778         "    for(var toolbar_ind in mpl.toolbar_items) {\n",
1779         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
1780         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
1781         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
1782         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
1783         "\n",
1784         "        if (!name) {\n",
1785         "            // put a spacer in here.\n",
1786         "            continue;\n",
1787         "        }\n",
1788         "        var button = $('<button/>');\n",
1789         "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
1790         "                        'ui-button-icon-only');\n",
1791         "        button.attr('role', 'button');\n",
1792         "        button.attr('aria-disabled', 'false');\n",
1793         "        button.click(method_name, toolbar_event);\n",
1794         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
1795         "\n",
1796         "        var icon_img = $('<span/>');\n",
1797         "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
1798         "        icon_img.addClass(image);\n",
1799         "        icon_img.addClass('ui-corner-all');\n",
1800         "\n",
1801         "        var tooltip_span = $('<span/>');\n",
1802         "        tooltip_span.addClass('ui-button-text');\n",
1803         "        tooltip_span.html(tooltip);\n",
1804         "\n",
1805         "        button.append(icon_img);\n",
1806         "        button.append(tooltip_span);\n",
1807         "\n",
1808         "        nav_element.append(button);\n",
1809         "    }\n",
1810         "\n",
1811         "    var fmt_picker_span = $('<span/>');\n",
1812         "\n",
1813         "    var fmt_picker = $('<select/>');\n",
1814         "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
1815         "    fmt_picker_span.append(fmt_picker);\n",
1816         "    nav_element.append(fmt_picker_span);\n",
1817         "    this.format_dropdown = fmt_picker[0];\n",
1818         "\n",
1819         "    for (var ind in mpl.extensions) {\n",
1820         "        var fmt = mpl.extensions[ind];\n",
1821         "        var option = $(\n",
1822         "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
1823         "        fmt_picker.append(option)\n",
1824         "    }\n",
1825         "\n",
1826         "    // Add hover states to the ui-buttons\n",
1827         "    $( \".ui-button\" ).hover(\n",
1828         "        function() { $(this).addClass(\"ui-state-hover\");},\n",
1829         "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
1830         "    );\n",
1831         "\n",
1832         "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
1833         "    nav_element.append(status_bar);\n",
1834         "    this.message = status_bar[0];\n",
1835         "}\n",
1836         "\n",
1837         "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
1838         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
1839         "    // which will in turn request a refresh of the image.\n",
1840         "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
1841         "}\n",
1842         "\n",
1843         "mpl.figure.prototype.send_message = function(type, properties) {\n",
1844         "    properties['type'] = type;\n",
1845         "    properties['figure_id'] = this.id;\n",
1846         "    this.ws.send(JSON.stringify(properties));\n",
1847         "}\n",
1848         "\n",
1849         "mpl.figure.prototype.send_draw_message = function() {\n",
1850         "    if (!this.waiting) {\n",
1851         "        this.waiting = true;\n",
1852         "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
1853         "    }\n",
1854         "}\n",
1855         "\n",
1856         "\n",
1857         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
1858         "    var format_dropdown = fig.format_dropdown;\n",
1859         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
1860         "    fig.ondownload(fig, format);\n",
1861         "}\n",
1862         "\n",
1863         "\n",
1864         "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
1865         "    var size = msg['size'];\n",
1866         "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
1867         "        fig._resize_canvas(size[0], size[1]);\n",
1868         "        fig.send_message(\"refresh\", {});\n",
1869         "    };\n",
1870         "}\n",
1871         "\n",
1872         "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
1873         "    var x0 = msg['x0'] / mpl.ratio;\n",
1874         "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
1875         "    var x1 = msg['x1'] / mpl.ratio;\n",
1876         "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
1877         "    x0 = Math.floor(x0) + 0.5;\n",
1878         "    y0 = Math.floor(y0) + 0.5;\n",
1879         "    x1 = Math.floor(x1) + 0.5;\n",
1880         "    y1 = Math.floor(y1) + 0.5;\n",
1881         "    var min_x = Math.min(x0, x1);\n",
1882         "    var min_y = Math.min(y0, y1);\n",
1883         "    var width = Math.abs(x1 - x0);\n",
1884         "    var height = Math.abs(y1 - y0);\n",
1885         "\n",
1886         "    fig.rubberband_context.clearRect(\n",
1887         "        0, 0, fig.canvas.width, fig.canvas.height);\n",
1888         "\n",
1889         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
1890         "}\n",
1891         "\n",
1892         "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
1893         "    // Updates the figure title.\n",
1894         "    fig.header.textContent = msg['label'];\n",
1895         "}\n",
1896         "\n",
1897         "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
1898         "    var cursor = msg['cursor'];\n",
1899         "    switch(cursor)\n",
1900         "    {\n",
1901         "    case 0:\n",
1902         "        cursor = 'pointer';\n",
1903         "        break;\n",
1904         "    case 1:\n",
1905         "        cursor = 'default';\n",
1906         "        break;\n",
1907         "    case 2:\n",
1908         "        cursor = 'crosshair';\n",
1909         "        break;\n",
1910         "    case 3:\n",
1911         "        cursor = 'move';\n",
1912         "        break;\n",
1913         "    }\n",
1914         "    fig.rubberband_canvas.style.cursor = cursor;\n",
1915         "}\n",
1916         "\n",
1917         "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
1918         "    fig.message.textContent = msg['message'];\n",
1919         "}\n",
1920         "\n",
1921         "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
1922         "    // Request the server to send over a new figure.\n",
1923         "    fig.send_draw_message();\n",
1924         "}\n",
1925         "\n",
1926         "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
1927         "    fig.image_mode = msg['mode'];\n",
1928         "}\n",
1929         "\n",
1930         "mpl.figure.prototype.updated_canvas_event = function() {\n",
1931         "    // Called whenever the canvas gets updated.\n",
1932         "    this.send_message(\"ack\", {});\n",
1933         "}\n",
1934         "\n",
1935         "// A function to construct a web socket function for onmessage handling.\n",
1936         "// Called in the figure constructor.\n",
1937         "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
1938         "    return function socket_on_message(evt) {\n",
1939         "        if (evt.data instanceof Blob) {\n",
1940         "            /* FIXME: We get \"Resource interpreted as Image but\n",
1941         "             * transferred with MIME type text/plain:\" errors on\n",
1942         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
1943         "             * to be part of the websocket stream */\n",
1944         "            evt.data.type = \"image/png\";\n",
1945         "\n",
1946         "            /* Free the memory for the previous frames */\n",
1947         "            if (fig.imageObj.src) {\n",
1948         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
1949         "                    fig.imageObj.src);\n",
1950         "            }\n",
1951         "\n",
1952         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
1953         "                evt.data);\n",
1954         "            fig.updated_canvas_event();\n",
1955         "            fig.waiting = false;\n",
1956         "            return;\n",
1957         "        }\n",
1958         "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
1959         "            fig.imageObj.src = evt.data;\n",
1960         "            fig.updated_canvas_event();\n",
1961         "            fig.waiting = false;\n",
1962         "            return;\n",
1963         "        }\n",
1964         "\n",
1965         "        var msg = JSON.parse(evt.data);\n",
1966         "        var msg_type = msg['type'];\n",
1967         "\n",
1968         "        // Call the  \"handle_{type}\" callback, which takes\n",
1969         "        // the figure and JSON message as its only arguments.\n",
1970         "        try {\n",
1971         "            var callback = fig[\"handle_\" + msg_type];\n",
1972         "        } catch (e) {\n",
1973         "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
1974         "            return;\n",
1975         "        }\n",
1976         "\n",
1977         "        if (callback) {\n",
1978         "            try {\n",
1979         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
1980         "                callback(fig, msg);\n",
1981         "            } catch (e) {\n",
1982         "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
1983         "            }\n",
1984         "        }\n",
1985         "    };\n",
1986         "}\n",
1987         "\n",
1988         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
1989         "mpl.findpos = function(e) {\n",
1990         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
1991         "    var targ;\n",
1992         "    if (!e)\n",
1993         "        e = window.event;\n",
1994         "    if (e.target)\n",
1995         "        targ = e.target;\n",
1996         "    else if (e.srcElement)\n",
1997         "        targ = e.srcElement;\n",
1998         "    if (targ.nodeType == 3) // defeat Safari bug\n",
1999         "        targ = targ.parentNode;\n",
2000         "\n",
2001         "    // jQuery normalizes the pageX and pageY\n",
2002         "    // pageX,Y are the mouse positions relative to the document\n",
2003         "    // offset() returns the position of the element relative to the document\n",
2004         "    var x = e.pageX - $(targ).offset().left;\n",
2005         "    var y = e.pageY - $(targ).offset().top;\n",
2006         "\n",
2007         "    return {\"x\": x, \"y\": y};\n",
2008         "};\n",
2009         "\n",
2010         "/*\n",
2011         " * return a copy of an object with only non-object keys\n",
2012         " * we need this to avoid circular references\n",
2013         " * http://stackoverflow.com/a/24161582/3208463\n",
2014         " */\n",
2015         "function simpleKeys (original) {\n",
2016         "  return Object.keys(original).reduce(function (obj, key) {\n",
2017         "    if (typeof original[key] !== 'object')\n",
2018         "        obj[key] = original[key]\n",
2019         "    return obj;\n",
2020         "  }, {});\n",
2021         "}\n",
2022         "\n",
2023         "mpl.figure.prototype.mouse_event = function(event, name) {\n",
2024         "    var canvas_pos = mpl.findpos(event)\n",
2025         "\n",
2026         "    if (name === 'button_press')\n",
2027         "    {\n",
2028         "        this.canvas.focus();\n",
2029         "        this.canvas_div.focus();\n",
2030         "    }\n",
2031         "\n",
2032         "    var x = canvas_pos.x * mpl.ratio;\n",
2033         "    var y = canvas_pos.y * mpl.ratio;\n",
2034         "\n",
2035         "    this.send_message(name, {x: x, y: y, button: event.button,\n",
2036         "                             step: event.step,\n",
2037         "                             guiEvent: simpleKeys(event)});\n",
2038         "\n",
2039         "    /* This prevents the web browser from automatically changing to\n",
2040         "     * the text insertion cursor when the button is pressed.  We want\n",
2041         "     * to control all of the cursor setting manually through the\n",
2042         "     * 'cursor' event from matplotlib */\n",
2043         "    event.preventDefault();\n",
2044         "    return false;\n",
2045         "}\n",
2046         "\n",
2047         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
2048         "    // Handle any extra behaviour associated with a key event\n",
2049         "}\n",
2050         "\n",
2051         "mpl.figure.prototype.key_event = function(event, name) {\n",
2052         "\n",
2053         "    // Prevent repeat events\n",
2054         "    if (name == 'key_press')\n",
2055         "    {\n",
2056         "        if (event.which === this._key)\n",
2057         "            return;\n",
2058         "        else\n",
2059         "            this._key = event.which;\n",
2060         "    }\n",
2061         "    if (name == 'key_release')\n",
2062         "        this._key = null;\n",
2063         "\n",
2064         "    var value = '';\n",
2065         "    if (event.ctrlKey && event.which != 17)\n",
2066         "        value += \"ctrl+\";\n",
2067         "    if (event.altKey && event.which != 18)\n",
2068         "        value += \"alt+\";\n",
2069         "    if (event.shiftKey && event.which != 16)\n",
2070         "        value += \"shift+\";\n",
2071         "\n",
2072         "    value += 'k';\n",
2073         "    value += event.which.toString();\n",
2074         "\n",
2075         "    this._key_event_extra(event, name);\n",
2076         "\n",
2077         "    this.send_message(name, {key: value,\n",
2078         "                             guiEvent: simpleKeys(event)});\n",
2079         "    return false;\n",
2080         "}\n",
2081         "\n",
2082         "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
2083         "    if (name == 'download') {\n",
2084         "        this.handle_save(this, null);\n",
2085         "    } else {\n",
2086         "        this.send_message(\"toolbar_button\", {name: name});\n",
2087         "    }\n",
2088         "};\n",
2089         "\n",
2090         "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
2091         "    this.message.textContent = tooltip;\n",
2092         "};\n",
2093         "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",
2094         "\n",
2095         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
2096         "\n",
2097         "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
2098         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
2099         "    // object with the appropriate methods. Currently this is a non binary\n",
2100         "    // socket, so there is still some room for performance tuning.\n",
2101         "    var ws = {};\n",
2102         "\n",
2103         "    ws.close = function() {\n",
2104         "        comm.close()\n",
2105         "    };\n",
2106         "    ws.send = function(m) {\n",
2107         "        //console.log('sending', m);\n",
2108         "        comm.send(m);\n",
2109         "    };\n",
2110         "    // Register the callback with on_msg.\n",
2111         "    comm.on_msg(function(msg) {\n",
2112         "        //console.log('receiving', msg['content']['data'], msg);\n",
2113         "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
2114         "        ws.onmessage(msg['content']['data'])\n",
2115         "    });\n",
2116         "    return ws;\n",
2117         "}\n",
2118         "\n",
2119         "mpl.mpl_figure_comm = function(comm, msg) {\n",
2120         "    // This is the function which gets called when the mpl process\n",
2121         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
2122         "\n",
2123         "    var id = msg.content.data.id;\n",
2124         "    // Get hold of the div created by the display call when the Comm\n",
2125         "    // socket was opened in Python.\n",
2126         "    var element = $(\"#\" + id);\n",
2127         "    var ws_proxy = comm_websocket_adapter(comm)\n",
2128         "\n",
2129         "    function ondownload(figure, format) {\n",
2130         "        window.open(figure.imageObj.src);\n",
2131         "    }\n",
2132         "\n",
2133         "    var fig = new mpl.figure(id, ws_proxy,\n",
2134         "                           ondownload,\n",
2135         "                           element.get(0));\n",
2136         "\n",
2137         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
2138         "    // web socket which is closed, not our websocket->open comm proxy.\n",
2139         "    ws_proxy.onopen();\n",
2140         "\n",
2141         "    fig.parent_element = element.get(0);\n",
2142         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
2143         "    if (!fig.cell_info) {\n",
2144         "        console.error(\"Failed to find cell for figure\", id, fig);\n",
2145         "        return;\n",
2146         "    }\n",
2147         "\n",
2148         "    var output_index = fig.cell_info[2]\n",
2149         "    var cell = fig.cell_info[0];\n",
2150         "\n",
2151         "};\n",
2152         "\n",
2153         "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
2154         "    var width = fig.canvas.width/mpl.ratio\n",
2155         "    fig.root.unbind('remove')\n",
2156         "\n",
2157         "    // Update the output cell to use the data from the current canvas.\n",
2158         "    fig.push_to_output();\n",
2159         "    var dataURL = fig.canvas.toDataURL();\n",
2160         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
2161         "    // the notebook keyboard shortcuts fail.\n",
2162         "    IPython.keyboard_manager.enable()\n",
2163         "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
2164         "    fig.close_ws(fig, msg);\n",
2165         "}\n",
2166         "\n",
2167         "mpl.figure.prototype.close_ws = function(fig, msg){\n",
2168         "    fig.send_message('closing', msg);\n",
2169         "    // fig.ws.close()\n",
2170         "}\n",
2171         "\n",
2172         "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
2173         "    // Turn the data on the canvas into data in the output cell.\n",
2174         "    var width = this.canvas.width/mpl.ratio\n",
2175         "    var dataURL = this.canvas.toDataURL();\n",
2176         "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
2177         "}\n",
2178         "\n",
2179         "mpl.figure.prototype.updated_canvas_event = function() {\n",
2180         "    // Tell IPython that the notebook contents must change.\n",
2181         "    IPython.notebook.set_dirty(true);\n",
2182         "    this.send_message(\"ack\", {});\n",
2183         "    var fig = this;\n",
2184         "    // Wait a second, then push the new image to the DOM so\n",
2185         "    // that it is saved nicely (might be nice to debounce this).\n",
2186         "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
2187         "}\n",
2188         "\n",
2189         "mpl.figure.prototype._init_toolbar = function() {\n",
2190         "    var fig = this;\n",
2191         "\n",
2192         "    var nav_element = $('<div/>')\n",
2193         "    nav_element.attr('style', 'width: 100%');\n",
2194         "    this.root.append(nav_element);\n",
2195         "\n",
2196         "    // Define a callback function for later on.\n",
2197         "    function toolbar_event(event) {\n",
2198         "        return fig.toolbar_button_onclick(event['data']);\n",
2199         "    }\n",
2200         "    function toolbar_mouse_event(event) {\n",
2201         "        return fig.toolbar_button_onmouseover(event['data']);\n",
2202         "    }\n",
2203         "\n",
2204         "    for(var toolbar_ind in mpl.toolbar_items){\n",
2205         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
2206         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
2207         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
2208         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
2209         "\n",
2210         "        if (!name) { continue; };\n",
2211         "\n",
2212         "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
2213         "        button.click(method_name, toolbar_event);\n",
2214         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
2215         "        nav_element.append(button);\n",
2216         "    }\n",
2217         "\n",
2218         "    // Add the status bar.\n",
2219         "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
2220         "    nav_element.append(status_bar);\n",
2221         "    this.message = status_bar[0];\n",
2222         "\n",
2223         "    // Add the close button to the window.\n",
2224         "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
2225         "    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",
2226         "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
2227         "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
2228         "    buttongrp.append(button);\n",
2229         "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
2230         "    titlebar.prepend(buttongrp);\n",
2231         "}\n",
2232         "\n",
2233         "mpl.figure.prototype._root_extra_style = function(el){\n",
2234         "    var fig = this\n",
2235         "    el.on(\"remove\", function(){\n",
2236         "\tfig.close_ws(fig, {});\n",
2237         "    });\n",
2238         "}\n",
2239         "\n",
2240         "mpl.figure.prototype._canvas_extra_style = function(el){\n",
2241         "    // this is important to make the div 'focusable\n",
2242         "    el.attr('tabindex', 0)\n",
2243         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
2244         "    // off when our div gets focus\n",
2245         "\n",
2246         "    // location in version 3\n",
2247         "    if (IPython.notebook.keyboard_manager) {\n",
2248         "        IPython.notebook.keyboard_manager.register_events(el);\n",
2249         "    }\n",
2250         "    else {\n",
2251         "        // location in version 2\n",
2252         "        IPython.keyboard_manager.register_events(el);\n",
2253         "    }\n",
2254         "\n",
2255         "}\n",
2256         "\n",
2257         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
2258         "    var manager = IPython.notebook.keyboard_manager;\n",
2259         "    if (!manager)\n",
2260         "        manager = IPython.keyboard_manager;\n",
2261         "\n",
2262         "    // Check for shift+enter\n",
2263         "    if (event.shiftKey && event.which == 13) {\n",
2264         "        this.canvas_div.blur();\n",
2265         "        // select the cell after this one\n",
2266         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
2267         "        IPython.notebook.select(index + 1);\n",
2268         "    }\n",
2269         "}\n",
2270         "\n",
2271         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
2272         "    fig.ondownload(fig, null);\n",
2273         "}\n",
2274         "\n",
2275         "\n",
2276         "mpl.find_output_cell = function(html_output) {\n",
2277         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
2278         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
2279         "    // IPython event is triggered only after the cells have been serialised, which for\n",
2280         "    // our purposes (turning an active figure into a static one), is too late.\n",
2281         "    var cells = IPython.notebook.get_cells();\n",
2282         "    var ncells = cells.length;\n",
2283         "    for (var i=0; i<ncells; i++) {\n",
2284         "        var cell = cells[i];\n",
2285         "        if (cell.cell_type === 'code'){\n",
2286         "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
2287         "                var data = cell.output_area.outputs[j];\n",
2288         "                if (data.data) {\n",
2289         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
2290         "                    data = data.data;\n",
2291         "                }\n",
2292         "                if (data['text/html'] == html_output) {\n",
2293         "                    return [cell, data, j];\n",
2294         "                }\n",
2295         "            }\n",
2296         "        }\n",
2297         "    }\n",
2298         "}\n",
2299         "\n",
2300         "// Register the function which deals with the matplotlib target/channel.\n",
2301         "// The kernel may be null if the page has been refreshed.\n",
2302         "if (IPython.notebook.kernel != null) {\n",
2303         "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
2304         "}\n"
2305        ],
2306        "text/plain": [
2307         "<IPython.core.display.Javascript object>"
2308        ]
2309       },
2310       "metadata": {},
2311       "output_type": "display_data"
2312      },
2313      {
2314       "data": {
2315        "text/html": [
2316         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkAAAARMCAYAAADBUV/1AAAAAXNSR0IArs4c6QAAQABJREFUeAHs0IEAAAAAgKD9qRcphAoDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGA0ZW4AADgUSURBVGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYuB06EAAAAAAQ5G+9wAiFkAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMHADAXaRAAGsLEZEAAAAAElFTkSuQmCC\" width=\"800\">"
2317        ],
2318        "text/plain": [
2319         "<IPython.core.display.HTML object>"
2320        ]
2321       },
2322       "metadata": {},
2323       "output_type": "display_data"
2324      }
2325     ],
2326     "source": [
2327      "# ROC: Receiver Operating Characteristic Curve.\n",
2328      "# True positive rate vs False positive rate.\n",
2329      "\n",
2330      "from sklearn.metrics import roc_curve, auc\n",
2331      "\n",
2332      "X_train, X_test, y_train, y_test = train_test_split(X, y_binary_imbalanced, random_state=0)\n",
2333      "\n",
2334      "y_score_lr = lr.fit(X_train, y_train).decision_function(X_test)\n",
2335      "fpr_lr, tpr_lr, _ = roc_curve(y_test, y_score_lr)\n",
2336      "roc_auc_lr = auc(fpr_lr, tpr_lr)\n",
2337      "\n",
2338      "plt.figure()\n",
2339      "plt.xlim([-0.01, 1.00])\n",
2340      "plt.ylim([-0.01, 1.01])\n",
2341      "plt.plot(fpr_lr, tpr_lr, lw=3, label='LogRegr ROC curve (area = {:0.2f})'.format(roc_auc_lr))\n",
2342      "plt.xlabel('False Positive Rate', fontsize=16)\n",
2343      "plt.ylabel('True Positive Rate', fontsize=16)\n",
2344      "plt.title('ROC curve (1-of-10 digits classifier)', fontsize=16)\n",
2345      "plt.legend(loc='lower right', fontsize=13)\n",
2346      "plt.plot([0, 1], [0, 1], color='navy', lw=3, linestyle='--')\n",
2347      "plt.axes().set_aspect('equal')\n",
2348      "plt.show()"
2349     ]
2350    },
2351    {
2352     "cell_type": "code",
2353     "execution_count": 22,
2354     "metadata": {
2355      "collapsed": false,
2356      "scrolled": false
2357     },
2358     "outputs": [
2359      {
2360       "data": {
2361        "application/javascript": [
2362         "/* Put everything inside the global mpl namespace */\n",
2363         "window.mpl = {};\n",
2364         "\n",
2365         "\n",
2366         "mpl.get_websocket_type = function() {\n",
2367         "    if (typeof(WebSocket) !== 'undefined') {\n",
2368         "        return WebSocket;\n",
2369         "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
2370         "        return MozWebSocket;\n",
2371         "    } else {\n",
2372         "        alert('Your browser does not have WebSocket support.' +\n",
2373         "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
2374         "              'Firefox 4 and 5 are also supported but you ' +\n",
2375         "              'have to enable WebSockets in about:config.');\n",
2376         "    };\n",
2377         "}\n",
2378         "\n",
2379         "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
2380         "    this.id = figure_id;\n",
2381         "\n",
2382         "    this.ws = websocket;\n",
2383         "\n",
2384         "    this.supports_binary = (this.ws.binaryType != undefined);\n",
2385         "\n",
2386         "    if (!this.supports_binary) {\n",
2387         "        var warnings = document.getElementById(\"mpl-warnings\");\n",
2388         "        if (warnings) {\n",
2389         "            warnings.style.display = 'block';\n",
2390         "            warnings.textContent = (\n",
2391         "                \"This browser does not support binary websocket messages. \" +\n",
2392         "                    \"Performance may be slow.\");\n",
2393         "        }\n",
2394         "    }\n",
2395         "\n",
2396         "    this.imageObj = new Image();\n",
2397         "\n",
2398         "    this.context = undefined;\n",
2399         "    this.message = undefined;\n",
2400         "    this.canvas = undefined;\n",
2401         "    this.rubberband_canvas = undefined;\n",
2402         "    this.rubberband_context = undefined;\n",
2403         "    this.format_dropdown = undefined;\n",
2404         "\n",
2405         "    this.image_mode = 'full';\n",
2406         "\n",
2407         "    this.root = $('<div/>');\n",
2408         "    this._root_extra_style(this.root)\n",
2409         "    this.root.attr('style', 'display: inline-block');\n",
2410         "\n",
2411         "    $(parent_element).append(this.root);\n",
2412         "\n",
2413         "    this._init_header(this);\n",
2414         "    this._init_canvas(this);\n",
2415         "    this._init_toolbar(this);\n",
2416         "\n",
2417         "    var fig = this;\n",
2418         "\n",
2419         "    this.waiting = false;\n",
2420         "\n",
2421         "    this.ws.onopen =  function () {\n",
2422         "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
2423         "            fig.send_message(\"send_image_mode\", {});\n",
2424         "            if (mpl.ratio != 1) {\n",
2425         "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
2426         "            }\n",
2427         "            fig.send_message(\"refresh\", {});\n",
2428         "        }\n",
2429         "\n",
2430         "    this.imageObj.onload = function() {\n",
2431         "            if (fig.image_mode == 'full') {\n",
2432         "                // Full images could contain transparency (where diff images\n",
2433         "                // almost always do), so we need to clear the canvas so that\n",
2434         "                // there is no ghosting.\n",
2435         "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
2436         "            }\n",
2437         "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
2438         "        };\n",
2439         "\n",
2440         "    this.imageObj.onunload = function() {\n",
2441         "        this.ws.close();\n",
2442         "    }\n",
2443         "\n",
2444         "    this.ws.onmessage = this._make_on_message_function(this);\n",
2445         "\n",
2446         "    this.ondownload = ondownload;\n",
2447         "}\n",
2448         "\n",
2449         "mpl.figure.prototype._init_header = function() {\n",
2450         "    var titlebar = $(\n",
2451         "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
2452         "        'ui-helper-clearfix\"/>');\n",
2453         "    var titletext = $(\n",
2454         "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
2455         "        'text-align: center; padding: 3px;\"/>');\n",
2456         "    titlebar.append(titletext)\n",
2457         "    this.root.append(titlebar);\n",
2458         "    this.header = titletext[0];\n",
2459         "}\n",
2460         "\n",
2461         "\n",
2462         "\n",
2463         "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
2464         "\n",
2465         "}\n",
2466         "\n",
2467         "\n",
2468         "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
2469         "\n",
2470         "}\n",
2471         "\n",
2472         "mpl.figure.prototype._init_canvas = function() {\n",
2473         "    var fig = this;\n",
2474         "\n",
2475         "    var canvas_div = $('<div/>');\n",
2476         "\n",
2477         "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
2478         "\n",
2479         "    function canvas_keyboard_event(event) {\n",
2480         "        return fig.key_event(event, event['data']);\n",
2481         "    }\n",
2482         "\n",
2483         "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
2484         "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
2485         "    this.canvas_div = canvas_div\n",
2486         "    this._canvas_extra_style(canvas_div)\n",
2487         "    this.root.append(canvas_div);\n",
2488         "\n",
2489         "    var canvas = $('<canvas/>');\n",
2490         "    canvas.addClass('mpl-canvas');\n",
2491         "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
2492         "\n",
2493         "    this.canvas = canvas[0];\n",
2494         "    this.context = canvas[0].getContext(\"2d\");\n",
2495         "\n",
2496         "    var backingStore = this.context.backingStorePixelRatio ||\n",
2497         "\tthis.context.webkitBackingStorePixelRatio ||\n",
2498         "\tthis.context.mozBackingStorePixelRatio ||\n",
2499         "\tthis.context.msBackingStorePixelRatio ||\n",
2500         "\tthis.context.oBackingStorePixelRatio ||\n",
2501         "\tthis.context.backingStorePixelRatio || 1;\n",
2502         "\n",
2503         "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
2504         "\n",
2505         "    var rubberband = $('<canvas/>');\n",
2506         "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
2507         "\n",
2508         "    var pass_mouse_events = true;\n",
2509         "\n",
2510         "    canvas_div.resizable({\n",
2511         "        start: function(event, ui) {\n",
2512         "            pass_mouse_events = false;\n",
2513         "        },\n",
2514         "        resize: function(event, ui) {\n",
2515         "            fig.request_resize(ui.size.width, ui.size.height);\n",
2516         "        },\n",
2517         "        stop: function(event, ui) {\n",
2518         "            pass_mouse_events = true;\n",
2519         "            fig.request_resize(ui.size.width, ui.size.height);\n",
2520         "        },\n",
2521         "    });\n",
2522         "\n",
2523         "    function mouse_event_fn(event) {\n",
2524         "        if (pass_mouse_events)\n",
2525         "            return fig.mouse_event(event, event['data']);\n",
2526         "    }\n",
2527         "\n",
2528         "    rubberband.mousedown('button_press', mouse_event_fn);\n",
2529         "    rubberband.mouseup('button_release', mouse_event_fn);\n",
2530         "    // Throttle sequential mouse events to 1 every 20ms.\n",
2531         "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
2532         "\n",
2533         "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
2534         "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
2535         "\n",
2536         "    canvas_div.on(\"wheel\", function (event) {\n",
2537         "        event = event.originalEvent;\n",
2538         "        event['data'] = 'scroll'\n",
2539         "        if (event.deltaY < 0) {\n",
2540         "            event.step = 1;\n",
2541         "        } else {\n",
2542         "            event.step = -1;\n",
2543         "        }\n",
2544         "        mouse_event_fn(event);\n",
2545         "    });\n",
2546         "\n",
2547         "    canvas_div.append(canvas);\n",
2548         "    canvas_div.append(rubberband);\n",
2549         "\n",
2550         "    this.rubberband = rubberband;\n",
2551         "    this.rubberband_canvas = rubberband[0];\n",
2552         "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
2553         "    this.rubberband_context.strokeStyle = \"#000000\";\n",
2554         "\n",
2555         "    this._resize_canvas = function(width, height) {\n",
2556         "        // Keep the size of the canvas, canvas container, and rubber band\n",
2557         "        // canvas in synch.\n",
2558         "        canvas_div.css('width', width)\n",
2559         "        canvas_div.css('height', height)\n",
2560         "\n",
2561         "        canvas.attr('width', width * mpl.ratio);\n",
2562         "        canvas.attr('height', height * mpl.ratio);\n",
2563         "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
2564         "\n",
2565         "        rubberband.attr('width', width);\n",
2566         "        rubberband.attr('height', height);\n",
2567         "    }\n",
2568         "\n",
2569         "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
2570         "    // upon first draw.\n",
2571         "    this._resize_canvas(600, 600);\n",
2572         "\n",
2573         "    // Disable right mouse context menu.\n",
2574         "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
2575         "        return false;\n",
2576         "    });\n",
2577         "\n",
2578         "    function set_focus () {\n",
2579         "        canvas.focus();\n",
2580         "        canvas_div.focus();\n",
2581         "    }\n",
2582         "\n",
2583         "    window.setTimeout(set_focus, 100);\n",
2584         "}\n",
2585         "\n",
2586         "mpl.figure.prototype._init_toolbar = function() {\n",
2587         "    var fig = this;\n",
2588         "\n",
2589         "    var nav_element = $('<div/>')\n",
2590         "    nav_element.attr('style', 'width: 100%');\n",
2591         "    this.root.append(nav_element);\n",
2592         "\n",
2593         "    // Define a callback function for later on.\n",
2594         "    function toolbar_event(event) {\n",
2595         "        return fig.toolbar_button_onclick(event['data']);\n",
2596         "    }\n",
2597         "    function toolbar_mouse_event(event) {\n",
2598         "        return fig.toolbar_button_onmouseover(event['data']);\n",
2599         "    }\n",
2600         "\n",
2601         "    for(var toolbar_ind in mpl.toolbar_items) {\n",
2602         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
2603         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
2604         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
2605         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
2606         "\n",
2607         "        if (!name) {\n",
2608         "            // put a spacer in here.\n",
2609         "            continue;\n",
2610         "        }\n",
2611         "        var button = $('<button/>');\n",
2612         "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
2613         "                        'ui-button-icon-only');\n",
2614         "        button.attr('role', 'button');\n",
2615         "        button.attr('aria-disabled', 'false');\n",
2616         "        button.click(method_name, toolbar_event);\n",
2617         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
2618         "\n",
2619         "        var icon_img = $('<span/>');\n",
2620         "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
2621         "        icon_img.addClass(image);\n",
2622         "        icon_img.addClass('ui-corner-all');\n",
2623         "\n",
2624         "        var tooltip_span = $('<span/>');\n",
2625         "        tooltip_span.addClass('ui-button-text');\n",
2626         "        tooltip_span.html(tooltip);\n",
2627         "\n",
2628         "        button.append(icon_img);\n",
2629         "        button.append(tooltip_span);\n",
2630         "\n",
2631         "        nav_element.append(button);\n",
2632         "    }\n",
2633         "\n",
2634         "    var fmt_picker_span = $('<span/>');\n",
2635         "\n",
2636         "    var fmt_picker = $('<select/>');\n",
2637         "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
2638         "    fmt_picker_span.append(fmt_picker);\n",
2639         "    nav_element.append(fmt_picker_span);\n",
2640         "    this.format_dropdown = fmt_picker[0];\n",
2641         "\n",
2642         "    for (var ind in mpl.extensions) {\n",
2643         "        var fmt = mpl.extensions[ind];\n",
2644         "        var option = $(\n",
2645         "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
2646         "        fmt_picker.append(option)\n",
2647         "    }\n",
2648         "\n",
2649         "    // Add hover states to the ui-buttons\n",
2650         "    $( \".ui-button\" ).hover(\n",
2651         "        function() { $(this).addClass(\"ui-state-hover\");},\n",
2652         "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
2653         "    );\n",
2654         "\n",
2655         "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
2656         "    nav_element.append(status_bar);\n",
2657         "    this.message = status_bar[0];\n",
2658         "}\n",
2659         "\n",
2660         "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
2661         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
2662         "    // which will in turn request a refresh of the image.\n",
2663         "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
2664         "}\n",
2665         "\n",
2666         "mpl.figure.prototype.send_message = function(type, properties) {\n",
2667         "    properties['type'] = type;\n",
2668         "    properties['figure_id'] = this.id;\n",
2669         "    this.ws.send(JSON.stringify(properties));\n",
2670         "}\n",
2671         "\n",
2672         "mpl.figure.prototype.send_draw_message = function() {\n",
2673         "    if (!this.waiting) {\n",
2674         "        this.waiting = true;\n",
2675         "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
2676         "    }\n",
2677         "}\n",
2678         "\n",
2679         "\n",
2680         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
2681         "    var format_dropdown = fig.format_dropdown;\n",
2682         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
2683         "    fig.ondownload(fig, format);\n",
2684         "}\n",
2685         "\n",
2686         "\n",
2687         "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
2688         "    var size = msg['size'];\n",
2689         "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
2690         "        fig._resize_canvas(size[0], size[1]);\n",
2691         "        fig.send_message(\"refresh\", {});\n",
2692         "    };\n",
2693         "}\n",
2694         "\n",
2695         "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
2696         "    var x0 = msg['x0'] / mpl.ratio;\n",
2697         "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
2698         "    var x1 = msg['x1'] / mpl.ratio;\n",
2699         "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
2700         "    x0 = Math.floor(x0) + 0.5;\n",
2701         "    y0 = Math.floor(y0) + 0.5;\n",
2702         "    x1 = Math.floor(x1) + 0.5;\n",
2703         "    y1 = Math.floor(y1) + 0.5;\n",
2704         "    var min_x = Math.min(x0, x1);\n",
2705         "    var min_y = Math.min(y0, y1);\n",
2706         "    var width = Math.abs(x1 - x0);\n",
2707         "    var height = Math.abs(y1 - y0);\n",
2708         "\n",
2709         "    fig.rubberband_context.clearRect(\n",
2710         "        0, 0, fig.canvas.width, fig.canvas.height);\n",
2711         "\n",
2712         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
2713         "}\n",
2714         "\n",
2715         "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
2716         "    // Updates the figure title.\n",
2717         "    fig.header.textContent = msg['label'];\n",
2718         "}\n",
2719         "\n",
2720         "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
2721         "    var cursor = msg['cursor'];\n",
2722         "    switch(cursor)\n",
2723         "    {\n",
2724         "    case 0:\n",
2725         "        cursor = 'pointer';\n",
2726         "        break;\n",
2727         "    case 1:\n",
2728         "        cursor = 'default';\n",
2729         "        break;\n",
2730         "    case 2:\n",
2731         "        cursor = 'crosshair';\n",
2732         "        break;\n",
2733         "    case 3:\n",
2734         "        cursor = 'move';\n",
2735         "        break;\n",
2736         "    }\n",
2737         "    fig.rubberband_canvas.style.cursor = cursor;\n",
2738         "}\n",
2739         "\n",
2740         "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
2741         "    fig.message.textContent = msg['message'];\n",
2742         "}\n",
2743         "\n",
2744         "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
2745         "    // Request the server to send over a new figure.\n",
2746         "    fig.send_draw_message();\n",
2747         "}\n",
2748         "\n",
2749         "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
2750         "    fig.image_mode = msg['mode'];\n",
2751         "}\n",
2752         "\n",
2753         "mpl.figure.prototype.updated_canvas_event = function() {\n",
2754         "    // Called whenever the canvas gets updated.\n",
2755         "    this.send_message(\"ack\", {});\n",
2756         "}\n",
2757         "\n",
2758         "// A function to construct a web socket function for onmessage handling.\n",
2759         "// Called in the figure constructor.\n",
2760         "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
2761         "    return function socket_on_message(evt) {\n",
2762         "        if (evt.data instanceof Blob) {\n",
2763         "            /* FIXME: We get \"Resource interpreted as Image but\n",
2764         "             * transferred with MIME type text/plain:\" errors on\n",
2765         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
2766         "             * to be part of the websocket stream */\n",
2767         "            evt.data.type = \"image/png\";\n",
2768         "\n",
2769         "            /* Free the memory for the previous frames */\n",
2770         "            if (fig.imageObj.src) {\n",
2771         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
2772         "                    fig.imageObj.src);\n",
2773         "            }\n",
2774         "\n",
2775         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
2776         "                evt.data);\n",
2777         "            fig.updated_canvas_event();\n",
2778         "            fig.waiting = false;\n",
2779         "            return;\n",
2780         "        }\n",
2781         "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
2782         "            fig.imageObj.src = evt.data;\n",
2783         "            fig.updated_canvas_event();\n",
2784         "            fig.waiting = false;\n",
2785         "            return;\n",
2786         "        }\n",
2787         "\n",
2788         "        var msg = JSON.parse(evt.data);\n",
2789         "        var msg_type = msg['type'];\n",
2790         "\n",
2791         "        // Call the  \"handle_{type}\" callback, which takes\n",
2792         "        // the figure and JSON message as its only arguments.\n",
2793         "        try {\n",
2794         "            var callback = fig[\"handle_\" + msg_type];\n",
2795         "        } catch (e) {\n",
2796         "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
2797         "            return;\n",
2798         "        }\n",
2799         "\n",
2800         "        if (callback) {\n",
2801         "            try {\n",
2802         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
2803         "                callback(fig, msg);\n",
2804         "            } catch (e) {\n",
2805         "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
2806         "            }\n",
2807         "        }\n",
2808         "    };\n",
2809         "}\n",
2810         "\n",
2811         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
2812         "mpl.findpos = function(e) {\n",
2813         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
2814         "    var targ;\n",
2815         "    if (!e)\n",
2816         "        e = window.event;\n",
2817         "    if (e.target)\n",
2818         "        targ = e.target;\n",
2819         "    else if (e.srcElement)\n",
2820         "        targ = e.srcElement;\n",
2821         "    if (targ.nodeType == 3) // defeat Safari bug\n",
2822         "        targ = targ.parentNode;\n",
2823         "\n",
2824         "    // jQuery normalizes the pageX and pageY\n",
2825         "    // pageX,Y are the mouse positions relative to the document\n",
2826         "    // offset() returns the position of the element relative to the document\n",
2827         "    var x = e.pageX - $(targ).offset().left;\n",
2828         "    var y = e.pageY - $(targ).offset().top;\n",
2829         "\n",
2830         "    return {\"x\": x, \"y\": y};\n",
2831         "};\n",
2832         "\n",
2833         "/*\n",
2834         " * return a copy of an object with only non-object keys\n",
2835         " * we need this to avoid circular references\n",
2836         " * http://stackoverflow.com/a/24161582/3208463\n",
2837         " */\n",
2838         "function simpleKeys (original) {\n",
2839         "  return Object.keys(original).reduce(function (obj, key) {\n",
2840         "    if (typeof original[key] !== 'object')\n",
2841         "        obj[key] = original[key]\n",
2842         "    return obj;\n",
2843         "  }, {});\n",
2844         "}\n",
2845         "\n",
2846         "mpl.figure.prototype.mouse_event = function(event, name) {\n",
2847         "    var canvas_pos = mpl.findpos(event)\n",
2848         "\n",
2849         "    if (name === 'button_press')\n",
2850         "    {\n",
2851         "        this.canvas.focus();\n",
2852         "        this.canvas_div.focus();\n",
2853         "    }\n",
2854         "\n",
2855         "    var x = canvas_pos.x * mpl.ratio;\n",
2856         "    var y = canvas_pos.y * mpl.ratio;\n",
2857         "\n",
2858         "    this.send_message(name, {x: x, y: y, button: event.button,\n",
2859         "                             step: event.step,\n",
2860         "                             guiEvent: simpleKeys(event)});\n",
2861         "\n",
2862         "    /* This prevents the web browser from automatically changing to\n",
2863         "     * the text insertion cursor when the button is pressed.  We want\n",
2864         "     * to control all of the cursor setting manually through the\n",
2865         "     * 'cursor' event from matplotlib */\n",
2866         "    event.preventDefault();\n",
2867         "    return false;\n",
2868         "}\n",
2869         "\n",
2870         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
2871         "    // Handle any extra behaviour associated with a key event\n",
2872         "}\n",
2873         "\n",
2874         "mpl.figure.prototype.key_event = function(event, name) {\n",
2875         "\n",
2876         "    // Prevent repeat events\n",
2877         "    if (name == 'key_press')\n",
2878         "    {\n",
2879         "        if (event.which === this._key)\n",
2880         "            return;\n",
2881         "        else\n",
2882         "            this._key = event.which;\n",
2883         "    }\n",
2884         "    if (name == 'key_release')\n",
2885         "        this._key = null;\n",
2886         "\n",
2887         "    var value = '';\n",
2888         "    if (event.ctrlKey && event.which != 17)\n",
2889         "        value += \"ctrl+\";\n",
2890         "    if (event.altKey && event.which != 18)\n",
2891         "        value += \"alt+\";\n",
2892         "    if (event.shiftKey && event.which != 16)\n",
2893         "        value += \"shift+\";\n",
2894         "\n",
2895         "    value += 'k';\n",
2896         "    value += event.which.toString();\n",
2897         "\n",
2898         "    this._key_event_extra(event, name);\n",
2899         "\n",
2900         "    this.send_message(name, {key: value,\n",
2901         "                             guiEvent: simpleKeys(event)});\n",
2902         "    return false;\n",
2903         "}\n",
2904         "\n",
2905         "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
2906         "    if (name == 'download') {\n",
2907         "        this.handle_save(this, null);\n",
2908         "    } else {\n",
2909         "        this.send_message(\"toolbar_button\", {name: name});\n",
2910         "    }\n",
2911         "};\n",
2912         "\n",
2913         "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
2914         "    this.message.textContent = tooltip;\n",
2915         "};\n",
2916         "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",
2917         "\n",
2918         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
2919         "\n",
2920         "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
2921         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
2922         "    // object with the appropriate methods. Currently this is a non binary\n",
2923         "    // socket, so there is still some room for performance tuning.\n",
2924         "    var ws = {};\n",
2925         "\n",
2926         "    ws.close = function() {\n",
2927         "        comm.close()\n",
2928         "    };\n",
2929         "    ws.send = function(m) {\n",
2930         "        //console.log('sending', m);\n",
2931         "        comm.send(m);\n",
2932         "    };\n",
2933         "    // Register the callback with on_msg.\n",
2934         "    comm.on_msg(function(msg) {\n",
2935         "        //console.log('receiving', msg['content']['data'], msg);\n",
2936         "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
2937         "        ws.onmessage(msg['content']['data'])\n",
2938         "    });\n",
2939         "    return ws;\n",
2940         "}\n",
2941         "\n",
2942         "mpl.mpl_figure_comm = function(comm, msg) {\n",
2943         "    // This is the function which gets called when the mpl process\n",
2944         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
2945         "\n",
2946         "    var id = msg.content.data.id;\n",
2947         "    // Get hold of the div created by the display call when the Comm\n",
2948         "    // socket was opened in Python.\n",
2949         "    var element = $(\"#\" + id);\n",
2950         "    var ws_proxy = comm_websocket_adapter(comm)\n",
2951         "\n",
2952         "    function ondownload(figure, format) {\n",
2953         "        window.open(figure.imageObj.src);\n",
2954         "    }\n",
2955         "\n",
2956         "    var fig = new mpl.figure(id, ws_proxy,\n",
2957         "                           ondownload,\n",
2958         "                           element.get(0));\n",
2959         "\n",
2960         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
2961         "    // web socket which is closed, not our websocket->open comm proxy.\n",
2962         "    ws_proxy.onopen();\n",
2963         "\n",
2964         "    fig.parent_element = element.get(0);\n",
2965         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
2966         "    if (!fig.cell_info) {\n",
2967         "        console.error(\"Failed to find cell for figure\", id, fig);\n",
2968         "        return;\n",
2969         "    }\n",
2970         "\n",
2971         "    var output_index = fig.cell_info[2]\n",
2972         "    var cell = fig.cell_info[0];\n",
2973         "\n",
2974         "};\n",
2975         "\n",
2976         "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
2977         "    var width = fig.canvas.width/mpl.ratio\n",
2978         "    fig.root.unbind('remove')\n",
2979         "\n",
2980         "    // Update the output cell to use the data from the current canvas.\n",
2981         "    fig.push_to_output();\n",
2982         "    var dataURL = fig.canvas.toDataURL();\n",
2983         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
2984         "    // the notebook keyboard shortcuts fail.\n",
2985         "    IPython.keyboard_manager.enable()\n",
2986         "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
2987         "    fig.close_ws(fig, msg);\n",
2988         "}\n",
2989         "\n",
2990         "mpl.figure.prototype.close_ws = function(fig, msg){\n",
2991         "    fig.send_message('closing', msg);\n",
2992         "    // fig.ws.close()\n",
2993         "}\n",
2994         "\n",
2995         "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
2996         "    // Turn the data on the canvas into data in the output cell.\n",
2997         "    var width = this.canvas.width/mpl.ratio\n",
2998         "    var dataURL = this.canvas.toDataURL();\n",
2999         "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
3000         "}\n",
3001         "\n",
3002         "mpl.figure.prototype.updated_canvas_event = function() {\n",
3003         "    // Tell IPython that the notebook contents must change.\n",
3004         "    IPython.notebook.set_dirty(true);\n",
3005         "    this.send_message(\"ack\", {});\n",
3006         "    var fig = this;\n",
3007         "    // Wait a second, then push the new image to the DOM so\n",
3008         "    // that it is saved nicely (might be nice to debounce this).\n",
3009         "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
3010         "}\n",
3011         "\n",
3012         "mpl.figure.prototype._init_toolbar = function() {\n",
3013         "    var fig = this;\n",
3014         "\n",
3015         "    var nav_element = $('<div/>')\n",
3016         "    nav_element.attr('style', 'width: 100%');\n",
3017         "    this.root.append(nav_element);\n",
3018         "\n",
3019         "    // Define a callback function for later on.\n",
3020         "    function toolbar_event(event) {\n",
3021         "        return fig.toolbar_button_onclick(event['data']);\n",
3022         "    }\n",
3023         "    function toolbar_mouse_event(event) {\n",
3024         "        return fig.toolbar_button_onmouseover(event['data']);\n",
3025         "    }\n",
3026         "\n",
3027         "    for(var toolbar_ind in mpl.toolbar_items){\n",
3028         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
3029         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
3030         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
3031         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
3032         "\n",
3033         "        if (!name) { continue; };\n",
3034         "\n",
3035         "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
3036         "        button.click(method_name, toolbar_event);\n",
3037         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
3038         "        nav_element.append(button);\n",
3039         "    }\n",
3040         "\n",
3041         "    // Add the status bar.\n",
3042         "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
3043         "    nav_element.append(status_bar);\n",
3044         "    this.message = status_bar[0];\n",
3045         "\n",
3046         "    // Add the close button to the window.\n",
3047         "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
3048         "    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",
3049         "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
3050         "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
3051         "    buttongrp.append(button);\n",
3052         "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
3053         "    titlebar.prepend(buttongrp);\n",
3054         "}\n",
3055         "\n",
3056         "mpl.figure.prototype._root_extra_style = function(el){\n",
3057         "    var fig = this\n",
3058         "    el.on(\"remove\", function(){\n",
3059         "\tfig.close_ws(fig, {});\n",
3060         "    });\n",
3061         "}\n",
3062         "\n",
3063         "mpl.figure.prototype._canvas_extra_style = function(el){\n",
3064         "    // this is important to make the div 'focusable\n",
3065         "    el.attr('tabindex', 0)\n",
3066         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
3067         "    // off when our div gets focus\n",
3068         "\n",
3069         "    // location in version 3\n",
3070         "    if (IPython.notebook.keyboard_manager) {\n",
3071         "        IPython.notebook.keyboard_manager.register_events(el);\n",
3072         "    }\n",
3073         "    else {\n",
3074         "        // location in version 2\n",
3075         "        IPython.keyboard_manager.register_events(el);\n",
3076         "    }\n",
3077         "\n",
3078         "}\n",
3079         "\n",
3080         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
3081         "    var manager = IPython.notebook.keyboard_manager;\n",
3082         "    if (!manager)\n",
3083         "        manager = IPython.keyboard_manager;\n",
3084         "\n",
3085         "    // Check for shift+enter\n",
3086         "    if (event.shiftKey && event.which == 13) {\n",
3087         "        this.canvas_div.blur();\n",
3088         "        // select the cell after this one\n",
3089         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
3090         "        IPython.notebook.select(index + 1);\n",
3091         "    }\n",
3092         "}\n",
3093         "\n",
3094         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
3095         "    fig.ondownload(fig, null);\n",
3096         "}\n",
3097         "\n",
3098         "\n",
3099         "mpl.find_output_cell = function(html_output) {\n",
3100         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
3101         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
3102         "    // IPython event is triggered only after the cells have been serialised, which for\n",
3103         "    // our purposes (turning an active figure into a static one), is too late.\n",
3104         "    var cells = IPython.notebook.get_cells();\n",
3105         "    var ncells = cells.length;\n",
3106         "    for (var i=0; i<ncells; i++) {\n",
3107         "        var cell = cells[i];\n",
3108         "        if (cell.cell_type === 'code'){\n",
3109         "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
3110         "                var data = cell.output_area.outputs[j];\n",
3111         "                if (data.data) {\n",
3112         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
3113         "                    data = data.data;\n",
3114         "                }\n",
3115         "                if (data['text/html'] == html_output) {\n",
3116         "                    return [cell, data, j];\n",
3117         "                }\n",
3118         "            }\n",
3119         "        }\n",
3120         "    }\n",
3121         "}\n",
3122         "\n",
3123         "// Register the function which deals with the matplotlib target/channel.\n",
3124         "// The kernel may be null if the page has been refreshed.\n",
3125         "if (IPython.notebook.kernel != null) {\n",
3126         "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
3127         "}\n"
3128        ],
3129        "text/plain": [
3130         "<IPython.core.display.Javascript object>"
3131        ]
3132       },
3133       "metadata": {},
3134       "output_type": "display_data"
3135      },
3136      {
3137       "data": {
3138        "text/html": [
3139         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkAAAARMCAYAAADBUV/1AAAAAXNSR0IArs4c6QAAQABJREFUeAHs0IEAAAAAgKD9qRcphAoDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGA0ZW4AADgUSURBVGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYuB06EAAAAAAQ5G+9wAiFkAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMHADAXaRAAGsLEZEAAAAAElFTkSuQmCC\" width=\"800\">"
3140        ],
3141        "text/plain": [
3142         "<IPython.core.display.HTML object>"
3143        ]
3144       },
3145       "metadata": {},
3146       "output_type": "display_data"
3147      },
3148      {
3149       "name": "stdout",
3150       "output_type": "stream",
3151       "text": [
3152        "gamma = 0.01  accuracy = 0.91   AUC = 1.00\n",
3153        "gamma = 0.10  accuracy = 0.90   AUC = 0.98\n",
3154        "gamma = 0.20  accuracy = 0.90   AUC = 0.66\n",
3155        "gamma = 1.00  accuracy = 0.90   AUC = 0.50\n"
3156       ]
3157      }
3158     ],
3159     "source": [
3160      "from matplotlib import cm\n",
3161      "\n",
3162      "X_train, X_test, y_train, y_test = train_test_split(X, y_binary_imbalanced, random_state=0)\n",
3163      "\n",
3164      "plt.figure()\n",
3165      "plt.xlim([-0.01, 1.00])\n",
3166      "plt.ylim([-0.01, 1.01])\n",
3167      "for g in [0.01, 0.1, 0.20, 1]:\n",
3168      "    svm = SVC(gamma=g).fit(X_train, y_train)\n",
3169      "    y_score_svm = svm.decision_function(X_test)\n",
3170      "    fpr_svm, tpr_svm, _ = roc_curve(y_test, y_score_svm)\n",
3171      "    roc_auc_svm = auc(fpr_svm, tpr_svm)\n",
3172      "    accuracy_svm = svm.score(X_test, y_test)\n",
3173      "    print(\"gamma = {:.2f}  accuracy = {:.2f}   AUC = {:.2f}\".format(g, accuracy_svm, \n",
3174      "                                                                    roc_auc_svm))\n",
3175      "    plt.plot(fpr_svm, tpr_svm, lw=3, alpha=0.7, \n",
3176      "             label='SVM (gamma = {:0.2f}, area = {:0.2f})'.format(g, roc_auc_svm))\n",
3177      "\n",
3178      "plt.xlabel('False Positive Rate', fontsize=16)\n",
3179      "plt.ylabel('True Positive Rate (Recall)', fontsize=16)\n",
3180      "plt.plot([0, 1], [0, 1], color='k', lw=0.5, linestyle='--')\n",
3181      "plt.legend(loc=\"lower right\", fontsize=11)\n",
3182      "plt.title('ROC curve: (1-of-10 digits classifier)', fontsize=16)\n",
3183      "plt.axes().set_aspect('equal')\n",
3184      "\n",
3185      "plt.show()"
3186     ]
3187    },
3188    {
3189     "cell_type": "markdown",
3190     "metadata": {},
3191     "source": [
3192      "### Evaluation measures for multi-class classification"
3193     ]
3194    },
3195    {
3196     "cell_type": "markdown",
3197     "metadata": {},
3198     "source": [
3199      "#### Multi-class confusion matrix"
3200     ]
3201    },
3202    {
3203     "cell_type": "code",
3204     "execution_count": 23,
3205     "metadata": {
3206      "collapsed": false,
3207      "scrolled": false
3208     },
3209     "outputs": [
3210      {
3211       "data": {
3212        "application/javascript": [
3213         "/* Put everything inside the global mpl namespace */\n",
3214         "window.mpl = {};\n",
3215         "\n",
3216         "\n",
3217         "mpl.get_websocket_type = function() {\n",
3218         "    if (typeof(WebSocket) !== 'undefined') {\n",
3219         "        return WebSocket;\n",
3220         "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
3221         "        return MozWebSocket;\n",
3222         "    } else {\n",
3223         "        alert('Your browser does not have WebSocket support.' +\n",
3224         "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
3225         "              'Firefox 4 and 5 are also supported but you ' +\n",
3226         "              'have to enable WebSockets in about:config.');\n",
3227         "    };\n",
3228         "}\n",
3229         "\n",
3230         "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
3231         "    this.id = figure_id;\n",
3232         "\n",
3233         "    this.ws = websocket;\n",
3234         "\n",
3235         "    this.supports_binary = (this.ws.binaryType != undefined);\n",
3236         "\n",
3237         "    if (!this.supports_binary) {\n",
3238         "        var warnings = document.getElementById(\"mpl-warnings\");\n",
3239         "        if (warnings) {\n",
3240         "            warnings.style.display = 'block';\n",
3241         "            warnings.textContent = (\n",
3242         "                \"This browser does not support binary websocket messages. \" +\n",
3243         "                    \"Performance may be slow.\");\n",
3244         "        }\n",
3245         "    }\n",
3246         "\n",
3247         "    this.imageObj = new Image();\n",
3248         "\n",
3249         "    this.context = undefined;\n",
3250         "    this.message = undefined;\n",
3251         "    this.canvas = undefined;\n",
3252         "    this.rubberband_canvas = undefined;\n",
3253         "    this.rubberband_context = undefined;\n",
3254         "    this.format_dropdown = undefined;\n",
3255         "\n",
3256         "    this.image_mode = 'full';\n",
3257         "\n",
3258         "    this.root = $('<div/>');\n",
3259         "    this._root_extra_style(this.root)\n",
3260         "    this.root.attr('style', 'display: inline-block');\n",
3261         "\n",
3262         "    $(parent_element).append(this.root);\n",
3263         "\n",
3264         "    this._init_header(this);\n",
3265         "    this._init_canvas(this);\n",
3266         "    this._init_toolbar(this);\n",
3267         "\n",
3268         "    var fig = this;\n",
3269         "\n",
3270         "    this.waiting = false;\n",
3271         "\n",
3272         "    this.ws.onopen =  function () {\n",
3273         "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
3274         "            fig.send_message(\"send_image_mode\", {});\n",
3275         "            if (mpl.ratio != 1) {\n",
3276         "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
3277         "            }\n",
3278         "            fig.send_message(\"refresh\", {});\n",
3279         "        }\n",
3280         "\n",
3281         "    this.imageObj.onload = function() {\n",
3282         "            if (fig.image_mode == 'full') {\n",
3283         "                // Full images could contain transparency (where diff images\n",
3284         "                // almost always do), so we need to clear the canvas so that\n",
3285         "                // there is no ghosting.\n",
3286         "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
3287         "            }\n",
3288         "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
3289         "        };\n",
3290         "\n",
3291         "    this.imageObj.onunload = function() {\n",
3292         "        this.ws.close();\n",
3293         "    }\n",
3294         "\n",
3295         "    this.ws.onmessage = this._make_on_message_function(this);\n",
3296         "\n",
3297         "    this.ondownload = ondownload;\n",
3298         "}\n",
3299         "\n",
3300         "mpl.figure.prototype._init_header = function() {\n",
3301         "    var titlebar = $(\n",
3302         "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
3303         "        'ui-helper-clearfix\"/>');\n",
3304         "    var titletext = $(\n",
3305         "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
3306         "        'text-align: center; padding: 3px;\"/>');\n",
3307         "    titlebar.append(titletext)\n",
3308         "    this.root.append(titlebar);\n",
3309         "    this.header = titletext[0];\n",
3310         "}\n",
3311         "\n",
3312         "\n",
3313         "\n",
3314         "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
3315         "\n",
3316         "}\n",
3317         "\n",
3318         "\n",
3319         "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
3320         "\n",
3321         "}\n",
3322         "\n",
3323         "mpl.figure.prototype._init_canvas = function() {\n",
3324         "    var fig = this;\n",
3325         "\n",
3326         "    var canvas_div = $('<div/>');\n",
3327         "\n",
3328         "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
3329         "\n",
3330         "    function canvas_keyboard_event(event) {\n",
3331         "        return fig.key_event(event, event['data']);\n",
3332         "    }\n",
3333         "\n",
3334         "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
3335         "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
3336         "    this.canvas_div = canvas_div\n",
3337         "    this._canvas_extra_style(canvas_div)\n",
3338         "    this.root.append(canvas_div);\n",
3339         "\n",
3340         "    var canvas = $('<canvas/>');\n",
3341         "    canvas.addClass('mpl-canvas');\n",
3342         "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
3343         "\n",
3344         "    this.canvas = canvas[0];\n",
3345         "    this.context = canvas[0].getContext(\"2d\");\n",
3346         "\n",
3347         "    var backingStore = this.context.backingStorePixelRatio ||\n",
3348         "\tthis.context.webkitBackingStorePixelRatio ||\n",
3349         "\tthis.context.mozBackingStorePixelRatio ||\n",
3350         "\tthis.context.msBackingStorePixelRatio ||\n",
3351         "\tthis.context.oBackingStorePixelRatio ||\n",
3352         "\tthis.context.backingStorePixelRatio || 1;\n",
3353         "\n",
3354         "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
3355         "\n",
3356         "    var rubberband = $('<canvas/>');\n",
3357         "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
3358         "\n",
3359         "    var pass_mouse_events = true;\n",
3360         "\n",
3361         "    canvas_div.resizable({\n",
3362         "        start: function(event, ui) {\n",
3363         "            pass_mouse_events = false;\n",
3364         "        },\n",
3365         "        resize: function(event, ui) {\n",
3366         "            fig.request_resize(ui.size.width, ui.size.height);\n",
3367         "        },\n",
3368         "        stop: function(event, ui) {\n",
3369         "            pass_mouse_events = true;\n",
3370         "            fig.request_resize(ui.size.width, ui.size.height);\n",
3371         "        },\n",
3372         "    });\n",
3373         "\n",
3374         "    function mouse_event_fn(event) {\n",
3375         "        if (pass_mouse_events)\n",
3376         "            return fig.mouse_event(event, event['data']);\n",
3377         "    }\n",
3378         "\n",
3379         "    rubberband.mousedown('button_press', mouse_event_fn);\n",
3380         "    rubberband.mouseup('button_release', mouse_event_fn);\n",
3381         "    // Throttle sequential mouse events to 1 every 20ms.\n",
3382         "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
3383         "\n",
3384         "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
3385         "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
3386         "\n",
3387         "    canvas_div.on(\"wheel\", function (event) {\n",
3388         "        event = event.originalEvent;\n",
3389         "        event['data'] = 'scroll'\n",
3390         "        if (event.deltaY < 0) {\n",
3391         "            event.step = 1;\n",
3392         "        } else {\n",
3393         "            event.step = -1;\n",
3394         "        }\n",
3395         "        mouse_event_fn(event);\n",
3396         "    });\n",
3397         "\n",
3398         "    canvas_div.append(canvas);\n",
3399         "    canvas_div.append(rubberband);\n",
3400         "\n",
3401         "    this.rubberband = rubberband;\n",
3402         "    this.rubberband_canvas = rubberband[0];\n",
3403         "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
3404         "    this.rubberband_context.strokeStyle = \"#000000\";\n",
3405         "\n",
3406         "    this._resize_canvas = function(width, height) {\n",
3407         "        // Keep the size of the canvas, canvas container, and rubber band\n",
3408         "        // canvas in synch.\n",
3409         "        canvas_div.css('width', width)\n",
3410         "        canvas_div.css('height', height)\n",
3411         "\n",
3412         "        canvas.attr('width', width * mpl.ratio);\n",
3413         "        canvas.attr('height', height * mpl.ratio);\n",
3414         "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
3415         "\n",
3416         "        rubberband.attr('width', width);\n",
3417         "        rubberband.attr('height', height);\n",
3418         "    }\n",
3419         "\n",
3420         "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
3421         "    // upon first draw.\n",
3422         "    this._resize_canvas(600, 600);\n",
3423         "\n",
3424         "    // Disable right mouse context menu.\n",
3425         "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
3426         "        return false;\n",
3427         "    });\n",
3428         "\n",
3429         "    function set_focus () {\n",
3430         "        canvas.focus();\n",
3431         "        canvas_div.focus();\n",
3432         "    }\n",
3433         "\n",
3434         "    window.setTimeout(set_focus, 100);\n",
3435         "}\n",
3436         "\n",
3437         "mpl.figure.prototype._init_toolbar = function() {\n",
3438         "    var fig = this;\n",
3439         "\n",
3440         "    var nav_element = $('<div/>')\n",
3441         "    nav_element.attr('style', 'width: 100%');\n",
3442         "    this.root.append(nav_element);\n",
3443         "\n",
3444         "    // Define a callback function for later on.\n",
3445         "    function toolbar_event(event) {\n",
3446         "        return fig.toolbar_button_onclick(event['data']);\n",
3447         "    }\n",
3448         "    function toolbar_mouse_event(event) {\n",
3449         "        return fig.toolbar_button_onmouseover(event['data']);\n",
3450         "    }\n",
3451         "\n",
3452         "    for(var toolbar_ind in mpl.toolbar_items) {\n",
3453         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
3454         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
3455         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
3456         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
3457         "\n",
3458         "        if (!name) {\n",
3459         "            // put a spacer in here.\n",
3460         "            continue;\n",
3461         "        }\n",
3462         "        var button = $('<button/>');\n",
3463         "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
3464         "                        'ui-button-icon-only');\n",
3465         "        button.attr('role', 'button');\n",
3466         "        button.attr('aria-disabled', 'false');\n",
3467         "        button.click(method_name, toolbar_event);\n",
3468         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
3469         "\n",
3470         "        var icon_img = $('<span/>');\n",
3471         "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
3472         "        icon_img.addClass(image);\n",
3473         "        icon_img.addClass('ui-corner-all');\n",
3474         "\n",
3475         "        var tooltip_span = $('<span/>');\n",
3476         "        tooltip_span.addClass('ui-button-text');\n",
3477         "        tooltip_span.html(tooltip);\n",
3478         "\n",
3479         "        button.append(icon_img);\n",
3480         "        button.append(tooltip_span);\n",
3481         "\n",
3482         "        nav_element.append(button);\n",
3483         "    }\n",
3484         "\n",
3485         "    var fmt_picker_span = $('<span/>');\n",
3486         "\n",
3487         "    var fmt_picker = $('<select/>');\n",
3488         "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
3489         "    fmt_picker_span.append(fmt_picker);\n",
3490         "    nav_element.append(fmt_picker_span);\n",
3491         "    this.format_dropdown = fmt_picker[0];\n",
3492         "\n",
3493         "    for (var ind in mpl.extensions) {\n",
3494         "        var fmt = mpl.extensions[ind];\n",
3495         "        var option = $(\n",
3496         "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
3497         "        fmt_picker.append(option)\n",
3498         "    }\n",
3499         "\n",
3500         "    // Add hover states to the ui-buttons\n",
3501         "    $( \".ui-button\" ).hover(\n",
3502         "        function() { $(this).addClass(\"ui-state-hover\");},\n",
3503         "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
3504         "    );\n",
3505         "\n",
3506         "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
3507         "    nav_element.append(status_bar);\n",
3508         "    this.message = status_bar[0];\n",
3509         "}\n",
3510         "\n",
3511         "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
3512         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
3513         "    // which will in turn request a refresh of the image.\n",
3514         "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
3515         "}\n",
3516         "\n",
3517         "mpl.figure.prototype.send_message = function(type, properties) {\n",
3518         "    properties['type'] = type;\n",
3519         "    properties['figure_id'] = this.id;\n",
3520         "    this.ws.send(JSON.stringify(properties));\n",
3521         "}\n",
3522         "\n",
3523         "mpl.figure.prototype.send_draw_message = function() {\n",
3524         "    if (!this.waiting) {\n",
3525         "        this.waiting = true;\n",
3526         "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
3527         "    }\n",
3528         "}\n",
3529         "\n",
3530         "\n",
3531         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
3532         "    var format_dropdown = fig.format_dropdown;\n",
3533         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
3534         "    fig.ondownload(fig, format);\n",
3535         "}\n",
3536         "\n",
3537         "\n",
3538         "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
3539         "    var size = msg['size'];\n",
3540         "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
3541         "        fig._resize_canvas(size[0], size[1]);\n",
3542         "        fig.send_message(\"refresh\", {});\n",
3543         "    };\n",
3544         "}\n",
3545         "\n",
3546         "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
3547         "    var x0 = msg['x0'] / mpl.ratio;\n",
3548         "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
3549         "    var x1 = msg['x1'] / mpl.ratio;\n",
3550         "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
3551         "    x0 = Math.floor(x0) + 0.5;\n",
3552         "    y0 = Math.floor(y0) + 0.5;\n",
3553         "    x1 = Math.floor(x1) + 0.5;\n",
3554         "    y1 = Math.floor(y1) + 0.5;\n",
3555         "    var min_x = Math.min(x0, x1);\n",
3556         "    var min_y = Math.min(y0, y1);\n",
3557         "    var width = Math.abs(x1 - x0);\n",
3558         "    var height = Math.abs(y1 - y0);\n",
3559         "\n",
3560         "    fig.rubberband_context.clearRect(\n",
3561         "        0, 0, fig.canvas.width, fig.canvas.height);\n",
3562         "\n",
3563         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
3564         "}\n",
3565         "\n",
3566         "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
3567         "    // Updates the figure title.\n",
3568         "    fig.header.textContent = msg['label'];\n",
3569         "}\n",
3570         "\n",
3571         "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
3572         "    var cursor = msg['cursor'];\n",
3573         "    switch(cursor)\n",
3574         "    {\n",
3575         "    case 0:\n",
3576         "        cursor = 'pointer';\n",
3577         "        break;\n",
3578         "    case 1:\n",
3579         "        cursor = 'default';\n",
3580         "        break;\n",
3581         "    case 2:\n",
3582         "        cursor = 'crosshair';\n",
3583         "        break;\n",
3584         "    case 3:\n",
3585         "        cursor = 'move';\n",
3586         "        break;\n",
3587         "    }\n",
3588         "    fig.rubberband_canvas.style.cursor = cursor;\n",
3589         "}\n",
3590         "\n",
3591         "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
3592         "    fig.message.textContent = msg['message'];\n",
3593         "}\n",
3594         "\n",
3595         "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
3596         "    // Request the server to send over a new figure.\n",
3597         "    fig.send_draw_message();\n",
3598         "}\n",
3599         "\n",
3600         "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
3601         "    fig.image_mode = msg['mode'];\n",
3602         "}\n",
3603         "\n",
3604         "mpl.figure.prototype.updated_canvas_event = function() {\n",
3605         "    // Called whenever the canvas gets updated.\n",
3606         "    this.send_message(\"ack\", {});\n",
3607         "}\n",
3608         "\n",
3609         "// A function to construct a web socket function for onmessage handling.\n",
3610         "// Called in the figure constructor.\n",
3611         "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
3612         "    return function socket_on_message(evt) {\n",
3613         "        if (evt.data instanceof Blob) {\n",
3614         "            /* FIXME: We get \"Resource interpreted as Image but\n",
3615         "             * transferred with MIME type text/plain:\" errors on\n",
3616         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
3617         "             * to be part of the websocket stream */\n",
3618         "            evt.data.type = \"image/png\";\n",
3619         "\n",
3620         "            /* Free the memory for the previous frames */\n",
3621         "            if (fig.imageObj.src) {\n",
3622         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
3623         "                    fig.imageObj.src);\n",
3624         "            }\n",
3625         "\n",
3626         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
3627         "                evt.data);\n",
3628         "            fig.updated_canvas_event();\n",
3629         "            fig.waiting = false;\n",
3630         "            return;\n",
3631         "        }\n",
3632         "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
3633         "            fig.imageObj.src = evt.data;\n",
3634         "            fig.updated_canvas_event();\n",
3635         "            fig.waiting = false;\n",
3636         "            return;\n",
3637         "        }\n",
3638         "\n",
3639         "        var msg = JSON.parse(evt.data);\n",
3640         "        var msg_type = msg['type'];\n",
3641         "\n",
3642         "        // Call the  \"handle_{type}\" callback, which takes\n",
3643         "        // the figure and JSON message as its only arguments.\n",
3644         "        try {\n",
3645         "            var callback = fig[\"handle_\" + msg_type];\n",
3646         "        } catch (e) {\n",
3647         "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
3648         "            return;\n",
3649         "        }\n",
3650         "\n",
3651         "        if (callback) {\n",
3652         "            try {\n",
3653         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
3654         "                callback(fig, msg);\n",
3655         "            } catch (e) {\n",
3656         "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
3657         "            }\n",
3658         "        }\n",
3659         "    };\n",
3660         "}\n",
3661         "\n",
3662         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
3663         "mpl.findpos = function(e) {\n",
3664         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
3665         "    var targ;\n",
3666         "    if (!e)\n",
3667         "        e = window.event;\n",
3668         "    if (e.target)\n",
3669         "        targ = e.target;\n",
3670         "    else if (e.srcElement)\n",
3671         "        targ = e.srcElement;\n",
3672         "    if (targ.nodeType == 3) // defeat Safari bug\n",
3673         "        targ = targ.parentNode;\n",
3674         "\n",
3675         "    // jQuery normalizes the pageX and pageY\n",
3676         "    // pageX,Y are the mouse positions relative to the document\n",
3677         "    // offset() returns the position of the element relative to the document\n",
3678         "    var x = e.pageX - $(targ).offset().left;\n",
3679         "    var y = e.pageY - $(targ).offset().top;\n",
3680         "\n",
3681         "    return {\"x\": x, \"y\": y};\n",
3682         "};\n",
3683         "\n",
3684         "/*\n",
3685         " * return a copy of an object with only non-object keys\n",
3686         " * we need this to avoid circular references\n",
3687         " * http://stackoverflow.com/a/24161582/3208463\n",
3688         " */\n",
3689         "function simpleKeys (original) {\n",
3690         "  return Object.keys(original).reduce(function (obj, key) {\n",
3691         "    if (typeof original[key] !== 'object')\n",
3692         "        obj[key] = original[key]\n",
3693         "    return obj;\n",
3694         "  }, {});\n",
3695         "}\n",
3696         "\n",
3697         "mpl.figure.prototype.mouse_event = function(event, name) {\n",
3698         "    var canvas_pos = mpl.findpos(event)\n",
3699         "\n",
3700         "    if (name === 'button_press')\n",
3701         "    {\n",
3702         "        this.canvas.focus();\n",
3703         "        this.canvas_div.focus();\n",
3704         "    }\n",
3705         "\n",
3706         "    var x = canvas_pos.x * mpl.ratio;\n",
3707         "    var y = canvas_pos.y * mpl.ratio;\n",
3708         "\n",
3709         "    this.send_message(name, {x: x, y: y, button: event.button,\n",
3710         "                             step: event.step,\n",
3711         "                             guiEvent: simpleKeys(event)});\n",
3712         "\n",
3713         "    /* This prevents the web browser from automatically changing to\n",
3714         "     * the text insertion cursor when the button is pressed.  We want\n",
3715         "     * to control all of the cursor setting manually through the\n",
3716         "     * 'cursor' event from matplotlib */\n",
3717         "    event.preventDefault();\n",
3718         "    return false;\n",
3719         "}\n",
3720         "\n",
3721         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
3722         "    // Handle any extra behaviour associated with a key event\n",
3723         "}\n",
3724         "\n",
3725         "mpl.figure.prototype.key_event = function(event, name) {\n",
3726         "\n",
3727         "    // Prevent repeat events\n",
3728         "    if (name == 'key_press')\n",
3729         "    {\n",
3730         "        if (event.which === this._key)\n",
3731         "            return;\n",
3732         "        else\n",
3733         "            this._key = event.which;\n",
3734         "    }\n",
3735         "    if (name == 'key_release')\n",
3736         "        this._key = null;\n",
3737         "\n",
3738         "    var value = '';\n",
3739         "    if (event.ctrlKey && event.which != 17)\n",
3740         "        value += \"ctrl+\";\n",
3741         "    if (event.altKey && event.which != 18)\n",
3742         "        value += \"alt+\";\n",
3743         "    if (event.shiftKey && event.which != 16)\n",
3744         "        value += \"shift+\";\n",
3745         "\n",
3746         "    value += 'k';\n",
3747         "    value += event.which.toString();\n",
3748         "\n",
3749         "    this._key_event_extra(event, name);\n",
3750         "\n",
3751         "    this.send_message(name, {key: value,\n",
3752         "                             guiEvent: simpleKeys(event)});\n",
3753         "    return false;\n",
3754         "}\n",
3755         "\n",
3756         "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
3757         "    if (name == 'download') {\n",
3758         "        this.handle_save(this, null);\n",
3759         "    } else {\n",
3760         "        this.send_message(\"toolbar_button\", {name: name});\n",
3761         "    }\n",
3762         "};\n",
3763         "\n",
3764         "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
3765         "    this.message.textContent = tooltip;\n",
3766         "};\n",
3767         "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",
3768         "\n",
3769         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
3770         "\n",
3771         "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
3772         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
3773         "    // object with the appropriate methods. Currently this is a non binary\n",
3774         "    // socket, so there is still some room for performance tuning.\n",
3775         "    var ws = {};\n",
3776         "\n",
3777         "    ws.close = function() {\n",
3778         "        comm.close()\n",
3779         "    };\n",
3780         "    ws.send = function(m) {\n",
3781         "        //console.log('sending', m);\n",
3782         "        comm.send(m);\n",
3783         "    };\n",
3784         "    // Register the callback with on_msg.\n",
3785         "    comm.on_msg(function(msg) {\n",
3786         "        //console.log('receiving', msg['content']['data'], msg);\n",
3787         "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
3788         "        ws.onmessage(msg['content']['data'])\n",
3789         "    });\n",
3790         "    return ws;\n",
3791         "}\n",
3792         "\n",
3793         "mpl.mpl_figure_comm = function(comm, msg) {\n",
3794         "    // This is the function which gets called when the mpl process\n",
3795         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
3796         "\n",
3797         "    var id = msg.content.data.id;\n",
3798         "    // Get hold of the div created by the display call when the Comm\n",
3799         "    // socket was opened in Python.\n",
3800         "    var element = $(\"#\" + id);\n",
3801         "    var ws_proxy = comm_websocket_adapter(comm)\n",
3802         "\n",
3803         "    function ondownload(figure, format) {\n",
3804         "        window.open(figure.imageObj.src);\n",
3805         "    }\n",
3806         "\n",
3807         "    var fig = new mpl.figure(id, ws_proxy,\n",
3808         "                           ondownload,\n",
3809         "                           element.get(0));\n",
3810         "\n",
3811         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
3812         "    // web socket which is closed, not our websocket->open comm proxy.\n",
3813         "    ws_proxy.onopen();\n",
3814         "\n",
3815         "    fig.parent_element = element.get(0);\n",
3816         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
3817         "    if (!fig.cell_info) {\n",
3818         "        console.error(\"Failed to find cell for figure\", id, fig);\n",
3819         "        return;\n",
3820         "    }\n",
3821         "\n",
3822         "    var output_index = fig.cell_info[2]\n",
3823         "    var cell = fig.cell_info[0];\n",
3824         "\n",
3825         "};\n",
3826         "\n",
3827         "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
3828         "    var width = fig.canvas.width/mpl.ratio\n",
3829         "    fig.root.unbind('remove')\n",
3830         "\n",
3831         "    // Update the output cell to use the data from the current canvas.\n",
3832         "    fig.push_to_output();\n",
3833         "    var dataURL = fig.canvas.toDataURL();\n",
3834         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
3835         "    // the notebook keyboard shortcuts fail.\n",
3836         "    IPython.keyboard_manager.enable()\n",
3837         "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
3838         "    fig.close_ws(fig, msg);\n",
3839         "}\n",
3840         "\n",
3841         "mpl.figure.prototype.close_ws = function(fig, msg){\n",
3842         "    fig.send_message('closing', msg);\n",
3843         "    // fig.ws.close()\n",
3844         "}\n",
3845         "\n",
3846         "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
3847         "    // Turn the data on the canvas into data in the output cell.\n",
3848         "    var width = this.canvas.width/mpl.ratio\n",
3849         "    var dataURL = this.canvas.toDataURL();\n",
3850         "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
3851         "}\n",
3852         "\n",
3853         "mpl.figure.prototype.updated_canvas_event = function() {\n",
3854         "    // Tell IPython that the notebook contents must change.\n",
3855         "    IPython.notebook.set_dirty(true);\n",
3856         "    this.send_message(\"ack\", {});\n",
3857         "    var fig = this;\n",
3858         "    // Wait a second, then push the new image to the DOM so\n",
3859         "    // that it is saved nicely (might be nice to debounce this).\n",
3860         "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
3861         "}\n",
3862         "\n",
3863         "mpl.figure.prototype._init_toolbar = function() {\n",
3864         "    var fig = this;\n",
3865         "\n",
3866         "    var nav_element = $('<div/>')\n",
3867         "    nav_element.attr('style', 'width: 100%');\n",
3868         "    this.root.append(nav_element);\n",
3869         "\n",
3870         "    // Define a callback function for later on.\n",
3871         "    function toolbar_event(event) {\n",
3872         "        return fig.toolbar_button_onclick(event['data']);\n",
3873         "    }\n",
3874         "    function toolbar_mouse_event(event) {\n",
3875         "        return fig.toolbar_button_onmouseover(event['data']);\n",
3876         "    }\n",
3877         "\n",
3878         "    for(var toolbar_ind in mpl.toolbar_items){\n",
3879         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
3880         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
3881         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
3882         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
3883         "\n",
3884         "        if (!name) { continue; };\n",
3885         "\n",
3886         "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
3887         "        button.click(method_name, toolbar_event);\n",
3888         "        button.mouseover(tooltip, toolbar_mouse_event);\n",
3889         "        nav_element.append(button);\n",
3890         "    }\n",
3891         "\n",
3892         "    // Add the status bar.\n",
3893         "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
3894         "    nav_element.append(status_bar);\n",
3895         "    this.message = status_bar[0];\n",
3896         "\n",
3897         "    // Add the close button to the window.\n",
3898         "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
3899         "    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",
3900         "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
3901         "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
3902         "    buttongrp.append(button);\n",
3903         "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
3904         "    titlebar.prepend(buttongrp);\n",
3905         "}\n",
3906         "\n",
3907         "mpl.figure.prototype._root_extra_style = function(el){\n",
3908         "    var fig = this\n",
3909         "    el.on(\"remove\", function(){\n",
3910         "\tfig.close_ws(fig, {});\n",
3911         "    });\n",
3912         "}\n",
3913         "\n",
3914         "mpl.figure.prototype._canvas_extra_style = function(el){\n",
3915         "    // this is important to make the div 'focusable\n",
3916         "    el.attr('tabindex', 0)\n",
3917         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
3918         "    // off when our div gets focus\n",
3919         "\n",
3920         "    // location in version 3\n",
3921         "    if (IPython.notebook.keyboard_manager) {\n",
3922         "        IPython.notebook.keyboard_manager.register_events(el);\n",
3923         "    }\n",
3924         "    else {\n",
3925         "        // location in version 2\n",
3926         "        IPython.keyboard_manager.register_events(el);\n",
3927         "    }\n",
3928         "\n",
3929         "}\n",
3930         "\n",
3931         "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
3932         "    var manager = IPython.notebook.keyboard_manager;\n",
3933         "    if (!manager)\n",
3934         "        manager = IPython.keyboard_manager;\n",
3935         "\n",
3936         "    // Check for shift+enter\n",
3937         "    if (event.shiftKey && event.which == 13) {\n",
3938         "        this.canvas_div.blur();\n",
3939         "        // select the cell after this one\n",
3940         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
3941         "        IPython.notebook.select(index + 1);\n",
3942         "    }\n",
3943         "}\n",
3944         "\n",
3945         "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
3946         "    fig.ondownload(fig, null);\n",
3947         "}\n",
3948         "\n",
3949         "\n",
3950         "mpl.find_output_cell = function(html_output) {\n",
3951         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
3952         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
3953         "    // IPython event is triggered only after the cells have been serialised, which for\n",
3954         "    // our purposes (turning an active figure into a static one), is too late.\n",
3955         "    var cells = IPython.notebook.get_cells();\n",
3956         "    var ncells = cells.length;\n",
3957         "    for (var i=0; i<ncells; i++) {\n",
3958         "        var cell = cells[i];\n",
3959         "        if (cell.cell_type === 'code'){\n",
3960         "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
3961         "                var data = cell.output_area.outputs[j];\n",
3962         "                if (data.data) {\n",
3963         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
3964         "                    data = data.data;\n",
3965         "                }\n",
3966         "                if (data['text/html'] == html_output) {\n",
3967         "                    return [cell, data, j];\n",
3968         "                }\n",
3969         "            }\n",
3970         "        }\n",
3971         "    }\n",
3972         "}\n",
3973         "\n",
3974         "// Register the function which deals with the matplotlib target/channel.\n",
3975         "// The kernel may be null if the page has been refreshed.\n",
3976         "if (IPython.notebook.kernel != null) {\n",
3977         "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
3978         "}\n"
3979        ],
3980        "text/plain": [
3981         "<IPython.core.display.Javascript object>"
3982        ]
3983       },
3984       "metadata": {},
3985       "output_type": "display_data"
3986      },
3987      {
3988       "data": {
3989        "text/html": [
3990         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABEwAAAMgCAYAAAA5kPcVAAAAAXNSR0IArs4c6QAAPBBJREFUeAHt0DEBAAAAwqD1T20MH4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwY