Repository: incubator-systemml Updated Branches: refs/heads/master a39aecffa -> 289eeaaff
[SYSTEMML-806] Update PySpark Jupyter Example and Doc This updates the PySpark Jupyter notebook and associated documentation page to make the invocation simpler by automatically downloading the Python API file, allowing the user to only worry about the JAR file. Closes #191. Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/289eeaaf Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/289eeaaf Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/289eeaaf Branch: refs/heads/master Commit: 289eeaaffa2bac4dbae1b85e66fa4d3a1f0a4e57 Parents: a39aecf Author: MadisonJMyers <[email protected]> Authored: Tue Jul 12 16:19:08 2016 -0700 Committer: Mike Dusenberry <[email protected]> Committed: Tue Jul 12 16:19:08 2016 -0700 ---------------------------------------------------------------------- docs/spark-mlcontext-programming-guide.md | 29 +++++++------ .../SystemML-PySpark-Recommendation-Demo.ipynb | 44 ++++++++------------ 2 files changed, 34 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/289eeaaf/docs/spark-mlcontext-programming-guide.md ---------------------------------------------------------------------- diff --git a/docs/spark-mlcontext-programming-guide.md b/docs/spark-mlcontext-programming-guide.md index e4fad12..6c6a80b 100644 --- a/docs/spark-mlcontext-programming-guide.md +++ b/docs/spark-mlcontext-programming-guide.md @@ -40,7 +40,7 @@ binary-block data format, allowing for SystemML's optimizations to be performed. ## Start Spark Shell with SystemML -To use SystemML with the Spark Shell, the SystemML jar can be referenced using the Spark Shell's `--jars` option. +To use SystemML with the Spark Shell, the SystemML jar can be referenced using the Spark Shell's `--jars` option. Instructions to build the SystemML jar can be found in the [SystemML GitHub README](https://github.com/apache/incubator-systemml). {% highlight bash %} @@ -263,7 +263,7 @@ arguments to blank `String`s so that the script can pass validation. The `shape.dml` script is executed by the call to `execute()`, where we supply the `Map` of required named arguments. The execution results are returned as the `MLOutput` fixed variable `outputs`. The number of rows is obtained by calling the `getStaticInt()` -helper method with the `outputs` object and `"m"`. The number of columns is retrieved by calling `getStaticInt()` with +helper method with the `outputs` object and `"m"`. The number of columns is retrieved by calling `getStaticInt()` with `outputs` and `"n"`. <div class="codetabs"> @@ -325,7 +325,7 @@ This DML will find the minimum, maximum, and mean value of a matrix. <div data-lang="Spark Shell" markdown="1"> {% highlight scala %} -scala> val minMaxMeanScript: String = +scala> val minMaxMeanScript: String = | """ | Xin = read(" ") | minOut = matrix(min(Xin), rows=1, cols=1) @@ -335,7 +335,7 @@ scala> val minMaxMeanScript: String = | write(maxOut, " ") | write(meanOut, " ") | """ -minMaxMeanScript: String = +minMaxMeanScript: String = " Xin = read(" ") minOut = matrix(min(Xin), rows=1, cols=1) @@ -351,7 +351,7 @@ write(meanOut, " ") <div data-lang="Statements" markdown="1"> {% highlight scala %} -val minMaxMeanScript: String = +val minMaxMeanScript: String = """ Xin = read(" ") minOut = matrix(min(Xin), rows=1, cols=1) @@ -552,7 +552,7 @@ Let's briefly consider these cells. ## Trigger Spark Startup -This cell triggers Spark to initialize by calling the `SparkContext` `sc` object. Information regarding these startup operations can be viewed in the +This cell triggers Spark to initialize by calling the `SparkContext` `sc` object. Information regarding these startup operations can be viewed in the console window in which `zeppelin.sh` is running. **Cell:** @@ -860,10 +860,10 @@ import org.apache.sysml.api.MLOutput def getScalar(outputs: MLOutput, symbol: String): Any = outputs.getDF(sqlContext, symbol).first()(1) - -def getScalarDouble(outputs: MLOutput, symbol: String): Double = + +def getScalarDouble(outputs: MLOutput, symbol: String): Double = getScalar(outputs, symbol).asInstanceOf[Double] - + def getScalarInt(outputs: MLOutput, symbol: String): Int = getScalarDouble(outputs, symbol).toInt {% endhighlight %} @@ -882,7 +882,7 @@ getScalarInt: (outputs: org.apache.sysml.api.MLOutput, symbol: String)Int SystemML uses a binary-block format for matrix data representation. This cell explicitly converts the `DataFrame` `data` object to a binary-block `features` matrix and single-column `label` matrix, both represented by the -`JavaPairRDD[MatrixIndexes, MatrixBlock]` datatype. +`JavaPairRDD[MatrixIndexes, MatrixBlock]` datatype. **Cell:** @@ -1007,7 +1007,7 @@ and can be [downloaded here](https://raw.githubusercontent.com/apache/incubator- From the directory with the downloaded notebook, start Jupyter with PySpark: - PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS="notebook" $SPARK_HOME/bin/pyspark --master local[*] --jars $SYSTEMML_HOME/target/SystemML.jar --py-files $SYSTEMML_HOME/src/main/java/org/apache/sysml/api/python/SystemML.py --driver-class-path $SYSTEMML_HOME/target/SystemML.jar + PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS="notebook" $SPARK_HOME/bin/pyspark --master local[*] --driver-class-path $SYSTEMML_HOME/SystemML.jar This will open Jupyter in a browser: @@ -1024,6 +1024,9 @@ We can then open up the `SystemML-PySpark-Recommendation-Demo` notebook: %autoreload 2 %matplotlib inline +# Add SystemML PySpark API file. +sc.addPyFile("https://raw.githubusercontent.com/apache/incubator-systemml/3d5f9b11741f6d6ecc6af7cbaa1069cde32be838/src/main/java/org/apache/sysml/api/python/SystemML.py") + import numpy as np import matplotlib.pyplot as plt plt.rcParams['figure.figsize'] = (10, 6) @@ -1092,9 +1095,9 @@ losses = matrix(0, rows=max_iteration, cols=1) i=1 while(i <= max_iteration) { # update params - H = (H * (t(W) %*% (V/(W%*%H))))/t(colSums(W)) + H = (H * (t(W) %*% (V/(W%*%H))))/t(colSums(W)) W = (W * ((V/(W%*%H)) %*% t(H)))/t(rowSums(H)) - + # compute loss losses[i,] = -1 * (sum(V*log(W%*%H)) - as.scalar(colSums(W)%*%rowSums(H))) i = i + 1; http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/289eeaaf/samples/jupyter-notebooks/SystemML-PySpark-Recommendation-Demo.ipynb ---------------------------------------------------------------------- diff --git a/samples/jupyter-notebooks/SystemML-PySpark-Recommendation-Demo.ipynb b/samples/jupyter-notebooks/SystemML-PySpark-Recommendation-Demo.ipynb index 1246862..32416e9 100644 --- a/samples/jupyter-notebooks/SystemML-PySpark-Recommendation-Demo.ipynb +++ b/samples/jupyter-notebooks/SystemML-PySpark-Recommendation-Demo.ipynb @@ -19,6 +19,9 @@ "%autoreload 2\n", "%matplotlib inline\n", "\n", + "# Add SystemML PySpark API file.\n", + "sc.addPyFile(\"https://raw.githubusercontent.com/apache/incubator-systemml/3d5f9b11741f6d6ecc6af7cbaa1069cde32be838/src/main/java/org/apache/sysml/api/python/SystemML.py\")\n", + "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "plt.rcParams['figure.figsize'] = (10, 6)" @@ -46,19 +49,17 @@ " Dload Upload Total Spent Left Speed\n", "\r", " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r", - " 7 11.2M 7 916k 0 0 1051k 0 0:00:10 --:--:-- 0:00:10 1051k\r", - " 17 11.2M 17 2064k 0 0 1159k 0 0:00:09 0:00:01 0:00:08 1159k\r", - " 29 11.2M 29 3424k 0 0 1234k 0 0:00:09 0:00:02 0:00:07 1234k\r", - " 39 11.2M 39 4564k 0 0 1207k 0 0:00:09 0:00:03 0:00:06 1207k\r", - " 44 11.2M 44 5118k 0 0 1073k 0 0:00:10 0:00:04 0:00:06 1073k\r", - " 47 11.2M 47 5527k 0 0 951k 0 0:00:12 0:00:05 0:00:07 933k\r", - " 50 11.2M 50 5804k 0 0 857k 0 0:00:13 0:00:06 0:00:07 749k\r", - " 53 11.2M 53 6142k 0 0 790k 0 0:00:14 0:00:07 0:00:07 544k\r", - " 58 11.2M 58 6715k 0 0 765k 0 0:00:15 0:00:08 0:00:07 431k\r", - " 68 11.2M 68 7932k 0 0 811k 0 0:00:14 0:00:09 0:00:05 562k\r", - " 83 11.2M 83 9585k 0 0 890k 0 0:00:12 0:00:10 0:00:02 818k\r", - " 96 11.2M 96 10.8M 0 0 941k 0 0:00:12 0:00:11 0:00:01 1055k\r", - "100 11.2M 100 11.2M 0 0 955k 0 0:00:12 0:00:12 --:--:-- 1254k\n" + " 3 11.2M 3 374k 0 0 375k 0 0:00:30 --:--:-- 0:00:30 375k\r", + " 9 11.2M 9 1125k 0 0 563k 0 0:00:20 0:00:01 0:00:19 563k\r", + " 18 11.2M 18 2084k 0 0 695k 0 0:00:16 0:00:02 0:00:14 695k\r", + " 27 11.2M 27 3132k 0 0 782k 0 0:00:14 0:00:04 0:00:10 782k\r", + " 38 11.2M 38 4410k 0 0 881k 0 0:00:13 0:00:05 0:00:08 881k\r", + " 49 11.2M 49 5763k 0 0 961k 0 0:00:11 0:00:05 0:00:06 1078k\r", + " 63 11.2M 63 7365k 0 0 1052k 0 0:00:10 0:00:06 0:00:04 1247k\r", + " 78 11.2M 78 9052k 0 0 1132k 0 0:00:10 0:00:07 0:00:03 1393k\r", + " 93 11.2M 93 10.4M 0 0 1193k 0 0:00:09 0:00:08 0:00:01 1523k\r", + "100 11.2M 100 11.2M 0 0 1219k 0 0:00:09 0:00:09 --:--:-- 1600k\n", + "gunzip: amazon0601.txt already exists -- skipping\n" ] } ], @@ -114,7 +115,7 @@ "cell_type": "code", "execution_count": 4, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -193,7 +194,7 @@ { "data": { "text/plain": [ - "<matplotlib.text.Text at 0x111c89050>" + "<matplotlib.text.Text at 0x10edb8d90>" ] }, "execution_count": 7, @@ -202,9 +203,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAngAAAGJCAYAAAAZsU4bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu4XVV97//3NzcSICEkECMJEJSkDQXFqGAR67b8qqKt\npKeCwXrPaXsMCuqprXg8JdqeavFoU63w/LRpBApSRD1KpSge3SoIGqEYBSzbC5CLCZgLoJKQy/f8\nMeciM8t932tlXfb79TzzWXONeRuTpXk+e8wxxozMRJIkSd1jQqsrIEmSpMYy4EmSJHUZA54kSVKX\nMeBJkiR1GQOeJElSlzHgSZIkdRkDniSNUkScEBGPNnpfSRorA56kpomI+yPiVxHxaET8LCLWRMSh\n5bbeiHg8IuZV9j8rIn5ad/zOiJhVd97/iIh9EXFc+f2TEbGrvM5j5ee5dcccW9n2WHn8Lyplzx/p\n/WXmTzNzRqP3HamIuCoi/qoZ55bUmQx4kpopgZeXwWYJ8BzgPZVtvwD+Zz/HVNd/CpxfK4iIk4Fp\n/ez3d5k5IzOnl5+fPuCkmesr26aXx5xSKbu1vvIR4b+RkjqS/3hJarYAyMyfAf8OnFzZ9hHg/Ig4\nYZDjrwJeX/n+euCKBtUrDigoWsL+MSL+PSIeA86MiD8oWwwfKVsU31PZ/+kRsa/y/ZsRsTIibi1b\nBW+MiJkj3bfc/saIeCAiHoqIiyNifUT8zohvMuLMiFgbEdsj4vaIOK2ybXlE/LS8/o8i4ryyfGFE\nfD0idpTX/5eRXldSaxnwJB0UEXEs8DLgzkrxRuATwPsGOfR2YHpE/EbZovYq4F+oC2cNdD5wSdnK\ndzvwGPDqzDwC+APgwoh4WWX/+vc9ng+8FpgDHA68Y6T7RsQpwD8A5wHzgKOBp4z0RiJiNvBvwAeB\n2cA/AjdGxBERMR34EHBW2cL6fGBdeej/Av4tM2cC8 4GPjfTaklrLgCep2f5PRGwDvgF8DXh/3fYP\nAL8fEYsHOUetFe/3gHuBTf3s886I2Fa2VD00hvp+LjO/A5CZT2Rmb2beW37/PvCvwAsHOX51Zv4k\nM3cCnwZOHcW+ryzr8e3M3E3xWHs0gfYPgB9k5nWZuS8z/wX4CfDycvs+4JSIOCQzt2TmD8vy3cCC\niDim/G9w2yiuLamFDHiSmu2czJyVmSdk5lszc1d1Y2b+nKJl6a8HOce/AK8G3gBcOcA+Hyyvc2Rm\nzhlDfddXv0TEb0fE18pHlTuA5cBRgxy/ubL+K4qWuZHue0y1Hpn5K2D7MOpe7xjggbqyB4B5mfkY\nRQviW4DNEfGFiFhY7vMOYArw3Yj4XkS8bhTXltRCBjxJzTaclqf/DbwIeHZ/GzPzQYrBFmcDn21c\n1fpV/xj1UxSta/PKR5arad7j4ZqfUTwaBSAiDgOOHMV5NgEL6sqOo3g0TmZ+KTN/D5gL/Bj4/8vy\nLZn5J5l5DEUA/HhEHD+K60tqEQOepJbLzEcoQt5fDLLbm4DfzczHD06tnnQ4sD0zd0fE84BlddtH\nEvaGu++ngaURcVpETKboo1gfPOtNjohDKstkiv53J0XEuRExMSJeDTwd+GJEzI2I34+IacAe4JfA\nXoBy/2PK8z5C8Sh37wjuU1KLGfAkNdNgoaR+20cogkb99CfFSjGP3J39bWtg3forezPwgYh4BHgX\nRR+8gY4Zqk7D2rfs6/d24HqK1raHga3AroGOAd5N8Zi3tnypfPz9irLePwcuopi25hFgIvBOila+\nh4HfBi4oz3U6sLYcSXw9sCIzNwxxb5LaSGSO9d/IQU4esRr4fWBLZj6jLHsuxYisyRQdeVdk5nfL\nbRdT/JW+B7goM79cli8BPglMBW7MzLeV5VMo+uM8m+Ifr1eVj3IkqWuUI153AMdl5sZW10dS+2t2\nC94a4CV1ZZcC78nMZwGXUAzf JyJOopgSYDFFP5vLIqL2OONyYHlmLgIWRUTtnMuBbZm5EFhVnluS\nOl45/960iDgc+DBwh+FO0nA1NeBl5i38+sivnwFHlOszKTv7UjxGuDYz92Tm/UAfcFpEzAWmZ+ba\ncr8rgaXl+jnsn/D0euCsht+EJLXGH1I8Pn2QYmDE+YPvLkn7TWrBNd8F3BoRH6LocHxGWT4PqM61\ntLEs2wNU+35sKMtrx6wHyMy95azrszJzWxPrL0lNl5lvouiyIkkj1opBFquBt2bmcRSdiP+5gedu\n9tQFkiRJba8VLXinl/MukZnXR8Q/leUbgWMr+80vywYqrx6zKSImAjMGar2LiOaNJpEkSWqwzBx1\nw9XBaMGrf6F3X0S8ECAizqLoawfwBWBZREwpXzx+IvCdzNwMPFLOBxXA64DPV46pvYT8XOCrg1Uk\nM106dLnkkktaXgcXf7vxuPj7de7ib9fZy1g1tQUvIq4BeoDZEfEgxajZP6UYITsF2Fl+JzPviYjr\ngHvYP31K7Q4v4MBpUm4qy1cDV0VEH8UcUfUTkEqSJI07TQ14mfnqATadPsD+7+fXX0ROZt4BnNJP\n+S6KqVUkSZJU8k0W6gg9PT2troJGyd+us/n7dS5/u/GtqW+yaCcRkePlXiVJUmeLCLLNB1lIkiTp\nIDLgSZIkdRkDniRJUpcx4EmSJHUZA54kSVKXMeBJkiR1GQOeJElSlzHgSZIkdRkDniRJUpcx4EmS\nJHUZA54kSVKXMeBJkiR1GQOeJElSlzHgSZIkdRkDniRJUpcx4EmSJHUZA54kSVKXMeBJkiR1GQOe\nJElSlxlXAS+z1TWQJElqvnEV8H7841bXQJIkqfnGVcC7445W10CSJKn5DHiSJEldxoAnSZLUZSLH\nyciDiMiZM5Nt2yCi1bWRJEkaWESQmaNOLOOqBe/ww+EnP2l1LSRJkpprXAW8Zz/bx7SSJKn7GfAk\nSZK6jAF PkiSpy4yrQRabNyeLF8PWrQ60kCRJ7ctBFiPwlKfAoYfCT3/a6ppIkiQ1T1MDXkSsjogt\nEbGuUnZtRNxZLj+NiDsr2y6OiL6IuDciXlwpXxIR6yLivohYVSmfUp6vLyJui4jjhqqTj2klSVK3\na3YL3hrgJdWCzFyWmUsycwnwGeCzABGxGDgPWAycDVwW8eSD1MuB5Zm5CFgUEbVzLge2ZeZCYBVw\n6VAVMuBJkqRu19SAl5m3ANsH2eU84Jpy/Rzg2szck5n3A33AaRExF5iemWvL/a4EllaOuaJcvx44\na6g6GfAkSVK3a1kfvIh4AbA5M2tTD88D1ld22ViWzQM2VMo3lGUHHJOZe4EdETFrsOvWAt44GVsi\nSZLGoVYOsjgf+FSDzznkaJO5c2HaNHjggQZfWZIkqU1MasVFI2Ii8F+AJZXijcCxle/zy7KByqvH\nbCrPOSMztw103ZUrVwLFK8uuuKKHSy7pGdN9SJIkNUJvby+9vb0NO1/T58GLiAXADZl5SqXspcBf\nZuaLKmUnAVcDp1M8er0ZWJiZGRG3AxcCa4EvAh/JzJsiYgVwcmauiIhlwNLMXDZAPbJ2r+99L+za\nBX/7t42/X0mSpLFq63nwIuIa4FsUI18fjIg3lpteRd3j2cy8B7gOuAe4EViR+9PnBcBq4D6gLzNv\nKstXA0dFRB/wNuBdw6mXAy0kSVI3G1dvsqjd66ZN8IxnwMMP+0YLSZLUftq6Ba9dHXMMTJ4MDz7Y\n6ppIkiQ13rgMeOBjWkmS1L0MeJIkSV3GgCdJktRlxn3AGydjTCRJ0jgybgPeMcfAxImwYcPQ+0qS\nJHWScRvwIuCEExxJK0mSus+4DXgAT30q/Oxnra6FJElSYxnwDHiSJKnLGPAMeJIkqcsY8Ax4kiSp\ny4zrgDd3Lmze3OpaSJIkNda4Dni24EmSpG5kwDPgSZKkLhM5Tl7lEBFZf69798LUqfD4 4zBpUosq\nJkmSVCciyMwY7fHjugVv4kQ46ijYsqXVNZEkSWqccR3wwMe0kiSp+4z7gOdIWkmS1G3GfcCzBU+S\nJHUbA54BT5IkdRkDngFPkiR1GQOeAU+SJHUZA54BT5IkdRkD3lMdRStJkrrLuH6TBcDOnXDEEcVn\njHq+aEmSpMbxTRZjNHUqHHoobNvW6ppIkiQ1xrgPeGA/PEmS1F0MeBjwJElSdzHgYcCTJEndxYCH\nAU+SJHUXAx4wd65TpUiSpO5hwMMWPEmS1F0MeBjwJElSd2lqwIuI1RGxJSLW1ZW/NSLujYjvR8QH\nKuUXR0Rfue3FlfIlEbEuIu6LiFWV8ikRcW15zG0Rcdxo6mnAkyRJ3aTZLXhrgJdUCyKiB/gD4JTM\nPAX432X5YuA8YDFwNnBZxJPvlrgcWJ6Zi4BFEVE753JgW2YuBFYBl46mkgY8SZLUTZoa8DLzFmB7\nXfGbgQ9k5p5yn5+X5ecA12bmnsy8H+gDTouIucD0zFxb7nclsLRyzBXl+vXAWaOp54wZsHcv/OIX\nozlakiSpvbSiD94i4Hci4vaI+FpEPLssnwesr+y3sSybB2yolG8oyw44JjP3AjsiYtZIKxThSFpJ\nktQ9WhHwJgFHZubzgL8APt3Ac4/6pbw+ppUkSd1iUguuuR74LEBmro2IvRExm6LFrjpIYn5ZthE4\ntp9yKts2RcREYEZmbhvowitXrnxyvaenh56enie/G/AkSVKr9Pb20tvb27DzRWY27GT9XiBiAXBD\nOaCCiPhTYF5mXhIRi4CbM/P4iDgJuBo4neLR683AwszMiLgduBBYC3wR+Ehm3hQRK4CTM3NFRCwD\nlmbmsgHqkYPd61vfCieeCBdd1KAblyRJGqWIIDNH/WSyqS14EXEN0APMjogHgUuAfwbWRMT3gV3A\n6wAy856IuA64B9gNrKgksguATwJTgRsz86ayfDVwVUT0AVuBfsP dcNiCJ0mSukXTW/DaxVAteGvW\nQG8vXHHFgLtIkiQdFGNtwfNNFiVH0UqSpG5hwCv5iFaSJHULA17JgCdJkrqFffBK+/bB1KnF2yym\nTDmIFZMkSapjH7wGmTABjj4atmxpdU0kSZLGxoBX4WNaSZLUDQx4FY6klSRJ3cCAV2ELniRJ6gYG\nvAoDniRJ6gYGvAoDniRJ6gYGvAoDniRJ6gYGvAoDniRJ6gYGvIq5cw14kiSp8/kmi4pdu2D6dNi5\ns5j4WJIkqRV8k0UDHXJIEfC2bm11TSRJkkbPgFfHfniSJKnTGfDqGPAkSVKnM+DVMeBJkqROZ8Cr\nY8CTJEmdzoBXZ+5c2Ly51bWQJEkaPQNeHVvwJElSpzPg1bEFT5IkdToDXp05c+Dhh1tdC0mSpNEz\n4NU5+mh46KFW10KSJGn0fFVZnb17izda7NwJkyYdhIpJkiTV8VVlDTZxIhx5pK8rkyRJncuA1w/7\n4UmSpE5mwOuH/fAkSVInM+D14+ijbcGTJEmdy4DXDwOeJEnqZAa8ftgHT5IkdTIDXj/sgydJkjqZ\nAa8fPqKVJEmdrKkBLyJWR8SWiFhXKbskIjZExJ3l8tLKtosjoi8i7o2IF1fKl0TEuoi4LyJWVcqn\nRMS15TG3RcRxjai3AU+SJHWyZrfgrQFe0k/5hzNzSbncBBARi4HzgMXA2cBlEVGbwflyYHlmLgIW\nRUTtnMuBbZm5EFgFXNqIStsHT5IkdbKmBrzMvAXY3s+m/l69cQ5wbWbuycz7gT7gtIiYC0zPzLXl\nflcCSyvHXFGuXw+c1Yh62wdPkiR1slb1wXtLRNwVEf8UEUeUZfOA9ZV9NpZl84ANlfINZdkBx2Tm\nXmBHRMwaa+Vmz4YdO4r30kqSJHWaVgS8y4CnZeapwGbgQw0896hfyls1cSLMnOn7aCVJUmeadLAv\nmJnV3m2fAG4o1zcCx1a2zS/LBiqvHrMpIi YCMzJz20DXXrly5ZPrPT099PT0DFjPWj+8OXMGvx9J\nkqSx6u3tpbe3t2Hni8xs2Mn6vUDEAuCGzDyl/D43MzeX628HnpuZr46Ik4CrgdMpHr3eDCzMzIyI\n24ELgbXAF4GPZOZNEbECODkzV0TEMmBpZi4boB45knt94Qth5Up40YtGdduSJEmjFhFk5qifTDa1\nBS8irgF6gNkR8SBwCfCiiDgV2AfcD/wZQGbeExHXAfcAu4EVlUR2AfBJYCpwY23kLbAauCoi+oCt\nQL/hbjScKkWSJHWqprfgtYuRtuC9+c1w8slwwQVNrJQkSVI/xtqC55ssBuBceJIkqVMZ8AbgXHiS\nJKlTGfAGYB88SZLUqQx4AzDgSZKkTmXAG4B98CRJUqcy4A3APniSJKlTOU3KAPbsgalTYdeu4tVl\nkiRJB4vTpDTJpElwxBGwbcAXn0mSJLUnA94g7IcnSZI6kQFvEPbDkyRJnciANwinSpEkSZ3IgDcI\nA54kSepEBrxBGPAkSVInMuANYs4c++BJkqTOY8AbhC14kiSpExnwBmHAkyRJnciANwgDniRJ6kQG\nvEHYB0+SJHUi30U7iN27Ydo0eOIJmGAUliRJB4nvom2iyZNhxgzfRytJkjqLAW8I9sOTJEmdxoA3\nBPvhSZKkTmPAG4IteJIkqdMY8IZgwJMkSZ3GgDcEA54kSeo0Brwh2AdPkiR1GgPeEGzBkyRJncaA\nNwQDniRJ6jQGvCEY8CRJUqcZVsCLiKdHxCHlek9EXBgRM5tbtfZgHzxJktRphtuC9xlgb0ScCHwc\nOBa4pmm1aiNHHVW8qmzfvlbXRJIkaXiGG/D2ZeYe4A+Bj2bmO4GnNq9a7WPyZDj8cNi+vdU1kSRJ\nGp7hBrzdEXE+8Hrg38qyyc2pUvuxH54kSeokww14bwR+G/hfmfnTiDgBuGqogyJidURsiYh1/Wz7\n7xGxLyJmVcoujoi+i Lg3Il5cKV8SEesi4r6IWFUpnxIR15bH3BYRxw3zfkbEfniSJKmTDCvgZeY9\nmXlhZn4qIo4Epmfm3w3j0DXAS+oLI2I+8HvAA5WyxcB5wGLgbOCyiIhy8+XA8sxcBCyKiNo5lwPb\nMnMhsAq4dDj3M1K24EmSpE4y3FG0vRExo2xtuxP4RER8eKjjMvMWoL/ea38PvLOu7Bzg2szck5n3\nA33AaRExlyJQri33uxJYWjnminL9euCs4dzPSBnwJElSJxnuI9ojMvNR4L8AV2bm6cD/N5oLRsQr\ngPWZ+f26TfOA9ZXvG8uyecCGSvmGsuyAYzJzL7Cj+si3UQx4kiSpk0wa7n4R8VSKR6j/Y7QXi4hp\nwLspHs82Qwy2ceXKlU+u9/T00NPTM6yTzpkDP/rRWKolSZI0sN7eXnp7ext2vuEGvPcBXwJuzcy1\nEfE0ikeoI/V0YAHwvbJ/3Xzgzog4jaLFrjpIYn5ZtpFi3r36cirbNkXERGBGZm4b6OLVgDcSRx8N\nt902qkMlSZKGVN/w9N73vndM5xvuIItPZ+YzMvPN5fefZOYfDfMaUS5k5g8yc25mPi0zT6B43Pqs\nzHwI+ALwqnJk7AnAicB3MnMz8EhEnFaGwtcBny/P/QWKqVsAzgW+Osw6jYiPaCVJUicZ7iCL+RHx\nuYh4qFw+U46EHeq4a4BvUYx8fTAi3li3S7I//N0DXAfcA9wIrMjMLPe7AFgN3Af0ZeZNZflq4KiI\n6APeBrxrOPczUgY8SZLUSWJ/hhpkp4ibKV5NVpv77jXAH2dms/rSNVxE5HDutT+bNsGSJbB5c4Mr\nJUmS1I+IIDMHHVsw6PHDDHh3ZeapQ5W1s7EEvCeegMMOg127YMJwxx1LkiSN0lgD3nDjytaIeE1E\nTCyX1wBbR3vRTjNlShHwduxodU0kSZKGNtyA9yaKKVI2Az8DXgm8oUl1akv2w5MkSZ1iuKNoH8jM\n V2Tm0Zk5JzOXAsMdRdsVfB+tJEnqFGPpUfaOhtWiA8yZA1u2tLoWkiRJQxtLwBt1x79OdPzx8OCD\nra6FJEnS0MYS8EY3JLVDLVgA99/f6lpIkiQNbdBXlUXEY/Qf5AKY1pQatakFC+CrTXlPhiRJUmMN\nGvAyc/rBqki7swVPkiR1CqftHaZawBvlXMmSJEkHjQFvmGbOLN5isX17q2siSZI0OAPeCPiYVpIk\ndQID3ggY8CRJUicw4I2AAU+SJHUCA94IHH+8AU+SJLU/A94I2IInSZI6gQFvBAx4kiSpExjwRsC5\n8CRJUicw4I3AzJkQATt2tLomkiRJAzPgjUCEj2klSVL7M+CNkAFPkiS1OwPeCBnwJElSuzPgjZAB\nT5IktTsD3ggZ8CRJUrsz4I2QAU+SJLU7A94IOReeJElqdwa8EZo5s/h0LjxJktSuDHgj5Fx4kiSp\n3RnwRsGAJ0mS2pkBbxQMeJIkqZ0Z8Ebh+OMNeJIkqX0Z8EZhwQJ44IFW10KSJKl/TQ14EbE6IrZE\nxLpK2fsi4nsRcVdEfCUi5le2XRwRfRFxb0S8uFK+JCLWRcR9EbGqUj4lIq4tj7ktIo5r5v3U+IhW\nkiS1s2a34K0BXlJXdmlmPjMzTwU+D1wCEBEnAecBi4GzgcsiIspjLgeWZ+YiYFFE1M65HNiWmQuB\nVcClTb2bkgFPkiS1s6YGvMy8BdheV/aLytfDgK3l+iuAazNzT2beD/QBp0XEXGB6Zq4t97sSWFqu\nnwNcUa5fD5zV8Jvox5FHwr59zoUnSZLaU0v64EXE30TEg8AbgPeXxfOA9ZXdNpZl84ANlfINZdkB\nx2TmXmBHRMxqXs0LzoUnSZLaWUsCXma+JzOPo3iEu2qo/Ucght6lMQx4kiSpXU1q8fWvAW4s1zcC\nx1a2zS/LBiqvHrMpIiYCMzJz20AXW7ly5ZPrPT099PT0jLriBjxJktQovb299 Pb2Nux8kZkNO1m/\nF4hYANyQmaeU30/MzB+V628FTsvM15aDLK4GTqd49HozsDAzMyJuBy4E1gJfBD6SmTdFxArg5Mxc\nERHLgKWZuWyAemQj7/XDH4YHH4RVjWx/lCRJAiKCzBz1k8mmtuBFxDVADzC77HN3CfDyiPgNYA/w\nE+DNAJl5T0RcB9wD7AZWVBLZBcAnganAjZl5U1m+GrgqIvooBmv0G+6aYcEC+MY3DtbVJEmShq/p\nLXjtotEteHfeCW96E9x1V8NOKUmSBIy9Bc83WYySffAkSVK7MuCNknPhSZKkdmXAGyXnwpMkSe3K\ngDcGBjxJktSODHhjsGABPPBAq2shSZJ0IAPeGNiCJ0mS2pEBbwyOP96AJ0mS2o8BbwxswZMkSe3I\niY7H4NFH4ZhjYPt2mDy5oaeWJEnjmBMdt9CMGXDCCbBuXatrIkmStJ8Bb4zOOAO+9a1W10KSJGk/\nA94YGfAkSVK7MeCN0RlnwK23troWkiRJ+xnwxujEE+Hxx2H9+lbXRJIkqWDAG6OIohXvtttaXRNJ\nkqSCAa8B7IcnSZLaiQGvAQx4kiSpnTjRcQM8/jgcdRQ8/DAcemhTLiFJksYRJzpuA9Omwcknw3e/\n2+qaSJIkGfAaxse0kiSpXRjwGsSAJ0mS2oV98BpkwwY49dSiH16M+om5JEmSffDaxvz5cNhh0NfX\n6ppIkqTxzoDXQD6mlSRJ7cCA10AGPEmS1A4MeA1kwJMkSe3AQRYNtHs3zJoF69fDzJlNvZQkSepi\nDrJoI5Mnw3OeA7ff3uqaSJKk8cyA12A+ppUkSa1mwGswA54kSWo1++A12LZtsGBB8TlpUtMvJ0mS\nupB98NrMrFnFpMc/+EGrayJJksYrA14TnHEGfPObra6FJEkar5oa8CJidURsiYh1lbJLI+LeiLgr\nIj4TETMq2y6OiL5y+4sr5UsiYl1E3BcRqyrlUyLi2vKY 2yLiuGbez3C9/OVw/fWtroUkSRqvmt2C\ntwZ4SV3Zl4HfysxTgT7gYoCIOAk4D1gMnA1cFhG1Z8+XA8szcxGwKCJq51wObMvMhcAq4NJm3sxw\nvexlcPfdcP/9ra6JJEkaj5oa8DLzFmB7XdlXMnNf+fV2YH65/grg2szck5n3U4S/0yJiLjA9M9eW\n+10JLC3XzwGuKNevB85qyo2M0CGHwLnnwjXXtLomkiRpPGp1H7w3ATeW6/OA9ZVtG8uyecCGSvmG\nsuyAYzJzL7AjImY1s8LD9ZrXwFVXwTgZpCxJktpIywJeRPwPYHdmfqqRp23gucbkjDPgiSfgjjta\nXRNJkjTetGSmtoh4A/Ay4HcrxRuBYyvf55dlA5VXj9kUEROBGZm5baDrrly58sn1np4eenp6RnsL\nQ4rY34r3nOc07TKSJKkL9Pb20tvb27DzNX2i44hYANyQmaeU318KfAj4nczcWtnvJOBq4HSKR683\nAwszMyPiduBCYC3wReAjmXlTRKwATs7MFRGxDFiamcsGqMdBmei4qq8PzjwTNmwo3lMrSZI0HG09\n0XFEXAN8i2Lk64MR8Ubgo8DhwM0RcWdEXAaQmfcA1wH3UPTLW1FJZBcAq4H7gL7MvKksXw0cFRF9\nwNuAdzXzfkZq4UJ42tPg5ptbXRNJkjSe+KqyJvvYx+CWW+BTjexpKEmSutpYW/AMeE3285/D058O\n69fDjBlD7y9JktTWj2gFRx0FPT3w2c+2uiaSJGm8MOAdBK99bTGaVpIk6WDwEe1BsHMnHHMMrFsH\n8+cPvb8kSRrffETbAaZOhT/6I19dJkmSDg4D3kFSe0w7ThpMJUlSCxnwDpIzz4Rdu6CBk1RLkiT1\ny4B3kEyYAO95D1xyia14kiSpuQx4B9GrXw2bN8NXv9rqmkiSpG5mwDuIJk2Cv/orWLnSVjxJktQ8\nBryD7Pzz4eGH4f/+31bXRJIkdSs D3kE2cWLRimdfPEmS1CwGvBZ41atg+3a4+eZW10SSJHUjA14L\n2IonSZKayYDXIueeC48+Cl/6UqtrIkmSuo0Br0UmTixa8GzFkyRJjWbAa6FXvhJ++Uu46aZW10SS\nJHUTA14LTZgAf/3X8Bd/Abt3t7o2kiSpWxjwWmzpUpg/H1atanVNJElSt4gcJx3AIiLb9V5//GM4\n/XS44w44/vhW10aSJLVaRJCZMdrjbcFrA09/Orz97fCWtzjgQpIkjZ0Br028851FS97nP9/qmkiS\npE7nI9o28vWvw2tfC3ffDdOnt7o2kiSpVcb6iNaA12be8AaYPRs+9KFW10SSJLWKAW+YOiXgPfww\nnHxy8YZKLH7kAAAPGklEQVSLU09tdW0kSVIrOMiiyxx9NPzt38Kf/Rns3dvq2kiSpE5kwGtDb3wj\nTJsG73tfq2siSZI6kQGvDU2YAP/6r7BmDXzmM62ujSRJ6jT2wWtjd9wBL30pfOUr8Mxntro2kiTp\nYLEPXhd79rPhox8tXmf28MOtro0kSeoUtuB1gHe/G269FW6+GaZMaXVtJElSszlNyjB1csDbtw/O\nOQfmz4fLL291bSRJUrP5iHYcmDABrr66eNPFxz7W6tpIkqR219SAFxGrI2JLRKyrlL0yIn4QEXsj\nYknd/hdHRF9E3BsRL66UL4mIdRFxX0SsqpRPiYhry2Nui4jjmnk/rTRjBnzhC/DBD8LFFztHniRJ\nGlizW/DWAC+pK/s+8IfA16uFEbEYOA9YDJwNXBYRtabJy4HlmbkIWBQRtXMuB7Zl5kJgFXBpU+6i\nTZx4IqxdC9/+Nrz85bBtW6trJEmS2lFTA15m3gJsryv7z8zsA+qfK58DXJuZezLzfqAPOC0i5gLT\nM3Ntud+VwNLKMVeU69cDZzX+LtrL0UfDl78MJ50Ez30urFs39DGSJGl8aac+ePOA9ZXvG8uyecCG\nSvmGsuyAYz JzL7AjImY1v6qtNWkSfPjDxZsuzjoLrruu1TWSJEntpJ0CXiOMerRJJ/rjPy5a8/7y\nL4vXm23a1OoaSZKkdjCp1RWo2AgcW/k+vywbqLx6zKaImAjMyMwBe6atXLnyyfWenh56enoaUe+W\netaz4K674P3vh1NOgQsvhD//czjssFbXTJIkDVdvby+9vb0NO1/T58GLiAXADZl5Sl3514A/z8w7\nyu8nAVcDp1M8er0ZWJiZGRG3AxcCa4EvAh/JzJsiYgVwcmauiIhlwNLMXDZAPTp2Hrzhuv/+YoTt\nN78Jf/M38LrXFVOsSJKkztLWEx1HxDVADzAb2AJcQjHo4qPAUcAO4K7MPLvc/2KKkbG7gYsy88tl\n+bOBTwJTgRsz86Ky/BDgKuBZwFZgWTlAo7+6dH3Aq7n9dnjHO+BXv4K3vAWWLYPDD291rSRJ0nC1\ndcBrJ+Mp4AFkwr//O3z84/CNb8C558Kf/mnxfltJktTeDHjDNN4CXtWmTbBmDXziEzBrVtGi9zu/\nA0uW+G5bSZLakQFvmMZzwKvZtw++8hW44Yain96Pf1zMpfeCF8CZZ8IzngFz5kCMq7HIkiS1HwPe\nMBnwft2OHfCtbxVh79Zb4e67i0e7v/mbxbJ4cfH2jGOPhfnzi/DnoA1JkprPgDdMBrzhefhh+OEP\n4d57i8++Pti4ETZsgEcegac+tQh78+cXwa8W/o49Fo47zhZASZIawYA3TAa8sdu5s+jPt359Efjq\nPx94AHbtKlr9qsuCBXDMMTBvHsyY0eq7kCSp/RnwhsmAd3Ds2FH07evrgx/9qPhcv75oBdy4sWjd\nO+aYYpk9G448slhmzSo+Z84sJmk+/PADP6dNg0MPLT59TCxJ6nYGvGEy4LVeJjz2WBH0Nm2Cbdtg\n+/Ziqa0/8gj88pfwi18US239V7+Cxx8vWhEnTy6CXjX0VT8POwymTy+Www8vPmfMKELkrFl FsJw9\nu1ifMcNHypKk9mPAGyYDXnfILB4DP/74/tBXXf/Vr/aHw8ce2788+mgRILduLcLk1q3FsnPn/sA3\nezYcddT+lsWZMw9cZs2CpzylWA49tNX/JSRJ3cyAN0wGPPXniSf2h72f/3z/544dv75s3QpbthTL\npEn7w968efsHmlQHoDz1qcV+kiSNlAFvmAx4apTao+Za2KuNMq4fePLww0WL4Pz5+0PgvHn7B5zU\n+iL6mFiSVM+AN0wGPB1se/bA5s0HBsBNm/b3QawNPMksWgLnzDlwOfLIol/h1Kn7+xxOm1b0QZw0\n6deXiROLpbo+cWIxKKW2TJxYhMkJE/r/hOKzv/Xa9/r1obbXr0uShmbAGyYDntrVY4/BQw8Vy5Yt\n+9d37Njfx3Dnzv3re/bsX3bv3r++d2+xVNf37du/VL9nHvi5b19Rl8xiqV+vfa9fH2p7f+rD40iX\n+nPUn3egc9fCb3WZPLkI0IccUnzWlmqIrobmgcJvfwF2oFA71L6Dhej6e6oF89p6faCvD/D164Mt\n1WPrl+ofE/X/nQb6Xv/fvf579Y8MSQa8YTPgSa3VX3gc6VI7tvrZ33p/y759B4bjPXuKPpi7dhUB\neufO/QN4du/eH5ZrgXnPnv7Db3//rAz0T81Q+w4Woge7r2pQrw/1/e033P/e/Z27+sdD/X+f+vXa\nHyHVstofJbXy2vd9+wYOhP21RlcD7FB/DPQXkIe7rb9z1rYPtj7SgN9fEJ80qXhf+OTJxVJdr4Xk\n2vohh+z/Q6X6Wd2/dkztj5Xh1G2w+xvsj4LqHwcDbR9Ji3+7hP+x1mOg+5w9u799DXjDYsCTpPZV\nC4z1AbG29BdeBwurMPAfFcPd1t85a9sHWx9JwK/de3+huhaEn3ii+Kxfr22vldf+SKl+1rbXB+vh\n1m2g+xvsD4LqevWPjPr7G+q/51B1O9jGWo/B7nPr1l/ff6wBzzF+kq SWmzChaKGS1Bi+E0CSJKnL\nGPAkSZK6jAFPkiSpyxjwJEmSuowBT5IkqcsY8CRJkrqMAU+SJKnLGPAkSZK6jAFPkiSpyxjwJEmS\nuowBT5IkqcsY8CRJkrqMAU+SJKnLGPAkSZK6jAFPkiSpyxjwJEmSuowBT5IkqcsY8CRJkrpMUwNe\nRKyOiC0Rsa5SdmREfDki/jMivhQRR1S2XRwRfRFxb0S8uFK+JCLWRcR9EbGqUj4lIq4tj7ktIo5r\n5v1IkiR1gma34K0BXlJX9i7gK5n5G8BXgYsBIuIk4DxgMXA2cFlERHnM5cDyzFwELIqI2jmXA9sy\ncyGwCri0mTej1unt7W11FTRK/nadzd+vc/nbjW9NDXiZeQuwva74HOCKcv0KYGm5/grg2szck5n3\nA33AaRExF5iemWvL/a6sHFM91/XAWQ2/CbUF/6HqXP52nc3fr3P5241vreiDNycztwBk5mZgTlk+\nD1hf2W9jWTYP2FAp31CWHXBMZu4FdkTErOZVXZIkqf21wyCLbOC5YuhdJEmSultkNjJf9XOBiOOB\nGzLzGeX3e4GezNxSPn79WmYujoh3AZmZf1fudxNwCfBAbZ+yfBnwwsx8c22fzPx2REwEfpaZc369\nFhARzb1RSZKkBsrMUTdcTWpkRQYQHNiy9gXgDcDfAa8HPl8pvzoi/p7i0euJwHcyMyPikYg4DVgL\nvA74SOWY1wPfBs6lGLTRr7H8R5IkSeokTW3Bi4hrgB5gNrCFokXu/wCfBo6laJ07LzN3lPtfTDEy\ndjdwUWZ+uSx/NvBJYCpwY2ZeVJYfAlwFPAvYCiwrB2hIkiSNW01/RCtJkqSDqx0GWTRdRLw0In5Y\nTpT8l62ujwYWEfMj4qsRcXdEfD8iLizLB5wgW+0lIiZExJ0R8YXyu79dh4iIIyLi0+Vk83dHxOn+\nfp2jfFnA3eWLAa4uXwbg79emGvUyiIF0fcCLi AnAP1JMuPxbwPkR8ZutrZUGsQd4R2b+FvDbwAXl\n79XvBNlqSxcB91S++9t1jn+g6AazGHgm8EP8/TpCOaDxT4BnlYMaJwHn4+/Xzhr1Moh+dX3AA04D\n+jLzgczcDVxLMUGy2lBmbs7Mu8r1XwD3AvMZeIJstZGImA+8DPinSrG/XQeIiBnACzJzDUA56fwj\n+Pt1ikeBJ4DDImISMI1iPll/vzbViJdBDHb+8RDw6idQrk6UrDYWEQuAU4HbgacMMEG22svfA+/k\nwPkt/e06wwnAzyNiTfmI/eMRcSj+fh0hM7cDHwIepAh2j2TmV/D36zQjfRnEgMZDwFMHiojDKV4/\nd1HZklc/GsjRQW0mIl4ObClbYAd7dOBv154mAUuAj2XmEuCXFI+L/P9eB4iIpwFvB44HjqFoyftj\n/P063ah/r/EQ8DYCx1W+zy/L1KbKxwvXA1dlZm2exC0R8ZRy+1zgoVbVTwN6PvCKiPgJ8CngdyPi\nKmCzv11H2ACsz8zvlt8/QxH4/P9eZ3gOcGtmbitf3fk54Az8/TrNQL/XRorp5WqGzDLjIeCtBU6M\niOMjYgqwjGKCZLWvfwbuycx/qJTVJsiGAyfIVpvIzHdn5nGZ+TSK/599NTNfC9yAv13bKx8LrY+I\nRWXRWcDd+P+9TvGfwPMiYmrZ+f4sisFO/n7tbaCXQcCvvwxiWTky+gTKl0EMeuLxMA9eRLyUYnTY\nBGB1Zn6gxVXSACLi+cA3gO9TNE0n8G6K/yFfRz8TZKv9RMQLgf+ema+IiFn423WEiHgmxQCZycBP\ngDcCE/H36wgR8U6KcLAX+A/gvwLT8fdrS416GcSA5x8PAU+SJGk8GQ+PaCVJksYVA54kSVKXMeBJ\nkiR1GQOeJElSlzHgSZIkdRkDniRJUpcx4EkaVyLisfLz+Ig4v8Hnvrju+y2NPL8kDZcBT9J4U5v8\n8wTg1SM5MCImDrHLuw+4 UOaZIzm/JDWKAU/SePV+4MyIuDMiLoqICRFxaUR8OyLuiog/geKtHBHx\njYj4PMWru4iIz0XE2oj4fkT817Ls/cC08nxXlWWP1S4WER8s9/9eRJxXOffXIuLTEXFv7ThJGqtJ\nra6AJLXIuyhfpwZQBrodmXl6+d7qWyOi9iqgZwG/lZkPlt/fmJk7ImIqsDYiPpOZF0fEBZm5pHKN\nLM/9R8AzMvOUiJhTHvP1cp9TgZOAzeU1z8jMbzXzxiV1P1vwJKnwYuB1EfEfwLeBWcDCctt3KuEO\n4G0RcRdwOzC/st9Ang98CiAzHwJ6gedWzv2zLN4beRewYOy3Imm8swVPkgoBvDUzbz6gMOKFwC/r\nvv8ucHpm7oqIrwFTK+cY7rVqdlXW9+K/y5IawBY8SeNNLVw9BkyvlH8JWBERkwAiYmFEHNrP8UcA\n28tw95vA8yrbnqgdX3etbwKvKvv5HQ28APhOA+5FkvrlX4qSxpvaKNp1wL7ykewnM/MfImIBcGdE\nBPAQsLSf428C/ltE3A38J3BbZdvHgXURcUdmvrZ2rcz8XEQ8D/gesA94Z2Y+FBGLB6ibJI1JFN0+\nJEmS1C18RCtJktRlDHiSJEldxoAnSZLUZQx4kiRJXcaAJ0mS1GUMeJIkSV3GgCdJktRlDHiSJEld\n5v8B1ALYNEsawJYAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAngAAAGJCAYAAAAZsU4bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu8XWV97/vPLzcuIQkQLoGEcKmJDRKUUEHrbSmneKkF\nuqsYbKvVbHdrqKDd9VRszyH2HF8q3baoLe5dTblVyFGsWxE2iluXFguSghgVlFgJuUEQciFcArn8\nzh9jTNbIZK2VdZkz8/Z5v17jNcd8xu0ZTBK+PM94nhGZiSRJkrrHhFZXQJIkSY1lwJMkSeoyBjxJ\nkqQuY8CTJEnqMgY8SZKkLmPAkyRJ6jIGPEkao4g4MSIeb/S+kjReBjxJTRMRayLiqYh4PCIeiogr\nI+Lgclt/RDwdEbMr+58VEQ/UHb8jIg6vO+8PI2JPRMwtv18VEc+U19lefr617pjjKtu2l8c/USl7\nxWjvLzMfyMzpjd53tCLi2oj4v5txbkmdyYAnqZkS+O0y2CwCfgP4q8q2J4D/a5BjqusPABfUCiLi\nFOCgQfb7RGZOz8xp5eeX9jpp5rrKtmnlMQsrZd+vr3xE+HekpI7kX16Smi0AMvMh4H8Bp1S2fRq4\nICJOHOb4a4F3Vr6/E7i6QfWKvQqKlrC/j4j/FRHbgVdGxO+ULYbbyhbFv6rs/2sRsafy/V8jYllE\nfL9sFbw5Ig4d7b7l9ndFxIMR8UhEXBIR6yLi1aO+yYhXRsTKiNgSEXdExBmVbUsi4oHy+r+IiPPL\n8nkR8d2I2Fpe/59He11JrWXAk7RfRMRxwJuAuyvFG4DPAX89zKF3ANMi4oVli9rbgH+mLpw10AXA\npWUr3x3AduDtmTkD+B3gooh4U2X/+vc9XgD8IXAUcAjwZ6PdNyIWAp8CzgdmA0cCR4/2RiJiJvB1\n4G+AmcDfAzdHxIyImAZ8EjirbGF9BbCqPPSjwNcz8 1BgDvAPo722pNYy4Elqtv8ZEZuB7wHfAT5W\nt/3jwJsjYsEw56i14v0WcB+wcZB9PhgRm8uWqkfGUd+vZOadAJn5bGb2Z+Z95fcfA/8f8Jphjl+e\nmb/MzB3Al4CXjGHft5T1+EFm7qTo1h5LoP0d4CeZ+cXM3JOZ/wz8EvjtcvseYGFEHJCZmzLzZ2X5\nTuCEiDi2/Gdw+xiuLamFDHiSmu3czDw8M0/MzPdl5jPVjZn5KEXL0v8zzDn+GXg78EfANUPs8zfl\ndQ7LzKPGUd911S8R8fKI+E7ZVbkVWAIcMczxD1fWn6JomRvtvsdW65GZTwFbRlD3escCD9aVPQjM\nzsztFC2Ifwo8HBFfi4h55T5/BkwB/j0ifhQR7xjDtSW1kAFPUrONpOXpvwGvBU4fbGNmrqUYbPFG\n4F8aV7VB1XejXk/Ruja77LJcTvO6h2seougaBSAipgKHjeE8G4ET6srmUnSNk5nfyMzfAmYB/wH8\nj7J8U2a+JzOPpQiA/xgRx4/h+pJaxIAnqeUycxtFyPs/h9nt3cDrMvPp/VOr5xwCbMnMnRHxMmBx\n3fbRhL2R7vsl4LyIOCMiJlM8o1gfPOtNjogDKstkiufvTo6It0bExIh4O/BrwE0RMSsi3hwRBwG7\ngCeB3QDl/seW591G0ZW7exT3KanFDHiSmmm4UFK/7dMUQaN++pNipZhH7u7BtjWwboOVvRf4eERs\nAz5E8QzeUMfsq04j2rd81u8DwA0UrW2/Ah4DnhnqGODDFN28teUbZff3OWW9HwUuppi2ZhswEfgg\nRSvfr4CXAxeW5zoTWFmOJL4BWJqZ6/dxb5LaSGSO9+/IYU4esRx4M7ApM08ty15KMSJrMsWDvEsz\n89/LbZdQ/F/6LuDizPxmWb4IuAo4ELg5M99flk+heB7ndIq/vN5WduVIUtcoR7xuBeZm5oZW10dS\n+2t2C96VwOvryi4D/iozTwMu pRi+T0ScTDElwAKK52yuiIhad8ZngSWZOR+YHxG1cy4BNmfmPODy\n8tyS1PHK+fcOiohDgL8F7jLcSRqppga8zLyN54/8egiYUa4fSvmwL0U3worM3JWZa4DVwBkRMQuY\nlpkry/2uAc4r189lYMLTG4CzGn4TktQav0vRfbqWYmDEBcPvLkkDJrXgmh8Cvh8Rn6R44Pg3y/LZ\nQHWupQ1l2S6g+uzH+rK8dsw6gMzcXc66fnhmbm5i/SWp6TLz3RSPrEjSqLVikMVy4H2ZOZfiIeJ/\nauC5mz11gSRJUttrRQvemeW8S2TmDRHx+bJ8A3BcZb85ZdlQ5dVjNkbERGD6UK13EdG80SSSJEkN\nlpljbrjaHy149S/0Xh0RrwGIiLMonrUD+BqwOCKmlC8efwFwZ2Y+DGwr54MK4B3AVyvH1F5C/lbg\n28NVJDNdOnS59NJLW14HF3+7Xlz8/Tp38bfr7GW8mtqCFxHXAX3AzIhYSzFq9r9QjJCdAuwov5OZ\n90bEF4F7GZg+pXaHF7L3NCm3lOXLgWsjYjXFHFH1E5BKkiT1nKYGvMx8+xCbzhxi/4/x/BeRk5l3\nAQsHKX+GYmoVSZIklXyThTpCX19fq6ugMfK362z+fp3L3663NfVNFu0kIrJX7lWSJHW2iCDbfJCF\nJEmS9iMDniRJUpcx4EmSJHUZA54kSVKXMeBJkiR1GQOeJElSlzHgSZIkdRkDniRJUpcx4EmSJHUZ\nA54kSVKXMeBJkiR1GQOeJElSlzHgSZIkdRkDniRJUpcx4EmSJHUZA54kSVKXMeBJkiR1GQOeJElS\nlzHgSZIkdRkDniRJUpfpqYC3ZUurayBJktR8PRXwfvjDVtdAkiSp+Xoq4N19d6trIEmS1Hw9FfDu\nuqvVNZAkSWq+ngp4tuBJkqRe0FMBb8MGePzxVtdCkiSpuXoq4C1cCPfc0+paSJIkNVdPBbzTT/c5\nPEmS1P1 6KuAtWuRzeJIkqfv1VMCzBU+SJPWCyMxW12G/iIh89tnk0EPhkUdg6tRW10iSJGlwEUFm\nxliPb2oLXkQsj4hNEbGqUrYiIu4ulwci4u7KtksiYnVE3BcRZ1fKF0XEqoi4PyIur5RPKc+3OiJu\nj4i5w9Vn8mR40YscaCFJkrpbs7torwReXy3IzMWZuSgzFwFfBv4FICIWAOcDC4A3AldERC25fhZY\nkpnzgfkRUTvnEmBzZs4DLgcu21eFfA5PkiR1u6YGvMy8DdgyzC7nA9eV6+cCKzJzV2auAVYDZ0TE\nLGBaZq4s97sGOK9yzNXl+g3AWfuqk8/hSZKkbteyQRYR8Srg4cz8ZVk0G1hX2WVDWTYbWF8pX1+W\n7XVMZu4GtkbE4cNd1xY8SZLU7Vo5ivYC4PoGn3OfDyOecgr84hfw9NMNvrIkSVKbmNSKi0bEROA/\nAYsqxRuA4yrf55RlQ5VXj9lYnnN6Zm4e6rrLli0DYMYMuPLKPpYu7RvXfUiSJDVCf38//f39DTtf\n06dJiYgTgBszc2Gl7A3AX2TmaytlJwNfAM6k6Hq9FZiXmRkRdwAXASuBm4BPZ+YtEbEUOCUzl0bE\nYuC8zFw8RD2ydq/veQ+cdhosXdr4+5UkSRqvdp8m5Trg3yhGvq6NiHeVm95GXfdsZt4LfBG4F7gZ\nWJoD6fNCYDlwP7A6M28py5cDR0TEauD9wIdGUi+fw5MkSd2spyY6rt3rnXfCH/8x/PCHLa6UJEnS\nIMbbgteTAe/pp2HmTNiyBQ44oMUVkyRJqtPWXbTt6qCDYN48+PGPW10TSZKkxuvJgAc+hydJkrpX\nzwY832ghSZK6Vc8GPFvwJElSt+rJQRYATz4JRx4JW7fClCktrJgkSVIdB1mM0dSpcNxxsHp1q2si\nSZLUWD0b8KAIeBs3troWkiRJjdXTAe/YY2HDhn3vJ0mS1El6PuDZgidJkrqNAc+AJ0mS uowBz4An\nSZK6jAHPgCdJkrpMTwe82bMNeJIkqfv07ETHAM88A9OmwY4dMKGno64kSWonTnQ8DgccADNmwKOP\ntromkiRJjdPTAQ98Dk+SJHUfA54BT5IkdRkDngFPkiR1GQOeAU+SJHUZA57vo5UkSV3GgGcLniRJ\n6jIGPAOeJEnqMgY8A54kSeoyPf0mC4Bdu+Cgg+Dpp2HSpBZUTJIkqY5vshinSZPgyCNh06ZW10SS\nJKkxej7ggd20kiSpuxjwMOBJkqTuYsDDgCdJkrqLAQ8DniRJ6i4GPAx4kiSpuxjw8HVlkiSpuxjw\nsAVPkiR1l6YGvIhYHhGbImJVXfn7IuK+iPhxRHy8Un5JRKwut51dKV8UEasi4v6IuLxSPiUiVpTH\n3B4Rc8dSTwOeJEnqJs1uwbsSeH21ICL6gN8BFmbmQuC/leULgPOBBcAbgSsiojaD82eBJZk5H5gf\nEbVzLgE2Z+Y84HLgsrFU8ogj4PHH4ZlnxnK0JElSe2lqwMvM24AtdcXvBT6embvKfR4ty88FVmTm\nrsxcA6wGzoiIWcC0zFxZ7ncNcF7lmKvL9RuAs8ZSzwkTYNYseOihsRwtSZLUXlrxDN584NURcUdE\nfCciTi/LZwPrKvttKMtmA+sr5evLsr2OyczdwNaIOHwslZo9225aSZLUHSa16JqHZebLIuKlwJeA\nkxp07jG/lNfn8CRJUrdoRcBbB/wLQGaujIjdETGTosWuOkhiTlm2AThukHIq2zZGxERgemZuHurC\ny5Yte269r6+Pvr6+574b8CRJUqv09/fT39/fsPNFZjbsZINeIOIE4MZyQAUR8V+A2Zl5aUTMB27N\nzOMj4mTgC8CZFF2vtwLzMjMj4g7gImAlcBPw6cy8JSKWAqdk5tKIWAycl5mLh6hHDnevH/sYbNsG\nH//4kLtIkiTtFxFBZo65Z7KpLXgRcR3QB8yMiLXApcA/AVdGxI+ BZ4B3AGTmvRHxReBeYCewtJLI\nLgSuAg4Ebs7MW8ry5cC1EbEaeAwYNNyNxLHHwn33jfVoSZKk9tH0Frx2sa8WvFtvhU98Ar71rf1Y\nKUmSpEGMtwXPN1mUfAZPkiR1CwNeyffRSpKkbmHAKx16KDz7LDzxRKtrIkmSND4GvFJE0Yrn2ywk\nSVKnM+BV+ByeJEnqBga8CgOeJEnqBga8Ct9HK0mSuoEBr8IWPEmS1A0MeBUGPEmS1A0MeBUGPEmS\n1A0MeBUGPEmS1A0MeBXHHFMEvB55Pa8kSepSBryKadNg4kTYtq3VNZEkSRo7A14du2klSVKnM+DV\nMeBJkqROZ8CrY8CTJEmdzoBXx4AnSZI6nQGvjgFPkiR1OgNeHd9HK0mSOp0Br86sWQY8SZLU2Qx4\ndWbNgk2bWl0LSZKksTPg1Tn6aAOeJEnqbAa8OtOmwe7d8MQTra6JJEnS2Bjw6kTYTStJkjqbAW8Q\ndtNKkqROZsAbhAFPkiR1MgPeIGbNgocfbnUtJEmSxsaANwhb8CRJUicz4A3CgCdJkjqZAW8QdtFK\nkqROZsAbhC14kiSpkxnwBmHAkyRJncyANwi7aCVJUidrasCLiOURsSkiVlXKLo2I9RFxd7m8obLt\nkohYHRH3RcTZlfJFEbEqIu6PiMsr5VMiYkV5zO0RMbcR9T7kEMj0dWWSJKkzNbsF70rg9YOU/21m\nLiqXWwAiYgFwPrAAeCNwRUREuf9ngSWZOR+YHxG1cy4BNmfmPOBy4LJGVDrCblpJktS5mhrwMvM2\nYMsgm2KQsnOBFZm5KzPXAKuBMyJiFjAtM1eW+10DnFc55upy/QbgrEbV3W5aSZLUqVr1DN6fRsQ9\nEfH5iJhRls0G1lX22VCWzQbWV8rXl2V7HZOZu4GtEXF4IypoC54kSepUrQh4VwAnZeZLgIeBTzbw\n3IO1DI6JAU+SJHWqSfv7gpn5q8rXzwE3lu sbgOMq2+aUZUOVV4/ZGBETgemZuXmoay9btuy59b6+\nPvr6+oasp120kiRpf+nv76e/v79h54vMbNjJBr1AxAnAjZm5sPw+KzMfLtc/ALw0M98eEScDXwDO\npOh6vRWYl5kZEXcAFwErgZuAT2fmLRGxFDglM5dGxGLgvMxcPEQ9cjT3esUVsGoV/Pf/Prb7liRJ\nGquIIDPH3DPZ1Ba8iLgO6ANmRsRa4FLgtRHxEmAPsAb4Y4DMvDcivgjcC+wEllYS2YXAVcCBwM21\nkbfAcuDaiFgNPAYMGu7Gwi5aSZLUqZregtcuRtuC9/3vw5//Odx+exMrJUmSNIjxtuD5Josh2IIn\nSZI6lQFvCLWA1yMNnJIkqYsY8IZwyCHFp68rkyRJncaANwRfVyZJkjqVAW8YBjxJktSJDHjDcLJj\nSZLUiQx4w7AFT5IkdSID3jAMeJIkqRMZ8IZhF60kSepEBrxh2IInSZI6kQFvGAY8SZLUiQx4w7CL\nVpIkdSID3jB8XZkkSepEBrxhHHJI8UYLX1cmSZI6iQFvH+ymlSRJncaAtw8OtJAkSZ3GgLcPBjxJ\nktRpDHj7YBetJEnqNAa8fbAFT5IkdRoD3j4Y8CRJUqcx4O2DXbSSJKnTGPD2wRY8SZLUaQx4+2DA\nkyRJncaAtw9HH1100fq6MkmS1CkMePtwyCEwcSJs397qmkiSJI2MAW8E7KaVJEmdxIA3Ao6klSRJ\nncSANwK24EmSpE5iwBsBA54kSeokIwp4EfFrEXFAud4XERdFxKHNrVr7qI2klSRJ6gQjbcH7MrA7\nIl4A/CNwHHBd02rVZmbNsgVPkiR1jpEGvD2ZuQv4XeAzmflB4JjmVau92EUrSZI6yUgD3s6IuAB4\nJ/D1smxyc6rUfuyilSRJnWSkAe9dwMuBj2bmAxFxInDtvg6KiOURsSkiVg2y7b9GxJ6IOLxSdklE\nrI6I+yLi7Er5oohYF RH3R8TllfIpEbGiPOb2iJg7wvsZFbtoJUlSJxlRwMvMezPzosy8PiIOA6Zl\n5idGcOiVwOvrCyNiDvBbwIOVsgXA+cAC4I3AFRER5ebPAksycz4wPyJq51wCbM7MecDlwGUjuZ/R\nqnXR+roySZLUCUY6irY/IqaXrW13A5+LiL/d13GZeRuwZZBNfwd8sK7sXGBFZu7KzDXAauCMiJhF\nEShXlvtdA5xXOebqcv0G4KyR3M9oTZ1avK7s8cebcXZJkqTGGmkX7YzMfBz4T8A1mXkm8H+M5YIR\ncQ6wLjN/XLdpNrCu8n1DWTYbWF8pX1+W7XVMZu4Gtla7fBvJblpJktQpJo10v4g4hqIL9S/HerGI\nOAj4MEX3bDPEcBuXLVv23HpfXx99fX0jPnGtm3b+/LFWTZIkaXD9/f309/c37HwjDXh/DXwD+H5m\nroyIkyi6UEfr14ATgB+Vz9fNAe6OiDMoWuyqgyTmlGUbKObdqy+nsm1jREwEpmfm5qEuXg14o3XM\nMbBx45gPlyRJGlJ9w9NHPvKRcZ1vpIMsvpSZp2bme8vvv8zM3xvhNaJcyMyfZOaszDwpM0+k6G49\nLTMfAb4GvK0cGXsi8ALgzsx8GNgWEWeUofAdwFfLc3+NYuoWgLcC3x5hnUZt7lxYt27f+0mSJLXa\nSAdZzImIr0TEI+Xy5XIk7L6Ouw74N4qRr2sj4l11uyQD4e9e4IvAvcDNwNLM58atXggsB+4HVmfm\nLWX5cuCIiFgNvB/40EjuZyzmzoUHH9z3fpIkSa0WOYK5PyLiVopXk9XmvvsD4Pczs1nP0jVcRORI\n7nUoX/kKXHUVfPWr+9xVkiRpXCKCzBx2bMFwRjqK9sjMvLKcwmRXZl4FHDnWi3YiW/AkSVKnGGnA\neywi/iAiJpbLHwCPNbNi7eb442Ht2lbXQpIkad9GGvDeTTFFysPAQ8BbgD9qUp3a0syZsGMHbN/e\n 6ppIkiQNb6SjaB/MzHMy88jMPCozzwNGOoq2K0QU3bS24kmSpHY30ha8wfxZw2rRIY4/3ufwJElS\n+xtPwBvzyI5OZQueJEnqBOMJeGOfc6RD2YInSZI6wbCvKouI7Qwe5AI4qCk1amNz58I3vtHqWkiS\nJA1v2ICXmdP2V0U6gS14kiSpE4yni7bn+AyeJEnqBCN6VVk3GO+rygB27oSpU+HJJ2Hy5AZVTJIk\nqc7+elWZKELdUUfBxo2trokkSdLQDHij5CvLJElSuzPgjdLcuQ60kCRJ7c2AN0q24EmSpHZnwBsl\nW/AkSVK7M+CNki14kiSp3RnwRskWPEmS1O4MeKNUm+y4R6YPlCRJHciAN0ozZsCkSbB5c6trIkmS\nNDgD3hj4yjJJktTODHhjcPzxPocnSZLalwFvDGzBkyRJ7cyANwa24EmSpHZmwBsDW/AkSVI7M+CN\ngS14kiSpnRnwxsAWPEmS1M4ie2TG3ojIRt3rnj1w0EGwbRsceGBDTilJkvSciCAzY6zH24I3BhMm\nwOzZsG5dq2siSZL0fAa8MTr+eLtpJUlSezLgjdHcuQ60kCRJ7cmAN0a24EmSpHbV1IAXEcsjYlNE\nrKqU/XVE/Cgi7omIb0XEnMq2SyJidUTcFxFnV8oXRcSqiLg/Ii6vlE+JiBXlMbdHxNxm3k+VLXiS\nJKldNbsF70rg9XVll2XmizPzJcBXgUsBIuJk4HxgAfBG4IqIqI0e+SywJDPnA/MjonbOJcDmzJwH\nXA5c1tS7qXCqFEmS1K6aGvAy8zZgS13ZE5WvU4HHyvVzgBWZuSsz1wCrgTMiYhYwLTNXlvtdA5xX\nrp8LXF2u3wCc1fCbGIKTHUuSpHY1qRUXjYj/F3gH8BRwZlk8G7i9stuGsmwXsL5Svr4srx2zDiAz\nd0fE1og4PDM3N7H6ABx3HKxfX8yJN8EnGSVJUhtpSTTJzL/KzLkUXbiX72v/U RjzhICjdfDBMH06\nbNq0v64oSZI0Mi1pwau4Dri5XN8AHFfZNqcsG6q8eszGiJgITB+u9W7ZsmXPrff19dHX1zeuytee\nwzvmmHGdRpIk9bj+/n76+/sbdr6mv6osIk4AbszMheX3F2TmL8r19wFnZOYfloMsvkDRZTsbuBWY\nl5kZEXcAFwErgZuAT2fmLRGxFDglM5dGxGLgvMxcPEQ9Gvaqsprf+z1429vg/PMbelpJktTjxvuq\nsqa24EXEdUAfMDMi1lKMmP3tiHghxbN1vwTeC5CZ90bEF4F7gZ3A0koiuxC4CjgQuDkzbynLlwPX\nRsRqisEag4a7ZnEkrSRJakdNb8FrF81owbv8cviP/4DPfKahp5UkST1uvC14jv8cB1vwJElSOzLg\njYNz4UmSpHZkwBuHk04qumj37Gl1TSRJkgYY8MbhsMPg0ENhzZpW10SSJGmAAW+cTj0VVq1qdS0k\nSZIGGPDG6cUvhh/9qNW1kCRJGmDAGydb8CRJUrsx4I2TLXiSJKndONHxOO3aBdOnwyOPwCGHNPz0\nkiSpBznRcYtNmgQLFsBPftLqmkiSJBUMeA1gN60kSWonBrwGcKCFJElqJwa8BrAFT5IktRMHWTTA\nY48Vry3buhVizI9DSpIkFRxk0QZmzoRp03xlmSRJag8GvAbxOTxJktQuDHgN8uIXG/AkSVJ7MOA1\nyKmnOtBCkiS1BwNeg9iCJ0mS2oWjaBuk9sqyX/0Kpk5t2mUkSVIPcBRtm/CVZZIkqV0Y8BrI5/Ak\nSVI7MOA1kM/hSZKkdmDAayDnwpMkSe3AQRYN9Oij8IIXwJYtvrJMkiSNnYMs2sgRRxQjaNeubXVN\nJElSLzPgNZgDLSRJUqsZ8BrMgRaSJKnVDHgNZgueJElqNQNeg9mCJ0mSWs1RtA22cyfMmFGMqD34\n4KZfTpIkdSFH0baZyZPh13/dV5ZJkqTWMeA1gc/hSZKk VmpqwIuI5RGxKSJWVcoui4j7IuKeiPhy\nREyvbLskIlaX28+ulC+KiFURcX9EXF4pnxIRK8pjbo+Iuc28n5F6xSvgO99pdS0kSVKvanYL3pXA\n6+vKvgm8KDNfAqwGLgGIiJOB84EFwBuBKyKeex/EZ4ElmTkfmB8RtXMuATZn5jzgcuCyZt7MSL35\nzXDLLcXzeJIkSftbUwNeZt4GbKkr+1Zm7im/3gHMKdfPAVZk5q7MXEMR/s6IiFnAtMxcWe53DXBe\nuX4ucHW5fgNwVlNuZJSOOQbmzYPvfa/VNZEkSb2o1c/gvRu4uVyfDayrbNtQls0G1lfK15dlex2T\nmbuBrRFxeDMrPFLnnANf+1qrayFJknpRywJeRPwlsDMzr2/kaRt4rnGpBbwemYVGkiS1kUmtuGhE\n/BHwJuB1leINwHGV73PKsqHKq8dsjIiJwPTM3DzUdZctW/bcel9fH319fWO9hX065ZTi8yc/gYUL\nm3YZSZLUBfr7++nv72/Y+Zo+0XFEnADcmJkLy+9vAD4JvDozH6vsdzLwBeBMiq7XW4F5mZkRcQdw\nEbASuAn4dGbeEhFLgVMyc2lELAbOy8zFQ9Rjv0x0XHXxxXDUUfCXf7lfLytJkjpcW090HBHXAf9G\nMfJ1bUS8C/gMcAhwa0TcHRFXAGTmvcAXgXspnstbWklkFwLLgfuB1Zl5S1m+HDgiIlYD7wc+1Mz7\nGS2fw5MkSa3gq8qaaOdOOPpo+OlPi5G1kiRJI9HWLXi9bvJkeMMb4Otfb3VNJElSLzHgNdk558BX\nv9rqWkiSpF5iF22Tbd0Kc+fCQw/B1Kn7/fKSJKkD2UXb5g49FM44A269tdU1kSRJvcKAtx84mlaS\nJO1PdtHuB2vWFK14Dz0EEye2pAqSJKmD2EXbAU44oZgm5Qc/aHVNJElSLzDg7Sd200qSpP3FgLef\nGPAkSdL+YsDbT04/HXbsgH/911b XRJIkdTsD3n4yYQIsWwaXXAI9Mq5FkiS1iAFvP/r93y8mPr7p\nplbXRJIkdTMD3n40cSJ89KNFK97u3a2ujSRJ6lYGvP3snHPgkEPg+utbXRNJktStnOi4Bb77XXjX\nu+BnP4MpU1pdG0mS1G6c6LgDveY18MIXwuc+1+qaSJKkbmQLXov88IfwpjfB6tVFl60kSVKNLXgd\n6rTTipa8T32q1TWRJEndxha8Flq9Gl7+cvj5z2HmzFbXRpIktYvxtuAZ8FrsT/6kmD7lH/6h1TWR\nJEntwi7aDvfRj8I3vwmf/3yrayJJkrrFpFZXoNfNnAlf/zq8+tVw0knwute1ukaSJKnT2YLXBl74\nQlixAi7p2VRYAAAPaUlEQVS4oJgbT5IkaTwMeG3ita+Fj30M3vxmePTRVtdGkiR1MgdZtJm/+Au4\n/Xa49VY44IBW10aSJLWCo2hHqFMC3p498Ja3FJMfX301xJh/WkmS1KkcRdtlJkyAa6+FX/wCzj67\nmCtPkiRpNAx4bWjqVPje94pXmb385fCRj8COHa2ulSRJ6hQGvDY1aRJ84APFO2t/9CM49VT41rda\nXStJktQJfAavQ9x4I7zvfbBoESxZUnTfTp7c6lpJkqRmcJDFCHV6wAN48km46iq4/vpivry3vKWY\nO+9Vryqe3ZMkSd3BgDdC3RDwqh58sJgc+frri3nzzj0X3vCGYj69Qw5pde0kSdJ4GPBGqNsCXtW9\n98JNN8Ett8Cdd8Jv/EYR9s4+GxYuLJ7nkyRJnaOtA15ELAfeDGzKzFPLsrcAy4AFwEsz8+7K/pcA\n7wZ2ARdn5jfL8kXAVcCBwM2Z+f6yfApwDXA68CjwtsxcO0RdujbgVT3xBPT3F2Hvf/9vWLu2CHmn\nnz6wLFgAU6a0uqaSJGko7R7wXgk8AVxTCXgvBPYA/wP481rAi4gFwHXAS4E5wLeAeZmZEfED4E8z\nc2VE3Ax8Kj O/ERHvBRZm5tKIeBvwu5m5eIi69ETAq7d9ezES9667BpZf/hJmzYITT4STTiqWE0+E\n44+HuXPh2GNt9ZMkqZXGG/Ca+p/xzLwtIo6vK/s5QMTz3tFwLrAiM3cBayJiNXBGRDwITMvMleV+\n1wDnAd8oj7m0LL8B+Pvm3EnnmjYNXv3qYqnZuRPWrYMHHijC3gMPFKN0164tlkceKQLg3Llw3HGD\nL0cc4cAOSZLaVTu108wGbq9831CW7QLWV8rXl+W1Y9YBZObuiNgaEYdn5ub9UN+ONXnyQMvdWWc9\nf/uzz8LGjUXYe/BBWL8e7rsPvvnNIhiuW1e0DB51FBxzTLHMmlUsRx01sBx5ZPF5+OEwceL+v09J\nknpVOwW8RvDNrQ0wZQqccEKxDOWZZ2DTJnjoIXj44YHP++6D7363aAX81a+KfbZtgxkzYObMYjni\niIHP+vXDDy+Www6DAw/cX3csSVJ3aaeAtwE4rvJ9Tlk2VHn1mI0RMRGYPlzr3bJly55b7+vro6+v\nrxH17kkHHFB04c6du+99d++GLVvgsceKKV3qP3/xi+KzVrZlS7FMmFAEvcMOKwLitGkwffrA5/Tp\nRfmMGXDooQOftW3Tp8PBB8PzHgaQJKnN9Pf309/f37DzNX2alIg4AbgxMxfWlX+HYpDFXeX3k4Ev\nAGdSdL3eysAgizuAi4CVwE3ApzPzlohYCpxSDrJYDJznIIvukAlPPTUQ9h5/vFi2b9/7c9s22Lp1\n78/avo8/XrQ0TptWLAcd9PzlgAOKZcqUvT8nTy4GmkyevPcyZcrzlwMPHFgOOmhgfcqUgWOqnwZO\nSdK+tPso2uuAPmAmsIliQMQW4DPAEcBW4J7MfGO5/yXAEmAne0+Tcjp7T5NycVl+AHAtcBrwGLA4\nM9cMURcDXg/atWsgDD79NOzYUXzWlmeeKZZnny2W2vddu4rBKNXl2Wf3Xq/uXz33jh3FUj2 mtv+u\nXc8PisN9r4bO2vrBBxeTWU+dOrBMm7Z3d/fMmcU+hklJ6kxtHfDaiQFP7SBz78BXC4n1wbF+ey2E\n7thRtGw++eTey+OPP7/re9cumD27eJby+OMHnqusTYczZ47zIUpSuzLgjZABT73m6aeLEdAPPghr\n1gx8rllTjITeuLFo7as9S3nkkUWrX/0yVDf2AQcUXdHV9QMPdA5FSWoEA94IGfCkve3eXYx+Xreu\nCH+PPVa8CWX79uKztgzVjV1bduwY+Nyxo5gSp/aM48EHD71eC4vVLunas46TJu29TJ48eMisdldX\nPw2ZkjqdAW+EDHhS82UWIbD6nONTTz1//amnnt8VXeui3rXr+Ut9l3Xt86mnBoLok08OrE+ZUgS9\nadMGPmuDamqtjrUWx9pzjAcfPLBe27faWjl5cjGyO2LvBZ7/OdL10ew70msM9jnUUr2f2nr1s/5+\nh7v/wa4naewMeCNkwJN6Q2YRIqutkdu3D7QwVlsed+x4/vOMTzxRlNc///jMM8W5q0vtetXPka6P\nZt+RXmOwz30te/bs/Vld37176P3rr1G/XjVUuJwwoWjxra4PNsioNlq9PqBPmTLQyjtx4kBrb62V\nuLrMmAFHH10sRx1lK6/anwFvhAx4krR/7StYVpfdu4tl1669HwmoBu1qSK+NVK9v7d25c2AwUnXZ\nsqWYeH3TpuJxhEMPLcLe1KkDrbTV4FjfkjlYy+ZgLaDVdRjb51CtofX1qQ/J9WG3+ohD9fGH6rRN\ngy3VY2rrkybtfV9qvrZ+F60kqXe1a1ft7t3FSPNNm4rwV/9M6bPPPr91s9qaWQulQ7V87tlTXGe4\nltWhPgdrfa1+37lz7zrUgnFtvRZ0d+8eCMC1Ufr10z9Vp36qLvX71c6VORD2Jk4cCJbVVtihHgeo\n2dfjCsOVj1Qj/p3bV91G+ljFSB+VuOuu8de5ngFPktRTJk4c6K7VyO 3ZMxD+qqGy+jlYa23Nvh5X\nGK58pBrRUbevuo30sYrRPCrRDHbRSpIktZnxdtFOaGRlJEmS1HoGPEmSpC5jwJMkSeoyBjxJkqQu\nY8CTJEnqMgY8SZKkLmPAkyRJ6jIGPEmSpC5jwJMkSeoyBjxJkqQuY8CTJEnqMgY8SZKkLmPAkyRJ\n6jIGPEmSpC5jwJMkSeoyBjxJkqQuY8CTJEnqMgY8SZKkLmPAkyRJ6jIGPEmSpC5jwJMkSeoyBjxJ\nkqQuY8CTJEnqMgY8SZKkLmPAkyRJ6jJNDXgRsTwiNkXEqkrZYRHxzYj4eUR8IyJmVLZdEhGrI+K+\niDi7Ur4oIlZFxP0RcXmlfEpErCiPuT0i5jbzfiRJkjpBs1vwrgReX1f2IeBbmflC4NvAJQARcTJw\nPrAAeCNwRUREecxngSWZOR+YHxG1cy4BNmfmPOBy4LJm3oxap7+/v9VV0Bj523U2f7/O5W/X25oa\n8DLzNmBLXfG5wNXl+tXAeeX6OcCKzNyVmWuA1cAZETELmJaZK8v9rqkcUz3XDcBZDb8JtQX/oupc\n/nadzd+vc/nb9bZWPIN3VGZuAsjMh4GjyvLZwLrKfhvKstnA+kr5+rJsr2MyczewNSIOb17VJUmS\n2l87DLLIBp4r9r2LJElSd4vMRuarQS4QcTxwY2aeWn6/D+jLzE1l9+t3MnNBRHwIyMz8RLnfLcCl\nwIO1fcryxcBrMvO9tX0y8wcRMRF4KDOPen4tICKae6OSJEkNlJljbria1MiKDCHYu2Xta8AfAZ8A\n3gl8tVL+hYj4O4qu1xcAd2ZmRsS2iDgDWAm8A/h05Zh3Aj8A3koxaGNQ4/mHJEmS1Ema2oIXEdcB\nfcBMYBNFi9z/BL4EHEfROnd+Zm4t97+EYmTsTuDizPxmWX46cBVwIHBzZl5clh8AXAucBjwGLC4H\naEiSJPWspnfRSpIkaf9qh0EWTRcRb4iIn5UTJ f9Fq+ujoUXEnIj4dkT8NCJ+HBEXleVDTpCt9hIR\nEyLi7oj4Wvnd365DRMSMiPhSOdn8TyPiTH+/zlG+LOCn5YsBvlC+DMDfr0016mUQQ+n6gBcRE4C/\np5hw+UXABRHx662tlYaxC/izzHwR8HLgwvL3GnSCbLWli4F7K9/97TrHpygeg1kAvBj4Gf5+HaEc\n0Pge4LRyUOMk4AL8/dpZo14GMaiuD3jAGcDqzHwwM3cCKygmSFYbysyHM/Oecv0J4D5gDkNPkK02\nEhFzgDcBn68U+9t1gIiYDrwqM68EKCed34a/X6d4HHgWmBoRk4CDKOaT9fdrU414GcRw5++FgFc/\ngXJ1omS1sYg4AXgJcAdw9BATZKu9/B3wQfae39LfrjOcCDwaEVeWXez/GBEH4+/XETJzC/BJYC1F\nsNuWmd/C36/TjPZlEEPqhYCnDhQRh1C8fu7isiWvfjSQo4PaTET8NrCpbIEdruvA3649TQIWAf+Q\nmYuAJym6i/yz1wEi4iTgA8DxwLEULXm/j79fpxvz79ULAW8DMLfyfU5ZpjZVdi/cAFybmbV5EjdF\nxNHl9lnAI62qn4b0CuCciPglcD3wuoi4FnjY364jrAfWZea/l9+/TBH4/LPXGX4D+H5mbi5f3fkV\n4Dfx9+s0Q/1eGyiml6vZZ5bphYC3EnhBRBwfEVOAxRQTJKt9/RNwb2Z+qlJWmyAb9p4gW20iMz+c\nmXMz8ySKP2ffzsw/BG7E367tld1C6yJifll0FvBT/LPXKX4OvCwiDiwfvj+LYrCTv197G+plEPD8\nl0EsLkdGn0j5MohhT9wL8+BFxBsoRodNAJZn5sdbXCUNISJeAXwP+DFF03QCH6b4F/mLDDJBttpP\nRLwG+K+ZeU5EHI6/XUeIiBdTDJCZDPwSeBcwEX+/jhARH6QIB7uBHwL/GZiGv19batTLIIY8fy8E\nPEmSpF7SC120kiRJPcWA J0mS1GUMeJIkSV3GgCdJktRlDHiSJEldxoAnSZLUZQx4knpKRGwvP4+P\niAsafO5L6r7f1sjzS9JIGfAk9Zra5J8nAm8fzYERMXEfu3x4rwtlvnI055ekRjHgSepVHwNeGRF3\nR8TFETEhIi6LiB9ExD0R8R4o3soREd+LiK9SvLqLiPhKRKyMiB9HxH8uyz4GHFSe79qybHvtYhHx\nN+X+P4qI8yvn/k5EfCki7qsdJ0njNanVFZCkFvkQ5evUAMpAtzUzzyzfW/39iKi9Cug04EWZubb8\n/q7M3BoRBwIrI+LLmXlJRFyYmYsq18jy3L8HnJqZCyPiqPKY75b7vAQ4GXi4vOZvZua/NfPGJXU/\nW/AkqXA28I6I+CHwA+BwYF657c5KuAN4f0TcA9wBzKnsN5RXANcDZOYjQD/w0sq5H8rivZH3ACeM\n/1Yk9Tpb8CSpEMD7MvPWvQojXgM8Wff9dcCZmflMRHwHOLByjpFeq+aZyvpu/HtZUgPYgiep19TC\n1XZgWqX8G8DSiJgEEBHzIuLgQY6fAWwpw92vAy+rbHu2dnzdtf4VeFv5nN+RwKuAOxtwL5I0KP9P\nUVKvqY2iXQXsKbtkr8rMT0XECcDdERHAI8B5gxx/C/AnEfFT4OfA7ZVt/wisioi7MvMPa9fKzK9E\nxMuAHwF7gA9m5iMRsWCIuknSuETx2IckSZK6hV20kiRJXcaAJ0mS1GUMeJIkSV3GgCdJktRlDHiS\nJEldxoAnSZLUZQx4kiRJXcaAJ0mS1GX+fzCQC29do0IdAAAAAElFTkSuQmCC\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x111b9b390>" + "<matplotlib.figure.Figure at 0x10ec66b90>" ] }, "metadata": {}, @@ -221,15 +222,6 @@ "plt.ylabel('Loss')\n", "plt.title('PNMF Training Loss')" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": {
