5768 lines
748 KiB
Plaintext
5768 lines
748 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- dom:TITLE: Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis -->\n",
|
||
"# Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis\n",
|
||
"<!-- dom:AUTHOR: Morten Hjorth-Jensen at Department of Physics, University of Oslo & Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University -->\n",
|
||
"<!-- Author: --> \n",
|
||
"**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n",
|
||
"\n",
|
||
"Date: **Sep 7, 2018**\n",
|
||
"\n",
|
||
"Copyright 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Regression analysis, overarching aims\n",
|
||
"\n",
|
||
"Regression modeling deals with the description of the sampling distribution of a given random variable $y$ varies as function of another variable or a set of such variables $\\hat{x} =[x_0, x_1,\\dots, x_p]^T$. \n",
|
||
"The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\hat{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n",
|
||
"\n",
|
||
"A regression model aims at finding a likelihood function $p(y\\vert \\hat{x})$, that is the conditional distribution for $y$ with a given $\\hat{x}$. The estimation of $p(y\\vert \\hat{x})$ is made using a data set with \n",
|
||
"* $n$ cases $i = 0, 1, 2, \\dots, n-1$ \n",
|
||
"\n",
|
||
"* Response (dependent or outcome) variable $y_i$ with $i = 0, 1, 2, \\dots, n-1$ \n",
|
||
"\n",
|
||
"* $p$ Explanatory (independent or predictor) variables $\\hat{x}_i=[x_{i0}, x_{i1}, \\dots, x_{ip}]$ with $i = 0, 1, 2, \\dots, n-1$ \n",
|
||
"\n",
|
||
" The goal of the regression analysis is to extract/exploit relationship between $y_i$ and $\\hat{x}_i$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions .\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Regression analysis, overarching aims II\n",
|
||
"\n",
|
||
"\n",
|
||
"Consider an experiment in which $p$ characteristics of $n$ samples are\n",
|
||
"measured. The data from this experiment are denoted $\\mathbf{X}$, with\n",
|
||
"$\\mathbf{X}$ as above. The matrix $\\mathbf{X}$ is called the *design\n",
|
||
"matrix*. Additional information of the samples is available in the\n",
|
||
"form of $\\mathbf{Y}$ (also as above). The variable $\\mathbf{Y}$ is\n",
|
||
"generally referred to as the *response variable*. The aim of\n",
|
||
"regression analysis is to explain $\\mathbf{Y}$ in terms of\n",
|
||
"$\\mathbf{X}$ through a functional relationship like $Y_i =\n",
|
||
"f(\\mathbf{X}_{i,\\ast})$. When no prior knowledge on the form of\n",
|
||
"$f(\\cdot)$ is available, it is common to assume a linear relationship\n",
|
||
"between $\\mathbf{X}$ and $\\mathbf{Y}$. This assumption gives rise to\n",
|
||
"the *linear regression model* where $\\beta = (\\beta_1, \\ldots,\n",
|
||
"\\beta_p)^{\\top}$ is the *regression parameter*. The parameter\n",
|
||
"$\\beta_j$, $j=1, \\ldots, p$, represents the effect size of covariate\n",
|
||
"$j$ on the response. That is, for each unit change in covariate $j$\n",
|
||
"(while keeping the other covariates fixed) the observed change in the\n",
|
||
"response is equal to $\\beta_j$.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## General linear models\n",
|
||
"Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\hat{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\hat{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n",
|
||
"\n",
|
||
"Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y=y(x) \\rightarrow y(x_i)=\\tilde{y}_i+\\epsilon_i=\\sum_{j=0}^{n-1} \\beta_i x_i^j+\\epsilon_i,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\epsilon_i$ is the error in our approximation.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Rewriting the fitting procedure as a linear algebra problem\n",
|
||
"For every set of values $y_i,x_i$ we have thus the corresponding set of equations"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"y_0&=\\beta_0+\\beta_1x_0^1+\\beta_2x_0^2+\\dots+\\beta_{n-1}x_0^{n-1}+\\epsilon_0\\\\\n",
|
||
"y_1&=\\beta_0+\\beta_1x_1^1+\\beta_2x_1^2+\\dots+\\beta_{n-1}x_1^{n-1}+\\epsilon_1\\\\\n",
|
||
"y_2&=\\beta_0+\\beta_1x_2^1+\\beta_2x_2^2+\\dots+\\beta_{n-1}x_2^{n-1}+\\epsilon_2\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{n-1}&=\\beta_0+\\beta_1x_{n-1}^1+\\beta_2x_{n-1}^2+\\dots+\\beta_1x_{n-1}^{n-1}+\\epsilon_{n-1}.\\\\\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Rewriting the fitting procedure as a linear algebra problem, follows\n",
|
||
"Defining the vectors"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and the matrix"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{X}=\n",
|
||
"\\begin{bmatrix} \n",
|
||
"1& x_{0}^1 &x_{0}^2& \\dots & \\dots &x_{0}^{n-1}\\\\\n",
|
||
"1& x_{1}^1 &x_{1}^2& \\dots & \\dots &x_{1}^{n-1}\\\\\n",
|
||
"1& x_{2}^1 &x_{2}^2& \\dots & \\dots &x_{2}^{n-1}\\\\ \n",
|
||
"\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n",
|
||
"1& x_{n-1}^1 &x_{n-1}^2& \\dots & \\dots &x_{n-1}^{n-1}\\\\\n",
|
||
"\\end{bmatrix}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we can rewrite our equations as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{y} = \\hat{X}\\hat{\\beta}+\\hat{\\epsilon}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Generalizing the fitting procedure as a linear algebra problem\n",
|
||
"We are obviously not limited to the above polynomial. We could replace the various powers of $x$ with elements of Fourier series, that is, instead of $x_i^j$ we could have $\\cos{(j x_i)}$ or $\\sin{(j x_i)}$, or time series or other orthogonal functions.\n",
|
||
"For every set of values $y_i,x_i$ we can then generalize the equations to"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n",
|
||
"y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n",
|
||
"y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_2\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_i\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_1x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Generalizing the fitting procedure as a linear algebra problem\n",
|
||
"We redefine in turn the matrix $\\hat{X}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{X}=\n",
|
||
"\\begin{bmatrix} \n",
|
||
"x_{00}& x_{01} &x_{02}& \\dots & \\dots &x_{0,n-1}\\\\\n",
|
||
"x_{10}& x_{11} &x_{12}& \\dots & \\dots &x_{1,n-1}\\\\\n",
|
||
"x_{20}& x_{21} &x_{22}& \\dots & \\dots &x_{2,n-1}\\\\ \n",
|
||
"\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n",
|
||
"x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \\dots & \\dots &x_{n-1,n-1}\\\\\n",
|
||
"\\end{bmatrix}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and without loss of generality we rewrite again our equations as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{y} = \\hat{X}\\hat{\\beta}+\\hat{\\epsilon}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The left-hand side of this equation forms know. Our error vector $\\hat{\\epsilon}$ and the parameter vector $\\hat{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values?\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Optimizing our parameters\n",
|
||
"We have defined the matrix $\\hat{X}$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n",
|
||
"y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n",
|
||
"y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_1\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_1\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_1x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Optimizing our parameters, more details\n",
|
||
"We well use this matrix to define the approximation $\\hat{\\tilde{y}}$ via the unknown quantity $\\hat{\\beta}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\tilde{y}}= \\hat{X}\\hat{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parametrized values $\\tilde{y}_i$, namely"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"Q(\\hat{\\beta})=\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\left(\\hat{y}-\\hat{\\tilde{y}}\\right)^T\\left(\\hat{y}-\\hat{\\tilde{y}}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"or using the matrix $\\hat{X}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"Q(\\hat{\\beta})=\\left(\\hat{y}-\\hat{X}\\hat{\\beta}\\right)^T\\left(\\hat{y}-\\hat{X}\\hat{\\beta}\\right).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Interpretations and optimizing our parameters\n",
|
||
"The function"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"Q(\\hat{\\beta})=\\left(\\hat{y}-\\hat{X}\\hat{\\beta}\\right)^T\\left(\\hat{y}-\\hat{X}\\hat{\\beta}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"can be linked to the variance of the quantity $y_i$ if we interpret the latter as the mean value of for example a numerical experiment. When linking below with the maximum likelihood approach below, we will indeed interpret $y_i$ as a mean value"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y_{i}=\\langle y_i \\rangle = \\beta_0x_{i,0}+\\beta_1x_{i,1}+\\beta_2x_{i,2}+\\dots+\\beta_{n-1}x_{i,n-1}+\\epsilon_i,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\langle y_i \\rangle$ is the mean value. Keep in mind also that till now we have treated $y_i$ as the exact value. Normally, the response (dependent or outcome) variable $y_i$ the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat $y_i$ as our exact value for the response variable.\n",
|
||
"\n",
|
||
"In order to find the parameters $\\beta_i$ we will then minimize the spread of $Q(\\hat{\\beta})$ by requiring"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial Q(\\hat{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\sum_{i=0}^{n-1}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)^2\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"which results in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial Q(\\hat{\\beta})}{\\partial \\beta_j} = -2\\left[ \\sum_{i=0}^{n-1}x_{ij}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"or in a matrix-vector form as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial Q(\\hat{\\beta})}{\\partial \\hat{\\beta}} = 0 = \\hat{X}^T\\left( \\hat{y}-\\hat{X}\\hat{\\beta}\\right).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Interpretations and optimizing our parameters\n",
|
||
"We can rewrite"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial Q(\\hat{\\beta})}{\\partial \\hat{\\beta}} = 0 = \\hat{X}^T\\left( \\hat{y}-\\hat{X}\\hat{\\beta}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{X}^T\\hat{y} = \\hat{X}^T\\hat{X}\\hat{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and if the matrix $\\hat{X}^T\\hat{X}$ is invertible we have the solution"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\beta} =\\left(\\hat{X}^T\\hat{X}\\right)^{-1}\\hat{X}^T\\hat{y}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Interpretations and optimizing our parameters\n",
|
||
"The residuals $\\hat{\\epsilon}$ are in turn given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\epsilon} = \\hat{y}-\\hat{\\tilde{y}} = \\hat{y}-\\hat{X}\\hat{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and with"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{X}^T\\left( \\hat{y}-\\hat{X}\\hat{\\beta}\\right)= 0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{X}^T\\hat{\\epsilon}=\\hat{X}^T\\left( \\hat{y}-\\hat{X}\\hat{\\beta}\\right)= 0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"meaning that the solution for $\\hat{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## The $\\chi^2$ function\n",
|
||
"\n",
|
||
"Normally, the response (dependent or outcome) variable $y_i$ the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat $y_i$ as our exact value for the response variable.\n",
|
||
"\n",
|
||
"Introducing the standard deviation $\\sigma_i$ for each measurement $y_i$, we define now the $\\chi^2$ function as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\chi^2(\\hat{\\beta})=\\sum_{i=0}^{n-1}\\frac{\\left(y_i-\\tilde{y}_i\\right)^2}{\\sigma_i^2}=\\left(\\hat{y}-\\hat{\\tilde{y}}\\right)^T\\frac{1}{\\hat{\\Sigma^2}}\\left(\\hat{y}-\\hat{\\tilde{y}}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where the matrix $\\hat{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## The $\\chi^2$ function\n",
|
||
"\n",
|
||
"In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\hat{\\beta})$ by requiring"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\hat{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)^2\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"which results in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\hat{\\beta})}{\\partial \\beta_j} = -2\\left[ \\sum_{i=0}^{n-1}\\frac{x_{ij}}{\\sigma_i}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"or in a matrix-vector form as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\hat{\\beta})}{\\partial \\hat{\\beta}} = 0 = \\hat{A}^T\\left( \\hat{b}-\\hat{A}\\hat{\\beta}\\right).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where we have defined the matrix $\\hat{A} =\\hat{X}/\\hat{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\hat{b}$ with elements $b_i = y_i/\\sigma_i$.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## The $\\chi^2$ function\n",
|
||
"\n",
|
||
"We can rewrite"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\hat{\\beta})}{\\partial \\hat{\\beta}} = 0 = \\hat{A}^T\\left( \\hat{b}-\\hat{A}\\hat{\\beta}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{A}^T\\hat{b} = \\hat{A}^T\\hat{A}\\hat{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and if the matrix $\\hat{A}^T\\hat{A}$ is invertible we have the solution"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\beta} =\\left(\\hat{A}^T\\hat{A}\\right)^{-1}\\hat{A}^T\\hat{b}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The $\\chi^2$ function\n",
|
||
"\n",
|
||
"If we then introduce the matrix"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{H} = \\left(\\hat{A}^T\\hat{A}\\right)^{-1},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\hat{H}$ are $h_{ij}$)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_j = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}\\frac{y_i}{\\sigma_i}\\frac{x_{ik}}{\\sigma_i} = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}b_ia_{ik}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sigma^2(\\beta_j) = \\sum_{i=0}^{n-1}\\sigma_i^2\\left( \\frac{\\partial \\beta_j}{\\partial y_i}\\right)^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"resulting in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sigma^2(\\beta_j) = \\left(\\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}a_{ik}\\right)\\left(\\sum_{l=0}^{p-1}h_{jl}\\sum_{m=0}^{n-1}a_{ml}\\right) = h_{jj}!\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The $\\chi^2$ function\n",
|
||
"The first step here is to approximate the function $y$ with a first-order polynomial, that is we write"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\hat{\\beta})}{\\partial \\beta_0} = -2\\left[ \\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\hat{\\beta})}{\\partial \\beta_0} = -2\\left[ \\sum_{i=0}^{n-1}x_i\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The $\\chi^2$ function\n",
|
||
"\n",
|
||
"For a linear fit we don't need to invert a matrix!! \n",
|
||
"Defining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"4\n",
|
||
"0\n",
|
||
" \n",
|
||
"<\n",
|
||
"<\n",
|
||
"<\n",
|
||
"!\n",
|
||
"!\n",
|
||
"M\n",
|
||
"A\n",
|
||
"T\n",
|
||
"H\n",
|
||
"_\n",
|
||
"B\n",
|
||
"L\n",
|
||
"O\n",
|
||
"C\n",
|
||
"K"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"4\n",
|
||
"1\n",
|
||
" \n",
|
||
"<\n",
|
||
"<\n",
|
||
"<\n",
|
||
"!\n",
|
||
"!\n",
|
||
"M\n",
|
||
"A\n",
|
||
"T\n",
|
||
"H\n",
|
||
"_\n",
|
||
"B\n",
|
||
"L\n",
|
||
"O\n",
|
||
"C\n",
|
||
"K"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"4\n",
|
||
"2\n",
|
||
" \n",
|
||
"<\n",
|
||
"<\n",
|
||
"<\n",
|
||
"!\n",
|
||
"!\n",
|
||
"M\n",
|
||
"A\n",
|
||
"T\n",
|
||
"H\n",
|
||
"_\n",
|
||
"B\n",
|
||
"L\n",
|
||
"O\n",
|
||
"C\n",
|
||
"K"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we obtain"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"4\n",
|
||
"4\n",
|
||
" \n",
|
||
"<\n",
|
||
"<\n",
|
||
"<\n",
|
||
"!\n",
|
||
"!\n",
|
||
"M\n",
|
||
"A\n",
|
||
"T\n",
|
||
"H\n",
|
||
"_\n",
|
||
"B\n",
|
||
"L\n",
|
||
"O\n",
|
||
"C\n",
|
||
"K"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"This approach (different linear and non-linear regression) suffers often from both being underdetermined and overdetermined in the unknown coefficients $\\beta_i$. A better approach is to use the Singular Value Decomposition (SVD) method discussed below. Or using Lasso and Ridge regression. See below.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Simple regression model\n",
|
||
"We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the $x$-axis. These numbers define then the value of a function $y(x)=4+3x+N(0,1)$. Thereafter we order the $x$ values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function $c\\_$ arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"print(np.c_[np.array([1,2,3]), np.array([4,5,6])])\n",
|
||
"print(np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"%matplotlib inline\n",
|
||
"\n",
|
||
"# Importing various packages\n",
|
||
"from random import random, seed\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"x = 2*np.random.rand(100,1)\n",
|
||
"y = 4+3*x+np.random.randn(100,1)\n",
|
||
"\n",
|
||
"xb = np.c_[np.ones((100,1)), x]\n",
|
||
"beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n",
|
||
"xnew = np.array([[0],[2]])\n",
|
||
"xbnew = np.c_[np.ones((2,1)), xnew]\n",
|
||
"ypredict = xbnew.dot(beta)\n",
|
||
"\n",
|
||
"plt.plot(xnew, ypredict, \"r-\")\n",
|
||
"plt.plot(x, y ,'ro')\n",
|
||
"plt.axis([0,2.0,0, 15.0])\n",
|
||
"plt.xlabel(r'$x$')\n",
|
||
"plt.ylabel(r'$y$')\n",
|
||
"plt.title(r'Linear Regression')\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We see that, as expected, a linear fit gives a seemingly (from the graph) good representation of the data.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Simple regression model, now using **scikit-learn**\n",
|
||
"\n",
|
||
"\n",
|
||
"We can repeat the above algorithm using **scikit-learn** as follows"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Importing various packages\n",
|
||
"from random import random, seed\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"\n",
|
||
"x = 2*np.random.rand(100,1)\n",
|
||
"y = 4+3*x+np.random.randn(100,1)\n",
|
||
"linreg = LinearRegression()\n",
|
||
"linreg.fit(x,y)\n",
|
||
"xnew = np.array([[0],[2]])\n",
|
||
"ypredict = linreg.predict(xnew)\n",
|
||
"\n",
|
||
"plt.plot(xnew, ypredict, \"r-\")\n",
|
||
"plt.plot(x, y ,'ro')\n",
|
||
"plt.axis([0,2.0,0, 15.0])\n",
|
||
"plt.xlabel(r'$x$')\n",
|
||
"plt.ylabel(r'$y$')\n",
|
||
"plt.title(r'Random numbers ')\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Simple linear regression model using **scikit-learn**\n",
|
||
"\n",
|
||
"We start with perhaps our simplest possible example, using **scikit-learn** to perform linear regression analysis on a data set produced by us. \n",
|
||
"What follows is a simple Python code where we have defined function $y$ in terms of the variable $x$. Both are defined as vectors of dimension $1\\times 100$. The entries to the vector $\\hat{x}$ are given by random numbers generated with a uniform distribution with entries $x_i \\in [0,1]$ (more about probability distribution functions later). These values are then used to define a function $y(x)$ (tabulated again as a vector) with a linear dependence on $x$ plus a random noise added via the normal distribution.\n",
|
||
"\n",
|
||
"\n",
|
||
"The Numpy functions are imported used the **import numpy as np**\n",
|
||
"statement and the random number generator for the uniform distribution\n",
|
||
"is called using the function **np.random.rand()**, where we specificy\n",
|
||
"that we want $100$ random variables. Using Numpy we define\n",
|
||
"automatically an array with the specified number of elements, $100$ in\n",
|
||
"our case. With the Numpy function **randn()** we can compute random\n",
|
||
"numbers with the normal distribution (mean value $\\mu$ equal to zero and\n",
|
||
"variance $\\sigma^2$ set to one) and produce the values of $y$ assuming a linear\n",
|
||
"dependence as function of $x$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y = 2x+N(0,1),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $N(0,1)$ represents random numbers generated by the normal\n",
|
||
"distribution. From **scikit-learn** we import then the\n",
|
||
"**LinearRegression** functionality and make a prediction $\\tilde{y} =\n",
|
||
"\\alpha + \\beta x$ using the function **fit(x,y)**. We call the set of\n",
|
||
"data $(\\hat{x},\\hat{y})$ for our training data. The Python package\n",
|
||
"**scikit-learn** has also a functionality which extracts the above\n",
|
||
"fitting parameters $\\alpha$ and $\\beta$ (see below). Later we will\n",
|
||
"distinguish between training data and test data.\n",
|
||
"\n",
|
||
"For plotting we use the Python package\n",
|
||
"[matplotlib](https://matplotlib.org/) which produces publication\n",
|
||
"quality figures. Feel free to explore the extensive\n",
|
||
"[gallery](https://matplotlib.org/gallery/index.html) of examples. In\n",
|
||
"this example we plot our original values of $x$ and $y$ as well as the\n",
|
||
"prediction **ypredict** ($\\tilde{y}$), which attempts at fitting our\n",
|
||
"data with a straight line.\n",
|
||
"\n",
|
||
"The Python code follows here."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
<<<<<<< HEAD
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/base.py:509: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n",
|
||
" linalg.lstsq(X, y)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
=======
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
>>>>>>> 02d6db36970b6d35b1c77d75c50f73d7bcefe80c
|
||
"source": [
|
||
"# Importing various packages\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"\n",
|
||
"x = np.random.rand(100,1)\n",
|
||
"y = 2*x+np.random.randn(100,1)\n",
|
||
"linreg = LinearRegression()\n",
|
||
"linreg.fit(x,y)\n",
|
||
"xnew = np.array([[0],[1]])\n",
|
||
"ypredict = linreg.predict(xnew)\n",
|
||
"\n",
|
||
"plt.plot(xnew, ypredict, \"r-\")\n",
|
||
"plt.plot(x, y ,'ro')\n",
|
||
"plt.axis([0,1.0,0, 5.0])\n",
|
||
"plt.xlabel(r'$x$')\n",
|
||
"plt.ylabel(r'$y$')\n",
|
||
"plt.title(r'Simple Linear Regression')\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Simple linear regression model\n",
|
||
"\n",
|
||
"This example serves several aims. It allows us to demonstrate several\n",
|
||
"aspects of data analysis and later machine learning algorithms. The\n",
|
||
"immediate visualization shows that our linear fit is not\n",
|
||
"impressive. It goes through the data points, but there are many\n",
|
||
"outliers which are not reproduced by our linear regression. We could\n",
|
||
"now play around with this small program and change for example the\n",
|
||
"factor in front of $x$ and the normal distribution. Try to change the\n",
|
||
"function $y$ to"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y = 10x+0.01 \\times N(0,1),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $x$ is defined as before. \n",
|
||
"\n",
|
||
"\n",
|
||
"## Less noise\n",
|
||
"\n",
|
||
"Does the fit look better? Indeed, by\n",
|
||
"reducing the role of the normal distribution we see immediately that\n",
|
||
"our linear prediction seemingly reproduces better the training\n",
|
||
"set. However, this testing 'by the eye' is obviouly not satisfactory in the\n",
|
||
"long run. Here we have only defined the training data and our model, and \n",
|
||
"have not discussed a more rigorous approach to the **cost** function.\n",
|
||
"\n",
|
||
"\n",
|
||
"## How to study our fits\n",
|
||
"\n",
|
||
"We need more rigorous criteria in defining whether we have succeeded or\n",
|
||
"not in modeling our training data. You will be surprised to see that\n",
|
||
"many scientists seldomly venture beyond this 'by the eye' approach. A\n",
|
||
"standard approach for the *cost* function is the so-called $\\chi^2$\n",
|
||
"function"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\chi^2 = \\frac{1}{n}\n",
|
||
"\\sum_{i=0}^{n-1}\\frac{(y_i-\\tilde{y}_i)^2}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\sigma_i^2$ is the variance (to be defined later) of the entry\n",
|
||
"$y_i$. We may not know the explicit value of $\\sigma_i^2$, it serves\n",
|
||
"however the aim of scaling the equations and make the cost function\n",
|
||
"dimensionless. \n",
|
||
"\n",
|
||
"\n",
|
||
"## Minimizing the cost function\n",
|
||
"\n",
|
||
"Minimizing the cost function is a central aspect of\n",
|
||
"our discussions to come. Finding its minima as function of the model\n",
|
||
"parameters ($\\alpha$ and $\\beta$ in our case) will be a recurring\n",
|
||
"theme in these series of lectures. Essentially all machine learning\n",
|
||
"algorithms we will discuss center around the minimization of the\n",
|
||
"chosen cost function. This depends in turn on our specific\n",
|
||
"model for describing the data, a typical situation in supervised\n",
|
||
"learning. Automatizing the search for the minima of the cost function is a\n",
|
||
"central ingredient in all algorithms. Typical methods which are\n",
|
||
"employed are various variants of **gradient** methods. These will be\n",
|
||
"discussed in more detail later. Again, you'll be surprised to hear that\n",
|
||
"many practitioners minimize the above function ''by the eye', popularly dubbed as \n",
|
||
"'chi by the eye'. That is, change a parameter and see (visually and numerically) that \n",
|
||
"the $\\chi^2$ function becomes smaller. \n",
|
||
"\n",
|
||
"## Relative error\n",
|
||
"\n",
|
||
"There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define \n",
|
||
"the relative error as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\hat{y} -\\hat{\\tilde{y}}\\vert}{\\vert \\hat{y}\\vert}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We can modify easily the above Python code and plot the relative error instead"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
<<<<<<< HEAD
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
=======
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
>>>>>>> 02d6db36970b6d35b1c77d75c50f73d7bcefe80c
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"\n",
|
||
"x = np.random.rand(100,1)\n",
|
||
"y = 5*x+0.01*np.random.randn(100,1)\n",
|
||
"linreg = LinearRegression()\n",
|
||
"linreg.fit(x,y)\n",
|
||
"ypredict = linreg.predict(x)\n",
|
||
"\n",
|
||
"plt.plot(x, np.abs(ypredict-y)/abs(y), \"ro\")\n",
|
||
"plt.axis([0,1.0,0.0, 0.5])\n",
|
||
"plt.xlabel(r'$x$')\n",
|
||
"plt.ylabel(r'$\\epsilon_{\\mathrm{relative}}$')\n",
|
||
"plt.title(r'Relative error')\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Depending on the parameter in front of the normal distribution, we may\n",
|
||
"have a small or larger relative error. Try to play around with\n",
|
||
"different training data sets and study (graphically) the value of the\n",
|
||
"relative error.\n",
|
||
"\n",
|
||
"\n",
|
||
"## The richness of **scikit-learn**\n",
|
||
"\n",
|
||
"As mentioned above, **scikit-learn** has an impressive functionality.\n",
|
||
"We can for example extract the values of $\\alpha$ and $\\beta$ and\n",
|
||
"their error estimates, or the variance and standard deviation and many\n",
|
||
"other properties from the statistical data analysis. \n",
|
||
"\n",
|
||
"Here we show an\n",
|
||
"example of the functionality of scikit-learn."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
<<<<<<< HEAD
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"The intercept alpha: \n",
|
||
" [1.99626028]\n",
|
||
"Coefficient beta : \n",
|
||
" [[5.00659132]]\n",
|
||
"Mean squared error: 0.00\n",
|
||
"Variance score: 1.00\n",
|
||
"Mean squared log error: 0.00\n",
|
||
"Mean absolute error: 0.01\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHKpJREFUeJzt3Xu0nXV95/HPx5MLnoSC3QmWW05srVhHUPQM4nJsFcYOYx1sZ1wsXEmAYAkklRUtM9Wu8wdMp8xM21WnaTshBkmKZFe5jE5Ta3W06LC0QntQtFxkuEwSbkouBMNFAjnf+eN59px99tmXZ5+c59mX5/1a66yz935uv/MQnu/+/q6OCAEAyutVvS4AAKC3CAQAUHIEAgAoOQIBAJQcgQAASo5AAAAlRyDAvLH9btsP9rocw8D2CtvP2R7J4dzvsv1Qev5ft/23ti+e7+tgcJhxBOiW7V2SfjMivt7rsrRi+xpJE5JekvSKpPslXRUR3+llufqB7b+TtDMiNjXZdomS/7b/ovCCoWfICDDwbC9osenmiFgqaZmkb0i6teDr96sxSff1uhDoHwQCzBvb77H9eN37Xbb/ve0f2H7W9s22j6nb/gHb99g+aPvvbZ9Rt+2Tth+xfcj2/bZ/o27bJba/bfu/2d4v6Zp25YqIVyRVJZ1se3nG67/N9vfS69+alv336/9O25+w/SNJ2zOc7xO2n0jP96Dtc9PPz7I9afsntn9s+1Pp5yttRy3I2D7J9k7bB2w/bPuyunNfY/sW259Nz3+f7fEW/40ekfTzkv46rRpabPubtn/T9i9J2iLpnem2g+3uK4YHgQB5u0DSeZJeJ+kMSZdIku0zJW2TdLmkiqRPS9ppe3F63COS3i3pOEn/UdIO2yfWnfcdkh6V9FpJ17YrgO1Fki6StF/SM52un+7/RUl/IelnJX1O0m80nPbn0m1jktZ1ON9pkj4q6Z9HxLGS/pWkXel5NknaFBE/I+kXJN3S4s/4vKTHJZ0k6UOS/rPtc+q2n5/uc7yknZL+vNlJIuIXJO2R9G8iYmlEvFS37QFJV0j6Trrt+BZlwZAhECBvfxoRT0bEAUl/Lemt6efrJH06Iu6KiCMRcaOS+vyzJSkibk2Pm4qImyU9JOmsuvM+GRF/FhGvRMSLLa59Qfqt9kVJl0n6UJoddLr+2ZIWpGV/OSK+IOkfGs49JenqiHgpvX678x2RtFjSm2wvjIhdEfFIep6XJb3e9rKIeC4i7mz8I2yfKuldkj4RET+NiHskfUZJcKv5VkR8OSKOSLpJ0lta3BNgFgIB8vajutcvSFqavh6TdFVajXIwfWCfquQbr2xfVFfNclDSm5XU9dc8luHat6Tfal8r6V5Jb6/b1u76J0l6Imb2pGi83t6I+GmW80XEw5I+pqQK62nbn7d9UnrcRyS9QdIPbf+j7Q80+TtOknQgIg7VfbZb0sl17xvv8zED2HaBHiEQoFcek3RtRBxf9zMaEZ+zPSbpeiXVKZX0YX6vJNcdn7m7W0TsU/KN/Zq66qWW15f0lJL2hPrrndp42qx/T1qGv0x74oylx/5B+vlDEfFhSSekn91me0nDuZ+U9LO2j637bIWkJ7Legy7QjbCECASYq4W2j6n76fbb5/WSrrD9DieW2P619GG3RMkDaa8k2V6rJCOYs4h4UNJXJf1Ohut/R0l1zkdtL7D9Qc2slurq77F9mu1z0vaPnyqpqppK/7bVtpdHxJSkWuPsVEPZH5P095L+S3qvz1CSSew4mnvSwo8lnZK2k6AkCASYqy8reaDVfq7p5uCImFRSb//nShpwH1bakBwR90v6YyUP5B9LOl3St+ehzH+kpGH3hA7XPyzp3yp52B6UtFrSl5TU+Xf99yhpH/ivkvYpqcI5QdLvptvOk3Sf7eeUNBxf2KLN48OSVirJDr6opH0ij3EctyvpWvoj2/tyOD/6EAPKgAxs3yVpS0Rs73VZgPlGRgA0YftXbP9cWjV0sZKur1/pdbmAPOQeCNL60Xvqfn5i+2N5Xxc4SqdJ+r6SqqGrlHQ9faq3RQLyUWjVkJMJtJ6Q9I6I2F3YhQEALRVdNXSupEcIAgDQP4oecHKhkuH6s9hep6Svt5YsWfL2N77xjUWWCwD634ED0p490pEjszbtkrQvwrM2ZFBY1VDaL/lJSf8sIn7cbt/x8fGYnJwspFwAMBCqVWndOumFF5puHpc0OcdAUGTV0L+W9N1OQQAA0MTERMsgcLSKDAQfVotqIQBAnWpVWrlSetWrkt/VqrQ7v6bVQtoI0rlT3qdkil4AQCuNVUC7d0urV3c87EiyEt+cFJIRRMTzEVGJiGeLuB4ADKRqVVqzprsqoEpF2rFD9yTjXuaEkcUA0A82bEi++bfrwFOpSGNjkp383rFD2rdPWrXqqC7NfOUA0GvVqrRlS+f9DhxIHvzzjIwAAHqhvkH44ovbZwI1K1bkUhQyAgAo2oYNSQZQe/g3GSA2y+iodG3b5bnnjIwAAIpUqwbqZjDv0qXS1q1H3RbQCoEAAPI2l2qgmvXrpUOHcgsCEoEAAPJTrUrLliW9gXbvTgJAu2qgkZGZPYIipM2bcy8mbQQAkIfGdoBObOnGG3P95t8KGQEAzLdu2wFs6YorehIEJAIBAMy/iYnOQaC+GuimmwqpAmqFQAAAc9Vscji78wRxo6NJNdDUlLRrV88ygRraCABgLqpVae1a6eWXk/cZJ4dTpSJt2tTzh389MgIAmIuNG6eDQDOjozPf20lX0HmYG2i+EQgAYC7272+9LSIZAFY/QVyP2wHaIRAAQDu1sQB28rNsmXR5hqVVVq1K6v/7pB2gHdoIAKCValW69FLp8OHpz/bvT77tt1Kp5F+ueUZGAACNar2BVq+eGQQaLVo0+/2mTbkWLQ8EAgCoV+sN1KkLqC1t2zazHWDbtr6uAmrF0c3kRwUZHx+PycnJXhcDQBktW9a+IbhmbCyp++8Ttu+OiPG5HEtGAAD1sgSBhQtzWxugFwgEAFBjd96nUpG2bx/IKqBW6DUEAIcPS4sXt9+nUsllveB+QEYAoHzq5wiyZweBIekNlBWBAEC5VKvSunXTC8XU+8M/TD4bkt5AWdFrCEC5nHSS9NRTsz/vs15A3TqaXkO0EQAoj3aNwXv2FFeOPkMgADD8svQGWrEi/3L0KdoIAAyvzZubB4HGKaJHR4dqXEC3CAQAhpMt/dZvzfwsovkU0Vu3DnVjcCdUDQEYLs0ygEOHpKVLp9+vWlXqB38jMgIAg6t+PMDixc2DQMTMIIBZCgkEto+3fZvtH9p+wPY7i7gugCHWOB6gcbroWjUQOioqI9gk6SsR8UZJb5H0QEHXBTCsJiakF16Y/fnYGAGgS7kHAtvHSfplSTdIUkQcjoiDeV8XwJBpnBai1XoBJR4PMFdFZASvk7RX0nbb37P9GdtLGneyvc72pO3JvXv3FlAsAAOj3bQQjUo8HmCuiggECyS9TdJ1EXGmpOclfbJxp4jYGhHjETG+fPnyAooFYGC0qgZqbBwu+XiAuSoiEDwu6fGIuCt9f5uSwAAAnbWrBopgPMA8yH0cQUT8yPZjtk+LiAclnSvp/ryvC2DAPfKI9PrXt99nwCeK6xdFDSi7UlLV9iJJj0paW9B1AQyiVtNC1FcPUQ00bwrpPhoR96T1/2dExK9HxDNFXBfAgLFnB4Hbb2daiJwxxQSA3vvMZ6TLLpv9eX0PIaaFyA2BAEBvtZoWAoVhriEAxWkcFNYYBJ55hiDQA2QEAPJVrUobN0r797ffjwDQM2QEAPJTrUpr17YPAswN1HMEAgD5mZiQXn65/T7MDdRzBAIA+Wk1IrgecwP1HIEAwPybmsq2YDyDwvoCgQDA/LKlkZHO+1UqDArrEwQCAPOjWXfQCy+UduxIHvo1lUry2b59BIE+QfdRAEdnz56k50+jxlHB6FsEAgBzx6jgoUDVEIDOqlVp2bLp6p9m1UB/9VcEgQFFRgCgvdqgsHbjAQgAA42MAEB77QaFMSp4KBAIAEyrnxRu5crkfbtBYYwKHgpUDQFIVKvSunXTq4Dt3i2tXt3+GEYFDwUyAgCJiYmZS0F2smgRo4KHBIEAKLP63kCtqoDs5oPCtm1jfMCQoGoIKKssvYGkpPqHZSKHGhkBUFZZpohmUrhSIBAAZdVpiuixMSaFKwmqhoCyyTI99NiYtGtX7kVBfyAjAIZVbUyALS1Y0HxaiGboDVQ6BAJgGNXGBNSqf44cmb1PBL2BIImqIWD4VKvSxRc3f/jX1KaNpjcQREYADJdaJtAuCEhMDYEZCATAIGucG2jjxmyjg5kaAnWoGgIGVbO5gbJgbAAakBEAg6rbuYEkxgagqUIyAtu7JB2SdETSKxExXsR1gaGWtZ5/dJSHP9oqMiN4b0S8lSAAHKVqNRkP0GpBmEol+eZvkwEgE9oIgEHSaUDY6Ki0aRMPfnSlqIwgJP0v23fbXtdsB9vrbE/anty7d29BxQL6WH2PoNo3/Hb49o85chSw3qjtkyPiCdsnSPqapCsj4o5W+4+Pj8fk5GTu5QL6VmOPoE5saWoq3zKhr9m+e65V74VkBBHxRPr7aUlflHRWEdcFBlJtZHA3PYIYF4CjkHsgsL3E9rG115J+VdK9eV8XGEjVqnTZZe1HBo+Ozn7PuAAchSIygtdK+pbt70v6B0l/ExFfKeC6QH9rHBVcrSaLxb/4Yutjau0A9ArCPCqkjaBbtBFg6FWr0qWXSocPZz+G8QBoo+/bCAA02LixuyAwMkIQQG4IBECRatVB+/e33qdZG8CNNxIEkBsCAZC3alVatiyp01+9uvPkcLQBoGCMLAbyVK1Ka9a0ng6iUaXCYjEoHBkBkKfLL88eBBYuTKaHAApGIADy9Pzz2fYbG5O2bycTQE8QCID5UN8OUP/TyehosoD8rl0EAfQMbQTA0apWpbVrpZdf7u64SoWZQtEXCATAXFWrySph7XoBLVnSvHro3HOlr389v7IBXaBqCOhWrRooS1fQF16Q1q9PBoRJye/16wkC6CtkBEA3NmyQtmzJ3hNoxQpp8+bkB+hTZARAVtVqd0Fg0SJmBcVAIBAAWU1MdDcwbNs2GoIxEKgaArK49dbO7QHMDooBRUYANGpcJ8CWLrig/TGVCkEAA4uMAKjXuFZwYxaweLH00kvT723piitoDMZAIyMAajqtFRwh3XDDzJlBb7qJIICBR0aAcqsfFGa3bgyuTRfBzKAYQgQClFO1mswMWj/qt12PoBUr8i8T0CNUDaF8NmxIRgVnnRl0dJTxABhqBAKUR21qiOuuy34MawWjBAgEGG6Ny0S2Wyu4EWsFoyQIBBhe1ap06aXdPfxrWCsYJdIxENj+mu23FFEY4KjVDwa76CLp8OHujh8ZYaEYlE6WjOATkv7E9nbbJ+ZdIGDOahnA7t1JD6Cpqe6Or1SoCkIpdQwEEfHdiHivpC9J+ortq22/Ov+iAV3auLH7DKBSSTKACGnfPoIASilTG4FtS3pQ0nWSrpT0kO01eRYMyKS+KqibtoBaAODhD3QeUGb725JeJ+k+SXdKukTSDyVttP3uiFiXawmBVhrnBcrCTqaF4OEP/H9ZRhavk3R/xKxhl1fafiCHMgHZTEx0FwSYJhpoKksbwX1NgkDNr81zeYDsOq0PUI/uoEBLRzXXUEQ8Ol8FAbpSmwSumZGRpMfQihXJ1BA8/IG2Cpt0zvaIpElJT0TEB4q6LoZMuwAgUf0DzEGRI4s3SqJNAXNjNw8CO3bMXB+AIAB0rZCMwPYpStoTrpX020VcE0OkWQCob7biwQ8claIygj+R9DuSWg71tL3O9qTtyb179xZULPSNxnWCq9XmWUBE+3UDAHQt90Bg+wOSno6Iu9vtFxFbI2I8IsaXL1+ed7HQT2rjAWpTQ+zencwU2ogAAOSiiIzgXZLOt71L0uclnWN7RwHXxaDoNB6ALADIVe6BICJ+NyJOiYiVki6UdHtENPm6h9Las6f55+3WEAYwb1iPAMWrbw9o97BnnWCgEIUuXh8R35T0zSKviT6TdX4g1gkGCkNGgGK1ag+oVBgPAPRIoRkBSq7dqOADB5IpoQEUjowA+bv66s5TQ9AeAPQMGQHmV7WarBTWbpGY0dGZ1UO0BwA9RUaA+bNhQzIQrFUQOHgw6SG0dSvtAUAfISPA/KhWpS1bWm8fG5OOOy55vWoVD36gj5ARYH5MTLQf/NVq0BiAniMQYG4aB4V1Wi2MxmCgb1E1hO5kaQxutGgRjcFAHyMjQDbVqrRsWfvG4GZdRJculbZto00A6GMEAnRWmxaiUxYQMbM30I4d0qFDBAGgz1E1hM46TRNdMzYm7dqVe3EAzC8yArT30EOdG4IlBoUBA4yMAK11mhaiplKRNm2iCggYUGQEZZd1reDFi2cfW6kk7QD79hEEgAFGICizalVauzbbWsE33DC7IZgAAAwFqobKqlqV1qxpPxq4fhvTQgBDi4ygbOrHA2QNAgCGGhlBmWRdJhJAqZARlEnW8QCVSv5lAdA3CARlkmU8wKJFSVdQAKVBICiDZt1Bm6lUmBcIKCECwTCbmsoeAOgOCpQWgWAY1HoC1b75116PjMzcLyJ54DMeAEAdAsGgq1alSy+dOTNo4yyhl1wy3R101apkYripqeQ3AQAoPbqPDrrLL5cOH269nfEAADogIxhkGzZIzz/fenvWSeMAlBqBYJA0ThB33XXt92edYAAZUDU0KBpHBXcaE7BwIesDAMiEjKDf1c8N1M3UENu30xAMIJPcMwLbx0i6Q9Li9Hq3RcTVeV93KGzY0Ln6p5n16wkCADIrIiN4SdI5EfEWSW+VdJ7tswu47mCqtQPY2YLA0qXT4wVGRpIgsHlzrkUEMFxyzwgiIiQ9l75dmP7Qp7GZbmcHHR2Vtmzh2z+Ao1JIG4HtEdv3SHpa0tci4q4m+6yzPWl7cu/evUUUq/9knR1USr79b91KEABw1AoJBBFxJCLeKukUSWfZfnOTfbZGxHhEjC9fvryIYvVefTXQggXZZgeVkhlCb7yRIABgXhTaaygiDkr6hqTzirxuX6pVA9Ue/keOZDtu6VJmCAUwr3IPBLaX2z4+ff1qSe+T9MO8r9u3allA1u6gtdHBtQniDh0iCACYV0UMKDtR0o22R5QEnlsi4ksFXLf/dNsYPDaWDArjwQ8gR0X0GvqBpDPzvs5A6KYxeGwsmR0UAHLGyOIiZW0MHh1leggAhSEQFCHLUpG1QWFjY3QLBVAoAkGe7rmncwAYHU0agV95JVk7gMViABSMQJAXWzqzoWmk2VKRfPsH0GNMQz3fmmUABw5Ir3lN8nrVKh78APoKGcF8uf765kEgYjoIAEAfIiOYD60CAAAMAALB0WgWAKamWCsYwEChaiir+vWCR0dnP+zf+c4kCyAIABgwZASdVKvSxo3S/v3Tn7344sx9qAYCMMDICNqpzQ1UHwTqjY0RBAAMPAJBo/oqoIsvbj830J49hRULAPJC1VC9DRuSpR9r3/I7rRGwYkX+ZQKAnJER1FSrM4NAJ0wMB2BIEAhqJiayB4FKhakhAAwNAoEkPf54+ymiR0am5wbasUPat48gAGBo0EbQqd+/zULxAIZaeTKC+t5AK1c2XyPg1a+e+d6WrriCIABgqJUjENTGA+zenbQDNFYDnXFG8vn118+cIvqmm6TNm3tTZgAoyPBXDVWryXiAVl1B6xuImSIaQAkNd0ZQywRaBQHmBQKAIQ8EH/94+5HBDAgDgCELBPUNwra0d2/rfRkQBgCShqmNoFYN1C4DqBkZYUAYAKQGOyOozwAuuqh5EGhsBxgdZVwAANQZvEBQe/jb0po1011Cp6aa7x8xs0somQAAzDBYVUON1T9Z5gYaG5N27cq1WAAwyPo/I6jPAFavztYGUEODMAB01N+BoH5EcFb1E8RRDQQAHfV31dDERPcZAA9/AOhKfwaCf/qnpCdQljYAe7pB+NprCQIA0KXcA4HtUyV9VtJrJYWkrRGxqe1Bhw9nO/nICF1BAeAoFZERvCLpqoj4ru1jJd1t+2sRcf9RnZVqIACYF7k3FkfEUxHx3fT1IUkPSDp5TicbGUl+0xAMAPOm0DYC2yslnSnpribb1klaJ0lvb9zIWAAAyE1h3UdtL5X0PyR9LCJ+0rg9IrZGxHhEjM/YwFgAAMhVIYHA9kIlQaAaEV/oeMCiRYwFAICCFNFryJJukPRARHwq00Gnny5NTuZaLgBAooiM4F2S1kg6x/Y96c/7C7guACCD3DOCiPiWJNaEBIA+1d9zDQEAckcgAICSIxAAQMkRCACg5AgEAFByBAIAKDkCAQCUHIEAAEqOQAAAJUcgAICSIxAAQMkRCACg5AgEAFByBAIAKDlHRK/LMIvtQ5Ie7HU5+sQySft6XYg+wH2Yxr2Yxr2YdlpEHDuXAwtdvL4LD85au7ikbE9yL7gP9bgX07gX02zPeVlHqoYAoOQIBABQcv0aCLb2ugB9hHuR4D5M415M415Mm/O96MvGYgBAcfo1IwAAFIRAAAAl17NAYPs82w/aftj2J5tsX2z75nT7XbZXFl/KYmS4F79t+37bP7D9d7bHelHOInS6F3X7/TvbYXtouw5muRe2L0j/bdxn+y+LLmNRMvw/ssL2N2x/L/3/5P29KGcRbG+z/bTte1tst+0/Te/VD2y/reNJI6LwH0kjkh6R9POSFkn6vqQ3NeyzQdKW9PWFkm7uRVn75F68V9Jo+np9me9Fut+xku6QdKek8V6Xu4f/Ln5R0vckvSZ9f0Kvy93De7FV0vr09Zsk7ep1uXO8H78s6W2S7m2x/f2S/laSJZ0t6a5O5+xVRnCWpIcj4tGIOCzp85I+2LDPByXdmL6+TdK5tl1gGYvS8V5ExDci4oX07Z2STim4jEXJ8u9Ckv6TpD+Q9NMiC1ewLPfiMkn/PSKekaSIeLrgMhYly70IST+Tvj5O0pMFlq9QEXGHpANtdvmgpM9G4k5Jx9s+sd05exUITpb0WN37x9PPmu4TEa9IelZSpZDSFSvLvaj3ESXRfhh1vBdpmntqRPxNkQXrgSz/Lt4g6Q22v237TtvnFVa6YmW5F9dIWm37cUlflnRlMUXrS90+U/p2igk0YXu1pHFJv9LrsvSC7VdJ+pSkS3pclH6xQEn10HuUZIl32D49Ig72tFS98WFJfxERf2z7nZJusv3miJjqdcEGQa8ygicknVr3/pT0s6b72F6gJN3bX0jpipXlXsj2v5Q0Ien8iHipoLIVrdO9OFbSmyV90/YuJfWfO4e0wTjLv4vHJe2MiJcj4v9K+j9KAsOwyXIvPiLpFkmKiO9IOkbJhHRllOmZUq9XgeAfJf2i7dfZXqSkMXhnwz47JV2cvv6QpNsjbQkZMh3vhe0zJX1aSRAY1npgqcO9iIhnI2JZRKyMiJVK2kvOj4g5T7bVx7L8P/I/lWQDsr1MSVXRo0UWsiBZ7sUeSedKku1fUhII9hZayv6xU9JFae+hsyU9GxFPtTugJ1VDEfGK7Y9K+qqSHgHbIuI+278naTIidkq6QUl697CShpELe1HWvGW8F38kaamkW9P28j0RcX7PCp2TjPeiFDLei69K+lXb90s6Iuk/RMTQZc0Z78VVkq63/XElDceXDOkXR9n+nJIvAMvSNpGrJS2UpIjYoqSN5P2SHpb0gqS1Hc85pPcKAJARI4sBoOQIBABQcgQCACg5AgEAlByBAABKjkAAACVHIACAkiMQABmkc92/L339+7b/rNdlAuYLk84B2Vwt6fdsnyDpTElDN7Ib5cXIYiAj2/9byVQf74mIQ70uDzBfqBoCMrB9uqQTJR0mCGDYEAiADtLVnapKVn56bogXgEFJEQiANmyPSvqCpKsi4gEly2Re3dtSAfOLNgIAKDkyAgAoOQIBAJQcgQAASo5AAAAlRyAAgJIjEABAyREIAKDk/h/qZMdbPaPILgAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
=======
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
>>>>>>> 02d6db36970b6d35b1c77d75c50f73d7bcefe80c
|
||
"source": [
|
||
"import numpy as np \n",
|
||
"import matplotlib.pyplot as plt \n",
|
||
"from sklearn.linear_model import LinearRegression \n",
|
||
"from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error\n",
|
||
"\n",
|
||
"x = np.random.rand(100,1)\n",
|
||
"y = 2.0+ 5*x+0.5*np.random.randn(100,1)\n",
|
||
"linreg = LinearRegression()\n",
|
||
"linreg.fit(x,y)\n",
|
||
"ypredict = linreg.predict(x)\n",
|
||
"print('The intercept alpha: \\n', linreg.intercept_)\n",
|
||
"print('Coefficient beta : \\n', linreg.coef_)\n",
|
||
"# The mean squared error \n",
|
||
"print(\"Mean squared error: %.2f\" % mean_squared_error(y, ypredict))\n",
|
||
"# Explained variance score: 1 is perfect prediction \n",
|
||
"print('Variance score: %.2f' % r2_score(y, ypredict))\n",
|
||
"# Mean squared log error \n",
|
||
"print('Mean squared log error: %.2f' % mean_squared_log_error(y, ypredict) )\n",
|
||
"# Mean absolute error \n",
|
||
"print('Mean absolute error: %.2f' % mean_absolute_error(y, ypredict))\n",
|
||
"plt.plot(x, ypredict, \"r-\")\n",
|
||
"plt.plot(x, y ,'ro')\n",
|
||
"plt.axis([0.0,1.0,1.5, 7.0])\n",
|
||
"plt.xlabel(r'$x$')\n",
|
||
"plt.ylabel(r'$y$')\n",
|
||
"plt.title(r'Linear Regression fit ')\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Functions in **scikit-learn**\n",
|
||
"\n",
|
||
"The function **coef** gives us the parameter $\\beta$ of our fit while **intercept** yields \n",
|
||
"$\\alpha$. Depending on the constant in front of the normal distribution, we get values near or far from $alpha =2$ and $\\beta =5$. Try to play around with different parameters in front of the normal distribution. The function **meansquarederror** gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"MSE(\\hat{y},\\hat{\\tilde{y}}) = \\frac{1}{n}\n",
|
||
"\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The smaller the value, the better the fit. Ideally we would like to\n",
|
||
"have an MSE equal zero. The attentive reader has probably recognized\n",
|
||
"this function as being similar to the $\\chi^2$ function defined above.\n",
|
||
"\n",
|
||
"## Other functions in **scikit-learn**\n",
|
||
"\n",
|
||
"The **r2score** function computes $R^2$, the coefficient of\n",
|
||
"determination. It provides a measure of how well future samples are\n",
|
||
"likely to be predicted by the model. Best possible score is 1.0 and it\n",
|
||
"can be negative (because the model can be arbitrarily worse). A\n",
|
||
"constant model that always predicts the expected value of $\\hat{y}$,\n",
|
||
"disregarding the input features, would get a $R^2$ score of $0.0$.\n",
|
||
"\n",
|
||
"If $\\tilde{\\hat{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"R^2(\\hat{y}, \\tilde{\\hat{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where we have defined the mean value of $\\hat{y}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The mean absolute error and other functions in **scikit-learn**\n",
|
||
"\n",
|
||
"Another quantity will meet again in our discussions of regression analysis is \n",
|
||
" mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the $l1$-norm loss. In our discussion above we presented the relative error.\n",
|
||
"The MAE is defined as follows"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\text{MAE}(\\hat{y}, \\hat{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n-1} \\left| y_i - \\tilde{y}_i \\right|.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Finally we present the \n",
|
||
"squared logarithmic (quadratic) error"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\text{MSLE}(\\hat{y}, \\hat{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n - 1} (\\log_e (1 + y_i) - \\log_e (1 + \\tilde{y}_i) )^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\log_e (x)$ stands for the natural logarithm of $x$. This error\n",
|
||
"estimate is best to use when targets having exponential growth, such\n",
|
||
"as population counts, average sales of a commodity over a span of\n",
|
||
"years etc. \n",
|
||
"\n",
|
||
"\n",
|
||
"## Cubic polynomial in **scikit-learn**\n",
|
||
"\n",
|
||
"We will discuss in more\n",
|
||
"detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n",
|
||
"a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. \n",
|
||
"Add description of the various python commands."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
<<<<<<< HEAD
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd8VFX6+PHPk0kg1BBCqAESmjRJwIiAYEWxoOi6Iq4FXf2y9rK/XdsW9Kvul1V3seCqUZRiBVcQdV3FgqAoGFwUZBFRWighCSEkpE/O7487gUmYSaa3PO/XK6/M3Lkz99wJPHPmOec+R4wxKKWUil1x4W6AUkqp4NJAr5RSMU4DvVJKxTgN9EopFeM00CulVIzTQK+UUjFOA71SSsU4DfRKKRXjNNArpVSMiw93AwC6dOli0tPTw90MpZSKKuvWrSs0xqQ2t19EBPr09HRyc3PD3QyllIoqIrLDk/00daOUUjFOA71SSsU4DfRKKRXjIiJH70pNTQ15eXlUVlaGuykxKzExkbS0NBISEsLdFKVUEDUb6EXkRWAysN8YM9xp+63AzYAdeM8Yc5dj+73AdY7ttxljPvClYXl5eXTo0IH09HRExJeXUE0wxlBUVEReXh4ZGRnhbo5SKog8Sd3MA85x3iAipwNTgExjzDDgMcf2ocA0YJjjOf8QEZsvDausrCQlJUWDfJCICCkpKfqNSakWoNlAb4xZCRxotPlGYJYxpsqxz37H9inA68aYKmPMNmArMNrXxmmQDy59f5VqGXwdjB0ETBCRNSLymYic6NjeC9jltF+eY9sxRGSGiOSKSG5BQYGPzVBKqQhSkQ/LT4FFHa3fFfnhbhHge6CPBzoDY4DfA4vEy+6hMSbHGJNtjMlOTW32wq6w2LdvH9OmTaN///6ccMIJnHfeeWzZsqXJ56Snp1NYWHjM9meffZYFCxZ4fGybzUZWVtaRn+3bt5Obm8ttt90GwIoVK1i9erV3J6SUCq7PL4XCL6G21Pr9+aXhbhHg+6ybPOAtY60svlZE6oAuwG6gt9N+aY5tUccYw8UXX8z06dN5/fXXAfj222/Jz89n0KBBXr/eDTfc4NX+bdq0Yf369Q22paenk52dDViBvn379owbN87rtiilgqR4PZha67apte5HAF979EuB0wFEZBDQCigElgHTRKS1iGQAA4G1gWhoqH366ackJCQ0CNCZmZlMmDCBFStWMHny5CPbb7nlFubNm3fk/iOPPMLxxx/P6NGj2bp1KwD3338/jz32GABbt25l4sSJZGZmMmrUKH766SeP2lR/3O3bt/Pss88ye/ZssrKyWLVqVQDOWCnlt+QsEEf/WeKt+xHAk+mVrwGnAV1EJA+YCbwIvCgiG4FqYLqjd/+9iCwCNgG1wM3GGLu/jXzgne/ZtOeQvy/TwNCeHZl5wTC3j2/cuJETTjjBp9dOSkpiw4YNLFiwgDvuuIN33323weNXXHEF99xzDxdffDGVlZXU1dUd8xoVFRVkZVn/SDIyMliyZMmRx9LT07nhhhto3749v/vd73xqo1IqCMYvttI1xeutID9+cbhbBHgQ6I0xl7t56Eo3+z8MPOxPo6Ld5ZdffuT3nXfe2eCx0tJSdu/ezcUXXwxYFy254ip1o5SKcG26wVkrw92KY0TslbHOmup5B8uwYcN48803XT4WHx/foBfeeC6687i0TmFUSoWb1rpx44wzzqCqqoqcnJwj27777jtWrVpF37592bRpE1VVVRw8eJCPP/64wXPfeOONI7/Hjh3b4LEOHTqQlpbG0qVLAaiqqqK8vNzr9nXo0IHS0lKvn6eUank00LshIixZsoSPPvqI/v37M2zYMO699166d+9O7969mTp1KsOHD2fq1KmMHDmywXOLi4sZMWIETzzxBLNnzz7mtRcuXMiTTz7JiBEjGDduHPv27fO6fRdccAFLlizRwVilVLPEGkMNr+zsbNN44ZH//ve/DBkyJEwtajn0fVYqeonIOmNMdnP7aY9eKaVinAZ6pZSKcRrolVIqxmmgV0qpGKeBXimlYpwGeqWUinEa6N0oKio6UiK4e/fu9OrV68j96urqgB7rq6++Yvz48QwePJiRI0cyY8YMKioq3O6/devWI3VwGrv22mv54YcfAto+pVR0i4oSCOGQkpJypNbM/fff77KAmDEGYwxxcb5/Xu7du5fLLruMxYsXM3r0aIwxLFq0iLKyMtq0aeP167300ks+t0UpFZu0R++lrVu3MnToUK644gqGDRvGrl276NSp05HHX3/9da6//noA8vPz+cUvfkF2djajR4/mq6++Oub1nnrqKa677jpGj7ZWXBQRLrvsMlJTU/njH//I448/fmTfwYMHk5eXB0BN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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0.004999999999999991\n"
|
||
]
|
||
}
|
||
],
|
||
=======
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
>>>>>>> 02d6db36970b6d35b1c77d75c50f73d7bcefe80c
|
||
"source": [
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import numpy as np\n",
|
||
"import random\n",
|
||
"from sklearn.linear_model import Ridge\n",
|
||
"from sklearn.preprocessing import PolynomialFeatures\n",
|
||
"from sklearn.pipeline import make_pipeline\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"\n",
|
||
"x=np.linspace(0.02,0.98,200)\n",
|
||
"noise = np.asarray(random.sample((range(200)),200))\n",
|
||
"y=x**3*noise\n",
|
||
"yn=x**3*100\n",
|
||
"poly3 = PolynomialFeatures(degree=3)\n",
|
||
"X = poly3.fit_transform(x[:,np.newaxis])\n",
|
||
"clf3 = LinearRegression()\n",
|
||
"clf3.fit(X,y)\n",
|
||
"\n",
|
||
"Xplot=poly3.fit_transform(x[:,np.newaxis])\n",
|
||
"poly3_plot=plt.plot(x, clf3.predict(Xplot), label='Cubic Fit')\n",
|
||
"plt.plot(x,yn, color='red', label=\"True Cubic\")\n",
|
||
"plt.scatter(x, y, label='Data', color='orange', s=15)\n",
|
||
"plt.legend()\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"def error(a):\n",
|
||
" for i in y:\n",
|
||
" err=(y-yn)/yn\n",
|
||
" return abs(np.sum(err))/len(err)\n",
|
||
"\n",
|
||
"print (error(y))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Using **R**, we can perform similar studies. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Polynomial Regression"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[[3.95333266]\n",
|
||
" [2.97287919]]\n",
|
||
"[[3.95333266]\n",
|
||
" [2.97287919]]\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Importing various packages\n",
|
||
"from math import exp, sqrt\n",
|
||
"from random import random, seed\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"m = 100\n",
|
||
"x = 2*np.random.rand(m,1)+4.\n",
|
||
"y = 4+3*x*x+ +x-np.random.randn(m,1)\n",
|
||
"\n",
|
||
"xb = np.c_[np.ones((m,1)), x]\n",
|
||
"theta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n",
|
||
"xnew = np.array([[0],[2]])\n",
|
||
"xbnew = np.c_[np.ones((2,1)), xnew]\n",
|
||
"ypredict = xbnew.dot(theta)\n",
|
||
"\n",
|
||
"plt.plot(xnew, ypredict, \"r-\")\n",
|
||
"plt.plot(x, y ,'ro')\n",
|
||
"plt.axis([0,2.0,0, 15.0])\n",
|
||
"plt.xlabel(r'$x$')\n",
|
||
"plt.ylabel(r'$y$')\n",
|
||
"plt.title(r'Random numbers ')\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- !split -->\n",
|
||
"## Linking the regression analysis with a statistical interpretation\n",
|
||
"\n",
|
||
"Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. \n",
|
||
"\n",
|
||
"It is assumed that $\\varepsilon_i\n",
|
||
"\\sim \\mathcal{N}(0, \\sigma^2)$ and the $\\varepsilon_{i}$ are\n",
|
||
"independent, i.e.:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*} \n",
|
||
"\\mbox{Cov}(\\varepsilon_{i_1},\n",
|
||
"\\varepsilon_{i_2}) & = \\left\\{ \\begin{array}{lcc} \\sigma^2 & \\mbox{if}\n",
|
||
"& i_1 = i_2, \\\\ 0 & \\mbox{if} & i_1 \\not= i_2. \\end{array} \\right.\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The randomness of $\\varepsilon_i$ implies that\n",
|
||
"$\\mathbf{Y}_i$ is also a random variable. In particular,\n",
|
||
"$\\mathbf{Y}_i$ is normally distributed, because $\\varepsilon_i \\sim\n",
|
||
"\\mathcal{N}(0, \\sigma^2)$ and $\\mathbf{X}_{i,\\ast} \\, \\beta$ is a\n",
|
||
"non-random scalar. To specify the parameters of the distribution of\n",
|
||
"$\\mathbf{Y}_i$ we need to calculate its first two moments. \n",
|
||
"\n",
|
||
"## Expectation value and variance\n",
|
||
"\n",
|
||
"Its expectation equals:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*} \n",
|
||
"\\mathbb{E}(Y_i) & =\n",
|
||
"\\mathbb{E}(\\mathbf{X}_{i, \\ast} \\, \\beta) + \\mathbb{E}(\\varepsilon_i)\n",
|
||
"\\, \\, \\, = \\, \\, \\, \\mathbf{X}_{i, \\ast} \\, \\beta, \n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"while\n",
|
||
"its variance is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*} \\mbox{Var}(Y_i) & = \\mathbb{E} \\{ [Y_i\n",
|
||
"- \\mathbb{E}(Y_i)]^2 \\} \\, \\, \\, = \\, \\, \\, \\mathbb{E} ( Y_i^2 ) -\n",
|
||
"[\\mathbb{E}(Y_i)]^2 \\\\ & = \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\,\n",
|
||
"\\beta + \\varepsilon_i )^2] - ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 \\\\ &\n",
|
||
"= \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 + 2 \\varepsilon_i\n",
|
||
"\\mathbf{X}_{i, \\ast} \\, \\beta + \\varepsilon_i^2 ] - ( \\mathbf{X}_{i,\n",
|
||
"\\ast} \\, \\beta)^2 \\\\ & = ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 + 2\n",
|
||
"\\mathbb{E}(\\varepsilon_i) \\mathbf{X}_{i, \\ast} \\, \\beta +\n",
|
||
"\\mathbb{E}(\\varepsilon_i^2 ) - ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 \n",
|
||
"\\\\ & = \\mathbb{E}(\\varepsilon_i^2 ) \\, \\, \\, = \\, \\, \\,\n",
|
||
"\\mbox{Var}(\\varepsilon_i) \\, \\, \\, = \\, \\, \\, \\sigma^2. \n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
<<<<<<< HEAD
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"X_train: (37, 1)\n",
|
||
"y_train: (37,)\n",
|
||
"X_test: (13, 1)\n",
|
||
"y_test: (13,)\n",
|
||
"------------------------------------\n",
|
||
"Ordinary Least Squares\n",
|
||
"Prediction Shape: (13,)\n",
|
||
"Coefficients: \n",
|
||
" [0.48377624]\n",
|
||
"Mean squared error: 2.38\n",
|
||
"Variance score: 0.55\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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tm3bsmLFCp555pmj7iciiSuaq1xOMbMO4e9bApcCa6kO9p+Ed7sBiHkjksZeNuqMM86oWbUIYM6cOZx33nmcd955rF27NmKgt2zZkssuuwz4ulVuJIemSA7fZ8mSJVx77bUANf1donV4C4fJkyfXfEIoKytj/fr1EZ8T7X4ikhiiaZ97GvC0mTWl+h/AC865v5jZGuB5M3sI+BAojGGdQOMvG9W6deua70tKSnjsscd4//336dChA6NHj6aiouKI5xyad4fqVrmVlZVH7ANft9Q91j7Rqqys5KOPPuLss8/mb3/7G++88w7//Oc/admyJUOGDIlYZ7T7iUjiiOYql1XOuW875/o7585xzj0Q3v4v59z5zrmezrlrnHMxX53Bz2Wjdu7cSdu2bWnXrh1btmzhtddea/DXGDx4MC+88AIAxcXFET8B1LZ//35+9atf0bNnT/r06UN5eTknn3wyLVu2ZPXq1SxbtgyonpYBav55HG0/EUlccbXARV38XDbqvPPOo0+fPpx11ll0796dwYMHN/hr3HrrrVx//fX06dOn5qt9+/YR9x01ahQtWrRg3759DBs2jBdffBGAK664goKCAvr06UPv3r254IILap4zduxY+vfvT3p6OgUFBUfdT0QSU8K1zw0VhwK3bNQhlZWVVFZWkpKSQklJCcOGDaOkpKRmdO0Htc8V8V+07XMTaoQOwVw26pDdu3czdOhQKisrcc6Rn5/va5iLSGJRWsSRDh06sHz5cr/LEJEEFRfdFhtz2keip/dFJLH4HugpKSls375d4RFnnHNs376dlJQUv0sRkSj5PuVyaFHlhmgLIA0rJSWFrl27+l2GiETJ90Bv3rw5PXr08LsMEZGE5/uUi4iINAwFuohIQCjQRUQCQoEuIhIjlZWVvPLKK+Tk5DTKlXy+nxQVEQmaTZs2UVhYyLRp0ygrKyM1NZWysjJOP/30mL6uRugiIg2gqqqK119/nREjRtC9e3d+97vf0bdvX1566SU2bNgQ8zAHjdBFRE7I1q1bmTlzJvn5+fzrX/+iU6dO3H333WRlZXHGGWc0ai0KdBGRenLOsXjxYjzPY/78+ezfv5//+q//4qGHHmLEiBE1C9g0NgW6iEiUduzYwTPPPIPneaxdu5b27duTm5tLTk4Offr08bs8BbqIyLE451i2bBme5/H888+zd+9ezj//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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"------------------------------------\n",
|
||
"Ridge Regression\n",
|
||
"Ridge Coefficient: [0.48263202]\n",
|
||
"Ridge Intercept: 5.507994331002207\n",
|
||
"------------------------------------\n",
|
||
"Lasso\n",
|
||
"Lasso Coefficient: [0.48289905]\n",
|
||
"Lasso Intercept: 5.50318784374401\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
=======
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
>>>>>>> 02d6db36970b6d35b1c77d75c50f73d7bcefe80c
|
||
"source": [
|
||
"Hence, $Y_i \\sim \\mathcal{N}( \\mathbf{X}_{i, \\ast} \\, \\beta, \\sigma^2)$. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## The singular value decompostion\n",
|
||
"\n",
|
||
"\n",
|
||
"A general\n",
|
||
"$m\\times n$ matrix $\\hat{A}$ can be written in terms of a diagonal\n",
|
||
"matrix $\\hat{D}$ of dimensionality $n\\times n$ and two orthognal\n",
|
||
"matrices $\\hat{U}$ and $\\hat{V}$, where the first has dimensionality\n",
|
||
"$m \\times m$ and the last dimensionality $n\\times n$. \n",
|
||
"We have then"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{A} = \\hat{U}\\hat{D}\\hat{V}^T\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## From standard regression to Ridge regressions\n",
|
||
"\n",
|
||
"One of the typical problems we encounter with linear regression, in particular \n",
|
||
"when the matrix $\\hat{X}$ (our so-called design matrix) is high-dimensional, \n",
|
||
"are problems with near singular or singular matrices. The column vectors of $\\hat{X}$ \n",
|
||
"may be linearly dependent, normally referred to as super-collinearity. \n",
|
||
"This means that the matrix may be rank deficient and it is basically impossible to \n",
|
||
"to model the data using linear regression. As an example, consider the matrix"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"\\mathbf{X} & = \\left[\n",
|
||
"\\begin{array}{rrr}\n",
|
||
"1 & -1 & 2\n",
|
||
"\\\\\n",
|
||
"1 & 0 & 1\n",
|
||
"\\\\\n",
|
||
"1 & 2 & -1\n",
|
||
"\\\\\n",
|
||
"1 & 1 & 0\n",
|
||
"\\end{array} \\right]\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The columns of $\\hat{X}$ are linearly dependent. We se this easily since the \n",
|
||
"the first column is the row-wise sum of the other two columns. The rank (more correct,\n",
|
||
"the column rank) of a matrix is the dimension of the space spanned by the\n",
|
||
"column vectors. Hence, the rank of $\\mathbf{X}$ is equal to the number\n",
|
||
"of linearly independent columns. In this particular case the matrix has rank 2.\n",
|
||
"\n",
|
||
"Super-collinearity of an $(n \\times p)$-dimensional design matrix $\\mathbf{X}$ implies\n",
|
||
"that the inverse of the matrix $\\hat{X}^T\\hat{x}$ (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"\\hat{X} & = \\left[\n",
|
||
"\\begin{array}{rr}\n",
|
||
"1 & -1\n",
|
||
"\\\\\n",
|
||
"1 & -1\n",
|
||
"\\end{array} \\right].\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We see easily that $\\mbox{det}(\\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \\times (-1) - 1 \\times (-1) = 0$. Hence, $\\mathbf{X}$ is singular and its inverse is undefined.\n",
|
||
"This is equivalent to saying that the matrix $\\hat{X}$ has at least an eigenvalue which is zero.\n",
|
||
"\n",
|
||
"## Fixing the singularity\n",
|
||
"\n",
|
||
"If our design matrix $\\hat{X}$ which enters the linear regression problem"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto1\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
"\\hat{\\beta} = (\\hat{X}^{T} \\hat{X})^{-1} \\hat{X}^{T} \\hat{y},\n",
|
||
"\\label{_auto1} \\tag{1}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"has linearly dependent column vectors, we will not be able to compute the inverse\n",
|
||
"of $\\hat{X}^T\\hat{X}$ and we cannot find the parameters (estimators) $\\beta_i$. \n",
|
||
"The estimators are only well-defined if $(\\hat{X}^{T}\\hat{X})^{-1}$ exits. \n",
|
||
"This is more likely to happen when the matrix $\\hat{X}$ is high-dimensional. In this case it is likely to encounter a situation where \n",
|
||
"the regression parameters $\\beta_i$ cannot be estimated.\n",
|
||
"\n",
|
||
"The *ad hoc* approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{X}^{T} \\hat{X} \\rightarrow \\hat{X}^{T} \\hat{X}+\\lambda \\hat{I},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\hat{I}$ is the identity matrix.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Fitting vs. predicting when data is in the model class\n",
|
||
"\n",
|
||
"We start by considering the case\n",
|
||
"$f(x)=2x$.\n",
|
||
"\n",
|
||
"Then the data is clearly generated by a model that is contained within\n",
|
||
"all three model classes we are using to make predictions (linear\n",
|
||
"models, third order polynomials, and tenth order polynomials).\n",
|
||
"\n",
|
||
"Run the code for the following cases:\n",
|
||
"\n",
|
||
"1. For $f(x)=2x$ , $Ntrain=10$ and $\\sigma =0$ (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when $x \\in [0,1]$ . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?\n",
|
||
"\n",
|
||
"2. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?\n",
|
||
"\n",
|
||
"3. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example $x \\in [0,1.2]$ ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?\n",
|
||
"\n",
|
||
"4. Repeat the above for $f(x)=2x$ , $Ntrain=10$ , and $\\sigma=1$ . What changes?\n",
|
||
"\n",
|
||
"Repeat the exercises above for $f(x)=2x$ , $Ntrain=100$ , and $\\sigma=1$ . What changes?\n",
|
||
"Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.\n",
|
||
"\n",
|
||
"\n",
|
||
"## Fitting versus predicting when data is not in the model class\n",
|
||
"\n",
|
||
"Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider $f(x)=2x-10x^5+15x^{10}$ . Notice that the for linear and third-order polynomial the true model $f(x)$ is not contained in model class.\n",
|
||
"\n",
|
||
"1. Do better fits lead to better predictions?\n",
|
||
"\n",
|
||
"2. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points $Ntrain$ and $\\sigma$?\n",
|
||
"\n",
|
||
"Summarize what you think you learned about the relationship of knowing the true model class and predictive power.\n",
|
||
"\n",
|
||
"## An example code without the model assessment part"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/javascript": [
|
||
"/* Put everything inside the global mpl namespace */\n",
|
||
"window.mpl = {};\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.get_websocket_type = function() {\n",
|
||
" if (typeof(WebSocket) !== 'undefined') {\n",
|
||
" return WebSocket;\n",
|
||
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
||
" return MozWebSocket;\n",
|
||
" } else {\n",
|
||
" alert('Your browser does not have WebSocket support.' +\n",
|
||
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
||
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
||
" 'have to enable WebSockets in about:config.');\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
||
" this.id = figure_id;\n",
|
||
"\n",
|
||
" this.ws = websocket;\n",
|
||
"\n",
|
||
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
||
"\n",
|
||
" if (!this.supports_binary) {\n",
|
||
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
||
" if (warnings) {\n",
|
||
" warnings.style.display = 'block';\n",
|
||
" warnings.textContent = (\n",
|
||
" \"This browser does not support binary websocket messages. \" +\n",
|
||
" \"Performance may be slow.\");\n",
|
||
" }\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj = new Image();\n",
|
||
"\n",
|
||
" this.context = undefined;\n",
|
||
" this.message = undefined;\n",
|
||
" this.canvas = undefined;\n",
|
||
" this.rubberband_canvas = undefined;\n",
|
||
" this.rubberband_context = undefined;\n",
|
||
" this.format_dropdown = undefined;\n",
|
||
"\n",
|
||
" this.image_mode = 'full';\n",
|
||
"\n",
|
||
" this.root = $('<div/>');\n",
|
||
" this._root_extra_style(this.root)\n",
|
||
" this.root.attr('style', 'display: inline-block');\n",
|
||
"\n",
|
||
" $(parent_element).append(this.root);\n",
|
||
"\n",
|
||
" this._init_header(this);\n",
|
||
" this._init_canvas(this);\n",
|
||
" this._init_toolbar(this);\n",
|
||
"\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" this.waiting = false;\n",
|
||
"\n",
|
||
" this.ws.onopen = function () {\n",
|
||
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
||
" fig.send_message(\"send_image_mode\", {});\n",
|
||
" if (mpl.ratio != 1) {\n",
|
||
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
||
" }\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj.onload = function() {\n",
|
||
" if (fig.image_mode == 'full') {\n",
|
||
" // Full images could contain transparency (where diff images\n",
|
||
" // almost always do), so we need to clear the canvas so that\n",
|
||
" // there is no ghosting.\n",
|
||
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
" }\n",
|
||
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
||
" };\n",
|
||
"\n",
|
||
" this.imageObj.onunload = function() {\n",
|
||
" fig.ws.close();\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
||
"\n",
|
||
" this.ondownload = ondownload;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_header = function() {\n",
|
||
" var titlebar = $(\n",
|
||
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
||
" 'ui-helper-clearfix\"/>');\n",
|
||
" var titletext = $(\n",
|
||
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
||
" 'text-align: center; padding: 3px;\"/>');\n",
|
||
" titlebar.append(titletext)\n",
|
||
" this.root.append(titlebar);\n",
|
||
" this.header = titletext[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_canvas = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var canvas_div = $('<div/>');\n",
|
||
"\n",
|
||
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
||
"\n",
|
||
" function canvas_keyboard_event(event) {\n",
|
||
" return fig.key_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
||
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
||
" this.canvas_div = canvas_div\n",
|
||
" this._canvas_extra_style(canvas_div)\n",
|
||
" this.root.append(canvas_div);\n",
|
||
"\n",
|
||
" var canvas = $('<canvas/>');\n",
|
||
" canvas.addClass('mpl-canvas');\n",
|
||
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
||
"\n",
|
||
" this.canvas = canvas[0];\n",
|
||
" this.context = canvas[0].getContext(\"2d\");\n",
|
||
"\n",
|
||
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
||
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
||
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
||
"\tthis.context.msBackingStorePixelRatio ||\n",
|
||
"\tthis.context.oBackingStorePixelRatio ||\n",
|
||
"\tthis.context.backingStorePixelRatio || 1;\n",
|
||
"\n",
|
||
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
||
"\n",
|
||
" var rubberband = $('<canvas/>');\n",
|
||
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
||
"\n",
|
||
" var pass_mouse_events = true;\n",
|
||
"\n",
|
||
" canvas_div.resizable({\n",
|
||
" start: function(event, ui) {\n",
|
||
" pass_mouse_events = false;\n",
|
||
" },\n",
|
||
" resize: function(event, ui) {\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" stop: function(event, ui) {\n",
|
||
" pass_mouse_events = true;\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" });\n",
|
||
"\n",
|
||
" function mouse_event_fn(event) {\n",
|
||
" if (pass_mouse_events)\n",
|
||
" return fig.mouse_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
||
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
||
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
||
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
||
"\n",
|
||
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
||
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
||
"\n",
|
||
" canvas_div.on(\"wheel\", function (event) {\n",
|
||
" event = event.originalEvent;\n",
|
||
" event['data'] = 'scroll'\n",
|
||
" if (event.deltaY < 0) {\n",
|
||
" event.step = 1;\n",
|
||
" } else {\n",
|
||
" event.step = -1;\n",
|
||
" }\n",
|
||
" mouse_event_fn(event);\n",
|
||
" });\n",
|
||
"\n",
|
||
" canvas_div.append(canvas);\n",
|
||
" canvas_div.append(rubberband);\n",
|
||
"\n",
|
||
" this.rubberband = rubberband;\n",
|
||
" this.rubberband_canvas = rubberband[0];\n",
|
||
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
||
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
||
"\n",
|
||
" this._resize_canvas = function(width, height) {\n",
|
||
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
||
" // canvas in synch.\n",
|
||
" canvas_div.css('width', width)\n",
|
||
" canvas_div.css('height', height)\n",
|
||
"\n",
|
||
" canvas.attr('width', width * mpl.ratio);\n",
|
||
" canvas.attr('height', height * mpl.ratio);\n",
|
||
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
||
"\n",
|
||
" rubberband.attr('width', width);\n",
|
||
" rubberband.attr('height', height);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
||
" // upon first draw.\n",
|
||
" this._resize_canvas(600, 600);\n",
|
||
"\n",
|
||
" // Disable right mouse context menu.\n",
|
||
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
||
" return false;\n",
|
||
" });\n",
|
||
"\n",
|
||
" function set_focus () {\n",
|
||
" canvas.focus();\n",
|
||
" canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" window.setTimeout(set_focus, 100);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) {\n",
|
||
" // put a spacer in here.\n",
|
||
" continue;\n",
|
||
" }\n",
|
||
" var button = $('<button/>');\n",
|
||
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
||
" 'ui-button-icon-only');\n",
|
||
" button.attr('role', 'button');\n",
|
||
" button.attr('aria-disabled', 'false');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
"\n",
|
||
" var icon_img = $('<span/>');\n",
|
||
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
||
" icon_img.addClass(image);\n",
|
||
" icon_img.addClass('ui-corner-all');\n",
|
||
"\n",
|
||
" var tooltip_span = $('<span/>');\n",
|
||
" tooltip_span.addClass('ui-button-text');\n",
|
||
" tooltip_span.html(tooltip);\n",
|
||
"\n",
|
||
" button.append(icon_img);\n",
|
||
" button.append(tooltip_span);\n",
|
||
"\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fmt_picker_span = $('<span/>');\n",
|
||
"\n",
|
||
" var fmt_picker = $('<select/>');\n",
|
||
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
||
" fmt_picker_span.append(fmt_picker);\n",
|
||
" nav_element.append(fmt_picker_span);\n",
|
||
" this.format_dropdown = fmt_picker[0];\n",
|
||
"\n",
|
||
" for (var ind in mpl.extensions) {\n",
|
||
" var fmt = mpl.extensions[ind];\n",
|
||
" var option = $(\n",
|
||
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
||
" fmt_picker.append(option)\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add hover states to the ui-buttons\n",
|
||
" $( \".ui-button\" ).hover(\n",
|
||
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
||
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
||
" );\n",
|
||
"\n",
|
||
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
||
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
||
" // which will in turn request a refresh of the image.\n",
|
||
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
||
" properties['type'] = type;\n",
|
||
" properties['figure_id'] = this.id;\n",
|
||
" this.ws.send(JSON.stringify(properties));\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_draw_message = function() {\n",
|
||
" if (!this.waiting) {\n",
|
||
" this.waiting = true;\n",
|
||
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" var format_dropdown = fig.format_dropdown;\n",
|
||
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
||
" fig.ondownload(fig, format);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
||
" var size = msg['size'];\n",
|
||
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
||
" fig._resize_canvas(size[0], size[1]);\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
||
" var x0 = msg['x0'] / mpl.ratio;\n",
|
||
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
||
" var x1 = msg['x1'] / mpl.ratio;\n",
|
||
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
||
" x0 = Math.floor(x0) + 0.5;\n",
|
||
" y0 = Math.floor(y0) + 0.5;\n",
|
||
" x1 = Math.floor(x1) + 0.5;\n",
|
||
" y1 = Math.floor(y1) + 0.5;\n",
|
||
" var min_x = Math.min(x0, x1);\n",
|
||
" var min_y = Math.min(y0, y1);\n",
|
||
" var width = Math.abs(x1 - x0);\n",
|
||
" var height = Math.abs(y1 - y0);\n",
|
||
"\n",
|
||
" fig.rubberband_context.clearRect(\n",
|
||
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
"\n",
|
||
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
||
" // Updates the figure title.\n",
|
||
" fig.header.textContent = msg['label'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
||
" var cursor = msg['cursor'];\n",
|
||
" switch(cursor)\n",
|
||
" {\n",
|
||
" case 0:\n",
|
||
" cursor = 'pointer';\n",
|
||
" break;\n",
|
||
" case 1:\n",
|
||
" cursor = 'default';\n",
|
||
" break;\n",
|
||
" case 2:\n",
|
||
" cursor = 'crosshair';\n",
|
||
" break;\n",
|
||
" case 3:\n",
|
||
" cursor = 'move';\n",
|
||
" break;\n",
|
||
" }\n",
|
||
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
||
" fig.message.textContent = msg['message'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
||
" // Request the server to send over a new figure.\n",
|
||
" fig.send_draw_message();\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
||
" fig.image_mode = msg['mode'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Called whenever the canvas gets updated.\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"// A function to construct a web socket function for onmessage handling.\n",
|
||
"// Called in the figure constructor.\n",
|
||
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
||
" return function socket_on_message(evt) {\n",
|
||
" if (evt.data instanceof Blob) {\n",
|
||
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
||
" * transferred with MIME type text/plain:\" errors on\n",
|
||
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
||
" * to be part of the websocket stream */\n",
|
||
" evt.data.type = \"image/png\";\n",
|
||
"\n",
|
||
" /* Free the memory for the previous frames */\n",
|
||
" if (fig.imageObj.src) {\n",
|
||
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
||
" fig.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
||
" evt.data);\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
||
" fig.imageObj.src = evt.data;\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var msg = JSON.parse(evt.data);\n",
|
||
" var msg_type = msg['type'];\n",
|
||
"\n",
|
||
" // Call the \"handle_{type}\" callback, which takes\n",
|
||
" // the figure and JSON message as its only arguments.\n",
|
||
" try {\n",
|
||
" var callback = fig[\"handle_\" + msg_type];\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" if (callback) {\n",
|
||
" try {\n",
|
||
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
||
" callback(fig, msg);\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
||
" }\n",
|
||
" }\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
||
"mpl.findpos = function(e) {\n",
|
||
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
||
" var targ;\n",
|
||
" if (!e)\n",
|
||
" e = window.event;\n",
|
||
" if (e.target)\n",
|
||
" targ = e.target;\n",
|
||
" else if (e.srcElement)\n",
|
||
" targ = e.srcElement;\n",
|
||
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
||
" targ = targ.parentNode;\n",
|
||
"\n",
|
||
" // jQuery normalizes the pageX and pageY\n",
|
||
" // pageX,Y are the mouse positions relative to the document\n",
|
||
" // offset() returns the position of the element relative to the document\n",
|
||
" var x = e.pageX - $(targ).offset().left;\n",
|
||
" var y = e.pageY - $(targ).offset().top;\n",
|
||
"\n",
|
||
" return {\"x\": x, \"y\": y};\n",
|
||
"};\n",
|
||
"\n",
|
||
"/*\n",
|
||
" * return a copy of an object with only non-object keys\n",
|
||
" * we need this to avoid circular references\n",
|
||
" * http://stackoverflow.com/a/24161582/3208463\n",
|
||
" */\n",
|
||
"function simpleKeys (original) {\n",
|
||
" return Object.keys(original).reduce(function (obj, key) {\n",
|
||
" if (typeof original[key] !== 'object')\n",
|
||
" obj[key] = original[key]\n",
|
||
" return obj;\n",
|
||
" }, {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
||
" var canvas_pos = mpl.findpos(event)\n",
|
||
"\n",
|
||
" if (name === 'button_press')\n",
|
||
" {\n",
|
||
" this.canvas.focus();\n",
|
||
" this.canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" var x = canvas_pos.x * mpl.ratio;\n",
|
||
" var y = canvas_pos.y * mpl.ratio;\n",
|
||
"\n",
|
||
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
||
" step: event.step,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
"\n",
|
||
" /* This prevents the web browser from automatically changing to\n",
|
||
" * the text insertion cursor when the button is pressed. We want\n",
|
||
" * to control all of the cursor setting manually through the\n",
|
||
" * 'cursor' event from matplotlib */\n",
|
||
" event.preventDefault();\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" // Handle any extra behaviour associated with a key event\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
||
"\n",
|
||
" // Prevent repeat events\n",
|
||
" if (name == 'key_press')\n",
|
||
" {\n",
|
||
" if (event.which === this._key)\n",
|
||
" return;\n",
|
||
" else\n",
|
||
" this._key = event.which;\n",
|
||
" }\n",
|
||
" if (name == 'key_release')\n",
|
||
" this._key = null;\n",
|
||
"\n",
|
||
" var value = '';\n",
|
||
" if (event.ctrlKey && event.which != 17)\n",
|
||
" value += \"ctrl+\";\n",
|
||
" if (event.altKey && event.which != 18)\n",
|
||
" value += \"alt+\";\n",
|
||
" if (event.shiftKey && event.which != 16)\n",
|
||
" value += \"shift+\";\n",
|
||
"\n",
|
||
" value += 'k';\n",
|
||
" value += event.which.toString();\n",
|
||
"\n",
|
||
" this._key_event_extra(event, name);\n",
|
||
"\n",
|
||
" this.send_message(name, {key: value,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
||
" if (name == 'download') {\n",
|
||
" this.handle_save(this, null);\n",
|
||
" } else {\n",
|
||
" this.send_message(\"toolbar_button\", {name: name});\n",
|
||
" }\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
||
" this.message.textContent = tooltip;\n",
|
||
"};\n",
|
||
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
||
"\n",
|
||
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
|
||
"\n",
|
||
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
||
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
||
" // object with the appropriate methods. Currently this is a non binary\n",
|
||
" // socket, so there is still some room for performance tuning.\n",
|
||
" var ws = {};\n",
|
||
"\n",
|
||
" ws.close = function() {\n",
|
||
" comm.close()\n",
|
||
" };\n",
|
||
" ws.send = function(m) {\n",
|
||
" //console.log('sending', m);\n",
|
||
" comm.send(m);\n",
|
||
" };\n",
|
||
" // Register the callback with on_msg.\n",
|
||
" comm.on_msg(function(msg) {\n",
|
||
" //console.log('receiving', msg['content']['data'], msg);\n",
|
||
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
|
||
" ws.onmessage(msg['content']['data'])\n",
|
||
" });\n",
|
||
" return ws;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
||
" // This is the function which gets called when the mpl process\n",
|
||
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
||
"\n",
|
||
" var id = msg.content.data.id;\n",
|
||
" // Get hold of the div created by the display call when the Comm\n",
|
||
" // socket was opened in Python.\n",
|
||
" var element = $(\"#\" + id);\n",
|
||
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
||
"\n",
|
||
" function ondownload(figure, format) {\n",
|
||
" window.open(figure.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fig = new mpl.figure(id, ws_proxy,\n",
|
||
" ondownload,\n",
|
||
" element.get(0));\n",
|
||
"\n",
|
||
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
||
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
||
" ws_proxy.onopen();\n",
|
||
"\n",
|
||
" fig.parent_element = element.get(0);\n",
|
||
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
||
" if (!fig.cell_info) {\n",
|
||
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var output_index = fig.cell_info[2]\n",
|
||
" var cell = fig.cell_info[0];\n",
|
||
"\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
||
" var width = fig.canvas.width/mpl.ratio\n",
|
||
" fig.root.unbind('remove')\n",
|
||
"\n",
|
||
" // Update the output cell to use the data from the current canvas.\n",
|
||
" fig.push_to_output();\n",
|
||
" var dataURL = fig.canvas.toDataURL();\n",
|
||
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
||
" // the notebook keyboard shortcuts fail.\n",
|
||
" IPython.keyboard_manager.enable()\n",
|
||
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
||
" fig.close_ws(fig, msg);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
||
" fig.send_message('closing', msg);\n",
|
||
" // fig.ws.close()\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
||
" // Turn the data on the canvas into data in the output cell.\n",
|
||
" var width = this.canvas.width/mpl.ratio\n",
|
||
" var dataURL = this.canvas.toDataURL();\n",
|
||
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Tell IPython that the notebook contents must change.\n",
|
||
" IPython.notebook.set_dirty(true);\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
" var fig = this;\n",
|
||
" // Wait a second, then push the new image to the DOM so\n",
|
||
" // that it is saved nicely (might be nice to debounce this).\n",
|
||
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) { continue; };\n",
|
||
"\n",
|
||
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add the status bar.\n",
|
||
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"\n",
|
||
" // Add the close button to the window.\n",
|
||
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
||
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
||
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
||
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
||
" buttongrp.append(button);\n",
|
||
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
||
" titlebar.prepend(buttongrp);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
||
" var fig = this\n",
|
||
" el.on(\"remove\", function(){\n",
|
||
"\tfig.close_ws(fig, {});\n",
|
||
" });\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
||
" // this is important to make the div 'focusable\n",
|
||
" el.attr('tabindex', 0)\n",
|
||
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
||
" // off when our div gets focus\n",
|
||
"\n",
|
||
" // location in version 3\n",
|
||
" if (IPython.notebook.keyboard_manager) {\n",
|
||
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
" else {\n",
|
||
" // location in version 2\n",
|
||
" IPython.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" var manager = IPython.notebook.keyboard_manager;\n",
|
||
" if (!manager)\n",
|
||
" manager = IPython.keyboard_manager;\n",
|
||
"\n",
|
||
" // Check for shift+enter\n",
|
||
" if (event.shiftKey && event.which == 13) {\n",
|
||
" this.canvas_div.blur();\n",
|
||
" event.shiftKey = false;\n",
|
||
" // Send a \"J\" for go to next cell\n",
|
||
" event.which = 74;\n",
|
||
" event.keyCode = 74;\n",
|
||
" manager.command_mode();\n",
|
||
" manager.handle_keydown(event);\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" fig.ondownload(fig, null);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.find_output_cell = function(html_output) {\n",
|
||
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
||
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
||
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
||
" // our purposes (turning an active figure into a static one), is too late.\n",
|
||
" var cells = IPython.notebook.get_cells();\n",
|
||
" var ncells = cells.length;\n",
|
||
" for (var i=0; i<ncells; i++) {\n",
|
||
" var cell = cells[i];\n",
|
||
" if (cell.cell_type === 'code'){\n",
|
||
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
||
" var data = cell.output_area.outputs[j];\n",
|
||
" if (data.data) {\n",
|
||
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
||
" data = data.data;\n",
|
||
" }\n",
|
||
" if (data['text/html'] == html_output) {\n",
|
||
" return [cell, data, j];\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"// Register the function which deals with the matplotlib target/channel.\n",
|
||
"// The kernel may be null if the page has been refreshed.\n",
|
||
"if (IPython.notebook.kernel != null) {\n",
|
||
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
||
"}\n"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.Javascript object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<img src=\"data:image/png;base64,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8+bN0/b2ilngDz/8EOJU6PzPqVOntHt67733Xu3X4uAscU+wWPK8fv167QAt8Zw/f17b8/vpp59qP3MJtOG3CSuSAAmQgLIEZGggCmBF0kFG8BVxnWaQAAmQgGECFMCeBXBph1KJfbjin1VLoHOtGTt2LCZPnqzd7SsEcFxcnLbXd8+ePdqJzkLs/v3333nGDxs2DG+//TbKlCmjHbYl/vvLL79o9w1fe+21mn0UwIbfJqxIAiRAAsoSkKGBKIAVSQcZwVfEdZpBAiRAAoYJUAB7FsClwR0/fjwmTJhguQAWfa5YsQIzZ87EqlWrtGuNxJVJNWvWRJcuXXDzzTdr/819hNCdPn063nnnHcTHxyMqKgo9e/bEpEmTNOE7ceJECmDD7xJWJAESIAF1CcjQQBTAiuSDjOAr4jrNIAESIAHDBCiADaNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+DKNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+DKNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+DKNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+DKNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+DKNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+DKNjRYsIMActAslmSIAE/JKADA1EAaxIqskIviKu0wwSIAESMEyA4sMwOla0iABz0CKQbIYESMAvCcjQQBTAiqSajOAr4jrNIAESIAHDBCg+SkYXEBBQ4EXx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2NE0e/Mm/YWtU6dOJkDUq1dPOnToIPrhqoV75JFHmr8/5phjYurctm3bpF27dvLLL7+Y95x66qmyYsUK86dp06aSnp5uwjXNbgG3am7o0KEyatQoqVSpkrRs2dLU2B9//CFfffWV7N69W8444wzzC+IhhxxiNzijNwJu1V1xnPoz9IsvvjAf8gRgCi5awO26e//99+Wyyy4TDTcnn3yyCb5//vmn/Pjjj1K9enXz+UtDwM260+B77733ms9a/R2vYcOGsmnTJvM7nf7MGzx4sPkspiFw8cUXy9y5c4tAOAnAQcwUBOAA/RuIhAj9ofbRRx9JjRo1TO8ff/xxue++++TMM8+Uzz//PKYRXXPNNfLqq6+ab6FnzZolVatWNe+7++675cknn5Trr79eZsyYEdOxeFF4BdyqOV21oN9E33nnndKoUaMCML0ad84555jVDA8++KCMHj06vJiMLGYBt+qu8Amff/556dOnj9xyyy3y7LPPEoBjnhE7Xuhm3a1evVpatWplrvjqKqvTTz+9AHH//v2SkZFhvnimIeBW3emXyhp4tb70yp7+ThhpCxculK5du8qePXsKLnwgb7fA2LFjJTc3V1q3bm3+HH300eaChJMAHMRMQQAOSP3rD63U1FTZuXOn+eDUD9bodtJJJ8kPP/wg3377rVnqUlrbvHmzNGjQwIReDR516tQpeLkWv/4A3b59u1mupeek2SngZs2VJvj666+bZdD6w3fdunV2YjPqAoF41d3WrVulefPmJnToVRC9EswVYAovIuB23V1wwQWiV4AXLFgg+r9pCBQn4GbdzZ8/Xy666CI599xz5YMPPihyuu7du8u7775rLnpcccUVTAgCBwhUq1bNUQAOaqYgAAfkH8Bnn30mZ599tqSlpRW7bErvAX7ooYdk+PDh5h7e0tr06dPlxhtvLPGXv5tuukleeOEF0df17t07IEJ0020BN2uutL6tXLlSTjjhBElOTjY/fGl2C8Sr7q688kqz3EuXn/76668EYLvLrMjo3aw7XXKqX+jpn6ysLKQRKFHAzbrTq756lbesAKz7HuiXfzQEogWcBuCgZgoCcEDqP3Jfx+WXXy5vvPFGkV7rt8zdunUzGxy8/fbbpY7qnnvukUmTJpkNOB577LEir508ebL07dvX3Eeiy6tpdgq4WXOlCUa+tdal0Rs2bLATm1EX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\" width=\"640\">"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import sklearn as sk\n",
|
||
"from sklearn import datasets, linear_model\n",
|
||
"from sklearn.preprocessing import PolynomialFeatures\n",
|
||
"\n",
|
||
"import matplotlib as mpl\n",
|
||
"from matplotlib import pyplot as plt\n",
|
||
"\n",
|
||
"%matplotlib notebook\n",
|
||
"\n",
|
||
"# The Training Data\n",
|
||
"\n",
|
||
"N_train=100\n",
|
||
"\n",
|
||
"sigma_train=1;\n",
|
||
"\n",
|
||
"# Train on integers\n",
|
||
"x=np.linspace(0.05,0.95,N_train)\n",
|
||
"# Draw random noise\n",
|
||
"s = sigma_train*np.random.randn(N_train)\n",
|
||
"\n",
|
||
"#linear\n",
|
||
"#y=2*x+s\n",
|
||
"\n",
|
||
"#Tenth Order\n",
|
||
"y=2*x-10*x**5+15*x**10+s\n",
|
||
"\n",
|
||
"p1=plt.plot(x,y, \"o\",ms=15, label='Training')\n",
|
||
"\n",
|
||
"#Linear Regression\n",
|
||
"# Create linear regression object\n",
|
||
"clf = linear_model.LinearRegression()\n",
|
||
"\n",
|
||
"# Train the model using the training sets\n",
|
||
"clf.fit(x[:, np.newaxis], y)\n",
|
||
"# The coefficients\n",
|
||
"\n",
|
||
"xplot=np.linspace(0.02,0.98,200)\n",
|
||
"linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')\n",
|
||
"\n",
|
||
"#Polynomial Regression\n",
|
||
"\n",
|
||
"\n",
|
||
"poly3 = PolynomialFeatures(degree=3)\n",
|
||
"X = poly3.fit_transform(x[:,np.newaxis])\n",
|
||
"clf3 = linear_model.LinearRegression()\n",
|
||
"clf3.fit(X,y)\n",
|
||
"\n",
|
||
"\n",
|
||
"Xplot=poly3.fit_transform(xplot[:,np.newaxis])\n",
|
||
"poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"#poly5 = PolynomialFeatures(degree=5)\n",
|
||
"#X = poly5.fit_transform(x[:,np.newaxis])\n",
|
||
"#clf5 = linear_model.LinearRegression()\n",
|
||
"#clf5.fit(X,y)\n",
|
||
"\n",
|
||
"#Xplot=poly5.fit_transform(xplot[:,np.newaxis])\n",
|
||
"#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)\n",
|
||
"\n",
|
||
"poly10 = PolynomialFeatures(degree=10)\n",
|
||
"X = poly10.fit_transform(x[:,np.newaxis])\n",
|
||
"clf10 = linear_model.LinearRegression()\n",
|
||
"clf10.fit(X,y)\n",
|
||
"\n",
|
||
"Xplot=poly10.fit_transform(xplot[:,np.newaxis])\n",
|
||
"poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')\n",
|
||
"\n",
|
||
"axes = plt.gca()\n",
|
||
"axes.set_ylim([-7,7])\n",
|
||
"\n",
|
||
"handles, labels=axes.get_legend_handles_labels()\n",
|
||
"plt.legend(handles,labels, loc='lower center')\n",
|
||
"plt.xlabel(\"$x$\")\n",
|
||
"plt.ylabel(\"$y$\")\n",
|
||
"Title=\"$N=$\"+str(N_train)+\", $\\sigma=$\"+str(sigma_train)\n",
|
||
"plt.title(Title+\" (train)\")\n",
|
||
"plt.tight_layout()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- !split -->\n",
|
||
"## Generating test data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/javascript": [
|
||
"/* Put everything inside the global mpl namespace */\n",
|
||
"window.mpl = {};\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.get_websocket_type = function() {\n",
|
||
" if (typeof(WebSocket) !== 'undefined') {\n",
|
||
" return WebSocket;\n",
|
||
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
||
" return MozWebSocket;\n",
|
||
" } else {\n",
|
||
" alert('Your browser does not have WebSocket support.' +\n",
|
||
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
||
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
||
" 'have to enable WebSockets in about:config.');\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
||
" this.id = figure_id;\n",
|
||
"\n",
|
||
" this.ws = websocket;\n",
|
||
"\n",
|
||
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
||
"\n",
|
||
" if (!this.supports_binary) {\n",
|
||
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
||
" if (warnings) {\n",
|
||
" warnings.style.display = 'block';\n",
|
||
" warnings.textContent = (\n",
|
||
" \"This browser does not support binary websocket messages. \" +\n",
|
||
" \"Performance may be slow.\");\n",
|
||
" }\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj = new Image();\n",
|
||
"\n",
|
||
" this.context = undefined;\n",
|
||
" this.message = undefined;\n",
|
||
" this.canvas = undefined;\n",
|
||
" this.rubberband_canvas = undefined;\n",
|
||
" this.rubberband_context = undefined;\n",
|
||
" this.format_dropdown = undefined;\n",
|
||
"\n",
|
||
" this.image_mode = 'full';\n",
|
||
"\n",
|
||
" this.root = $('<div/>');\n",
|
||
" this._root_extra_style(this.root)\n",
|
||
" this.root.attr('style', 'display: inline-block');\n",
|
||
"\n",
|
||
" $(parent_element).append(this.root);\n",
|
||
"\n",
|
||
" this._init_header(this);\n",
|
||
" this._init_canvas(this);\n",
|
||
" this._init_toolbar(this);\n",
|
||
"\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" this.waiting = false;\n",
|
||
"\n",
|
||
" this.ws.onopen = function () {\n",
|
||
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
||
" fig.send_message(\"send_image_mode\", {});\n",
|
||
" if (mpl.ratio != 1) {\n",
|
||
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
||
" }\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj.onload = function() {\n",
|
||
" if (fig.image_mode == 'full') {\n",
|
||
" // Full images could contain transparency (where diff images\n",
|
||
" // almost always do), so we need to clear the canvas so that\n",
|
||
" // there is no ghosting.\n",
|
||
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
" }\n",
|
||
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
||
" };\n",
|
||
"\n",
|
||
" this.imageObj.onunload = function() {\n",
|
||
" fig.ws.close();\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
||
"\n",
|
||
" this.ondownload = ondownload;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_header = function() {\n",
|
||
" var titlebar = $(\n",
|
||
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
||
" 'ui-helper-clearfix\"/>');\n",
|
||
" var titletext = $(\n",
|
||
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
||
" 'text-align: center; padding: 3px;\"/>');\n",
|
||
" titlebar.append(titletext)\n",
|
||
" this.root.append(titlebar);\n",
|
||
" this.header = titletext[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_canvas = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var canvas_div = $('<div/>');\n",
|
||
"\n",
|
||
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
||
"\n",
|
||
" function canvas_keyboard_event(event) {\n",
|
||
" return fig.key_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
||
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
||
" this.canvas_div = canvas_div\n",
|
||
" this._canvas_extra_style(canvas_div)\n",
|
||
" this.root.append(canvas_div);\n",
|
||
"\n",
|
||
" var canvas = $('<canvas/>');\n",
|
||
" canvas.addClass('mpl-canvas');\n",
|
||
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
||
"\n",
|
||
" this.canvas = canvas[0];\n",
|
||
" this.context = canvas[0].getContext(\"2d\");\n",
|
||
"\n",
|
||
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
||
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
||
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
||
"\tthis.context.msBackingStorePixelRatio ||\n",
|
||
"\tthis.context.oBackingStorePixelRatio ||\n",
|
||
"\tthis.context.backingStorePixelRatio || 1;\n",
|
||
"\n",
|
||
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
||
"\n",
|
||
" var rubberband = $('<canvas/>');\n",
|
||
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
||
"\n",
|
||
" var pass_mouse_events = true;\n",
|
||
"\n",
|
||
" canvas_div.resizable({\n",
|
||
" start: function(event, ui) {\n",
|
||
" pass_mouse_events = false;\n",
|
||
" },\n",
|
||
" resize: function(event, ui) {\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" stop: function(event, ui) {\n",
|
||
" pass_mouse_events = true;\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" });\n",
|
||
"\n",
|
||
" function mouse_event_fn(event) {\n",
|
||
" if (pass_mouse_events)\n",
|
||
" return fig.mouse_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
||
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
||
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
||
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
||
"\n",
|
||
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
||
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
||
"\n",
|
||
" canvas_div.on(\"wheel\", function (event) {\n",
|
||
" event = event.originalEvent;\n",
|
||
" event['data'] = 'scroll'\n",
|
||
" if (event.deltaY < 0) {\n",
|
||
" event.step = 1;\n",
|
||
" } else {\n",
|
||
" event.step = -1;\n",
|
||
" }\n",
|
||
" mouse_event_fn(event);\n",
|
||
" });\n",
|
||
"\n",
|
||
" canvas_div.append(canvas);\n",
|
||
" canvas_div.append(rubberband);\n",
|
||
"\n",
|
||
" this.rubberband = rubberband;\n",
|
||
" this.rubberband_canvas = rubberband[0];\n",
|
||
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
||
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
||
"\n",
|
||
" this._resize_canvas = function(width, height) {\n",
|
||
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
||
" // canvas in synch.\n",
|
||
" canvas_div.css('width', width)\n",
|
||
" canvas_div.css('height', height)\n",
|
||
"\n",
|
||
" canvas.attr('width', width * mpl.ratio);\n",
|
||
" canvas.attr('height', height * mpl.ratio);\n",
|
||
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
||
"\n",
|
||
" rubberband.attr('width', width);\n",
|
||
" rubberband.attr('height', height);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
||
" // upon first draw.\n",
|
||
" this._resize_canvas(600, 600);\n",
|
||
"\n",
|
||
" // Disable right mouse context menu.\n",
|
||
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
||
" return false;\n",
|
||
" });\n",
|
||
"\n",
|
||
" function set_focus () {\n",
|
||
" canvas.focus();\n",
|
||
" canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" window.setTimeout(set_focus, 100);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) {\n",
|
||
" // put a spacer in here.\n",
|
||
" continue;\n",
|
||
" }\n",
|
||
" var button = $('<button/>');\n",
|
||
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
||
" 'ui-button-icon-only');\n",
|
||
" button.attr('role', 'button');\n",
|
||
" button.attr('aria-disabled', 'false');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
"\n",
|
||
" var icon_img = $('<span/>');\n",
|
||
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
||
" icon_img.addClass(image);\n",
|
||
" icon_img.addClass('ui-corner-all');\n",
|
||
"\n",
|
||
" var tooltip_span = $('<span/>');\n",
|
||
" tooltip_span.addClass('ui-button-text');\n",
|
||
" tooltip_span.html(tooltip);\n",
|
||
"\n",
|
||
" button.append(icon_img);\n",
|
||
" button.append(tooltip_span);\n",
|
||
"\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fmt_picker_span = $('<span/>');\n",
|
||
"\n",
|
||
" var fmt_picker = $('<select/>');\n",
|
||
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
||
" fmt_picker_span.append(fmt_picker);\n",
|
||
" nav_element.append(fmt_picker_span);\n",
|
||
" this.format_dropdown = fmt_picker[0];\n",
|
||
"\n",
|
||
" for (var ind in mpl.extensions) {\n",
|
||
" var fmt = mpl.extensions[ind];\n",
|
||
" var option = $(\n",
|
||
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
||
" fmt_picker.append(option)\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add hover states to the ui-buttons\n",
|
||
" $( \".ui-button\" ).hover(\n",
|
||
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
||
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
||
" );\n",
|
||
"\n",
|
||
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
||
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
||
" // which will in turn request a refresh of the image.\n",
|
||
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
||
" properties['type'] = type;\n",
|
||
" properties['figure_id'] = this.id;\n",
|
||
" this.ws.send(JSON.stringify(properties));\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_draw_message = function() {\n",
|
||
" if (!this.waiting) {\n",
|
||
" this.waiting = true;\n",
|
||
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" var format_dropdown = fig.format_dropdown;\n",
|
||
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
||
" fig.ondownload(fig, format);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
||
" var size = msg['size'];\n",
|
||
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
||
" fig._resize_canvas(size[0], size[1]);\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
||
" var x0 = msg['x0'] / mpl.ratio;\n",
|
||
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
||
" var x1 = msg['x1'] / mpl.ratio;\n",
|
||
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
||
" x0 = Math.floor(x0) + 0.5;\n",
|
||
" y0 = Math.floor(y0) + 0.5;\n",
|
||
" x1 = Math.floor(x1) + 0.5;\n",
|
||
" y1 = Math.floor(y1) + 0.5;\n",
|
||
" var min_x = Math.min(x0, x1);\n",
|
||
" var min_y = Math.min(y0, y1);\n",
|
||
" var width = Math.abs(x1 - x0);\n",
|
||
" var height = Math.abs(y1 - y0);\n",
|
||
"\n",
|
||
" fig.rubberband_context.clearRect(\n",
|
||
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
"\n",
|
||
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
||
" // Updates the figure title.\n",
|
||
" fig.header.textContent = msg['label'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
||
" var cursor = msg['cursor'];\n",
|
||
" switch(cursor)\n",
|
||
" {\n",
|
||
" case 0:\n",
|
||
" cursor = 'pointer';\n",
|
||
" break;\n",
|
||
" case 1:\n",
|
||
" cursor = 'default';\n",
|
||
" break;\n",
|
||
" case 2:\n",
|
||
" cursor = 'crosshair';\n",
|
||
" break;\n",
|
||
" case 3:\n",
|
||
" cursor = 'move';\n",
|
||
" break;\n",
|
||
" }\n",
|
||
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
||
" fig.message.textContent = msg['message'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
||
" // Request the server to send over a new figure.\n",
|
||
" fig.send_draw_message();\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
||
" fig.image_mode = msg['mode'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Called whenever the canvas gets updated.\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"// A function to construct a web socket function for onmessage handling.\n",
|
||
"// Called in the figure constructor.\n",
|
||
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
||
" return function socket_on_message(evt) {\n",
|
||
" if (evt.data instanceof Blob) {\n",
|
||
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
||
" * transferred with MIME type text/plain:\" errors on\n",
|
||
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
||
" * to be part of the websocket stream */\n",
|
||
" evt.data.type = \"image/png\";\n",
|
||
"\n",
|
||
" /* Free the memory for the previous frames */\n",
|
||
" if (fig.imageObj.src) {\n",
|
||
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
||
" fig.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
||
" evt.data);\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
||
" fig.imageObj.src = evt.data;\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var msg = JSON.parse(evt.data);\n",
|
||
" var msg_type = msg['type'];\n",
|
||
"\n",
|
||
" // Call the \"handle_{type}\" callback, which takes\n",
|
||
" // the figure and JSON message as its only arguments.\n",
|
||
" try {\n",
|
||
" var callback = fig[\"handle_\" + msg_type];\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" if (callback) {\n",
|
||
" try {\n",
|
||
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
||
" callback(fig, msg);\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
||
" }\n",
|
||
" }\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
||
"mpl.findpos = function(e) {\n",
|
||
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
||
" var targ;\n",
|
||
" if (!e)\n",
|
||
" e = window.event;\n",
|
||
" if (e.target)\n",
|
||
" targ = e.target;\n",
|
||
" else if (e.srcElement)\n",
|
||
" targ = e.srcElement;\n",
|
||
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
||
" targ = targ.parentNode;\n",
|
||
"\n",
|
||
" // jQuery normalizes the pageX and pageY\n",
|
||
" // pageX,Y are the mouse positions relative to the document\n",
|
||
" // offset() returns the position of the element relative to the document\n",
|
||
" var x = e.pageX - $(targ).offset().left;\n",
|
||
" var y = e.pageY - $(targ).offset().top;\n",
|
||
"\n",
|
||
" return {\"x\": x, \"y\": y};\n",
|
||
"};\n",
|
||
"\n",
|
||
"/*\n",
|
||
" * return a copy of an object with only non-object keys\n",
|
||
" * we need this to avoid circular references\n",
|
||
" * http://stackoverflow.com/a/24161582/3208463\n",
|
||
" */\n",
|
||
"function simpleKeys (original) {\n",
|
||
" return Object.keys(original).reduce(function (obj, key) {\n",
|
||
" if (typeof original[key] !== 'object')\n",
|
||
" obj[key] = original[key]\n",
|
||
" return obj;\n",
|
||
" }, {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
||
" var canvas_pos = mpl.findpos(event)\n",
|
||
"\n",
|
||
" if (name === 'button_press')\n",
|
||
" {\n",
|
||
" this.canvas.focus();\n",
|
||
" this.canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" var x = canvas_pos.x * mpl.ratio;\n",
|
||
" var y = canvas_pos.y * mpl.ratio;\n",
|
||
"\n",
|
||
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
||
" step: event.step,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
"\n",
|
||
" /* This prevents the web browser from automatically changing to\n",
|
||
" * the text insertion cursor when the button is pressed. We want\n",
|
||
" * to control all of the cursor setting manually through the\n",
|
||
" * 'cursor' event from matplotlib */\n",
|
||
" event.preventDefault();\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" // Handle any extra behaviour associated with a key event\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
||
"\n",
|
||
" // Prevent repeat events\n",
|
||
" if (name == 'key_press')\n",
|
||
" {\n",
|
||
" if (event.which === this._key)\n",
|
||
" return;\n",
|
||
" else\n",
|
||
" this._key = event.which;\n",
|
||
" }\n",
|
||
" if (name == 'key_release')\n",
|
||
" this._key = null;\n",
|
||
"\n",
|
||
" var value = '';\n",
|
||
" if (event.ctrlKey && event.which != 17)\n",
|
||
" value += \"ctrl+\";\n",
|
||
" if (event.altKey && event.which != 18)\n",
|
||
" value += \"alt+\";\n",
|
||
" if (event.shiftKey && event.which != 16)\n",
|
||
" value += \"shift+\";\n",
|
||
"\n",
|
||
" value += 'k';\n",
|
||
" value += event.which.toString();\n",
|
||
"\n",
|
||
" this._key_event_extra(event, name);\n",
|
||
"\n",
|
||
" this.send_message(name, {key: value,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
||
" if (name == 'download') {\n",
|
||
" this.handle_save(this, null);\n",
|
||
" } else {\n",
|
||
" this.send_message(\"toolbar_button\", {name: name});\n",
|
||
" }\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
||
" this.message.textContent = tooltip;\n",
|
||
"};\n",
|
||
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
||
"\n",
|
||
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
|
||
"\n",
|
||
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
||
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
||
" // object with the appropriate methods. Currently this is a non binary\n",
|
||
" // socket, so there is still some room for performance tuning.\n",
|
||
" var ws = {};\n",
|
||
"\n",
|
||
" ws.close = function() {\n",
|
||
" comm.close()\n",
|
||
" };\n",
|
||
" ws.send = function(m) {\n",
|
||
" //console.log('sending', m);\n",
|
||
" comm.send(m);\n",
|
||
" };\n",
|
||
" // Register the callback with on_msg.\n",
|
||
" comm.on_msg(function(msg) {\n",
|
||
" //console.log('receiving', msg['content']['data'], msg);\n",
|
||
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
|
||
" ws.onmessage(msg['content']['data'])\n",
|
||
" });\n",
|
||
" return ws;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
||
" // This is the function which gets called when the mpl process\n",
|
||
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
||
"\n",
|
||
" var id = msg.content.data.id;\n",
|
||
" // Get hold of the div created by the display call when the Comm\n",
|
||
" // socket was opened in Python.\n",
|
||
" var element = $(\"#\" + id);\n",
|
||
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
||
"\n",
|
||
" function ondownload(figure, format) {\n",
|
||
" window.open(figure.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fig = new mpl.figure(id, ws_proxy,\n",
|
||
" ondownload,\n",
|
||
" element.get(0));\n",
|
||
"\n",
|
||
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
||
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
||
" ws_proxy.onopen();\n",
|
||
"\n",
|
||
" fig.parent_element = element.get(0);\n",
|
||
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
||
" if (!fig.cell_info) {\n",
|
||
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var output_index = fig.cell_info[2]\n",
|
||
" var cell = fig.cell_info[0];\n",
|
||
"\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
||
" var width = fig.canvas.width/mpl.ratio\n",
|
||
" fig.root.unbind('remove')\n",
|
||
"\n",
|
||
" // Update the output cell to use the data from the current canvas.\n",
|
||
" fig.push_to_output();\n",
|
||
" var dataURL = fig.canvas.toDataURL();\n",
|
||
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
||
" // the notebook keyboard shortcuts fail.\n",
|
||
" IPython.keyboard_manager.enable()\n",
|
||
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
||
" fig.close_ws(fig, msg);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
||
" fig.send_message('closing', msg);\n",
|
||
" // fig.ws.close()\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
||
" // Turn the data on the canvas into data in the output cell.\n",
|
||
" var width = this.canvas.width/mpl.ratio\n",
|
||
" var dataURL = this.canvas.toDataURL();\n",
|
||
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Tell IPython that the notebook contents must change.\n",
|
||
" IPython.notebook.set_dirty(true);\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
" var fig = this;\n",
|
||
" // Wait a second, then push the new image to the DOM so\n",
|
||
" // that it is saved nicely (might be nice to debounce this).\n",
|
||
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) { continue; };\n",
|
||
"\n",
|
||
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add the status bar.\n",
|
||
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"\n",
|
||
" // Add the close button to the window.\n",
|
||
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
||
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
||
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
||
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
||
" buttongrp.append(button);\n",
|
||
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
||
" titlebar.prepend(buttongrp);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
||
" var fig = this\n",
|
||
" el.on(\"remove\", function(){\n",
|
||
"\tfig.close_ws(fig, {});\n",
|
||
" });\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
||
" // this is important to make the div 'focusable\n",
|
||
" el.attr('tabindex', 0)\n",
|
||
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
||
" // off when our div gets focus\n",
|
||
"\n",
|
||
" // location in version 3\n",
|
||
" if (IPython.notebook.keyboard_manager) {\n",
|
||
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
" else {\n",
|
||
" // location in version 2\n",
|
||
" IPython.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" var manager = IPython.notebook.keyboard_manager;\n",
|
||
" if (!manager)\n",
|
||
" manager = IPython.keyboard_manager;\n",
|
||
"\n",
|
||
" // Check for shift+enter\n",
|
||
" if (event.shiftKey && event.which == 13) {\n",
|
||
" this.canvas_div.blur();\n",
|
||
" event.shiftKey = false;\n",
|
||
" // Send a \"J\" for go to next cell\n",
|
||
" event.which = 74;\n",
|
||
" event.keyCode = 74;\n",
|
||
" manager.command_mode();\n",
|
||
" manager.handle_keydown(event);\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" fig.ondownload(fig, null);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.find_output_cell = function(html_output) {\n",
|
||
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
||
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
||
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
||
" // our purposes (turning an active figure into a static one), is too late.\n",
|
||
" var cells = IPython.notebook.get_cells();\n",
|
||
" var ncells = cells.length;\n",
|
||
" for (var i=0; i<ncells; i++) {\n",
|
||
" var cell = cells[i];\n",
|
||
" if (cell.cell_type === 'code'){\n",
|
||
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
||
" var data = cell.output_area.outputs[j];\n",
|
||
" if (data.data) {\n",
|
||
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
||
" data = data.data;\n",
|
||
" }\n",
|
||
" if (data['text/html'] == html_output) {\n",
|
||
" return [cell, data, j];\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"// Register the function which deals with the matplotlib target/channel.\n",
|
||
"// The kernel may be null if the page has been refreshed.\n",
|
||
"if (IPython.notebook.kernel != null) {\n",
|
||
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
||
"}\n"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.Javascript object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAYAAABfdxm0AAAgAElEQVR4XuydB5RUxdaFD0NGyQpKkpx+QIIgKAoooJJBERUVA/KeiKIgggoKYkQUxKyoqA8zQVBBkgQJIhnJOSlBck6Pf+3Cmne7p3v6dqipmXt3rTVLnL6VvjpdU/ueqlOZzp07d06YSIAESIAESIAESIAESIAESIAESMDjBDJRAHt8hNk9EiABEiABEiABEiABEiABEiABRYACmIZAAiRAAiRAAiRAAiRAAiRAAiTgCwIUwL4YZnaSBEiABEiABEiABEiABEiABEiAApg2QAIkQAIkQAIkQAIkQAIkQAIk4AsCFMC+GGZ2kgRIgARIgARIgARIgARIgARIgAKYNkACJEACJEACJEACJEACJEACJOALAhTAvhhmdpIESIAESIAESIAESIAESIAESIACmDZAAiRAAiRAAiRAAiRAAiRAAiTgCwIUwL4YZnaSBEiABEiABEiABEiABEiABEiAApg2QAIkQAIkQAIkQAIkQAIkQAIk4AsCFMC+GGZ2kgRIgARIgARIgARIgARIgARIgAKYNkACJEACJEACJEACJEACJEACJOALAhTAvhhmdpIESIAESIAESIAESIAESIAESIACmDZAAiRAAiRAAiRAAiRAAiRAAiTgCwIUwL4YZnaSBEiABEiABEiABEiABEiABEiAApg2QAIkQAIkQAIkQAIkQAIkQAIk4AsCFMC+GGZ2kgRIgARIgARIgARIgARIgARIgAKYNkACJEACJEACJEACJEACJEACJOALAhTAvhhmdpIESIAESIAESIAESIAESIAESIACmDZAAiRAAiRAAiRAAiRAAiRAAiTgCwIUwL4YZnaSBEiABEiABEiABEiABEiABEiAApg2QAIkQAIkQAIkQAIkQAIkQAIk4AsCFMC+GGZ2kgRIgARIgARIgARIgARIgARIgAKYNkACJEACJEACJEACJEACJEACJOALAhTAvhhmdpIESIAESIAESIAESIAESIAESIACmDZAAiRAAiRAAiRAAiRAAiRAAiTgCwIUwL4YZnaSBEiABEiABEiABEiABEiABEiAApg2QAIkkC4I3HPPPfLpp59Kp06dZMSIEQFtSu2zdNF4NsJ3BDZv3iylSpVS/d60aZOULFnSdwzYYRJIjwRMfzenT58ujRo1Ul0/d+5cekTANpEACUQgQAFMEyEBEkgXBCiA08UwsBEuCZheZLtsBh8jgYgEDhw4IEOHDlXPPfroo5IvX76IeTLyA6a/m6YEMNqtX/72798/Iw8B204C6Z4ABXC6HyI2kAT8QSA1Afzkk0/KmDFjpG3btvLSSy/5Awh7ma4J7NixQ66//nrVxqlTp0rRokXTdXvZOP8SMC0I0xtZ0/01JYBNlZvexoftIYH0QIACOD2MAttAAiQg3OZMIyABEiCBxBMwLQgT3+L4SjTdX1NC1VS58dFkbhLwJgEKYG+OK3tFAhmOAAVwhhsyNpgESCADEDAtCNMbAtP9NSVUTZWb3saH7SGB9ECAAjg9jALbQAIkkKoHODVx3LBhQ5kxY4Y8++yz6mf48OHqZ9WqVSpASZUqVeShhx6SO++8M1XKf/zxhwwbNkx++eUXwfbWpKQkKV26tLRs2VIee+wxueiii1LkP336tEyYMEF++OEHWbRokcq3d+9edcauRo0aqk+33XabZMqUKUXe4MXO4sWLZfDgwaovu3btkquvvlrwjJuEAExbtmyRTz75RG655RYZNGiQ2jKOheCRI0dSBGk6fPiwvP322/L999/LmjVr5OjRo1KoUCFVZ/fu3aVevXphq/3777/lhRdeUHn//PNPyZ8/v9SvX1+wTb1mzZrJfQVHjI1OsfQ3ljFBfb/99psayzlz5shff/0lmTNnVuMHTo0bN5Z7771XihUrFtDH1atXy+uvv66Yb9++Xf773//KxRdfrLY2X3fddXL33XdLxYoVk/O4WWQfPHhQ3njjDRk7dqysX79eYC+oF23o1auXsq9QSdsLGNaqVUteeeUV+e6779QY58qVS41Pv3795Morr3RjHiGfOXHihLz33nvyzTffqO/K8ePHpXDhwtKgQQPp0aOHVK9ePWQ+p63dcccdqn//+c9/VP+yZMmi2vvEE0/IjTfeGHXb3DBFoc424DumU3D+nDlzyosvvijjxo1TdpA3b14VvAjnK51jGXVD/8kwadIk+fjjj2Xu3Lmye/duQX0YXzAEm1Dfo1OnTqn56dtvv5Xly5fLoUOHpECBAmos//3vf8tNN92UUJvQ82O4PqKtwfNMItpYuXJlefnll9XciO8T7Cs4YNSePXuU/fz444+yceNGOXnypBQpUkSNEWzw//7v/8IODeba5557Tn766SfFHt/VJk2ayNNPP63sMN4AdZgPBg4cqI434Aw12tW8eXPp27ev+r6EC4IV698EbdPhOuwMDhlrHbHaOfORgBcJUAB7cVTZJxLIgARiDYKlF3hYmGBBCWGGBRCEAhaXOj3zzDMyYMCAkGQgGCHgIHqQkPfMmTOChSDSpZdeqhZpELXO5BR1+H2ePHnUIg8CU6f27dvLV199pQR1uLwQN7fffrsSSCgD9WJBHK0AhoD+4IMPZO3atZItWzbVDyzenFGKlyxZokQ9FqVIEId4TrcZ4gsCFzyCE8rFwg/CFyl79uzqB5xRH/rRqlUr9VlqAthNf2MdE0QSh8DVi21nG3V/8KLAKZwmT56smGABjpQ1a1a54IILFDud8HLFGZgmklhbsWKFEoGac44cOVS5mjPaNXLkSLn55ptTcNYC+IsvvhDYLcQl8sOGjh07pp4H7/Hjx0vTpk2j/rZDPKBteMGg+wsbgGBHQj0ImvTwww+nKFsv1N98800lfPGyAf1Cf/CyBQnth8i77777ompbJKa6MDcCGMIL9UMcoW9nz55NHl98x2bOnCmXX355VO3TD2MMYD8QsTrlzp1bcdMMUTa+a86EFxgQUbANzQlt0XnwO4jgd999N2E20a5dO5k1a5bgxRUSXgThO6/TVVddJaNHj07+/0S08cMPP1RCES/ynHbvFMBTpkwRzI36OwYbgk3jZZy2b5SDF0/BCS8b8RJp//796iO8eECfYH/giXwdOnRQn8USoX3ixInSpk2bZHu58MIL1d8DvDTC3wLMj9q2g0V9rH8TateuLRs2bEjuE15GORP6g5cFSLHWEZOxMxMJeJQABbBHB5bdIoGMRiBeAQxPJAQsFgm33nqrWhRBfHTt2lUJBSxO8Va/XLlyAWg++ugj6dy5s2CRA9GHhc0ll1yiFsxYwMKbNW3aNOXZwZt/PKfT/PnzlQcIXtc6deqoxRfSvn37lDiAlw7iEG165JFHAup1LmJQ5rXXXiuvvfZasmdq3bp1Kdoabky1IEA5+MECGgttLCrBAB4miAB4weDZgyjAwvipp56SatWqqefwu7feeksFGcNiDx5kLAJ1gjiHdw8vGbCIhtCG2MXCE1zhZYcXWy9KUxPAkfob65hAmGDsIDLh8YdgLVOmjOoCFtZo59dff608082aNUvuW9myZdXiE2ISY4BdA0hY8OL3o0aNkhIlSgSI5tTEGuqHAMLiGx5ksILghA0uXbpUiZx58+Yp0QgBGSzEtACGTWPBjXGBpw6/X7Bggdx1113Kc3/ZZZcpz1nwy5XUvvuwa3j6US88otgJACEC8YGysAMA4hF14aVPsEdS2xraBptCfrCEDaFN+B6jbxhj2B7qcJsSKYDRPnghIeSvuOIKZdP4zkFQ4XtwzTXXKBEcS4IYgecc3OHJ79atW/KOAghNeIYhOp1CFvaHdsAGYX+wzbp16yobgADGPIKXHRBxaDPGwZnisQm3XBPVRow97P6dd95RfQUnvDwrX7686hLmELzgg1f4gQceUDts8Bnmkq1bt6odD8iLF5nwroObTvhu4fuJ5/CdxIsWiGHwwbMoDy94tLCOVgDDZuF5xryNuRFiGnM7/rZgXFE+xkiXHyyAE/U3IbXrleKpIxZ7Zx4S8CIBCmAvjir7RAIZkEC8AhhdhlDVW9M0Anj1sNUUXsvnn39ebZFzLqawiMJiBm/9b7jhhhTksHDGQnXhwoUyZMgQdY2I2wRPJ8QFRBi8eM7kFMBYYGG7rtMz47YOPKdFCfL//vvvKTzVuqz7779fLbSxPRPex1AJfcT2Q6cHC4sxeCORHwtNLAQhopwJYhGcsNBFAk+Iep0gNvS2WCxoIZBD9RcLXCyGIQrgzce2xuCEMYEghOCGpxgCBAniEHVCmO3cuVMtoCMlCH99hy8EIAS0mwRPWaVKldSjeDECMaoTRDRefkAUYlyDt3KijxhzlAEmTg8cykD7kfCiAX3C9nRngucW+ZGwRTO1LevBfYFNaq8atgZDPDgT2CK6NewIAhL1OxO2DkN8QDBDRFeoUCHgc2xrxfjhewdbwxEAtyk1pqHa8P7776uXATo586MNEER4EeZMEPX4TiLhJVO00btht3i5hASh2qVLF1fdw4slbKnFcQG0AbYRnDAe4FWwYEH18sRpv/HYhFuusbYRc4L+QZ/wIhBe7uBjBrq/sC/M1XjhiC3qoRJeAOAYQ+vWrdURAp3wfe/du7eyP7yg1N9B/Tm+97Bb/SIuWgGMF6Z4cYExWLlyZcjvHo564IUgUrT3ALv9mxBtuU6GqdXhylj5EAn4gAAFsA8GmV0kgYxAIF4BDEH266+/huwqvLrY9grPMDyAOuHORWyXxdZmbKsLlyBoHn/8cSVWcObXbYKHQy9c4XVyiiunAMZWSniRY01aAGNhDu9dqASBCq8Y/gsvJLwboRLOMEN4wUPz2WefqUfgNYSAx4sCbPUMFj26HHi/4G1CwjN4VieIPngIkfBCAG0JlXQZ4IaFbLiE7ZXbtm1THkbt1UffIA6xGNee7UhM4dmBkMaCE/Xp8YqUDwIPniykqlWrKk+eTlg4wxsNz3u4c74QihAmaCu88s6XAVp0wvsbTqChbrQBwhvnH90mvc0SXrpw52Dx8gHiEAni3Skily1bprboQyDoc5bBdWOcMd6w93AiKFR7U2PqfF63AXbvPJvvzB/8mc6PccZ3Hf+F3UTjoUYZeEmCHR5gktoZ1eD+6TZjt0Fq9/DCFvF9g7DDNnyd4rGJaLnG0kYI0j59+qgzuZhTsWshVNLeaIh7fIfxHQmV8MIRL8rAAPaovx8Qn2DUsWNHtcsmVMLOFn1dXjQCGDYBe8L44kUpXpiGSniB+OWXX6qPohWqbv8mRFuus52p1eF2nuBzJOB1AhTAXh9h9o8EMgiBeAUwvJYQqqESzqPh3Ba8XTjvqRO2s2ELHc6ppbYQxoICW+KwKIW4cSYs9BFMCMITnkCIRO0dcD4Hj5pzK59TAMM7DbETa9ICGN6UUGd3Ue7s2bOV9wkp+HyZs14sTLHtFawgkLCwRQIDiEV9Vi9UW/E5nkMCU6eow6IeAhUJIjNUYDB8hsU6vJDhPnfWi0Uitlc6BZpuJ36PvqANkbYIo11oH+p05kmtDc6+on5dB9qkz+lCFIfzQqfGSp+DDGbo7LtuM8YnlDcxnC25GcfU+qDzp1avHkP03fliIJJ9h2ManE+3IZiv2/wYH/QxtfGJh19wXifPSHbtPLvutJ14bMINl0S0ES8+IPThfQ/n+cfOExxPwPcltRc3+D7qc8sQytgFgRcvEMSYH3BMItwZc5wv1jtHohHAeLmhj0xgZwWC34VK+JuBvx1IoYRqIv4mRBLAsdYR6TvIz0nALwQogP0y0uwnCaRzAvEK4OAgRc7u4rwdAmAFRzyFxxQeC7cJ3jbt4UQebPfFdj4d6EiLOyzStCDC4g0Jghf16+QUwFjQxbr9GeVpAYyFGbYph0rwMsMDHilhC/mDDz6oPIvw4MEjAqGA7YZYlBUvXjzswhULbR34B961YA+w9irC4x5OCMDT7AxeFqm9EH/wwOoEcYOFrA5ght+jLng88ZIDnstg1hBs8Ixqga7zQKjDW4c8wUIWeXQwI3gCtdDDyw/tGcZiOtyLFScrjJ/TE6Z3IwQzdLKA7eEsIl6cRPPyRHu7UxtH1AMhA7tE9FvnzgX0DX3E0YFQkdGRF98ReNHQJ729PNI44vNwTIPzhmtDPPnBEnYTKsGLrcdH88Pvgremh+sjxKve/eCGA54J5huPTbjhEk8bYcvIj+835kJ8X3DGOlR69dVXVVyFaJIWsdjerG093JEVlItz1nprdDQCGGfX9XEClBFupwvq1mfjg4Vqov4mpCaA46kjGu58lgS8TIAC2Mujy76RQAYiYEMAY0vzzz//rCKGIlJztAnbrnHGE4t8LOzgMXAKGXgxtHCKdC1QtHU7nw8XFdf5DPqHSNNI8KDBuxgq6etIsLjHQlYnbEnEoiy1LbdYCOuFempboJ2e8OA2YHEHAYwt0tobEy0btAPbJlEOhI32SqMceC6xxTN4qzP6hueRT+fRi1AIZrRFBzlDOeG2lUIcYos5UmpbbJ2ssE3aaTd6u2swQycHvc0YAhU/bpObcURZ6AP6gi3YToEdbvuxs36IDmylT22bdKj2RrtVN7Ut0MHb0p31heqDc4t+cNuc9cC+MXYQqG4FMOwJggopeEu523GLxybccE1UG/ECCt8xxAMIlXA1EnapYBcKBG00KSMI4LT4mxBPHdHw5rMk4GUCFMBeHl32jQQyEAEbAljXicUaAuZEk3D+FItgJOQNteBDNFJ9BtK2AHZ6nMN5NyD49EIdItG5tVaLhtQEl3OhHa0APvvfc3L67H9l+9YtcmD/PrXVMTjATTTj43wWnkwExcF44N+RzhcjL15eYDs78sCbrD3N2rMfTlQ4hW1qLwv0eWXUhS2jTnEdj9iJxEiPY2rni53nooNFpkkBDM4oP5JQ1OdkEymAI3HTn+uz19Gcb3baSiznjlF3PDbhRgAnqo2YQ/CDa31C7fLQcRfwUgkvm5znnCONAexDX2mV2hZobF/Wwd2i8QC73QKto9SjvU5PbVr8TYi3jkiM+TkJ+IUABbBfRpr9JIF0TsCGAMYVF4jiCnGDgETRbCWF51dHQoaYCXXWEXfS6vtmbQtgbFGElxGLSHirEdQrOEH46K2aELDOs7OJDIIFD/C+o6dkzOIdsmDzPlm+46Bs33/+7DBSoVxJUjp/Vrmu6mVyS+3LpMAF588hx5t04CmUg8BTbqJEwyusI1s7AxPFGwQL0acRTTlUW+IRO5EY6XFM7QWDmyBY4YJMof5YPcB46QBxixT8UkD3y/niwIYAjjUIlvaow2usX5xFGivn5/HYhBsBjLoS1UbMI/iOhzp7j23S+jqkWIL/6SBYOEf8+eefh0SIAFY6unQ0AtgZBAtxIxC1O1RCAC5ExUdyCuB4/yYgUr4+JgOGoV4gxFtHNDbHZ0nAywQogL08uuwbCWQgAjYEMDx8iGSL/yJoCxY14c6mYkECMaQjuOL8p74vFtfB6GtpNHJsqcRiTV9/ZFsAo12IzgoPDM5uYits8ELcKYCx5VcHwEJebGnFYhIJwbGc9yHjd8iLAGH6HG04D/CeY2dl8s7s8sOyv+TUmf9GtNBsWZKkRbVLpWfTClI0X+CVNlh8OreZow2pBbxy9kEL4Eh5nFtDnVGiUxMV2KqJs5CwJeQJvooHbQYrlOGMYq1hxCN2IgHF2Vx91jWUN1LvAsALk1CRjk16gNF27WFFgCTn1VK6X1pc4/9tCGDnC5FotkEj0B1+YBN4kZJatHHsUgh+OROPTaA8fTY/tUjniWpjagIY44Y4A9iRAiGMO21TC0Coz5Lr8ccdwYg2jReOEOzB53TxYgl8kQ8pGgGM5xH/AEENMUciqGHwOXd8bxHDQMcYcArgeP8mYIxQNhLaHypSfrx1RJof+DkJ+IUABbBfRpr9JIF0TsCGAAYSp5cWgU0QTAvb9yCktCBEoCwEmIJnAZ4HLfggnuHFw7k+lFOrVi31GbZE425aeJUhupDSgwDGVUzwzGChi63MOI/Xpk2b5GBVCNiFYFBYnEP8OBeXYIEFIc7TYnEO8YGFKxb0EL3gANEEcYcULIAhHN6euEQ+W3ZEjp85F7U1XpA9s/RtXlk6XFFMCUd4KRElFl57fVYZ/48f/D+2FGuvvD7fi/HQkWT19mq8qEDbsdBFHpyNRp+QB/1BHvQZLwNwrlS/IElNADsFLvJByKFs5MUZSdQHYR1ODMUjdiKBdQpcbEOFiMNCG/aOPmGLJV4IIYUSyKYFMLacw07BBoG6MC5oG8YNdovvEz6DPdoQwOCivcD4N7ZCw6urXxbh3DT4wXacAcBgEzheAFsCd5ytxo4MLXQhUpEHwgf/1S/X9HjGaxNO7y64hnrRl6g2RhLAuKoMwabwHcDLNMxDuINdxyWADeCeYLysw/l47NTRCfMI5lu8YAJfzMuIvYD+4EUkojM7bThaAYzvJthjXsBLMtSNORPfG9wggPLRBv0dcQpg9DuevwmYG/BdhK3jvmPs0gkep3jriDQ/8HMS8AsBCmC/jDT7SQLpnIAtAQwseOPfvXv35Lf6EE7wcGKh47zSCPdOYvubTrj6qG3btupcKZL26mAhgy2m33//ffJZtPQggNFGiFiIXr2tF+ICXm19dQ0WfBCHoe77xeId+TQTLM6QX18hBK+x9ng7vcQ439vr60Uyeml0QW9Cmez1pXJKl5q5JXOmTOpjLDidAtgZpRvtg9jQ44Pnsd0dniftlQ0OfqTzoE/OIFg4E+2Mah1pW2lqrNAO1IO2h7oHNV6xE+mrjgU2tqLq4GDOcdR5IZJCXZdlWgCDO2zUGZEbY6htDMwgftAHWwIYbYGw0iIIzHRkcf0CKJT3HG3GCyZ9pVGofPgd5h9nZHP8Ll6b0N5dbXv6fD/mKWewuUS0MZIARhtwLRvuPteBsMAP8xDmTmfQus6dOwcIYM0C1xxp/ph3MQ9BUOM7ClGMwIZI0Qpg5Pnxxx/l5ptvVnMiEsrEHIJ24YUbrtTTVzAFR2uO528C6kJ/ccZY/z3BCyB8P8Fq8ODB6vfx1hFpfuDnJOAHAhTAfhhl9pEEMgABmwIYeCCc3n77bfWWH4smLFLhtcPiEN6KVq1aKU9D8BZbeHuxIMKCDos3eIRwNVLv3r2VF1S/wU8vAhh9xcIOHutRo0aprZHwOmlPJTwP8Fii7c4t0NqEIH7hodP3HcODhZcFWBjieb3VUke7xQKxz6jl8vWCbQmzwqZlL5Snm5RU3hIsTjVjLFLhGYaoxfihrRAkGDN91zO8dc7tpfg8OI++hxh5YANOD5/uhFMAjx07VtnAJ598knzmG8+hHGzJBCsIOrAAI5QJcRkuEne8YscNaIgUnInG2KNt+H+IIvBE28Jt0TUtgDU3bWMQZBBHaBe+WxBs4doQ6aWE5uKmD24YYlyx4wC2pq8y0wzxUiZUgCfYAAKyaU+vfjmDfBDNsA3YdfB3L16bQL2wRXjQ9XhrcRe8jTjeNroRwKgb39MPPvhAxo0bp64UA08wwMsX7KbBjpzWrVuH5Agv73PPPScTJkxQdowt8wh8hbO7+H7jRUmsAhj5sNUZZ4Dhicb8gPmtRYsWqny8oME2bqRQ1xXF+jdBz83wiGNuxssSfad4p06dlEdcp3jqcGPbfIYEvE6AAtjrI8z+kQAJkIBLAqkFwXJThD4fCUGKs2wQnl/O3ypPjl7uJntUz7zcrqrcVud8FG7bSd8zHSyAo2kXXsBg0R58V3U0ZfBZErBJIN75w2bbWTcJkIC/CFAA+2u82VsSIAESCEsgngUsPCHYHg2vjg7stOPAcWk6ZIYcPXn+XHAi04XZs8jPj12bIjBWIutwWxYFsFtSfM7LBOKZP7zMhX0jARJIfwQogNPfmLBFJEACJGCFQKQFrA7+gu2d2KoIDy+EL7bp4Ywhtgoi6QBYPb5ZIqMX7TDWl3Y1i8rrt1Y3Vr7bgimA3ZLic14mEGn+8HLf2TcSIIGMRYACOGONF1tLAiRAAsYIRFrA4uwizqXphLOZyOM8B1esWDF1VhP3/F754hQ5fTb6iM9uO4grkuY9eX3C7gmOVC/OKr700kvq+hW8AGjYsKH6f1yfNWDAgIAzwDgLjd9PnTpVRX3GywNE/r3xxhvVOUJE4dZJC+hQ9TvP/s2aNUu+/vprwX2hOAOJs5w4r42gZrgaRl/RFakf/JwETBCINH+YqJNlkgAJkEAsBCiAY6HGPCRAAiTgQQKRFrAIKoWAM9jmrKNG68BOCISFYFE68M9Hv26SgT+sNE6pX4vKcn/98wFvTCZECscdoTjffM0116igOPPmzVOBe1q2bCmIEO48A4x7pRHIplq1asn3LUMU46wv8iKokRbBCKKF/HgeAaggknWqX7++igyLVLduXSW+USYCBUEAL1q0SAUlQ9AxtCf4fmaTTFg2CTgJRJo/SIsESIAE0gsBCuD0MhJsBwmQAAlYJpDIBeyD/1koE/6I/9qjSEiaVb1E3ul4/v5lUwl3AeNaJ0SMHj9+vLqzFAkvBO69914ZOXKk+n+nAEbU78qVKwdcJQS+zz//vLprGvk+/vjj5Ca7CYKFiLdXXXWVOmOtE15EPPLIIyqaLrzQzzzzjCkMLJcEUiWQyPmDqEmABEjAJAEKYJN0WTYJkAAJZCACiVzA1n9lmmzff9x474sXyCmznrjOaD0QrLhy5e6771bXRzkTrpUpUaKEOgftNgo0tonDe4srdHRyI4DDdRL3k+L6HHiGFy5caJQFCyeBcAQSOX+QMgmQAAmYJEABbJIuyyYBEiCBDEQgUQvYs/89J2We+inNer7hxWaSOSmTsfpw/zM8uj/99JO6mzQ4tW3bVrCNOVgAQxzj3PAff/yhtkrDg4wET66+k7VAgQLqd24F8I4dO5QXevXq1epcMcYM6dtvv1X35eJ3TCRgg0Ci5g8bbWedJEAC/iJAAeyv8WZvSYAESCAsgUQtYE+cPisV+2L04roAACAASURBVE1MM9KrB94oObJmNlYftj+vWbNGVqxYobY1B6fHHntMhg4dGiCAv/zyS+nSpYscOXIkbLsgehHEyq0Afv3111WwK2y9DpecAcmMAWHBJBCCQKLmD8IlARIgAdMEKIBNE2b5JEACJJBBCCRqAes1D3C0AhhnhsuXL69GfdCgQdK8eXMVARqRo5Fwjnfu3LmyadMmKVmypCsBjABX9erVU+d/33jjDRWBGtG2s2fPrvIjoBaCYVEAZ5Avmwebmaj5w4No2CUSIIF0RoACOJ0NCJtDAiRAArYIJHIB66UzwI0aNZLp06eH3QLdrl07GTNmTLIH+N1335WuXbvK448/Lq+++mqK4YRw3bVrV1QCuHfv3kpMv/XWW/LQQw8FlIkzwIi+DfFLAWzr28N6Ezl/kCYJkAAJmCRAAWySbjooGwuto0ePJl/DkQ6axCaQAAmkUwJZs2ZVd9SWLl1a8G9c+RNrenHmHpmz9Vis2V3nu7pELnny2otdPx/LgxCd77//vrRu3VpFcXamgwcPSpMmTQQidODAgepO3g8//FCGDRsmEK133nlnwPO4/ggRoJEmTpyoPMNIOBN8/fXXS40aNeSzzz5L0UzcFYxrkuD9xZlkZ8I546efflr9avny5bF0kXlIIG4CePmC7fkbN25U35PUturHXRkLIAES8AyBrVu3qpe4O3eavzlCQ6MA9oz5hO5I7ty51R+hMmXKeLyn7B4JkEC8BBIpgL9fdUg+XLg/3iZFzP9ArfzSulKeiM/F88D27duV+IWH65133lFbkZEwt0KYQoAiaQE8adIk6dmzp7qbF1cd5cqVS30Ory/OBUMgIDkFMMqqU6eO5MuXT6ZMmaICWjnTiBEj5LXXXlNbn3EWGGOFtGHDBnVPsI4oTQEcz0gzbzwEKIDjoce8JOBfAvg7hr9phw8fTjMIFMBphtpORViAISF4CxMJkAAJpEYgkVsY9x09JXVfmiqnzpyPUmwiZcuSJPOevF4KXJDNRPEBZb799tvSrVs3SUpKkmuvvVadv8W53P3790uLFi3UXcA6CvSpU6ekZs2aat7Fc1dffbW69giRpKtXr67KnTNnTsAWaPyuVatWKsIz5m3kz5Ytm8oLjzEiSlepUkW9IS9VqpTUrl1b9u3bJzNmzFBe5/nz5wvOHnMLtHFTYAVhCCRy/iBkEiAB/xCwoVUogD1uXzaMyuNI2T0S8CyBRC9ge3yzREYv2mGMV7uaReX1W88LyrRIuOro5ZdflmXLlkmOHDmUEMb/f/XVVzJgwICAKNAQxtiWjCuPEJwKW53bt28vzzzzjDRr1kwJV2cQLLQf26Bxbnjy5MmyZ88edW1Sp06dBN5fJHiisa0aeSGIIYTxOfJglw8FcFpYAesIRyDR8wdJkwAJ+IOADa1CAexx27JhVB5Hyu6RgGcJJHoBu+PAcblhyEw5cvJMwpldmD2L/PzYtVI03/nIykwkQAJ2CSR6/rDbG9ZOAiSQVgRsaBUK4LQaXUv12DAqS11ltSRAAnESMLGA/XL+VnlydOIDM73crqrcVqdEnD1mdhIggUQRMDF/JKptLIcESCD9ErChVSiA0689JKRlNowqIQ1nISRAAmlOwMQCFmdS+4xaLl8v2Jaw/nS4ori8fHPVuKJUJ6wxLIgESEARMDF/EC0JkID3CdjQKhTAHrcrG0blcaTsHgl4loCpBezZ/56Tp0YnRgRD/L7YrqpkTor9iibPDiA7RgIWCZiaPyx2iVWTAAmkAQEbWoUCOA0G1mYVNozKZn9ZNwmQQOwETC5g4Qn++vdt8vyPq2I6E4wzv32bV5IOtYvT8xv7EDMnCRgjYHL+MNZoFkwCJGCdgA2tQgFsfdjNNsCGUZntEUsnARIwRSAtFrAIjPXapDXyw7K/XF2RhKuOWlYrIj2almfAK1MDz3JJIAEE0mL+SEAzWQQJkEA6I2BDq1AApzMjSHRzbBhVovvA8kiABNKGQFouYHFP8JjFO2Thln2yfMdB2bbveHInixfIKVWL5pValxWQdjWKSv40uOc3bQizFhLwLoG0nD+8S5E9IwH/EbChVSiAPW5nNozK40jZPRLwLAGbC1icEz599r+SNXMSz/d61sLYMS8TsDl/eJkr+0YCXidgQ6tQAHvcqmwYlceRsnsk4FkCXMB6dmjZMRIwToDzh3HErIAEPEnAhlahAPakKf2vUzaMyuNI2T0S8CwBLmA9O7TsGAkYJ8D5wzhiVkACniRgQ6tQAHvSlCiAPT6s7B4JGCHABawRrCyUBHxBgPOHL4aZnSSBhBOgAE44UhZow6hInQRIIGMS4AI2Y44bW00C6YEA54/0MApsAwlkPAI2tAo9wBnPTqJqsQ2jiqqBfJgESCDdEOACNt0MBRtCAhmOAOePDDdkbDAJpAsCNrQKBXC6GHpzjbBhVOZ6w5JJgARMEuAC1iRdlk0C3ibA+cPb48vekYApAja0CgWwqdFMJ+XaMKp00nU2gwRIIEoCXMBGCYyPkwAJJBPg/EFjIAESiIWADa1CARzLSGWgPDaMKgPhYVNJgAQcBLiADW8OmTJlkssuu0w2b96c/BD+XapUKWnQoIFMnz6dtkQCvibA+cPXw8/Ok0DMBGxoFQrgmIcrY2S0YVQZgwxbSQIkEEyAC1gKYH4rSCBWApw/YiXHfCTgbwI2tAoFsMdtzoZReRwpu0cCniXABWx0Avj06dOyYcMGyZUrl5QoUcKzdsGOkYAbApw/3FDiMyRAAsEEbGgVCmCP26ENo/I4UnaPBDxLgAvY6ASwZw2BHSOBGAhw/ogBGrOQAAmIDa1CAexxw7NhVB5Hyu6RgGcJcAEbnQAOdwZ4xIgRcu+998qzzz4r9913n/Tp00cmT54sR44cUX/o8fuWLVuGrGzVqlXyyiuvyNSpU2X37t2SL18+adSokfTr1y95kaAznjhxQkaOHCnjxo2T5cuXy19//SXZs2eXatWqSdeuXeW2225LUcc999wjn376qfzyyy9y8uRJefnll2Xx4sVy8OBB2b9/v6qPiQRiIcD5IxZqzEMCJGBDq1AAe9zubBiVx5GyeyTgWQJcwCZWAHfq1EkmTJgguXPnliuuuEK2bt0qc+fOlaSkJPX7pk2bBlQ4duxYJVohTKtXry5ly5aVbdu2yfz58yVnzpwqz7XXXpucZ/Xq1VKpUiUpUqSIVKhQQQoVKiQ7d+6UOXPmCLZnQ2j3798/oA4tgB944AEZPny4aleZMmXUVm6I9Lx583rWvtkxswQ4f5jly9JJwKsEbGgVCmCvWtM//bJhVKaR/vfECdn70UfJ1RTs3FmSsmc3XS3LJwHPE3C1gD13TuTEwYzFIkdekUyZ4mpzNFGgtQcYFfbs2VMGDRqkRC/S0KFD5bHHHpNrrrlGZs6cmdwmeJOrVKkiqGfMmDHSuHHj5M8mTpworVq1kksuuUTWr18v2bJlU5/t3btXeW+vv/56lU+nTZs2yXXXXacEN4RtyZIlkz/TAhi/+Oqrr6RDhw5xcWFmEtAEXM0fxEUCJEACQQRsaBUKYI+boQ2jMo307IEDsrZuveRqyi/4XTJfeKHpalk+CXiegKsF7PEDIq9clrFY9N4ikjO+rb2xCGBckQQvrRasgHbmzBnlqcV2aPzozx599FF544035M0335Ru3bql4Nu9e3cZNmyYjB49Wtq2bRuRP7y78PIiz8MPP5xCADdv3lx++OGHiOXwARJwS8DV/OG2MD5HAiTgGwI2tAoFsMfNy4ZRmUZ6Zv9+WVfvKgpg06BZvu8IuFrAUgAn20WkM8A4B/zxxx+nsKNatWrJokWL5M8//5RLL71UfV65cmXB+d8dO3aoLc3B6bvvvpP27dur88QvvfRSwMe//vqruocYeXEu+Ny5c+o88KRJk5T4hQjWSXuA33//fenSpYvvbJwdNkfA1fxhrnqWTAIkkEEJ2NAqFMAZ1FjcNtuGUbltW6zPpRTACyTzhRfEWhzzkQAJ/EPA1QKWAti1AEbgqueeey6FfTVs2FBmzJgh2KqstyfjKqXjx49HtMXOnTvLhx9+qJ5D4Kp27drJtGnTwuaD4P3kk09SCGCcJ77xxhsj1scHSMAtAVfzh9vC+BwJkIBvCNjQKhTAHjcvG0ZlGikFsGnCLN+vBFwtYHkG2LUADhWECplDCeAcOXKo4FcInJVaql+/vkAEI/373/8WeHIbNGggAwYMUGeIEcU5c+bMyvt7ww03qPJwJlknZxRotIOJBBJFwNX8kajKWA4JkIBnCNjQKhTAnjGf0B2xYVSmkVIAmybM8v1KgAvY8CMfyxngaAQwIj4jYNXff/8tBQsWdGWChQsXVoGw9u3bJ3ny5AnI895778mDDz5IAeyKJB9KBAHOH4mgyDJIwH8EbGgVCmCP25kNozKNNFgAV1i4QJIu4BZo09xZvvcJcAFrTwBDrEK0Ynuz9vBGsjgE0LrwwguVAA5OiAKNu37pAY5EkZ8nigDnj0SRZDkk4C8CNrQKBbDHbcyGUZlGembfPll31dXJ1VAAmybO8v1CgAtYewIY1xtVq1ZNRYVG4Cyc7XUmbI8eP3681K1bV4oVK6Y+wpbnFStWpLjOaMiQIdKjRw/1DAWwX7699vvJ+cP+GLAFJJARCdjQKhTAGdFSomizDaOKonkxPZpCAC9aKEm5csVUFjORAAn8jwAXsPYEMGr+/vvv5Y477pBjx44JtkRXqlRJLrjgAhXdGVGjjx49qu79rV69umroyJEj5c4771T/xr3CEMZLly5VVy/h2iQIYQpgfsPTigDnj7QizXpIwFsEbGgVCmBv2VCK3tgwKtNIz+zdK+uurp9cTQUKYNPIWb5PCHABa1cAo3acA3799ddl8uTJsm3bNsmaNau6FqlGjRrKK9y6deuAe4V/+uknGThwoPIEI/jVFVdcIX379lVXITVq1IgC2Cff3fTQTc4f6WEU2AYSyHgEbGgVCuCMZydRtdiGUUXVwBgeTiGAFy+SpJw5YyiJWUiABJwEuIClPZAACcRKgPNHrOSYjwT8TcCGVqEA9rjN2TAq00jP/P23rKt/zf88wBTAppGzfJ8Q4ALWJwPNbpKAAQKcPwxAZZEk4AMCNrQKBbDHDcuGUZlGmkIAL1ksSTlymK6W5ZOA5wlwAev5IWYHScAYAc4fxtCyYBLwNAEbWoUC2NMmJWLDqEwjpQA2TZjl+5UAF7B+HXn2mwTiJ8D5I36GLIEE/EjAhlahAPa4pdkwKtNIz+zZI+uuuTa5mgr0AJtGzvJ9QoALWJ8MNLtJAgYIcP4wAJVFkoAPCNjQKhTAHjcsG0ZlGmkKAbx0iSRlz266WpZPAp4nwAWs54eYHSQBYwQ4fxhDy4JJwNMEbGgVCmBPm5Q3t0Cf3r1b1l/b4H8eYApgj1sxu5dWBLiATSvSrIcEvEeA84f3xpQ9IoG0IEABnBaUfVaHDaMyjTiFAF62VJKyZTNdLcsnAc8T4ALW80PMDpKAMQKcP4yhZcEk4GkCNrQKPcCeNimPeoB37Zb1DRweYApgj1sxu5dWBLiATSvSrIcEvEeA84f3xpQ9IoG0IEABnBaUfVaHDaMyjfh0kACuuGypZKIH2DR2lu8DAlzA+mCQ2UUSMESA84chsCyWBDxOwIZWoQeYRpXhCJzetUvWN2iY3G4K4Aw3hGxwOiXABWw6HRg2iwQyAAHOHxlgkNhEEkiHBCiA0+GgZPQm2TAq08xSCODlyyRT1qymq2X5JOB5AlzAen6I2UESMEaA84cxtCyYBDxNwIZWoQfY0ybl1TPAQR5gCmCPWzG7l1YEuIBNK9KshwS8R4Dzh/fGlD0igbQgQAGcFpR9VocNozKN+PTOnbK+YaPkaipSAJtGzvJ9QoALWJ8MNLtJAgYIcP4wAJVFkoAPCNjQKvQAe9ywbBiVaaQpBPAfyyVTliymq2X5JOB5AlzAhh/i119/XX799VdZvny57N69W06cOCGXXHKJNGjQQHr16iVVq1ZNuH3cc8898umnn8ovv/wiDRv+L+5BwiuKo8ARI0bIvffeK88++6z0798/jpKYNaMT4PyR0UeQ7ScBOwRsaBUKYDtjnWa12jAq0507/ddfsr7Rdf/zAFMAm0bO8n1CgAvY8AN90UUXydGjR6VatWpStGhR9eCKFStk7dq1kjVrVhk9erS0aNEioZZCAZxQnCzMMAHOH4YBs3gS8CgBG1qFAtijxqS7ZcOoTCNNIYBX/CGZMmc2XS3LJwHPE+ACNvwQz549W2rVqiU5cuQIeOidd96Rhx56SAoXLizbt2+XLAncjUIB7PmvnKc6yPnDU8PJzpBAmhGwoVUogNNseO1UZMOoTPf09J9/yvrrrk+upiIFsGnkLN8nBLiAjW2gy5YtKxs2bJClS5cqD3GiEgVwokiynLQgwPkjLSizDhLwHgEbWoUC2Ht2FNAjG0ZlGmkKAbxyhWRKSjJdLcsnAc8T4AI2tiGuVKmSrF69WlatWiUVK1ZMLqRkyZKyZcsWAde33npLhg8fLuvWrZPy5cvLkiVLkp/7+OOPZdiwYbJmzRrJmzev3HjjjfLyyy9Lnz59YjoD/Pnnn8v7778vy5YtkzNnzggE+u233y6PPfZYCg+2U2SfPHlS1bt48WI5ePCg7N+/X/Lly6faCQ84zvn+9ttvkjlzZrnyyivlueeeU30OdwYYdX/44Yfy2Wefqe3ip0+flgoVKgjq7NatWwpvuVtesY0Sc5kmwPnDNGGWTwLeJGBDq1AAe9OWkntlw6hMIz29Y4esv75xcjUVKYBNI2f5PiHABWz0Aw2x2alTJyUyIQYhDnXSgq5Lly7yySefqIBZBQsWlFOnTqkzw0gQua+88oo6R9yoUSMlgGfMmKGE6uWXXy7jx4+PKgjWv/71L/nggw9U/uuuu05y5col06dPl7///lvq1asnU6ZMUb/TSQvgBx54QAn0K664QsqUKaM82pMnT1bt+eGHH6Rt27ZKTNepU0dKly6tvN14BvlRX3AQrOPHj0vz5s1V2wsUKJC8fRwCGkHEWrVqJWPGjJEkx8tLN7yiHyHmSCsCnD/SijTrIQFvEbChVSiAvWVDKXpjw6hMI00hgFetlEyZMpmuluWTgOcJcAEbeYhfffVV5c1EQCwIXvy7SJEiMm7cOCXynEkLOgTQggjV87F+Zt68eXLVVVdJnjx5lFCsUaOG+ujIkSPSunVrmTZtmvp/t1GgR40aJbfccotqD+orV66cyg9vLgJ0IYp1z549ZfDgwSkEMH7x1VdfSYcOHQL6cPjwYSWI9+zZI/BUw9uLdO7cOXnyySeVeEcKFsA4F43z0SgP3mgIaSSUd9ttt8lPP/0k7777rvz73/9Ori8Sr8ijwydsEuD8YZM+6yaBjEvAhlahAM649uKq5TaMylXD4niIAjgOeMxKAqkQcLOAhfA5fPpwhuKYO2vuhL0ka9y4sUydOjW5/5dddpna4nvttdemYKIFHUTz448/nuJzeI6R95lnnpEBAwYEfL5y5UqpUqWKEppuBTA8zDNnzlSCE15nZ8J26OrVq8sFF1ygxKwO5qU9wPDWwtMbnOC5vu+++1T/4Jl2JmxphjcYwb+cAhge3mLFiqlrorCtO2fOnAH5du7cKeCG7eLwJOsUiVeGMjofNtbN/OFDLOwyCZBABAI2tAoFsMfN0oZRmUZ6avsO2dDYsQWaHmDTyFm+Twi4WcAeOnVIrv7y6gxFZPbtsyVPtjwJbfOBAwfUncA4B4ttxc8//7w8/fTTAXVoQQcRiHO/wQnicdOmTQKxi3PEwQkeYZwVdiOAIUYvvPBCtb0aHmQI3eAEAQzBOXfuXKlbt676WAvgUKIZn0P8QgTDm/vggw+mKBPniocOHRoggL/55hvl+cW2amyPDpUg7tFveNK1QI7EK6EDyMISTsDN/JHwSlkgCZBAhidgQ6tQAGd4s0m9AzaMyjTSYAFcafUq01WyfBLwBQE3C1gK4EBTgPDE2dpFixapAFG1a9dOfkALOpyHDb4+CQ/hdwg8BRHoPJerC8C527Fjx7oSwPCqXnrppYLt1vDwhkpt2rSR77//Xr777ju5+eabAwTwhAkTVPCt4ITf/fzzz/Ljjz9Ks2bNUnz+xhtvyKOPPhoggAcNGiS9e/d29Z2B91jfqxyJl6sC+ZA1Am7mD2uNY8UkQALploANrUIBnG7NITENs2FUiWl5+FJObd8uGxo3SX6AAtg0cZbvFwJuFrAUwCmtAVucn3jiCenXr5/yCOukBR22MYdKaS2AtaAOJYDDeZljEcCIJI3zwfA4I5BXagnnkSHakSLx8sv3MKP20838kVH7xnaTAAmYI2BDq1AAmxvPdFGyDaMy3XEKYNOEWb5fCbhZwPr9DHAo29DnZBHQCYGd3ArgUqVKyebNm8Nuga5Zs6a6kihRW6D1lupQW6DD1YGgVyNGjAi7BbpHjx4yZMiQAA/wf/7zH7nrrrvUVUdvvvmm668TBbBrVOnyQTfzR7psOBtFAiRglYANrUIBbHXIzVduw6hM9+rUtm2yoUnT5GroATZNnOX7hQAXsLGNtD5HGxzsKpKgu/vuuwXXKPXv318JSGfCvcKVK1eOKQgWrjO6//77A8r7448/pFq1amGDYIUTwIj8jLIaNmyohLgz4VokRIjeunVrgADesWOHCnJVvHhxWbt2rbriyU2KxMtNGXzGHgHOH/bYs2YSyMgEbGgVCuCMbDEu2m7DqFw0K65HAgRwpkxSadXKuMpjZhIggfMEuIANbQmzZ89W1/c0bdo04N5anP9977331BnY7Nmzq4jHEH06RRJ0c+bMkauvvlry5cunri3S24VxJhjndRFcC8mNBxjPYWtz+/btVQRmRGxGkC0ktL1ly5bqd+GuQQpXB/LCU713717lCUbkaiTsBOjbt6+8+OKL6v+Dr0FCFOoPP/xQnTV+++23pXDhwgFw169frwJy6bPI+DASL35P0zcBzh/pe3zYOhJIrwRsaBXPC2C8tQ6+usFpAOECf+gtX4hSmS1bNhUxE3/scWdjuIRF0gsvvCC42xGROPH2HlvA8JY/XEIAEJwbQ5CRffv2SYkSJeT2229X56dCBU2J1nhtGFW0bYz2eQrgaInxeRJwR4AL2NCc8PcAW4FxVhV3/RYsWFD+/vtvFQX6r7/+UnP1p59+KrfeemtAAW4EXa9evdS9vPCSXnfddeq+XPzNgqCGIB4/frxrAYzK//Wvf6nIy4isjPIQXAviGoGx8HcMVzg5A25p73VqIhuBsyBUz549K1deeaUS1hCv69atU1GkIXSDBTACf+Eu48mTJyuvM84D4+8bxD3+rkIA43ME+dLJDS93lsynbBDg/GGDOuskgYxPwIZW8Y0Axh9vXBERnPA2vGrVqgG/xtt8RLbEAgJv/E+cOKEWDXjjjTfseDMfnEaNGqWufcAfANyXiIUS8uCqjOA37jovFgCIHoqFFK6EgGBesGCBbNy4UXkFkB+LoHiSDaOKp71u8p7aulU2NL3h/KP0ALtBxmdIwBUBLmBDY8JVRdhWDGGK+RlzNl6MQrBBZD7yyCNStmzZFJndCjqUjbOy8CBDAOPvziuvvCJPPfWUEtZuPcC6AdhWDc807v7V25TvuOMOwZVFwXfyuhHAKHfWrFlK5M6fP18yZ86sol0PHDhQtRkvB4IFMPJAMI8cOVL1Adc5wZt88cUXq+3RCK512223BVwP5ZaXK2PmQ2lOgPNHmiNnhSTgCQI2tIpvBDAWMPjjGilhy1mTJk3UG34ECilXrpzKgn/Dm4w35ygLW9Z0gucWW8QOHTokEMLt2rVTH+3atUvq16+v3nSHWsDgM3iNsXiC4EbCYgVehDFjxoRcUERqf/DnNowq2jZG+3yAAE5KkkorV0RbBJ8nARIIQYALWJoFCZBArAQ4f8RKjvlIwN8EbGgVCuAgm8M9h9gWjaiW8AQ7U/fu3WXYsGFquxq8ujrpOw+Dt3PhcwhZCOIWLVqorWw64S06tpIVKlRIBRBxenohnHGODB7r3bt3S5YsWWL+Ztgwqpgb6zLjqS1bZMMN/9xXSQHskhofI4HIBLiAjcyIT5AACYQmwPmDlkECJBALARtahQLYMVI4s5Q/f345efKkbNu2TQUScSZsAcP25gYNGqgzVTrh/2fOnKmied55550BeXAWGFvakPbv3598rhfbxXBfJKJrYvtbcLr++utl2rRpUW99Cy7HhlHFYvzR5AkQwJkzS6UVf0STnc+SAAmEIcAFLE2DBEggVgKcP2Ilx3wk4G8CNrSKbwQwAlghimVSUpI6c4RzvAjI4Uw4o4R7EnFGCZ7X4ITgHfDKQiRj27NO2A598OBBWbFihTrHG5xwVgpnexE0BNdQIKF+BBZBdMyuXbumyKMDo2BrNLZIx5psGFWsbXWb79TmzbLhxpvOP04B7BYbnyOBiAS4gI2IiA+QAAmEIcD5g6ZBAiQQCwEbWsU3Ajh4QBBxE9GX8aPTuHHjVFRKiOBFixaFHEOIXwS2wnnf3Llzq/9qDy9EcJ48eVLka9u2rYp0ifJxFQVSzZo1ZfHixUoEt2rVKkUeCF9swe7Ro4e89tprsdiTymPDqGJurMuMAQI4Sxap9Mdylzn5GAmQQGoEuIClfZAACcRKgPNHrOSYjwT8TcCGVvG8AH7mmWeUxxfXF1166aVqazMiOT///POCLc9Dhw4VnO1F+uKLL6Rjx44qAvOvv/4a0hqxLXrHjh3qp0iRIvLnn39K0aJF1bO4EzLUeV1si0YkTPwgEicS2oQrJHBFROPGjVPUhW3RDzzwgPrBlRaRkjae4Oc2bNggZcqUUd5pr6STmzbJxpuane8OBbBXhpX9SAcEuIBNB4PAJpBABiXA+SODDhybTQKWCVAAp+EATJo0SW644QYVzRkiFldDUACn4QDEUVWAAM6aVSotTrDHUgAAIABJREFUXxZHacxKAiSgCXABS1sgARKIlQDnj1jJMR8J+JsABXAaj78+m6uvKOIW6DQegBirowCOERyzkUAEAlzA0kRIgARiJcD5I1ZyzEcC/iZAAZzG44/tyF9++aXy/N5+++3CIFhpPAAxVndy4ybZ2OyfLdD0AMdIkdlIICUBLmBpFSRAArES4PwRKznmIwF/E6AATuPxv+mmm2TixInJgaic1yBt3749+WyvblYs1yDhXLAOjMVrkBIzwE4BnClrVqnILdCJActSfE+AC1jfmwABkEDMBDh/xIyOGUnA1wQogNNw+Pfs2SOlSpUSXG3kvPO3WbNmMmHCBBkyZIiKwuxMCJY1bNgwGTx4sPTs2TP5o0GDBknv3r1VBGlEe3amMWPGSLt27aRFixYyfvz45I/mz58vV155pRQqVEi2bt0q2bNnT/5s165dUrx4cXXlEv6NiNWxJhtGFWtb3eY7uXGjbGzWXD1OAeyWGp8jgcgEuICNzIhPkAAJhCbA+YOWQQIkEAsBG1rF01Gg58yZo+7zxdVDmTNnTh6TzZs3CyIzz549W11BhKuIdJoyZYo0adJEChYsKHPnzpVy5cqpj/DvRo0aqWBZmzZtUsGzdMKdwBDTuBJp1KhRSvAioW5ElF6/fr3oc8ZOw6hfv75qA4Q1olEjnTlzRjp06CCjR4+WZ599Vvr37x+LLSXnsWFUcTXYReYAAZwtm1RcttRFLj5CAiQQiQAXsJEI8XMSIIFwBDh/0DZIgARiIWBDq3haAI8YMULuvfdeueSSS9S9uxCtW7ZskYULF8qJEyfUHbnTpk1TXlhngucX9/DmypVLieFTp06p64rOnTunrlBq06ZNivGF8L311lvVMw0bNlQCGmIadwaHu8sX1yDVq1dP9u7dK1WrVpXKlSvL77//Lhs3blTXNqFtTs9wRjGqWNoZTZ6TGzbIxuYtVJZMFMDRoOOzJJAqAS5gaSAkQAKxEuD8ESs55iMBfxOgAE7w+K9atUrefPNN+e2339Q2Z5zBveCCC6RSpUrSvn17efDBB5VHN1SCeH7rrbcEZWTLlk3q1q0r/fr1U8I0XII3F/cLz5s3T4lmCNpu3bpJp06dwuZBu3BXMc4iw5NcokQJFZDrqaeekhw5csRNxIZRxd3oCAUECODs2aXi0iWmq2T5JOALAlzA+mKY2UkSMEKA84cRrCyUBDxPwIZW8bQH2PMW46KDNozKRbPieuTk+vWysUVLVUYmCuC4WDIzCTgJcAFLeyABEoiVAOePWMkxHwn4m4ANrUIB7HGbs2FUppEGCOAcOaTiksWmq2T5JOALAlzAhh9mHJ3BURgEMMTPjh071MM49hIpYUfRO++8IytXrkzeUdS3b99UdxSFKxNxIQYMGCCffPKJ3HPPPZGqTpef45jQjBkzVDyNkiVLpss2slHRE+D8ET0z5iABEhB1JBVpxYoVaYaDAjjNUNupyIZRme4pBbBpwizfrwS4gA0/8oj94AyYqJ+MJIB1TAkct2natKmKPzF16tSwMSUgaj/99NOQgRNRJwWwX7+d6b/fnD/S/xixhSSQHgnY0CoUwOnREhLYJhtGlcDmhyzq5Lp1srFlK/VZJnqATeNm+T4iwAVs+MF+5ZVX1LV5tWvXVj/wXJ48eTJVD3BqtwrAC4pAi8G3ClAA++gL57Gucv7w2ICyOySQRgRsaBUK4DQaXFvV2DAq030NEMA5c0rFxYtMV8nyScAXBLiAdT/MCFIYSQDHcq88BbD7MeCT6YsA54/0NR5sDQlkFAI2tAoFcEaxjhjbacOoYmyq62wn1q6VTa1an/cAUwC75sYHSSASAS5gIxH63+eRBPDx48clf/78SiQj2n+xYsUCCp81a5Zce+210qBBA5k+ffr5+SxTprAN0OdlnVuga9WqJU8//bSgLNw8cMUVV8hLL70U9dliXMX38ssvy9ixY1Vb4ZmuU6eOusIP27aDE9p52WWXydq1a1W+L774Qnmyb7rpJlUG0tmzZ2XIkCEyfPhw2bx5s1x88cXSrl07GThwoLRq1SrsGWDUD2/7hAkT1DlrtAW3L+BmhOBbGMCtUaNG6qYFtAPnqnGjws6dO2Xw4MGC7edMaUeA80fasWZNJOAlAja0CgWwlywoRF9sGJVppAECOFcuqbhooekqWT4J+IIAF7DuhzmSAF6yZInUqFFDCb/du3enKBjbqS+88EIlknEFHhK8v7/++qts2LBBbrjhBnWHvU4QdBdddFHyGeCHHnpIBcIqU6aMunJv9erVsnTpUnV9Hu6Tr1KliqvOQGRCiOP+eVzDh7vp9+zZowQqROzrr78ujz32WEBZEMDFixdXdcycOVOJeFwxWLBgQXn33XfVs7jO76uvvlIC9vrrr5csWbKou+3Lli0rWbNmVdcFBgfBmjt3rjRv3lxdWVihQgUVGAVtwe9x1nrkyJHSoUOH5LZoAQxP+7Jly+TMmTNSv359dc66ZcuW0qVLF1cM+FBiCHD+SAxHlkICfiNgQ6tQAHvcymwYlWmkJ9aslU2t//EAUwCbxs3yfUTAzQIWQuS/hw9nKCpJuXOn6l2NpTORBPC4ceOkdevWSgQvWhT6mAbE74EDB+TQoUOSO3fuZBHsJggWHn7jjTfkkUceSW4+hOrQoUPlrrvuks8++8xVtyAUf/jhB7njjjuUoMa990gQ4hDh8GAvWLBAqlevnlye9lRDzEKEFi1aNKCur7/+Wm677TYlqCGkdaRnvAiAGP7jjz/U804BDAYVK1ZULwvQ/44dOyaXifrhiT59+rQS6nipgKQFMP7dtm1b5YnGuDDZIeBm/rDTMtZKAiSQngnY0CoUwOnZIhLQNhtGlYBmp1qEUwAn5colFegBNo2c5fuEgJsF7NlDh2RtnSszFJHy83+TzHnyJLTNkQQwxBhE3NVXX63EZKiEbdHwwOKnSJEi6hG3Z4BDlYutzPASY3syth1HShCT8CDDE71lyxYpUKBAQJaePXsqD3Dnzp3lww8/TCGAv/32W7nllltSVAOPMDzDH3/8sdx7770Bn2OLMrZKIzkFMIQ7BDzqhLc7OGE7NbZkOz3SWgBnz55dec2DhXik/vPzxBJwM38ktkaWRgIk4AUCNrQKBbAXLCeVPtgwKtNIT6xZI5tat1HVUACbps3y/UTAzQKWAvi8RdgWwLgL+JlnnklhntiGfOTIEeW5jZTgJcb5WYhYiNngpLdxYzsytljrBA8wfnDOGeLTmeClhaDGmWRs88YW6OAEoY1tzk4BrAOGzZ49O+QZZniBEX0bnuUvv/xSFakFMLZtz5kzJ1J3+blhAm7mD8NNYPEkQAIZkIANrUIBnAENJZom2zCqaNoXy7MBAviCC6TCwgWxFMM8JEACQQTcLGApgM9DiySATW+B/uijj+S+++5LYcPYbgxvbqT7iZERgaOefPJJefzxx+XVV19NURa2Z2ObNgTtYce2d4jfwoULq2BTwQm/u/TSS8Oefcbz2BYOce0UwDjHvGrVqojfycaNG8vkyZMDBDDOBeO8MZNdAm7mD7stZO0kQALpkYANrUIBnB4tIYFtsmFUCWx+yKIogE0TZvl+JeBmAcszwO4EcCxBsFCy2y3QOK+LZ4NTIgXwwYMHJV++fCEFcLht1rEKYJz/XbNmjfJGI6BWuITn+vTpEyCA4cUeMWKEX7+26abfbuaPdNNYNoQESCDdELChVSiA083wm2mIDaMy05P/lXpi9WrZ1Kat+kUSPcCmcbN8HxHgAtb9YEfyADuvQdq+fXuK86mhrkFKawGst0C3b99evvnmmxSdR1RpBL8KtQU6nAB2boE+duyY5MyZM0W52KaNyNdODzA8u1OnTlUBt3C9k5vkvAaJAtgNMbPPcP4wy5elk4BXCdjQKhTAXrWmf/plw6hMIw0QwBdeKBUW/G66SpZPAr4gwAWs+2GOJIBRkj7XigBOwXfSdu/eXYYNG6YCPiHwk064ugcBp7DNF6IwODnvAY7XA6yDYCEC9datW5W315l69eql2hcqCFZqgbZwrRIEPkQpvLPONGnSJBVdGskpgHH3Lzy7uNf4+eefdzUQFMCuMKXZQ5w/0gw1KyIBTxGwoVUogD1lQik7Y8OoTCM9sWqVbGrbTlWTRAFsGjfL9xEBLmDdD7YbATxlyhRp0qSJuh8Xd9mWK1dOVYB/N2rUSHlHIQKdwlML3Lfeektw169JAYyyW7RoIT/++KPcfffdMnz4cHVHr24j2o47dUNdg5SaAEaQKlyrhGcQDRrXISH9/fff6hok3NkbLIBx3hieZgTHQt8hupOSkpK7jzt+4SFGpGd9xzEFsHt7TYsnOX+kBWXWQQLeI2BDq1AAe8+OAnpkw6hMIw0QwLlzS4Xf55uukuWTgC8IcAEbfpghEgcOHJj8wPz581WgqSuv/N+VUP369ZPmzZsHFALPL+7rRTRkCEpER4Z3F3m/++47adPmfER7nRYuXKiiHSO6MjyluNYICR5SCOlEeoBRLq5guuaaa5QQh2BFROU9e/aoCMtnz56V1157TV0/5EwIghXpqqVbb71VRZbGeV6I3ixZssi0adOkdOnS6q7hefPmBXiAUT5+h3uJIZSLFy+uhC6CcOFcMe5ShkgeM2ZMMjMK4PQ1LXH+SF/jwdaQQEYhYEOrUABnFOuIsZ02jCrGprrOdmLlStnU7mb1fBIFsGtufJAEIhHgAjY8IWznDb7TNvjpcIGpkBdeTUQ5hvirW7euQCxfddVVISvEHcIQnngeZ4mR9HbhRAtglI37g1966SUZO3asbNu2TYn1OnXqqK3ZTZs2TdFGNwIYHlvc2Yto1biTGEIeYv/FF1+U1q1by4wZM1IIYFQEsYst43jhgD4jIao0xHDbtm3l5ptvVkG5kCiAI32j0/Zzzh9py5u1kYBXCNjQKhTAXrGeMP2wYVSmkQYI4Dx5pML830xXyfJJwBcEuID1xTCzkyRghADnDyNYWSgJeJ6ADa1CAexxs7JhVKaRHl+xQjbffIuqJokC2DRulu8jAlzA+miw2VUSSDABzh8JBsriSMAnBGxoFQpgjxuXDaMyjTRAAOfNKxV+m2e6SpZPAr4gwAWsL4aZnSQBIwQ4fxjBykJJwPMEbGgVCmCPm5UNozKNlALYNGGW71cCXMD6deTZbxKInwDnj/gZsgQS8CMBG1qFAtjjlmbDqEwjPf7HCtl8yz9boOkBNo2b5fuIABewPhpsdpUEEkyA80eCgbI4EvAJARtahQLY48Zlw6hMI3UK4Mx580p5boE2jZzl+4QAF7A+GWh2kwQMEOD8YQAqiyQBHxCwoVUogD1uWDaMyjTS48v/kM3t26tqKIBN02b5fiLABayfRpt9JYHEEuD8kVieLI0E/ELAhlahAPa4ddkwKtNIAwRwvnxSft5c01WyfBLwBQEuYH0xzOwkCRghwPnDCFYWSgKeJ2BDq1AAe9ysbBiVaaTHly+Xze1vPe8BpgA2jZvl+4gAF7A+Gmx2lQQSTIDzR4KBsjgS8AkBG1qFAtjjxmXDqEwjDRDA+fNL+blzTFfJ8knAFwS4gPXFMLOTJGCEAOcPI1hZKAl4noANrUIB7HGzsmFUppFSAJsmzPL9SoALWL+OPPtNAvET4PwRP0OWQAJ+JGBDq1AAe9zSbBiVaaTHly2Tzbd2UNVkpgfYNG6W7yMCXMD6aLDZVRJIMAHOHwkGyuJIwCcEbGgVCmCPG5cNozKNNEAAFygg5efMNl0lyycBXxDgAtYXw8xOkoARApw/jGBloSTgeQI2tAoFsMfNyoZRmUZ6fOlS2dzhtvMeYApg07hZvo8IcAHro8FmV0kgwQQ4fyQYKIsjAZ8QsKFVKIA9blw2jMo00gABXLCglJ/9q+kqWT4J+IIAF7DhhzlTpkyp2kCDBg1k+vTp6pkzZ85I1qxZpUyZMrJ+/fqE2M7w4cPlgQcekPvvv1/w70ipfv36Mnv2bNm2bZsUK1Ys0uP8nATiJsD5I26ELIAEfEnAhlahAPa4qdkwKtNIjy9ZIptvu11Vk5kC2DRulu8jAlzARhbAnTp1CvlQxYoVpU+fPqkK4ClTpkiTJk1ci1hnRRTAPvoiZtCucv7IoAPHZpOAZQI2tAoFsOVBN129DaMy3acAAXzRRVL+11mmq2T5JOALAlzARhbA586dc2ULq1evlmzZsknp0qWTn09LAbx161Y5duyYlC1bVrJkyeKqzXyIBOIhwPkjHnrMSwL+JWBDq1AAe9zebBiVaaTHFi+WLbffoarJTAFsGjfL9xEBLmATJ4BDlZSWAthHZsuuphMCnD/SyUCwGSSQwQjY0CoUwBnMSKJtrg2jiraN0T4fIIAvvkjKz6IHOFqGfJ4EQhHgAjYxAjjUGeA777xTRo4cGbKCgQMHSt++fVM1ykRsgXa2a82aNTJo0CD5+OOPBd7iwoULS8eOHWXAgAHKcx2cjh49Km+88YZ88803sm7dOklKSpIqVapI165d5a677uIXigSE8weNgARIIBYCNrQKBXAsI5WB8tgwKtN4KIBNE2b5fiXABaw5AfzBBx/IqFGjZNKkSVKuXDm56qqrkiu7+eabpWXLlmkmgLEtu0aNGqotDRs2FGzrnjlzphw6dEhwxnnEiBEBbdm5c6c0btxYVqxYIZdeeqnUrFlTzp49K3PnzpWDBw/Ko48+KkOGDPHr14b9/ocA5w+aAgmQQCwEbGgVCuBYRioD5bFhVKbxHFu0WLbc8c8WaHqATeNm+T4iwAWsOQGMktNyC3SoKNDaA4y2wHuL9sDzi7Rx40Ylig8fPiybNm2Syy67LBnGDTfcoMRyjx495MUXX5Ts2bOrz/766y9p0aKFLFq0SCZPnqxEMpN/CXD+8O/Ys+ckEA8BG1qFAjieEcsAeW0YlWksTgGc5eKLpdysmaarZPkk4AsCbhaw8BbC65eRUt68eSXSNUaR+hMpP0RjyZIlVTHhrkFKTwL4l19+Ud5fZ3rwwQflvffek88//1ywZRtpwYIFUrt2balXr566VimYw++//y516tSRdu3aKQ83k38JuJk//EuHPScBEghHwIZWoQD2uD3aMCrTSI8tWiRb7uioqqEANk2b5fuJgJsF7IEDByR//vwZCsv+/fslX758cbVZC79w1yANHjxYLrroogwhgOHBRYRonON1JmxjhpcXZ4N79eqlPoLH9+mnn5ZXXnlFnnjiiRQM8ULkggsukIIFC6o7h5n8S8DN/OFfOuw5CZAABTBtIM0IeF4AFyok5WbOSDOerIgEvEzAzQLW7wLYzTVI6d0DXKpUKbXlOTjpQFvOoFxdunSRDz/8MKLZ58iRQ44fPx7xOT7gXQJu5g/v9p49IwESiJWADa1CD3Cso5VB8tkwKtNoji1cKFs6nt+el4UC2DRulu8jAm4WsBTAke8BTu8CuEyZMrJ+/XpXArhz587y0UcfyTXXXBNwp3Fw5syZM6vnmPxLwM384V867DkJkEA4Aja0CgWwx+3RhlGZRhoggAsXlnIzppuukuWTgC8IuFnA+v0MsBc8wNEI4P79+6urkYYOHSrdu3f3xfeAnYyNgJv5I7aSmYsESMDLBGxoFQpgL1uUiNgwKtNIjy1YIFvuPH/vZBYKYNO4Wb6PCHABG36w9RngeAQwrhpq0KBByKuGIplZou8BdusBRuArRJRGu6dP58vGSOPk5885f/h59Nl3EoidgA2tQgEc+3hliJw2jMo0mAABfMklUm76L6arZPkk4AsCXMCaFcAQnbgDuG7duuoO3WiSLQGMNl533XWCqNEPP/ywvPDCC5I7d+6Api9ZskR2794tTZs2jaZLfNZjBDh/eGxA2R0SSCMCNrQKBXAaDa6tamwYlem+UgCbJszy/UqAC1izAhilY05euXKlXHnllVKpUiXB2dm2bdtK8+bNUzU7LYAvvvjiVM/ijh8/XvBMavcAR7MFGo3atWuX4C7gpUuXqgjgl19+uRQpUkRwHnzZsmWyfft26dmzpyASNpN/CXD+8O/Ys+ckEA8BG1qFAjieEcsAeW0YlWksx37/XbbcdbeqJgs9wKZxs3wfEeAC1rwAXrt2rbpiCFuL9+3bJ9hS7Yy6HK4FWgBHMkdcRVSsWLGECmDUeeLECXn//ffl66+/VgIeEZ8LFy4sENMtWrSQ2267TYoWLRqpefzcwwQ4f3h4cNk1EjBIwIZWoQA2OKDpoWgbRmW63wEC+NJLpdwv00xXyfJJwBcEuID1xTCzkyRghADnDyNYWSgJeJ6ADa1CAexxs7JhVKaRHp0/X7be3UlVk4UC2DRulu8jAlzA+miw2VUSSDABzh8JBsriSMAnBGxoFQpgjxuXDaMyjTRAABe5VMpNowfYNHOW7w8CXMD6Y5zZSxIwQYDzhwmqLJMEvE/AhlahAPa4XdkwKtNIj/42X7Z2+scDTAFsGjfL9xEBLmB9NNjsKgkkmADnjwQDZXEk4BMCNrQKBbDHjcuGUZlG6hTAWYsUkbLTppqukuWTgC8IcAHri2FmJ0nACAHOH0awslAS8DwBG1qFAtjjZmXDqEwjPTrvN9l6zz2qGgpg07RZvp8IcAHrp9FmX0kgsQQ4fySWJ0sjAb8QsKFVKIA9bl02jMo00gABXLSolJ06xXSVLJ8EfEGAC1hfDDM7SQJGCHD+MIKVhZKA5wnY0CoUwB43KxtGZRrp0XnzZOs99573AFMAm8bN8n1EgAtYHw02u0oCCSbA+SPBQFkcCfiEgA2tQgHsceOyYVSmkQYI4GLFpOyUyaarZPkk4AsCXMD6YpjZSRIwQoDzhxGsLJQEPE/AhlahAPa4WdkwKtNIj86dK1vvve+8B5gC2DRulu8jAlzA+miw2VUSSDABzh8JBsriSMAnBGxoFQpgjxuXDaMyjfTonDmy9b77zwvg4sWl7ORJpqtk+STgCwJcwPpimNlJEjBCgPOHEawslAQ8T8CGVqEA9rhZ2TAq00gDBHCJElJ20s+mq2T5JOALAlzA+mKY2UkSMEKA84cRrCyUBDxPwIZWoQD2uFnZMCrTSI/Mni3b7u983gNMAWwaN8v3EQEuYH002OwqCSSYAOePBANlcSTgEwI2tAoFsMeNy4ZRmUZ65NfZsq3zPwL4shJS9md6gE0zZ/n+IMAFrD/Gmb0kARMEOH+YoMoyScD7BGxoFQpgj9uVDaMyjdQpgLNddpmU+Xmi6SpZPgn4ggAXsOGHOVOmTOrDc+fO+cIW2EkSiJYA549oifF5EiABELChVSiAPW57NozKNNIjs36VbQ88oKqhADZNm+X7iQAXsBTAfrJ39jWxBDh/JJYnSyMBvxCwoVUogD1uXTaMyjTSAAFcsqSUmTjBdJUsnwR8QYALWApgXxg6O2mEAOcPI1hZKAl4noANrUIB7HGzsmFUppEemTVLtj3Q5bwHmALYNG6W7yMCXMBSAPvI3NnVBBPg/JFgoCyOBHxCwIZWoQD2uHHZMCrTSI/MnCnbuvzrvAAuVUrKTPjJdJUsnwR8QYAL2MQI4AMHDsjnn38uP/zwg6xevVp27twpF154odSuXVt69uwpTZo0SVHRkSNH5M0335SvvvpKNm/eLGfPnpXChQtLzZo1pXPnznLDDTck59mzZ4+89tprMm7cONm6datkzpxZPVu3bl3p1q2b1KlTJ6D8lStXygsvvCDTpk2TvXv3ysUXXyzXX3+9PP3001KhQgVf2DY7aZ4A5w/zjFkDCXiRgA2tQgHsRUty9MmGUZlGGiCAS5eWMj/9aLpKlk8CviDABWxiBPDEiRPlpptukpIlS0q5cuWkQIECSqjOmzdPVTB8+HC57777kiuD2L366qvlt99+k4suukiuuuoqyZEjh2zfvl2WLFki7du3lxEjRqjnDx8+LJdffrls2rRJihcvLrVq1ZIsWbKo8hcvXixPPfWU9O/fP7nsqVOnSsuWLeX48eNSo0YNJXghylEuRPlPP/0k11xzjS/sm500S4Dzh1m+LJ0EvErAhlahAPaqNf3TLxtGZRrpkRkzZNu//q2qyUYBbBo3y/cRAS5gEyOAIU537dqlPLLOBIF63XXXCTjv2LFDCVCkX375Rf0eHuKZM2cq8avToUOHZN26dUroIn3yySdKPLdq1UrGjBkjSUlJyc/CM4x6q1Spon539OhRKVOmjPrdW2+9JQ899FDys0OGDJEePXpIsWLFVPnOOn1k8uxqAglw/kggTBZFAj4iYEOrUAB73MBsGJVppAECuEwZKfPjD6arZPkk4AsCbhawuAXo4MGMhSNvXpF/bjGKueGJugapb9++ajsyti/DM4v0zTffSIcOHeTRRx8VCNPU0qBBg6R3794ydOhQ6d69e6rParFcr149mTNnTopnr7jiClm4cKH85z//kY4dO8bMhhlJAATczB8kRQIkQALBBGxoFQpgj9uhDaMyjfTw9Omy/d8PqmqyUQCbxs3yfUTAzQL2wAGR/PkzFpT9+0Xy5YuvzdEKYGxrxvZjCM+//vpLTp48qRoAbyt+hzO88MAirV27VipVqiS5c+eWV199Vdq1aycFCxYM2WCU2bhxYylatKgMHjxYmjdvrvKFSvAUQwQHe3/1sxDRjz32mPzrX/+S9957Lz5AzO17Am7mD99DIgASIIEUBGxoFQpgjxuiDaMyjfTwL7/I9ge7nhfAZctImR/oATbNnOX7g4CbBSwF8LmIxoCzuy1atJClS5eGfRbndJ999tnkzyGIn3zySTl9+rTa1oxtzAhUdc8990i1atUCyoFwhng9d+6cOv+LQFkIrAXBW7p06eRnb7zxRvn5559VMC4I5eA0duxYadu2rWrr+PHjI/aLD5BAagTczB8kSAIkQALBBGxoFQpgj9uhDaMyjdQpgLOXKyuluXAzjZzl+4SAmwUsBXBkAayF58033yxPPPGECjwFLy2E7QcffKA8rhC/zmB4oYC6AAAgAElEQVRVMLFt27YJROnkyZNl1qxZgmjS8DxjW3Twduc1a9bI999/L1OmTJHZs2fLsWPHJGvWrPLll18K6kWKJICRv02bNhTAPvl+m+6mm/nDdBtYPgmQQMYjYEOrUABnPDuJqsU2jCqqBsbw8OFpv8j2ruc9wBTAMQBkFhIIQ8DNApZngFMXwAg8lSdPHnXVEAJd4YoiZ+rTp4+88sorIQWw87kzZ86oK5HuvfdeJZxxlVL+MHvPT5w4obY59+rVS9W7e/duVZTeAv32229L13/mTGcdb7zxhjp3zC3QnBISQcDN/JGIelgGCZCAtwjY0CoUwN6yoRS9sWFUppEenjZNtnc9H800e7lyUnr8ONNVsnwS8AUBLmDDD7PbM8B//vmnOp9bvXp1dS2RM2F7M7Y248xvKA9wqNpxJdLcuXPVFUnB9/sGP1+kSBF13hhRnwsVKpQcMbp+/frKoxycEHV6wYIFDILli2+3+U5y/jDPmDWQgBcJ2NAqFMBetCRHn2wYlWmkAQK4fHkpPe5701WyfBLwBQEuYOMXwPDc4i5feIKnT5+u7vdFQlAseGh1lGenAMY1SPgcVyE5rzXCdUo433vw4EF1JzAELrZIX3LJJSmuWEI0ZwjkXLlyyd69eyVbtmwB1yC9//770qVLl+QODhs2TG2rhlhfv349r0HyxTfcbCc5f5jly9JJwKsEbGgVCmCvWtM//bJhVKaRHp46VbY/1E1Vk50C2DRulu8jAlzARhbAV155ZdiHOnfuLPh58cUX5emnn1bbnyFqCxQooDy48MxiWzK2JDsFsI7GjO3LuO8XEaBxp++MGTNU9OiHH35YIFiRsGUZW5chXGvUqKG2W8PrDA8vRLQzujSeR9RoXLd0/PhxVXb58uVl9erVyjuNe4h/+uknueaaa3xk5eyqKQKcP0yRZbkk4G0CNrQKBbC3bUpsGJVppAECuEIFKf39WNNVsnwS8AUBLmAjC+DUDMEpaj/77DMVqRnBqnLmzCnYhvzcc8/JokWL1Lle57PwwH766acCT/DGjRuVBxdiuGLFiursLiI16y3YS5YsUVuWZ86cKVu2bFHeYXiEESkaHl1Ejg5OK1asUHcPT5s2Tfbt26c81HgOdxIjQBcTCSSCAOePRFBkGSTgPwI2tAoFsMftzIZRmUZ6eMoU2d7tYVVNdgpg07hZvo8IcAHro8FmV0kgwQQ4fyQYKIsjAZ8QsKFVKIA9blw2jMo00kOTJ8uOhx85L4ArVpTSY8eYrpLlk4AvCHAB64thZidJwAgBzh9GsLJQEvA8ARtahQLY42Zlw6hMIw0QwJUqSekxo01XyfJJwBcEuID1xTCzkyRghADnDyNYWSgJeJ6ADa3iKwGMc1WVKlVSwUXKlCmjIl+GSyNGjJB33nlHVq5cqaJp1q1bV52XwpUU4dLs2bPVOat58+bJqVOnpHLlytKtWze5++67w+ZBZM9+/frJzz//rM5mlShRQm6//XZ58sknExKV04ZRmf6mHpo0SXY80l1Vk50C2DRulu8jAlzA+miw2VUSSDABzh8JBsriSMAnBGxoFV8J4HvuuUcQmOTcuXOpCmAdZROBS5o2bSonTpxQkTSR77vvvpM2bdqkMMlRo0ZJhw4dBH8Arr32WhVkBHkOHDggPXv2lMGDB6fIAwFer149+fvvv9XdkBDMuJMRQVBwdQbyZ8+ePS7zt2FUcTXYReZDP0+SHd3/EcCVK0np0fQAu8DGR0ggIgEuYCMi4gMkQAJhCHD+oGmQAAnEQsCGVvGNAIaYbNy4sboH8YMPPggrgKdMmSJNmjRR11DMnTtXypUrp8YS/27YsKG6YxF3M+bLly95jOG5LVWqlBw6dEgghNu1a6c+w5UXiPwJoYvonsjvTPgMXuNHHnlEXWuBhDskb731VhkzZkxAlNBYDAp5bBhVrG11m88pgHNUriylRo9ym5XPkQAJpEKAC1iaBwmQQKwEOH/ESo75SMDfBGxoFV8IYNx/WLVqVeVNHTt2rLoHMdwW6GbNmsmECRNkyJAh6r5FZ8IVE7iLEd5ceHV1GjRokPTu3Vtat26tyncmCFkI4hYtWsj48eOTP5o/f77gPslChQrJ1q1bAzy9EM7FixdXdzTu3r1bsmTJEvM3w4ZRxdxYlxkPTfxZdvwzNhTALqHxMRJwQYALWBeQ+AgJkEBIApw/aBgkQAKxELChVXwhgPv06SMQqTNmzFDCEt7aUAIYQjl//vxy8uRJ2bZtmxQrVixgHGfNmqW2Nzdo0ECmT5+e/Bn+H3cyfv7553LnnXcG5MFZ4Lx586rf7d+/P/lcL+6AxJ2Q999/vwwfPjyFveCORtzZGMpzHI1x2TCqaNoXy7MBAvj//k9KjfoulmKYhwRIIIgAF7A0CRIggVgJcP6IlRzzkYC/CdjQKp4XwMuWLZNatWqpQFQfffSRbN68OawAXrJkidSoUUMuvvhi5XkNTkePHlVeWYhkbHvWCduhDx48KCtWrFDneINT7dq11dnepUuXSrVq1dTHOEf8/fffy9tvvy1du3ZNkadXr17K04yt0dgiHWuyYVSxttVtvkMTJ8qORx9Tj+egAHaLjc+RQEQCXMBGRMQHSIAEwhDg/EHTIAESiIWADa3iaQGMyRjRm3Fmd/Xq1epcb2oCeNy4cWobM0TwokWLQo4hxC8CW+G8b+7cudV/tYcXIjhPnjwp8rVt21ZtjUb5LVu2VJ/XrFlTFi9erERwq1atUuSB8MUW7B49eshrr70Wiz2pPDaMKubGusx4aMIE2fFYj/MCuEoVKfXdty5z8jESIIHUCHABS/sgARKIlQDnj1jJMR8J+JuADa3iaQGsReQnn3wiiACNlJoA/uKLL6Rjx44qAvOvv/4a0hqxLXrHjh3qp0iRIvLnn39K0aJF1bOnT58OeV4X26JHjhypfu644w71LM4hr1u3TiZPnqyCcwUnbIt+4IEH1A+CdkVK2niCn9uwYYPa7g3vtFdSgACuWlVKffuNV7rGfpCAVQJcwFrFz8pJIEMT4PyRoYePjScBawQogBOIHoGlABTbn53ndSmAEwjZUlGHfvpJdvQ4H4QsBwWwpVFgtV4kwAWsF0eVfSKBtCHA+SNtOLMWEvAaAQrgBI4othpPmjRJnbutWLFicsncAp1AyJaKOvjjj/Jnz8fPC+Bq1aTUN19bagmrJQFvEeAC1lvjyd6QQFoS4PyRlrRZFwl4hwAFcALHMlOmTOqu3ssvvzyg1BMnTshvv/2mojHjGiKkr776Si655BJhEKwEDoDBogIE8OXVpNTXFMAGcbNoHxHgAtZHg82ukkCCCXD+SDBQFkcCPiFAAZzAgYYAdpsQJKtkyZLivAZp+/btyWd7dTmxXIOEc8E6MBavQXI7Iqk/d/CHH+XPx//xAFMAJwYqSyEBEeEClmZAAiQQKwHOH7GSYz4S8DcBCuA0GP/UtkCj+mbNmsmECRNkyJAhKgqzM3Xv3l2GDRumrifq2fP8GVQk3DHcu3dvFUEa0Z6dacyYMdKuXTtp0aKFjB8/Pvmj+fPnKw90oUKFBOeVs2fPnvzZrl271H3FuHIJ/86aNWvMZGwYVcyNdZnRKYBzXn65lPz6K5c5+RgJkEBqBLiADU8n0ktV5/3wZ86cUfN2qPvmY7VAHRgx3N3xweXWr19fZs+eHfJO+1jbwHwkwPmDNkACJJBoAja0iqejQIcaoEgCeMqUKdKkSRN1ZdLcuXOlXLlyqhj8u1GjRpIzZ051rRK2V+uEO4FLlSqlrkQaNWqUErxIuEsYEaXXr18vv/zyizRs2DCgSXqBAmE9dOhQ9RkWTh06dJDRo0fLs88+K/3794/LzmwYVVwNdpH54Pgf5M9evdSTFMAugPEREnBJgAI4sgDu1KlTyIcQa6JPnz7J83goAaz/vrgVsc6KKIBdGjEfs0aA84c19KyYBDI0ARtahQI4hMnA84srlHLlyqXE8KlTp9R1RefOnZPvvvtO2rRpkyIXhO+tt96qnoHQhYDGYgd3Boe7yxfXINWrV0/27t0rVatWlcqVK8vvv/8uGzdulKuuukqmTZsW4BmOxbptGFUs7Ywmz8Hx4+XPXk+cF8DVq0vJr76MJjufJQESCEOAC9jIAhhzvJuEu+ezZcsmpUuXTn48LQUwdhYdO3ZMypYtG/J6Pjd94DMkEA0Bzh/R0OKzJEACmoANrUIBHMb+RowYIW+99ZasWrVKLWLq1q0r/fr1U8I0XMJ2s+eff17mzZunRDMEbbdu3SScxwDlbNu2TZ555hmZOHGiwJNcokQJuf322+Wpp55SgbriTTaMKt42R8ofIIBr1JCSX34RKQs/JwEScEGAC9jECeBQJaWlAHYx3HyEBBJKgPNHQnGyMBLwDQEbWsV3Atg31vRPR20YlWnGB8eNkz+f6K2qyUkBbBo3y/cRAS5gEyOAQ50BvvPOO2XkyJEhKxg4cKD07ds3VUtLxBZoZ7vWrFmj4ld8/PHHKg5F4cKFpWPHjjJgwAD10jc4HT16VO2M+uabbwS7l5KSkqRKlSrStWtXueuuu3z0LWFXwxHg/EHbIAESiIXA/7N3HlBSFN3bvwaQnHNGBcEPQXKQoGQJShABQYIkkQwvIEmCEiUHJUlWUcHEC0aCqIAoICJIzrDkHAVevvPUbu9/ZnZmJ+zU1m73U+fsEXe6bnX96m5PPX2rbpnQKhTAoYxUIqpjwql047n81Vdysn/kXrvkJUpIvo+8Typ13wftk4DdCHACq08Az549W+WIwPn0yC3hupqocePGgrPrYyvhFMBYll28eHF1L9iyg2Xd69evV3kssGIJK6Bcy6lTp6R69eqyc+dOyZ49u5QoUULu3buncmNcvnxZJYxE4kgWZxPg88PZ48/ek0CoBExoFQrgUEcrkdQz4VS60bgJ4JIlJd+HS3Q3Sfsk4AgCnMDqE8CwHJ9LoL1lgbYiwLgXRG9xP4j8oiD3BETx1atXVaLHvHnzRsOoVauWEsvIZzFq1Kjo3BQRERHqhIOtW7eqPBkQySzOJcDnh3PHnj0ngbgQMKFVKIDjMmKJoK4Jp9KN5dKXX0rEmwNUM8kpgHXjpn0HEQhkAotoIaJ+iamkTZtW/B1j5K8//upb58nDjq9jkBKSAPZ2MkHnzp1l5syZsnjxYsGSbZQ//vhDSpcurRI2Is+FJwckbixTpow6/QARbhbnEgjk+eFcOuw5CZCALwImtAoFsM390YRT6UbqJoBLlZR8SxgB1s2c9p1BIJAJLDLbp0+fPlEBuXjxotvRdaHcvCX8fCU1xPnwmTJlUqYTugDGufPIEI19vK4Fy5gR5cXe4L5RR80h4jto0CAZO3as9OsXmX3fteCFSMqUKdXJB0jqyOJcAoE8P5xLhz0nARKgAKYPxBsBWwrgL76UiAFREWAK4HjzJTZkfwKBTGCdLoADOQYpoQtgnFuPJc+exdpn7JqUq2PHjjJnzhy/zo9TC27evOn3Ol5gXwKBPD/s23v2jARIIFQCJrQKI8ChjlYiqWfCqXSjufT5FxIxcKBqJkWpUpJ3yWLdTdI+CTiCQCATWApg/+cAJ3QB/Nhjj8n+/fsDEsDt27eXDz74QCpVquR2prFn5Yceekhdx+JcAoE8P5xLhz0nARLwRcCEVqEAtrk/mnAq3UjdBHDp0pJ38SLdTdI+CTiCQCATWKfvAbZDBDgYATxs2DB1NNLkyZOlR48ejvg7YCdDIxDI8yM0y6xFAiRgZwImtAoFsJ09SkRMOJVupJeWfy4RgwZFRoApgHXjpn0HEeAE1vdgW3uA4yKAcdRQlSpVvB415M/NwnkMUjACGImvkFEa971u3Tp/t8nPHUyAzw8HDz67TgJxIGBCq1AAx2HAEkNVE06lm8ul5cslYtDgSAFcpozkXbRQd5O0TwKOIMAJrF4BjGXHOAO4XLly6gzdYIopAYx7rFq1qiBrdLdu3WTkyJGSOnVqt1v/888/5cyZM1KzZs1gusRrbUaAzw+bDSi7QwLxRMCEVqEAjqfBNdWMCafS3Vc3AVy2rORduEB3k7RPAo4gwAmsXgEM63gm79q1S8qWLSuFCxcW7J1t2LCh1K1bN1YfswRw5syZY92Lu2LFCsE1sZ0DHEwEGDd1+vRpwVnA27dvVxnAixUrJjly5BDsB//rr7/k+PHj0qdPH0EmbBbnEuDzw7ljz56TQFwImNAqFMBxGbFEUNeEU+nGcmnZMokYPEQ1k4ICWDdu2ncQAU5g9QvgvXv3qiOGsLT4woULgiXVrlmXfd2BJYD9uSOOIsqVK1dYBTDavHXrlsyaNUs++eQTJeCR8Tlr1qwCMV2vXj1p1qyZ5MyZ09/t8XMbE+Dzw8aDy66RgEYCJrQKBbDGAU0Ipk04le5+uwngcuUk74L5upukfRJwBAFOYB0xzOwkCWghwOeHFqw0SgK2J2BCq1AA29ytTDiVbqQXP/tMTg15SzWTggJYN27adxABTmAdNNjsKgmEmQCfH2EGSnMk4BACJrQKBbDNncuEU+lGevHTT+XUW0MjBXD5cpJ3PiPAupnTvjMIcALrjHFmL0lABwE+P3RQpU0SsD8BE1qFAtjmfmXCqXQjdRXAKSuUlzzz5ulukvZJwBEEOIF1xDCzkySghQCfH1qw0igJ2J6ACa1CAWxztzLhVLqRXvzkUzk1NDICTAGsmzbtO4kAJ7BOGm32lQTCS4DPj/DypDUScAoBE1qFAtjm3mXCqXQjvbj0Ezk1bFiUAK4geeZ9oLtJ2icBRxDgBNYRw8xOkoAWAnx+aMFKoyRgewImtAoFsM3dyoRT6UbqJoCfeUbyfDBXd5O0TwKOIMAJrCOGmZ0kAS0E+PzQgpVGScD2BExoFQpgm7uVCafSjfTi0qVyatjwyAgwBbBu3LTvIAKcwDposNlVEggzAT4/wgyU5kjAIQRMaBUKYJs7lwmn0o3UTQBXrCh55s7R3STtk4AjCHAC64hhZidJQAsBPj+0YKVRErA9ARNahQLY5m5lwql0I7348cdyaviIyAgwBbBu3LTvIAKcwDposNlVEggzAT4/wgyU5kjAIQRMaBUKYJs7lwmn0o30wkcfyekRb0cK4EqVJM+c2bqbpH0ScAQBTmAdMczsJAloIcDnhxasNEoCtidgQqtQANvcrUw4lW6kbgK4ciXJM5sCWDdz2ncGAU5gnTHO7CUJ6CDA54cOqrRJAvYnYEKrUADb3K9MOJVupBc+/FBOv/1OZASYAlg3btp3EAFOYB002OwqCYSZAJ8fYQZKcyTgEAImtAoFsM2dy4RT6UZ6YcmHcvqdKAFcpbLkmTVLd5O0TwKOIMAJrCOGmZ0kAS0E+PzQgpVGScD2BExoFQpgm7uVCafSjdRVAKeqUkVyz5qpu0naJwFHEOAE1vcwP/DAA+rD+/fvO8IX2EkSCJYAnx/BEuP1JEACIGBCq1AA29z3TDiVbqQXFi+R0yNHqmYogHXTpn0nEeAElgLYSf7OvoaXAJ8f4eVJayTgFAImtAoFsM29y4RT6UbqJoCffVZyz3xfd5O0TwKOIMAJLAWwIxydndRCgM8PLVhplARsT8CEVqEAtrlbmXAq3UgvLFosp0eNiowAUwDrxk37DiLACSwFsIPcnV0NMwE+P8IMlOZIwCEETGgVCmCbO5cJp9KN9MKiRXJ61OhIAfzcc5L7/fd0N0n7JOAIApzAhkcAX7p0SRYvXiz//e9/Zffu3XLq1ClJlSqVlC5dWvr06SM1atSI0dC1a9dk2rRpsnTpUjl8+LDcu3dPsmbNKiVKlJD27dtLrVq1ouucPXtWJkyYIF9//bUcPXpUHnroIXVtuXLlpGvXrlKmTBk3+7t27ZKRI0fKmjVr5Pz585I5c2apVq2aDBo0SJ544glH+DY7qZ8Anx/6GbMFErAjARNahQLYjp7k0icTTqUbqZsArlpVcr83Q3eTtE8CjiDACWx4BPC3334rzz//vOTLl08KFCggGTJkUEJ106ZNqoG5c+fKa6+9Ft0YxO4zzzwjv/32m2TKlEkqVKggyZIlk+PHj8uff/4pTZo0kQULFqjrr169KsWKFZNDhw5J7ty5pWTJkvLwww8r+9u2bZOBAwfKsGHDom2vXr1a6tevLzdv3pTixYsrwQtRDrsQ5atWrZJKlSo5wr/ZSb0E+PzQy5fWScCuBExoFQpgu3pTVL9MOJVupBcWLpTTo8eoZlJRAOvGTfsOIsAJbHgEMMTp6dOnVUTWtUCgVq1aVcD5xIkTSoCirF27Vv0eEeL169cr8WuVK1euyL59+5TQRZk/f74Szy+88IJ88cUX8uCDD0Zfi8gw2i1SpIj63fXr1+Wxxx5Tv5s+fbp06dIl+tpJkyZJ7969JVeuXMq+a5sOcnl2NYwE+PwII0yaIgEHETChVSiAbe5gJpxKN9LzCxbImTFjIwVwtWqSe8Z03U3SPgk4gkAgE1icAnT5cuLCkTatSNQpRiHfeLiOQRo8eLBajozly4jMonz66afStGlT6dmzp0CYxlbGjRsn/fv3l8mTJ0uPHj1ivdYSy+XLl5cNGzbEuLZUqVKyZcsWWbJkibRo0SJkNqxIAiAQyPODpEiABEjAk4AJrUIBbHM/NOFUupG6CeDq1ST3dApg3cxp3xkEApnAXrokkj594uJx8aJIunRxu+dgBTCWNWP5MYRnRESE3L59W90Aoq34HfbwIgKLsnfvXilcuLCkTp1a3n33XWnUqJFkzJjR6w3DZvXq1SVnzpwyfvx4qVu3rqrnrSBSDBHsGf21roWI7tWrl3Tq1ElmzuR56nHzENYO5PlBSiRAAiRAAUwf0E7AlgJ4/gI5MzYqAkwBrN2H2IBzCAQygaUAvu/XIbB3t169erJ9+3af12Kf7tChQ6M/hyAeMGCA3LlzRy1rxjJmJKpq06aNFC1a1M0OhDPE6/3799X+XyTKQmItCN5HH300+tratWvLd999p5JxQSh7li+//FIaNmyo7nXFihV++8ULSCA2AoE8P0iQBEiABCiA6QPaCdhdAKeuUV1yTZumnSMbIAEnEAhkAksB7F8AW8KzcePG0q9fP5V4ClFaCNvZs2eriCvEr2uyKvjXsWPHBKL0hx9+kJ9//lmQTRqRZyyL9lzuvGfPHvnqq6/kxx9/lF9//VVu3LghSZIkkY8//ljQLoo/AYz6DRo0oAB2wh93PPQxkOdHPNwGmyABEkhkBExoFS6BTmROEuztmnCqYO8x2OvPz5svZ8aNU9UogIOlx+tJwDeBQCaw3AMcuwBG4qk0adKoo4aQ6ApHFLmWN998U8aOHetVALted/fuXXUkUtu2bZVwxlFK6X2sPb9165Za5ty3b1/V7pkzZ5Qpawn0jBkz5I033ogx8FOmTFH7jrkEmk+FcBAI5PkRjnZogwRIwF4ETGgVCmB7+VCM3phwKt1Iz38wT868+26UAK4huaZN1d0k7ZOAIwhwAut7mAPdA3zy5Em1P/fpp59WxxK5FixvxtJm7Pn1FgH21jqORNq4caM6IsnzfF/P63PkyKH2GyPrc5YsWaIzRlesWFFFlD0Lsk7/8ccfTILliL9u/Z3k80M/Y7ZAAnYkYEKrUADb0ZNc+mTCqXQjdRPANWtKrqlTdDdJ+yTgCAKcwMZdACNyi7N8EQlet26dOt8XBUmxEKG1sjy7CmAcg4TPcRSS67FGOE4J+3svX76szgSGwMUS6WzZssU4YgnZnCGQU6RIIefPn5ekSZO6HYM0a9Ys6dixY3QHp06dqpZVQ6zv37+fxyA54i9cbyf5/NDLl9ZJwK4ETGgVCmC7elNUv0w4lW6k5z/4QM68O141k5oCWDdu2ncQAU5g/QvgsmXL+ryoffv2gp9Ro0bJoEGD1PJniNoMGTKoCC4is1iWjCXJrgLYysaM5cs47xcZoHGm708//aSyR3fr1k0gWFGwZBlLlyFcixcvrpZbI+qMCC9EtGt2aVyPrNE4bunmzZvKdsGCBWX37t0qOo1ziFetWiWVKlVykJezq7oI8PmhiyztkoC9CZjQKhTA9vYpMeFUupGenztXzoyfECmAa9WSXFMm626S9knAEQQ4gfUvgGNzBFdRu2jRIpWpGcmqkidPLliGPGLECNm6dava1+t6LSKwCxcuFESCDx48qCK4EMOFChVSe3eRqdlagv3nn3+qJcvr16+XI0eOqOgwIsLIFI2ILjJHe5adO3eqs4fXrFkjFy5cUBFqXIcziZGgi4UEwkGAz49wUKQNEnAeARNahQLY5n5mwql0I3UTwLVrS67Jk3Q3Sfsk4AgCnMA6YpjZSRLQQoDPDy1YaZQEbE/AhFahALa5W5lwKt1Iz82ZI2cnTFTNpKYA1o2b9h1EgBNYBw02u0oCYSbA50eYgdIcCTiEgAmtQgFsc+cy4VS6kboJ4OdrS65JjADrZk77ziDACawzxpm9JAEdBPj80EGVNknA/gRMaBUKYJv7lQmn0o303Ow5cnZiVASYAlg3btp3EAFOYB002OwqCYSZAJ8fYQZKcyTgEAImtAoFsM2dy4RT6UZ6btZsORsV9U1T53nJGSWGdbdL+yRgdwKcwNp9hNk/EtBHgM8PfWxpmQTsTMCEVqEAtrNHidgyC7S7AK4jOSdGZoRmIQESiBsBTmDjxo+1ScDJBPj8cPLos+8kEDoBCuDQ2bGmDwImnEr3YJybOUvOTo48+ihNHQpg3bxp3zkEOIF1zlizpyQQbgJ8foSbKO2RgDMImNAqjADb3LdMOJVupOdmzpSzk6dECuC6dSXnhPG6m6R9EnAEAU5gHTHM7CQJaCHA54cWrDRKArYnYEKrUADb3K1MOJVupG4CuF49yTn+Xd1N0j4JOIIAJ7COGGZ2kgS0EODzQwtWGiUB2xMwoVUogG3uViacSjfSc++/L2enTI2MAFMA68ZN+w4iwAmsgwabXSWBMBPg8yPMQAguCPAAACAASURBVGmOBBxCwIRWoQC2uXOZcCrdSN0EcP36kvPdcbqbpH0ScAQBTmAdMczsJAloIcDnhxasNEoCtidgQqtQANvcrUw4lW6kZ997T85NnRYZAaYA1o2b9h1EgBNYBw02u0oCYSbA50eYgdIcCTiEgAmtQgFsc+cy4VS6kZ6dMUPOTZseKYBfqC85xzECrJs57TuDACewzhhn9pIEdBDg80MHVdokAfsTMKFVKIBt7lcmnEo3UlcBnPbFFyTH2LG6m6R9EnAEAU5gHTHM7CQJaCHA54cWrDRKArYnYEKrUADb3K1MOJVupGenz5Bz0yMjwBTAumnTvpMIcALrpNFmX0kgvAT4/AgvT1ojAacQMKFVKIBt7l0mnEo30rPTpsu5GTOiBPCLkmPsGN1N0j4JOIIAJ7C+h/mBBx6QvHnzyuHDhx3hC+wkCQRLgM+PYInxehIgARAwoVUogG3ueyacSjdSNwHcoIHkGDNad5O0TwKOIMAJLAWwIxydndRCgM8PLVhplARsT8CEVqEAtrlbmXAq3UjPTp0m5957LzICTAGsGzftO4gAJ7AUwA5yd3Y1zAT4/AgzUJojAYcQMKFVKIBt7lwmnEo3UjcB3LCh5Bg9SneTtE8CjiDACSwFsCMcnZ3UQoDPDy1YaZQEbE/AhFahALa5W5lwKt1Iz06dKufeez8yAkwBrBs37TuIACewwQvgDRs2yLhx42Tbtm1y6tQpSZ8+veTJk0eqVq0qgwcPllSpUjnIg9hVJxPg88PJo8++k0DoBExoFQrg0McrUdQ04VS6wZyZMkXOvz8zUgA3aiQ5Ro3U3STtk4AjCHACG5wAXrFihTRo0EDu378vZcqUkfz588ulS5dk3759cuDAATl06JDky5fPEb7DTpIAnx/0ARIggVAImNAqFMChjFQiqmPCqXTjcRPAjRtJjpEUwLqZ074zCAQygYXY+/fm3UQFJGnyhwVZnONSvGWBrlKliqxfv16WLVsmjRs3djP/+++/S6FChSR16tRxaZZ1SSDREAjk+ZFoOsMbJQESiDcCJrQKBXC8Da+Zhkw4le6enpk8Wc7PnKWaSUsBrBs37TuIQCAT2Ns37sjc3j8nKirtJ1aSR1IkidM9exPATz75pPzzzz8q6ps2bdo42WdlEkjsBAJ5fiT2PvL+SYAEwk/AhFahAA7/OCYoiyacSjcANwH8UmPJ8c47upukfRJwBIFAJrAUwP93DvCrr74qS5Yskfr168uQIUOkZMmS8uCDDzrCV9hJEvAkEMjzg9RIgARIwJOACa1CAWxzPzThVLqRnpk0Wc7PiooAUwDrxk37DiIQyASWAvj/BPCxY8eU+N2+fbvyEiTAqlixorzwwgvSsmVLSZYsmYO8h111OoFAnh9OZ8T+kwAJxCRgQqtQANvcE004lW6kZyZOkvOzZ6tm0jV5SbK//bbuJmmfBBxBIJAJLPcA/58AhlPcvXtX1qxZI//973/lp59+kr/++kv5SoECBWTjxo2SMWNGR/gOO0kCgTw/SIkESIAEPAmY0CoUwDb3QxNOpRupuwBuItnfHqG7SdonAUcQ4ATW9zB72wPs7eojR47Ia6+9pkRx37591RFJLCTgBAJ8fjhhlNlHEgg/ARNahQI4/OOYoCyacCrdAM5MmCjn58xRzaRrQgGsmzftO4cAJ7BxF8Cw8P3330utWrXk+eefl1WrVjnHgdhTRxPg88PRw8/Ok0DIBExoFQrgkIcrcVQ04VS6yZyZMEHOz5kbKYBfflmyjxiuu0naJwFHEOAENjgBPGnSJGnevLlky5bNrWLPnj1lypQp0rFjR5kVla/AEQ7ETjqaAJ8fjh5+dp4EQiZgQqtQAIc8XImjogmn0k3GTQA3bSrZhw/T3STtk4AjCHACG5wATpcunVy9elWKFSum9vxifzQSYu3du1cyZMggmzZtUr9nIQEnEODzwwmjzD6SQPgJmNAqFMDhH8cEZdGEU+kGcGb8eDk/9wPVTDoKYN24ad9BBDiBDU4AL168WL799lvZsmWLnDx5UlXOnTu31K5dW3r37i05c+Z0kPewq04nwOeH0z2A/SeB0AiY0CoUwKGNVaKpZcKpdMNxE8DNmkr2YYwA62ZO+84gwAmsM8aZvSQBHQT4/NBBlTZJwP4ETGgVCmCb+5UJp9KN9PS778qFD+ZFRoApgHXjpn0HEeAE1kGDza6SQJgJ8PkRZqA0RwIOIWBCq1AA29y5TDiVbqSnx70rF+ZFCeDmzST70KG6m6R9EnAEAU5gHTHM7CQJaCHA54cWrDRKArYnYEKrUADb3K1MOJVupK4COP0rzSXbW2/pbpL2ScARBDiBdcQws5MkoIUAnx9asNIoCdiegAmtQgFsc7cy4VS6kZ4eO04uzJ+vmqEA1k2b9p1EgBNYJ402+0oC4SXA50d4edIaCTiFgAmtQgFsc+8y4VS6kZ4eM1YuLFgQJYBfkWxvDdHdJO2TgCMIcALriGFmJ0lACwE+P7RgpVESsD0BE1rF9gJ44sSJ8ssvv8iOHTvkzJkzcuvWLcmWLZtUqVJF+vbtK0899ZRXx1qwYIG89957smvXLkmaNKmUK1dOBg8eLBUqVPDpiL/++quMHDlSnf3477//ypNPPildu3aVVq1a+axz/PhxGTJkiHz33Xdy4cIFyZMnjzRv3lwGDBggyZIli7PTm3CqON+0HwNuArhFC8k2ZLDuJmmfBBxBgBNYRwwzO0kCWgjw+aEFK42SgO0JmNAqthfAmTJlkuvXr0vRokWjz2TcuXOn7N27V5IkSSKff/651KtXz825evbsKVOmTJHkyZNLzZo1lWhevXq13L9/X5YtWyYNGjSI4YzLly+Xpk2bCr4AKleuLGgXdS5duiR9+vSR8ePHx6izf/9+KV++vJw7d06KFCmiBPMff/whBw8elGeeeUbVf+SRR+Lk+CacKk43HEDl06PHyIWFC9WV6SmAAyDGS0ggMAKcwAbGiVeRAAnEJMDnB72CBEggFAImtIrtBTCisiVLlowRTUV0t0uXLpI1a1ZBFPbhhx9WY/bjjz9KjRo1JGPGjLJx40YpUKCA+j3+/eyzz0qKFCnk0KFDki5duugxRuQ2f/78cuXKFYEQbtSokfrs9OnTUrFiRYHQXbt2rarvWvAZ7q979+5KcKPcvXtXXn75Zfniiy9k6NChMiyOZ9yacKpQnD+YOm4CuGVLyTZ4UDDVeS0JkIAPApzA0jVIgARCJcDnR6jkWI8EnE3AhFaxvQCOzaUef/xxOXDggGzfvl1FiFHq1Kkj33zzjUyaNEkQCXYtPXr0kKlTp6poLqK6Vhk3bpz0799fXnzxRfnyyy/d6kDIQhAjyrxixYrozzZv3ixly5aVLFmyyNGjR90ivRDOuXPnllSpUqll25Y4D+XPw4RThXKfwdQ5PXq0XFi4SFVJTwEcDDpeSwKxEuAElg5CAiQQKgE+P0Ilx3ok4GwCJrSKowVw4cKFZffu3fLPP/9IoUKF5ObNm5I+fXq5ffu2HDt2THLlyuXmkT///LNa3oz9w+vWrYv+DP+/fv16Wbx4sbRs2dKtDvYCp02bVv3u4sWL0ZFoRHdHjBgh7dq1k7lz58bw/GrVqsmaNWu8Ro6D+TMx4VTB3F8o154aNUouLlocKYBffVWyDRoYihnWIQES8CDACSxdggRIIFQCfH6ESo71SMDZBExoFccKYIjV1q1bC6LAEMAPPfSQ/Pnnn1K8eHHJnDmzirx6FuwlRlQWIhnLnq2C5dCXL18W7C3GPl7PUrp0abW31zXSjH3EX331lcyYMUPeeOONGHWQoAuRZiyNxhLpUIsJpwr1XgOt5yaAW70q2QZSAAfKjteRQGwEOIGlf5AACYRKgM+PUMmxHgk4m4AJreIYAfzuu+8qgQoRC8GLf+fIkUO+/vprtUcYBf/GMmaI4K1bt3r1RohfJLbCft/UqVOr/1oRXojgNGnSxKjXsGFDtTQa9uvXr68+L1GihGzbtk2J4BdeeCFGHQhfLMHu3bu3TJgwIeS/DBNOFfLNBljx1MhRcnFxVASYAjhAaryMBPwT4ATWPyNeQQIk4J0Anx/0DBIggVAImNAqjhHA1atXV1mVrZI3b15ZtGiRWtJslY8++khatGihMjDj6CRvBcuiT5w4oX4goE+ePBmdXfrOnTte9+tiWfSHH36ofl555RVltmDBgrJv3z754YcfBPfmWbAsukOHDupn9uzZfv3Jch7PC7HH+bHHHlOC3y7l1Dsj5eKSJao7GVq3kqwDBtila+wHCRglwAmsUfxsnAQSNQE+PxL18PHmScAYAQrgeECP6C3OBMb+W2R8fuedd2TQoMgswhTA8TAAYWjCXQC3lqwD3gyDVZogARLgBDZ0H8DZ8W3btg06e/8DDzwgeCF7+PDh0BuP55r58uWTI0eOqKMBdZb4asdXH+7du6cSX86bN0+d5oAtUM8995wMHz5ckEMk2II8I6NHj5alS5eq5JcZMmSQ2rVry9tvvx39It2bTfgWTq7YtWuXJE2aVMqVKyeDBw+WChUq+LwFnDAxcuRI2bRpkyAXCbZnde3aVVq1auW1zsqVK2XDhg3y22+/qS1bWNHmme/EX3/5/PBHiJ+TAAl4I0ABHI9+gWgtzuDFUmc88LFPl0ug43EA4tDUqbffkYsffqgsZGhNARwHlKxKAm4EOIEN3SEogENn56umSQGMv4WXXnpJHUmIPB9ITHnu3DmV8DJ58uQqQWWZMmUC7vStW7eUeIYgzZ49u1SqVEm99MCJEMg7gt8/+uijMexhKxS2RKHNmjVrCuxgNRtePixbtkyQT8Sz4DjGpk2bCvqAVW6ZMmVSdRAAwAkWyC/iWaxcJq6/pwAOeHh5IQmQQBwIUADHAV4oVbEvuF+/fjJkyBAVEWYSrFAoxn8dNwHcpo1kfbN//N8EWyQBGxKgAA59UBExi4iIUGIDP4EWRoB9kzIpgK1tSAUKFBCcAJE1a1Z1oxCXEMZWAs1AjylExBYRWbx4//7771U0GWXixIlKlHoTm1ilVqNGDcmYMaNs3LhRcC8o+Pezzz4rKVKkkEOHDimBbhUk6MyfP7/KT4J7xTGMKDhesWLFiiqSDfGO+q4FJ1Igql2qVClBgABimwI40L9iXkcCJBAXAhTAcaEXQt358+fLa6+9Jq+//rq8//77bscgHT9+PMaSpFCOQcIXiZUYi8cghTBIXqqcGvG2XPzoI/VJBgrg8EClFRIQURGjPXv2KBZPPPGEPPjgg+SimQAFcMIUwFgyjISZiAB7RlmRLBMrxhCBbdy4sV8PwRLkLFmyqGXFWHWGRJuupVixYvLXX3+ppcdWUk58XqdOHfnmm29k0qRJKimma+nRo4dano1oLgS0VcaNGyf9+/dXCT2RfNO1oC8QxPXq1ZMVK1b4vG9EoyHUKYD9Di0vIAESCAMBCuAwQAzGRJs2bWThwoWCSPB//vMfVTW+vnCw7Kls2bLqSxF7gR555JHoW8eb2ty5c6s3xPh3kiRJgumW27UmnCrkmw2w4qkRI+TiRx+rqzO0bStZ+/cLsCYvIwESiI0ABbB3OliqiqgaBAGEz7Bhw5QwwovSLl26yOTJkyW2JdCIyr311lvy+eefqyP0sNS1U6dO6og7vGTwtgcYL08RHcT+U+y3xXcFIo9YrQQB89NPP6noH6KkrgVn2I8dO1YJJyRrRJQQe0UHDhwY657RYP4yvEVmXRlhPylWVn322Wdq2TAii9g3a52CgN9DuP3999/qew7LdXHPWObrWqx24JcQe7NmzZKDBw+qiCiEJ1i4Rj+D6UNs14Irxgj3A9Hq+R2MYxSxlxZHKWLc/RVEXKtWraoSUiIC61mwBxj+MXToUOVbKNgvjFMnbt++LRhTJOB0LaG8kIcQt06tcH0h73k/FMD+RpSfkwAJhJOACa1i6yzQSAJx9epVtZTHNZKBicXMmTPVG1UIT0Q8IDhRYltyhP07+EIMdMkRzhJGRmlfS46wHAn3iDe5mECh3L17V00GMFFy/TIM1dFMOFWo9xpoPTcB/NprkrVf30Cr8joSIIFYCFAAe4djiTvs+YSIgCCFGMb3StGiRdWz2pcAhtDA9wCiidmyZVN7MiGC161bp1YfTZ8+PYYAxv5OCDyI7JQpUyrxBBG2Zs0atQwWy26xDNZTAON3devWFbSJCD6e/2fPnlXXwiZOIsD3S1xLbAIYkUP4Ee4NfbX2zSLS/e2336oklNh6BH5YHYU9tefPn1cnJOD+XIvVDl4y4DQELNuFKIT4x8thsIcQ9Hb8YFz6iMgpji9EbhC8rPYsOFWhSJEisR6Z6FoH3++9evWSJk2ayKeffhrDHl4Y4KUG2sR3P0p8bsmiAI6Lt7AuCZBAXAmY0Cq2FsDWhAT7sbCsCG+N8WWML2Ds1UqWLJmKAL/88stuY2clncCbc+y/wYQHxxX5SzoBO7gGX9JoC2IaSSd8neWLY5AwWcCX/1NPPaWyNP7+++/qDTfe2GOy4xoZDsXBTDhVKPcZTJ2I4cPl0sdLVZUMFMDBoOO1JBArAQrg2AUwPsUze9WqVTEij74EcOfOndULV2T7xZ5MfK+gQFghsdK1a9diCOAlS5bIq6++qqLOEIhW9A/fFTg2D+IIxVUAY89noUKFBC9e8b2GI/2sgqW1eBGMl7/4fkHSpbiU2AQw7EKwI1IO8Y5iscG+WfQBe2Cx1xQFRwliSTDuG8f2uSaCstqBwMX3obU8GMywxBe/c32BDHt4sYCX1cEUzwg8os2w6ypIXe0hKozIM7I4oz/+CuYAWMYMEYyovmfZvn27PP3001KiRAnZsmWL+jg+k3J63g8jwP5GlJ+TAAmEk4AJrWJrAYzJARJZ4G0xvvQhfnGEAL5U8QWN5Wf4QvZW8IWNN/N4a28dO4AlXf6OHcCxSp7HDmCZlK+CpU1Y+oQ344gK5MmTR5o3b66Wq0Ggx7WYcKq43rO/+hHDhsmlpZ+oyzK0e02y9mUE2B8zfk4CgRAIRADjJd/tG9cDMZdgrnkkRUpBBDLUYkWAUR8vKS3x5mrPmwC+fv26EptYxrp37161BNa1vPnmm2rpr6cAs1YHYaktzpF3LdYqJfzOVQBbUUZfWX4hwCDEIMAgxOJSYhPAiIrjexNn3VsFfoUkUvgORjIoLPl1LZZARF4ObE2yitUOvg+RQMq14EggRGEhshHltr4vd+/eLWPGjAmqe3hJ7poZedSoUep4RLxEwMsIz4KVWojI4wcvyP2Vjh07ypw5c5RNzBE8C1aJIbKPH/gJSnwey+h5PxTA/kaUn5MACYSTgAmtYmsBHM7BSay2TDiVblauAjhj+3aSJWr/tu52aZ8E7E4gEAF86/o1mfFas0SFosu8pZIsZWTW3VCKJYBxfA0ilt6KNwGM6C2W+mLpNI7b8yxW5M9VACNKi32x+O+NGze8vgjFCiO8MHUVwFb+Cmyr8faiFlFgLOlt1qyZfPxxZA6FUEtsAhgRXERyPQteGiC6CSY4Asi14GVzt27dBMJzwIAB0R9Z7SBBFFZJeRZEjhENx/m1iMyHq1AAMwlWuHyJdkiABPwTMKFVKID9j0uivsKEU+kGFjF0mFz6JDICTAGsmzbtO4kABbD30bYEMBIXIjrmrXgTwEuXLlUrenzt/bSW0roK4FOnTqlzYhE5xrJgb8USfq4C2Mpa7M9fsYQaW3riUmITwBC3ELmeBVuDsBrLc5kzrvO1fNxqB5y87fPFEmXs1w00G3OgfeYSaArgQH2F15EACcSdgAmtQgEc93FL0BZMOJVuIG4CuEN7yeJyBITutmmfBOxMgAI4dgEc27EwpgUw9v8ioSMyRVt7b731Btdh6XVcir8s0NiH60sAe8tcHU4BHI4l0EyCRQEcl78P1iUBEgiOgAmtQgEc3BgluqtNOJVuSBFvDZVLUZk0M1IA68ZN+w4iEIgAdvIe4GAFMCKeiHz6WgKNpb04A9ZzCTQELPaZ+loCjT2rSL7kKiYR2V29enWMs2R1uG98C2BfS6CRNGrbtm1uS6DDkQQroR2DhOO2cubM6TaUoRyDhGX1ViSdxyDp+MugTRIggVAImNAqFMChjFQiqmPCqXTjiRjyllz67DPVTMYOHSRLn966m6R9EnAEgUAEsCNAeHTS9Yxbb9FNXO4tiolsxTi/F4mSkNzINcMx6iC50+jRo30mwcKxQDgeyLUg8zGyR6O4CmAk00Jk11eipXCOW3wLYG+JsxDpxbJvvCzAUnHPM4Tj2l9rSTmOomrQoIGbOWSgRpbmQJdeY/zhB1jKDcGOjM+uBS9BIPKxT9vKdI3PrX3dSGCG0ylcC7JUY6k2knch8ZlVxo0bJ/3791dZshHJdi3oS6NGjdSRSytWrPCJiEmw4uo9rE8CJBAMARNahQI4mBFKhNeacCrdmNwEcMeOkqV33DKa6r5f2ieBxEKAAtj7SIUqgGGtU6dO6gxbiBkIJkuoQezgNAKcVe+ZBdo6BglZoxFFtqJ/SHyFo/m2bt0aQwDjyD2c/YvIHpJKtW/fXp1TbBVElBEhhi1kT7YKsi7j2KRgzp2PbwGcNm1aWbt2rTouCQWRcQg8ZMRG8iwIwXAXnCDRoUMHlZn5l19+UQIWBef04oxmnCCBbNc4k9kqEJhI4oWI/6JFi9xuCSIemayRoAzHQFnL1JGVGwLW2+oCK+M3kp7hLGfcCwr+jaOe4Et4CYIjmawCH8HxWTgWC8duQfCi4CUBzqNGxmmwxMoEX4UCONzeRHskQAKxETChVSiAbe6TJpxKN9KIIUPk0mfLVDMZKYB146Z9BxGgAPY+2HERwBAkED3Yn4vkVpUrV1YiFZFciOMZM2bEEMBYZg6RBUGFjNCI+D700ENKuEAUQ3RBpJw4cUJy5MgRfdP4Xf369dVxQ7lz51ZCN3369ILEWhDNEMmeEc1WrVoJjlvC8TyIHgdS4lsAd+nSRb1EwAsDiGEk2UKf8P2GrNf4XbgL/hawnxq8wBBjAK54IYEjlzAWSIrmWqxVAN7E7K1bt5ToRDZw+AGShR05ckT9PxKeYew8VwjANiK/U6ZMUedH4+UHoslIYgYfwQsVz+g06kD4vvzyy+oatAkBDTGN8ceRUxMmTIiBC0dTrVy5Uv0eKxd27twpqVOnVlF2q4AF7t1X4fMj3F5IeyTgDAImtAoFsM19y4RT6UZ6cvBgubxseaQA7tRJsvRyXxqmu33aJwG7EuAENvwCGBaxXxfnyENAQPwiQocILcQIorSeEWDUwX5NCJV58+YpoQSRhGgeoojY+4psyjhn2HPpL4QhlsxCzCA6iALRAjGMrMkQ1hDVVsHyW5ypC4HuTYB5IxLfAvjevXuqT4jKok8ZMmRQLCDaIE51FbQL8YkxAG9EbRF5HT58uJswtNqPTQDjmps3b6ol7zjj99ixY6oftWvXVv3IlSuXz27ALqL6iDgnTZpUypUrp/zJ23FXlhG8GMBLDQhriGYI2a5du0rr1q29tmOtBIiNpbcEZq7X8/mhyxNplwTsTcCEVqEAtrdPqTfkKHiba5fiJoBf7yRZPPZG2aWf7AcJxDcBTmDjm3jw7SEhEgS0tQQ3eAv/VwPCHMK6Xbt2MmfOnLiYYl0SED4/6AQkQAKhEDChVSiAQxmpRFTHhFPpxnNy0CC5vPxz1UxGCmDduGnfQQQ4gU04g42kSIULF5YkSZJE39Tp06elRYsWai9vMEuWffUKS2WRZAsJuhCFZiGBuBDg8yMu9FiXBJxLwIRWoQC2ub+ZcCrdSN0EcOfXJUuPHrqbpH0ScAQBTmATzjBjaezmzZtVxuCsWbNKRESEbNmyRe3PLF26tNoHi72oLCSQUAjw+ZFQRoL3QQKJi4AJrUIBnLh8JOi7NeFUQd9kkBVODhwklz+PigBTAAdJj5eTgG8CnMAmHO9YunSpzJ8/X3bs2CFIpIUkWAULFlSJmXr16qWSIrGQQEIiwOdHQhoN3gsJJB4CJrRKvAlgJOSoW7du4hkNm9ypCafSje7kgIFy+YsvVDOZ3ugsmbt3190k7ZOAIwhwAuuIYWYnSUALAT4/tGClURKwPQETWiXeBDAyXeIcxMmTJ6vkHSzxQ8CEU+numbsAfkMyd++mu0naJwFHEOAE1hHDzE6SgBYCfH5owUqjJGB7Aia0SrwJ4CZNmqiz6ZDCH+faIYW/dRC87UfWYAdNOJXu7p58c4Bc/vJL1UymNyiAdfOmfecQ4ATWOWPNnpJAuAnw+RFuorRHAs4gYEKrxJsAxhCuWbNGunfvrs4czJEjh4wZM0ZatmzpjNE11EsTTqW7qyf7vymXv/oqUgB36SKZu3XV3STtk4AjCHAC64hhZidJQAsBPj+0YKVRErA9ARNaJV4FMEYQB8tPmzZNHSR/5coVKV++vEydOlVKlChh+wE20UETTqW7n24CuGtXydy1i+4maZ8EHEGAE1hHDDM7SQJaCPD5oQUrjZKA7QmY0CrxLoCtUTx79qz0799fFi5cKA888IC89tprMmrUKMmUKZPtBzo+O2jCqXT372T//nL5q69VM5kogHXjpn0HEeAE1kGDza6SQJgJ8PkRZqA0RwIOIWBCqxgTwNaY4pzDrl27yh9//CHp0qWTYcOGqf9H0iyWuBMw4VRxv+vYLbgJ4G5dJXMXRoB1M6d9ZxDgBNYZ48xekoAOAnx+6KBKmyRgfwImtIpxAYxhPXXqlHTu3Fm++uorFQ1+8sknZcqUKVK1alX7j7rmHppwKs1dkhP9+smVr1eoZjJRAOvGTfsOIsAJrIMGm10lgTAT4PMjzEBpjgQcQsCEVol3AXz79m3ZunWr/Pbbb9E/R44cUUN8//796KGGEG7WrJnaL5whQwaHuED4u2nCqcLfC3eLJ/r2kysrogRw926S+Y03dDdJ+yTgCAKcwDpimNlJEtBCgM8PLVhpURNkrQAAIABJREFUlARsT8CEVok3AdylSxfBcue//vpL7t69Gy14H374YSlatKhUqFAh+ufGjRvyn//8R1atWiX58uWT1atXS/78+W3vADo6aMKpdPTD1aarAM7co7tk6txZd5O0TwKOIMAJrCOGmZ0kAS0E+PzQgpVGScD2BExolXgTwNaeXkRzy5UrFy12y5QpIylSpPA6uPPmzZMOHTrIiy++KJ9//rntHUBHB004lY5+uAng//SVK//9r/oVBbBu2rTvJAKcwIY+2gsWLJC2bdvK0KFDVS6LQAtWO+XNm1cOHz4caBXj1+HFNFZuua7a0nFT8dWOr3vHqRU4pQJzkf3790uqVKnkueeeU6dYFC5cOOgu37x5U0aPHi1Lly6Vo0ePqtVttWvXlrffflty5szp0x5867333lNHSCZNmlTNoQYPHqzmUZ7l+vXrar6EgAN+/vzzT/n333+D9sugOycifH6EQo11SIAETGiVeBPA+ALBw7pQoUJBjXStWrXk999/lwsXLgRVjxdHEjDhVLrZn+jzH7mycmWkAO7ZQzK9/rruJmmfBBxBgBPY0IeZAjh0dr5qmhTA+Ft46aWX5IsvvlAJOqtVqybnzp2T9evXS/LkyWXt2rWCF/iBllu3binxvGnTJsmePbtUqlRJvfSASM2cObP6/aOPPhrDXM+ePVVOFLRZs2ZNgR2sisPLh2XLlkmDBg3c6kDwFi9ePIadYF/MBNov1+v4/AiFGuuQAAmY0CrxJoBDHd727dvL/Pnz1fnBLMETMOFUwd9lcDXcBXBPyfR6p+AM8GoSIAGvBDiBDd0xLl++LBEREeoov2CO82ME2DdzkwJ47ty5agVagQIF5Oeff5asWbOqG12+fLkSxo8//rj8888/gm1cgRREbEeOHCnly5eX77//XkWTUSZOnCh9+vSRKlWqyLp169xM/fjjj1KjRg3JmDGjbNy4Ud0LCv797LPPqtVzhw4dUgLdKgcOHFBR5tKlS6uflStXyltvvcUIcCCDxGtIgASMEDChVRK8AN69e7esWbNG3mCio5Cc0oRThXSjQVQ60buPXFm1StXI3JMCOAh0vJQEYiVAARz/DkIBnDAFME6jgMBFBNgzyoptWV9//bWKwDZu3Niv02AJcpYsWQQvSZAE1DNCW6xYMZUfBcdBlixZMtpenTp15JtvvpFJkyYJIsGupUePHmp59vjx45WA9lXGjBkjAwYMoAD2O0q8gARIwBQBE1olwQtgU4Nhl3ZNOJVudm4CuFcvydSpo+4maZ8EHEGAAtj7MGOpKhIxIkoH4YM9vhBGx48fFyR4nDx5ssS2BBpbeBCFw95M/BtLXTt16iTdu3dXZ9572wN8584dFR3E9iHst4WAQuRxxIgRUq9ePfnpp59U9A9RUtdy7NgxGTt2rBJOJ06cUFFCbD8aOHCg1z2joTi2t8isKyNEHYcMGSKfffaZWjaM/bLYN1u/fn3VHH4P4fb333+rSGjTpk3VPWOZr2ux2oFfQuzNmjVLDh48qCKiEJ5g4Rr9DKUv3uqAK8YI9wPRmiRJErfLFi9eLK1atZLWrVurcfdXsFwaxzo+9thjai+xZ8EeYM8oLfYLp0+fXnByBsY0V65cbtUQla5cubLXyLHrhRTA/kaHn5MACZgmYEKrUACbHnXN7ZtwKs1dkhO9e8uVVd+oZjJTAOvGTfsOIkABHLsAxp5PRPMgSCGGIV5xigH2V/oSwBcvXpRnnnlGRROzZcumRAtEMJa7vv766zJ9+vQYAhj7OyHwILJTpkypxBNEGFZDYRkslt1iGaynAMbv6tatK2jziSeeUDkgzp49q66FzQ8//FCJzbiW2AQwlvjCj3Bv6Ku1bxaR7m+//VZ27Ngh/fr1U/zSpEmj9tSeP39eXnnlFXV/3gQwXjLMnj1bLfuFKIT4P336tGIPIQg74SxffvmlNGzYUC0hxh5dz7Jz504pUqSIiuQiouuv4AVJr169pEmTJvLpp5/GuBwvDPBSA21aCT+tvbzYH3zmzJkYdZDsCi8PwCO2HCkUwP5Gh5+TAAmYJmBCq1AAmx51ze2bcCrNXZLjvXrJ1W++jRTAvXtLpo4ddDdJ+yTgCAIUwLELYHwKgYcj+jwjj74EcOfOnWXmzJkq2y/2j1qnHkBYIbHStWvXYgjgJUuWyKuvvqqizhCIVvQPQrF69eoqsy+KqwC+cuWKSjIJsbRw4UJp0aJFdGewtBYJlBBVRgQVoiouJTYBDLsQ7IiUQ7yjWGywbxZ9wB7YUqVKqc9OnjyphCTuG/tXXRNBWe1A4EL8W8uDwQzLkPE7LAWGwLQKXiwg2VQwxTMCj2gz7LoKUld7iApj/JHFGf3xV3r37q2WMUMEI6rvWbZv3y5PP/20lChRQrZs2aI+Bj/0MTaRDfF76dIlwdinTp3a621QAPsbHX5OAiRgmoAJrUIBbHrUNbdvwqk0d8ldAPfpLZk6UADrZk77ziAQiABGJPH+rcSVlPCBZA8JIpChFmt5L+rjVAJLvLna8yaAEaWD2MQy1r1796olsK7lzTffVEt/PQVYxYoV5ddffxUstW3ZsqVbHSsxEn7pKoCtKCP2g2J5sWeBAIMQgwCDEItLiU0AIyqOaHfBggWjm4BfIYkUosFIBoUlv67FEohIeNmmTZvoj6x2sHwbCaRcC44EQhQWIhtR7mTJkqmPkTcEoi+YgqRlrsxGjRolgwYNUi8R8DLCs9y9e1dF5PGDFQH+SseOHWXOnDnK5jvvvBPjciyLRmQfP/ATlI8++ki1j9UDv/zyi9cm8GIEy9zxkyNHDq/XUAD7Gx1+TgIkYJqACa1CAWx61DW3b8KpNHdJjvfsJVe/jYoAUwDrxk37DiIQiAD+3827cnL4xkRFJcfQ8vJg8sCy9XrrmCWAcXwNIpbeijcBjOgtlvpi6fRvv/0Wo5oV+XMVwIjSYmkr/nvjxo1oYedaGXtgsezVVQBbCZMgnL2dD4soMJb0NmvWTD7++OM4jV9sAhgRXERyPQteGiC6CSY4Asi1YBl4t27dBMITCZusYrWDBFFPPfVUDJuIjiIavmHDBhWZD1ehAA6NZCDPj9AssxYJkICdCZjQKhTAdvYom54DfLxHT7n63Xdq5LL8p49kbN/e5qPI7pFA/BAIZALrZAFctmxZdV5roAJ46dKl0rx5c597P62ltK4C+NSpU+qcWF97P9G2JfxcBbCVtdifp2AJ9Q8//ODvslg/j00AQ9xC5HoW7N/F3l3PZc64ztfycasdcPK2zxdLlLFfN9BszIF2mkugAyXlfl0gz4/QLLMWCZCAnQlQANt5dA31zYRT6e6qmwDu+x/J2K6d7iZpnwQcQSCQCayTBbC3s1otx/Am4uJTAGP/7549e1SmaGvvrTenxXVYeh2X4i8LtOd5tmjLEsDeMleHUwCHYwk0k2CF5h2BPD9Cs8xaJEACdiZgQqswAmxnj7JrBLh7D7n6/fdq5LJQANvcg9m9+CQQyATWyXuAgxXAiHhC+PlaAo2lvTgD1nMJNAQs9pn6WgKNPatIvuQqJhHZXb16dYyzZHX4T3wLYF9LoJE0atu2bW5LoMORBCuhHYOE47Zy5szpNpQ8BkmHZ9MmCZCACQIUwCao27xNE06lG+lxNwHcVzK2e013k7RPAo4gEIgAdgQIj066nnHrLbqJy71FMZGtGOf3IlESkhu5ZjhGHSR3Gj16tM8kWDgWCMcDuRZkPkb2aBRXAYxkWojs+kq0FM5xi28B7C1xFiK9WPaNlwXIIO15hnBc+2stKcdRVA0aNHAzh+zMyNIc6NJrjD/8AEu5IdiR8dm14CUIRD72aVuZrvG5ta8bCcx69uzpVgdZqrFUG8m7kPjMV2ESrLh6AuuTAAnoJmBCqzACrHtUDds34VS6u3y8W3e5GrWHLUtfCmDdvGnfOQQogL2PdagCGNY6deqkzrCFmIFgsoQaxA6OC7p69arPY5CQNRpRZCv6h8RXNWrUiD571lUA4zgcnP2LM4CRVKp9+/bqnGKrIKKMCDFsIXuyVZB1Gccm4SzjYcOGBeTs8S2A06ZNK2vXrlV7n1EQGYcIRUZsJM+CEAx3mTt3rnTo0EFlZkYWZghYFJzTizOacaQTsl3jTGarQCwjiRci/osWLXK7JYh4ZLJGgjIcA2UtU0dWbghYb6sLrIzfSHqGs5xxLyj4N456gi/BBzyP5HJtmAI43J5BeyRAAuEmYEKrUACHexQTmD0TTqUbwfFu3eTqDz+qZrL06ycZX2uru0naJwFHEKAA9j7McRHAEK0QPdifi+RWlStXViIVkVyI4xkzZsQQwFhmDpEFQYWM0Ij4PvTQQ0oEQhRDdCEZl+fxN/hd/fr11XFDuXPnVkIXZ8UisdbWrVvVmbGeEc1WrVqp45ZwPA+ix4GU+BbAXbp0US8R8MIAYhhJttAnfL8h6zV+F+6CvwXspwYvMMQYgCteSODIJYwFkqK5FmsVgDcxe+vWLbUcHtnA4QdIFnbkyBH1/0h4hrHzXCEA24j8TpkyRZ0fjZcfiCYjiRl8BC9UPKPTqIPkYBEREerWkLX82LFj6sWHdZ402ke/wl34/Ag3UdojAWcQMKFVKIBt7lsmnEo3UjcB3L+/ZGz7f+dG6m6b9knAzgQ4gQ2/AIZF7NcdMmSIEh0Qv/nz51cRWpx/iyit5znAqINjkCZMmCDz5s1TQgkiqVGjRiqKiL2vyKaMc4Y9l/5CGGLJ7MqVK1V0EAWCB2IYwgjCGqLaKlh+izN1IdC9CTBvROJbAN+7d0/1CVFZ9ClDhgyKBc4ThjjVVdAuxCfGALwRtUXkdfjw4Wr5tWeJTQDj2ps3b6ol7zjjF6IU/ahdu7bqhyVOvfUFdhHVR8Q5adKkUq5cOeVP3o67Qn1rfHxx8eZv4WDI50c4KNIGCTiPgAmtQgFscz8z4VS6kR7r2lWu/bhaNZOFAlg3btp3EAFOYBP+YCMhEgS0tQQ3LncMYQ5h3a5dO5kzZ05cTLEuCQifH3QCEiCBUAiY0CoUwKGMVCKqY8KpdOM51qWrXFsdJYDf7C8Z2zACrJs57TuDACewCWeckRSpcOHCkiRJkuibOn36tLRo0ULt5Q1mybKvXi1fvlwl2UKCLkQFWUggLgT4/IgLPdYlAecSMKFVKIBt7m8mnEo3UlcBnHXAm5KhdWvdTdI+CTiCACewCWeYsTR28+bNKmNw1qxZ1Z7OLVu2CDJLly5dWu2DxV5UFhJIKAT4/EgoI8H7IIHERcCEVqEATlw+EvTdmnCqoG8yyArH3ugi19asUbUogIOEx8tJIBYCnMAmHPdYunSpzJ8/X3bs2CFIpIUkWAULFlSJmXr16qWSIrGQQEIiwOdHQhoN3gsJJB4CJrQKBXDi8Y+Q7tSEU4V0o0FUchPAAwdIhlatgqjNS0mABHwR4ASWvkECJBAqAT4/QiXHeiTgbAImtAoFsM19zoRT6UZ6rPMbcm3tWtVMVgpg3bhp30EEOIF10GCzqyQQZgJ8foQZKM2RgEMImNAqFMA2dy4TTqUb6bHXO8u1deuiBPBAydDqVd1N0j4JOIIAJ7COGGZ2kgS0EODzQwtWGiUB2xMwoVUogG3uViacSjdSNwE8aJBkeLWl7iZpnwQcQYATWEcMMztJAloI8PmhBSuNkoDtCZjQKhTANncrE06lG+mxTq/LtZ9+iowAUwDrxk37DiLACayDBptdJYEwE+DzI8xAaY4EHELAhFahALa5c5lwKt1Ij3bqJNd/Wh8pgAcPlgwtW+hukvZJwBEEOIF1xDCzkySghQCfH1qw0igJ2J6ACa1CAWxztzLhVLqRHu3YUa6v/zlSAA8ZLBlaUADrZk77ziDACawzxpm9JAEdBPj80EGVNknA/gRMaBUKYJv7lQmn0o30aIeOcv3nKAH81hDJ8MorupukfRJwBAFOYB0xzOwkCWghwOeHFqw0SgK2J2BCq1AA29ytTDiVbqRH23eQ67/8oprJNvQtSd+8ue4maZ8EHEGAE1hHDDM7SQJaCPD5oQUrjZKA7QmY0CoUwDZ3KxNOpRvp0Xbt5fqvv0YK4GFDJX2zZrqbpH0ScAQBTmAdMczsJAloIcDnhxasNEoCtidgQqtQANvcrUw4lW6kR19rJ9c3bIgSwMMkfbOmupukfRJwBAFOYB0xzOwkCWghwOeHFqw0SgK2J2BCq1AA29ytTDiVbqRHX3tNrm/YGCmAhw+X9E1f1t0k7ZOAIwhwAhv6MC9YsEDatm0rQ4cOlWHDhgVs6IEHHpC8efPK4cOHA65j+sJ8+fLJkSNH5P79+1pvJb7a8dWJe/fuydSpU2XevHmyf/9+SZUqlTz33HMyfPhwKVy4cNB9v3nzpowePVqWLl0qR48elQwZMkjt2rXl7bfflpw5c8awd+zYMVmxYoVs3rxZfvvtN9mzZ49ivnbtWnn22WeDbl93BT4/dBOmfRKwJwETWoUC2J6+FN0rE06lG+mRtm3lxsZNkQJ4xHBJ/zIFsG7mtO8MApzAhj7OFMChs/NV06QAxt/CSy+9JF988YWkS5dOqlWrJufOnZP169dL8uTJlQgtU6ZMwJ2+deuWEs+bNm2S7NmzS6VKldRLD4jbzJkzq98/+uijbvYmT54svXr1itEGBXDA2HkhCZBAIiBgQqtQACcCx4jLLZpwqrjcbyB1j7RpKzc2RQngt0dI+iZNAqnGa0iABPwQoAAO3UUuX74sERERkilTJvUTaGEE2DcpkwJ47ty50qFDBylQoID8/PPPkjVrVnWjy5cvV8L48ccfl3/++UcefvjhgIZ68ODBMnLkSClfvrx8//33KpqMMnHiROnTp49UqVJF1q1b52br66+/VkK7dOnS6qdr166qLgVwQMh5EQmQQCIhYEKrUAAnEucI9TZNOFWo9xpovSOt28iN335Tl2d/521J99JLgVbldSRAArEQoACOf/egAE6YAvjJJ59UAhcR4AYNGrjd5IsvvigQp8uWLZPGjRv7dZp///1XsmTJInhJsnXrVilevLhbnWLFislff/0lf/zxh5QsWdKnPSyX/u677yiA/RLnBSRAAomJgAmtQgGcmDwkhHs14VQh3GZQVY60ai03Nm+OFMAj35F0AUxAgmqAF5OAQwlQAHsfeCxVzZ8/v4rSQfhgjy+E0fHjx6VLly6CpaqxLYG+cOGCvPXWW/L5558L/o2lrp06dZLu3bvLgw8+6HUP8J07d1R0EPtPsd8WAgqRxxEjRki9evXkp59+kkOHDgmipK4F+0bHjh0r33zzjZw4cUJSpEghFSpUkIEDB6r/hqN4i8y6Mlq5cqUMGTJEPvvsM7VsGPtlsW+2fv36qnn8fvz48fL333+rSGjTpk3VPWNpsWux2oFfYi/urFmz5ODBg5IxY0YlPMECy5PDXcAVY4T7gWhNkiSJWxOLFy+WVq1aSevWrdW4+yuI2FatWlUee+wxtZfYs2APMPzD3/5xCmB/pPk5CZBAYiRgQqtQACdGTwnink04VRC3F9KlR15tJTd+/z1KAI+UdI0bhWSHlUiABNwJUADHLoCx5xPRPAhSiGGI16JFiyrh4ksAX7x4UZ555hkVTcyWLZtUrlxZiWAsd3399ddl+vTpMQQwEh1B4EFkp0yZUokniLA1a9aoJblYdrtx48YYAhi/q1u3rqDNJ554QvD8P3v2rLoWNj/88EMlNuNaYhPAWOILP4KIRF+tfbOIdH/77beyY8cO6devn+KXJk0ataf2/Pnz8sorr6j78yaA8ZJh9uzZKvFT+vTplfg/ffq0Yo/lybATzvLll19Kw4YN1bJj7NH1LDt37pQiRYqoSC4iuv6KtZe3SZMm8umnn8a4HC8M8FIDbeIlia9CAeyPND8nARJIjARMaBUK4MToKUHcswmnCuL2Qrr0SMtX5cYff0QK4FGjJF2jhiHZYSUSIAEK4EB8wIpu4loIvFWrVsWIPPoSwJ07d5aZM2eqbL/YP4qILAqEFRIrXbt2LYYAXrJkibz66qsq6gyBmCtXLlUHQrF69ery559/qv93jQBfuXJFChUqJGfOnJGFCxdKixYtoruGpbU1a9YURJURQUXSpbiU2AQw7EKwI1IO8Y5iscG+WfQB+1hLlSqlPjt58qQSkrjvAwcOuCWCstqBwIX4t5YHgxmWIeN3PXr0UBF4q+DFApJNBVM8s3Aj2gy7vgQposKIPCOLM/rjr/Tu3VsmTZqkElohqu9Ztm/fLk8//bSUKFFCtmzZ4tMcBbA/0vycBEggMRIwoVUogBOjpwRxzyacKojbC+nSwy1bys0/IicJ2UePlnQN3fdnhWSUlUiABFTkDketoCCCiAinZ0EkERltE1NJliyZIAIZanEVwL///nu0eHO1500AX79+XYnN27dvy969e9USWNfy5ptvqqW/ngKsYsWK8uuvvwqW2rZs2dKtzo8//ig1atRQv3MVwFaUEQmVsLzYs0CAQYhBgHnLLBwMm9gEMHwG0e6CBQtGm4RfIYkUosFIBoUlv67FEojz58+XNm3aRH9ktYPl20gg5Vp27dqlorAQ2YhyY4xRdu/eLWPGjAmmOyppmSuzUaNGyaBBg9RLBLyM8Cx3795VEXn8YEWAv9KxY0eZM2eOsvnOO+/EuBzLohHZxw/8xFehAPZHmp+TAAkkRgImtAoFcGL0lCDu2YRTBXF7IV16uEVLuRn1ljz7mNGSziNBSUhGWYkESCAgAYyzTCHaElPp379/jP2lwdy/JYBxfA0ilt6KNwGM6C2W+mLpNM5x9SxW5M9VACNKi32x+O+NGzeihZ1rXeyBxTJqVwFcp04dte8XwtnbXl9EgbGkt1mzZvLxxx8H0/0Y18YmgLF3FpFcz4KIL6KbYIIjgFwLloF369ZNIDwHDBgQ/ZHVDhJEPfXUUzFsInKMaPiGDRtUZD5chQI4NJKBvEALzTJrkQAJ2JmACa1CAWxnjxJRe8BQsGfJLuXwKy3kZtS+qxxjx0jaF1+0S9fYDxIwSiCQCayTBXDZsmXVea2BCuClS5dK8+bNxdfeT2sprasAPnXqlDonFpFjLAv2Vizh5yqArazF/hwIS6h/+OEHf5fF+nlsAhjiFiLXs2D/Lvbuei5zxnW+lo9b7YCTt32+WKKM/bqBZmMOtNNcAh0oKffrAnl+hGaZtUiABOxMwIRWoQC2s0fZVQA3f0VubtumRi7HuLGS9oUXbD6K7B4JxA+BQCawThbA3s5qtUbGm4iLTwGM/b9Yvo5M0dbeW29eg+uw9DouxV8WaM/zbNGWJYC9Za4OpwAOxxJoJsEKzTsCeX6EZpm1SIAE7EyAAtjOo2uobyacSndXDzdrLjejksDkeHecpI06WkN3u7RPAnYnEMgE1sl7gIMVwIh4Qvj5WgKNpb04A9ZzCTQELPaZ+loCjT2rSL7kKiYR2V29erXfs2TD4cPxLYB9LYFG0qht27a5LYEORxIsHoMUmpcE8vwIzTJrkQAJ2JmACa3CCLCdPcquEeCmzeTm9u2REeB335W09evZfBTZPRKIHwKcwHrn7HrGrbfoJmp5i2IiWzHO70WiJCQ3wv5Y14LkTqNHj/aZBAvHAuF4INeCzMfIHo3iKoCxLxuRXV+JlsLpQfEtgL0lzkKkF8u+8bIAS8U9zxCOa3+tJeU4iqqBR54JZKBGlutAl15j/OEHWMoNwY6Mz64FL0Eg8rFP28p07e3+mQQrrqPK+iRAAgmRAAVwQhyVRH5PJpxKN7JDTZvKre1/RQrg8eMlbb26upukfRJwBAEK4PAKYFjr1KmTOsMWSaogmCyhBrGD44KuXr3q8xgkZI1GFDlnzpzqxpD4ChmgrbNnXQXwpUuXVOZunAGMpFLt27d3y+KNiDIixLCF7MlWQdZlHJuEs4yHDRsWkJ/HtwBOmzatrF27Vh2XhILIOEQoMmIjeRb27Ia7zJ07Vzp06KAyM//yyy9KwKLgnF6c0YwjnZDtGmcyWwViGUm8EPFftGiR2y1BxCOTNRKU4Rgoa5k6snIjc3dsqwssQxTA4R5l2iMBEkgIBExoFUaAE8LIa7wHE06lsTvK9KGXm8qtv6IE8ITxkrYuBbBu5rTvDAIUwOEXwBCtED3Yn4vkVpUrV1YiFZFciOMZM2bEEMBYZg6RBUGFjNCI+D700ENKBEIUQ3QhGdeJEyckR44c0TeN39WvX18dN5Q7d24ldNOnTy9IrAXRDJHsGdFs1aqVOm4Jx/MgehxIiW8B3KVLF/USAS8MIIaRZAt9wvcbsl7jd+Eu+FvAfmrwAkOMAbjihQSOXMJYICmaa7FWAXgTszg6DMvhkQ0cfoBkYUeOHFH/j4RnGDvPFQIRERHqLGKrIOqNKHLhwoWjk4LVrVtXhgwZEu7uh2SPz4+QsLESCTiegAmtQgFsc7cz4VS6kR5q8rLc2rFDNZNz4gRJU6eO7iZpnwQcQYAT2PALYFjEfl2IFIgpiN/8+fOrCC3Ov8W5uZ7nAKMOjkGaMGGCzJs3TwkliKRGjRqpKCL2viKbMs4Z9lz6C2GIM39XrlyplkijQHBBDENMQVhDVFsFy29xpi4EuqcA8+X08S2A7927p/qEqCz6lCFDBsUC5wlDnOoqaHfKlClqDMAbUdvnnntOhg8frpZfe5bYBDCuRQI5LHn/6KOP5NixY6ofiOqiH7ly5Yphz/X8aV99bN26tVp+nxAKnx8JYRR4DySQ+AiY0CoUwInPT4K6YxNOFdQNhnDxoZeayK2//44UwJMmSprnnw/BCquQAAl4EuAENuH7xPHjx5WAtpbgxuWOIcwhrNu1aydz5syJiynWJYGAzhEnJhIgARLwJGBCq1AA29wPTTiVbqSHGr8kt6LONc45eZKkqV1bd5O0TwKOIEABnHCGGUmRsNQ1SZIk0Td1+vRpadGihdrLG8ySZV+9Wr58uUqyhQRdiEKzkEBcCPD5ERdSc7p7AAAgAElEQVR6rEsCziVgQqtQANvc30w4lW6khxo1llu7dqlmck6eLGlq19LdJO2TgCMIcAKbcIYZS2M3b96sMgZnzZpVsB90y5YtgszSpUuXVvtgsReVhQQSCgE+PxLKSPA+SCBxETChVSiAE5ePBH23Jpwq6JsMssLBRo3k9q5/IgXwlCmSplbNIC3wchIgAW8EOIFNOH6xdOlSmT9/vuzYsUNlf0YSrIIFC6rETL169ZIUKVIknJvlnZCACJdA0wtIgARCImBCq1AAhzRUiaeSCafSTedgw0Zy+58oATx1iqSpSQGsmzntO4MABbAzxpm9JAEdBPj80EGVNknA/gRMaBUKYJv7lQmn0o30YIOGcnv37sgI8LSpkqZGDd1N0j4JOIIAJ7COGGZ2kgS0EODzQwtWGiUB2xMwoVUogG3uViacSjfSgy82kNt79qhmck2fJqmrV9fdJO2TgCMIcALriGFmJ0lACwE+P7RgpVESsD0BE1qFAtjmbmXCqXQjPfjCi3J7795IATxjuqSuVk13k7RPAo4gwAmsI4aZnSQBLQT4/NCClUZJwPYETGgVCmCbu5UJp9KN9GD9F+T2vn2RAvi9GZK6alXdTdI+CTiCACewjhhmdpIEtBDg80MLVholAdsTMKFVKIBt7lYmnEo30oP168vtffujBPB7krrqc7qbpH0ScAQBTmAdMczsJAloIcDnhxasNEoCtidgQqvYWgDfuHFDvv/+e1mxYoX88ssvcuTIEXWUxOOPPy6NGzeW3r17S6pUqbw61oIFC+S9996TXbt2SdKkSaVcuXIyePBgqVChgk9H/PXXX2XkyJGyadMm+ffff+XJJ5+Url27SqtWrXzWOX78uAwZMkS+++47ddRFnjx5pHnz5jJgwICwnPFowql0/6UeqFdP/t1/IFIAv/+epH6OAlg3c9p3BgFOYJ0xzuwlCeggwOeHDqq0SQL2J2BCq9haAM+dO1c6dOigPKdw4cJSpEgRuXLlimzYsEGuXr0qhQoVkp9++kmyZMni5l09e/aUKVOmSPLkyaVmzZpy69YtWb16tdy/f1+WLVsmDRo0iOGNy5cvl6ZNm6pz8CpXriyZMmVSdS5duiR9+vSR8ePHx6izf/9+KV++vJw7d07dGwTzH3/8IQcPHpRnnnlG1X/kkUfi5PkmnCpONxxA5QN168m/B6IE8Mz3JfWzzwZQi5eQAAn4I8AJrD9C/JwESMAXAT4/6BskQAKhEDChVWwtgBcuXKjELgQtBLBVIiIipG7durJt2zYVbf3oo4+iP/vxxx+lRo0akjFjRtm4caMUKFBAfYZ/P/vss5IiRQo5dOiQpEuXLroOIrf58+dX4hpCuFGjRuqz06dPS8WKFQVCd+3ataq+a8FniBp3795dCW6Uu3fvyssvvyxffPGFDB06VIYNGxaKL0XXMeFUcbrhACofqFNX/j14UF2Ze9ZMSVWlSgC1eAkJkIA/ApzA+iPEz0mABCiA6QMkQALhJGBCq9haAMc2OBC0WM6MCCuEK5Y5o9SpU0e++eYbmTRpkhLOrqVHjx4ydepUFc1FVNcq48aNk/79+8uLL74oX375pVsdCFkI4nr16qml2FbZvHmzlC1bVkWfjx496hbphXDOnTu3Wp595swZefjhh0P2MxNOFfLNBljxwPN15N9DhyIF8OxZkqpy5QBr8jISIIHYCFAA0z9IgARCJcDnR6jkWI8EnE3AhFZxrADG/uCUKVMqjzt58qRkz55dbt68KenTp5fbt2/LsWPHJFeuXG4e+fPPP6vlzVWqVJF169ZFf4b/X79+vSxevFhatmzpVgd7gdOmTat+d/Hixeh9vYjujhgxQtq1aydYqu1ZqlWrJmvWrPEaOQ7mz8SEUwVzf6Fce6D28/Lv4cORAnjObElVqVIoZliHBEjAgwAnsKG7BPJGtG3bNuiVOw888IDkzZtXDkc900K/g/irmS9fPpVTA9uCdJb4asdbH/bs2SOrVq0SvKzGD7YmoWAFGO4rtoKX3XhRjlVmKCVKlJC+ffuqlWd2Lnx+2Hl02TcS0EfAhFZxrAD++++/5amnnpIkSZKo/cCIBP/5559SvHhxyZw5s4q8epbr16+rqCxEMpY9WwXLoS9fviw7d+5U+3g9S+nSpdXe3u3bt0vRokXVx9hH/NVXX8mMGTPkjTfeiFEHX5b4AsXSaCyRDrWYcKpQ7zXQegdq1ZZ/jxxRl+eeM0dSVaoYaFVeRwIkEAsBTmBDdw8K4NDZ+appUgBbuUA8782fAJ48ebL06tVLrdyqXr26mlsgGSdesE+bNk0lxrRr4fPDriPLfpGAXgImtIpjBTCSYyHyWr9+ffn666/VyOK/WMYMEbx161avow3xi8RWWDadOnVq9V8rwgsRnCZNmhj1GjZsqJZGwz7aQ8EbYbwdhgh+4YUXYtSB8MUXMDJVT5gwIWTPM+FUId9sgBX316old44cjRTAc+dKqorPBFiTl5EACcRGgBPY0P0Dz3/kl0ACRPwEWhgB9k3KpAD+4IMPZN++fYIX2KVKlZJatWoJosKxCWB8ju9ciF/k/UCSS5S9e/eqLVfwkX/++UedRGHHwueHHUeVfSIB/QRMaBVHCmAsa8KeXHxJ/f7771KsWDE1ukiG1aJFC5WBGccmeStYFn3ixAn1kyNHDrV8OmfOnOrSO3fueN2vi2XRH374ofp55ZVX1LUFCxZUX64//PCDekvsWawM1hDqs2fP9ut9lvN4XnjgwAF57LHHVHTaLmV/zVpy52iUAP5grqR6hgLYLmPLfpglwAls/POnAE6YAtjzrnBqhD8BjNVc77//viBfCCLBrgV5RfBCGxFgRILtWPj8sOOosk8koJ8ABbB+xrJ79271Jhb7cfEFhS8qq1AAx8MAhKGJ/TVqyp1jx5SlPPM+kJSxnM0chuZoggQcQ4ATWO9Djf25yPSPfA9YyYPs/EhwiHPcu3Tpor5LYlsCjS0zb731lnz++edq+8yjjz4qnTp1UttbHnzwQa97gPFCdeLEiTJv3jy13xYJE1966SWVOwIvcHGEn7doJPJXjB07ViVzxItanFyA77yBAwfGeo59ME7uLTLrymjlypXqfPvPPvtMHfOHUxiGDx8evQIKv8cWH2xFwrYiHCGIe8bRg67Fagd+iQSUs2bNUntxcUpD48aNFQvXExmC6UOw1wYigLGXG0ktkS8Epzy4FoxLnjx5Et1+72A48fkRDC1eSwIkYBGgANbsC5gMILqLyYS3pcVcAq15AMJkfn/1GnLn+PFIATx/nqSMWmYWJvM0QwKOJcAJbOwCuEyZMoLEhvgOgRiGeEVeByQ19CWA8bIV3ztY+potWzaVSBEiGIkUX3/9dZk+fXoMUYTkUhB4ENlI1li1alWVrwKJEXE0H1Yv4SQDTwGM3yHREtp84okn1HLcs2fPqmthE6uQIDbjWmITwFj2Cz/CvaGvEMBIEolI97fffis7duyQfv36KX7YMoTPzp8/r1ZH4f68CWC8ZMBKKBwliG1IEP84LQHsITa9bT2Kax896/sTwNgahXtDuXbtWnSSTVc7yC8CHr62S4X7nuPbHp8f8U2c7ZGAPQhQAGscR0w4KlWqJLt27VKZOrG/B1/IroVJsDQOQBhN769WXe6cOBEpgBfMl5TlyoXROk2RgHMJcAIbuwDGpxB42EbjGXn0JYA7d+4sM2fOlNq1a6tz4hGRRUFmYWT7h1jyzAK9ZMkSefXVV1XUGQLROpEAQhFbZvBdheIqgJGPAiINCRwXLlyotvNYBUkYa9asqbbpIIIKIRaXEpsAhl0IdrxQtk5asNhg7yv6gKRQ2FeLgm1EyLuB+8aWHUTHrWK1A4EL8V+yZEn1EZghXwd+57ncGC8WnnvuuaC6F0gWbn8C+K+//lLbqTyTZLreCPqJscO1SMJpt8Lnh91GlP0hgfghQAGsiTO+LDHRwIQDZ/J++umn8tBDD8VozfUYJCxts/b2WheGcgwSJhzW22kegxSeAd5ftZrcOXlSGcuzYIGkLFc2PIZphQQcTiCQCSwiiXfvXk1UpB5+OHWMF57BdMBa3os6yBthiTdXG94EME4OgNjE0XpIhIR8DK7lzTffVEt/PQUYls/++uuvXo/W+/HHH6VGjRrKjKsAtrIP44x6LC/2LNYeVCyrRpbiuJTYBDCi4oh2I8+FVeBXWbNmVdHPwYMHy9tvv+3WPFZk4f7mz58vbdq0if7MagfLt0eOHOlWBy+zixQpokQ2otzJkiVTn2Ob05gxY4LqHpKWeWPmasSfAN6wYYOK9GPegPmDt2KNK8YWy9LtVgJ5ftitz+wPCZBA3AlQAMedYQwLmHjUqVNHvSlGFke8lU6aNKnPlnAt9k7hyxhZmF0L3jRjHxK+KDHJsMq4ceOkf//+6o00sj27Fixhg+jGni2cDWgViPGyZcuqfV3YM4SjEqyCpV25c+dWe6Pwbyx9C7WYcKpQ7zXQevuqVpW7JyPU5XkWLpSUZcsEWpXXkQAJxEIgkAnsnTtXZP3PxRMVx8qVtkmSJDEz9AfaCUsA47x4RCy9FW8CGNFbLPXF0unffvstRjUcjff000+7CWC8NMWzH//FefWWsHOtjD2wWNXkKoCt7y5f4gpRYGQ0btasmXz88ceBdt3rdbEJYERwEcn1LHhpsGXLFhXRxmos14Jl4N26dZNRo0bJgAEDoj+y2vEVMbUiqhCfVsblOHUslsoUwP7JBvL88G+FV5AACTiNgAmtYuss0Pfu3ZMmTZqofVT4wsX+I2v5mS/nst6uY4KBfVPYb4WCf2NZFZJ0YNLhuvwNExEsVcMSNCxxg+BFwZIuvBHev3+/OhIB+5dci/U22HUJ1927d9UeLSRLwb4yJFuJSzHhVHG530Dq7nuuqtyNiBLAixZKyjIUwIFw4zUk4I9AIBNYJwtgvLTctGmTV4zeBPDSpUulefPm6nsIK488C/aC4rvENQJ86tQpgdD2dR49bFjCz1UA4wx6RF79FSyhxukDcSmxCWB810LkehZ8/2HvrucyZ1zna/m41Y6/IwaXLVum9kzrLP4EMJdAi9r7jUzZKNiDjtUALCRAAiTgj4AJrWJrAWydpQvwOIvXV6IMRHRdz21E5Bd1IZax1AxJTzBhwNI/fNE2aNAgxlhC+L788svqGnzRQ0BDTCMxhq+zfHEMEt5aY08U9gNhAoPlddijheVRiFq7Rob9OZC3z004VSj3GUydfc8+J3dPnVJV8i5eJClKlw6mOq8lARLwQSCQCayTBTCiudhj6q2YFsCWQEOmaGvvrbf7xHVYeh2X4i8LtDdGlgD2lrk6nALY1BJoJsGiAI7L3xTrkoCTCZjQKrYWwIie4ugFf8XXFzKWZeGNOpZMlytXTh3rENu+HSw9e+edd1SEAKIZghZn/rVu3drnLeBoBByPgeg0Isk4JgERA+x58rb0zV9fPD834VTB3mOw1++r8qzcPX06UgAvWSwpopKpBGuH15MACbgTCEQAO3kPcLACGBFPCD9fS6CtqKFrBBhLnyFgsRrI1xJovLDFi1PX7y5EdlevXi1Y6mwli9Ll3/EtgH0tgS5RooRs27ZNXJdAm0qCpb6PeAwSI8C6/uholwRsTMCEVrG1ALaxrwTcNRNOFfDNhXjhvspV5O6ZM5EC+MMlkiIqM2iI5liNBEggikAgAtiJsFzPuA0mAowEjMjzgBeiSILlmuEYHPGic/To0T6TYOFYIBwP5FqwMghJHVFcBTCSaSGyO2jQIPUiVmeJbwHsLXEWIr14yYyXBdhu5HmGcLj7728JNNp744035P3334+RmRqfWUnI8FJ82rRp4b69BGGPz48EMQy8CRJIdARMaBUK4ETnJsHdsAmnCu4Og796X6XKcvfs2UgB/NGHkqJEieCNsAYJkEAMApzAeneKUAUwrHXq1EmdYYskVdhCYwk1RGpxXNDVq1d9HoOErNGIIlsnEmCVELblbN26NYYAxhJc7LvEaQNYvdS+fXu3PZiIKCNCDFvInmwVZF3GsUnB5JyIbwGcNm1alUcDe59REBlH0klsM0LyLCSn1F0CEcDY/4rvXJzTjBclWDmGYm13wl5mrCrDcVB2LHx+2HFU2ScS0E/AhFahANY/rkZbMOFUuju8t1IluXf2XJQA/khSlEhcGWl186F9EgiVACew4RfAEK3YOgNxhORWlStXViIVkVyI4xkzZsQQwFhmjqROSOCIjNCI+OLoPohAiGIILGy1OXHihOTIkSP6pvG7+vXrq+OGcJIAhC7OpUViLYhmiGTYdM1j0apVK3XcEqLGiB4HUuJbAHfp0kW9RMALA4hhJNlCn/D9hq1H+F24C3ghomsVZOy+deuWytpt5ebASwb8uBYr0osxwssKbKHCucc4ZhFCHYLdroXPD7uOLPtFAnoJmNAqFMB6x9S4dRNOpbvTeytWknvnogTwxx9JiqiogO52aZ8E7E6AE9jwC2BYxH5d5JCA+IT4xakBEE5IkIhMuZ7nAKMO9gJPmDBB5s2bJ0eOHFFZoXHCAM7Dxd5XZFPGOcOeS38hDCHCVq5cqZZIo0B4QwwjGSSENUS1VYoVKyY4UxcC3XOJti9/j28BjBMd0Ke5c+eqPmXIkEGxwHnCEPg6SiB7iX1FzXHk4bvvvqv2J6Mgct2vXz91HKKdC58fdh5d9o0E9BEwoVUogPWNZ4KwbMKpdHd87zMV5d7586qZfEs/luRPP627SdonAUcQ4AQ24Q/z8ePHlYDGMtpAjj2KrUcQ5hDW7dq1kzlz5iT8zvMOEzQBPj8S9PDw5kggwRIwoVUogBOsO4Tnxkw4VXju3LeVvRWekXsXLkQK4E+WSvJixXQ3Sfsk4AgCnMAmnGFG5uPChQtLkiRJom/q9OnT0qJFC7WXN5gly756heP7kGQLCboQhWYhgbgQ4PMjLvRYlwScS8CEVqEAtrm/mXAq3Uj3lq8g9y5ejBTAn34iyYsW1d0k7ZOAIwhwAptwhrl27dqyefNmtec0a9asEhERIVu2bBFkli5durTaBxuOo/ISTo95J4mdAJ8fiX0Eef8kYIaACa1CAWxmrOOtVRNOpbtze8uVl3uXLkUK4M8+leRPPaW7SdonAUcQ4AQ24Qzz0qVLZf78+bJjxw51RjySYBUsWFBeeukl6dWrl6RIkSLh3CzvhAREhM8PugEJkEAoBExoFQrgUEYqEdUx4VS68ewtW07uXb4cJYA/k+RP/d+RHrrbpn0SsDMBTmDtPLrsGwnoJcDnh16+tE4CdiVgQqtQANvVm6L6ZcKpdCPdU7ac/M8SwDhXs8j/090k7ZOAIwhwAuuIYWYnSUALAT4/tGClURKwPQETWoUC2OZuZcKpdCPdU6as/O/KlcgI8PJlkvz/UQDrZk77ziDACawzxpm9JAEdBPj80EGVNknA/gRMaBUKYJv7lQmn0o10T+ky8r+rV1Uz+T9fLsmefFJ3k7RPAo4gwAmsI4aZnSQBLQT4/NCClUZJwPYETGgVCmCbu5UJp9KNdE+p0vK/a9ciBfAXn0uywoV1N0n7JOAIApzAOmKY2UkS0EKAzw8tWGmUBGxPwIRWoQC2uVuZcCrdSPeULCX/u349UgB/+YUkK1RId5O0TwKOIMAJrCOGmZ0kAS0E+PzQgpVGScD2BExoFQpgm7uVCafSjXRPiZLyvxs3IgXwV19Ksiee0N0k7ZOAIwhwAuuIYWYnSUALAT4/tGClURKwPQETWoUC2OZuZcKpdCPdXaKk3I8WwF9JsicK6m6S9knAEQQ4gXXEMLOTJKCFAJ8fWrDSKAnYnoAJrUIBbHO3MuFUupHuLl5C7t+8GRkB/vorSVaQAlg3c9p3BgFOYJ0xzuwlCeggwOeHDqq0SQL2J2BCq1AA29yvTDiVbqS7ny4u92/dUs08uuJreaRAAd1N0j4JOIIAJ7COGGZ2kgS0EODzQwtWGiUB2xMwoVUogG3uViacSjfS3cWelvu3b0cK4P+ukEcef1x3k7RPAo4gwAmsI4aZnSQBLQT4/NCClUZJwPYETGgVCmCbu5UJp9KNdHfRYnL/338jBfDK/8ojjz2mu0naJwFHEOAENvRhXrBggbRt21aGDh0qw4YNC9jQAw88IHnz5pXDhw8HXMf0hfny5ZMjR47I/fv3td5KfLXjrRN79uyRVatWyebNm9XPwYMH1WWHDh0S3FdsZcWKFTJ+/HjZtm2buqxEiRLSt29fqVu3rs9qO3fuVH6zbt06uXbtmjz++OPSrl076d69uzz44INaOYfLOJ8f4SJJOyTgLAImtAoFsM19zIRT6Ua6+6micv/OnUgBvGqlPPLoo7qbpH0ScAQBTmBDH2YK4NDZ+appUgD37NlTpkyZEuPW/AngyZMnS69eveThhx+W6tWryyOPPCLff/+93Lx5U6ZNmyZdu3aNYXPjxo1SrVo1dU2ZMmWUwF6/fr2cOnVKmjRpIp988ongRUlCL3x+JPQR4v2RQMIkYEKrUAAnTF8I212ZcKqw3bwPQ/88VVQkWgCvkkceza+7SdonAUcQ4AQ29GG+fPmyRERESKZMmdRPoIURYN+kTArgDz74QPbt2yelS5eWUqVKSa1atQRR4dgEMD7Hdy7E79q1a6V8+fKqc3v37pUKFSoIfOSff/5R0V2r3LlzR5544glld+LEiUo8oyAKXLNmTYE4nj9/vrRp0yZQlzJ2HZ8fxtCzYRJI1ARMaBUK4ETtMv5v3oRT+b+ruF3xT5GnRO7eVUYe/WaVPJKfAjhuRFmbBCIJ/H/2rgM6quJ735BC6J2ASOih/Om9V0FAQARRejFUASkCUgWUCIjADxGRKlWUIiAivSO9914TJHQIEEgo//PN8sLLZje7m31vZ7Pv3nM4muybOzPf3MzO924ZPsC63hKYALsnATYfVYECBWwS4M8//5ymTp1KvXr1IniC1TJx4kTq27ev8ADDE6zI4sWL6dNPP6VixYrRkSNHYrU5dOgQlSpVigoXLkzHjx93vXE62CPvHw4Cxo8zAoyAQEAGV2EC7OHGJ8Oo9Ib09P8VJnr5UnSTZ+0a8rORj6X3eFg/I+ApCPAB1vJKIj83V65cVK1aNfrrr79Eruby5cspNDSUunfvLshOfCHQ9+7do6+//pr+/PNPwv/nzp2bunTpEpPfaSkHGJ5BeARnz54t8m0zZ85MH3/8MX3zzTfUoEED2rZtm0Vv5PXr12ns2LG0Zs0aCgsLo+TJkwvv4+DBg8V/tRBLnlk1RqtXr6Zhw4bRkiVL6M6dO1SwYEEaOXIkNWzYUHSP3yNH9sSJE5QyZUpBADHmZMmSxRqe0g/s8scff6Rp06aJXNwMGTJQ06ZNBRZp06bVYko2ddhDgLGO165dox07dlDlypVj6cS6BAYGxsn3bteuHc2bN4++/fZbGjp0aJxx5MmTR8zZVui1zQm44AHeP1wAMnfBCHggAjK4ChNgDzQk9ZRkGJXekJ4u9H9wVZkI8Lq15Jcjh95dsn5GwBAI8AE2fgKM/MyoqChBSEGGUZyoaNGiovCVNQJ8//59qlSpkgh9zZIlC1WtWlWQYBQ76tq1K/30009xSBGKS4HggWSnSJGCatasSb6+vrR582bKly+fCLFFaKw5KcLvUGgJfSKsFvv/7du3xbPQuXDhQkE2nZX4CDDCfmFHGBvmCgKMfFZ4uteuXSs8mQMGDBD4pU6dWnx29+5datmypRifWpR+8JJh+vTpVL16dUqXLp0g/+Hh4QJ7kE3o0VtsEeAHDx6IsUEQvox1M5dMmTIJPBAKrYy5ePHidPToUcJLg/r168dpgxzgpUuX0sqVK6lRo0Z6T9Mp/bx/OAUfN2YEDIuADK7CBNjDzU2GUekN6emChYjeVB/Ns34d+QUG6t0l62cEDIGAPQdYEKlHL0wRGIlFUvt4O1VESPFuYr4geKgObO55tEaAu3XrRr/88gvVrVuXli1bJjyyEFQWRuEjkCVzD/CCBQuoTZs2wusMgvjuu++KNiCKKKykhMqqCfCjR48IJO3WrVs0d+5catWqVczyHDhwQOSTwqsMbyKImDMSHwGGXhB2eMoVEqhgg9xXzAFFoZBXC7lx4waVKFFCjPvixYvCO66I0g/IIsg/woEhwOzDDz8UvzMPN8aLhRo1ajg0PXuqcNsiwMeOHRNhzCDBeMFhSTBPrB2eLVKkiHgkffr04oUFSDAIvbkgJxgRBvCA9+zZ06F5ufphe/YPV4+J+2MEGAH3R0AGV2EC7P524dQIZRiVUwO2o/HpAgVjnsqzYT35Zc9uRyt+hBFgBGwhYM8B9mH0C8q/84QtVW71+dnKhSmNr0+Cx6QmwPv3748hb2qFlgjwkydPBNl8/vy5KISEcFa1DBw4UIT+mhMwhM/++++/NH/+fGrdunWsNhs3bqTatWuL36kJsFJ9+MsvvxThxeai5KCqCy0lFJD4CDC84vB2BwUFxaiHXQUEBAjvJ8J8Ee6rFuTGYnzmxZ6UfhC+HRISEqvNqVOnRG4sSDa83P7+/uLzM2fO0JgxYxyaGoqWWcJMrcQWAd61a5fw9GfLlk2ExlsSZV2xtko4up+fn3gxgYJb6uJYSnvghbnjH3BwZ7Fn/3Dn8fPYGAFGQA4CMrgKE2A5a+2yXmUYld6Ti0WAN24gvzfeEb37Zf2MgKcjYM8B1sgEOGvWrMJjaUksEWB4bxHqi9DpvXv3xmkGrx9CYNUEGGQIebH479OnT2OInboxcmDhZVQTYITPIu9XTa7UbeAFRkXj5s2b06JFi5wy5fgIMDy48OSaCzy+Bw8eFB7tKlWqxPoYYeDwbn733Xc0aNCgmM+UftQeU3VDxaMK8qlUXHZqYvE0ZgJsG1l79g/bWvgJRoARMBoCMrgKE2APtzIZRqUnpAi/PIMQ6DeSZ+NG8ns3m55dsm5GwDAI2HOANTIBLleuHO3Zs8duAnShDAEAACAASURBVPz7779TixYtxF2uqPZrLsgFRSi1mgDj7lcQbXiOERZsSRTipybAhQoVEp5XW4IQ6g0bNth6LN7P4yPAILcgueaC/F3k7pqHOeM5a+HjSj/qnFm13o8++ohWrFghcmSRM62n2CLAHALNVeT1tD/WzQh4MgIyuAoTYE+2KEmlxfWE9PWrV3QGRbDeSN5NG8k3GxNgPTFn3cZBwB4CbOQcYHhzkWNqSSyROFcSYIWgoVK0pQJMypjxHEKvnRFbVaAtYaQQYEvVjLUkwLJCoLkIFhNgZ/6muC0jYGQEmAAbefV1mrsMo9JpKkLt65cv6QyuQVII8OZN5PvOO3p2yboZAcMgYA8BNgwYqomqr/hxhADD4wniZy0EWvEamodAg8C+ePHCagg0clZRTEpNJuHZ3bRpEyHUWSkWpddauZoAWwuBLlmyJB0+fJjUIdCyimABa74G6ZW4KxmCKuTIB2dhBBgBRsAWAjK4CnuAba1KIv9chlHpCdnrFy/oTGFT9UxI3i2byTdrVj27ZN2MgGEQYAJseakTSoBRrRj39+LqJBTBUlc4Rk8oajR69GirRbBwLRCuB1ILKh+jejRETYBRTAue3SFDhtCoUaN0tVlXE2BLhbPg6UXYN14WIFTc/A5hrQGwFQKN/j7//HOaOnVqnMrU+EwpQtajRw+aPHlyzPAQGo+rqVBBWqnurXwIcg+Sj2JfuD7K3YX3D3dfIR4fI+CeCMjgKkyA3dMWNBuVDKPSbPAWFL2OjqYzRd5eFZF36xbyzZJFzy5ZNyNgGAT4AKstAYa2Ll26iDtsUaQKuaoKUYOnFtcFRUREWL0GCVWj4UVGZWEICl+hAvShQ4fiEGCE4MLrhit1UFSqY8eOsTxw8CjDQwxdIFSKtG/fXlybhLuMR4wYYZetu5oAp0mThrZs2SKuS4KgOBiuQUJFbBTPwhVBeos9BBjeT3zn4p5meKLLly8vhoUKzyjShVxm5Gmrqz2j2BnWDS8z1BW6UUEca407nM2rY+s914Tq5/0jochxO0bA2AjI4CpMgD3c5mQYlZ6Qvo6KojNFi8V0kXfbVvINCNCzS9bNCBgGAT7Aak+AQVpx5Q3IEYpbVa1aVZBUeHJBjqdMmRKHACPPGkWdli9fLipCw+Pr7e0tSCBIMQgWinGFhYXRO6oUEPyuYcOG4rqh7NmzC6KLe2lRWAukGSQZOhs3bhwz0bZt24rrluA1hvfYHnE1Ae7evbt4iYAXBiDDKLKFOeH7DVWv8TutBXjBo6sIKnY/e/ZMVO1OmjSp+DVeMuCfWhRPL9YIBBbXHOHe48jISKt3+SKEGyHseAaF1hBKvWPHDvrvv/8IOd3wEnt5eWk9Rc318f6hOaSskBEwBAIyuAoTYA83LRlGpSekr6Ki6GwsAryNfAMy69kl62YEDIMAH2C1J8DQiHzdYcOGCfIJ8psrVy5BnHD/LfIkze8BRht4BsePH0+zZ8+mq1eviqrQTZo0EffBIiwW1ZThJTQP/QUxBAlbvXq18CpCQLxBhlE1GcQapFoRhN7iTl0QdPMQbWuG72oC/PLlSzGnmTNnijmlT59eYIH7hEHw9RB7comtec1XrVpF48aNE/nJEHiuBwwYQA0aNLA61JMnTwovPPrFuuJFR3BwsAinTiy5tLx/6GGJrJMR8HwEZHAVJsAeblcyjEpPSF89f05nixWP6SLv9m3km5kJsJ6Ys27jIMAHWPdf69DQUEGgEUZrz7VH8c0IxBzEGkRrxowZ7j95HqFbI8D7h1svDw+OEXBbBGRwFSbAbmsO2gxMhlFpM3LLWl49e0Zni5vywCD5dmwnn0yZ9OySdTMChkGAD7Dus9SofFywYEHy9fWNGVR4eDi1atVK5PI6ErJsbVbLli0TRbZQoAteaBZGwBkEeP9wBj1uywgYFwEZXIUJsIfbmwyj0hPSV5GRdLZEybcEeOcO8smYUc8uWTcjYBgE+ADrPktdt25d2rdvn8g5DQgIEPmgBw8eJFSWLlOmjMiD9ff3d58B80gMjwDvH4Y3AQaAEUgQAjK4ChPgBC1V4mkkw6j0ROfV06d0tmSptwT4353kkyGDnl2ybkbAMAjwAdZ9lvr3338X1X9x/Q0KaaEIVlBQkCiK1KdPH0qePLn7DJZHwggQEe8fbAaMACOQEARkcBUmwAlZqUTURoZR6QnPqydP6Gyp0m8J8K5/ySd9ej27ZN2MgGEQ4AOsYZaaJ8oIaI4A7x+aQ8oKGQFDICCDqzAB9nDTkmFUekL68vETOldaRYB37yIfnaqA6jkP1s0IuCMCfIB1x1XhMTECiQMB3j8SxzrxKBkBd0NABldhAuxuVqDxeGQYlcZTiKXu5ePHdK50mbceYCbAesLNug2GAB9gDbbgPF1GQEMEeP/QEExWxQgYCAEZXIUJsIcbmAyj0hPSlxERdK5M2ZgugvbsJu+0afXsknUzAoZBgA+whllqnigjoDkCvH9oDikrZAQMgYAMrsIE2MNNS4ZR6Qnpy0eP6FzZcm8J8N495J0mjZ5dsm5GwDAI8AHWMEvNE2UENEeA9w/NIWWFjIAhEJDBVZgAe7hpyTAqPSF9+fAhnStX/i0B3reXvFOn1rNL1s0IGAYBPsAaZql5ooyA5gjw/qE5pKyQETAEAjK4ChNgDzctGUalJ6QvHzygc+UrvCXA+/eRd6pUenbJuhkBwyDAB1jDLDVPlBHQHAHePzSHlBUyAoZAQAZXYQLs4aYlw6j0hPTF/ft0vkLFtwT4wAHyTplCzy5ZNyNgGAT4AGuYpeaJMgKaI8D7h+aQskJGwBAIyOAqTIA93LRkGJWekL64d4/OV6wU00X+gwcoSQomwHpizrqNgwAfYI2z1jxTRkBrBHj/0BpR1scIGAMBGVyFCbCH25YMo9IT0hd37tD5ylXeEuDDhyhJsmR6dsm6GQHDIMAHWMMsNU+UEdAcAd4/NIeUFTIChkBABldhAuzhpiXDqPSE9MXt23S+StW3BPjoEUqSNKmeXbJuRsAwCPABNuFLPWfOHOrQoQMNHz6cRowYYbciLy8vypEjB125csXuNrIfzJkzJ129epVev36t61Bc1Y+lSZw9e5b++ecf2rdvn/h36dIl8djly5cJ44pPVq1aRT/88AMdPnxYPFayZEnq378/ffDBB1abnTx5UtjN1q1b6fHjx5Q3b14KDg6mL774gpIkSWKx3f3790WbFStW0M2bNylLliz00Ucfid+ltXI94MuXL+nHH3+k2bNn04ULFyhlypRUo0YNGjlyJBUsWNCp9eT9wyn4uDEjYFgEZHAVJsAebm4yjEpPSKPDb9GFatXeEuBjRymJn5+eXbJuRsAwCPABNuFLzQQ44dhZaymTAPfu3ZsmTZoUZ2i2CPD//vc/6tOnD/n4+NB7771HSZMmpfXr11NkZCRNnjyZevToEUfn7t27qVatWuKZsmXLCoK9fft2QWqbNWtGf/zxB+FFiVru3LlDFSpUECQ2d+7cVLp0aQKJxr+goCCCzvTp08dqg7/vjz/+mJYvXy4IMvqEHvSVLFky2rJli+g/ocL7R0KR43aMgLERkMFVmAB7uM3JMCo9IY0OD6cL1arHdFHg+DHy8vXVs0vWzQgYBgE+wCZ8qR8+fEj//fcfZcyYUfyzV9gDbB0pmQR41qxZdP78eSpTpowgl++//z7BKxwfAcbn+M4F+QWZBEGFnDt3jipWrEiwkdOnTwvvriLR0dGUP39+oXfChAmCPEPgBa5Tp44gsr/++iu1b98+FlCtW7emhQsXUpMmTQRBRp8QeIxBtNu1a0d4KaOWmTNnUqdOnShfvny0Y8cOCggIEB8vW7ZMEGOMC+NTdNlrw8pzvH84ihg/zwgwAkBABldhAuzhtifDqPSENPq//+hCjZpvCfCJ4+T15otfz35ZNyNgBAT4AOv6VWYC7J4E2HxUBQoUsEmAP//8c5o6dSr16tWL4AlWy8SJE6lv377CAwyCqsjixYvp008/pWLFitGRI0ditTl06BCVKlWKChcuTMePH4/5DC9a3n33XUFUr127FkNk8cDz588pe/bsdO/ePbpx4wZlzpw5pl2hQoUEwYUHuHHjxrH6+vDDD+mvv/6ipUuXUtOmTRP0h8D7R4Jg40aMgOERkMFVmAB7uNnJMCo9IY0OC6MLtd57S4BPnSQvK/lReo6DdTMCnogAH2Atryryc3PlykXVqlUTJAE5liARoaGh1L17d0F24guBBhn5+uuv6c8//xTEBCGrXbp0icnvtJQDDM8gPILI1US+LYgMvHTffPMNNWjQgLZt22bRG3n9+nUaO3YsrVmzhsLCwih58uTC+zh48GDxXy3EkmdWjdHq1atp2LBhtGTJEhFii9xS5Jg2bNhQdI/fI0f2xIkTIgcVBBBjRhiuWpR+YJfIW502bZrIxc2QIYMgacDCWq6rFvNU67CHAGMdQUjhXa1cuXKsIWBdAgMD4+R7w1M7b948+vbbb2no0KFxhp0nTx4xZ7XnGR7hzz77TIQwb9y4MU4b5A7DbtSeY7SH3QFjeKJ9zSKn5s+fT23btrXoObYXS94/7EWKn2MEGAE1AjK4ChNgD7dBGUalJ6RRoWF08T0VAT59Kk5ulJ79s25GwJMR4ANs/AQY+ZFRUVGCkIIMozhR0aJFReErawQYhYoqVaokPG8oUlS1alVBglHsqGvXrvTTTz/FIUUoLgWCB5KdIkUKqlmzpiAsmzdvFuGr8PwhNNY8HBe/Q6El9ImwWuz/t2/fFs9CJ0JmQTadlfgIMMJ+YUcYG+aq5JjC07127VrhyRwwYIDAL3Xq1CL/9O7du9SyZUsxPksEGC8Zpk+fTtWrV6d06dIJ8h8eHi6wB9mEHr3FFgF+8OCBGBsE4ctYN3PJlCmTwAMEVBlz8eLF6ejRo4SXBvXr14/TBjnA8MquXLmSGjVqJD5X8pNRWOv777+P02bKlCnC04xwarxEgaBQFgpkIaQbRb3MBbnD8DSXKFGC4HlOiPD+kRDUuA0jwAjI4CpMgD3c7mQYlZ6QRl2/Thdr14npouCZ03p2x7oZAUMhwAdYy8uteDfxKQgeqgObex6tEeBu3brRL7/8QnXr1hW5lvDIQkBC4MEDWTL3AC9YsIDatGkjvM4giAh3hYAoorCSEiqrJsCPHj0ikLRbt27R3LlzqVWrVjGTOXDggMgnhVcZ3kQQMWckPgIMvSDs8JQrJFDBBjmmmAOKQiGvFoIwXZAujPvixYvCS6mI0g/IIsg/woEhwAwhu/idebgxXiygqrEjYk8VblsE+NixYyKMGSQYLzgsCeaJtcOzRYoUEY+gUBVeWIAEg9CbC0gsIgzgAe/Zs6f4GHm/eDmCIl3I+TUXkGWEOOM52BwE7YEVSDAiEcwFpBw2jfFgjRIivH8kBDVuwwgwAjK4ChNgD7c7GUalJ6RR167RxTrvm7pIkoQKnjqpZ3esmxEwFAL2HGDhSXz07EWiwiW1v49TkSJqArx///4Y8qYGwRIBfvLkiSCbyMtEISSEs6pl4MCBIvTXnIAhfPbff/8lhKWi2JFaEPJau3Zt8Ss1AVaqD3/55ZcivNhclBxUdaGlhC5ifAQYXnF4u1GJWBHYFQouwfuJMF+E+6oFubEYn3mxJ6UfhG+HhITEanPq1CnhsQTJhpfb399ffH7mzBkaM2aMQ1ND0TJLmKmV2CLAu3btEp7+bNmyidB4S6KsK9ZWCUf38/MTLyZQcEtdHEtpD7wwd/wDDhC8zNiwYQPNmDGDOnbsGKcrxUZgJ3jZAPnuu+9oyJAh4sUIXrCYy4sXL0SUAf4hyiEhYs/+kRC93IYRYAQ8GwEZXIUJsGfblJTKanpCGnXlCl2sW8/Uhbc3FTx5Qs/uWDcjYCgE7DnAPoyMpmIjTYfqxCJHh9ehNMkSXi1eIcBZs2YVHktLYokAw3uLUF+ETu/duzdOM3j9EAKrJsAgQ8iLxX+fPn0aQ+zUjZEDCy+jmgAjfBZ5v2pypW4DLzDCX5s3b06LFi1yauniI8Dw4MKTay7w+B48eFB4tKtUqRLrY4SBw7sJkjZo0KCYz5R+1B5TdUPFowryqVRcdmpi8TRmAmwbWXv2D9ta+AlGgBEwGgJMgI224i6Yrwyj0nNazy9fpkv13uRJ+fpSwePH9OyOdTMChkLAngOskQlwuXLlaM+ePXYT4N9//51atGgh7nJFtV9zUcJO1QQYd7+CaMNzjLBgS6IQPzUBVir82jJYhFDDe+iMxEeAQW5Bcs0F+bvI3TUPc8Zz1sLHlX7UObNqvQjnRW6rM5WL7cXBFgHmEGgSud+4CgqCHHREA7AwAowAI2ALARlchT3AtlYlkX8uw6j0hOz5pUt0qf4HogsvPz8qcOyont2xbkbAUAjYc4A1MgGGNxc5ppbEEolzJQFWCBoqRVsqwKSMGc8h9NoZsVUF2hJGCgG2dI+ulgRYVgg0F8FiAuzM3xS3ZQSMjIAMrsIE2MMtToZR6Qnp8wsX6FID01UaXkmTUoGjse9N1LNv1s0IeDoC9hBgI+cAO0qA4fEE8bMWAq14Dc1DoEFgkZNpLQQaOasoVKQmk/Dsbtq0iRDqrBSL0steXU2ArYVAlyxZkg4fPkzqEGhZRbCANV+DxB5gvf7mWC8j4MkIyOAqTIA92aKIPC4H+Pn583SpoekqCK9kyajA4YRd1+Dhy87TYwQShIA9BDhBihN5I/Udt454gFGtGPf3oqgQimCpKxwDEhQ1Gj16tNUiWLgWCNcDqQWVj1E9GqImwCimBc8uCh2NGjVKV8RdTYAtFc6Cpxdh33hZgFBx8zuEtQbAVgg0+vv8889p6tSpcSpT4zOlCBmuJ5o8eXLM8BAaj6upUEFaqe6tfAhyD5KPYl+4PkqR//77T1QGx3VYuF8YNqYICq5lz55d5IgjX139mRImjwrSqBKtFlTVRuVuZ8LJef/Q2upYHyNgDASYABtjnV06SxlGpecEn509R5c//NBEgJMnpwKHDurZHetmBAyFAB9gLS93QgkwtHXp0kXcYYsiVSAXClGDpxbXBUVERFi9BglVo+FFRmVhCEgNKvsq97SqCTBCcJF3iSt1UFQK1YHVOZjwKMNDDF0gVIq0b99eXJuEu4xHjBhhl727mgCnSZOGtmzZIq5LgsAzDsKGasconoUrfvQWewgw8l/xnQtiihcl5cuXF8NChWcU6UIuMypkq6s9o9gZ1g1rqa7QjQriWGvc4WxeHRs6UR0cL0hwXzRC7dEnBFcdAY927dqJ3Gq1zJw5kzp16iTukt65c2cMOca1SNCDcWF8ii5HMeX9w1HE+HlGgBEAAjK4CnuAPdz2ZBiVnpA+O3uWLn9oenOdJEUKyn/wgJ7dsW5GwFAI8AFWewIM0oorb0COUNyqatWqgqTCkwtyPGXKlDgEGGHmICTw1KEiNDy+3t7eggSCFIOgoBhXWFgYvfPOOzGDxu8aNmworhuCFxBEF/fSorAWSDNIsrn3r23btuK6JXiN4T22R1xNgLt37y5eIuCFAcgwimxhTvh+Q9Vr/E5rAV7w6CqCit3Pnj0TVbuTJk0qfo2XDObXECmeXqwRCCyuOcJVRJGRkbHu8lWPFyHcCGHHMyi0hlDqHTt2EDy9yOmGl9jLyyvWFLHGINgoKgabQJXtkydP0okTJwTBhS3gTl+14O8b+mADsAvYFfTgJQuukYJ9of+ECu8fCUWO2zECxkZABldhAuzhNifDqPSE9Nnp03T5oyYmApwqFeXfv0/P7lg3I2AoBPgAqz0Bhkbk6w4bNkwQD5DfXLlyCeKE+2/hpTW/Bxht4BkcP348zZ49m65evSqqQjdp0kTcB4uwWBAfeAnNQ39BDEHCVq9eLbyKEBBvkGFUTQaxBqlWBKG3uFMXBN08RNua8buaAL98+VLMCR5MzAnEDljgPmEQOT3Enlxia17zVatW0bhx40R+MgSe6wEDBlCDBg2sDhXkFfrQL9YVpDY4OFh4dK1VU8bLFXjtUQk7PDxc3LWMNR45ciSlTZvWYl/ActKkScKuYEMIIa9Ro4ZogxBpZ4T3D2fQ47aMgHERkMFVmAB7uL3JMCo9IY08eZKuNP3YRIBTp6b8++Leraln/6ybEfBkBPgA6/6rGxoaKgi0Eq7qzIhBzEGsQbRmzJjhjCpuywjwNUhsA4wAI5AgBGRwFSbACVqqxNNIhlHpiU7kiZN05WMTAfZOk4aC9lq+k1PPMbBuRsBTEWAC7D4ri8rHBQsWJF9f35hBwcvXqlUrkcvrSMiytVktW7ZMFNlCgS54oVkYAWcQ4P3DGfS4LSNgXARkcBUmwB5ubzKMSk9II48fpyvNPjER4LRpKWjPbj27Y92MgKEQ4AOs+yx33bp1ad++fSLnFKGtyAc9ePAgobJ0mTJlRB4s8jZZGAF3QYD3D3dZCR4HI5C4EJDBVZgAJy4bcXi0MozK4UE60CDy2DG68smnJgKcPj0F7frXgdb8KCPACMSHAB9g3cc+UNkX1X9x/Q1yPVEEKygoSBQx6tOnDyVPntx9BssjYQSIOASarYARYAQShIAMrsIEOEFLlXgayTAqPdGJPHKErjRvYSLAGTNS0M4denbHuhkBQyHABNhQy82TZQQ0RYD3D03hZGWMgGEQkMFVmAB7uHnJMCo9IX166DBdbdnSRIAzZaSgHUyA9cSbdRsLAT7AGmu9ebaMgJYI8P6hJZqsixEwDgIyuAoTYA+3LxlGpSekTw8doqstW4kufDJnpnzbt+nZHetmBAyFAB9gDbXcPFlGQFMEeP/QFE5WxggYBgEZXIUJsIeblwyj0hPSpwcO0NXWbUwEOCCA8m3bqmd3rJsRMBQCfIA11HLzZBkBTRHg/UNTOFkZI2AYBGRwFSbAHm5eMoxKT0if7t9PV9u0NRHgrFkp35bNenbHuhkBQyHAB1hDLTdPlhHQFAHePzSFk5UxAoZBQAZXYQLs4eYlw6j0hPTJ3n10rV070YXvO+9Q3s2b9OyOdTMChkKAD7CGWm6eLCOgKQK8f2gKJytjBAyDgAyuwgTYw81LhlHpCemTPXvoWvsOJgKcLRvl3bRRz+5YNyNgKAT4AGuo5ebJMgKaIsD7h6ZwsjJGwDAIyOAqTIA93LxkGJWekD7ZvZuudfjMRICzZ6e8G9br2R3rZgQMhQAfYA213DxZRkBTBHj/0BROVsYIGAYBGVyFCbCHm5cMo9IT0sf//kvXgzuaCHBgIOVdv07P7lg3I2AoBPgAa6jl5skyApoiwPuHpnCyMkbAMAjI4CpMgD3cvGQYlZ6QPt75L13vaCLAfjlyUJ51a/XsjnUzAoZCgA+whlpuniwjoCkCvH9oCicrYwQMg4AMruLRBPjgwYO0YcMG2rdvn/gXFhYmjOn169fxGtWcOXPo559/plOnTpGfnx+VL1+ehg4dShUrVrTa7t9//6WQkBDas2cPRUVFUaFChahHjx7Utq2pYrElCQ0NpWHDhtG6devo3r17FBgYSC1atKBBgwaRv7+/JoYvw6g0GbgVJY937KDrnTqbCHCuXJRnzT96dse6GQFDIcAHWEMtN0+WEdAUAd4/NIWTlTEChkFABlfxaALcuHFjWrlyZRwDio8A9+7dmyZNmkTJkiWjOnXq0LNnz2jTpk2CNC9dupSg01yWLVtGn376KWHzr1q1KmXMmFG0efDgAX355Zf0ww8/xGlz4cIFqlChAt25c4cKFy4sCPOBAwfo0qVLVKlSJdE+adKkThu/DKNyetDxKHi8bRtd79LVRIBz56Y8/6zWszvWzQgYCgE+wMZdbi8vL4dsIEeOHHTlyhWH2jjycOnSpQkvd2/fvi2+a5wRLXU5Mw5LbTG3u3fvxnzk7e1NadKkoYCAACpZsiTVr1+fPv74Y/GSmsU9EOD9wz3WgUfBCCQ2BGRwFY8mwGPHjqUnT55QmTJlxL+cOXPS8+fPrXqAN27cSLVr16YMGTLQ7t27KV++fMKG8P/Vq1en5MmT0+XLlylt2rQxtgXPba5cuejRo0cEItykSRPxWXh4OFWuXJlAdLds2SLaqwWfwWv8xRdfCMINefHiBX3yySe0fPlyGj58OI0YMcJpG5ZhVE4POh4FEVu3UmjXbuIJv7x5KM/ff+vZHetmBAyFAB9g4y53+/bt4/xy586ddPHiRSpWrBgVL1481ucgbpZeemplSFqSVi11aTU/RY9CgJs3by5eBuMl9MOHD8VL4pMnT4oXztmyZaN58+ZRzZo1ne7+77//poYNG1L37t3pp59+clqfERXw/mHEVec5MwLOIyCDq3g0ATZfEoQVx0eA8UZ5zZo1NHHiRIInWC29evWiH3/8URxs4NVV5Pvvv6evvvqKPvzwQ1qxYkWsNiCyIMQNGjSgVatWxXyGcOxy5cpR5syZ6dq1a7E8vSDO2bNnp5QpU9KtW7fIx8fHKcuSYVRODdhG44jNWyj088/FU0nz5aXcKlz17Jd1MwJGQIAPsPatMkjx3LlzNXtRaV+vpqeuXr1KkZGR4gUtvKLOiJa6nBmHpbYKAbbk6Ub6EF4Qz5o1i3x9fUWqU7Vq1ZwaAhNgp+ATjXn/cB5D1sAIGBEBGVyFCfAbS8OBIl26dIIgX79+nd59991YNrhjxw4R3owv2a1bt8Z8hp+3b99O8+fPp9atW8dqg1xghGxB7t+/H5PXC+/uN998Q8HBwTRz5sw4tl6rVi3avHmzRc+xo38YMozK0TE68nzE5s0U+nl30SRpUBDl/ituiLsj+vhZRoAReIuAjANs+ONwmnloJm27uo0ioiIolV8qqp6zOgWXCKaAlAFuuTwyCbBbAqLDoOIjwEp3AwcOJER6IQrr/PnzTr0QYALs/CLK2D+cHzVrYAQYAdkIyOAqTIDfrPqRI0eoRIkSlClTJuF5NReEUsMrC5KMsGdFEA6NsCyEZCGP11wQeo3c3qNHKqaMJAAAIABJREFUj1LRokXFx0pu8pQpU+jzN95Mdbv+/fsLTzNCoxEi7YzIMCpnxmurbcTGjRTao6eJABcoQLlXLLfVhD9nBBgBOxFw5QE2MjqSeq3tRXOOzKHoV9FxRuibxJc6FO9Ak+pNIn8fbYoC2gmDzcfsIcBqQoUoIRRShKcSUT7Tpk2jjh07ipeteHmKyCOEVKMmBFJwqlSpQkOGDBEh1uZiKWz58ePHlCpVKsJ+f/jwYRozZgyhmCM8pVmzZqU2bdoIb7V5RJGWujBOfNehsOOuXbvEsEuVKiU8tUgRcjS82B4CjJfMKB4JTBFxpa7RgZfIixcvJoSrAwc8C6KMqCysB77PFUEuMVKYLMm4ceOoX79+4iP0gUivvXv3iqKaCMsOCgqili1bEqLE4I02srhy/zAyzjx3RsDTEJDBVZgAv7Giv/76S4QxgwQfOnTIom2B/KKwFb7McdjAfxUPL0hw6tSp47T76KOPxBcm9OMAAEEBDxxSUKCrUaNGcdqA+CIEu2/fvjR+/Hin7FyGUTk1YBuNH61fT2Ff9BJPJS1YkHIv/1PP7lg3I2AoBFx1gAX5rbewnvD62pJqOarRmlZrKJlvMluPuuxzRwgwSBkIIcgRChyCrKLaPyKG8KITLzzx8hQ1KlKkSEFnz56lY8eOiYih9evXCzKslvhIa8GCBSlPnjwiKgl1J16+fEnbtm0TfXbp0oV++eUX3XSBcCKNCFFU+B7Nnz9/zFy6du1KeOHrSH6tPQQYk+nWrZuYl7qeBn6P4pKo2VGkSBFBkvESGwQdL7hBzEGMldsWMDaQWxSfLFCggEhRUgQ5yHXr1hU/gjRjHfG9ivxjnAdAhvH9j1QnfM87WjTNZUbrgo5ctX+4YCrcBSPACLgQARlchQnwmwX+7bffqFWrVuKAgi9GS4KwaLz1xb933nmHbty4Ib4EIdHR0RbzdXHIWbhwofiHt8QQvDFGuBa8Ae+9916crhAW3alTJ/Fv+vTpdpmgYjzmD8OrgAMRPNSeII/WraewXiYC7F+oEOX60/Jbe0+YK8+BEXA1Aq46wHZe1ZlmHJph9/Q6l+xM0xpOs/t5vR90hABjLPhumT17dpyKxXgRiuKKIItqwUtTeCWxryN6SC3xEWA8B/IJ4qxUiAahxktXJb0HHmFFtNIF72revHmFR9s8ckl5oYs+9SDA8KaDYKOAJeatCDzwSFHCy2pFkOrUuXNnWrBggXi5jJfM6udtealBkkHy1Tc0gARjrUCe1YUw9bZBd9Tvqv3DHefOY2IEGIGEI8AEOOHY2dUyviJYTIDtglD6Q4/WrqWw3n3EOPz/7/8o17Kl0sfEA2AEPAUBVxxgbz6+SYETAy2GPVvDEeHQ1/tcd5ucYEcIMLy6KDaF0GZHREmVQdVjhO7aS1pxawHurldLhw4dREj0kiVLBFnTWhcIO6KdELKNdCJzASnH7/UgwCCdmBPI/P79+21CjHoc6dOnFzU94B13hABbU66kULVt21YURzOquGL/MCq2PG9GwJMRYAKs8+rGR4A5BFpn8DVS/2jNGgrrY3pr71+kCOVaslgjzayGEWAEXHGADdkeQkO3DHUY7JCaITS4ymCH2+nRwBECbO6ZNB8PvJL//POPCM9FDjCiiSAgc6dOnaJ169aJO+ntIa1Iw0E4rrmMHj2aBg8eLG4y6NnTVEMBEp8H2BFdSt2KUaNGidxla/3rQYCXLl1KzZo1E1cd4oYFteDFAzzB586do4iICFGlGLJo0SLxQgJRXIrYWwTr9OnTImcbLyYQVo08YKwZXqJXqFAhJv9ZD7tzd52u2D/cHQMeHyPACDiOABNgxzFzqEV8BJiLYDkEpbSHH65eTTe+NBUk8S9WlHL98Ye0sXDHjICnIeCKA2yd+XVow6UNDkNXO3dtWt/mbYirwwo0bOAIAbZW7R/DAemF5xRFmqwJCF7Tpk1jPraVAwzSbC641xbEV13QCc9opUtJ9YH3E15Qc0EKEJ7RgwAj/xd5wO+//z6tXbs2pmuQ8ZEjR9KLFy8sQot8XpBiRWwRYPxt9OjRg6ZOnWp1rZB3fPz4cQ0tLXGpcsX+kbgQ4dEyAoyAPQgwAbYHJSeeiY8Aq69BwmFEye1VukvINUh4K6wUxuJrkJxYOFXTh6v+phv9+4vfJCtWjHL+8bs2ilkLI8AIuOQezwqzKtCe0D0Oo13+3fK0O3i3w+30aOAIAbZG+lCgCvUZ4KXs06cPIUwZoc4ImUYhJRR1mjx5skNhyzhEnDhxQhMC7IgumQQYxb1QKwMYTpgwQcx948aNIicYedDIQUYhsYCAgJgcbHwvg6yhOJi9BFipzZE7d27RDwplwYuMoli4GQL/bw0zPWzQHXUyAXbHVeExMQLujwATYJ3XKD4CjK5R3AKhTRMnThRVmNWCKw4QPoaqnV9++WXMR99//724UgEVpJEHpRYUzMCVC6gOuWrVqpiPEKaFL8/MmTPTtWvXYhXUwHUO2bNnF9Um8f/OXqsgw6j0XMaHq1bRjf4DTAS4RAnKueg3Pbtj3YyAoRBwxQHWaB5gawQYIc5ly5YV1Zq3bNkSx87wvbF69epEQYBthUDjWqZBgwZp7gFG8S18X6Kys/qmBWD+888/i7zndu3axcIWYea47hAvGhwhwB988IEIVd+6dasorqUWePIRgs0E+JWo/A1BYbckSZIYav/kyTICjEDCEJDBVbgKtGqtlLfGeJOLQiL58uUTn+L/a9SoQcmSJRPXKuDuX0Xw5hdv7XElkroCJL6QUVH6woUL4nCDQ45aKleuTP/++6+4O/B///uf+AihWp9++in9+eef4s5G3J/orMgwKmfHHF/7hytX0o2vBpoIcMmSlPO3hXp2x7oZAUMh4AoCbLQcYGsEGBWLEbYL7ynuAlYLXn6iqjIImiOFqxzx2qI/W/cA2+tNVopgWbtGENcO4XpBrUOg8fIZL6GB1ZkzZ8jb21vAiBsXkOeL7/RatWrFwhbEGOMwJ8DKeli6LgoKKlasKM4C+E6H514tAwYMEOHlTICZABvqC4MnywhohIAMruLRBBhvz7/99tuY5YHnFQUr1Hf8DRs2jPBmVxF4fhEyhaspEEKFN8y4rgjtkIuFypzmAuL7ySefiGdAdEGg8cWL6xGs3eWLa5BQMOPu3bvinkLcAwmPAApr4IsWdyqqr1pIqI3JMKqEjtWedg9WrKD/Bg4yEeDSpSjnggX2NONnGAFGwA4EXEGAjVYF2hrpu3Llinh5ijBdeBBz5MghVgiFlXBPsBI1lBgIsPoaJOQbY86KKPnH+FkrAoyrCPGCGGHJfn5+4vsSL5wVwWfI/8UdvrjySCHGuHYK3+v43jUnwCD7+C625pFXwt7h7QbpVgTng0aNGtGzZ8+YAL9iAmzHNsuPMAKMgBkCMriKRxNghD8hryo++fXXXwlfbGpBO3xpo9ojvlxxpQSIMoipNYE3F0U39uzZI0gzCC0KZpiHX6nb487Er7/+WhTugCc5MDBQHHxQrRPh2lqIDKPSYtzWdDz4czn9N9hUCTZ5mTKUY/48Pbtj3YyAoRBwBQEGoEa6Bzg+0qd4KkHGatasKb5vtm/fLu6UR9QRKgsnBgKMNQUJrVevnvj+g8cX990jHBYFJuFVRfEodZ6urT8svBgAUQWJxctgvGBG0SrcbQ+yCltF+PO8efPiRFihunPRokVFe3iHMR5EZQHbNm3aiJcLIKzqEGjow5ihHy+nEcIL4oyX26jCjfuYcRZAOxBlfLcihWnXrl3Ur18/kR7FHmAmwLbsmj9nBBiBuAjI4CoeTYDZyEh8IUNOnjzpEXA8WLaM/htiukIledmylGOece9c9IgF5Um4FQKuIsCR0ZFUb2E92nb17T2s1oColqMarW29lvx9tHkpqAXgWhTBwjhQKBHECSQOHuF06dKJsOiQkBBRaGn8+PGJhgBjPohiwstikEJIyZIlRToPriHq2rWreEls6ZokS2uiEGDlM5BRFK/KkiWL0IuaHbj/Fy8NLAnwRGjyzp07RTQWwpY/++wzkXaE+hvmBBg6UEEbbTB+tAHpVlfOPnbsGA0cOFDME4UzCxYsKKpro9ZHqlSpmACzB1iL7YV1MAKGQ0AGV2EC7OFmJsOo9IT0wdKl9N/QYSYCXL485Zjzq57dsW5GwFAIuIoAA1SQ4N5re9OvR36l6Femu2/V4pvElzoU70CT6k1yK/JrKIPQaLJKlWhcNaROOdJIPatxEwRcuX+4yZR5GIwAI6ABAjK4ChNgDRbOnVXIMCo98bi/eDHd/Hq4iQBXKE85fmUCrCferNtYCMg4wIY/DqdZh2fR1itbKSIqglL5paLqOatTcIlgCkgZYKwFSMSzRYjx8+fPRViyWpBSBM+rcuuBNY9tIp46D/0NAjL2DwafEWAEEj8CMrgKE+DEbzfxzkCGUekJ6f0/FtPN4SYCnKJiRQqcPUvP7lg3I2AoBPgAa6jl1nSyKPyIXNlixYqJ4l6wJaTeoGoyrvNDsciGDRtq2icrcy8EeP9wr/Xg0TACiQUBGVyFCXBisY4EjlOGUSVwqHY1u//773RzxEgTAa5cmQJnzrCrHT/ECDACthHgA6xtjPgJywiEhoaKHF/ck3vz5k16+vSpuG8XV/4hrxaFqFg8GwHePzx7fXl2jIBeCMjgKkyA9VpNN9Erw6j0nPq9336j8G9MV1ulqFKFAmdM17M71s0IGAoBPsAaarl5soyApgjw/qEpnKyMETAMAjK4ChNgDzcvGUalJ6T3Fi6k8G9HmQhwtaoUOG2ant2xbkbAUAjwAdZQy82TZQQ0RYD3D03hZGWMgGEQkMFVmAB7uHnJMCo9Ib03fwGFh4SILlJWq0bZp/2iZ3esmxEwFAJ8gDXUcvNkGQFNEeD9Q1M4WRkjYBgEZHAVJsAebl4yjEpPSO/Nm0fh3402EeAaNSj71J/17I51MwKGQoAPsIZabp4sI6ApArx/aAonK2MEDIOADK7CBNjDzUuGUekJ6d05c+jWmLEmAvxeLcr+0096dse6GQFDIcAHWEMtN0+WEdAUAd4/NIWTlTEChkFABldhAuzh5iXDqPSE9O6s2XRr3DjRRaratendyT/q2R3rZgQMhQAfYA213DxZRkBTBHj/0BROVsYIGAYBGVyFCbCHm5cMo9IT0jszZtDt8RNMBLhuXXr3fxP17I51MwKGQoAPsIZabp4sI6ApArx/aAonK2MEDIOADK7CBNjDzUuGUekJ6Z1p0+n2RBPpTV2/PmWbMF7P7lg3I2AoBPgAa6jl5skyApoiwPuHpnCyMkbAMAjI4CpMgD3cvGQYlZ6Q3pk6lW5PMoU9p27QgLL9YAqHZmEEGAHnEeADrPMYsgZGwKgI8P5h1JXneTMCziEgg6swAXZuzdy+tQyj0hOU21Om0J3JpsJXaT5sRO+MNRXEYmEEGAHnEeADrPMYsgZGwKgI8P5h1JXneTMCziEgg6swAXZuzdy+tQyj0hOU2z9Opjs/m64+StO4Mb0zxnQlEgsjwAg4jwAfYONi6OXl5RCwOXLkoCtXrjjUxpGHS5cuTQcPHqTbt29TxowZHWka51ktdTk1EAuNMbe7d+/GfOLt7U1p0qShgIAAKlmyJNWvX58+/vhj8vPz07pr1pdABHj/SCBw3IwRMDgCMrgKE2APNzoZRqUnpLcmTaK7U38xEeCmTeidkBA9u2PdjIChEOADbNzlbt++fZxf7ty5ky5evEjFihWj4sWLx/ocxO2HH37QzW60JK1a6tJ6wgoBbt68OSVNmpRev35NDx8+pEuXLtHJkycJtpotWzaaN28e1axZ0+nu//77b2rYsCF1796dfuLr9RKEJ+8fCYKNGzEChkdABldhAuzhZifDqPSE9NaEiXR3+nTRRdpmzSjrt9/o2R3rZgQMhQAfYO1bbpDiuXPn0vDhw2nEiBH2NdLoqatXr1JkZCTly5eP4BV1RrTU5cw4LLVVCLAlT3doaKjAfdasWeTr60sbNmygatWqOTUEJsBOwSca8/7hPIasgREwIgIyuAoTYA+3NBlGpSekt374ge7OnGUiwJ9+SllHuvbwqefcWDcjIBsBPsDatwIyCbB9I0z8T8VHgJXZDRw4kMaOHUu5cuWi8+fPO/VCgAmw8zbD+4fzGLIGRsCICMjgKkyAPdzSZBiVnpCGfz+O7s2eLbpI17IFZfn6az27Y92MgKEQkHGADX8cTjMPzaRtV7dRRFQEpfJLRdVzVqfgEsEUkDLALfG3hwCrCdVXX31FQ4cOFZ7K8PBwmjZtGnXs2JGuX79O8+fPpzVr1oiQ6jt37lCGDBmoSpUqNGTIEBFibS6WwpYfP35MqVKlIuz3hw8fpjFjxtCcOXMIntKsWbNSmzZthLfax8cnljotdUHxgQMHaNiwYbRr1y7RT6lSpYSn9tGjRw6HF9tDgKOioigwMFBgunz5cmrcuHHM/DZv3kyLFy8mhKsDBzwLotykSRPCeqRMmTLmWeQSL1u2zKKtjRs3jvr16yc+Qx8rVqygvXv3UlhYmAjLDgoKopYtW1KvXr2EN9rIImP/MDLePHdGwFMQkMFVmAB7ivVYmYcMo9IT0vDRY+je3LkmAtyqFWUZNlTP7lg3I2AoBFx5gI2MjqRea3vRnCNzKPpVdBycfZP4UofiHWhSvUnk7+PvVuvgCAEGKQMhBDmqVKkSgay2aNGCWrduLXKF+/fvT4UKFaKcOXNSihQp6OzZs3Ts2DHy9/en9evXCzKslvhIa8GCBSlPnjy0fft2ql69Or18+ZK2bdsm+uzSpQv98oupfoIiWuoC4URhqufPn1OJEiUof/78MXPp2rUrTZkyxaH8WnsIMObRrVs3Ma8vvviCJk2aFDO3woUL0+XLl6lIkSKCJD958kQQ9Fu3bgliDmIMjCEYG8jtpk2bqECBAlSuXLkYPchBrlu3rvgZpBnriO9V5B8/ePBAkGHkJjdo0ID++usvcrRomlsZtpODceX+4eRQuTkjwAi4EQIyuAoTYDcyAD2GIsOo9JiHovPmd9/R/XnzxY/p2rahLIMH69kd62YEDIWAqw6wIL/1FtYTXl9bUi1HNVrTag0l801m61GXfe4IAcagWrVqRbNnz45TsRje2uTJkwuyqBZ4GeGVxP599OjRWJ/FR1rxIMgniLNSIRqEGlWTQUzhcYZHWBGtdMG7mjdvXqEfJBRkVBH83Lt3b/GjIwWm7CXA8KaDYNeuXVvMWxF44JEXDM+4Isid7ty5My1YsIDGjx9Pffv2jfW8rSJYIMkg+SjKpQhIMNYK5BleZHiYjSqu2j+Mii/PmxHwVARkcBUmwJ5qTW/mJcOo9IT05rej6P7ChaKL9O3bU8DAr/TsjnUzAoZCwFUH2M6rOtOMQzPsxrZzyc40reE0u5/X+0FHCDC8uig2hdBmRwSe45UrV4qqxwjdVcQWad29ezeVL18+VlcdOnQQIdFLliwRZE1rXSDsH330kQjZPnLkSJxpgpTj93oQYJBOzAm47N+/3ybE9+/fp/Tp01PVqlWFd1wRZ3KAMTfMsW3btqI4mlHFVfuHUfHleTMCnoqADK7CBNhTrclTCfA339D93xaZCPBnn1HAgP4evoI8PUbAdQi44gB78/FNCpwYaDHs2dpMEQ59vc91t8kJdoQAm3smzecIr+Q///wjwnORAxwdbQoHB5k7deoUrVu3jurUqWMXaU2dOrUIxzWX0aNH0+DBg+nHH3+knj17aq4LYdwI5x41apTIXbbWvx4EeOnSpdSsWTMqU6YM7du3L1bXePEAYnvu3DmKiIgQVYohixYtEi8kbty44TABPn36tMjZxosJhFUjDxhr9ttvv1GFChVi8p9d91frPj25Yv9wn9nySBgBRkArBJgAa4Uk64lBQIZR6Qn/f8NH0IM//hBdZOjUkTJ/+aWe3bFuRsBQCLjiABuyPYSGbnE8dz+kZggNruIeKQ+OEODg4GCaOXOmRTsC6YXnFEWarAkIXtOmTe0ircgBBmk2F9xrC+KrLuiEZ2zlANurC/nMCxcuFN5PeEHNBZ/hGT0IMPJ/kQf8/vvv09q1a2O6BhkfOXIkvXjxwiK0yOcFKVbElgcYfxs9evSgqVOnWl0r5B0fP37cUHuGerKu2D8MCy5PnBHwYARkcBX2AHuwQWFqMoxKT0j/GzaMHixZaiLAnTtT5r599OyOdTMChkLAFQfYOvPr0IZLGxzGtXbu2rS+zdscT4cVaNjAEQJsjfShQBUKVsFL2adPH0KYMkKdETKNQkrIo508ebJDYcvY70+cOKEJAXZEl0wCjOJe06dPFxhOmDBBzH3jxo0iJxh5xMhBRiGxgICAmBxseMph6ygOZi8BxkuMTp06Ue7cuUU/KJQFLzKKYt27d0/8vzXMNDQ9t1bliv3DrQHgwTECjECCEJDBVZgAJ2ipEk8jGUalJzo3hgyhh8v+NBHgbl0pc69eenbHuhkBQyHgigNshVkVaE/oHodxLf9uedodvNvhdno00IIAI8S5bNmyolrzli1b4gwTVYVXr16dKAiwrRBoXMs0aNAgzT3AKL6VPXt2UdkZFZhRxAqClw4///yzyHtu165dLGwRZp4pUybxosERAvzBBx+IUPWtW7eK4lpqgScfIdhMgF+Jyt8QFHZLkiSJHn9+rJMRYAQ8DAEZXIUJsIcZkfl0ZBiVnpDeGDiIHq5YIbrI2L07ZerZQ8/uWDcjYCgEXEGA2QNsMilULEbYLrynuAtYLbjXFlWVQdAcKVzliNcW/dm6B9heb7JSBAuFoA4dOhTnbwbXDuH3WodA4z7f77//XmB15swZ8vb2Fn3jXl7k+cITXKtWrVjjATHGOMwJsLIelq6LgoKKFSsSCoxduHBBeO7VMmDAABFezgSYCbChvjB4soyARgjI4CpMgDVaPHdVI8Oo9MTixldf0cOVf5kIcM8elKl7dz27Y92MgKEQcAUBNloOsDXSd+XKFRHyjDBdeBBz5MghbA2FlXBP8KpVq8TPiYEAq69BQr4x5qyIkn+Mn7UiwGFhYTRixAiRW+3n50e4gxh3LCuCz5D/izt8ceWRQoxx7RRCo+/evRuHAIPs485gax55xesPbzdItyIbNmygRo0a0bNnz5gAv2ICbKgvDJ4sI6ARAjK4ChNgjRbPXdXIMCo9sQjr158e/f236CJT716UsWtXPbtj3YyAoRBwBQE2WhXo+Eif4qmEN7JmzZqCzG3fvp18fHyoRo0aorJwYiDA+CMBCa1Xrx6BDMPjGxQUJMJhcUUQvKooHqXO07X1h6XcAwwSi3t3UW0ZRasuXrwo8pxhqwh/njdvniCtakF156JFiwqiC+8wxoMwaWDbpk0b8XIBhFUdAg19GDP0o5ozQnhBnD/55BNRhRv3MeN6KbQDUcZ367Vr10TV5379+okq2OwBZgJsy675c0aAEYiLgAyuwgTYwy1RhlHpCWlY37706J81JgLcpw9l7NJZz+5YNyNgKARcQYABqJHuAY6PAOP6HBAnkDh4hNOlSyfCokNCQkShpfHjxycaAox1RV7zsGHDYq4CKlmyJA0fPlxcQ9S1a1er1yRZ+iNTCLDyGcgoildlyZKFoLd+/fri/l+8NLAkwBOhyTt37qQHDx6IsOXPPvuMevXqRZkzZ45DgKEDVa/RBqQWbUC61ZWzjx07RgMHDhTzxPVVqLqN6tpNmjShVKlSMQFmD7Chvi94soyAVgjI4CpMgLVaPTfVI8Oo9IQitHcfinhz1UXmfl9Sho4d9eyOdTMChkLAVQQ4MjqS6i2sR9uubrOJb7Uc1Wht67Xk7+Nv81l+wD0RUKpE46ohFJNi8UwEXLV/eCZ6PCtGwLgIyOAqTIA93N5kGJWekIb2/IIiNpiuUMk8YABl+KyDnt2xbkbAUAi48gALEtx7bW/69civFP0qOg7Ovkl8qUPxDjSp3iQmv4nAChFi/Pz5cxGWrBZUYobnFV5XhAxb89gmginyEG0g4Mr9gxeDEWAEPAcBGVyFCbDn2I/FmcgwKj0hvd6jBz3euMlEgAd+RRnat9ezO9bNCBgKARkH2PDH4TTr8CzaemUrRURFUCq/VFQ9Z3UKLhFMASkDDIV/Yp4sKi4jV7ZYsWKiuBds6eTJk6JqMu7KXbZsWcw1RYl5njx26wjI2D94PRgBRiDxIyCDqzABTvx2E+8MZBiVnpBe7/Y5PX5zZ2bA4MGUvm0bPbtj3YyAoRDgA6yhllvTyYaGhoocX9yTe/PmTXr69Km4b7dy5coirxaFqFg8GwHePzx7fXl2jIBeCMjgKkyA9VpNN9Erw6j0nPr1Ll3p8TZT3mDA0KGUvnUrPbtj3YyAoRDgA6yhlpsnywhoigDvH5rCycoYAcMgIIOrMAH2cPOSYVR6QnqtU2d6smOH6CLL8K8pXYsWenbHuhkBQyHAB1hDLTdPlhHQFAHePzSFk5UxAoZBQAZXYQLs4eYlw6j0hPTaZ8H0ZNcuEwEeOZLSffqJnt2xbkbAUAjwAdZQy82TZQQ0RYD3D03hZGWMgGEQkMFVmAB7uHnJMCo9Ib3aoQM93b3HRIC//YbSNWumZ3esmxEwFAJ8gDXUcvNkGQFNEeD9Q1M4WRkjYBgEZHAVJsAebl4yjEpPSK+2bUdP9+0TXWQNCaG0TZvo2R3rZgQMhQAfYA213DxZRkBTBHj/0BROVsYIGAYBGVyFCbCHm5cMo9IT0qut29DTAwdMBHjMaErbuLGe3bFuRsBQCPAB1lDLzZNlBDRFgPcPTeFkZYyAYRCQwVWYAHu4eckwKj0hvdKyFUUeOiS6eOf7sZSmUSM9u2PdjIChEOADrKGWmyfLCGiKAO8fmsLJyhgBwyAgg6swAfZw85JhVHpCeqV5C4o8csREgH/4gdI0+EDP7lg3I2AoBPgAa6jl5skyApoiwPuHpnCyMkbAMAjI4CpXSZL9AAAgAElEQVRMgD3cvGQYlZ6QXv7kU3p27JjoItuE8ZS6fn09u2PdjIChEOADrKGWmyfLCGiKAO8fmsLJyhgBwyAgg6swAfZw85JhVHpCerlJU3p26pSJAE+aRKnfr6Nnd6ybETAUAnyANdRy82QZAU0R4P1DUzhZGSNgGARkcBUmwB5uXjKMSk9IL33YmJ6fPSu6ePfnKZSqZk09u2PdjIChEOADbNzl9vLycsgGcuTIQVeuXHGojSMPly5dmg4ePEi3b9+mjBkzOtI0zrNa6nJqIBYaY253796N+cTb25vSpElDAQEBVLJkSapfvz59/PHH5Ofnp3XXrC+BCPD+kUDguBkjYHAEZHAVJsAebnQyjEpPSC9+0ICiLl4UXWSf9gulrFZNz+5YNyNgKAT4ABt3udu3bx/nlzt37qSLFy9SsWLFqHjx4rE+B3H74YcfdLMbLUmrlrq0nrBCgJs3b05Jkyal169f08OHD+nSpUt08uRJgq1my5aN5s2bRzU1eBH6999/U8OGDal79+70008/aT0dQ+jj/cMQy8yTZAQ0R0AGV2ECrPkyupdCGUalJwIX369LUVevmgjwzJmUsnIlPbtj3YyAoRDgA6x9yw1SPHfuXBo+fDiNGDHCvkYaPXX16lWKjIykfPnyEbyizoiWupwZh6W2CgG25OkODQ0VuM+aNYt8fX1pw4YNVM3Jl6FMgJ1fQd4/nMeQNTACRkRABldhAuzhlibDqPSE9EKt9yg6LEx0EThnDqUoX07P7lg3I2AoBPgAa99yyyTA9o0w8T8VHwFWZjdw4EAaO3Ys5cqVi86fP+/UCwEmwM7bDO8fzmPIGhgBIyIgg6swAfZwS5NhVHpCer56DXpx86boIseC+ZS8dGk9u2PdjIChEJBxgA1/HE4zD82kbVe3UURUBKXyS0XVc1an4BLBFJAywC3xt4cAqwnVV199RUOHDhWeyvDwcJo2bRp17NiRrl+/TvPnz6c1a9aIkOo7d+5QhgwZqEqVKjRkyBARYm0ulsKWHz9+TKlSpSLs94cPH6YxY8bQnDlzCJ7SrFmzUps2bYS32sfHJ5Y6LXVB8YEDB2jYsGG0a9cu0U+pUqWEp/bRo0cOhxfbQ4CjoqIoMDBQYLp8+XJq3LhxzPw2b95MixcvJoSrAwc8C6LcpEkTwnqkTJky5lnkEi9btsyirY0bN4769esnPkMfK1asoL1791JYWJgIyw4KCqKWLVtSr169hDfayCJj/zAy3jx3RsBTEJDBVZgAe4r1WJmHDKPSE9JzVarQy9t3TAR40W+UvEQJPbtj3YyAoRBw5QE2MjqSeq3tRXOOzKHoV9FxcPZN4ksdinegSfUmkb+Pv1utgyMEGKQMhBDkqFKlSgSy2qJFC2rdurXIFe7fvz8VKlSIcubMSSlSpKCzZ8/SsWPHyN/fn9avXy/IsFriI60FCxakPHny0Pbt26l69er08uVL2rZtm+izS5cu9Msvv+imC4QThameP39OJUqUoPz588fMpWvXrjRlyhSH8mvtIcCYTLdu3cS8vvjiC5o0aVLM/AoXLkyXL1+mIkWKCJL85MkTQdBv3boliDmIMTCGYGwgt5s2baICBQpQuXJvI4uQg1y3bl3xHEgz1hHfq8g/fvDggSDDyE1u0KAB/fXXX+Ro0TS3MmwnB+PK/cPJoXJzRoARcCMEZHAVJsBuZAB6DEWGUekxD0XnufIV6OWDB+LHnEuWULIihfXsjnUzAoZCwFUHWJDfegvrCa+vLamWoxqtabWGkvkms/Woyz53hABjUK1ataLZs2fHqVgMb23y5MkFWVQLvIzwSmL/Pnr0qN2kFQ+CfII4KxWiQahRNRnEFB5neIQViY9MO6IL3tW8efMK/SChIKOK4OfevXuLHx0pMGUvAYY3HQS7du3aYt6KwAOPvGB4xhVB7nTnzp1pwYIFNH78eOrbt2+s520VwQJJBslHUS5FQIKxViDP8CLDw2xUcdX+YVR8ed6MgKciIIOrMAH2VGt6My8ZRqUnpGfLlKVXERGii1zL/yT/ggX17I51MwKGQsBVB9jOqzrTjEMz7Ma2c8nONK3hNLuf1/tBRwgwvLooNoXQZkcEnuOVK1eKqscI3VXEFmndvXs3lS9fPlZXHTp0ECHRS5YsEWRNa10g7B999JEI2T5y5EicaYKU4/d6EGCQTswJuOzfv98mxPfv36f06dNT1apVhXdcEWdygDE3zLFt27aiOJpRxVX7h1Hx5XkzAp6KgAyuwgTYU63JQwnwmRIl6XVkpJhd7lV/UdJ8+Tx8BXl6jIDrEHDFAfbm45sUODHQYtiztZkiHPp6n+tukxPsCAE290yazxFeyX/++UeE5yIHODraFA4OMnfq1Clat24d1alTxy7Smjp1ahGOay6jR4+mwYMH048//kg9e/bUXBfCuBHOPWrUKJG7bK1/PQjw0qVLqVmzZlSmTBnat29frK7x4gHE9ty5cxQRESGuToIsWrRIvJC4ceOGwwT49OnTImcbLyYQVo08YKzZb7/9RhUqVIjJf3bdX6379OSK/cN9ZssjYQQYAa0QYAKsFZKsJwYBGUalJ/xnihSl128OiLn/+YeS5n7rGdGzX9bNCBgBAVccYEO2h9DQLUMdhjOkZggNrjLY4XZ6NHCEAAcHB9PMmTMtDgOkF55TFGmyJiB4TZs2tYu0IgcYpNlccK8tiK+6oBOesZVPbK8u5DMvXLhQeD/hBTUXfIZn9CDAyP9FHvD7779Pa9eujekaZHzkyJH04sULi9AinxekWBFbHmD8bfTo0YOmTp1qda2Qd3z8+HE9TC5R6HTF/pEogOBBMgKMgEMIyOAq7AF2aIkS38MyjEpPlE4XLET0+rXoIs/6deQXGKhnd6ybETAUAq44wNaZX4c2XNrgMK61c9em9W3e5ng6rEDDBo4QYGukDwWqULAKXso+ffoQwpQR6oyQaRRSQh7t5MmTHQpbxn5/4sQJTQiwI7pkEmAU95o+fbrAcMKECWLuGzduFDnByCNGDjIKiQUEBMTkYMNTDltHcTB7CTBeYnTq1Ily584t+kGhLHiRURTr3r174v+tYaah6bm1KlfsH24NAA+OEWAEEoSADK7CBDhBS5V4GskwKr3Qef3qFZ0p9H8x6vNu3kS+77yjV3eslxEwHAKuOMBWmFWB9oTucRjb8u+Wp93Bux1up0cDLQgwQpzLli0rqjVv2bIlzjBRVXj16tWJggDbCoHGtUyDBg3S3AOM4lvZs2cXlZ1RgRlFrCB46fDzzz+LvOd27drFwhZh5pkyZRIvGhwhwB988IEIVd+6dasorqUWePIRgs0E+JWo/A1BYbckSZLo8efHOhkBRsDDEJDBVZgAe5gRmU9HhlHpBenrqCg6U/TtvZh5t20j34DMenXHehkBwyHgCgLMHmCTWaFiMcJ24T3FXcBqwb22qKoMguZI4SpHvLboz9Y9wPZ6k5UiWCgEdejQoTh/N7h2CL/XOgQa9/l+//33AqszZ86Qt7e36Bv38iLPF57gWrVqxRoPiDHGYU6AlfWwdF0UFFSsWJFQYOzChQvCc6+WAQMGiPByJsBMgA33pcETZgQ0QEAGV2ECrMHCubMKGUalFx6vnj6lsyVLxajP9+9O8nGwsqpeY2O9jIAnIOAKAmy0HGBrpO/KlSsi5BlhuvAg5siRQ5gQCivhnuBVq1aJnxMDAVZfg4R8Y8xZESX/GD9rRYDDwsJoxIgRIrfaz8+PcAcx7lhWBJ8h/xd3+OLKI4UY49ophEbfvXs3DgEG2cedwdY88orXH95ukG5FNmzYQI0aNaJnz54xAX7FBNgTvgd4DoyAqxGQwVWYALt6lV3cnwyj0muKLyMi6FyZsjHqg/buIe80afTqjvUyAoZDwBUE2GhVoOMjfYqnEt7ImjVrCjK3fft28vHxoRo1aojKwomBAOMPBSS0Xr16BDIMj29QUJAIh8UVQfCqoniUOk/X1h+Xcg8wSCzu3UW1ZRStunjxoshzhq0i/HnevHmCtKoF1Z2LFi0qiC68wxgPwqSBbZs2bcTLBRBWdQg09GHM0I9qzgjhBXH+5JNPRBVu3MeM66XQDkQZ363Xrl0TVZ/79esnqmCzB5gJsC275s8ZAUYgLgIyuAoTYA+3RBlGpRekL+7fp/MVKr4lwAcOkHfKFHp1x3oZAcMh4AoCDFCNdA9wfAQY1+eAOIHEwSOcLl06ERYdEhIiCi2NHz8+0RBgrCvymocNGxZzFVDJkiVp+PDh4hqirl27Wr0mydIfmkKAlc9ARlG8KkuWLAS99evXF/f/4qWBJQGeCE3euXMnPXjwQIQtf/bZZ9SrVy/KnDlzHAIMHah6jTYgtWgD0q2unH3s2DEaOHCgmCeur0LVbVTXbtKkCaVKlYoJMHuADfedwRNmBLRAQAZXYQKsxcq5sQ4ZRqUXHC9u36bzVarGqM9/9AglSZpUr+5YLyNgOARcRYAjoyOp3sJ6tO3qNpsYV8tRjda2Xkv+Pv42n+UH3BMBpUo0rhpCMSkWz0TAVfuHZ6LHs2IEjIuADK7CBNjD7U2GUekFafR//9GFGjVj1Bc4cZy8fHz06o71MgKGQ8CVB1iQ4N5re9OvR36l6FfRcbD2TeJLHYp3oEn1JjH5TQSWiBDj58+fi7BktaASMzyv8LoiZNiaxzYRTJGHaAMBV+4fvBiMACPgOQjI4CpMgD3HfizORIZR6QVpVGgoXXyv9lsCfPqUuC+ThRFgBLRBQMYBNvxxOM06PIu2XtlKEVERlMovFVXPWZ2CSwRTQMoAbSbGWnRHABWXkStbrFgxUdwLtnTy5ElRNRl35S5btizmmiLdB8MdSEFAxv4hZaLcKSPACGiKgAyuwgRY0yV0P2UyjEovFJ5fvkyX6tU3qff2poInT+jVFetlBAyJAB9gDbnsmkw6NDRU5PjintybN2/S06dPxX27lStXFnm1KETF4tkI8P7h2evLs2ME9EJABldhAqzXarqJXhlGpdfUn507R5cbfSjUeyVPTgUOHdSrK9bLCBgSAT7AGnLZedKMgCYI8P6hCYyshBEwHAIyuAoTYA83MxlGpRekkcdP0JVmzYR6XH+Ea5BYGAFGQDsE+ACrHZasiREwGgK8fxhtxXm+jIA2CMjgKkyAtVk7t9Uiw6j0AuPpwYN0tVVrod4nc2bKt912BVm9xsJ6GQFPRIAPsJ64qjwnRsA1CPD+4RqcuRdGwNMQkMFVmAB7mhWZzUeGUekF6ZNdu+jaZ8FCvW/27JR3w3q9umK9jIAhEeADrCGXnSfNCGiCAO8fmsDIShgBwyEgg6swAfZwM5NhVHpBGrFlC4V2+1yo98ubh/L8/bdeXbFeRsCQCPAB1pDLzpNmBDRBgPcPTWBkJYyA4RCQwVWYAHu4mckwKr0gfbRuPYX16iXU+xcqRLn+XKZXV6yXETAkAnyANeSy86QZAU0Q4P1DExhZCSNgOARkcBUmwB5uZjKMSi9IH65aRTf6DxDqk5UoQTkX/aZXV6yXETAkAnyANeSy86QZAU0Q4P1DExhZCSNgOARkcBUmwB5uZjKMSi9IHyxdSv8NHWbyAJcrR4G//kreSbz06o71MgKGQ4APsIZbcp4wI6AZArx/aAYlK2IEDIWADK7CBNjDTUyGUSUU0pevXlP0y1fk650kFrG99ySKlh8Oo6ilf1D1tXOF+n0BBWh4hY70brpkVCRbGiqdMz19VCIbpU/hl9DuuR0jYHgE+ABreBNgABiBBCPA+0eCoeOGjIChEZDBVZgAe7jJyTAqW5BGRr2ke0+e09PnL2nDmXA6eu0+HQt9QP89iopp+k6apJQrQ0q6/fgZXbj9hF69Jmpyfit1OmkqfLUzaxEKKdcuVld+PkmoQdGs9GWd/JQtbTJbw+DPGQFGwAwBPsCySTACjEBCEeD9I6HIcTtGwNgIyOAqTIA93OZkGJU5pIeu3qf+S4/S5TsmIptQaX52I7U7vVY03/JuCfq+dCuLqlIm9aEhHxSk5mWyk5cXh0gnFG9uZzwE+ABrvDXnGTMCWiHA+4dWSLIeRsBYCMjgKkyAPdzGZBiVAunaEzepzx+HKTL6lSYotzm1llqe2yh0rQ8sQxNLfhqv3k9LZ6fvmhThPGFN0GclRkCAD7BxV9nRl2g5cuSgK1eu6GYupUuXpoMHD9Lt27cpY8aMTvWjpS6nBmKhMeZ29+7dmE+8vb0pTZo0FBAQQCVLlqT69evTxx9/TH5+nPaiNfYJ1cf7R0KR43aMgLERkMFVmAB7uM3JMKqXL19Sk6m76WjoQ03R7XJsJTW+tEPoXJG7Mk0r2timfpDgMU2LsCfYJlL8ACNAxAfYuFbQvn37OL/cuXMnXbx4kYoVK0bFixeP9TmI2w8//KCbOWlJWrXUpfWEFQLcvHlzSpo0Kb1+/ZoePnxIly5dopMnTwpbzZYtG82bN49q1qzpdPd///03NWzYkLp3704//fST0/qMqID3DyOuOs+ZEXAeARlchQmw8+vm1hpcbVTI7y09agM9iXqpOS59Dv1Bda7tF3p/C3qP5heqa1cfY5oUoeZlA+16lh9iBIyMAB9g7Vt9kOK5c+fS8OHDacSIEfY10uipq1evUmRkJOXLl4/gFXVGtNTlzDgstVUIsCVPd2hoqMB91qxZ5OvrSxs2bKBq1ao5NQQmwE7BJxp7wv7x56k/qdOqTnT/2X16Ta/Ji7wonX86mtFwBjUp1CRekGS1PRF+gvqs60OHbh6iqJdR5OftR6WylqIJdSZQ4YDCbjlmWVhxv/bbs/M7gv0aXM1VMDImwPavT6J80pVGBc9v0ZH6kF+AP2TfXKp847hYh5n/9wEty1fDrjVBTvC6PlW5MJZdaPFDRkZAxgE2/HE4zTw0k7Zd3UYRURGUyi8VVc9ZnYJLBFNAygC3XA6ZBNgtAdFhUPERYKW7gQMH0tixYylXrlx0/vx5p14IMAF2fhFl7B/Oj9qk4cLdC1To50IU/SraqkoQy7M9zlLOtDljPSOr7b2n96jS7Ep05u4Zq2MukLEA7Q7eTWn907rFmGVhxf3GNRFr9qzV35QjelzJVZRxMQF2ZIV0eBZv8kePHk2///47Xbt2jdKnT09169alb7/9VoR3OSuuNKrGU/6lI9cfJHjIGZ/cp5Frp1DdC3soiQ0tqKU1pcxHNL5msF39NSmZjSZ8EjtU0a6G/BAjYCAEXHmAjYyOpF5re9GcI3MsHjp9k/hSh+IdaFK9SeTv4+9Wq2APAVYTqq+++oqGDh0qPJXh4eE0bdo06tixI12/fp3mz59Pa9asESHVd+7coQwZMlCVKlVoyJAhIsTaXCyFLT9+/JhSpUpF2O8PHz5MY8aMoTlz5hA8pVmzZqU2bdoIb7WPj08sdVrqguIDBw7QsGHDaNeuXaKfUqVKCU/to0ePHA4vtocAR0VFUWBgoMB0+fLl1Ljx27SYzZs30+LFiwnh6sABz4IoN2nShLAeKVOmjMECucTLli2zaGPjxo2jfv36ic/Qx4oVK2jv3r0UFhYmwrKDgoKoZcuW1KtXL+GNNrK4cv/QEmeQo3w/5bNb5fke5ylvhrzieVltQX5z/i8nRURH2Bx3Kt9UdKX3FUqfPL3UMcvCivuN30TU9mzTmHR6wJVcRZkCE2CdFtMetc+ePaMaNWrQnj17xCEFhx4UT9m3bx9lypRJ/D537tz2qLL6jKuMCgWvui44GO9Y2+5bQV9vmUnxBe05UrNZKSjduMUYOhoYf5gPrkjaM6gW3xPslDVxY09HwFUHWJDfegvrCa+vLamWoxqtabWGkvm6z9VmjhBgkDIQQpCjSpUqEchqixYtqHXr1iJXuH///lSoUCHKmTMnpUiRgs6ePUvHjh0jf39/Wr9+vfheUEt8pLVgwYKUJ08e2r59O1WvXp0QlbNt2zbRZ5cuXeiXX37RTRcIJwpTPX/+nEqUKEH58+ePmUvXrl1pypQpDuXX2kOAMZlu3bqJeX3xxRc0adKkmPkVLlyYLl++TEWKFBEk+cmTJ4Kg37p1SxBzEGNgDMHYQG43bdpEBQoUoHLlysXoQQ4yXkpDQJqxjvhexQvqBw8eCDKM3OQGDRrQX3/9Zeh6E67aP2ztGY5+7vetX7yeX3N98Jw9H/pc/FpW23w/5qML9y/YPdW86fPS+Z7npY5ZFlbcb/xmorZnuw1K4wddxVXUw2YCrPEiOqIOHoGQkBCqUKGCOOgob6QnTJhAX375pchp2rp1qyMq4zzrKqP6v6/XWs37LXDjHP0zvy+B3DpCcO2dOIhws2bf0oHcJeJtMqxBIQqunMtetfwcI2A4BFx1gO28qjPNODTDbnw7l+xM0xpOs/t5vR90hABjLK1ataLZs2fHqVgMb23y5MkFWVQLvIzwSmL/Pnr0aKzP4iPAeBDkE98nSoVoEGpUTQYxhccZL1sV0UoXvKt58+YV+kFCQUYVwc+9e/cWPzpSYMpeAgxvOgh27dq1xbwVgQce36HwjCuCiKvOnTvTggULaPz48dS3b99Yz9sqggWSDJKPolyKgARjrUCe4UWGh9mo4qr9Q0t8l55aSs2WNHNY5bJmy+gVvZLSFt7nYr/EjQ6xNYnjXY+LcOnENl9ZOButX1s57rbsy5nPXcVV1GNkAuzMijnRFgeGzJkzizfHhw4dEocWtSD0DV4AvLHG2+qEiiuMCvf8NplqCnkzF5DfNW/Ib0LnYE87kOBcX/0d76P1i2Shn1slHEt7xsHPMAKJGQFXHGBvPr5JgRMDHfK4IBz6ep/rbpMT7AgBhlcXxaYQ2uyIwHO8cuVKUfUYobuK2CKtu3fvpvLly8fqqkOHDiIkesmSJYKsaa0LhP2jjz4SIdtHjhyJM018v+H3ehBgkE7MCbjs328qkhif3L9/X6QaVa1aVXjHFXEmBxhzwxzbtm0riqMZVVyxf2iNbYaxGejes3ux1T5KTnS6CNFrL6JXSd7+F0+9TkL0youS+iQXv38e/YwISVviOTyANnjV/6YddEDwufgsCfl5myIPol5EmfShnfgc+r3e/k7oeKNT/N6LfJL4U0rfFPQg8v6b5964FmKee9OvUKaMwaQ6pV9aiox+Ri9fvnjbl+KWiNXvmzErYyMvSuJlSp/AGot5iHkpzyljUH7/Zh5vxuDlZYr7ey3aquakzFdxjyhYqX7v9SYhDukGcdrGtHuDUYyLBePA8BTMxQ8qF4ziilGNN9ZY3mAXyyre6FT3IT5X6zIfh4Wf1bhZ1KVgakuXqt+YcahdTGb/r2DrFUk0/INYM8MP6f3T092v3l47F+cBnX/hCq5iPgUmwDovqjX1W7ZsEVc3IFztwoW4YSzIAf7666+drjLqCqN6f+I2Ohv+2OJUL41tYDOfV4slwPb2k42c4Ozpk9GOAc5fl6HFeFkHI+COCLjiABuyPYSGbhnq8PRDaobQ4CqDHW6nRwNHCLC5Z9J8PPBK/vPPP+JlJ3KAo6NNRXhA5k6dOkXr1q2jOnXqxDSLjwCnTp1avFQ1F9SZGDx4MP3444/Us2dPzXUhjBvh3KNGjRK5y9b614MAL126lJo1a0ZlypQR6UNqwYsHENtz585RRETEm8M70aJFi8QLiRs3bsQ8bi8BPn36tMjZxosJhFXjYI41++2330Q0l5L/rIfdubtOV+wfWmOQZGQSUe05lqyrT7R7tdZdsT5GwA0QuEM0IlOccaDa+avheEEhR1zBVcxnxgRYzlrT//73P+rTp4/44kahDnNZvXq1yCnCW/U///wzwaN0hVHlH7qGnr+I+4fz2e5lNGz7r7qEPVsCBBcv5bHhBb74XX3yTqJHIHaCl4gbMgJug4ArDrB15tehDZc2ODzn2rlr0/o2b0NcHVagYQNHCHBwcDDNnDnTYu8gvdjjUaTJmoDgNW3aNOZjWznAIM3mgnttQXzVBZ3wjFa6kM+8cOFC4f2EF9Rc8Bme0YMAI/8XecDvv/8+rV27NqZrkPGRI0fSixdvvF1mg0LKEUixIrYIMP42evToQVOnTrW6Vsg7Pn7cdFOBEcUV+4fWuHqNtHAeYAKsNcysz20QuEs0IqPF0bwebvYiyIVjdgVXMZ8OE2AXLrC6K+QeTZw4UZBg5PyaC/K+ihcvLnK3Dh6Mv7hUfFNwhVHlHGj5Ten5cR+S7yvt7wO2Nl97wqDPfFuX/H2duztTkslwt4yA7gi44gBbYVYF2hO6x+G5lH+3vLjOwx3EEQJsjfShQBUigOClxPcAwpQR6oyQaS8vL5FHO3nyZIfClrHfnzhxIg5ECSHAjuiSSYBR3Gv69Omxvks3btwocoKRR4wcZBQSCwgIiMnBhqccto7iYPYSYLzE6NSpkyhMie9sFMqCFxlFse7duyf+3xpm7mCzrhiDK/YPredh0QO8vi7RrjXxdIUX/jhxKIRB+f+E/A7dqNtb+tn8d+p+1Z+Z/78tXfE9r0zffGz26rQ0rvh+Z8/z4vLWNwMzx15pb/7f12+ilO19Xt1HPNiK9ybq9Vb9HDNGC2MRo8eYLIzH0tzE76w9++b3Vtup+vd6ZcIhyTOiPv3j2DZ7gLXeWVifVQRQiGPGjBkiXAxvqs0FYdH58uUT/xC+ZUsUomv+HK7WwCHr5MmTtlQk6PPIqJdU8Ou3b93VSi6PbeAy76/yZ24rD5g9wAlaZm5kEARccYA1mgfYGgFGiHPZsmVFtWakxJgLIoAQCeRI3q4jpBX92boGyV4ybSsEGtcyDRo0SHMPMGppZM+eXVR2RgVmFLGCAPOff/5Z5D23a9cuFrQIM8ctC3jR4AgB/uCDD0SoOgpToriWWuDJRwg2E+BXovI3BIXdkiSxdaGh/I3VYg4w+K2SkwtygX9mU0HOJCRO/rAdU3K27aOoR/TileXIhvi690niQ6n9UksZsyysuF87DJJzgO0DiZ/SBgFPIcA3H0ZS+dGbLYLibs8R/TUAAB35SURBVAQ4e7pktOMrzgHWxoJZiyci4AoCbLQcYGsEGBWLEbYL7ynuAlYL7rVFVWUQtMRAgJUiWCgEhaKO5oJCjvi91iHQuM/3+++/F1idOXOGvL1N0T24lxd5vvAE16pVK9ZwQIwxDnMCrKyHpeuioKBixYqEAmN4OY2XymoZMGCACC9nApz4CHBirAI9btc42hPmeBRNhXcrUN8KfbkKtB1f3jKrfMuqPs1VoO0wDH7EeQQ8JQTanTzAtnKAuQq083bLGjwbAVcQYKNVgbZG+nDnO0KeEaYLD2KOHDmEcaGwEu4JXrVqlfg5MRBg9TVICLfGnBVRwq/xs1YEOCwsjEaMGCFyq/38/Ah3EOOOZUXwGfJ/cYcvrjxSiDGunUJo9N27d+MQYHi7cWewNY+8EvYObzdItyIbNmygRo0a0bNnz5gAv0p8BBjrmNjuiT0WfizB1yAVDiic6OabGNcosY5Z1gnHFema5nPjHGBJq+1JRbDcIQfYnirQfA+wJGPnbhMNAq4gwADDSPcAx0f6FE8lvJG4FQBkbvv27eTj40M1atQQlYUTAwHGmoKE1qtXj0CG4fENCgoS4bC4IgheVRSPslbzwtIfiHIPMEgs7t1FtWUUrUJaD8gqbBXhz/PmzROkVS2o7ly0aFFBdOEdxngQJg1s27RpI14ugLCqQ6ChD2OGflRzRggviPMnn3wiqnCjLgeul0I7EGUc2K5duyaqPvfr109UwWYPcOIkwBfuXvj/9u4Eysf6X+D4xzbWkb2RJctwx1WRFqSyRZZKONWhTknlcupGyHVPRMnxL1TaKDqoe+VWlDrKiZKKQVmSNdllz5LGMsI9n6//z39mzMzvN/PM79m+7+ecOWeYZ/l+X9/PPPN8fs93kXpv1Iv5Pr2t/zapVa6W2d+rY+u/Xl82H94cc5nrV6gvm/7zQvd0r8rMdXNvLj/EVcwBVcA7kgAXMKifTxemZZD8MAt0tAmwdObnH5+5TSqUTvBzWFA2BDwVcCsBPnnmpHT8346yaMe/1mHNqeItr2wp8x6YJyWKXlg70w9bQUyCpfXQ5XM0cdIkTt8Ily9f3nSLHj16tJloafz48YFJgLU+Oq55+PDhF5cC0kkcR4wYYeax6Nu3b47LJOWWAEd+psmoTl6VlJRkJofs1KmTWf9XPzTIblNP7Zr8ww8/yNGjR0235d69e0v//v2lSpUqlyTAeg6dQVuP0aRWj9GkO+PM2WvWrJGhQ4eaeuryVQ0aNDCza3fr1k0SExNJgAP6BjiSFDac2FDSz6bneItJKJIgm57YdDH5jeyoiZ3bxx4+cVhqv1Zb/jz9Z9RbYtniZWXHgB1SrkS5i/t6UeYgOttY5qgBFYcdSIDjgOrXU+qn5PpHWNds1G5ZOuNzxq1Ro0aif2y1a5x+ep3fzY2g8nodYE1+7+7xD/m55lU5Mt1xTVV5o2eT/DJyHAJWCLiVACumJsED5g2QqaunyplzF9a+zbgVK1xMHm78sEzoOMFXya8VgVDAlYzMEq1LDelkUmzhFHDz/hEvwdnrZ8tjnz8mR04dMesD6+y45UuUl8l3TpZoYyTdPlaT4BZTW8jGQxtz5EiplGJmz8+Y/Gbc2e0yR67Ndf0bV/H63crtvG7kKlmvTxdoL1r6n9ccNmyY+aRfJ9fQCTi0G5xu+sn/oEGDzEyTOuOkk82NoFq544h0m7gk22Km7PlVvnx/YFxmg45MDB8t+S1auJAsGtJaqpUr6YSSYxEIvYAXD7D7/9ov7656V77d/q0cTz8uiQmJ0qpWK3nk2kfk8jKXh948LBXULsanT5823ZIzbjoTs7551Q98tctwTm9sw+Jgcz28uH/Y7B2p+9r9a2XgVwNlxd4V5g22vqm+rup18nL7l0XH/LIh4HcBN3IVEmAfRYGOJdKxS8uWLZOqVauatQp1TUj9ty7TsHTpUrPmoJPNraBq+Ow8SUvPfs1fTYK/+GcSnM2S81Grl93S3Pp/b97QVca3eSTq8f/VMUX6tcw8a2fUg9gBAQsFeIC1sNELqMo647KOldXeSzq5l8aSLr+nsybrWrmzZs26uExRAV2S0/hMgPuHzxqE4iAQEAG3cpWMHLwB9jg4dBzRmDFjzGQnu3btkgoVKkiHDh1k1KhRUr16dcelcyuo5q3dJ33/Z0Wu5X1w+afy7MIpcmGhiti29EKF5b9vf0JmN2of2wFZ9rr+yvLyUd/mUqhQflLvfF2SgxAIrAAPsIFtOs8Lvnv3bjPGV3st7du3T06cOGE+yL355pvNuFonQ3k8rxwFiEmA+0dMTOyEAAJZBNzKVUiALQo9N4Pq7jcXy+pdR32jW7tSaZn/1K1StEiWFex9U0IKgoC/BHiA9Vd7UBoEgiTA/SNIrUVZEfCPgJu5SqTWvAH2T/vHpSRuBtXZs2flmufm59gVOi4VzOGk+uZ3Zp9mJL9uonOtwAvwABv4JqQCCHgmwP3DM3oujECgBdzMVUiAAx0qsRfe7aA6mX5Wrn/B2yR4cPv68njrZLo9xx4m7ImAEeABlkBAAIH8CnD/yK8cxyFgt4DbuYpq8wY45DHnRVDpm+DuE1Nl9e5jrupWu6yEzPyPZlKjwoXZtNkQQCBvAjzA5s2LvRFA4F8C3D+IBgQQyI+AF7kKCXB+WipAx3gRVBEenRjrqf9bJSfPnIur2GUlisqEHtdKq3+rEtfrcHIEwi5w/vx52bjxwpqSycnJZvZeNgQQQCAWgb///ls2b95sdk1JSaEXVixo7IMAAuJFrkICHPLA8yKospLqOsFPf/yzbDuUJueyW9MoH21QJqGwXF+rooy489+lduUy+TgDhyCAQHYCW7duNeu56rqtFStWBAkBBBCISeDYsWOyZ88es9Zz3bosPRgTGjshgAAJMDFQ8AJ+SICz1krHCR9OOy3FixaRkglFpFiRwnLqzFnzVbhQIdEVi0olFJUzZ8+Zr4zfJ5YoJglFmdW54COFMyJwQeDIkSNmGRvddFm2xMREKV68OG9zCBAEEMhWQLs+p6Wlyf79+0WHQOkHZ/oBGhsCCCAQi4AXuQpvgGNpmQDv40VQBZiLoiNgvYA+zOqD7NGj/lnSzPpGAQCBgAiUKFFCatasKUWKFAlIiSkmAgh4LeBFrkIC7HWrx/n6XgRVnKvE6RFAIM4COhb4+PHj5kvf7OhbHTYEEEAgJwHt9qy9RfTtL8kvcYIAAnkR8CJXIQHOSwsFcF8vgiqATBQZAQRyEdCEWL/YEEAAgawChczQpULAIIAAAvkS8CJXIQHOV1MF5yAvgio4OpQUAQQQQAABBBBAAAEEvBLwIlchAfaqtV26rhdB5VLVuAwCCCCAAAIIIIAAAggEWMCLXIUEOMABE0vRvQiqWMrFPggggAACCCCAAAIIIGC3gBe5CglwyGPOi6AKOSnVQwABBBBAAAEEEEAAgQIQ8CJXIQEugIbz8ym8CCo/e1A2BBBAAAEEEEAAAQQQ8IeAF7kKCbA/2j5upfAiqOJWGU6MAAIIIIAAAggggAACoRHwIlchAQ5N+GRfES+CKuSkVA8BBBBAAAEEEEAAAQQKQMCLXIUEuAAazs+n8CKo/OxB2RBAAAEEEEAAAQQQQMAfAl7kKiTA/mj7uJUiMTFRzpw5I3Xr1o3bNTgxAggggAACCCCAAAIIIJBXgS1btkixYsXk+PHjeT003/uTAOebLhgHJiUlSVpamtSsWdMXBdYg142E3BfNEZpCEFehaUpfVYS48lVzhKYwxFVomtJXFSGufNUcoSmMG3G1c+dOKV26tOzbt881NxJg16i5kAp40c0B+fALEFfhb2MvakhceaEe/msSV+FvYy9qSFx5oR7+a4Y1rkiAwx+7vqphWH+RfIVsYWGIKwsb3YUqE1cuIFt4CeLKwkZ3ocrElQvIFl4irHFFAmxhMHtZ5bD+InlpyrXpWUAMxEeA+1V8XG0/K3FlewTEp/7EVXxcbT9rWOOKBNj2yHa5/mH9RXKZkctlESCuCIl4CBBX8VDlnMQVMRAPAeIqHqqcM6xxRQJMbLsqENZfJFcRudglAsQVQREPAeIqHqqck7giBuIhQFzFQ5VzhjWuSICJbVcFwvqL5CoiFyMBJgZcEeB+5QqzdRchrqxrclcqTFy5wmzdRcIaVyTA1oUyFUYAAQQQQAABBBBAAAEE7BQgAbaz3ak1AggggAACCCCAAAIIIGCdAAmwdU1OhRFAAAEEEEAAAQQQQAABOwVIgO1sd2qNAAIIIIAAAggggAACCFgnQAJsXZNTYQQQQAABBBBAAAEEEEDATgESYDvbnVojgAACCCCAAAIIIIAAAtYJkABb1+RUGAEEEEAAAQQQQAABBBCwU4AE2M52d73WJ0+elDFjxsjMmTNl586dUqFCBenQoYOMGjVKqlWr5np5uGBwBFasWCHz58+X5cuXm6/ff//dFP78+fO5VmLatGny1ltvyfr16yUhIUGaNWsmw4YNk5tuuik4laekcRE4ceKEfPXVV/L555/LDz/8IDt27JAiRYpIcnKydO/eXQYOHChlypTJ9trEVVyaJDQnffnll01M/fLLL3LgwAE5deqUJCUlScuWLeXpp5+Wq6++mrgKTWt7U5E//vhDGjRoIAcPHpS6devKb7/9lmNBuF9500ZBuWqrVq1k0aJFORb3yy+/NM/qWbcwxBUJcFCiNMDl1AeA1q1by9KlS6Vq1apyyy23yPbt200yU7lyZfP/derUCXANKXo8Be6++26ZM2fOJZfILQEeMGCATJgwQUqWLCnt27c3D6Fff/21SZo//vhj0XOy2SswZcoUeeyxxwyAPkheddVV8ueff8qSJUvk+PHjkpKSYh4KqlSpkgmJuLI3ZmKteaVKlSQtLU2uueaaix/urlu3Tn799VcpVqyYzJ49W+644w7iKlZQ9rtEoFevXvLee++Zv2e5JcDcrwieaAKRBFg/+M3uQ99BgwZd8qFdWOKKBDhadPBzxwL61m306NHSvHlz89Yl8kumn5TrL5d+Mv7tt986vg4nCKfAiy++aB4ob7jhBvNVq1YtOX36dI5vgBcsWCDt2rWTihUrSmpqqtSrV8/A6Pd6sy9VqpRs27ZNypUrF04wahVVYPr06SbZ1T/kmgBHtr1790rnzp1l1apV0qNHD5kxY8bFnxFXUVnZQUQWL14s1113nZQoUSKTh/ZGefzxx+Xyyy+X3bt3S9GiRc3PiSvCJi8C+kHubbfdJn369JF33nknxwSYuMqLqr37RhJgfSbSZ6toW5jiigQ4Wmvzc0cC6enp5i3KsWPHZOXKlXLttddmOl+jRo1kzZo18tNPP5mHBjYEognog2VuCXCnTp1Eu+288sorJsHJuPXv319ee+01GTdunPnwhQ2BrAL6QYl2ky9evLh5K6zd53UjrogVpwLaxX7Lli3y888/mzfExJVTUbuO16Fk2oVe702ffvqp1K9fP8cEmPuVXbGR39rmNQEOU1yRAOc3ajguJoGFCxdKmzZtcrxJ6xjgZ599VkaMGCEjR46M6ZzsZLdAbgmwPiCUL1/eJMi7du2S6tWrZ8L6/vvv5dZbb6XXgd0hlGvtdXxw6dKlzT579uwxwzaIKwKmIAS0t8HGjRtlw4YNpps9cVUQqvacY+jQofLSSy+Z4Rk1atSQ2rVrZ/tsRVzZExNOa5qXBDhscUUC7DR6OD5XgVdffVWeeuopueeee+TDDz+8ZN+5c+ea8VBdu3Y1Y6PYEIgmkFsCvHr1atPLQMeW6wQ0WTftSq1d8DVJPnz4cLRL8XMLBdauXWvesuh4TR0PrG9biCsLA6GAq/z+++/LQw89ZCZa0wRYJ10jrgoYOcSn055y2kvuwQcflHfffdfMo5JTAkxchTgQCrhqkQRYhyrq5GqFCxc2PQt0npSaNWtmulrY4ooEuICDidNlFtDZVLUrqibBOuY366ZdwRo3bixNmjQRne2XDYFoArklwJ999pl06dLFJMHa5T67TZPfo0ePmu6tiYmJ0S7Hzy0T0MmxdJKsO++8UzSedCOuLAuCAqju2LFjRSe/0g/dNOHV76+44goTS5HhPsRVAUBbcIpz586ZVQx0nKb2IND5LXJLgIkrC4KigKqY0yzQ+gHw8OHDzVdkC1tckQAXUBBxmuwFdKKGyZMnyzPPPCMvvPDCJTvp9P06SZF+6SyZbAhEE8gtAdZJi+6//35p0aKFWYoku027RetSSvqlD6RsCEQEvvjiC9MjRSco+vHHH0XnKNCNuCJG8iqgExXphEWR7corrzQz9+oQjMhGXOVV1c79dUUDnc9i6tSpojNA65ZbAkxc2Rkn+am1DkHUN74674UO99GhY7pShj6va5dn7cWpc6eE8e8gCXB+IoZjYhYgAY6Zih1jFCABjhGK3fIkoG9W9CHgyJEjmf7oh/EPf55g2NmRgPY20TWBn3/+eTPjsz5Y6gfCxJUjVmsO3rlzpzRs2ND0Gsi4WgYJsDUh4ElFdcWW22+/3ayWoXNh6JKSYftghQTYk9Cy56J0gbanrd2qKV2g3ZK25zraG0B7DezYsUP0njV+/PhMlQ9b1y97WtY/NT1z5oxZClCHZixbtsws6UZc+ad9/FoSHYqhyYgOF9OJ0yIbXaD92mLhKZfeo3SFFp3MVrtKh+1+RQIcnlj1ZU2YBMuXzRLoQjEJVqCbz3eF18nQbrnlFlm/fr08/PDDZoKZQoUKZSpn2Cb/8F0jWFIgHRc8ZMgQM65O3wgTV5Y0vINq6r1I38JFhmNETnXq1CnzQYr+PWzatKn575kzZ0pSUhJx5cCbQ/8l0LNnT/nggw/Mm98ePXqELq5IgIn2uAqwDFJcea08eazLIO3evVuqVauWyYhlkKwMmRwr/ddff0nbtm1l+fLl0q1bNzNTvc7Om3XLuPwDcUUM5VdAx3D27t1b+vbtKxMnTsy0DBJxlV/VcB+X9cO43Gqrk2TVqlWLuAp3SLhWu44dO8q8efNkzpw5ctddd4UurkiAXQslOy+Unp4uVapUkWPHjsmqVavMjM8ZN/1UU6f3124WkZkx7ZSi1rEK5JYA6znCtFB7rCbsl3cBXStaY+Wbb74xY520e1dCQkKOJyKu8m7MEZkFdAKj6dOni74JHjx4sPkhcUWU5Ecgty7QxFV+RDkmo8DBgwfNMls6i71OjKWTh4YtrkiAifm4C+j6YqNHjzYTzOhYltKlS5tr6rJIgwYNkpYtW2aa3CHuBeICgRaIlgDrRDPt2rUzS0WkpqaaGcZ10+9bt25tJnPQT8q1WxmbnQJnz541a5N/8sknpvuzfspdqlSpXDGIKztjJS+1Xrx4sVk7un379mY9zcim438nTZpkZvLVdaU3bdokNWrUMD8mrvIizL4RgWgJMHFFrEQTWLJkiRw4cMAs+Zex55PG1gMPPCB6P9M3v/oGOLKFKa5IgKNFCD93LKBjVXQAvY5X0WnW9YFTJ5vRf1euXFmWLl0qderUcXwdThBOgblz58qoUaMuVk67q54/f/7iuCf9gY6p69y588V99EFTl47QpEaTYe2JMH/+fHOcTvGvi7yz2SsQWVZEBbp27Sply5bNFmPcuHFSqVIl4sreUMlTzadNm2bGkWvMaI8m/RDu0KFDZhbovXv3mvGa+gb43nvvzXRe7ld5YmbnKMsgRYCIK0IlN4HI/UrHjTdp0sS8FNBn8xUrVog+t+vs49pDSntxZtzCElckwPx+uCKgY+jGjBljBtNrd4oKFSpIhw4dTGIT6VrhSkG4SOAEIjfp3AqecX3EyH563BtvvCEbNmwwXVubNWtmEmXticBmt8DIkSPlueeei4oQGVOXcUfiKiqbtTtovEyZMkUWLVokW7duNcmv3nt0XGabNm3kySeflOTk5Gx9iCtrwyZfFY/2Bpi/g/liteogfTZ6/fXXzcsofS7XJQC1h2aDBg1MD6l+/fqZHnPZbWG4X5EAWxXuVBYBBBBAAAEEEEAAAQQQsFeABNjetqfmCCCAAAIIIIAAAggggIBVAiTAVjU3lUUAAQQQQAABBBBAAAEE7BUgAba37ak5AggggAACCCCAAAIIIGCVAAmwVc1NZRFAAAEEEEAAAQQQQAABewVIgO1te2qOAAIIIIAAAggggAACCFglQAJsVXNTWQQQQAABBBBAAAEEEEDAXgESYHvbnpojgAACCCCAAAIIIIAAAlYJkABb1dxUFgEEEEAAAQQQQAABBBCwV4AE2N62p+YIIIAAAggggAACCCCAgFUCJMBWNTeVRQABBBBAAAEEEEAAAQTsFSABtrftqTkCCCCAAAIIIIAAAgggYJUACbBVzU1lEUAAAQQQQAABBBBAAAF7BUiA7W17ao4AAggggAACCCCAAAIIWCVAAmxVc1NZBBBAAAEEEEAAAQQQQMBeARJge9uemiOAAAIIIIAAAggggAACVgmQAFvV3FQWAQQQQAABBBBAAAEEELBXgATY3ran5ggggAACCEQVuP/++2XGjBkyatQoGTZsWKb9U1NTpW3btlKyZElZvHixpKSkRD0fOyCAAAIIIOClAAmwl/pcGwEEEEAAAZ8LbNmyRRo0aCBlypSRbdu2yWWXXWZKvHnzZrnpppskLS1NFixYYL5nQwABBBBAwO8CJMB+byHKhwACCCCAgMcC/fr1k0mTJsmIESNk5MiRcvDgQWnevLls375dZs2aJV26dPG4hFweAQQQQACB2ARIgGNzYi8EEEAAAQSsFdizZ48kJydLQkKCrFu3Trp37y7Lli2Tt99+W/r06WOtCxVHAAEEEAieAAlw8NqMEiOAAAIIIOC6wJAhQ2Ts2LFSqVIlOXTokAwfPlyef/5518vBBRFAAAEEEHAiQALsRI9jEUAAAQQQsERg7969Ur16dTl37pz06tVLpk6daknNqSYCCCCAQJgESIDD1JrUBQEEEEAAgTgInD9/Xnr27CkzZ840Z3/00Udl8uTJcbgSp0QAAQQQQCC+AiTA8fXl7AgggAACCAReYPDgwTJ+/Hjp1KmTrFq1ykyCtX79eqlXr17g60YFEEAAAQTsEiABtqu9qS0CCCCAAAJ5EpgwYYIMGDBAbrzxRlm4cKFMmTJF+vfvL/fdd9/FN8J5OiE7I4AAAggg4KEACbCH+FwaAQQQQAABPwt89NFHJtGtU6eOpKamSuXKleXUqVNmRmidGXrlypXSuHFjP1eBsiGAAAIIIJBJgASYgEAAAQQQQACBSwS+++47ad++vZQtW1aWLFlikt7I9uabb8oTTzxhukTPnTsXPQQQQAABBAIjQAIcmKaioAgggAACCLgjoON7W7RoIenp6fLNN99I06ZNM11Y/18T4l27dsn3338vN998szsF4yoIIIAAAgg4FCABdgjI4QgggAACCCCAAAIIIIAAAsEQIAEORjtRSgQQQAABBBBAAAEEEEAAAYcCJMAOATkcAQQQQAABBBBAAAEEEEAgGAIkwMFoJ0qJAAIIIIAAAggggAACCCDgUIAE2CEghyOAAAIIIIAAAggggAACCARDgAQ4GO1EKRFAAAEEEEAAAQQQQAABBBwKkAA7BORwBBBAAAEEEEAAAQQQQACBYAiQAAejnSglAggggAACCCCAAAIIIICAQwESYIeAHI4AAggggAACCCCAAAIIIBAMARLgYLQTpUQAAQQQQAABBBBAAAEEEHAoQALsEJDDEUAAAQQQQAABBBBAAAEEgiFAAhyMdqKUCCCAAAIIIIAAAggggAACDgVIgB0CcjgCCCCAAAIIIIAAAggggEAwBEiAg9FOlBIBBBBAAAEEEEAAAQQQQMChAAmwQ0AORwABBBBAAAEEEEAAAQQQCIYACXAw2olSIoAAAggggAACCCCAAAIIOBQgAXYIyOEIIIAAAggggAACCCCAAALBECABDkY7UUoEEEAAAQQQQAABBBBAAAGHAiTADgE5HAEEEEAAAQQQQAABBBBAIBgCJMDBaCdKiQACCCCAAAIIIIAAAggg4FCABNghIIcjgAACCCCAAAIIIIAAAggEQ4AEOBjtRCkRQAABBBBAAAEEEEAAAQQcCpAAOwTkcAQQQAABBBBAAAEEEEAAgWAIkAAHo50oJQIIIIAAAggggAACCCCAgEMBEmCHgByOAAIIIIAAAggggAACCCAQDAES4GC0E6VEAAEEEEAAAQQQQAABBBBwKEAC7BCQwxFAAAEEEEAAAQQQQAABBIIhQAIcjHailAgggAACCCCAAAIIIIAAAg4F/h/AsBBItwrO+wAAAABJRU5ErkJggg==\" width=\"640\">"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Generate Test Data\n",
|
||
"\n",
|
||
"#Number of test data\n",
|
||
"N_test=20\n",
|
||
"\n",
|
||
"sigma_test=sigma_train\n",
|
||
"\n",
|
||
"max_x=1.2\n",
|
||
"x_test=max_x*np.random.random(N_test)\n",
|
||
"# Draw random noise\n",
|
||
"s_test = sigma_test*np.random.randn(N_test)\n",
|
||
"\n",
|
||
"#Linear\n",
|
||
"#y_test=2*x_test+s_test\n",
|
||
"#Tenth order\n",
|
||
"y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n",
|
||
"\n",
|
||
"#Make design matrices for prediction\n",
|
||
"x_plot=np.linspace(0,max_x, 200)\n",
|
||
"X3 = poly3.fit_transform(x_plot[:,np.newaxis])\n",
|
||
"X10 = poly10.fit_transform(x_plot[:,np.newaxis])\n",
|
||
"\n",
|
||
"%matplotlib notebook\n",
|
||
"\n",
|
||
"fig = plt.figure() \n",
|
||
"p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')\n",
|
||
"p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')\n",
|
||
"p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')\n",
|
||
"p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')\n",
|
||
"\n",
|
||
"\n",
|
||
"plt.legend(loc=2)\n",
|
||
"plt.xlabel('$x$')\n",
|
||
"plt.ylabel('$y$')\n",
|
||
"plt.legend(loc='best')\n",
|
||
"plt.title(Title+\" (pred.)\")\n",
|
||
"plt.tight_layout()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## How can we effectively evaluate the various models?\n",
|
||
"\n",
|
||
"In Ridge regression and the subsequent discussion of its properties\n",
|
||
"the bias or penalty parameter is considered known or `given'. In\n",
|
||
"practice, it is unknown and the user needs to make an informed\n",
|
||
"decision on its value. How do we do that? Much of the same considerations apply to the Lasso method. \n",
|
||
"\n",
|
||
"## Code examples for Ridge and Lasso Regression"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"X_train: (37, 1)\n",
|
||
"y_train: (37,)\n",
|
||
"X_test: (13, 1)\n",
|
||
"y_test: (13,)\n",
|
||
"------------------------------------\n",
|
||
"Ordinary Least Squares\n",
|
||
"Prediction Shape: (13,)\n",
|
||
"Coefficients: \n",
|
||
" [0.48493051]\n",
|
||
"Mean squared error: 2.55\n",
|
||
"Variance score: 0.53\n",
|
||
"------------------------------------\n",
|
||
"Ridge Regression\n",
|
||
"Ridge Coefficient: [0.48378356]\n",
|
||
"Ridge Intercept: 5.38546842215786\n",
|
||
"------------------------------------\n",
|
||
"Lasso\n",
|
||
"Lasso Coefficient: [0.48405332]\n",
|
||
"Lasso Intercept: 5.380612793763472\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import numpy as np\n",
|
||
"from sklearn import linear_model\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"from sklearn.metrics import mean_squared_error, r2_score\n",
|
||
"\n",
|
||
"#creating data with random noise\n",
|
||
"x=np.arange(50)\n",
|
||
"\n",
|
||
"delta=np.random.uniform(-2.5,2.5, size=(50))\n",
|
||
"np.random.shuffle(delta)\n",
|
||
"y =0.5*x+5+delta\n",
|
||
"\n",
|
||
"#arranging data into 2x50 matrix\n",
|
||
"a=np.array(x) #inputs\n",
|
||
"b=np.array(y) #outputs\n",
|
||
"\n",
|
||
"#Split into training and test\n",
|
||
"X_train=a[:37, np.newaxis]\n",
|
||
"X_test=a[37:, np.newaxis]\n",
|
||
"y_train=b[:37]\n",
|
||
"y_test=b[37:]\n",
|
||
"\n",
|
||
"print (\"X_train: \", X_train.shape)\n",
|
||
"print (\"y_train: \", y_train.shape)\n",
|
||
"print (\"X_test: \", X_test.shape)\n",
|
||
"print (\"y_test: \", y_test.shape)\n",
|
||
"\n",
|
||
"print (\"------------------------------------\")\n",
|
||
"\n",
|
||
"print (\"Ordinary Least Squares\")\n",
|
||
"#Add Ordinary Least Squares fit\n",
|
||
"reg=LinearRegression()\n",
|
||
"reg.fit(X_train, y_train)\n",
|
||
"pred=reg.predict(X_test)\n",
|
||
"print (\"Prediction Shape: \", pred.shape)\n",
|
||
"\n",
|
||
"print('Coefficients: \\n', reg.coef_)\n",
|
||
"# The mean squared error\n",
|
||
"print(\"Mean squared error: %.2f\"\n",
|
||
" % mean_squared_error(y_test, pred))\n",
|
||
"# Explained variance score: 1 is perfect prediction\n",
|
||
"print('Variance score: %.2f' % r2_score(y_test, pred))\n",
|
||
"\n",
|
||
"#plot\n",
|
||
"plt.scatter(X_test,y_test,color='green', label=\"Training Data\")\n",
|
||
"plt.plot(X_test, pred, color='black', label=\"Fit Line\")\n",
|
||
"plt.legend()\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"print (\"------------------------------------\")\n",
|
||
"\n",
|
||
"print (\"Ridge Regression\")\n",
|
||
"\n",
|
||
"ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])\n",
|
||
"ridge.fit(X_train,y_train)\n",
|
||
"print (\"Ridge Coefficient: \",ridge.coef_)\n",
|
||
"print (\"Ridge Intercept: \", ridge.intercept_)\n",
|
||
"#Look into graphing with Ridge fit\n",
|
||
"\n",
|
||
"print (\"------------------------------------\")\n",
|
||
"\n",
|
||
"print (\"Lasso\")\n",
|
||
"lasso=linear_model.Lasso(alpha=0.1)\n",
|
||
"lasso.fit(X_train,y_train)\n",
|
||
"predl=lasso.predict(X_test)\n",
|
||
"print(\"Lasso Coefficient: \", lasso.coef_)\n",
|
||
"print(\"Lasso Intercept: \", lasso.intercept_)\n",
|
||
"plt.scatter(X_test,y_test,color='green', label=\"Training Data\")\n",
|
||
"plt.plot(X_test, predl, color='blue', label=\"Lasso\")\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## A second-order polynomial with Ridge and Lasso"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/javascript": [
|
||
"/* Put everything inside the global mpl namespace */\n",
|
||
"window.mpl = {};\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.get_websocket_type = function() {\n",
|
||
" if (typeof(WebSocket) !== 'undefined') {\n",
|
||
" return WebSocket;\n",
|
||
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
||
" return MozWebSocket;\n",
|
||
" } else {\n",
|
||
" alert('Your browser does not have WebSocket support.' +\n",
|
||
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
||
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
||
" 'have to enable WebSockets in about:config.');\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
||
" this.id = figure_id;\n",
|
||
"\n",
|
||
" this.ws = websocket;\n",
|
||
"\n",
|
||
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
||
"\n",
|
||
" if (!this.supports_binary) {\n",
|
||
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
||
" if (warnings) {\n",
|
||
" warnings.style.display = 'block';\n",
|
||
" warnings.textContent = (\n",
|
||
" \"This browser does not support binary websocket messages. \" +\n",
|
||
" \"Performance may be slow.\");\n",
|
||
" }\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj = new Image();\n",
|
||
"\n",
|
||
" this.context = undefined;\n",
|
||
" this.message = undefined;\n",
|
||
" this.canvas = undefined;\n",
|
||
" this.rubberband_canvas = undefined;\n",
|
||
" this.rubberband_context = undefined;\n",
|
||
" this.format_dropdown = undefined;\n",
|
||
"\n",
|
||
" this.image_mode = 'full';\n",
|
||
"\n",
|
||
" this.root = $('<div/>');\n",
|
||
" this._root_extra_style(this.root)\n",
|
||
" this.root.attr('style', 'display: inline-block');\n",
|
||
"\n",
|
||
" $(parent_element).append(this.root);\n",
|
||
"\n",
|
||
" this._init_header(this);\n",
|
||
" this._init_canvas(this);\n",
|
||
" this._init_toolbar(this);\n",
|
||
"\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" this.waiting = false;\n",
|
||
"\n",
|
||
" this.ws.onopen = function () {\n",
|
||
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
||
" fig.send_message(\"send_image_mode\", {});\n",
|
||
" if (mpl.ratio != 1) {\n",
|
||
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
||
" }\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj.onload = function() {\n",
|
||
" if (fig.image_mode == 'full') {\n",
|
||
" // Full images could contain transparency (where diff images\n",
|
||
" // almost always do), so we need to clear the canvas so that\n",
|
||
" // there is no ghosting.\n",
|
||
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
" }\n",
|
||
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
||
" };\n",
|
||
"\n",
|
||
" this.imageObj.onunload = function() {\n",
|
||
" fig.ws.close();\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
||
"\n",
|
||
" this.ondownload = ondownload;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_header = function() {\n",
|
||
" var titlebar = $(\n",
|
||
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
||
" 'ui-helper-clearfix\"/>');\n",
|
||
" var titletext = $(\n",
|
||
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
||
" 'text-align: center; padding: 3px;\"/>');\n",
|
||
" titlebar.append(titletext)\n",
|
||
" this.root.append(titlebar);\n",
|
||
" this.header = titletext[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_canvas = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var canvas_div = $('<div/>');\n",
|
||
"\n",
|
||
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
||
"\n",
|
||
" function canvas_keyboard_event(event) {\n",
|
||
" return fig.key_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
||
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
||
" this.canvas_div = canvas_div\n",
|
||
" this._canvas_extra_style(canvas_div)\n",
|
||
" this.root.append(canvas_div);\n",
|
||
"\n",
|
||
" var canvas = $('<canvas/>');\n",
|
||
" canvas.addClass('mpl-canvas');\n",
|
||
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
||
"\n",
|
||
" this.canvas = canvas[0];\n",
|
||
" this.context = canvas[0].getContext(\"2d\");\n",
|
||
"\n",
|
||
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
||
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
||
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
||
"\tthis.context.msBackingStorePixelRatio ||\n",
|
||
"\tthis.context.oBackingStorePixelRatio ||\n",
|
||
"\tthis.context.backingStorePixelRatio || 1;\n",
|
||
"\n",
|
||
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
||
"\n",
|
||
" var rubberband = $('<canvas/>');\n",
|
||
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
||
"\n",
|
||
" var pass_mouse_events = true;\n",
|
||
"\n",
|
||
" canvas_div.resizable({\n",
|
||
" start: function(event, ui) {\n",
|
||
" pass_mouse_events = false;\n",
|
||
" },\n",
|
||
" resize: function(event, ui) {\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" stop: function(event, ui) {\n",
|
||
" pass_mouse_events = true;\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" });\n",
|
||
"\n",
|
||
" function mouse_event_fn(event) {\n",
|
||
" if (pass_mouse_events)\n",
|
||
" return fig.mouse_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
||
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
||
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
||
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
||
"\n",
|
||
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
||
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
||
"\n",
|
||
" canvas_div.on(\"wheel\", function (event) {\n",
|
||
" event = event.originalEvent;\n",
|
||
" event['data'] = 'scroll'\n",
|
||
" if (event.deltaY < 0) {\n",
|
||
" event.step = 1;\n",
|
||
" } else {\n",
|
||
" event.step = -1;\n",
|
||
" }\n",
|
||
" mouse_event_fn(event);\n",
|
||
" });\n",
|
||
"\n",
|
||
" canvas_div.append(canvas);\n",
|
||
" canvas_div.append(rubberband);\n",
|
||
"\n",
|
||
" this.rubberband = rubberband;\n",
|
||
" this.rubberband_canvas = rubberband[0];\n",
|
||
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
||
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
||
"\n",
|
||
" this._resize_canvas = function(width, height) {\n",
|
||
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
||
" // canvas in synch.\n",
|
||
" canvas_div.css('width', width)\n",
|
||
" canvas_div.css('height', height)\n",
|
||
"\n",
|
||
" canvas.attr('width', width * mpl.ratio);\n",
|
||
" canvas.attr('height', height * mpl.ratio);\n",
|
||
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
||
"\n",
|
||
" rubberband.attr('width', width);\n",
|
||
" rubberband.attr('height', height);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
||
" // upon first draw.\n",
|
||
" this._resize_canvas(600, 600);\n",
|
||
"\n",
|
||
" // Disable right mouse context menu.\n",
|
||
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
||
" return false;\n",
|
||
" });\n",
|
||
"\n",
|
||
" function set_focus () {\n",
|
||
" canvas.focus();\n",
|
||
" canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" window.setTimeout(set_focus, 100);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) {\n",
|
||
" // put a spacer in here.\n",
|
||
" continue;\n",
|
||
" }\n",
|
||
" var button = $('<button/>');\n",
|
||
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
||
" 'ui-button-icon-only');\n",
|
||
" button.attr('role', 'button');\n",
|
||
" button.attr('aria-disabled', 'false');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
"\n",
|
||
" var icon_img = $('<span/>');\n",
|
||
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
||
" icon_img.addClass(image);\n",
|
||
" icon_img.addClass('ui-corner-all');\n",
|
||
"\n",
|
||
" var tooltip_span = $('<span/>');\n",
|
||
" tooltip_span.addClass('ui-button-text');\n",
|
||
" tooltip_span.html(tooltip);\n",
|
||
"\n",
|
||
" button.append(icon_img);\n",
|
||
" button.append(tooltip_span);\n",
|
||
"\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fmt_picker_span = $('<span/>');\n",
|
||
"\n",
|
||
" var fmt_picker = $('<select/>');\n",
|
||
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
||
" fmt_picker_span.append(fmt_picker);\n",
|
||
" nav_element.append(fmt_picker_span);\n",
|
||
" this.format_dropdown = fmt_picker[0];\n",
|
||
"\n",
|
||
" for (var ind in mpl.extensions) {\n",
|
||
" var fmt = mpl.extensions[ind];\n",
|
||
" var option = $(\n",
|
||
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
||
" fmt_picker.append(option)\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add hover states to the ui-buttons\n",
|
||
" $( \".ui-button\" ).hover(\n",
|
||
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
||
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
||
" );\n",
|
||
"\n",
|
||
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
||
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
||
" // which will in turn request a refresh of the image.\n",
|
||
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
||
" properties['type'] = type;\n",
|
||
" properties['figure_id'] = this.id;\n",
|
||
" this.ws.send(JSON.stringify(properties));\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_draw_message = function() {\n",
|
||
" if (!this.waiting) {\n",
|
||
" this.waiting = true;\n",
|
||
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" var format_dropdown = fig.format_dropdown;\n",
|
||
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
||
" fig.ondownload(fig, format);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
||
" var size = msg['size'];\n",
|
||
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
||
" fig._resize_canvas(size[0], size[1]);\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
||
" var x0 = msg['x0'] / mpl.ratio;\n",
|
||
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
||
" var x1 = msg['x1'] / mpl.ratio;\n",
|
||
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
||
" x0 = Math.floor(x0) + 0.5;\n",
|
||
" y0 = Math.floor(y0) + 0.5;\n",
|
||
" x1 = Math.floor(x1) + 0.5;\n",
|
||
" y1 = Math.floor(y1) + 0.5;\n",
|
||
" var min_x = Math.min(x0, x1);\n",
|
||
" var min_y = Math.min(y0, y1);\n",
|
||
" var width = Math.abs(x1 - x0);\n",
|
||
" var height = Math.abs(y1 - y0);\n",
|
||
"\n",
|
||
" fig.rubberband_context.clearRect(\n",
|
||
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
"\n",
|
||
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
||
" // Updates the figure title.\n",
|
||
" fig.header.textContent = msg['label'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
||
" var cursor = msg['cursor'];\n",
|
||
" switch(cursor)\n",
|
||
" {\n",
|
||
" case 0:\n",
|
||
" cursor = 'pointer';\n",
|
||
" break;\n",
|
||
" case 1:\n",
|
||
" cursor = 'default';\n",
|
||
" break;\n",
|
||
" case 2:\n",
|
||
" cursor = 'crosshair';\n",
|
||
" break;\n",
|
||
" case 3:\n",
|
||
" cursor = 'move';\n",
|
||
" break;\n",
|
||
" }\n",
|
||
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
||
" fig.message.textContent = msg['message'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
||
" // Request the server to send over a new figure.\n",
|
||
" fig.send_draw_message();\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
||
" fig.image_mode = msg['mode'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Called whenever the canvas gets updated.\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"// A function to construct a web socket function for onmessage handling.\n",
|
||
"// Called in the figure constructor.\n",
|
||
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
||
" return function socket_on_message(evt) {\n",
|
||
" if (evt.data instanceof Blob) {\n",
|
||
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
||
" * transferred with MIME type text/plain:\" errors on\n",
|
||
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
||
" * to be part of the websocket stream */\n",
|
||
" evt.data.type = \"image/png\";\n",
|
||
"\n",
|
||
" /* Free the memory for the previous frames */\n",
|
||
" if (fig.imageObj.src) {\n",
|
||
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
||
" fig.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
||
" evt.data);\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
||
" fig.imageObj.src = evt.data;\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var msg = JSON.parse(evt.data);\n",
|
||
" var msg_type = msg['type'];\n",
|
||
"\n",
|
||
" // Call the \"handle_{type}\" callback, which takes\n",
|
||
" // the figure and JSON message as its only arguments.\n",
|
||
" try {\n",
|
||
" var callback = fig[\"handle_\" + msg_type];\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" if (callback) {\n",
|
||
" try {\n",
|
||
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
||
" callback(fig, msg);\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
||
" }\n",
|
||
" }\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
||
"mpl.findpos = function(e) {\n",
|
||
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
||
" var targ;\n",
|
||
" if (!e)\n",
|
||
" e = window.event;\n",
|
||
" if (e.target)\n",
|
||
" targ = e.target;\n",
|
||
" else if (e.srcElement)\n",
|
||
" targ = e.srcElement;\n",
|
||
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
||
" targ = targ.parentNode;\n",
|
||
"\n",
|
||
" // jQuery normalizes the pageX and pageY\n",
|
||
" // pageX,Y are the mouse positions relative to the document\n",
|
||
" // offset() returns the position of the element relative to the document\n",
|
||
" var x = e.pageX - $(targ).offset().left;\n",
|
||
" var y = e.pageY - $(targ).offset().top;\n",
|
||
"\n",
|
||
" return {\"x\": x, \"y\": y};\n",
|
||
"};\n",
|
||
"\n",
|
||
"/*\n",
|
||
" * return a copy of an object with only non-object keys\n",
|
||
" * we need this to avoid circular references\n",
|
||
" * http://stackoverflow.com/a/24161582/3208463\n",
|
||
" */\n",
|
||
"function simpleKeys (original) {\n",
|
||
" return Object.keys(original).reduce(function (obj, key) {\n",
|
||
" if (typeof original[key] !== 'object')\n",
|
||
" obj[key] = original[key]\n",
|
||
" return obj;\n",
|
||
" }, {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
||
" var canvas_pos = mpl.findpos(event)\n",
|
||
"\n",
|
||
" if (name === 'button_press')\n",
|
||
" {\n",
|
||
" this.canvas.focus();\n",
|
||
" this.canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" var x = canvas_pos.x * mpl.ratio;\n",
|
||
" var y = canvas_pos.y * mpl.ratio;\n",
|
||
"\n",
|
||
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
||
" step: event.step,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
"\n",
|
||
" /* This prevents the web browser from automatically changing to\n",
|
||
" * the text insertion cursor when the button is pressed. We want\n",
|
||
" * to control all of the cursor setting manually through the\n",
|
||
" * 'cursor' event from matplotlib */\n",
|
||
" event.preventDefault();\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" // Handle any extra behaviour associated with a key event\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
||
"\n",
|
||
" // Prevent repeat events\n",
|
||
" if (name == 'key_press')\n",
|
||
" {\n",
|
||
" if (event.which === this._key)\n",
|
||
" return;\n",
|
||
" else\n",
|
||
" this._key = event.which;\n",
|
||
" }\n",
|
||
" if (name == 'key_release')\n",
|
||
" this._key = null;\n",
|
||
"\n",
|
||
" var value = '';\n",
|
||
" if (event.ctrlKey && event.which != 17)\n",
|
||
" value += \"ctrl+\";\n",
|
||
" if (event.altKey && event.which != 18)\n",
|
||
" value += \"alt+\";\n",
|
||
" if (event.shiftKey && event.which != 16)\n",
|
||
" value += \"shift+\";\n",
|
||
"\n",
|
||
" value += 'k';\n",
|
||
" value += event.which.toString();\n",
|
||
"\n",
|
||
" this._key_event_extra(event, name);\n",
|
||
"\n",
|
||
" this.send_message(name, {key: value,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
||
" if (name == 'download') {\n",
|
||
" this.handle_save(this, null);\n",
|
||
" } else {\n",
|
||
" this.send_message(\"toolbar_button\", {name: name});\n",
|
||
" }\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
||
" this.message.textContent = tooltip;\n",
|
||
"};\n",
|
||
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
||
"\n",
|
||
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
|
||
"\n",
|
||
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
||
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
||
" // object with the appropriate methods. Currently this is a non binary\n",
|
||
" // socket, so there is still some room for performance tuning.\n",
|
||
" var ws = {};\n",
|
||
"\n",
|
||
" ws.close = function() {\n",
|
||
" comm.close()\n",
|
||
" };\n",
|
||
" ws.send = function(m) {\n",
|
||
" //console.log('sending', m);\n",
|
||
" comm.send(m);\n",
|
||
" };\n",
|
||
" // Register the callback with on_msg.\n",
|
||
" comm.on_msg(function(msg) {\n",
|
||
" //console.log('receiving', msg['content']['data'], msg);\n",
|
||
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
|
||
" ws.onmessage(msg['content']['data'])\n",
|
||
" });\n",
|
||
" return ws;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
||
" // This is the function which gets called when the mpl process\n",
|
||
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
||
"\n",
|
||
" var id = msg.content.data.id;\n",
|
||
" // Get hold of the div created by the display call when the Comm\n",
|
||
" // socket was opened in Python.\n",
|
||
" var element = $(\"#\" + id);\n",
|
||
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
||
"\n",
|
||
" function ondownload(figure, format) {\n",
|
||
" window.open(figure.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fig = new mpl.figure(id, ws_proxy,\n",
|
||
" ondownload,\n",
|
||
" element.get(0));\n",
|
||
"\n",
|
||
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
||
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
||
" ws_proxy.onopen();\n",
|
||
"\n",
|
||
" fig.parent_element = element.get(0);\n",
|
||
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
||
" if (!fig.cell_info) {\n",
|
||
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var output_index = fig.cell_info[2]\n",
|
||
" var cell = fig.cell_info[0];\n",
|
||
"\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
||
" var width = fig.canvas.width/mpl.ratio\n",
|
||
" fig.root.unbind('remove')\n",
|
||
"\n",
|
||
" // Update the output cell to use the data from the current canvas.\n",
|
||
" fig.push_to_output();\n",
|
||
" var dataURL = fig.canvas.toDataURL();\n",
|
||
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
||
" // the notebook keyboard shortcuts fail.\n",
|
||
" IPython.keyboard_manager.enable()\n",
|
||
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
||
" fig.close_ws(fig, msg);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
||
" fig.send_message('closing', msg);\n",
|
||
" // fig.ws.close()\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
||
" // Turn the data on the canvas into data in the output cell.\n",
|
||
" var width = this.canvas.width/mpl.ratio\n",
|
||
" var dataURL = this.canvas.toDataURL();\n",
|
||
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Tell IPython that the notebook contents must change.\n",
|
||
" IPython.notebook.set_dirty(true);\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
" var fig = this;\n",
|
||
" // Wait a second, then push the new image to the DOM so\n",
|
||
" // that it is saved nicely (might be nice to debounce this).\n",
|
||
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) { continue; };\n",
|
||
"\n",
|
||
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add the status bar.\n",
|
||
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"\n",
|
||
" // Add the close button to the window.\n",
|
||
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
||
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
||
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
||
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
||
" buttongrp.append(button);\n",
|
||
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
||
" titlebar.prepend(buttongrp);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
||
" var fig = this\n",
|
||
" el.on(\"remove\", function(){\n",
|
||
"\tfig.close_ws(fig, {});\n",
|
||
" });\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
||
" // this is important to make the div 'focusable\n",
|
||
" el.attr('tabindex', 0)\n",
|
||
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
||
" // off when our div gets focus\n",
|
||
"\n",
|
||
" // location in version 3\n",
|
||
" if (IPython.notebook.keyboard_manager) {\n",
|
||
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
" else {\n",
|
||
" // location in version 2\n",
|
||
" IPython.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" var manager = IPython.notebook.keyboard_manager;\n",
|
||
" if (!manager)\n",
|
||
" manager = IPython.keyboard_manager;\n",
|
||
"\n",
|
||
" // Check for shift+enter\n",
|
||
" if (event.shiftKey && event.which == 13) {\n",
|
||
" this.canvas_div.blur();\n",
|
||
" event.shiftKey = false;\n",
|
||
" // Send a \"J\" for go to next cell\n",
|
||
" event.which = 74;\n",
|
||
" event.keyCode = 74;\n",
|
||
" manager.command_mode();\n",
|
||
" manager.handle_keydown(event);\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" fig.ondownload(fig, null);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.find_output_cell = function(html_output) {\n",
|
||
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
||
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
||
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
||
" // our purposes (turning an active figure into a static one), is too late.\n",
|
||
" var cells = IPython.notebook.get_cells();\n",
|
||
" var ncells = cells.length;\n",
|
||
" for (var i=0; i<ncells; i++) {\n",
|
||
" var cell = cells[i];\n",
|
||
" if (cell.cell_type === 'code'){\n",
|
||
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
||
" var data = cell.output_area.outputs[j];\n",
|
||
" if (data.data) {\n",
|
||
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
||
" data = data.data;\n",
|
||
" }\n",
|
||
" if (data['text/html'] == html_output) {\n",
|
||
" return [cell, data, j];\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"// Register the function which deals with the matplotlib target/channel.\n",
|
||
"// The kernel may be null if the page has been refreshed.\n",
|
||
"if (IPython.notebook.kernel != null) {\n",
|
||
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
||
"}\n"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.Javascript object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAYAAABfdxm0AAAgAElEQVR4XuydCbiVU/v/79OkedaggZQGrwwRhSaUUr2aDGnSmwpFxf8NqRQSXspBNBzN06804E29pVKGUsqQKFSaOyXRoLnzv76LdXrOPs/eez17P88ev+u6zoW9nzV91nq29V33ve6VkpGRkSFMJEACJEACJEACJEACJEACJEACJJDgBFIogBN8hNk9EiABEiABEiABEiABEiABEiABRYACmBOBBEiABEiABEiABEiABEiABEggKQhQACfFMLOTJEACJEACJEACJEACJEACJEACFMCcAyRAAiRAAiRAAiRAAiRAAiRAAklBgAI4KYaZnSQBEiABEiABEiABEiABEiABEqAA5hwgARIgARIgARIgARIgARIgARJICgIUwEkxzOwkCZAACZAACZAACZAACZAACZAABTDnAAmQAAmQAAmQAAmQAAmQAAmQQFIQoABOimFmJ0mABEiABEiABEiABEiABEiABCiAOQdIgARIgARIgARIgARIgARIgASSggAFcFIMMztJAiRAAiRAAiRAAiRAAiRAAiRAAcw5QAIkQAIkQAIkQAIkQAIkQAIkkBQEKICTYpjZSRIgARIgARIgARIgARIgARIgAQpgzgESIAESIAESIAESIAESIAESIIGkIEABnBTDzE6SAAmQAAmQAAmQAAmQAAmQAAlQAHMOkAAJkAAJkAAJkAAJkAAJkAAJJAUBCuCkGGZ2kgRIgARIgARIgARIgARIgARIgAKYc4AESIAESIAESIAESIAESIAESCApCFAAJ8Uws5MkQAIkQAIkQAIkQAIkQAIkQAIUwJwDJEACJEACJEACJEACJEACJEACSUGAAjgphpmdJAESIAESIAESIAESIAESIAESoADmHCABEiABEiABEiABEiABEiABEkgKAhTASTHM7CQJkAAJkAAJkAAJkAAJkAAJkAAFMOcACZAACZAACZAACZAACZAACZBAUhCgAE6KYWYnSYAESIAESIAESIAESIAESIAEKIA5B0iABEiABEiABEiABEiABEiABJKCAAVwUgwzO0kCJEACJEACJEACJEACJEACJEABzDlAAiRAAiRAAiRAAiRAAiRAAiSQFAQogJNimNlJEiABEiABEiABEiABEiABEiABCmDOARIgARIgARIgARIgARIgARIggaQgQAGcFMPMTpIACZAACZAACZAACZAACZAACVAAcw6QAAmQAAmQAAmQAAmQAAmQAAkkBQEK4KQYZnaSBEiABEiABEiABEiABEiABEiAAphzgARIgARIgARIgARIgARIgARIICkIUAAnxTCzkyRAAiRAAiRAAiRAAiRAAiRAAhTAnAMkQAIkQAIkQAIkQAIkQAIkQAJJQYACOCmGmZ0kARIgARIgARIgARIgARIgARKgAOYcIAESIAESIAESIAESIAESIAESSAoCFMBJMczsJAmQAAmQAAmQAAmQAAmQAAmQAAUw5wAJkAAJkAAJkAAJkAAJkAAJkEBSEKAATophZidJgARIgARIgARIgARIgARIgAQogDkHSIAESIAESIAESIAESIAESIAEkoIABXBSDDM7SQIkQAIkQAIkQAIkQAIkQAIkQAHMOUACJEACJEACJEACJEACJEACJJAUBCiAk2KY2UkSIAESIAESIAESIAESIAESIAEKYM4BEiABEiABEiABEiABEiABEiCBpCBAAZwUw8xOkgAJkAAJkAAJkAAJkAAJkAAJUABzDpAACZAACZAACZAACZAACZAACSQFAQrgpBhmdpIESIAESIAESIAESIAESIAESIACmHOABEiABEiABEiABEiABEiABEggKQhQACfFMLOTJEACJEACJEACJEACJEACJEACFMCcAyRAAiRAAiRAAiRAAiRAAiRAAklBgAI4KYaZnSQBEiABEiABEiABEiABEiABEqAA5hwgARIgARIgARIgARIgARIgARJICgIUwEkxzOwkCUSOwP333y+TJk2SLl26yMSJE7NUHOi7yLWQNZHAeQK//PKLVKpUSX2wbds2ueSSS4iHBJKCQEpKiurn8uXLpWHDhq72me+VqzhZGAmQgMsEKIBdBsriSCDZCVAAJ/sMiK/+c6EeX+PlZWuHDBmiisdvWDJshMSjAP7999/ltddeU+PUt29fKVq0qJdTgmWTAAkkKAEK4AQdWHaLBKJFIJAAfuqpp2TevHnSunVrGT58eLSayHpJIJPA7t275dZbb1X/vXTpUilXrhzpJCkBLwVhLCL1sr9ebSx5VW4sjg/bRAIk4B0BCmDv2LJkEkhKAnRzTsphZ6dJIO4JeCkIYxGOl/31Sqh6VW4sjg/bRAIk4B0BCmDv2LJkEkhKAhTA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JEACJEACJEACbZEABXBbjDr7TAIkQAIkQAIkQAIkQAIkQAJtkAAFcBsMOrtMAiRAAiRAAiRAAiRAAiRAAm2RAAVwW4w6+0wCJEACJEACJEACJEACJEACbZAABXAbDDq7TAIkQAIkQAIkQAIkQAIkQAJtkQAFcFuMOvvcgsCaNWswc+ZMVFVVweVy4dRTT8XUqVPxy1/+MmlaU6ZMwQsvvKDYWbVqFYYPH560TRpIPQGtxsiGDRvwzjvvoKysDJs3b0ZdXR26du2K4uJi3Hnnnejfv3/qO8cW4yJQX1+PWbNm4bXXXsPOnTvRqVMnTJgwAQ899BB69OgRl41gocOHD+P+++/H22+/jX379uHYY4/FpEmTlK916NBBlS0WNg4BLcbITz/9hPfff1/5OSH+Tdq9ezfsdrvy79LVV1+N3/zmN8jKyjJOp+mJKgJajJFIDW7dulX598PhcGDMmDFYtmyZKr9YmATaEgEK4LYUbfY1IoE33ngDV1xxBXw+H0aOHInOnTtj+fLlEIuQO+64A48//njC5FauXInRo0fDZDLB7/dTACdMUm5FrcaIx+NpXLgK8TRkyBDk5eXhk08+wbZt22Cz2fDyyy/j0ksvldthtt6CgFhUjho1ShEk3bp1w4gRI7B9+3asW7cOXbp0Ub5+wgknxEXu4MGDKCr6/+3deain0x8H8KMhGltRSEMzJluSXYx//IEUIjL8oQZJyU6yDbIvZaeEyaDska1ICmEo2WVJNBENmqJsSf16n/pO1507d74zv+dxz9e8Tt2kee75nud1Tvf7fJ5zzufsW7788sv6O3vuuWf55JNP6s92221XFi1aVINrZbQEuhoj8+fPry9k872x66671jHx448/lryE+/PPP+tL1BdffLFMnz59tIC0tganXf0dGc+Zel999dX6rCEANtgITC4gADZC1miBpUuXllmzZpVffvmlJMg58sgjq8eSJUvqQ0YeUBPE7r///qvslC+6vI1NULPxxhuXN998UwC8yopT/wtdjpEEwHPmzCkXX3xxOfTQQ8u0adPqDebly6WXXlofejfccMPy1Vdf1RcxSjsCg6AkgWtm7zfYYIPauJtuuqm+KMsM/iuvvDJUg4877rj6oiN/bx599NGy9tpr198744wzyu23317mzZtXFi5cOFRdLmpHoKsxklUGeQF76qmnlq233nrZDWaG74ADDqirDy688MJyzTXXtHPzWjKUQFdjZPyHLViwoJx00knl5JNPLnfffbcAeKjecNGaLCAAXpN7372XG264oZx//vnl8MMPr0sRx5annnqqPqAmUMlStFUtCXLyIPPaa6+VfOnlzawl0KuqOPXX9zlGxt5d3trvuOOO5fPPP6/BT4IgpQ2BbIvYbLPNys8//1zefffdsttuu/2jYbvsskv58MMPyzvvvFP22GOPSRv9/ffflxkzZtSgN4FMlr8PSmb3ttpqq5KXLt999139TGU0BLocI5Pd8cMPP1yXQc+cObN8/fXXo4GjlVWgrzGSF/b57shKkosuuqjOMJsBNugITC4gADZC1miBzNokQH3wwQdLZmXGlnxZZeY2Jfv11ltvvaGtPvroo/ognD3E9957b51BFgAPzdfUhX2NkYlucu7cueXxxx+vMzuZ4VHaEBhsZZg9e3ZdFTK+ZA9wZvAvu+yyuod3snLfffeVE088cYUPqIOcAbnu+OOPbwNAK1Yq0OUYmezDkjdgp512qiuL8sJEGR2BvsbIscceW55++umS545vv/1WADw6Q0JLp1BAADyF+D566gWSbCazOtl7lwQj48tee+1VZ3U++OCDoZMTZTnrfvvtV/d0fvbZZ3UvnwB46vt6dVvQxxhZUVvyBj9JspI07YQTTljdJvu9jgVuueWWcvbZZ5ejjz66PPbYY8vV/vzzz9eVIkli9eSTT0766WeddVa59dZby3nnnVdXoIwvd955Z03Al8/L8mplNAS6HCOT3fFzzz1XDjvssLo0evHixaOBo5VVoI8xkmRphxxySLniiivKJZdcUrdhmAE24AisXEAAvHIjV/xHBbLvdzDDmyB4o402Wu5O80CbpdHPPPNMfegYpmQPX/by3X///cuySAuAh5Fr75q+xshEd/r666/XxEqZ2UlypSRaUtoQOOecc8rNN9+8wqA0L8iSrGj33XevLzAmK9lWke0VCYLzd2J8yUzOEUccUbdfJC+BMhoCXY6Rye74wAMPrNl9Tz/99HLbbbeNBo5WVoGux8ivv/5aVwNkdVq2YOS7QwBssBEYTkAAPJyTq/6DAtljNzi65K+//lqWiGbsrQ6S1SRhTfZdraxk+VFmkrP8OcudBkUAvDK5Nv+9jzEy0Z0m0M7sb5LcZE/6dddd1ybIGtqqJJa55557avKyq666ajmFLIvedttt688XX3wxqdJBBx1UXnrppVpfktaMLwluEuTkJ8m2lNEQ6HKMrOiO77rrrnLKKafUY7KyamnLLbccDRytrAJdj5GsEsms8thEnQJgg43AcAIC4OGcXNWoQGZoP/3001Vq3QMPPFD23nvvmmSm6wA4ybReeOGFumR6hx12EACvUs/0c3FrY2T8Xf799991xi9LGzMukygtb/KVdgS6fHAVALfTr122pMsxMlG78nchGaDzsjYrA/J3TRktgS7HSLZm5Ri9vKTParNBEQCP1pjQ2qkTEABPnb1P7kAgyw4TbK5KGbwt7Xp5ax5Kcn5r9uFkP87YYgZ4VXqo22tbGiMT3dngoWj77bcvWQbt+KNu+7+L2rpcumgJdBc90l4dXY6R8Xf38ccf1zPqk4wxy56z/FkZPYGuxkiO00t+kmSRT56RnEMuAB698aDFUysgAJ5af58+xQJdJjhKxta8id1nn33Kuuuu+487e//992uyrQRj2Xeca2V4neLOH/Ljuxwj4z/yggsuKNdff309+uaNN96o/1XaE+gyeY0kWO31bxct6nKMjG1PjjpKUsUcn5UM48k0roymQFdjJDkiZs2aVbbYYouSF6djS86PzqRAvrdyPFvKsOeTj6aqVhNYPQEB8Oq5+a3/iMBkR9xkqdkgMdYwxyANAuBhaIY5LmWYelzTv0CXY2RsawfnC+es1xzFNf5Bpv878wnDCnR5fIljkIZVH63ruhwjgztP0JvEeDlR4Mwzz6z7PZXRFehqjAwC4GElcsa8QoDAPwUEwEbEGi0wCEKydzfZnseWZGrNcsUcb/Lss8/+X06WQP9ffFP6y32MkSRAytLnvKXPQ1FWBijtCuRM8LyoyCqO9957b7n+ykxLsrBmX14S4E1WEtTMmDGjJt375ptvar2DknNdswpg6dKlNUfB2H9rV0fLItDlGEl9eemal2852zVHoi1YsKCstdZasEdYoOsxMhGFPcAjPEA0/V8VEAD/q9w+rDWBPGhmKVH2A2cPbwLelB9++KEuO0t217EZFgftHyS4evnll5cl0prs3gTArfX88O3peow88cQT5ZhjjinTp0+vWX733Xff4RvjyikTmD9/frn66qvLnDlzar+tv/76tS05q/fcc8+twcrYpYZ33HFHyU+SFV177bX/aPcgu/xRRx1VHnnkkWUZ6DPLlz2e8+bNKwsXLpyye/XBqyfQ1Rj57bffasKrRYsWlblz55aHHnqoTJs2bfUa5beaEuhqjKzopgTATXW3xjQsIABuuHM07d8RSOCbh4wsE0qguummm9ZzFrOXJkkrbrzxxuUaMngTn/1ZM2fOXGlDBcArJWr6gq7GSF6sZIYvMwE777xzPTd2opKs0PlR2hH4448/6t+Ht99+u57RnKWpixcvrv+fJDRvvfVW2WabbZY1OPs1L7/88gmD2Z9++qnmCsjS1tmzZ9cjsHKsTZId5Sil1LXJJpu0c/NaMpRAV2NkcLxNgt68LFtnnXUm/HwvSYbqlqYu6mqMCICb6laNGUEBAfAIdpomdy+QBEQ53zMPnglOcpbvaaedVh9eJyoC4O77oPUauxgjw+7dske8zdHw+++/19nczMhl+XKC1IMPPrhceeWVdVnz2DJZAJzrsrIg12TrxZIlS8rmm29eZ4sTNGdpvDKaAl2MkWHzSdjbueaOEQHwaPa9VrcjIABupy+0hAABAgQIECBAgAABAgR6FBAA94iragIECBAgQIAAAQIECBBoR0AA3E5faAkBAgQIECBAgAABAgQI9CggAO4RV9UECBAgQIAAAQIECBAg0I6AALidvtASAgQIECBAgAABAgQIEOhRQADcI66qCRAgQIAAAQIECBAgQKAdAQFwO32hJQQIECBAgAABAgQIECDQo4AAuEdcVRMgQIAAAQIECBAgQIBAOwIC4Hb6QksIECBAgAABAgQIECBAoEcBAXCPuKomQIAAAQIECBAgQIAAgXYEBMDt9IWWECBAgAABAgQIECBAgECPAgLgHnFVTYAAAQIECBAgQIAAAQLtCAiA2+kLLSFAgAABAgQIECBAgACBHgUEwD3iqpoAAQIECBAgQIAAAQIE2hEQALfTF1pCgAABAgQIECBAgAABAj0KCIB7xFU1AQIECBAgQIAAAQIECLQjIABupy+0hAABAgQIECBAgAABAgR6FBAA94iragIECBAgQIAAAQIECBBoR0AA3E5faAkBAgQIECBAgAABAgQI9CggAO4RV9UECBAgQIAAAQIECBAg0I6AALidvtASAgQIECBAgAABAgQIEOhRQADcI66qCRAgQIAAAQIECBAgQKAdAQFwO32hJQQIECBAgAABAgQIECDQo4AAuEdcVRMgQIAAAQIECBAgQIBAOwIC4Hb6QksIECBAgAABAgQIECBAoEcBAXCPuKomQIAAAQIECBAgQIAAgXYEBMDt9IWWECBAgAABAgQIECBAgECPAgLgHnFVTYAAAQIECBAgQIAAAQLtCAiA2+kLLSFAgAABAgQIECBAgACBHgUEwD3iqpoAAQIECBAgQIAAAQIE2hEQALfTF1pCgAABAgQIECBAgAABAj0KCIB7xFU1AQIECBAgQIAAAQIECLQjIABupy+0hAABAgQIECBAgAABAgR6FBAA94iragIECBAgQIAAAQIECBBoR0AA3E5faAkBAgQIECBAgAABAgQI9CggAO4RV9UECBAgQIAAAQIECBAg0I6AALidvtASAgQIECBAgAABAgQIEOhRQADcI66qCRAgQIAAAQIECBAgQKAdAQFwO32hJQQIECBAgAABAgQIECDQo4AAuEdcVRMgQIAAAQIECBAgQIBAOwIC4Hb6QksIECBAgAABAgQIECBAoEcBAXCPuKomQIAAAQIECBAgQIAAgXYEBMDt9IWWECBAgAABAgQIECBAgECPAgLgHnFVTYAAAQIECBAgQIAAAQLtCAiA2+kLLSFAgAABAgQIECBAgACBHgUEwD3iqpoAAQIECBAgQIAAAQIE2hEQALfTF1pCgAABAgQIECBAgAABAj0KCIB7xFU1AQIECBAgQIAAAQIECLQjIABupy+0hAABAgQIECBAgAABAgR6FPgfeDXP4s9SAaAAAAAASUVORK5CYII=\" width=\"640\">"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"application/javascript": [
|
||
"/* Put everything inside the global mpl namespace */\n",
|
||
"window.mpl = {};\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.get_websocket_type = function() {\n",
|
||
" if (typeof(WebSocket) !== 'undefined') {\n",
|
||
" return WebSocket;\n",
|
||
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
||
" return MozWebSocket;\n",
|
||
" } else {\n",
|
||
" alert('Your browser does not have WebSocket support.' +\n",
|
||
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
||
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
||
" 'have to enable WebSockets in about:config.');\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
||
" this.id = figure_id;\n",
|
||
"\n",
|
||
" this.ws = websocket;\n",
|
||
"\n",
|
||
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
||
"\n",
|
||
" if (!this.supports_binary) {\n",
|
||
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
||
" if (warnings) {\n",
|
||
" warnings.style.display = 'block';\n",
|
||
" warnings.textContent = (\n",
|
||
" \"This browser does not support binary websocket messages. \" +\n",
|
||
" \"Performance may be slow.\");\n",
|
||
" }\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj = new Image();\n",
|
||
"\n",
|
||
" this.context = undefined;\n",
|
||
" this.message = undefined;\n",
|
||
" this.canvas = undefined;\n",
|
||
" this.rubberband_canvas = undefined;\n",
|
||
" this.rubberband_context = undefined;\n",
|
||
" this.format_dropdown = undefined;\n",
|
||
"\n",
|
||
" this.image_mode = 'full';\n",
|
||
"\n",
|
||
" this.root = $('<div/>');\n",
|
||
" this._root_extra_style(this.root)\n",
|
||
" this.root.attr('style', 'display: inline-block');\n",
|
||
"\n",
|
||
" $(parent_element).append(this.root);\n",
|
||
"\n",
|
||
" this._init_header(this);\n",
|
||
" this._init_canvas(this);\n",
|
||
" this._init_toolbar(this);\n",
|
||
"\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" this.waiting = false;\n",
|
||
"\n",
|
||
" this.ws.onopen = function () {\n",
|
||
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
||
" fig.send_message(\"send_image_mode\", {});\n",
|
||
" if (mpl.ratio != 1) {\n",
|
||
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
||
" }\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.imageObj.onload = function() {\n",
|
||
" if (fig.image_mode == 'full') {\n",
|
||
" // Full images could contain transparency (where diff images\n",
|
||
" // almost always do), so we need to clear the canvas so that\n",
|
||
" // there is no ghosting.\n",
|
||
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
" }\n",
|
||
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
||
" };\n",
|
||
"\n",
|
||
" this.imageObj.onunload = function() {\n",
|
||
" fig.ws.close();\n",
|
||
" }\n",
|
||
"\n",
|
||
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
||
"\n",
|
||
" this.ondownload = ondownload;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_header = function() {\n",
|
||
" var titlebar = $(\n",
|
||
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
||
" 'ui-helper-clearfix\"/>');\n",
|
||
" var titletext = $(\n",
|
||
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
||
" 'text-align: center; padding: 3px;\"/>');\n",
|
||
" titlebar.append(titletext)\n",
|
||
" this.root.append(titlebar);\n",
|
||
" this.header = titletext[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_canvas = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var canvas_div = $('<div/>');\n",
|
||
"\n",
|
||
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
||
"\n",
|
||
" function canvas_keyboard_event(event) {\n",
|
||
" return fig.key_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
||
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
||
" this.canvas_div = canvas_div\n",
|
||
" this._canvas_extra_style(canvas_div)\n",
|
||
" this.root.append(canvas_div);\n",
|
||
"\n",
|
||
" var canvas = $('<canvas/>');\n",
|
||
" canvas.addClass('mpl-canvas');\n",
|
||
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
||
"\n",
|
||
" this.canvas = canvas[0];\n",
|
||
" this.context = canvas[0].getContext(\"2d\");\n",
|
||
"\n",
|
||
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
||
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
||
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
||
"\tthis.context.msBackingStorePixelRatio ||\n",
|
||
"\tthis.context.oBackingStorePixelRatio ||\n",
|
||
"\tthis.context.backingStorePixelRatio || 1;\n",
|
||
"\n",
|
||
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
||
"\n",
|
||
" var rubberband = $('<canvas/>');\n",
|
||
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
||
"\n",
|
||
" var pass_mouse_events = true;\n",
|
||
"\n",
|
||
" canvas_div.resizable({\n",
|
||
" start: function(event, ui) {\n",
|
||
" pass_mouse_events = false;\n",
|
||
" },\n",
|
||
" resize: function(event, ui) {\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" stop: function(event, ui) {\n",
|
||
" pass_mouse_events = true;\n",
|
||
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
||
" },\n",
|
||
" });\n",
|
||
"\n",
|
||
" function mouse_event_fn(event) {\n",
|
||
" if (pass_mouse_events)\n",
|
||
" return fig.mouse_event(event, event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
||
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
||
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
||
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
||
"\n",
|
||
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
||
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
||
"\n",
|
||
" canvas_div.on(\"wheel\", function (event) {\n",
|
||
" event = event.originalEvent;\n",
|
||
" event['data'] = 'scroll'\n",
|
||
" if (event.deltaY < 0) {\n",
|
||
" event.step = 1;\n",
|
||
" } else {\n",
|
||
" event.step = -1;\n",
|
||
" }\n",
|
||
" mouse_event_fn(event);\n",
|
||
" });\n",
|
||
"\n",
|
||
" canvas_div.append(canvas);\n",
|
||
" canvas_div.append(rubberband);\n",
|
||
"\n",
|
||
" this.rubberband = rubberband;\n",
|
||
" this.rubberband_canvas = rubberband[0];\n",
|
||
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
||
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
||
"\n",
|
||
" this._resize_canvas = function(width, height) {\n",
|
||
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
||
" // canvas in synch.\n",
|
||
" canvas_div.css('width', width)\n",
|
||
" canvas_div.css('height', height)\n",
|
||
"\n",
|
||
" canvas.attr('width', width * mpl.ratio);\n",
|
||
" canvas.attr('height', height * mpl.ratio);\n",
|
||
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
||
"\n",
|
||
" rubberband.attr('width', width);\n",
|
||
" rubberband.attr('height', height);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
||
" // upon first draw.\n",
|
||
" this._resize_canvas(600, 600);\n",
|
||
"\n",
|
||
" // Disable right mouse context menu.\n",
|
||
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
||
" return false;\n",
|
||
" });\n",
|
||
"\n",
|
||
" function set_focus () {\n",
|
||
" canvas.focus();\n",
|
||
" canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" window.setTimeout(set_focus, 100);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) {\n",
|
||
" // put a spacer in here.\n",
|
||
" continue;\n",
|
||
" }\n",
|
||
" var button = $('<button/>');\n",
|
||
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
||
" 'ui-button-icon-only');\n",
|
||
" button.attr('role', 'button');\n",
|
||
" button.attr('aria-disabled', 'false');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
"\n",
|
||
" var icon_img = $('<span/>');\n",
|
||
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
||
" icon_img.addClass(image);\n",
|
||
" icon_img.addClass('ui-corner-all');\n",
|
||
"\n",
|
||
" var tooltip_span = $('<span/>');\n",
|
||
" tooltip_span.addClass('ui-button-text');\n",
|
||
" tooltip_span.html(tooltip);\n",
|
||
"\n",
|
||
" button.append(icon_img);\n",
|
||
" button.append(tooltip_span);\n",
|
||
"\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fmt_picker_span = $('<span/>');\n",
|
||
"\n",
|
||
" var fmt_picker = $('<select/>');\n",
|
||
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
||
" fmt_picker_span.append(fmt_picker);\n",
|
||
" nav_element.append(fmt_picker_span);\n",
|
||
" this.format_dropdown = fmt_picker[0];\n",
|
||
"\n",
|
||
" for (var ind in mpl.extensions) {\n",
|
||
" var fmt = mpl.extensions[ind];\n",
|
||
" var option = $(\n",
|
||
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
||
" fmt_picker.append(option)\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add hover states to the ui-buttons\n",
|
||
" $( \".ui-button\" ).hover(\n",
|
||
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
||
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
||
" );\n",
|
||
"\n",
|
||
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
||
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
||
" // which will in turn request a refresh of the image.\n",
|
||
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
||
" properties['type'] = type;\n",
|
||
" properties['figure_id'] = this.id;\n",
|
||
" this.ws.send(JSON.stringify(properties));\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.send_draw_message = function() {\n",
|
||
" if (!this.waiting) {\n",
|
||
" this.waiting = true;\n",
|
||
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" var format_dropdown = fig.format_dropdown;\n",
|
||
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
||
" fig.ondownload(fig, format);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
||
" var size = msg['size'];\n",
|
||
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
||
" fig._resize_canvas(size[0], size[1]);\n",
|
||
" fig.send_message(\"refresh\", {});\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
||
" var x0 = msg['x0'] / mpl.ratio;\n",
|
||
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
||
" var x1 = msg['x1'] / mpl.ratio;\n",
|
||
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
||
" x0 = Math.floor(x0) + 0.5;\n",
|
||
" y0 = Math.floor(y0) + 0.5;\n",
|
||
" x1 = Math.floor(x1) + 0.5;\n",
|
||
" y1 = Math.floor(y1) + 0.5;\n",
|
||
" var min_x = Math.min(x0, x1);\n",
|
||
" var min_y = Math.min(y0, y1);\n",
|
||
" var width = Math.abs(x1 - x0);\n",
|
||
" var height = Math.abs(y1 - y0);\n",
|
||
"\n",
|
||
" fig.rubberband_context.clearRect(\n",
|
||
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
||
"\n",
|
||
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
||
" // Updates the figure title.\n",
|
||
" fig.header.textContent = msg['label'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
||
" var cursor = msg['cursor'];\n",
|
||
" switch(cursor)\n",
|
||
" {\n",
|
||
" case 0:\n",
|
||
" cursor = 'pointer';\n",
|
||
" break;\n",
|
||
" case 1:\n",
|
||
" cursor = 'default';\n",
|
||
" break;\n",
|
||
" case 2:\n",
|
||
" cursor = 'crosshair';\n",
|
||
" break;\n",
|
||
" case 3:\n",
|
||
" cursor = 'move';\n",
|
||
" break;\n",
|
||
" }\n",
|
||
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
||
" fig.message.textContent = msg['message'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
||
" // Request the server to send over a new figure.\n",
|
||
" fig.send_draw_message();\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
||
" fig.image_mode = msg['mode'];\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Called whenever the canvas gets updated.\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"// A function to construct a web socket function for onmessage handling.\n",
|
||
"// Called in the figure constructor.\n",
|
||
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
||
" return function socket_on_message(evt) {\n",
|
||
" if (evt.data instanceof Blob) {\n",
|
||
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
||
" * transferred with MIME type text/plain:\" errors on\n",
|
||
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
||
" * to be part of the websocket stream */\n",
|
||
" evt.data.type = \"image/png\";\n",
|
||
"\n",
|
||
" /* Free the memory for the previous frames */\n",
|
||
" if (fig.imageObj.src) {\n",
|
||
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
||
" fig.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
||
" evt.data);\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
||
" fig.imageObj.src = evt.data;\n",
|
||
" fig.updated_canvas_event();\n",
|
||
" fig.waiting = false;\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var msg = JSON.parse(evt.data);\n",
|
||
" var msg_type = msg['type'];\n",
|
||
"\n",
|
||
" // Call the \"handle_{type}\" callback, which takes\n",
|
||
" // the figure and JSON message as its only arguments.\n",
|
||
" try {\n",
|
||
" var callback = fig[\"handle_\" + msg_type];\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" if (callback) {\n",
|
||
" try {\n",
|
||
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
||
" callback(fig, msg);\n",
|
||
" } catch (e) {\n",
|
||
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
||
" }\n",
|
||
" }\n",
|
||
" };\n",
|
||
"}\n",
|
||
"\n",
|
||
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
||
"mpl.findpos = function(e) {\n",
|
||
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
||
" var targ;\n",
|
||
" if (!e)\n",
|
||
" e = window.event;\n",
|
||
" if (e.target)\n",
|
||
" targ = e.target;\n",
|
||
" else if (e.srcElement)\n",
|
||
" targ = e.srcElement;\n",
|
||
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
||
" targ = targ.parentNode;\n",
|
||
"\n",
|
||
" // jQuery normalizes the pageX and pageY\n",
|
||
" // pageX,Y are the mouse positions relative to the document\n",
|
||
" // offset() returns the position of the element relative to the document\n",
|
||
" var x = e.pageX - $(targ).offset().left;\n",
|
||
" var y = e.pageY - $(targ).offset().top;\n",
|
||
"\n",
|
||
" return {\"x\": x, \"y\": y};\n",
|
||
"};\n",
|
||
"\n",
|
||
"/*\n",
|
||
" * return a copy of an object with only non-object keys\n",
|
||
" * we need this to avoid circular references\n",
|
||
" * http://stackoverflow.com/a/24161582/3208463\n",
|
||
" */\n",
|
||
"function simpleKeys (original) {\n",
|
||
" return Object.keys(original).reduce(function (obj, key) {\n",
|
||
" if (typeof original[key] !== 'object')\n",
|
||
" obj[key] = original[key]\n",
|
||
" return obj;\n",
|
||
" }, {});\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
||
" var canvas_pos = mpl.findpos(event)\n",
|
||
"\n",
|
||
" if (name === 'button_press')\n",
|
||
" {\n",
|
||
" this.canvas.focus();\n",
|
||
" this.canvas_div.focus();\n",
|
||
" }\n",
|
||
"\n",
|
||
" var x = canvas_pos.x * mpl.ratio;\n",
|
||
" var y = canvas_pos.y * mpl.ratio;\n",
|
||
"\n",
|
||
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
||
" step: event.step,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
"\n",
|
||
" /* This prevents the web browser from automatically changing to\n",
|
||
" * the text insertion cursor when the button is pressed. We want\n",
|
||
" * to control all of the cursor setting manually through the\n",
|
||
" * 'cursor' event from matplotlib */\n",
|
||
" event.preventDefault();\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" // Handle any extra behaviour associated with a key event\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
||
"\n",
|
||
" // Prevent repeat events\n",
|
||
" if (name == 'key_press')\n",
|
||
" {\n",
|
||
" if (event.which === this._key)\n",
|
||
" return;\n",
|
||
" else\n",
|
||
" this._key = event.which;\n",
|
||
" }\n",
|
||
" if (name == 'key_release')\n",
|
||
" this._key = null;\n",
|
||
"\n",
|
||
" var value = '';\n",
|
||
" if (event.ctrlKey && event.which != 17)\n",
|
||
" value += \"ctrl+\";\n",
|
||
" if (event.altKey && event.which != 18)\n",
|
||
" value += \"alt+\";\n",
|
||
" if (event.shiftKey && event.which != 16)\n",
|
||
" value += \"shift+\";\n",
|
||
"\n",
|
||
" value += 'k';\n",
|
||
" value += event.which.toString();\n",
|
||
"\n",
|
||
" this._key_event_extra(event, name);\n",
|
||
"\n",
|
||
" this.send_message(name, {key: value,\n",
|
||
" guiEvent: simpleKeys(event)});\n",
|
||
" return false;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
||
" if (name == 'download') {\n",
|
||
" this.handle_save(this, null);\n",
|
||
" } else {\n",
|
||
" this.send_message(\"toolbar_button\", {name: name});\n",
|
||
" }\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
||
" this.message.textContent = tooltip;\n",
|
||
"};\n",
|
||
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
||
"\n",
|
||
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
|
||
"\n",
|
||
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
||
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
||
" // object with the appropriate methods. Currently this is a non binary\n",
|
||
" // socket, so there is still some room for performance tuning.\n",
|
||
" var ws = {};\n",
|
||
"\n",
|
||
" ws.close = function() {\n",
|
||
" comm.close()\n",
|
||
" };\n",
|
||
" ws.send = function(m) {\n",
|
||
" //console.log('sending', m);\n",
|
||
" comm.send(m);\n",
|
||
" };\n",
|
||
" // Register the callback with on_msg.\n",
|
||
" comm.on_msg(function(msg) {\n",
|
||
" //console.log('receiving', msg['content']['data'], msg);\n",
|
||
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
|
||
" ws.onmessage(msg['content']['data'])\n",
|
||
" });\n",
|
||
" return ws;\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
||
" // This is the function which gets called when the mpl process\n",
|
||
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
||
"\n",
|
||
" var id = msg.content.data.id;\n",
|
||
" // Get hold of the div created by the display call when the Comm\n",
|
||
" // socket was opened in Python.\n",
|
||
" var element = $(\"#\" + id);\n",
|
||
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
||
"\n",
|
||
" function ondownload(figure, format) {\n",
|
||
" window.open(figure.imageObj.src);\n",
|
||
" }\n",
|
||
"\n",
|
||
" var fig = new mpl.figure(id, ws_proxy,\n",
|
||
" ondownload,\n",
|
||
" element.get(0));\n",
|
||
"\n",
|
||
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
||
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
||
" ws_proxy.onopen();\n",
|
||
"\n",
|
||
" fig.parent_element = element.get(0);\n",
|
||
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
||
" if (!fig.cell_info) {\n",
|
||
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
||
" return;\n",
|
||
" }\n",
|
||
"\n",
|
||
" var output_index = fig.cell_info[2]\n",
|
||
" var cell = fig.cell_info[0];\n",
|
||
"\n",
|
||
"};\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
||
" var width = fig.canvas.width/mpl.ratio\n",
|
||
" fig.root.unbind('remove')\n",
|
||
"\n",
|
||
" // Update the output cell to use the data from the current canvas.\n",
|
||
" fig.push_to_output();\n",
|
||
" var dataURL = fig.canvas.toDataURL();\n",
|
||
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
||
" // the notebook keyboard shortcuts fail.\n",
|
||
" IPython.keyboard_manager.enable()\n",
|
||
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
||
" fig.close_ws(fig, msg);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
||
" fig.send_message('closing', msg);\n",
|
||
" // fig.ws.close()\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
||
" // Turn the data on the canvas into data in the output cell.\n",
|
||
" var width = this.canvas.width/mpl.ratio\n",
|
||
" var dataURL = this.canvas.toDataURL();\n",
|
||
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
||
" // Tell IPython that the notebook contents must change.\n",
|
||
" IPython.notebook.set_dirty(true);\n",
|
||
" this.send_message(\"ack\", {});\n",
|
||
" var fig = this;\n",
|
||
" // Wait a second, then push the new image to the DOM so\n",
|
||
" // that it is saved nicely (might be nice to debounce this).\n",
|
||
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._init_toolbar = function() {\n",
|
||
" var fig = this;\n",
|
||
"\n",
|
||
" var nav_element = $('<div/>')\n",
|
||
" nav_element.attr('style', 'width: 100%');\n",
|
||
" this.root.append(nav_element);\n",
|
||
"\n",
|
||
" // Define a callback function for later on.\n",
|
||
" function toolbar_event(event) {\n",
|
||
" return fig.toolbar_button_onclick(event['data']);\n",
|
||
" }\n",
|
||
" function toolbar_mouse_event(event) {\n",
|
||
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
||
" }\n",
|
||
"\n",
|
||
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
||
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
||
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
||
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
||
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
||
"\n",
|
||
" if (!name) { continue; };\n",
|
||
"\n",
|
||
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
||
" button.click(method_name, toolbar_event);\n",
|
||
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
||
" nav_element.append(button);\n",
|
||
" }\n",
|
||
"\n",
|
||
" // Add the status bar.\n",
|
||
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
||
" nav_element.append(status_bar);\n",
|
||
" this.message = status_bar[0];\n",
|
||
"\n",
|
||
" // Add the close button to the window.\n",
|
||
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
||
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
||
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
||
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
||
" buttongrp.append(button);\n",
|
||
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
||
" titlebar.prepend(buttongrp);\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
||
" var fig = this\n",
|
||
" el.on(\"remove\", function(){\n",
|
||
"\tfig.close_ws(fig, {});\n",
|
||
" });\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
||
" // this is important to make the div 'focusable\n",
|
||
" el.attr('tabindex', 0)\n",
|
||
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
||
" // off when our div gets focus\n",
|
||
"\n",
|
||
" // location in version 3\n",
|
||
" if (IPython.notebook.keyboard_manager) {\n",
|
||
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
" else {\n",
|
||
" // location in version 2\n",
|
||
" IPython.keyboard_manager.register_events(el);\n",
|
||
" }\n",
|
||
"\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
||
" var manager = IPython.notebook.keyboard_manager;\n",
|
||
" if (!manager)\n",
|
||
" manager = IPython.keyboard_manager;\n",
|
||
"\n",
|
||
" // Check for shift+enter\n",
|
||
" if (event.shiftKey && event.which == 13) {\n",
|
||
" this.canvas_div.blur();\n",
|
||
" event.shiftKey = false;\n",
|
||
" // Send a \"J\" for go to next cell\n",
|
||
" event.which = 74;\n",
|
||
" event.keyCode = 74;\n",
|
||
" manager.command_mode();\n",
|
||
" manager.handle_keydown(event);\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
||
" fig.ondownload(fig, null);\n",
|
||
"}\n",
|
||
"\n",
|
||
"\n",
|
||
"mpl.find_output_cell = function(html_output) {\n",
|
||
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
||
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
||
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
||
" // our purposes (turning an active figure into a static one), is too late.\n",
|
||
" var cells = IPython.notebook.get_cells();\n",
|
||
" var ncells = cells.length;\n",
|
||
" for (var i=0; i<ncells; i++) {\n",
|
||
" var cell = cells[i];\n",
|
||
" if (cell.cell_type === 'code'){\n",
|
||
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
||
" var data = cell.output_area.outputs[j];\n",
|
||
" if (data.data) {\n",
|
||
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
||
" data = data.data;\n",
|
||
" }\n",
|
||
" if (data['text/html'] == html_output) {\n",
|
||
" return [cell, data, j];\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
" }\n",
|
||
"}\n",
|
||
"\n",
|
||
"// Register the function which deals with the matplotlib target/channel.\n",
|
||
"// The kernel may be null if the page has been refreshed.\n",
|
||
"if (IPython.notebook.kernel != null) {\n",
|
||
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
||
"}\n"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.Javascript object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAYAAABfdxm0AAAgAElEQVR4XuydBbhWRdeGFyAIKqJgoCiImHx2ggFYCDYmKgZiBxifCojdmFiIGNj62U1YYIDYgQ2CKB5ERUBACfmve3Sff5/3vDH77Xjmus6FcPbUPbO388xas6bOkiVLlpiSCIiACIiACIiACIiACIiACIiACJQ5gToSwGU+wuqeCIiACIiACIiACIiACIiACIiAIyABrIkgAiIgAiIgAiIgAiIgAiIgAiJQEQQkgCtimNVJERABERABERABERABERABERABCWDNAREQAREQAREQAREQAREQAREQgYogIAFcEcOsToqACIiACIiACIiACIiACIiACEgAaw6IgAiIgAiIgAiIgAiIgAiIgAhUBAEJ4IoYZnVSBERABERABERABERABERABERAAlhzQAREQAREQAREQAREQAREQAREoCIISABXxDCrkyIgAiIgAiIgAiIgAiIgAiIgAhLAmgMiIAIiIAIiIAIiIAIiIAIiIAIVQUACuCKGWZ0UAREQAREQAREQAREQAREQARGQANYcEAEREAEREAEREAEREAEREAERqAgCEsAVMczqpAiIgAiIgAiIgAiIgAiIgAiIgASw5oAIiIAIiIAIiIAIiIAIiIAIiEBFEJAArohhVidFQAREQAREQAREQAREQAREQAQkgDUHREAEREAEREAEREAEREAEREAEKoKABHBFDLM6KQIiIAIiIAIiIAIiIAIiIAIiIAGsOSACIiACIiACIiACIiACIiACIlARBCSAK2KY1UkREAEREAEREAEREAEREAEREAEJYM0BERABERABERABERABERABERCBiiAgAVwRw6xOioAIiIAIiIAIiIAIiIAIiIAISABrDoiACIiACIiACIiACIiACIiACFQEAQngihhmdVIEREAEREAEREAEREAEREAEREACWHNABERABERABERABERABERABESgIghIAFfEMKuTIiACIiACIiACIiACIiACIiACEsCaAyIgAiIgAiIgAiIgAiIgAiIgAhVBQAK4IoZZnRQBERABERABERABERABERABEZAA1hwQAREQAREQAREQAREQAREQARGoCAISwBUxzOqkCIiACIiACIiACIiACIiACIiABLDmgAiIgAiIgAiIgAiIgAiIgAiIQEUQkACuiGFWJ0VABERABERABERABERABERABCSANQdEQAREQAREQAREQAREQAREQAQqgoAEcEUMszopAiIgAiIgAiIgAiIgAiIgAiIgAaw5IAIiIAIiIAIiIAIiIAIiIAIiUBEEJIArYpjVSREQAREQAREQAREQAREQAREQAQlgzQEREAEREAEREAEREAEREAEREIGKICABXBHDrE6KgAiIgAiIgAiIgAiIgAiIgAhIAGsOiIAIiIAIiIAIiIAIiIAIiIAIVAQBCeCKGGZ1UgREQAREQAREQAREQAREQAREQAJYc0AEREAEREAEREAEREAEREAERKAiCEgAV8Qwq5MiIAIiIAIiIAIiIAIiIAIiIAISwJoDIiACIiACIiACIiACIiACIiACFUFAArgihlmdFAEREAEREAEREAEREAEREAERkADWHBABERABERABERABERABERABEagIAhLAFTHM6qQIiIAIiIAIiIAIiIAIiIAIiIAEsOaACIiACIiACIiACIiACIiACIhARRCQAK6IYVYnRUAEREAEREAEREAEREAEREAEJIA1B0RABERABERABERABERABERABCqCgARwRQyzOikCIiACIiACIiACIiACIiACIiABrDkgAiIgAiIgAiIgAiIgAiIgAiJQEQQkgCtimNVJERABERABERABERABERABERABCWDNAREQAREQAREQAREQAREQAREQgYogIAFcEcOsToqACIiACIiACIiACIiACIiACEgAaw6IgAiIgAiIgAiIgAiIgAiIgAhUBAEJ4IoYZnVSBCqbwNFHH2333nuvHXXUUTZs2LAaMJL9rrKpqfeFIjB58mRr3bq1q/67776ztdZaq1BNKYl669Sp49r52muvWadOnUqizfluJN+9nj17WqtWrYz5FU4XXXSRXXzxxdaxY0d7/fXXIzWNuTllyhS75557jG+pkgiIgAiUAgEJ4FIYJbVRBEQgIwISwBnhU+Y8E5AAjgZcAjg1r0IIYIQ1ie+vNnFSj5GeEAERyB8BCeD8sVZNIiACBSKQTAD369fPnnrqKevWrZtdeeWVBWqhqhWB/yfw448/2i677OL+4ZVXXrEWLVoITxICG2ywgfvtfffdZ9tss41YxSHAN45vHXOJORVOmViAmafMV76dfEPDSRsTmooiIALFSkACuFhHRu0SARHIGgG5OWcNpQoSAREoMwKZCOBkKCSAy2yiqDsiUEYEJIDLaDDVFREQgfgEJIA1M0RABEQgPgEJYM0MERCBSiMgAVxpI67+ikAFEkj3DDABdUaPHm0XXnih+7nzzjvdzxdffGFLliyxjTbayE455RTr0aNHUqqfffaZ3XTTTS5ID+6CdevWtbXXXtv23ntvO+OMM2yllVaqlX/hwoX20ksv2fPPP28ffPCBy/frr7/aCiusYJtvvrk7V9e9e3cLrCzhAghks9NOO7l/op0ffvihXXvtta4v06dPt+2339472E04yM2BBx5oAwcOdC7jnFP9448/agVpmjNnjt166632zDPP2FdffWVz5861VVZZxdXZp08fa9++fUJWv/zyi11++eUu77Rp02zFFVe0HXbYwblubrHFFtV9jQ12lE5/0xkTGv7OO++4sXz77bftp59+snr16rnxg9Ouu+7qAg2tscYaNfr45Zdf2vXXX++Y//DDD/b333/byiuv7NxRd955ZzvyyCMtcOMlo88Z4FmzZtmgQYPs6aeftm+//daYL9RLG84++2w3v+KlsFVuyy23tKuvvtoef/xxF8homWWWceNz/vnn27bbbhv5SxE7DokKSGYZhM91111nI0eOdBwWLVpkzZo1s9VWW806dOhghx12mG299dY1ik5UXizHRo0a2RVXXGHPPvusG7smTZq49wQBGOYf227YXHLJJTZixAibMWOGG7vddtvNzjvvPFtqqaUyClgWdW4EbWMOMW4PPfSQvfvuu8a7s/zyy1vLli3dHDjiiCPc9ylImZwB5vvRtWtX9+3o3LmzPfHEE7bccsu5ouMFwQq+t4nGP14grsiTTRlEQAREIAMCEsAZwFNWERCB0iCQqQAeMGCAffrpp06YseBFKMyePbu68xdccIGLohovIRgRcCxYSeRlUb9gwQL3dxb2L7zwghO14RQWE/w7i1vELAIzSAcddJA98sgjTlAnyssi+dBDD3UCiTKoF3HjG+01WOAioO+44w77+uuvrUGDBq4fv//+ew0B/NFHHzlRj4ghIQ55LmgzQgWBC4/YRLmIEYQvaemll3Y/cKY++rHPPvu43yUTwD79TXdMiCSOwGUcYtsY9Cc2Gu6oUaMck7/++ss9Ur9+fVt22WUduyCxuRIEDOLfUgngCRMmWJcuXao5N2zY0JUbcIbbgw8+aAcccEAtzoFYRDgxbxHP5GcOzZs3zz0P7+eee86JnSgpUwH88ccfuzkwc+bM6vnDnIVVwDxeJHcfAcxG0jHHHGM///yzm5OLFy+uHhPqGDNmjG266aa1ujt27Fjbfffdq9kiopnXbP6Qjw2xgw8+2OWLGrE7nblBPYhdxpY2B4mNMb4rtIu07777us2RIKUrgF9++WXbf//9Xf/Z6Lv77rvdXAtSPAHMRtejjz7qBDOJjSzmVJDWXHNNJ9qVREAERKBQBCSAC0Ve9YqACOSNQKYCmAUcAhaLG4tdFsGIvJNPPtkJBcQDlpx11123Rp/uuusuO/bYY521BNHHArx58+Zu8Y1YPOecc+zVV191ljusyoFVhULGjx/vFptYXQnsw2Kb9Ntvv9kDDzzgrHSIQ9rUu3fvGvWGhQhlYjnDqhZYub755ptabU00GMECl3L4GTx4sO25555uEQyDpk2bOkGBRW2zzTZzAoMFc//+/W2TTTZxz/Fvt9xyiwuUwyIdC/J+++1XXSXiHGskmwxYUxHaiF2EBlyxsmOFCoRRMgGcqr/pjgnikLELhACCtU2bNq4PWLlpJ4t+vAb22GOP6r6ts846NnHiRCcmGYPAKvfnn3+6f8eahtUufIVMMgFM/Qg1xBYWZFghhpmDCMgTTzzRxo0b5zYPsFbHirpALDKn2XxhXLj+hn9/7733nOUQyz1WukmTJtXaXEn20mYqgLFcEqAJaz9eBGzU0C42bbDCYrnlPcTCHU4+Apj+tm3b1m688Ubbaqut3DykvVjfmbs77rhjDUFJ+Qhv8vB7LOqIXcaX+hBwxx13nH3//ffV8zKqAE5nbtBu2vDWW2+5McYyzaYMVmkSG0iIfeYQ1u4gpSOAH374YTcv4X/WWWfZNddcU8vjJNk1SDoDnLf/xakiERCBiAQkgCMC0+MiIAKlRyBTAUyPEaqBW3FAAKseC2MWnZdddplziQwSQgVhwyJ6+PDhzooUm1jMtmvXzt5//3274YYb7PTTT/eGi6UTCzAiDCteOIWFCOIZd13EZDopWOCSn0V/rKU6KLNXr15OsOOiivUxXqKPZ555phNlbAAECUGP8GLBjJs2YiScEIvUi8gkJRPAyfqbyZiwIYEgC6y3eAKkSgj/VVdd1T3GHEFw+qRkAhiX5b59+7qNBVzjw26ulE0f2XigDDYqEEPhFIgSBBNu4LinhxObEOQnvfnmm8513TdlKoDZSJk/f76br8lc5WPb4yOA2fyBF5tX4cQGVuBZMHXq1Bru67zTbDRhIYcLgjWcsMRuuOGGziJLiiKA050bwQYOfWZsw5stycYpqgDGZf+///2vKxLvD97beEkC2Pft0HMiIALFREACuJhGQ20RARHICYFMBTAiADEQL2HVxe0VyzAWwCAFC06EGwvvRAmrIAtNrHic+fVNCAUEAwkLFdbJIIWFyGOPPeasyOmmYIEbT0wFZSJQsbDxJ1bIQEDF1skZ5uC8c1VVVbU4xF0T6x6WyESu2YhrRDYpmQBO1t9MxgQX7fXXX98JT4RSIGyTcWWMsEhjtWSTA8umT0omgCkDazhu7bgxx0tY6fFOwCqMxwBnXYMUiEU2axB48RKbOoi52267zU466SSfJrtnMhXAq6++upvLWMXxIvBNPgJ46NChzhsjNrEJxaYGVs4XX3zRnXUNEhs1n3zyicVzuw6ewY380ksvdX+NIoDTnRt8i9ggSPY+xuPmK4B5t/BMQfQy18nHplaiJAHsO0v1nAiIQDERkAAuptFQW0RABHJCIFMBjPUDoRovcT6Yc624b3KmL0i4R+IyifUoLEBiy2AhjCszlqTPP/+8xq+x5t1+++3O0oOLNNZk3IVjE5ZZ3DqDFBYiUSyP8foXLHBxp4x3dpc8uGMSrIqUShgG5wJxzw3ubOVMIO7Uyc5S444buBwnE8DJ+pvJmOC2jrUVKzTuwQhDrPobb7xxUus6rs/MCyyuuCcjXNgUCZ+JjOWeSAAj0oLzq1gC2XyJl/AICNzxYz0XArHIhgNnk+MlxpIxjfVqSPVyZiqAjz/+eEOosmnAf2OZJeBVsNGTqH4fAYyQZaziJY4gEGQOT4TDDz/cPRJmzeYLbsbxEnyDO5ujCGDKijo3EOuw4BvAd+GEE05INSTVv/cRwNttt53zaIEDY/Dkk0+6YF/JkgSw9xDoQREQgSIiIAFcRIOhpoiACOSGQKYCODZIUbiVia4QQehgUfJNsZFRsTiysA4CSlEOi1+sVUHQq0BMIjywngYpLERYNKfr/kx5wQIXMR9YYGP7hNU1CATk29+wiGWTAHfyZIt6fs9zpGQCOFl/Mx0TrNvdunVzlr4gMSYIByyWWApjxRpnRBFy5A0S4hdhh+UbppyjDqdEAhireeBGncitnnKwxAeuvgRJO+SQQ6qL9zmXGY5+Hg7OlWpsMxXAbPDAkfENEnOXs+WMHaKYc8+xyUcAJxOn8UScL2vOSwdn66MK4Khzg/c98PTAWwSvEd/kI4DDZfl6jkgA+46AnhMBESgmAhLAxTQaaosIiEBOCBRCALM45doUxAciJGoKXB1ZYBJ8hutywkIJi2RwDjXVtUBR6w4/n2yBGzxH/3DJJWHRDoSqb72BAB4yZIgTOfGSrwAOogXHKyPTMaFMLINY5BlbXFGJyBzUiSWbiN6xlkZcoLECsyGCZRUxjFAn4TrOeW7GN0iVKoCD/nPcgLO5sCIwVxBBG1GP5TuYa8HzuRbAjHWiiNiZCGDaH2VuhM8N50IAM29hibWcucx3JfC6SPQuSwD7fuX0nAiIQDERkAAuptFQW0RABHJCoBACOKiTIFdcpRIlccaUAFok8lJGbMJlM7hvttACOGz5w0WYs7JRUuACnczS7usCnUwAZzImifrDuWYELFGvOW+b6sw35eDajsDDpRwrIG7j/Bm4Rfu4QCezyPu4QMfOmXD/0rUAI1yDAGaJNkK4v5gre0jJ2hC0B2s2dwIHV5GxWQKfsKt9LgRw2AU69mqrMKtMXKDjzalkcyPXLtB4kXD+muMcBKnD2k7/1ltvvYSvswRwlC+dnhUBESgWAhLAxTISaocIiEDOCBRCAHOWEWsmgWS4wsU3AjAQsCwG0XcRAFx3Epu4kza4OqfQAphrgLBOIxqwVgfRY30HNJtBsJIJ4EzGJFVfEKScMSYRFbhZs2apshh3rAZnLLF0chUUKdMgWLiSc0Y5WRCsXAhgrOFBVGpc+GOvBaNviNkgIrqPAA4ghkU9Gw7hO45zIYCpN5dBsFJNjkRzIzifnasgWGxmsZHDvCR4H98txinRplYyAcz8432MF0E/Vf/1exEQARHIJQEJ4FzSVdkiIAJFQaAQApjzjK1bt3aBq7p37+4i9gYL9VgouEESCCuwjIWFRDhYVJAPKxHRgIPrjwotgGkXQYI4Z0iUZyIeBxbseBOABXbYnfv+++9397HC54033qh19Q4usFhWCQRGSre/mYwJbYi3ERH0j6ufevTo4f5K/3BtZkMgWbCrcPAwxEZwxVQyATxw4EA799xzE16D9Mcff7go3JxH3WuvvZylOZxyeQaY4EwEfMP6y53PXNcUTsxzzrUHkb7D44h1E8EUnG+PnTdhjweCM3EWO0i5EsBEdyYwG1ZnroyKdQfG+k/wuhkzZrimRDkDnO7cwBpN8LNcX4PEu4LbNwH2OHeMiKWvsSmZAOZ7hsU/dryK4n8KaoQIiEBFE5AArujhV+dFoDIIFEIAQzZspeV6FVx8CX7EIh8xwPlBzoViPeRamkBA8TvEM26x//nPf1w5gXUQl+hTTz3VWZVZgGciCH1G3+cMMOVwfQ2RqInCzHU2V111le23337WuHFjVw0iYcyYMS7C7Lx589wZ2iAhBhD0CH/upb3jjjuceCMAEozoL6J65syZGfc33TEhH+1CqGMdI1ouibPYWOu4YoeAZdxfiwWfhNDr3bu32xzg/DFWtMAqxjgSFZr7ZXFlR/QGwcqSCWA2P7BMIrbIR5uwqFIuZVEm9SPW2Tzh2XDKpQCmHu5zZowZd+Y1c4BNAMaR63Vwk2aDIHbe0mfEMaywbnIeNTjjzpnUPn36OJ4EgeO9CG+g5EoAM98QfQSf4g5g+tOhQwcnPrHY4+FBu4N5GUUApzs32CjgPnI4IswvueQSxyy4Xoz3j+vYCOLFndFB8gmCFXsNGeKVeTtu3Dj3Xr7yyiu17p1O9n0IrNVY6++7776U0bx9vkd6RgREQASyQUACOBsUVYYIiEBREyiUAAYK7qgs3hF5JIQJV4xg8Q1faRS+goXnCLSElSsIlhREF0Y8IgKeeeYZd1YvVkgEwotFMimZS7DPoPkKYMrCQovgwf2VhCjDCoT1FDfpIMVeGcW/c3aYNrNwDzixwGcRDjPcXoNre2LPRftGHw7qT2dMAgERlBGMI+KHDQsSwh+REEQFDreL3+MOv/zyy7s+BePK3xnr4OwszyUTwPweayTCBKsoCU6ITOZUwI75FO/+51wLYDYBtt12W7cREvSZ4FW0DVGMRZozxrHzNtxnfsdmANZkLNrBu0MfsbTH9itXAph2IDTZvKIdJN5D5jV/Z27jVn/QQQe538Xex53s/Up3blAmLvZEy8ZbgkT/YcWcCtrJsYKnn366ugnpCGAys+HCXGNTBZHN/A7f853s+8AcZEMkmAeIaDY12LhJdK96Mmb6nQiIgAhki4AEcLZIqhwREIGiJVBIAQwUFve33nqriwSMlQgxiPDBpRKLIdfkEAU41v0Toccdw7jKInxxRcRKhgss1sREC/+ogjDZwEURwJSD2MVaSjAdAulg7UO4IA5x8cV6ioDBRTg2YSXm7lnuqEVA8QxWKYJFcU1UYPVDaAcikzLS6W/UMaEfRHjGbRd3ZcQO/8ZmBGOBOMdSHbix0y7GGQs/ecaPH+/6hHhBPGNRxMWUzRHYhFMqAcyziOgbb7zRiRxc4dlMQVjAlzPYiaL35loA0zZE8MUXX2xEKiZyMXcgs+lx/vnnu37HawPt52onWDHvKYO8CCbmIJsjsIp3rjiXApj+8M7iDo3XAuOHkGPsCMyFqzDeC6QoEdDTnRvBPGHT5eGHH3YbAoF3BO8LAeWYAwjPtm3bZiyAKQBRvcceezjBzdl2vmOBu36q7wMimOjueCcgpml37JVvRfs/DjVMBESgbAlIAJft0KpjIiACIlA+BFh0IzqwdmJNxJqqJAKFJhAEVsMlfuLEiYVujuoXAREQARHwICAB7AFJj4iACIiACBSOAG7cWLVwv8QShSVWSQQKTYAI7ZzN//zzz+3kk092Xh5KIiACIiACxU9AArj4x0gtFAEREIGyJ4DrK+eaCQRG4C/OjSJ8cTcmeBiiF1dXnsMtWkkE8kHgkUcecWeuieTOfbi483PWljOxRLnGXRuvhI8//jjpfbn5aKvqEAEREAER8CMgAezHSU+JgAiIgAjkkABnWcNX23CekTOVWNlIiN9rr73WzjzzzBy2QkWLQE0CnLM+44wzqucg8zI2MBdn3hHISiIgAiIgAqVBQAK4NMZJrRQBERCBsiZA9GeumcHNedKkSe7aJCzABIgiQjIBprhmSUkE8kmAAGPcvUugNa4eIwgWgbkINkVgrtNPP12W33wOiOoSAREQgSwQkADOAkQVIQIiIAIiIAIiIAIiIAIiIAIiUPwEJICLf4zUQhEQAREQAREQAREQAREQAREQgSwQkADOAkQVIQIiIAIiIAIiIAIiIAIiIAIiUPwEJICLf4zUQhEQAREQAREQAREQAREQAREQgSwQkADOAkQVIQIiIAIiIAIiIAIiIAIiIAIiUPwEJICLf4zUQhEQAREQAREQAREQAREQAREQgSwQkADOAsRiLaJ58+Y2d+5ca9myZbE2Ue0SAREQAREQAREQAREQgYoh8P3339uyyy5rXP+nVBgCEsCF4Z6XWhs3bmwLFy60Nm3a5KU+VSICIiACIiACIiACIiACIpCYwMSJE61+/fo2Z84cYSoQAQngAoHPR7X/+c9/XDUTJkzIR3WqQwREQAREQAREQAREQAREIAkBrc8LPz0kgAs/BjlrgV6wnKFVwSIgAiIgAiIgAiIgAiIQmYDW55GRZT2DBHDWkRZPgXrBimcs1BIREAEREAEREAEREAER0Pq88HNAArjwY5CzFugFyxlaFSwCIiACIiACIiACIiACkQlofR4ZWdYzSABnHWnxFKgXrHjGQi0RAREQAREQAREQAREQAa3PCz8HJIALPwY5a4FesJyhVcEiIAIiIAIiIAIiIAIiEJmA1ueRkWU9gwRw1pEWT4F6wYpnLNQSERABERABERABERABEdD6vPBzQAK48GOQsxboBcsZWhUsAiIgAiIgAiIgAiIgApEJaH0eGVnWM0gAZx1p8RSYyQu2ZMkS40dJBERABETgHwJ16tRxP0oiIAIiIAIikC6BTNbn6dapfDUJSACX8YyI8oIhdufMmWOzZ8+2efPm2eLFi8uYjLomAiIgAukRaNCggTVu3NiaNWtm9erVS68Q5RIBERABEahYAlHW5xULKccdlwDOMeBCFu/7gv39999WVVVls2bNKmRzVbcIiIAIlAyBhg0bWsuWLSWCS2bE1FAREAERKA4Cvuvz4mhtebZCArg8x9X1yvcFmzlzphPApKZNmzrrxtJLLy1XvzKeG+qaCIhAdAJsFs6dO9emT5/uvGSwAq+yyirRC1IOERABERCBiiXguz6vWEB56LgEcB4gF6oK3xds0qRJ9tdff7mFHAs6JREQAREQgcQE8JaZNm2a4Q7dpk0boRIBERABERABbwK+63PvAvVgZAISwJGRlU4GnxeMs79ffvml69Q666xj9evXL50OqqUiIAIiUAACixYtsm+++cbVvMEGG8hbpgBjoCpFQAREoFQJ+KzPS7VvpdJuCeBSGak02unzguHS99VXX7nS119/fatbt24aNSmLCIiACFQOAX03K2es1VMREAERyDYBn/V5tutUeTUJSAAXcEZ06tTJRo8enbAFL730knXp0iXtFvq8YFrIpY1XGUVABCqUgL6bFTrw6rYIiIAIZIGAz/o8C9WoiCQEJIALOD0CAXzAAQfYcsstV6slZ511lm288cZpt9DnBdNCLm28yigCIlChBPTdrNCBV7dFQAREIAsEfNbnWahGRUgAF+ccCATwd999Z2uttVbWG+nzgmkhl3XsKlAE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s8+MBfLbb7/tBEDjxo3dWUSsS+eee65z1QynL774wi24ccFEWDRp0sRZpThLyQI9sKxFdYHmPCXunZR/9dVX2znnnOOqjT0DzFnInux+xkm+51iDMhAEhx12mLOOcVZ5xowZ7uwkLqXJXKBxmz3vvPPc2WSsfptttpn7O+c+E50BxlWW86LPPPOMcRYVi/ZJJ51kJ598stWtWzehO/c777zjeL/55pv266+/OhHFmVHajHU905TIMhtmdMQRRzgB9eqrr7qzpLj4Xnfddc7tl/4PHDjQnXlGDCI0zzjjDDvllFNqNC1cz7PPPutYwBrmnEE+/vjjDUEHi2yne+65x4455hjbZZddDItqbOrVq5fdfffdxnOMe6rEvLnkkkuMfHeykIlJ1AOr8Pl3/nvnnXd24477dGziDHCslZbzwiuuuKIh0qdOnerYhtMbb7xhHTp0SHl+WwI41Yjq9yIgAiKQYwK4NffpY0Z8kIULa1XGud/fm6xgP261qbV9caTVbdAgxw3KffE+6/Pct6Kya5AALuPx93nBJIDjT4D333/fcOXkTOEmm2xiG2ywgXM35hwjwXZiA1g99thjhhhiQb7hhhu6PFi0EIQs0BF2gStmFAH89ddfO/GLCL799tvt2GOPrW5wrABGCCI6CLC17LLL2oEHHlj9LO3v27dvytkeiLvu3bvbiy++6NxLt9lmG9d+XFr33HPPhAIYCx0i948//nBnP/n55ptvnFUPQUugotggWIhfghXx3Oqrr+6YUxcWYwQwLrTxzjNT1mmnneb6gysrgverr75ylkLOjCLAGYdMUioBfOSRR9rzzz/vrKaMN/Pi008/dfXTjhNPPNH1AyYINuYMIvmOO+6w4447rrppQT0Eb1q4cKHhposg5Fk2U8ibq+BhwRnas88+24n12HTrrbfaqaee6oQ77sipEhskbGSQj/GLTdTDpgXjynwi3Xjjja78gw46yP73v//VyoOb8l577eU2ktgYIAVneWGNNTk2EewKSzMiGQt2oiQBnGpE9XsREAERyCEBxG/Xrv9YfVOkv7fZxupi9W3UKNWjRf97n/V50XeixBsoAVziA5is+T4vmJcAJirxn7NKi1TDJmZ1vGIFxu0XguO+++6L60L55ZdfOutuYAFGvCGAsPghPrGcBolgPKNGjXKWqMAd1FcAIxyxaM6ePdseeugh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PGLff/+9NW3a1Lp06WKXXnqptWjRolaeqVOn2nPPPWfjx4+3d955x7766iv37sS+V5Eb75FB300PSHpEBESgfAm0b282blxm/dttN7ORIzMro0Rz+6zPS7RrJdNsCeCSGaroDfV5wbSQi8410xy5FsB16tSxVq1aGcIqF0kCOLtUCy2Af/nlF2vfvr19++23tvbaa9tWW21lEyZMcD/rrbeejR071olR30Q5lEe5G220kbVt29bee+89mzRpkm2//fb2yiuv2NJLL12juD///NNtkIwbN85WW20123HHHd38RdyuvPLK7t9pWzjdxdqN3gAAIABJREFUeOONdsYZZ9RqlgSw70jpOREQARFIk0A2LMDt2pmNHZtmA0o7m8/6vLR7WPytlwAu/jFKu4U+L5gEcNp40874008/2axZs5xVbJlllqkuJ6oFGCvZvHnzrE2bNlafYBL/plwL4ETtTwZEFuDEdAotgHv06GEPPvig7b///vboo4/aUkst5Rrbu3dvu/nmmyNb7XfYYQd76623XP5Bgwa5shYtWmQHH3ywPfXUU3bhhRc6y3I4DRgwwC6//HInnEeOHGnLLbec+/X1119vZ511Vlwr/LPPPuusvVtvvbX7OfXUU11eCeC0P03KKAIiIAJ+BLJxBlgWYLfRrFQYAhLAheGel1olgPOCOWuVRBXAiSrOtQBOp8MSwMUpgNnMWGONNZzoZUNl1VVXrW7oX3/9ZWuuuaZzYZ42bZqtssoqKYcei+22227rnqW8sKV3+vTprjzE7c8//1wttBcsWOCeZ1Pogw8+sM0337xGPZtuuql98sknzoq85ZZbJmwD7tK4XEsApxwmPSACIiACmRHIRhToCr0CCfA+6/PMBki5UxGQAE5FqIR/7/OCyQKceIA/++wzu+qqq+ztt992AqBx48buLCJnb88991znqhlOX3zxhV177bXOxRNh0aRJE1t33XXdWcrTTz+9esEf1QWa85SdO3c2yr/66qvtnHPOcdXGngHmbG3Pnj3jdsj3HGtQBla6ww47zC644AInKGbMmGFPPvmk7bfffpbMBZrdzPPOO8+dTcbqt9lmm7m/c+4z0RlgXGU5L/rMM88YZ1GxaJ900kl28sknW926dRO6c3PuE95vvvmm/frrr05EIYJoM9b1TFMiy2yY0RFHHOHOtb766quGkMPF97rr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PuvznFSsQqsJyAJcxpPB5wXTQi7/EyDXArhOnTrWqlUrQ1jlIkkAZ5dqoQXwL7/8Yu3bt7dvv/3W1l57bdtqq61swoQJ7me99dazsWPHWtOmTb07TTmUR7kbbbSRtW3b1t577z2bNGmSbb/99vbKK6/Y0ksvXaO8/fbbz5555pladUgAe2PXgyIgAiJQk0Amd/7Wr2/Ws6cCXuVoTvmsz3NUtYr9l4AEcBlPBZ8XTAI4/xPgp59+slmzZjmr2DLLLFPdgKgW4O+//97mzZtnbdq0sfr8zyp4qXMsgBO1PxlJWYAT0ym0AO7Ro4c9+OCDtv/++9ujjz5qSy21lGts79697eabb45std9hhx3srbfecvkHES3UzBYtWmQHH3ywPfXUU3bhhRc6y3I4XX311TZ37lzbeuut3Q/vwl9//SULcP4/T6pRBESgXAike+fvOuuYvfmm2aqrlguJouuHz/q86BpdZg2SAC6zAQ13x+cFkwAungkQVQAnanmuLcDpEJMALk4BzGbGGmus4UQvGyqrhhY8CNA111zTuTBPmzbNVllllZRDj/vytttu656lvLCld/r06a685ZZbzn7++edqoR2vUNykJYBT4tYDIiACIpCYQLp3/rZrZzZ2rMjmkIDP+jyH1atoM5MALuNp4POCSQAnngCfffaZXXXVVfb22287AdC4cWNr0aKFO7d77rnn2mqrrVYj8xdffGHXXnutc/FEWDRp0sTWXXddd5by9NNPr17wR3WB5jxl586djfKxlJ1zzjmu3tgzwJyt7YnLUpzke441KAMr3WGHHWYXXHCBO6s8Y8YMe/LJJw1X1WQu0LjNnnfeee5sMla/zTbbzP0dQZPoDDCuspwXxQWWs6hYtE866SQ7+eSTrW7dugndud955x3H+80337Rff/3Via4uXbq4NmNdzzQlssyGGR1xxBHuXOurr75qCxYscC6+1113nXP7pf8DBw50Z54RgwjNM844w0455ZQaTQvX8+yzzzoWsIY5Z5CPP/5469Onj2OR7XTPPffYMcccY7vssou9/PLLtYrv1auX3X333cZzjHuqxLy55JJLjHx33nlnrcepB1ax599jH5QATkVavxcBERCBFATStQDvtpvZyJHCm0MCPuvzHFavoiWAy3sO+LxgEsDx5wBBeXDl/PPPP22TTTaxDTbYwLkbc47x888/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gK2z/+Fl1tPK7Y7P+rxy6eSn5xLA+eFckFp8XjAt5PI/ND/99JPNmjXLWrZsacuEXJmiWoC///57mzdvnrVp08bqE+zi35RrAZyo/clIygKcmE6hBfA555xjTZo0sa233trWWGMN47uRSgDfeeeddtxxx9m6665rb7zxhq36792STzzxhBPG66yzjn3xxRe21FJL5f8Fy0ON+m7mAbKqEIEKJDDnj9/tgVO2t07vIHv/Sb9162DbX6krjMppOvisz8upv8XYFwngYhyVLLXJ5wXTQi5LsLNQTFQBnKjKXAvgdLoqAVy8AjjcsqqqKltttdVSCuC2bds6gYsFeL/99qvRuX333deeffZZe/zxx+2AAw5IZ7oUfR59N4t+iNRAESg5Ahx/uuHc9tb12VnVba/aYCXr9ORoq1O3bsn1Rw1OTMBnfS5+uSUgAZxbvgUt3ecF00Iu8RB99tlndtVVV9nbb79t06ZNs8aNG1uLFi3cud1zzz3XCYVwQhBce+219sorrxhWUqxqWMi6detmp59+erU1LKoL9A8//GCdO3d2guPqq682LHak2DPAnK3tyZUHcZLvOdagjAsvvNAOO+wwu+CCC5w764wZM+zJJ590YieZC/SECRPsvPPOc2eTFy1aZLjX8veGDRsmPAOM6+z5559vzzzzjM2cOdNZtE866SQ7+eSTrW7dugnF2DvvvON4v/nmm/brr7/aKqusYl26dHFtxrqeaUpkmQ0zOuKII6xfv3726quv2oIFC2z77be36667zhCI9H/gwIHuzDPWeqyrZ5xxhp1yyik1mhauB+EIC1jDnDPIxx9/vPXp08exyHXyEcCcOV977bWdqzOeDGHvA9p3//3325FHHllS572jctV3MyoxPS8CIpCKwB03H2VbDh1vyyz458nfmtazbUeMtaWI6qxUVgR81udl1eEi7IwEcBEOSraa5POCaSEXn/b7779vO+ywg/3555+2ySab2AYbbODcjSdNmmSff/55rQBWjz32mCGG/vrrLxcAiDyIAwTh1KlTnbDjrCQpigD++uuvnfhFBN9+++127LHHVjc4VgAjBHFNJcDWsssu61xRg0T7+/btm3JqBeKue/fu9uKLL1qzZs3cWU7a37t3b9tzzz0Ttv+9995zIvePP/6wjTbayP1888039sEHHzhBe9ttt9USRYjf7bbbzj23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sYonZymA4ymaJugLl3WYIAgmd4HviMkDZAL3+I6YIAgmd4HviMkDZBL3+J6YJBAmdoPviImDY6BrFMAGwk1E0/yLJBGjrq3PfEe08UrE0nxHEjHq2vrMd0Qbr0QtzfckUSOvvt98R9SziqeSFMDxFE0T9IV/kZggCCZ3ge+IyQNkAvf4jpggCCZ3ge+IyQNkEvf4npgkECZ2g++IiYNjoGsUwAbCTUTT/IskEaOurc98R7TxSsTSfEcSMera+sx3RBuvRC3N9yRRI6++33xH1LOKp5IUwPEUTRP0hX+RmCAIJneB74jJA2QC9/iOmCAIJneB74jJA2QS9/iemCQQJnaD74iJg2OgaxTABsJNRNP8iyQRo66tz3xHtPFKxNJ8RxIx6tr6zHdEG69ELc33JFEjr77ffEfUs4qnkhTA8RRN9oUESIAESIAESIAESIAESIAESGBJAhTAfDlIgARIgARIgARIgARIgARIgAQSggAFcEKEmZ0kARIgARIgARIgARIgARIgARKgAOY7QAIkQAIkQAIkQAIkQAIkQAIkkBAEKIATIszsJAmQAAmQAAmQAAmQAAmQAAmQAAUw3wESIAESIAESIAESIAESIAESIIGEIEABnBBhZidJgARIgARIgARIgARIgARIgAQogPkOLEtgamoKzzzzDF544QW0trYiPz8fjz76KJ5++mlUVFRoojc0NISnnnoKP/vZz9Dd3Y3S0lI89thjyp/l5uZqssXC5iGgxzsyPDyMX/ziF3jxxRdx9uxZdHR0ICUlBevXr8cXvvAF/OEf/iGSkpLM02l6oomAHu9IsAYbGhqwadMmTE9P45FHHsGrr76qyS8W/v/bu9NQq6o3juOPpRKZSi/SlBRTVMogS7MszZwKhyga1BflkGI2WllmDomiooJZzhUOlTaYGoaS1guHHHBqziK0lKKQUlCyUTN+C87l/O+9Hs86LP/d55zvggsN65679mc9nL2evddQdQRSx8iBAwds6tSptn79evvxxx+tdu3a1rx5c7vjjjvsqaeeqjoXTkuiBFLGyQcffGDPP/+87dy503QPqlOnjrVp08YeeOCBMDah+BPYs2ePqV/Vp/rRWELl1KlTBV0M49aC2Fz8Egmwi276bxqpQWXnzp1DQtKgQQPr2LGjaVChL5WLLroo/PemTZvm1bhffvnF2rdvb/v27Qu/07ZtW/vyyy/DT4sWLWz79u0huab4EkgVI2PHjrXJkydbtWrVrHXr1iEmfv75Z9u6dav9+eef1qFDhzCQPf/8830B0dqQnKb6HinPqc/dtGlTGNyQAPsNttQx8t5779ldd91lSpauvvrqkPgePnzYPv/8c6tVq1a4D1H8CaSMEyW+jz/+eLjnaGzSqFEj+/7778NYRN8no0ePDvckii+B22+/3VavXl2h0YUkwIxbffV9bGtJgGPFSqh+JinRzeH999+3Cy64IFz9c889ZyNGjLBOnTrZxo0b8xK55557bNmyZeHp+1tvvWXVq1cPv/foo4/a7NmzbcCAAbZkyZK8PotKVUcgVYxoloGewD/00EPWuHHjsgvUG75u3bqF2QfPPPOMTZkypepcPC3JSyBVjJT/YwsXLrQhQ4bY0KFD7aWXXiIBzqs3qmallDHy9ddf21VXXRXe+Gq20fXXX1920f/884999NFH4QEsxZ9AqjjRw1UlvIoHvS3UWCZTNm/ebDfffLP99ddfZQ/s/UmVbounTZtmx48ft2uuuSb8NGnSJDxELyQBZtxa3HFEAlzc/Vvw1enLv169enb06NEwYNCAIrtceeWV9tlnn9nu3bvDlKFc5aeffrJLLrkkJL1KZOrXr19WXV9MuhEdOXIkTFPT36T4EEgZI7mu+I033gjToHUj++6773zg0MogcLZi5NChQ3bZZZeFREZvavQmmDfAPoMudYz07NnT9AZ47dq1pn+mFIdAyjhZs2aN3XrrrXbLLbfYunXrKgDddttt9u6774aH9X369CkOwBK9ivPOO6+gBJhxa/EHDAlw8fdxQVe4YcMG69KlizVr1qzS6WJaA/zss8/a+PHjwxreXGXx4sV23333nXaAOnjwYFu0aJGp3sCBAwtqL7/0/xdIGSO5Wr93715r1aqV1axZM9zIKH4EzlaM9OvXL0xz05TWH374gQTYT0hUaGnKGNEUVj0o08/+/fsdq9D08gIp40RvffWW90wJsPYU0IM1il+BQhNgxq1++zzflpMA5ytVYvUy62PuvvtuW758eYWr19P13r17h40iVq1alVPnsccesxdeeCFsPDJ9+vQKdefOnWsPP/xwWI+j6dUUHwIpYyTXFWee1mtq9MGDB33g0MogcDZiRJul9erVyyZOnGjjxo0LyzB4A+w34FLGyGuvvWb9+/c3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\" width=\"640\">"
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lambda = 0.0001\n",
|
||
"r2 for scikit: 0.999716\n",
|
||
"r2 for own code, not centered: 0.999716\n",
|
||
"r2 for own, centered: 0.963648\n",
|
||
"\n",
|
||
"lambda = 0.001\n",
|
||
"r2 for scikit: 0.999716\n",
|
||
"r2 for own code, not centered: 0.999716\n",
|
||
"r2 for own, centered: 0.963648\n",
|
||
"\n",
|
||
"lambda = 0.01\n",
|
||
"r2 for scikit: 0.999699\n",
|
||
"r2 for own code, not centered: 0.999699\n",
|
||
"r2 for own, centered: 0.963646\n",
|
||
"\n",
|
||
"lambda = 10\n",
|
||
"r2 for scikit: 0.875174\n",
|
||
"r2 for own code, not centered: 0.875174\n",
|
||
"r2 for own, centered: 0.695243\n",
|
||
"\n",
|
||
"lambda = 100\n",
|
||
"r2 for scikit: 0.265902\n",
|
||
"r2 for own code, not centered: 0.265902\n",
|
||
"r2 for own, centered: 0.15429\n",
|
||
"\n",
|
||
"lambda = 10000\n",
|
||
"r2 for scikit: -1.05663\n",
|
||
"r2 for own code, not centered: -1.05663\n",
|
||
"r2 for own, centered: 0.00175797\n",
|
||
"\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.linear_model import Ridge\n",
|
||
"from sklearn.metrics import r2_score\n",
|
||
"\n",
|
||
"np.random.seed(4155)\n",
|
||
"\n",
|
||
"n_samples = 100\n",
|
||
"\n",
|
||
"x = np.random.rand(n_samples,1)\n",
|
||
"y = 5*x*x + 0.1*np.random.rand(n_samples,1)\n",
|
||
"\n",
|
||
"# Centering x and y.\n",
|
||
"x_ = x - np.mean(x)\n",
|
||
"y_ = y - np.mean(y) # beta_0 = mean(y)\n",
|
||
"\n",
|
||
"X = np.c_[np.ones((n_samples,1)), x, x**2]\n",
|
||
"X_ = np.c_[x_, x_**2]\n",
|
||
"\n",
|
||
"\n",
|
||
"### 1.\n",
|
||
"lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]\n",
|
||
"num_values = len(lmb_values)\n",
|
||
"\n",
|
||
"## Ridge-regression of centered and not centered data\n",
|
||
"beta_ridge = np.zeros((3,num_values))\n",
|
||
"beta_ridge_centered = np.zeros((3,num_values))\n",
|
||
"\n",
|
||
"I3 = np.eye(3)\n",
|
||
"I2 = np.eye(2)\n",
|
||
"\n",
|
||
"for i,lmb in enumerate(lmb_values):\n",
|
||
" beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()\n",
|
||
" beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()\n",
|
||
"\n",
|
||
"# sett beta_0 = np.mean(y)\n",
|
||
"beta_ridge_centered[0,:] = np.mean(y)\n",
|
||
"\n",
|
||
"## OLS (ordinary least squares) solution \n",
|
||
"beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y\n",
|
||
"\n",
|
||
"## Evaluate the models\n",
|
||
"pred_ls = X @ beta_ls\n",
|
||
"pred_ridge = X @ beta_ridge\n",
|
||
"pred_ridge_centered = X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]\n",
|
||
"\n",
|
||
"## Plot the results\n",
|
||
"\n",
|
||
"# Sorting\n",
|
||
"sort_ind = np.argsort(x[:,0])\n",
|
||
"\n",
|
||
"x_plot = x[sort_ind,0]\n",
|
||
"x_centered_plot = x_[sort_ind,0]\n",
|
||
"\n",
|
||
"pred_ls_plot = pred_ls[sort_ind,0]\n",
|
||
"pred_ridge_plot = pred_ridge[sort_ind,:]\n",
|
||
"pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]\n",
|
||
"\n",
|
||
"# Plott not centered\n",
|
||
"plt.plot(x_plot,pred_ls_plot,label='ls')\n",
|
||
"\n",
|
||
"for i in range(num_values):\n",
|
||
" plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])\n",
|
||
"\n",
|
||
"plt.plot(x,y,'ro')\n",
|
||
"\n",
|
||
"plt.title('linear regression on un-centered data')\n",
|
||
"plt.legend()\n",
|
||
"\n",
|
||
"# Plott centered\n",
|
||
"plt.figure()\n",
|
||
"\n",
|
||
"for i in range(num_values):\n",
|
||
" plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])\n",
|
||
"\n",
|
||
"plt.plot(x_,y,'ro')\n",
|
||
"\n",
|
||
"plt.title('linear regression on centered data')\n",
|
||
"plt.legend()\n",
|
||
"\n",
|
||
"\n",
|
||
"# 2.\n",
|
||
"\n",
|
||
"pred_ridge_scikit = np.zeros((n_samples,num_values))\n",
|
||
"for i,lmb in enumerate(lmb_values):\n",
|
||
" pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X\n",
|
||
"\n",
|
||
"plt.figure()\n",
|
||
"\n",
|
||
"plt.plot(x_plot,pred_ls_plot,label='ls')\n",
|
||
"\n",
|
||
"for i in range(num_values):\n",
|
||
" plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])\n",
|
||
"\n",
|
||
"plt.plot(x,y,'ro')\n",
|
||
"plt.legend()\n",
|
||
"plt.title('linear regression using scikit')\n",
|
||
"\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"### R2-score of the results\n",
|
||
"for i in range(num_values):\n",
|
||
" print('lambda = %g'%lmb_values[i])\n",
|
||
" print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))\n",
|
||
" print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))\n",
|
||
" print('r2 for own, centered: %g\\n'%r2_score(y,pred_ridge_centered[:,i]))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Resampling methods\n",
|
||
"Resampling methods are an indispensable tool in modern\n",
|
||
"statistics. They involve repeatedly drawing samples from a training\n",
|
||
"set and refitting a model of interest on each sample in order to\n",
|
||
"obtain additional information about the fitted model. For example, in\n",
|
||
"order to estimate the variability of a linear regression fit, we can\n",
|
||
"repeatedly draw different samples from the training data, fit a linear\n",
|
||
"regression to each new sample, and then examine the extent to which\n",
|
||
"the resulting fits differ. Such an approach may allow us to obtain\n",
|
||
"information that would not be available from fitting the model only\n",
|
||
"once using the original training sample.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Resampling approaches can be computationally expensive\n",
|
||
"Resampling approaches can be computationally expensive, because they\n",
|
||
"involve fitting the same statistical method multiple times using\n",
|
||
"different subsets of the training data. However, due to recent\n",
|
||
"advances in computing power, the computational requirements of\n",
|
||
"resampling methods generally are not prohibitive. In this chapter, we\n",
|
||
"discuss two of the most commonly used resampling methods,\n",
|
||
"cross-validation and the bootstrap. Both methods are important tools\n",
|
||
"in the practical application of many statistical learning\n",
|
||
"procedures. For example, cross-validation can be used to estimate the\n",
|
||
"test error associated with a given statistical learning method in\n",
|
||
"order to evaluate its performance, or to select the appropriate level\n",
|
||
"of flexibility. The process of evaluating a model’s performance is\n",
|
||
"known as model assessment, whereas the process of selecting the proper\n",
|
||
"level of flexibility for a model is known as model selection. The\n",
|
||
"bootstrap is widely used.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Log-likelihood\n",
|
||
"\n",
|
||
"A popular strategy is to choose a penalty parameter that yields a good\n",
|
||
"but parsimonious model. Information criteria measure the balance\n",
|
||
"between model fit and model complexity. One possibility is Aikaike's\n",
|
||
"information criterion (AIC).\n",
|
||
"The AIC measures model fit by the log-likelihood\n",
|
||
"and model complexity is measured by the number of parameters used by\n",
|
||
"the model. The number of model parameters in regular regression simply\n",
|
||
"corresponds to the number of covariates in the model. Or, by the\n",
|
||
"degrees of freedom consumed by the model, which is equivalent to the\n",
|
||
"trace of the hat matrix. For ridge regression it thus seems natural to\n",
|
||
"define model complexity analogously by the trace of the ridge hat\n",
|
||
"matrix. This yields the AIC for the linear regression model with ridge\n",
|
||
"estimates:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"\\mbox{AIC}(\\lambda) & = 2 \\, p - 2 \\log(\\hat{L})\n",
|
||
"\\\\\n",
|
||
"& = 2 \\, \\mbox{tr} [\\mathbf{H}(\\lambda)] - 2 \\log\\{L[\\hat{\\beta}(\\lambda), \\hat{\\sigma}^2(\\lambda)]\\}\n",
|
||
"\\\\\n",
|
||
"& = 2 \\, \\sum_{j=1}^p \\frac{d_{jj}^2}{d_{jj}^2 + \\lambda}\n",
|
||
"+ 2 n \\, \\log[\\sqrt{2 \\, \\pi} \\, \\hat{\\sigma}(\\lambda)] + \\frac{1}{\\hat{\\sigma}^2(\\lambda)} \\sum_{i=1}^n [y_i - \\mathbf{X}_{i, \\ast} \\, \\hat{\\beta}(\\lambda)]^2.\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The value of $\\lambda$ which minimizes $\\mbox{AIC}(\\lambda)$ corresponds to the `optimal' balance of model complexity and overfitting.\n",
|
||
"\n",
|
||
"\n",
|
||
"<!-- !split -->\n",
|
||
"## Cross-validation\n",
|
||
"\n",
|
||
"Instead of choosing the penalty parameter to balance model fit with\n",
|
||
"model complexity, cross-validation requires it (i.e. the penalty\n",
|
||
"parameter) to yield a model with good prediction\n",
|
||
"performance. Commonly, this performance is evaluated on novel\n",
|
||
"data. Novel data need not be easy to come by and one has to make do\n",
|
||
"with the data at hand. The setting of `original' and novel data is\n",
|
||
"then mimicked by sample splitting: the data set is divided into two\n",
|
||
"(groups of samples). One of these two data sets, called the *training\n",
|
||
"set*, plays the role of `original' data on which the model is\n",
|
||
"built. The second of these data sets, called the *test set*, plays the\n",
|
||
"role of the `novel' data and is used to evaluate the prediction\n",
|
||
"performance (often operationalized as the log-likelihood or the\n",
|
||
"prediction error or its square or the R2 score) of the model built on the training data set. This\n",
|
||
"procedure (model building and prediction evaluation on training and\n",
|
||
"test set, respectively) is done for a collection of possible penalty\n",
|
||
"parameter choices. The penalty parameter that yields the model with\n",
|
||
"the best prediction performance is to be preferred. The thus obtained\n",
|
||
"performance evaluation depends on the actual split of the data set. To\n",
|
||
"remove this dependence the data set is split many times into a\n",
|
||
"training and test set. For each split the model parameters are\n",
|
||
"estimated for all choices of $\\lambda$ using the training data and\n",
|
||
"estimated parameters are evaluated on the corresponding test set. The\n",
|
||
"penalty parameter that on average over the test sets performs best (in\n",
|
||
"some sense) is then selected.\n",
|
||
"\n",
|
||
"\n",
|
||
"## Computationally expensive\n",
|
||
"\n",
|
||
"The validation set approach is conceptually simple and is easy to implement. But it has two potential drawbacks:\n",
|
||
"\n",
|
||
"* The validation estimate of the test error rate can be highly variable, depending on precisely which observations are included in the training set and which observations are included in the validation set.\n",
|
||
"\n",
|
||
"* In the validation approach, only a subset of the observations, those that are included in the training set rather than in the validation set are used to fit the model. Since statistical methods tend to perform worse when trained on fewer observations, this suggests that the validation set error rate may tend to overestimate the test error rate for the model fit on the entire data set.\n",
|
||
"\n",
|
||
"<!-- !split -->\n",
|
||
"## Various steps in cross-validation\n",
|
||
"\n",
|
||
"When the repetitive splitting of the data set is done randomly,\n",
|
||
"samples may accidently end up in a fast majority of the splits in\n",
|
||
"either training or test set. Such samples may have an unbalanced\n",
|
||
"influence on either model building or prediction evaluation. To avoid\n",
|
||
"this $k$-fold cross-validation structures the data splitting. The\n",
|
||
"samples are divided into $k$ more or less equally sized exhaustive and\n",
|
||
"mutually exclusive subsets. In turn (at each split) one of these\n",
|
||
"subsets plays the role of the test set while the union of the\n",
|
||
"remaining subsets constitutes the training set. Such a splitting\n",
|
||
"warrants a balanced representation of each sample in both training and\n",
|
||
"test set over the splits. Still the division into the $k$ subsets\n",
|
||
"involves a degree of randomness. This may be fully excluded when\n",
|
||
"choosing $k=n$. This particular case is referred to as leave-one-out\n",
|
||
"cross-validation (LOOCV). \n",
|
||
"\n",
|
||
"<!-- !split -->\n",
|
||
"## How to set up the cross-validation for Ridge and/or Lasso\n",
|
||
"\n",
|
||
"* Define a range of interest for the penalty parameter.\n",
|
||
"\n",
|
||
"* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n",
|
||
"\n",
|
||
"* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\hat{\\sigma}_{-i}^2(\\lambda)$, as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"\\hat{\\beta}_{-i}(\\lambda) & = ( \\hat{X}_{-i, \\ast}^{\\top}\n",
|
||
"\\hat{X}_{-i, \\ast} + \\lambda \\hat{I}_{pp})^{-1}\n",
|
||
"\\hat{X}_{-i, \\ast}^{\\top} \\hat{y}_{-i}\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\hat{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n",
|
||
"\n",
|
||
"* Repeat the first three steps such that each sample plays the role of the test set once.\n",
|
||
"\n",
|
||
"* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}.\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"* The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.\n",
|
||
"\n",
|
||
"## Predicted Residual Error Sum of Squares\n",
|
||
"Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS). \n",
|
||
"\n",
|
||
"We can define the optimal penalty parameter to minimize"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"\\lambda_{\\mbox{{\\tiny opt}}} = \\arg \\min_{\\lambda} \\frac{1}{n} \\sum_{i=1}^n [y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)]^2.\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The LOOCV prediction performance can be\n",
|
||
"expressed analytically in terms of the known quantities derived from\n",
|
||
"the design matrix and the parameters $\\beta$.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## Bootstrap\n",
|
||
"Bootstrapping is a nonparametric approach to statistical inference\n",
|
||
"that substitutes computation for more traditional distributional\n",
|
||
"assumptions and asymptotic results. Bootstrapping offers a number of\n",
|
||
"advantages: \n",
|
||
"1. The bootstrap is quite general, although there are some cases in which it fails. \n",
|
||
"\n",
|
||
"2. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small. \n",
|
||
"\n",
|
||
"3. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. \n",
|
||
"\n",
|
||
"4. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples)."
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.7.0"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|