mirror of
https://github.com/wassname/mammoviews.git
synced 2026-06-27 16:10:25 +08:00
4773 lines
510 KiB
Plaintext
4773 lines
510 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Applications/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
|
||
" return f(*args, **kwds)\n",
|
||
"/Applications/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
|
||
" return f(*args, **kwds)\n",
|
||
"/Applications/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
|
||
" return f(*args, **kwds)\n",
|
||
"/Applications/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
|
||
" return f(*args, **kwds)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import os\n",
|
||
"from functools import partial\n",
|
||
"from matplotlib import pyplot as plt\n",
|
||
"import seaborn as sns\n",
|
||
"%matplotlib inline"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from matplotlib.ticker import LogFormatter \n",
|
||
"from matplotlib.colors import LogNorm\n",
|
||
"from matplotlib import gridspec"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Applications/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
|
||
" return f(*args, **kwds)\n",
|
||
"/Applications/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
|
||
" return f(*args, **kwds)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.metrics import (auc, confusion_matrix, f1_score, accuracy_score, average_precision_score,\n",
|
||
" precision_score, roc_curve, precision_recall_curve, recall_score)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"tag = 'e5ce2d69b035975cb5336cec0da9a32a'\n",
|
||
"dfpred = pd.read_table(f'../tables/all_predictions_with_images-{tag}.tab')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"772423"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"len(dfpred)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"pred_cols = dfpred.columns.map(lambda x: x.startswith('score')).tolist()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"4189"
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"(~dfpred.view.isnull()).sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"eps = 0\n",
|
||
"dfpred[\"score_ViewModifier\"] = 1-( eps + (1-2*eps)*dfpred.ViewModifier.isnull().astype(float))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# dfpred"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.0 692365\n",
|
||
"1.0 80058\n",
|
||
"Name: score_ViewModifier, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred[\"score_ViewModifier\"].map(str).value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>score_gbm</th>\n",
|
||
" <th>score_xgb</th>\n",
|
||
" <th>score_rpart</th>\n",
|
||
" <th>score_gbmt</th>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <th>set</th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>view</th>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>score_image*glmnet</th>\n",
|
||
" <th>score_image*gbmt</th>\n",
|
||
" <th>score_max_image_wire</th>\n",
|
||
" <th>score_max_image_wire_max</th>\n",
|
||
" <th>score_max_image_wire+gbmt</th>\n",
|
||
" <th>score_max_image_wire_max+gbmt</th>\n",
|
||
" <th>score_max_wire_image+gbmt</th>\n",
|
||
" <th>score_max_wire_max_image+gbmt</th>\n",
|
||
" <th>score_max(image;wire_max;gbmt)</th>\n",
|
||
" <th>score_ViewModifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.002226</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.002226</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045573</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022786</td>\n",
|
||
" <td>0.022786</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045573</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.001841</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045569</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045569</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.001841</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1000047594_1.2.840.113654.2.70.1.1921731705635...</td>\n",
|
||
" <td>0.001402</td>\n",
|
||
" <td>0.003848</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022749</td>\n",
|
||
" <td>0.022749</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 28 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id score_gbm score_xgb \\\n",
|
||
"0 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.002226 \n",
|
||
"1 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.002226 \n",
|
||
"2 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.001841 \n",
|
||
"3 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.001841 \n",
|
||
"4 1000047594_1.2.840.113654.2.70.1.1921731705635... 0.001402 0.003848 \n",
|
||
"\n",
|
||
" score_rpart score_gbmt ViewModifier set label view score_image \\\n",
|
||
"0 0.006882 0.045568 NaN NaN NaN NaN NaN \n",
|
||
"1 0.006882 0.045573 NaN NaN NaN NaN NaN \n",
|
||
"2 0.006882 0.045569 NaN NaN NaN NaN NaN \n",
|
||
"3 0.006882 0.045568 NaN NaN NaN NaN NaN \n",
|
||
"4 0.006882 0.045498 NaN NaN NaN NaN NaN \n",
|
||
"\n",
|
||
" ... score_image*glmnet score_image*gbmt \\\n",
|
||
"0 ... NaN NaN \n",
|
||
"1 ... NaN NaN \n",
|
||
"2 ... NaN NaN \n",
|
||
"3 ... NaN NaN \n",
|
||
"4 ... NaN NaN \n",
|
||
"\n",
|
||
" score_max_image_wire score_max_image_wire_max score_max_image_wire+gbmt \\\n",
|
||
"0 0.0 0.0 0.022784 \n",
|
||
"1 0.0 0.0 0.022786 \n",
|
||
"2 0.0 0.0 0.022784 \n",
|
||
"3 0.0 0.0 0.022784 \n",
|
||
"4 0.0 0.0 0.022749 \n",
|
||
"\n",
|
||
" score_max_image_wire_max+gbmt score_max_wire_image+gbmt \\\n",
|
||
"0 0.022784 0.0 \n",
|
||
"1 0.022786 0.0 \n",
|
||
"2 0.022784 0.0 \n",
|
||
"3 0.022784 0.0 \n",
|
||
"4 0.022749 0.0 \n",
|
||
"\n",
|
||
" score_max_wire_max_image+gbmt score_max(image;wire_max;gbmt) \\\n",
|
||
"0 0.0 0.045568 \n",
|
||
"1 0.0 0.045573 \n",
|
||
"2 0.0 0.045569 \n",
|
||
"3 0.0 0.045568 \n",
|
||
"4 0.0 0.045498 \n",
|
||
"\n",
|
||
" score_ViewModifier \n",
|
||
"0 0.0 \n",
|
||
"1 0.0 \n",
|
||
"2 0.0 \n",
|
||
"3 0.0 \n",
|
||
"4 0.0 \n",
|
||
"\n",
|
||
"[5 rows x 28 columns]"
|
||
]
|
||
},
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"dfpredthr = dfpred.iloc[:,pred_cols] > 0.5\n",
|
||
"dfpredthr[\"label\"] = dfpred[\"label\"] == \"special\"\n",
|
||
"dfpredthr[\"set\"] = dfpred[\"set\"]\n",
|
||
"dfpredthr[\"view\"] = dfpred[\"view\"]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"def bool_to_sn(x):\n",
|
||
" return {True:\"special\", False:\"normal\"}[x]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# dfpred['score_image_glmnet']\n",
|
||
"# pd.crosstab(dfpred['label'][mask], \n",
|
||
"# vv[mask].map(lambda x: {True:\"special\", False:\"normal\"}[x])\n",
|
||
"# ))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {
|
||
"scrolled": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"==============================\n",
|
||
"score_gbm normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 42 396\n",
|
||
"==============================\n",
|
||
"score_xgb normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 47 391\n",
|
||
"==============================\n",
|
||
"score_rpart normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 49 389\n",
|
||
"==============================\n",
|
||
"score_gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 43 395\n",
|
||
"==============================\n",
|
||
"score_image normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 5 433\n",
|
||
"==============================\n",
|
||
"score_image_max normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 3 435\n",
|
||
"==============================\n",
|
||
"score_glmnet normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 43 395\n",
|
||
"==============================\n",
|
||
"score_wire normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 401 37\n",
|
||
"==============================\n",
|
||
"score_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 2307 3\n",
|
||
"special 401 37\n",
|
||
"==============================\n",
|
||
"score_image+glmnet normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 33 405\n",
|
||
"==============================\n",
|
||
"score_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 27 411\n",
|
||
"==============================\n",
|
||
"score_max(image;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 5 433\n",
|
||
"==============================\n",
|
||
"score_image*glmnet normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 43 395\n",
|
||
"==============================\n",
|
||
"score_image*gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 42 396\n",
|
||
"==============================\n",
|
||
"score_max_image_wire normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 0 438\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 2307 3\n",
|
||
"special 0 438\n",
|
||
"==============================\n",
|
||
"score_max_image_wire+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 3 435\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 2 436\n",
|
||
"==============================\n",
|
||
"score_max_wire_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 2 436\n",
|
||
"==============================\n",
|
||
"score_max_wire_max_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2307 3\n",
|
||
"special 2 436\n",
|
||
"==============================\n",
|
||
"score_max(image;wire_max;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 2306 4\n",
|
||
"special 0 438\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"for cc,vv in dfpredthr.items():\n",
|
||
" mask = dfpred['set'] == 'train'\n",
|
||
" if cc in (\"label\", \"view\", \"set\"):\n",
|
||
" continue\n",
|
||
" print('='*30)\n",
|
||
" print(pd.crosstab(dfpred['label'][mask], vv[mask].map(lambda x: {True:\"special\", False:\"normal\"}[x])))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# dfpredthr"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Applications/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:2: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
|
||
" from ipykernel import kernelapp as app\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>score_gbm</th>\n",
|
||
" <th>score_xgb</th>\n",
|
||
" <th>score_rpart</th>\n",
|
||
" <th>score_gbmt</th>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <th>set</th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>view</th>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>score_image*glmnet</th>\n",
|
||
" <th>score_image*gbmt</th>\n",
|
||
" <th>score_max_image_wire</th>\n",
|
||
" <th>score_max_image_wire_max</th>\n",
|
||
" <th>score_max_image_wire+gbmt</th>\n",
|
||
" <th>score_max_image_wire_max+gbmt</th>\n",
|
||
" <th>score_max_wire_image+gbmt</th>\n",
|
||
" <th>score_max_wire_max_image+gbmt</th>\n",
|
||
" <th>score_max(image;wire_max;gbmt)</th>\n",
|
||
" <th>score_ViewModifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>223816</th>\n",
|
||
" <td>1889161318_1.2.840.113654.2.70.1.1381752400528...</td>\n",
|
||
" <td>0.585668</td>\n",
|
||
" <td>0.873359</td>\n",
|
||
" <td>0.956522</td>\n",
|
||
" <td>0.806164</td>\n",
|
||
" <td>spot compression</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000013</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.002066</td>\n",
|
||
" <td>0.003259</td>\n",
|
||
" <td>0.000013</td>\n",
|
||
" <td>0.000013</td>\n",
|
||
" <td>0.403089</td>\n",
|
||
" <td>0.403089</td>\n",
|
||
" <td>0.403089</td>\n",
|
||
" <td>0.403089</td>\n",
|
||
" <td>0.806164</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>1 rows × 28 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id score_gbm \\\n",
|
||
"223816 1889161318_1.2.840.113654.2.70.1.1381752400528... 0.585668 \n",
|
||
"\n",
|
||
" score_xgb score_rpart score_gbmt ViewModifier set label \\\n",
|
||
"223816 0.873359 0.956522 0.806164 spot compression train normal \n",
|
||
"\n",
|
||
" view score_image ... score_image*glmnet \\\n",
|
||
"223816 N 0.000013 ... 0.002066 \n",
|
||
"\n",
|
||
" score_image*gbmt score_max_image_wire score_max_image_wire_max \\\n",
|
||
"223816 0.003259 0.000013 0.000013 \n",
|
||
"\n",
|
||
" score_max_image_wire+gbmt score_max_image_wire_max+gbmt \\\n",
|
||
"223816 0.403089 0.403089 \n",
|
||
"\n",
|
||
" score_max_wire_image+gbmt score_max_wire_max_image+gbmt \\\n",
|
||
"223816 0.403089 0.403089 \n",
|
||
"\n",
|
||
" score_max(image;wire_max;gbmt) score_ViewModifier \n",
|
||
"223816 0.806164 1.0 \n",
|
||
"\n",
|
||
"[1 rows x 28 columns]"
|
||
]
|
||
},
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred[((dfpredthr['label'] != dfpredthr['score_gbm']) & \n",
|
||
" (~dfpredthr['label']))][mask]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# dfpred[((dfpredthr['label'] != dfpredthr['score_gbm']) & \n",
|
||
"# (dfpredthr['label']))][mask]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"metadata": {
|
||
"scrolled": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"==============================\n",
|
||
"TEST\n",
|
||
"==============================\n",
|
||
"score_gbm normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 13 101\n",
|
||
"==============================\n",
|
||
"score_xgb normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 13 101\n",
|
||
"==============================\n",
|
||
"score_rpart normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 13 101\n",
|
||
"==============================\n",
|
||
"score_gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 13 101\n",
|
||
"==============================\n",
|
||
"score_image normal special\n",
|
||
"label \n",
|
||
"normal 610 2\n",
|
||
"special 7 107\n",
|
||
"==============================\n",
|
||
"score_image_max normal special\n",
|
||
"label \n",
|
||
"normal 609 3\n",
|
||
"special 7 107\n",
|
||
"==============================\n",
|
||
"score_glmnet normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 13 101\n",
|
||
"==============================\n",
|
||
"score_wire normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 104 10\n",
|
||
"==============================\n",
|
||
"score_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 103 11\n",
|
||
"==============================\n",
|
||
"score_image+glmnet normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 11 103\n",
|
||
"==============================\n",
|
||
"score_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 10 104\n",
|
||
"==============================\n",
|
||
"score_max(image;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 610 2\n",
|
||
"special 6 108\n",
|
||
"==============================\n",
|
||
"score_image*glmnet normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 14 100\n",
|
||
"==============================\n",
|
||
"score_image*gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 12 102\n",
|
||
"==============================\n",
|
||
"score_max_image_wire normal special\n",
|
||
"label \n",
|
||
"normal 610 2\n",
|
||
"special 1 113\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 610 2\n",
|
||
"special 1 113\n",
|
||
"==============================\n",
|
||
"score_max_image_wire+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 4 110\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 2 112\n",
|
||
"==============================\n",
|
||
"score_max_wire_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 2 112\n",
|
||
"==============================\n",
|
||
"score_max_wire_max_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 612 0\n",
|
||
"special 2 112\n",
|
||
"==============================\n",
|
||
"score_max(image;wire_max;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 610 2\n",
|
||
"special 0 114\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print('='*30)\n",
|
||
"print(\"TEST\")\n",
|
||
"for cc,vv in dfpredthr.items():\n",
|
||
" if cc in (\"label\", \"view\", \"set\"):\n",
|
||
" continue\n",
|
||
" mask = dfpred['set'] == 'test'\n",
|
||
" print('='*30)\n",
|
||
" print(pd.crosstab(dfpred['label'][mask], vv[mask].map(lambda x: {True:\"special\", False:\"normal\"}[x])))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {
|
||
"scrolled": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"==============================\n",
|
||
"VAL\n",
|
||
"==============================\n",
|
||
"score_gbm normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 13 98\n",
|
||
"==============================\n",
|
||
"score_xgb normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 14 97\n",
|
||
"==============================\n",
|
||
"score_rpart normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 14 97\n",
|
||
"==============================\n",
|
||
"score_gbmt normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 13 98\n",
|
||
"==============================\n",
|
||
"score_image normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 11 100\n",
|
||
"==============================\n",
|
||
"score_image_max normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 11 100\n",
|
||
"==============================\n",
|
||
"score_glmnet normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 13 98\n",
|
||
"==============================\n",
|
||
"score_wire normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 103 8\n",
|
||
"==============================\n",
|
||
"score_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 103 8\n",
|
||
"==============================\n",
|
||
"score_image+glmnet normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 11 100\n",
|
||
"==============================\n",
|
||
"score_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 11 100\n",
|
||
"==============================\n",
|
||
"score_max(image;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 10 101\n",
|
||
"==============================\n",
|
||
"score_image*glmnet normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 14 97\n",
|
||
"==============================\n",
|
||
"score_image*gbmt normal special\n",
|
||
"label \n",
|
||
"normal 604 0\n",
|
||
"special 14 97\n",
|
||
"==============================\n",
|
||
"score_max_image_wire normal special\n",
|
||
"label \n",
|
||
"normal 602 2\n",
|
||
"special 3 108\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 602 2\n",
|
||
"special 3 108\n",
|
||
"==============================\n",
|
||
"score_max_image_wire+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 603 1\n",
|
||
"special 3 108\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 602 2\n",
|
||
"special 3 108\n",
|
||
"==============================\n",
|
||
"score_max_wire_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 602 2\n",
|
||
"special 3 108\n",
|
||
"==============================\n",
|
||
"score_max_wire_max_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 602 2\n",
|
||
"special 3 108\n",
|
||
"==============================\n",
|
||
"score_max(image;wire_max;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 602 2\n",
|
||
"special 2 109\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print('='*30)\n",
|
||
"print(\"VAL\")\n",
|
||
"for cc,vv in dfpredthr.items():\n",
|
||
" if cc in (\"label\", \"view\", \"set\"):\n",
|
||
" continue\n",
|
||
" mask = dfpred['set'] == 'val'\n",
|
||
" print('='*30)\n",
|
||
" print(pd.crosstab(dfpred['label'][mask], vv[mask].map(lambda x: {True:\"special\", False:\"normal\"}[x])))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th>score_xgb</th>\n",
|
||
" <th>normal</th>\n",
|
||
" <th>special</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>normal</th>\n",
|
||
" <td>613</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>special</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>96</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"score_xgb normal special\n",
|
||
"score_image \n",
|
||
"normal 613 1\n",
|
||
"special 5 96"
|
||
]
|
||
},
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.crosstab(dfpredthr['score_image'][mask].map(bool_to_sn),\n",
|
||
" dfpredthr['score_xgb'][mask].map(bool_to_sn))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th>score_glmnet</th>\n",
|
||
" <th>normal</th>\n",
|
||
" <th>special</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>normal</th>\n",
|
||
" <td>613</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>special</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>97</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"score_glmnet normal special\n",
|
||
"score_image \n",
|
||
"normal 613 1\n",
|
||
"special 4 97"
|
||
]
|
||
},
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.crosstab(dfpredthr['score_image'][mask].map(bool_to_sn),\n",
|
||
" dfpredthr['score_glmnet'][mask].map(bool_to_sn))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"THR = 0.5\n",
|
||
"# dfpred[(dfpred['score_image']>THR) != (dfpred['label']==\"special\")][dfpred[\"set\"] == \"test\"]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"==============================\n",
|
||
"score_gbm normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 42 396\n",
|
||
"==============================\n",
|
||
"score_xgb normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 47 391\n",
|
||
"==============================\n",
|
||
"score_rpart normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 49 389\n",
|
||
"==============================\n",
|
||
"score_gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 43 395\n",
|
||
"==============================\n",
|
||
"score_image normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 5 433\n",
|
||
"==============================\n",
|
||
"score_image_max normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 3 435\n",
|
||
"==============================\n",
|
||
"score_glmnet normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 43 395\n",
|
||
"==============================\n",
|
||
"score_wire normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 401 37\n",
|
||
"==============================\n",
|
||
"score_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 2307 3\n",
|
||
"special 401 37\n",
|
||
"==============================\n",
|
||
"score_image+glmnet normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 33 405\n",
|
||
"==============================\n",
|
||
"score_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 27 411\n",
|
||
"==============================\n",
|
||
"score_max(image;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 2309 1\n",
|
||
"special 5 433\n",
|
||
"==============================\n",
|
||
"score_image*glmnet normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 43 395\n",
|
||
"==============================\n",
|
||
"score_image*gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 42 396\n",
|
||
"==============================\n",
|
||
"score_max_image_wire normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 0 438\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max normal special\n",
|
||
"label \n",
|
||
"normal 2307 3\n",
|
||
"special 0 438\n",
|
||
"==============================\n",
|
||
"score_max_image_wire+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 3 435\n",
|
||
"==============================\n",
|
||
"score_max_image_wire_max+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 2 436\n",
|
||
"==============================\n",
|
||
"score_max_wire_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2310 0\n",
|
||
"special 2 436\n",
|
||
"==============================\n",
|
||
"score_max_wire_max_image+gbmt normal special\n",
|
||
"label \n",
|
||
"normal 2307 3\n",
|
||
"special 2 436\n",
|
||
"==============================\n",
|
||
"score_max(image;wire_max;gbmt) normal special\n",
|
||
"label \n",
|
||
"normal 2306 4\n",
|
||
"special 0 438\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"for cc,vv in dfpredthr.items():\n",
|
||
" if cc in ('label', \"set\", 'view'):\n",
|
||
" continue\n",
|
||
" mask = dfpred['set'] == 'train'\n",
|
||
" print('='*30)\n",
|
||
" print(pd.crosstab(dfpred['label'][mask], vv[mask].map(lambda x: {True:\"special\", False:\"normal\"}[x])))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"def colordictmap(x):\n",
|
||
" if x is np.nan:\n",
|
||
" return [0.5]*3\n",
|
||
" if x=='special':\n",
|
||
" return 'orange'\n",
|
||
" elif x=='normal':\n",
|
||
" return 'b'\n",
|
||
" else:\n",
|
||
" return 'k'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a2160a358>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"fig, ax = plt.subplots(1, figsize=(6,6))\n",
|
||
"ax.scatter(dfpred['score_xgb'][~mask],\n",
|
||
" dfpred['score_glmnet'][~mask],\n",
|
||
" c=[0.5]*3,\n",
|
||
" alpha = 0.1,\n",
|
||
" )\n",
|
||
"\n",
|
||
"ax.scatter(dfpred['score_xgb'][mask],\n",
|
||
" dfpred['score_glmnet'][mask],\n",
|
||
" c=dfpred['label'][mask].map(lambda x: 'orange' if x=='special' else 'b'),\n",
|
||
" alpha = 0.333,\n",
|
||
" marker='x'\n",
|
||
" )\n",
|
||
"ax.set_title(\"Prediction concordance\")\n",
|
||
"ax.set_xlabel('xgb - header')\n",
|
||
"ax.set_ylabel('glmnet - header')\n",
|
||
"pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th>digital</th>\n",
|
||
" <th>False</th>\n",
|
||
" <th>True</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>label</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>normal</th>\n",
|
||
" <td>2351</td>\n",
|
||
" <td>1175</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>special</th>\n",
|
||
" <td>302</td>\n",
|
||
" <td>361</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"digital False True \n",
|
||
"label \n",
|
||
"normal 2351 1175\n",
|
||
"special 302 361"
|
||
]
|
||
},
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.crosstab(dfpred[\"label\"], dfpred[\"digital\"])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th>set</th>\n",
|
||
" <th>test</th>\n",
|
||
" <th>train</th>\n",
|
||
" <th>val</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>view</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>M</th>\n",
|
||
" <td>96</td>\n",
|
||
" <td>380</td>\n",
|
||
" <td>96</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>N</th>\n",
|
||
" <td>612</td>\n",
|
||
" <td>2310</td>\n",
|
||
" <td>604</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>T</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>17</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>W</th>\n",
|
||
" <td>11</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>9</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>X</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"set test train val\n",
|
||
"view \n",
|
||
"M 96 380 96\n",
|
||
"N 612 2310 604\n",
|
||
"T 4 17 4\n",
|
||
"W 11 37 9\n",
|
||
"X 3 4 2"
|
||
]
|
||
},
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.crosstab(dfpred[\"view\"], dfpred[\"set\"])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"N 3526\n",
|
||
"M 572\n",
|
||
"W 57\n",
|
||
"T 25\n",
|
||
"X 9\n",
|
||
"Name: view, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred[\"view\"].value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# fig, ax = plt.subplots(1, figsize=(6,6))\n",
|
||
"# ax.scatter(dfpred['score_image'][~mask],\n",
|
||
"# dfpred['score_xgb'][~mask],\n",
|
||
"# c=[0.5]*3,\n",
|
||
"# alpha = 0.1,\n",
|
||
"# )\n",
|
||
"\n",
|
||
"# ax.scatter(dfpred['score_image'][mask],\n",
|
||
"# dfpred['score_xgb'][mask],\n",
|
||
"# c=dfpred['label'][mask].map(lambda x: 'orange' if x=='special' else 'b'),\n",
|
||
"# alpha = 0.333,\n",
|
||
"# marker='x',\n",
|
||
"# )\n",
|
||
"# ax.set_title(\"Prediction concordance\")\n",
|
||
"# ax.set_xlabel('image')\n",
|
||
"# ax.set_ylabel('header')\n",
|
||
"# pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Text(0,0.5,'header')"
|
||
]
|
||
},
|
||
"execution_count": 31,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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WQWFdA/mPwQuBSom0t39zTHlS0RE8iDb6qP7gBeBlcCfAfuAp2PKk4gACxYsyHcWpAhlGxQa3P3rwIi7b3X3/wSoB41IBndnfDw/Q4Ll89hybsk2KIykl4fM7O1m9kZgWUx5Epk39u3bx5o1a/jgBz/IlVdeybe//W2uueYarrzySn7jN36DY8eOAWFuhIsvvphrr72W3//93+cd73gHAJ/+9Kf5q7/6q2h/a9euPemW1mPHjnHDDTdw5ZVXctlll/GDH/xg2mMfOHAgNyct57Rsg8J/N7Na4OPAJ4C/Az4WW65EYtDdDdu2waOPhmV399zs96WXXuLd7343jz32GF//+tfZsmULO3bsoLW1lb/+679maGiID3zgA/zoRz/iZz/7GZ2dnae1/4qKCh566CF27NjB448/zsc//nEmRiKYOPbOnTu58MIL5+aEpKhle/fRw+mnfcD18WVHJB4TAaG6GhoaYHAwrG/YAPVn2an5wgsvZOPGjTz88MPs2rWLN73pTQAMDw9zzTXX8OKLL3LRRRexcmUYFeaOO+44rYly3J0/+qM/4qc//SklJSW8+uqrvP766yccW2SuZHv30Wrgy8ASd19rZuuAW9z9v8eaO5E50t4eAkJ1esTsiWV7ewgMZ6M6vTN3561vfSvf/e53T3h9586dM/5tWVnZCW0B0w2Jfd9999HZ2cn27dtJJBI0NzdH200cW2SuZFt99DXgU6TbFtz9GeD2uDIlMtd6e6FqysjZVVUhfa5s3LiRn//859H0m4ODg/zyl7/k4osvZu/evVFbwcSw2hAGz5sYbnvHjh28/PLLJ+23r6+PxYsXk0gkePzxx3nllVfmLtMiU2QbFKrc/akpaaNznRmRuNTVhSqjTIODIX2uNDU18c1vfpM77riDdevWsXHjRl588UUqKyv527/9W2666SauvfZalixZQm1tLQC33XYb3d3dXHHFFXz5y19m9erVJ+33zjvvpK2tjdbWVu677z4uvvjiucu0yBSnM/bRKian43wXYbIdkXmhpSW0IUAoIQwOwsAArF17dvttbm7mueeei9bf/OY38/TTJ3fhuf7663nxxRdxdz70oQ/R2hpGMK6srOTHP/7xtPueuHOpsbGRJ554YtptMo8tMheyLSl8CPgqcLGZvQp8FPi92f9EpHDU14e2g2QSurrCci4ambP1ta99jSuuuIJLL72Uvr4+PvCBD+TmwCKnadZJdqKNzJKEeZmbgXrgKODu/plYczcNTbIjEzSBzKnpPZIJ2U6yk2310Q+AXmAHcPBsMiYiIoUr26CwzN1vijUnImfA3TGzfGejIGVTCyAyVbZtCv9qZpfFmhOR01RRUUFXV5cuftNwd7q6uqioqDj1xiIZZi0pmNmzhDuOyoD3mNleIAUYoU1hXfxZFJnesmXL6OjoOO1hI4pFRUUFy5ZpiDI5PaeqPnpHTnIhcgYSiUQ0dISIzI1Zg4K7q+ukiEgRybZNQUREioCCgoiIRBQUREQkkm0/hXPGnj2wdSscOgRLl8KmTbBqVb5zJSJSGIqqpLBnD9x3XxgIbfnysLzvvpAuIiJFFhS2boVFi8KjpGTy+dat+c6ZiEhhiDUomNlNZvaSme02s0/Ost27zMzN7JSDNZ2NQ4cgPYx9pLY2pIuISIxBwcxKgS8BbwMuAe4ws0um2a4G+H1gW1x5mbB0KfT1nZjW1xfSRUQk3pLCemC3u+9192HgfuDWabb7LPAXwMmT086xTZugpyc8xscnn2/aFPeRRUTmhziDwgXAgYz1jnRaxMzeCCx394djzEdk1Sq4884wafuBA2F55526+0hEZEKct6RON55xNJylmZUAnwd+95Q7Mns/8H6AFStWnFWmVq1SEBARmUmcJYUOYHnG+jJOnKCnBlgL/MTM9gEbgc3TNTa7+73u3ururU1NTTFmWUSkuMUZFJ4GWsxspZmVA7cDmydedPc+d29092Z3bwaeBG5xd821KSKSJ7EFBXcfBT4MPAq8ADzo7s+b2WfM7Ja4jisiImcu1mEu3P0R4JEpaX8yw7bXxZkXERE5taLq0SwiIrNTUBARkYiCgoiIRBQUREQkoqAgIiIRBQUREYkoKIiISERBQUREIgoKIiISUVAQEZGIgoKIiEQUFEREJKKgICIiEQUFERGJKCiIiEhEQUFERCIKCiIiElFQEBGRiIKCiIhEFBRERCSioCAiIhEFBRERiSgoiIhIREFBREQiCgoiIhJRUBARkYiCgoiIRBQUREQkoqAgIiIRBQUREYkoKIiISERBQUREIgoKIiISUVAQEZGIgoKIiEQUFEREJKKgICIiEQUFERGJKCiIiEhEQUFERCIKCiIiElFQEBGRiIKCiIhEFBRERCSioCAiIhEFBRERiSgoiIhIREFBREQiCgoiIhKJNSiY2U1m9pKZ7TazT07z+h+Y2S4ze8bM/tnMLowzPyIiMrvYgoKZlQJfAt4GXALcYWaXTNlsJ9Dq7uuA7wN/EVd+RETk1OIsKawHdrv7XncfBu4Hbs3cwN0fd/fB9OqTwLIY8yMiIqdQFuO+LwAOZKx3ABtm2f69wI9izI+IyPyR6ob+dhjuhfI6qGmBZH3sh42zpGDTpPm0G5rdBbQCfznD6+83szYza+vs7JzDLIqIFKBUNxzZBuMpSDaE5ZFtIT1mcQaFDmB5xvoy4ODUjczsLcB/A25x99R0O3L3e9291d1bm5qaYsmsiEjB6G+HRDWUVYNZWCaqQ3rM4gwKTwMtZrbSzMqB24HNmRuY2RuBrxICwuEY8yIiMn8M90Jp1YlppVUhPWaxBQV3HwU+DDwKvAA86O7Pm9lnzOyW9GZ/CSwAvmdmvzCzzTPsTkSkeJTXwdjgiWljgyE9ZnE2NOPujwCPTEn7k4znb4nz+CIi81JNS2hDgFBCGBuEkQFoXBv7odWjWUSk0CTroXEDlCQh1RWWjRtycvdRrCWFQtXdDe3t0NsLdXXQ0gL18b/XIiLZS9ZDcra7+ONRdCWF7m7Ytg1SKWhoCMtt20K6iEixK7qg0N4O1dXhYTb5vD3+O71ERApe0QWF3l6omnKnV1VVSBcRKXZF16ZQUgJbt8KhQ2F95Uq48EJQnzgRkSIrKXR3w/798PzzYb28HJ59Fn72M2hszG/eREQKQVGVFCbuOFq4EF57LbQpNDSEUsKRI7BqVb5zKCKSdg4OiFdw9u8PJYPe3vRwImUwMhIealMQkYKRxwHxiqqkcOgQdHbC+HgICqWlIb20FK6/Pr95ExGJ9LeDj8Gxl2GkHxI1UN4Q0mPuu1BUJYXDh2FsDIaHQyAYG4OurpDe0pLv3ImIpA3sh/49MD4Midqw7N8T0mNWVEFhYADe8Aa44IIQEADOPx8WLVKPZhEpICP94VbJ0sp0tUZlWB/pj/3QRVV91NQUqpBWrAjBYXgY+vpg6dJ850xEJENiIYz2w9hxKKmA8SHw8ZAes6IKCldfDQ8+CG1tIRjU1sLatSFdRKRgVC8HH4HeF2D4CJQ3Qt2akB6zoqo+Ki2FnTtDf4Xh4bDcuXOywVlEpCAkG+FoO1Q2QcPGsDzaHtJjVlRB4fvfh56e0Efh1VfDsqcnpIuIFIzUkdAvYagTup4My5qWkB6zoqo+2rIlBILKyjDe0chIWN+yJd85ExHJMHAAUodDdVFNS2hTSB2GkkSYVyFGRVVSOHwYEokwvIVZWCYSIV1EpGCMHAWbcveRlYT0mBVVUEgmwT3MoZBKweBgaFtIJPKdMxGRDIma0Mt27Hi4aI0dD+uJmtgPXVRBYc2aMLTF0FAICKOjISCcd54m2RGRAlK9AmpWQUk5jPSFZc2qkB6zogoK731vWCYSodQwUX10yy2aZEdECkhNC1gpLFgJjRvD0kpDesyKKigsWQIXXRRKCP394ZFMhnUNiCciBSNZHxqUS5KQ6grLxg05GSW1qO4+evTRMER2eXnouOYOx4/Dd74TqpZERApGsj72we+mU1RB4ZlnQsNyMhmqjcxC283QUHhNRKTYFVVQgFBVVFUV7j4aHg5plZVqaBYRgSJrU7jsMqiogGPHQse1kvTZl5SEGdhERIpdUQWFO+8MpYSjR0Mj87Fjk/0UmpvznTsRkfwrqqBQVwfV1aGReaJNoaICVq8OQUJEpNgVVZvC1q0hKLS2hhIDhE5sY2Nhmk4RkWJXVCWFQ4fCRDsjI+HhHobN7usL6SIixa6oSgpLl8LevaFUcPRoaGBOJmHxYk20IyICRVZSuPzyEAyqqqCxMbQrDAzANdfAVVflO3ciIhlS3XBkGxx8NCxTublvvqiCwugo3HhjCAYvvggHD4bgcP75UB9/73ERkexMBITxFCQbwjJHgaGoqo/27w+NzTt3TnZi6++HH/4Qrr0WVq06cfvu7jBQXm9vuHOppUXBQyTnUt3Q3w7DvVBeFwaFy8EYQDmXeZ6Dr0LlYiirDq9NLPvbYx/6oqhKCk89FcY/MgsX+fHxcNE/ciQEi0zd3bBtW+j53NAQltu2qeezSE7l8RdzTk09z+Fu6HkWjjwJnU9A73MwNhICRsyKKig8/XS442hwMNyJ1NsbSgwHDoT1TO3t4fbV6uoQRCaea4htkRzqb4dEdfilbBaWieqQfi456TwrYeAVGOiARC2MD0P39jD7WsyKqvqoqys8pnKHmikTGvX2njz0RVXV9H8vIjEZ7g2/nDOVVoXhpM8l052nJWBscMqGHntWiqqk8PLL06f39MAFF5yYVlcXShSZBgdDuojkSHndyRfGscGQfi6Zep7uUHMRlNWGmdesHOqvCukxK6qgMDAw82sLFpy43tISth8YCJ/DxPOW+Cc+EpEJNS0wMgCj6X/E0YGwnoMZyHJq6nmWlIVgULlkcpvx4zkJhkUVFGZz8OCJ6z09of3gO9+B++4LHd42bNDdRyI5lccZyHJq6nkmm2B0CBiHsoUwehS6dkCyMfasFFWbwmy+/nW49dZw0d+zJwSCRYvgV34lDIPx/PNwxRUKCiI5l6cZyHIu8zyPbIPFSRjugpGjkFgI1SshdQRqVs2+n7OkoJDW1gaPPw633RZuT120KDxgcrl162RfBvVhEJHYDPdC5XlQtXQyzT0nDeyqPkr1KJoWAAAPNUlEQVRLpWDLlvD80KEwvHam2trJ21bVh0FEYpXHBnYFhQyvvRaWS5eGKqNMfX0hHdSHQURilscGdgWFDJWVYblpU2ho7ukJvZ4nnm/aFF7v7Z2cj2FCVVVIFxE5a3lsYFebQoZkMlQD9fbCJZeE6qIDB0IJ4eabJ9sTJvowVFdP/q36MIjInMpTA3tRBYWSkvDLfyavvz7ZTlBZGS76092G2tISggeEEsLgYOjDsHZtfHkXKWjFMmhdESiqoDBbQAB45hm4//4wnPZVV4W7jtrbQ2DIVF8f0trbw7AXdXUhIOjuI4lFXBfcudrvxGBuieowVMPYIBx6DJKLQn24gkR2CiSwFlVQOJWDB0PbQXU1PPQQrFkTBsyDk285nQgMItM603/wqX+XbISjvzzxgntk29nXL093IT/T/WYO5gYwPhoGcxvpgfrWucvzuSrVHQa7O/Q4MAbli6A0AYe2wMLVUL0ipwEi1qBgZjcBXwBKgb9z9z+f8noS+BZwFdAF/Ja774szT7Nxh+99L7QnJBKwaxe0tob5F155Ba5a28veXYfY9TxQWsGyNzRQU78Q91P3VTjn+jWc7kWvQH4F5cSZXnCn+7uOzbCw5ezG1Z/uvZ96IT/d/Wbu8+iLULt28mpy9IUw9PPAPvCxkDZ6HI4fguXvzP5zzzyGlQAeT8kjn9/Nic/86C4YOwalSRg8ACP9MNof5lWoXwfH9sHSt+YkX+YxDbBkZqXAL4G3Ah3A08Ad7r4rY5sPAuvc/ffM7Hbg1939t2bbb2trq7e1tZ1hnrLftqQkBIbFi0PJITU0TBnHWbJknPOXjlJRPkJ3l3HJFQu58W3V0dSeE20Q3d2wfXsILAMDoerqiitCW8XEHA4bNkxOA3rGASMfX+jMi1dpVbh4jQzMfNE73e3nMp+5em+mmyClMqPj0ejA5B0kM+VvpA9KKyYv0ACvPR5KC4sug+E+GDgQhjzwcVj5H099PjO990OvAQajxyBRA1XLQ6/ZVBec/2unt8/uNhg+Cg2t4fVXvpceAroExoZC2sKLw7FrL83uc888xthI+CUNYVC40sTcfX9O9d2cruSWOgID+8OFO7EQqpfP/N2a6Ts4kf7aP4fPtW8XlDdAWQV07wgB1MpCkGjcAMnz4Py3hMBwhsxsu7u3nmq7OG9JXQ/sdve97j4M3A/cOmWbW4G/Tz//PnCD2elcuuMzPh6qjg4fhldfhb7eMQ53Jdl3oIL9HUk6DlVRVl7CvvZBXnjhxL4K3d3w2GOhhFFZGWZ36+gIk/w89RSUloZgs2dP6DD32GNn2BEuXxOQnO4Y9/kYEz+X7810E6T07wn/7BNKq06cIGWm/I2NnLjviYvQcB/0PQc+HIJLaTK785nuvWcMev4t/BKdGKu/9zk4/lp2naOm7rNmdTr9l+FiWVYZ8olB+cLwGOwI4/lk+7lnHuN4R2ifSC4K+5nL789s382pn9FQJ7x8H/TvhcGDMDYAx1+FVOf0n8VMn3H/nvT2nTC4P5SmRvth6PUwoc7xzlCyYiwEqJGjoSRxeOu0pzDX4gwKFwAHMtY70mnTbuPuo0AfMGVQ8fwbHQ2lVncjkXCOHy9hYKAEKKOEFPv2he0m+iq0t4e2iUWLQtrYWLjg79sXAkRlZXiMjoaL/0Q7xml3hMvXBCTDveEil2nqRe9stp8LuXxvph6roin8Sh7I+PpP7Y06Xf4qmuDYlPwlG8FKwwW3pCK9r6FwIc7mfKZ774eOQHk94DA+FPZrFvaVTeeoqfssrw2/4MdSoZRUfVEoJY2lgASMe2hfqF6e/eeeeYyR/pDHkopw8YS5+/7M9t2c+hkNd4XAdPQFSFSFuv+yKhjqmv6zmOk7+PrWsBzqgkR9KB1ULg3VbaXlMNYfSkMl5ZBcCKne8Lf9u8/+fLMQZ1CY7hf/1LqqbLbBzN5vZm1m1tbZ2TknmcvGRM3a2BhghpV4+G6MGCUlcLQfkpWTzTITfRV6e2FkBCrS/8MTHd0GB0M6wNBQmNhnZGQybULWHeHycbGF0++Cn48u+7l8b6Yeq2p5KGqmOmfujTpd/ha0wPEjJ/ZitVJYdku4wI6lwoWibm24EGdzPtO996kjofGydm0Yp3+kD8rSVUjZVMdMt8/SBDRuhKVvCXXgDRtC1cpINzA+medsP/fMYyRqQvAaHwr5hLn7/sz23Zz6GY30h/kNUkcmA/REoJrus5jpO3j8UFiO9of3fCyVrmocB0rBR0PVkSWgbBGM9oXvQ2nF2Z9vFuIMCh3A8oz1ZcDBmbYxszKgFjipPOzu97p7q7u3NjU1xZTdk5WWhv/tsjKoqCxlQdUIwymntGScyophhlPjkFhIc/OJ8y3U1YX2iKF0dep554USQiIR9nX8eHgsXx7SEokTj5t1R7h8jY9yul3w89FlP5fvzdRjldeGkSzL62fujTrThbVpml6sNavCBbf+8smLa7bnM917b6WhBFJeC4vWQtM1YUKX6uWz72u2fU58nhOvlZTBkk1QeUH4RV1z8el97pnHqFwGqZ7wqFo2t9+f2c5l6meUqAkX6GRjCFAwGaim+yxm+g5WLg3LshooLYMFq0J1YOX5kFgA1ReG9oXy2lDlVFoZquQWXXX255uFOIPC00CLma00s3LgdmDzlG02A7+Tfv4u4P95XC3fpymZDI+ysvCLvqYmweIl5STLnUTpCJVJuHZTJW/4d1UsWRK2nWhkbmkJVUc9PeECX1IS0i+6KOx7bAwuvTTsu74+bHtGk/nka3yU0+2Cn48u+7l8b2a68C5/Z2i0ne5cZ8pf/VVh+6l/d6bnM917v+yWkL8zfW9m+zwzX/NRqL8C6t8Ynp/O537Sft4Y9nW6+zmbc5n6npc3hMC0cA2MDMJwD4wOQkXD9O/fTJ/Zkk1hWdEQ/t5HQkNy829DxXlw3o0h+JVWhh8KtReHEVMvuPnszzcLsd19BGBmNwP/i3BL6jfc/XNm9hmgzd03m1kF8G3gjYQSwu3uvne2fZ7N3UchT7O/XlcXLtTV1SEY1NeH0sLwcFhfuRIuvBDOPz/80p/pTqHMu48g9HloTbf7T73TaLq0gr77aL7I191H2R4rn7f16nuTnbjvPho4kJ4voSZU6VlZuAmg97mwTUV9qOZbsums51HI9u6jWINCHM42KIiIFKNCuCVVRETmGQUFERGJKCiIiEhEQUFERCIKCiIiElFQEBGRiIKCiIhEFBRERCSioCAiIhEFBRERiSgoiIhIREFBREQiCgoiIhKZd6Okmlkn8Moc7KoRODIH+5kvdL7nrmI6V9D5nqkL3f2Us5TNu6AwV8ysLZthZM8VOt9zVzGdK+h846bqIxERiSgoiIhIpJiDwr35zkCO6XzPXcV0rqDzjVXRtimIiMjJirmkICIiU5zzQcHMbjKzl8xst5l9cprXk2b2QPr1bWbWnPtczp0szvcPzGyXmT1jZv9sZhfmI59z4VTnmrHdu8zMzWxe37GSzfma2W+mP9/nzew7uc7jXMriu7zCzB43s53p7/PN+cjnXDCzb5jZYTN7bobXzcy+mH4vnjGzK2PLjLufsw+gFNgDXASUA/8GXDJlmw8CX0k/vx14IN/5jvl8rweq0s//83w932zONb1dDfBT4EmgNd/5jvmzbQF2AovS64vzne+Yz/de4D+nn18C7Mt3vs/ifP89cCXw3Ayv3wz8CDBgI7Atrryc6yWF9cBud9/r7sPA/cCtU7a5Ffj79PPvAzeYmeUwj3PplOfr7o+7+2B69UlgWY7zOFey+WwBPgv8BTCUy8zFIJvzfR/wJXfvAXD3wznO41zK5nwdWJh+XgsczGH+5pS7/xTonmWTW4FvefAkUGdmS+PIy7keFC4ADmSsd6TTpt3G3UeBPqAhJ7mbe9mcb6b3En59zEenPFczeyOw3N0fzmXGYpLNZ7saWG1mPzezJ83sppzlbu5lc76fBu4ysw7gEeC/5CZreXG6/9tnrCyOnRaQ6X7xT73dKptt5ousz8XM7gJagU2x5ig+s56rmZUAnwd+N1cZilk2n20ZoQrpOkIJ8F/MbK2798actzhkc753AN909/9pZtcA306f73j82cu5nF2nzvWSQgewPGN9GScXMaNtzKyMUAydrRhXyLI5X8zsLcB/A25x91SO8jbXTnWuNcBa4Cdmto9QD7t5Hjc2Z/td/oG7j7j7y8BLhCAxH2Vzvu8FHgRw9yeACsI4QeeirP6358K5HhSeBlrMbKWZlRMakjdP2WYz8Dvp5+8C/p+nW3bmoVOeb7pK5auEgDCf65xnPVd373P3RndvdvdmQvvJLe7elp/snrVsvsv/SLiRADNrJFQn7c1pLudONue7H7gBwMzWEIJCZ05zmTubgXen70LaCPS5+6E4DnROVx+5+6iZfRh4lHA3wzfc/Xkz+wzQ5u6bga8Tip27CSWE2/OX47OT5fn+JbAA+F66PX2/u9+St0yfoSzP9ZyR5fk+CtxoZruAMeC/untX/nJ95rI8348DXzOzjxGqUn53vv6gM7PvEqr9GtNtJH8KJADc/SuENpObgd3AIPCe2PIyT99DERGJwblefSQiIqdBQUFERCIKCiIiElFQEBGRiIKCiIhEFBREpjCzf813HkTyRbekiohIRCUFkSnM7Fh6eZ2ZbTWzB83sl2b252Z2p5k9ZWbPmtmq9Hb/IT0Xx04z22JmS9LpTWb2mJntMLOvmtkr6Z7GmNld6f38Iv1aaf7OWGSSgoLI7C4HPgJcBvxHYLW7rwf+jslROX8GbHT3NxKGeP7DdPqfEoZNuRJ4CFgB0ZAMvwW8yd2vIPQ+vjM3pyMyu3N6mAuROfD0xBgzZrYH+HE6/VnS4wwRBid7ID2+fTnwcjr9WuDXAdz9n8ysJ51+A3AV8HR6qJFKYD6PQyXnEAUFkdlljiI7nrE+zuT/z/8G/trdN5vZdYRx/mH64Y4n0v/e3T81t1kVOXuqPhI5e7XAq+nnv5OR/jPgNwHM7EZgUTr9n4F3mdni9Gv1No/nypZzi4KCyNn7NGHU2X8BjmSk/xlh1NIdwNuAQ0C/u+8C7gF+bGbPAI8BsUytKHK6dEuqSEzMLAmMpYeBvgb4crphWaRgqU1BJD4rgAfTU4MOA+/Lc35ETkklBRERiahNQUREIgoKIiISUVAQEZGIgoKIiEQUFEREJKKgICIikf8P4+Js4Q9bGFQAAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a214ecba8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"fig, ax = plt.subplots(1, figsize=(6,6))\n",
|
||
"label_mask = dfpred['label'][mask].map(lambda x: x=='special')\n",
|
||
"\n",
|
||
"ax.scatter(dfpred['score_image'][mask][label_mask],\n",
|
||
" dfpred['score_xgb'][mask][label_mask],\n",
|
||
" c='orange',\n",
|
||
" label='special',\n",
|
||
" alpha = 0.2\n",
|
||
" )\n",
|
||
"\n",
|
||
"ax.scatter(dfpred['score_image'][mask][~label_mask],\n",
|
||
" dfpred['score_xgb'][mask][~label_mask],\n",
|
||
" c='b',\n",
|
||
" label='regular',\n",
|
||
" alpha = 0.2\n",
|
||
" )\n",
|
||
"\n",
|
||
"plt.legend(loc='center')\n",
|
||
"ax.set_xlabel('image')\n",
|
||
"ax.set_ylabel('header')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"N 3526\n",
|
||
"M 572\n",
|
||
"W 57\n",
|
||
"T 25\n",
|
||
"X 9\n",
|
||
"Name: view, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 32,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# dfpred\n",
|
||
"dfpred[\"view\"].value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 33,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>score_gbm</th>\n",
|
||
" <th>score_xgb</th>\n",
|
||
" <th>score_rpart</th>\n",
|
||
" <th>score_gbmt</th>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <th>set</th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>view</th>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>score_image*glmnet</th>\n",
|
||
" <th>score_image*gbmt</th>\n",
|
||
" <th>score_max_image_wire</th>\n",
|
||
" <th>score_max_image_wire_max</th>\n",
|
||
" <th>score_max_image_wire+gbmt</th>\n",
|
||
" <th>score_max_image_wire_max+gbmt</th>\n",
|
||
" <th>score_max_wire_image+gbmt</th>\n",
|
||
" <th>score_max_wire_max_image+gbmt</th>\n",
|
||
" <th>score_max(image;wire_max;gbmt)</th>\n",
|
||
" <th>score_ViewModifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>61</th>\n",
|
||
" <td>1000367304_1.2.840.113654.2.70.1.7929291008356...</td>\n",
|
||
" <td>0.003763</td>\n",
|
||
" <td>0.002105</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045998</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>val</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000134</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000753</td>\n",
|
||
" <td>0.002481</td>\n",
|
||
" <td>0.000134</td>\n",
|
||
" <td>0.000134</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.045998</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>180</th>\n",
|
||
" <td>1001369263_1.2.840.113654.2.70.1.1021686361183...</td>\n",
|
||
" <td>0.993273</td>\n",
|
||
" <td>0.993830</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.906065</td>\n",
|
||
" <td>magnification</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>special</td>\n",
|
||
" <td>M</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.995404</td>\n",
|
||
" <td>0.951874</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>802</th>\n",
|
||
" <td>1004507537_1.2.840.113654.2.70.1.1283916788292...</td>\n",
|
||
" <td>0.001284</td>\n",
|
||
" <td>0.003285</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000903</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.001955</td>\n",
|
||
" <td>0.006408</td>\n",
|
||
" <td>0.000903</td>\n",
|
||
" <td>0.000903</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>818</th>\n",
|
||
" <td>1004507537_1.2.840.113654.2.70.1.2054380122193...</td>\n",
|
||
" <td>0.001750</td>\n",
|
||
" <td>0.003848</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.049429</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000788</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.001826</td>\n",
|
||
" <td>0.006241</td>\n",
|
||
" <td>0.000788</td>\n",
|
||
" <td>0.000788</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.049429</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1038</th>\n",
|
||
" <td>1005140751_1.2.840.113654.2.70.1.1511921198535...</td>\n",
|
||
" <td>0.001284</td>\n",
|
||
" <td>0.002206</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045471</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>val</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000127</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000733</td>\n",
|
||
" <td>0.002402</td>\n",
|
||
" <td>0.000127</td>\n",
|
||
" <td>0.000127</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.045471</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 28 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id score_gbm score_xgb \\\n",
|
||
"61 1000367304_1.2.840.113654.2.70.1.7929291008356... 0.003763 0.002105 \n",
|
||
"180 1001369263_1.2.840.113654.2.70.1.1021686361183... 0.993273 0.993830 \n",
|
||
"802 1004507537_1.2.840.113654.2.70.1.1283916788292... 0.001284 0.003285 \n",
|
||
"818 1004507537_1.2.840.113654.2.70.1.2054380122193... 0.001750 0.003848 \n",
|
||
"1038 1005140751_1.2.840.113654.2.70.1.1511921198535... 0.001284 0.002206 \n",
|
||
"\n",
|
||
" score_rpart score_gbmt ViewModifier set label view \\\n",
|
||
"61 0.006882 0.045998 NaN val normal N \n",
|
||
"180 1.000000 0.906065 magnification train special M \n",
|
||
"802 0.006882 0.045498 NaN train normal N \n",
|
||
"818 0.006882 0.049429 NaN train normal N \n",
|
||
"1038 0.006882 0.045471 NaN val normal N \n",
|
||
"\n",
|
||
" score_image ... score_image*glmnet score_image*gbmt \\\n",
|
||
"61 0.000134 ... 0.000753 0.002481 \n",
|
||
"180 1.000000 ... 0.995404 0.951874 \n",
|
||
"802 0.000903 ... 0.001955 0.006408 \n",
|
||
"818 0.000788 ... 0.001826 0.006241 \n",
|
||
"1038 0.000127 ... 0.000733 0.002402 \n",
|
||
"\n",
|
||
" score_max_image_wire score_max_image_wire_max \\\n",
|
||
"61 0.000134 0.000134 \n",
|
||
"180 1.000000 1.000000 \n",
|
||
"802 0.000903 0.000903 \n",
|
||
"818 0.000788 0.000788 \n",
|
||
"1038 0.000127 0.000127 \n",
|
||
"\n",
|
||
" score_max_image_wire+gbmt score_max_image_wire_max+gbmt \\\n",
|
||
"61 0.023066 0.023066 \n",
|
||
"180 0.953032 0.953032 \n",
|
||
"802 0.023200 0.023200 \n",
|
||
"818 0.025109 0.025109 \n",
|
||
"1038 0.022799 0.022799 \n",
|
||
"\n",
|
||
" score_max_wire_image+gbmt score_max_wire_max_image+gbmt \\\n",
|
||
"61 0.023066 0.023066 \n",
|
||
"180 0.953032 0.953032 \n",
|
||
"802 0.023200 0.023200 \n",
|
||
"818 0.025109 0.025109 \n",
|
||
"1038 0.022799 0.022799 \n",
|
||
"\n",
|
||
" score_max(image;wire_max;gbmt) score_ViewModifier \n",
|
||
"61 0.045998 0.0 \n",
|
||
"180 1.000000 1.0 \n",
|
||
"802 0.045498 0.0 \n",
|
||
"818 0.049429 0.0 \n",
|
||
"1038 0.045471 0.0 \n",
|
||
"\n",
|
||
"[5 rows x 28 columns]"
|
||
]
|
||
},
|
||
"execution_count": 33,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred[~dfpred[\"view\"].isnull()].head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"source": [
|
||
"## SUBSET test and val sets\n",
|
||
"### 'test' in the code is referred to as 'validation' in the paper, and 'validation' in the code as 'hold-out' in the text "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 34,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Applications/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n",
|
||
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
|
||
"Try using .loc[row_indexer,col_indexer] = value instead\n",
|
||
"\n",
|
||
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
|
||
"/Applications/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:5: SettingWithCopyWarning: \n",
|
||
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
|
||
"Try using .loc[row_indexer,col_indexer] = value instead\n",
|
||
"\n",
|
||
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"df_test = dfpred[dfpred[\"set\"]==\"test\"]\n",
|
||
"df_val = dfpred[dfpred[\"set\"]==\"val\"]\n",
|
||
"\n",
|
||
"df_test[\"score_wire\"] = df_test[\"score_wire\"].fillna(0)\n",
|
||
"df_val[\"score_wire\"] = df_val[\"score_wire\"].fillna(0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 35,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(715, 28)"
|
||
]
|
||
},
|
||
"execution_count": 35,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_val.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 36,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<matplotlib.collections.PathCollection at 0x1a21587f60>"
|
||
]
|
||
},
|
||
"execution_count": 36,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x11bcc7c18>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.scatter(df_val.label=='special', df_val.score_glmnet)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 37,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0"
|
||
]
|
||
},
|
||
"execution_count": 37,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_test.score_ViewModifier.isnull().sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 38,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>score_gbm</th>\n",
|
||
" <th>score_xgb</th>\n",
|
||
" <th>score_rpart</th>\n",
|
||
" <th>score_gbmt</th>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <th>set</th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>view</th>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>score_image*glmnet</th>\n",
|
||
" <th>score_image*gbmt</th>\n",
|
||
" <th>score_max_image_wire</th>\n",
|
||
" <th>score_max_image_wire_max</th>\n",
|
||
" <th>score_max_image_wire+gbmt</th>\n",
|
||
" <th>score_max_image_wire_max+gbmt</th>\n",
|
||
" <th>score_max_wire_image+gbmt</th>\n",
|
||
" <th>score_max_wire_max_image+gbmt</th>\n",
|
||
" <th>score_max(image;wire_max;gbmt)</th>\n",
|
||
" <th>score_ViewModifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.002226</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.002226</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045573</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022786</td>\n",
|
||
" <td>0.022786</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045573</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.001841</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045569</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045569</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1000047423_1.2.840.113654.2.70.1.2089724714216...</td>\n",
|
||
" <td>0.001434</td>\n",
|
||
" <td>0.001841</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.022784</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045568</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1000047594_1.2.840.113654.2.70.1.1921731705635...</td>\n",
|
||
" <td>0.001402</td>\n",
|
||
" <td>0.003848</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.022749</td>\n",
|
||
" <td>0.022749</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 28 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id score_gbm score_xgb \\\n",
|
||
"0 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.002226 \n",
|
||
"1 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.002226 \n",
|
||
"2 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.001841 \n",
|
||
"3 1000047423_1.2.840.113654.2.70.1.2089724714216... 0.001434 0.001841 \n",
|
||
"4 1000047594_1.2.840.113654.2.70.1.1921731705635... 0.001402 0.003848 \n",
|
||
"\n",
|
||
" score_rpart score_gbmt ViewModifier set label view score_image \\\n",
|
||
"0 0.006882 0.045568 NaN NaN NaN NaN NaN \n",
|
||
"1 0.006882 0.045573 NaN NaN NaN NaN NaN \n",
|
||
"2 0.006882 0.045569 NaN NaN NaN NaN NaN \n",
|
||
"3 0.006882 0.045568 NaN NaN NaN NaN NaN \n",
|
||
"4 0.006882 0.045498 NaN NaN NaN NaN NaN \n",
|
||
"\n",
|
||
" ... score_image*glmnet score_image*gbmt \\\n",
|
||
"0 ... NaN NaN \n",
|
||
"1 ... NaN NaN \n",
|
||
"2 ... NaN NaN \n",
|
||
"3 ... NaN NaN \n",
|
||
"4 ... NaN NaN \n",
|
||
"\n",
|
||
" score_max_image_wire score_max_image_wire_max score_max_image_wire+gbmt \\\n",
|
||
"0 0.0 0.0 0.022784 \n",
|
||
"1 0.0 0.0 0.022786 \n",
|
||
"2 0.0 0.0 0.022784 \n",
|
||
"3 0.0 0.0 0.022784 \n",
|
||
"4 0.0 0.0 0.022749 \n",
|
||
"\n",
|
||
" score_max_image_wire_max+gbmt score_max_wire_image+gbmt \\\n",
|
||
"0 0.022784 0.0 \n",
|
||
"1 0.022786 0.0 \n",
|
||
"2 0.022784 0.0 \n",
|
||
"3 0.022784 0.0 \n",
|
||
"4 0.022749 0.0 \n",
|
||
"\n",
|
||
" score_max_wire_max_image+gbmt score_max(image;wire_max;gbmt) \\\n",
|
||
"0 0.0 0.045568 \n",
|
||
"1 0.0 0.045573 \n",
|
||
"2 0.0 0.045569 \n",
|
||
"3 0.0 0.045568 \n",
|
||
"4 0.0 0.045498 \n",
|
||
"\n",
|
||
" score_ViewModifier \n",
|
||
"0 0.0 \n",
|
||
"1 0.0 \n",
|
||
"2 0.0 \n",
|
||
"3 0.0 \n",
|
||
"4 0.0 \n",
|
||
"\n",
|
||
"[5 rows x 28 columns]"
|
||
]
|
||
},
|
||
"execution_count": 38,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred[dfpred[\"score_image\"].isnull()].head()\n",
|
||
"# .reset_index()[\"index\"].to_csv(\"../tables/spotmag_predictions/missing_imgs.csv\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 39,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>score_gbm</th>\n",
|
||
" <th>score_xgb</th>\n",
|
||
" <th>score_rpart</th>\n",
|
||
" <th>score_gbmt</th>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <th>set</th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>view</th>\n",
|
||
" <th>score_image</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>score_image*glmnet</th>\n",
|
||
" <th>score_image*gbmt</th>\n",
|
||
" <th>score_max_image_wire</th>\n",
|
||
" <th>score_max_image_wire_max</th>\n",
|
||
" <th>score_max_image_wire+gbmt</th>\n",
|
||
" <th>score_max_image_wire_max+gbmt</th>\n",
|
||
" <th>score_max_wire_image+gbmt</th>\n",
|
||
" <th>score_max_wire_max_image+gbmt</th>\n",
|
||
" <th>score_max(image;wire_max;gbmt)</th>\n",
|
||
" <th>score_ViewModifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>61</th>\n",
|
||
" <td>1000367304_1.2.840.113654.2.70.1.7929291008356...</td>\n",
|
||
" <td>0.003763</td>\n",
|
||
" <td>0.002105</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045998</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>val</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000134</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000753</td>\n",
|
||
" <td>0.002481</td>\n",
|
||
" <td>0.000134</td>\n",
|
||
" <td>0.000134</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.023066</td>\n",
|
||
" <td>0.045998</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>180</th>\n",
|
||
" <td>1001369263_1.2.840.113654.2.70.1.1021686361183...</td>\n",
|
||
" <td>0.993273</td>\n",
|
||
" <td>0.993830</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.906065</td>\n",
|
||
" <td>magnification</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>special</td>\n",
|
||
" <td>M</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.995404</td>\n",
|
||
" <td>0.951874</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>0.953032</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>802</th>\n",
|
||
" <td>1004507537_1.2.840.113654.2.70.1.1283916788292...</td>\n",
|
||
" <td>0.001284</td>\n",
|
||
" <td>0.003285</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000903</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.001955</td>\n",
|
||
" <td>0.006408</td>\n",
|
||
" <td>0.000903</td>\n",
|
||
" <td>0.000903</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.023200</td>\n",
|
||
" <td>0.045498</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>818</th>\n",
|
||
" <td>1004507537_1.2.840.113654.2.70.1.2054380122193...</td>\n",
|
||
" <td>0.001750</td>\n",
|
||
" <td>0.003848</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.049429</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>train</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000788</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.001826</td>\n",
|
||
" <td>0.006241</td>\n",
|
||
" <td>0.000788</td>\n",
|
||
" <td>0.000788</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.025109</td>\n",
|
||
" <td>0.049429</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1038</th>\n",
|
||
" <td>1005140751_1.2.840.113654.2.70.1.1511921198535...</td>\n",
|
||
" <td>0.001284</td>\n",
|
||
" <td>0.002206</td>\n",
|
||
" <td>0.006882</td>\n",
|
||
" <td>0.045471</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>val</td>\n",
|
||
" <td>normal</td>\n",
|
||
" <td>N</td>\n",
|
||
" <td>0.000127</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000733</td>\n",
|
||
" <td>0.002402</td>\n",
|
||
" <td>0.000127</td>\n",
|
||
" <td>0.000127</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.022799</td>\n",
|
||
" <td>0.045471</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 28 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id score_gbm score_xgb \\\n",
|
||
"61 1000367304_1.2.840.113654.2.70.1.7929291008356... 0.003763 0.002105 \n",
|
||
"180 1001369263_1.2.840.113654.2.70.1.1021686361183... 0.993273 0.993830 \n",
|
||
"802 1004507537_1.2.840.113654.2.70.1.1283916788292... 0.001284 0.003285 \n",
|
||
"818 1004507537_1.2.840.113654.2.70.1.2054380122193... 0.001750 0.003848 \n",
|
||
"1038 1005140751_1.2.840.113654.2.70.1.1511921198535... 0.001284 0.002206 \n",
|
||
"\n",
|
||
" score_rpart score_gbmt ViewModifier set label view \\\n",
|
||
"61 0.006882 0.045998 NaN val normal N \n",
|
||
"180 1.000000 0.906065 magnification train special M \n",
|
||
"802 0.006882 0.045498 NaN train normal N \n",
|
||
"818 0.006882 0.049429 NaN train normal N \n",
|
||
"1038 0.006882 0.045471 NaN val normal N \n",
|
||
"\n",
|
||
" score_image ... score_image*glmnet score_image*gbmt \\\n",
|
||
"61 0.000134 ... 0.000753 0.002481 \n",
|
||
"180 1.000000 ... 0.995404 0.951874 \n",
|
||
"802 0.000903 ... 0.001955 0.006408 \n",
|
||
"818 0.000788 ... 0.001826 0.006241 \n",
|
||
"1038 0.000127 ... 0.000733 0.002402 \n",
|
||
"\n",
|
||
" score_max_image_wire score_max_image_wire_max \\\n",
|
||
"61 0.000134 0.000134 \n",
|
||
"180 1.000000 1.000000 \n",
|
||
"802 0.000903 0.000903 \n",
|
||
"818 0.000788 0.000788 \n",
|
||
"1038 0.000127 0.000127 \n",
|
||
"\n",
|
||
" score_max_image_wire+gbmt score_max_image_wire_max+gbmt \\\n",
|
||
"61 0.023066 0.023066 \n",
|
||
"180 0.953032 0.953032 \n",
|
||
"802 0.023200 0.023200 \n",
|
||
"818 0.025109 0.025109 \n",
|
||
"1038 0.022799 0.022799 \n",
|
||
"\n",
|
||
" score_max_wire_image+gbmt score_max_wire_max_image+gbmt \\\n",
|
||
"61 0.023066 0.023066 \n",
|
||
"180 0.953032 0.953032 \n",
|
||
"802 0.023200 0.023200 \n",
|
||
"818 0.025109 0.025109 \n",
|
||
"1038 0.022799 0.022799 \n",
|
||
"\n",
|
||
" score_max(image;wire_max;gbmt) score_ViewModifier \n",
|
||
"61 0.045998 0.0 \n",
|
||
"180 1.000000 1.0 \n",
|
||
"802 0.045498 0.0 \n",
|
||
"818 0.049429 0.0 \n",
|
||
"1038 0.045471 0.0 \n",
|
||
"\n",
|
||
"[5 rows x 28 columns]"
|
||
]
|
||
},
|
||
"execution_count": 39,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred[~dfpred[\"score_image\"].isnull()].head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 40,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"magnification 41039\n",
|
||
"spot compression 23194\n",
|
||
"implant displaced 15534\n",
|
||
"rolled medial 114\n",
|
||
"rolled lateral 82\n",
|
||
"axillary tail 38\n",
|
||
"tangential 38\n",
|
||
"cleavage 7\n",
|
||
"infra-mammary fold 7\n",
|
||
"nipple in profile 3\n",
|
||
"rolled inferior 1\n",
|
||
"rolled superior 1\n",
|
||
"Name: ViewModifier, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 40,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dfpred.ViewModifier.value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 41,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"def specificity_at_sensitivity100(fpr_, tpr_):\n",
|
||
" tpr_max = tpr_.max() \n",
|
||
" if tpr_max == 1:\n",
|
||
" return 1-fpr_[np.argmax(tpr_ == tpr_max)]\n",
|
||
" else:\n",
|
||
" return 0\n",
|
||
" \n",
|
||
"def thr_at_sensitivity100(thr, tpr_):\n",
|
||
" tpr_max = tpr_.max() \n",
|
||
" if tpr_max == 1:\n",
|
||
" return thr[np.argmax(tpr_ == tpr_max)]\n",
|
||
" else:\n",
|
||
" return 1.0"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## VALIDATION SET\n",
|
||
"in code and tables referred to as 'test'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 42,
|
||
"metadata": {
|
||
"scrolled": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"score_gbm 114 0.5\n",
|
||
"score_xgb 114 0.5\n",
|
||
"score_rpart 114 0.5\n",
|
||
"score_gbmt 114 0.5\n",
|
||
"score_image 114 0.5\n",
|
||
"score_image_max 114 0.5\n",
|
||
"score_glmnet 114 0.5\n",
|
||
"score_wire 114 0.5\n",
|
||
"score_wire_max 114 0.5\n",
|
||
"score_image+glmnet 114 0.5\n",
|
||
"score_image+gbmt 114 0.5\n",
|
||
"score_max(image;gbmt) 114 0.5\n",
|
||
"score_image*glmnet 114 0.5\n",
|
||
"score_image*gbmt 114 0.5\n",
|
||
"score_max_image_wire 114 0.5\n",
|
||
"score_max_image_wire_max 114 0.5\n",
|
||
"score_max_image_wire+gbmt 114 0.5\n",
|
||
"score_max_image_wire_max+gbmt 114 0.5\n",
|
||
"score_max_wire_image+gbmt 114 0.5\n",
|
||
"score_max_wire_max_image+gbmt 114 0.5\n",
|
||
"score_max(image;wire_max;gbmt) 114 0.5\n",
|
||
"score_ViewModifier 114 0.5\n",
|
||
"score_wire 11\n",
|
||
"score_wire_max 11\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"dfmodels = []\n",
|
||
"THR = 0.5\n",
|
||
"optimal=False\n",
|
||
"for cc in df_test.columns:\n",
|
||
" mdict = {}\n",
|
||
" if not cc.startswith(\"score\"):\n",
|
||
" continue\n",
|
||
"\n",
|
||
" label = df_test[\"label\"]!= 'normal'\n",
|
||
" fpr_, tpr_, thresholds = roc_curve(label, df_test[cc], pos_label=1)\n",
|
||
" if optimal:\n",
|
||
" opt_thr = thresholds[np.argmax(tpr_ - fpr_)]\n",
|
||
" else:\n",
|
||
" opt_thr=THR\n",
|
||
" \n",
|
||
" print(cc, label.sum(), opt_thr)\n",
|
||
"# pr, rec, thresholds_ = precision_recall_curve(df_test[\"label\"]!= 'normal', df_test[cc], pos_label=1)\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_test[cc]>=opt_thr)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" auc_ = auc(fpr_, tpr_)\n",
|
||
" mdict[\"auROC\"] = auc_\n",
|
||
" mdict[\"specificity_at_sensitivity100\"] = specificity_at_sensitivity100(fpr_, tpr_)\n",
|
||
"# auc_ = auc(pr, rec, )\n",
|
||
"# mdict[\"auPRC\"] = auc_\n",
|
||
" mdict[\"model\"] = cc\n",
|
||
" mdict[\"thr\"] = opt_thr\n",
|
||
"# print(cc, auc_)\n",
|
||
" dfmodels.append(mdict)\n",
|
||
"# break\n",
|
||
"\n",
|
||
"for cc in [\"score_wire\", 'score_wire_max']:\n",
|
||
" mdict = {}\n",
|
||
" if cc in [\"score_wire\", 'score_wire_max']:\n",
|
||
" label = df_test[\"view\"]== 'W'\n",
|
||
" else:\n",
|
||
" label = df_test[\"label\"]!= 'normal'\n",
|
||
" print(cc, label.sum())\n",
|
||
" fpr_, tpr_, thresholds = roc_curve(label, df_test[cc], pos_label=1)\n",
|
||
"# pr, rec, thresholds_ = precision_recall_curve(df_test[\"label\"]!= 'normal', df_test[cc], pos_label=1)\n",
|
||
" if optimal:\n",
|
||
" opt_thr = thresholds[np.argmax(tpr_ - fpr_)]\n",
|
||
" else:\n",
|
||
" opt_thr=THR\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_test[cc]>=opt_thr)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" auc_ = auc(fpr_, tpr_)\n",
|
||
" mdict[\"auROC\"] = auc_\n",
|
||
" mdict[\"specificity_at_sensitivity100\"] = specificity_at_sensitivity100(fpr_, tpr_)\n",
|
||
" mdict[\"thr\"] = opt_thr\n",
|
||
"# auc_ = auc(pr, rec, )\n",
|
||
"# mdict[\"auPRC\"] = auc_\n",
|
||
" cc_ = cc + \" (vs other views)\"\n",
|
||
" mdict[\"model\"] = cc_\n",
|
||
"# print(cc, auc_)\n",
|
||
" dfmodels.append(mdict)\n",
|
||
" \n",
|
||
"dfmodels = pd.DataFrame(dfmodels)[[\"model\", \"auROC\",\"average_precision_score\", \"f1_score\", \n",
|
||
" \"precision_score\", \"recall_score\", \"accuracy_score\", \"thr\", \"specificity_at_sensitivity100\" ]]\n",
|
||
"\n",
|
||
"dfmodels[\"model\"] = dfmodels[\"model\"].str.replace('score_','')\n",
|
||
"dfmodels.columns = [cc.replace('_score','') for cc in dfmodels.columns]\n",
|
||
"dfmodels.rename(columns={\"average_precision\":\"auPRC\", \"f1\":\"F1\"}, inplace=True)\n",
|
||
"\n",
|
||
"dfmodels = dfmodels.set_index('model').round(4)*100\n",
|
||
"dfmodels = dfmodels.loc[[ 'ViewModifier', 'rpart', 'gbm', 'glmnet','xgb', 'gbmt', \n",
|
||
" 'image',\n",
|
||
" 'image_max',\n",
|
||
"# 'wire', 'wire_max', \n",
|
||
" 'wire (vs other views)',\n",
|
||
" 'wire_max (vs other views)',\n",
|
||
"# 'max_image_wire',\n",
|
||
"# \"image+glmnet\" ,\n",
|
||
"# 'max_image_wire+gbmt',\n",
|
||
" 'max_image_wire_max',\n",
|
||
" 'image+gbmt',\n",
|
||
"# 'max(image;gbmt)',\n",
|
||
"# 'max_image_wire_max+gbmt',\n",
|
||
" 'max_wire_max_image+gbmt',\n",
|
||
"# 'max(image;wire_max;gbmt)',\n",
|
||
"# 'max_wire_image+gbmt'\n",
|
||
"# # \"image*glmnet\" ,'img*gbmt'\n",
|
||
" ]]\n",
|
||
"dfmodels.rename(index={\"max_image_wire\":\"max(image, wire)\",\n",
|
||
" 'image':'avg(image)',\n",
|
||
" 'image_max':'max(image)',\n",
|
||
" 'image+gbmt': 'avg(image)+gbmt',\n",
|
||
" 'wire_max':'max(wire)', \n",
|
||
" 'wire (vs other views)':'avg(wire) (vs other views)',\n",
|
||
" 'wire_max (vs other views)':'max(wire) (vs other views)',\n",
|
||
" 'max_wire_image+gbmt': 'max(wire, image+gbmt)',\n",
|
||
"# \"max_image_wire+gbmt\":\"max(image, wire) + gbmt\",\n",
|
||
" 'max_image_wire_max': \"max(avg(image), max(wire))\",\n",
|
||
"# 'max_image_wire_max+gbmt':'max(image, max(wire))+gbmt',\n",
|
||
" 'max(image;gbmt)':'max(image, gbmt)',\n",
|
||
" 'max(image;wire_max;gbmt)':'max(image, wire_max, gbmt)',\n",
|
||
" 'max_wire_max_image+gbmt':'max(max(wire), avg(image)+gbmt)',\n",
|
||
" }, inplace=True)\n",
|
||
"df_performance_test = dfmodels"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 43,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Text(0,0.5,'score_wire_max')"
|
||
]
|
||
},
|
||
"execution_count": 43,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a21513c18>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"label = df_test[\"view\"]== 'W'\n",
|
||
"\n",
|
||
"# fpr_, tpr_, thresholds = roc_curve(label, df_test[cc], pos_label=1)\n",
|
||
"# plt.plot(fpr_, tpr_)\n",
|
||
"fig, axs = plt.subplots(1,3, sharex=True, sharey=True, figsize=(14,4))\n",
|
||
"\n",
|
||
"cc = 'score_wire'\n",
|
||
"axs[0].scatter(label, df_test[cc])\n",
|
||
"axs[0].set_title(cc)\n",
|
||
"axs[0].set_xlabel('label')\n",
|
||
"axs[0].set_xticks([0,1])\n",
|
||
"cc = 'score_wire_max'\n",
|
||
"axs[1].scatter(label, df_test[cc])\n",
|
||
"axs[1].set_title(cc)\n",
|
||
"axs[1].set_xlabel('label')\n",
|
||
"axs[1].set_xticks([0,1])\n",
|
||
"\n",
|
||
"axs[2].scatter(df_test['score_wire'], df_test['score_wire_max'])\n",
|
||
"axs[2].set_xlabel('score_wire')\n",
|
||
"axs[2].set_ylabel('score_wire_max')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 44,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>auROC</th>\n",
|
||
" <th>auPRC</th>\n",
|
||
" <th>F1</th>\n",
|
||
" <th>precision</th>\n",
|
||
" <th>recall</th>\n",
|
||
" <th>accuracy</th>\n",
|
||
" <th>thr</th>\n",
|
||
" <th>specificity_at_sensitivity100</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>model</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <td>92.23</td>\n",
|
||
" <td>75.03</td>\n",
|
||
" <td>85.47</td>\n",
|
||
" <td>83.33</td>\n",
|
||
" <td>87.72</td>\n",
|
||
" <td>95.32</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>rpart</th>\n",
|
||
" <td>94.30</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>gbm</th>\n",
|
||
" <td>94.82</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>1.31</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>glmnet</th>\n",
|
||
" <td>95.88</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>0.33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>xgb</th>\n",
|
||
" <td>96.30</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>11.11</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>gbmt</th>\n",
|
||
" <td>96.59</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>5.56</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>avg(image)</th>\n",
|
||
" <td>99.60</td>\n",
|
||
" <td>93.10</td>\n",
|
||
" <td>95.96</td>\n",
|
||
" <td>98.17</td>\n",
|
||
" <td>93.86</td>\n",
|
||
" <td>98.76</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>79.41</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(image)</th>\n",
|
||
" <td>99.52</td>\n",
|
||
" <td>92.26</td>\n",
|
||
" <td>95.54</td>\n",
|
||
" <td>97.27</td>\n",
|
||
" <td>93.86</td>\n",
|
||
" <td>98.62</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>75.33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>avg(wire) (vs other views)</th>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>91.05</td>\n",
|
||
" <td>95.24</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>90.91</td>\n",
|
||
" <td>99.86</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(wire) (vs other views)</th>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(avg(image), max(wire))</th>\n",
|
||
" <td>99.98</td>\n",
|
||
" <td>97.54</td>\n",
|
||
" <td>98.69</td>\n",
|
||
" <td>98.26</td>\n",
|
||
" <td>99.12</td>\n",
|
||
" <td>99.59</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>97.71</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>avg(image)+gbmt</th>\n",
|
||
" <td>99.29</td>\n",
|
||
" <td>92.61</td>\n",
|
||
" <td>95.41</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>91.23</td>\n",
|
||
" <td>98.62</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>76.14</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(max(wire), avg(image)+gbmt)</th>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>98.52</td>\n",
|
||
" <td>99.12</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>98.25</td>\n",
|
||
" <td>99.72</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>99.84</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" auROC auPRC F1 precision recall \\\n",
|
||
"model \n",
|
||
"ViewModifier 92.23 75.03 85.47 83.33 87.72 \n",
|
||
"rpart 94.30 90.39 93.95 100.00 88.60 \n",
|
||
"gbm 94.82 90.39 93.95 100.00 88.60 \n",
|
||
"glmnet 95.88 90.39 93.95 100.00 88.60 \n",
|
||
"xgb 96.30 90.39 93.95 100.00 88.60 \n",
|
||
"gbmt 96.59 90.39 93.95 100.00 88.60 \n",
|
||
"avg(image) 99.60 93.10 95.96 98.17 93.86 \n",
|
||
"max(image) 99.52 92.26 95.54 97.27 93.86 \n",
|
||
"avg(wire) (vs other views) 100.00 91.05 95.24 100.00 90.91 \n",
|
||
"max(wire) (vs other views) 100.00 100.00 100.00 100.00 100.00 \n",
|
||
"max(avg(image), max(wire)) 99.98 97.54 98.69 98.26 99.12 \n",
|
||
"avg(image)+gbmt 99.29 92.61 95.41 100.00 91.23 \n",
|
||
"max(max(wire), avg(image)+gbmt) 100.00 98.52 99.12 100.00 98.25 \n",
|
||
"\n",
|
||
" accuracy thr specificity_at_sensitivity100 \n",
|
||
"model \n",
|
||
"ViewModifier 95.32 50.0 0.00 \n",
|
||
"rpart 98.21 50.0 0.00 \n",
|
||
"gbm 98.21 50.0 1.31 \n",
|
||
"glmnet 98.21 50.0 0.33 \n",
|
||
"xgb 98.21 50.0 11.11 \n",
|
||
"gbmt 98.21 50.0 5.56 \n",
|
||
"avg(image) 98.76 50.0 79.41 \n",
|
||
"max(image) 98.62 50.0 75.33 \n",
|
||
"avg(wire) (vs other views) 99.86 50.0 100.00 \n",
|
||
"max(wire) (vs other views) 100.00 50.0 100.00 \n",
|
||
"max(avg(image), max(wire)) 99.59 50.0 97.71 \n",
|
||
"avg(image)+gbmt 98.62 50.0 76.14 \n",
|
||
"max(max(wire), avg(image)+gbmt) 99.72 50.0 99.84 "
|
||
]
|
||
},
|
||
"execution_count": 44,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_performance_test"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 45,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAE1CAYAAADu9kqIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXd4VMUWwH+T3hPSSEICSeihhBoQpVcBDVVAiqJiAUGKgE9QQOHpUwGlKggIgvSOSpXeeyAQSjqQBEJISC+78/7YTUjC0sIiiPP7vv323pm5556zd+/ds2fOzAgpJQqFQqFQKBTPIyZPWwGFQqFQKBSKJ4VydBQKhUKhUDy3KEdHoVAoFArFc4tydBQKhUKhUDy3KEdHoVAoFArFc4tydBQKhUKhUDy3KEdHoXgCCCHGCyGuCiFOCSHOCSF6FaoTQoixQohLQoiLQoidQohqherthBA/CSHChRChQog9QogGT8eSOxSz6awQ4lUD5UVs1dd/LIQI0x9zWgjR7+lYUKCPRq9r/stXCOGivw5pQogZT1M/YyGEOPCA+j+EEE5/lz5PGv11PKvfbiaE2PS0dVI8G5g9bQUUiueYqVLK74QQFYHjQohVUspcYBDQCAiUUmYIIdoAG4QQ1aSUWcDPQCRQUUqpFUL4A1WfmhVFybepKrBXCOFerLyIrUKI94HWQJCU8rYQwhHo9LSU15MppaxVuEAIYQt8BlTXv54phBCmUkrNoxwjpWz0gPr2j6eVcRBCCEBIKbVPW5eniRDCTEqZ97T1eB5RER2F4iERQqwTQhzXR1ne1ZelFarvJoT4pfhxUspLQAZQSl80GhgspczQ128FDgC9hRDlgQbA2PwHv5QyQkr5+zNm03kgD3AtVl7c1k+BgVLK2/r6FCnlwidhy+MgpUyXUu4Dsv7uc+sjEWFCiIVCiBAhxCohhI0QIkoI8bkQYh/QXQhRXgixWX+99gohquiPLy2EWKuPlp0WQjTSl6fp3z31UcH8SFxjfXmUEMJVvz1cX3dWCDG0kF7nhRBz9d+PrUIIayPafF4IMQs4AfQVQhwUQpwQQqwUQtjp29UXQhzQ23VECGGvP3avvu2JfHufJPe4T9rpz39aCLFDX2YnhFgghDijv5Zd9eUG7ykhxC9CiClCiJ3A/4QQQXp7T+rfK+vbmQohviskd7AQoqUQYm0hua2FEGue9GfxT0RFdBSKh+ctKWWS/mF/VAix+mEOEkLUAS5JKa8LIRwAWylleLFmx4BqwA3g1KP+e38MSmpTA0CLTt/C5YVttQfsDdj6tLEWQpzSb0dKKTs/VW10VAbellLuF0LMBwbqy7OklC8B6H9M35dSXtJ//rOAFsA0YLeUsrMQwhSwKyb7dWCLlHKSvt6mcKUQoi7QH52DLYDDQojdwC2gItBLSjlACLEC6AosNqLN/YHPgTVAKylluhBiNDBcCPE1sBzoIaU8qr93MoHrQGspZZbQRRCXAvWMpNO9KH6frAfmAk2klJFCCGd9u8+AFCllDQAhRKl7yCtMJXS2a/Q2NpFS5gkhWgH/RfeZvwv4AbX1dc7ors9MIYSblPIGus9ygRFtfm5Qjo5C8fAMEULk/yj6oPsRuB/DhBADAH+g3QPaCuBprMdSEpv6AKnofoCkECK/vLitT8umB3FX19UzQKyUcr9+ezEwRL+9HHSRAnTdnSv1nzeApf69BdAPQO8gpxSTfRSYL4QwB9ZJKU8Vq38JWCulTNefaw3QGNiAzhHMb38c8H0MG4sTLaU8JIToCAQA+/W2WQAH0TlCcVLKo3rbbuv1swVmCCFqARp0jsKTpvh98i6wR0oZqdctSV/XCuiZf5CU8tZDyF5Z6I+NI7BQ78BJwLyQ3B/zu7byzyeE+BXoI4RYALyA/nugKIrqulIoHgIhRDN0D5sXpJSBwEnAiqI/5FbFDpsqpawM9AAWCSGs9A/rdKHLuylMHeAcEAoECiGe+L35GDbVklI2llLuLVb+sLYq7qa4Q5i/n65/NwGS9Z99/uuh8raklHuAJsBV4FdxdzK4uPuoArILbWsw7p/jfNsEsK2QXQFSyre5t6M8DEgAAtFFciyMqNNd3OM+OX0P3e6l8/3uqfRC218CO6WU1YFXCrW9l9wFQB+gFzqHSeX4GEA5OgrFw+EI3NInD1cBGurLE4QQVfWOicEuECnlGnRdU2/oi74FpuXnO+hD1C8Bv+m7eY4BE4T+760QoqIQIvhZsuleGLD1K3ThdQcAIYRDfo6DoghlhRAv6Ld7AfsKV+qdxkghRHcoGLkXqK/eAXygLzfN/6zzEUKUA65LKecC89A51YXZA3QSurwgW3TXfC9/H4eAF4UQFfT62gghKgFhgJcQor6+3F4IYYbuexunz2HrC5g+Yf0M3SeWQFMhhJ9et/yuq63Ah/kHFuq6eth7yhGdQwrwZqHyrcD7evsLzielvAZcA8YCv5TUwOcd5egoFA/HZsBMCBGC7l/XIX35J8Am4C8g7j7Hf4Eu78AEmI6uO+GMEOICun79YCllpr7tO4AHcFkIcQZdLsA1I9sDj2/TvShs62xgJ7q8hrPAbnTJys8cQogoYArwphDiihAi4G88/XngDf21cEb3uRWnN/C2EOI0ushfvvP7EdBc/105ji7XqzDNgFNCiJPo8j1+KFwppTyB7kfyCHAY+FlKedIINj0U+vySN4GlevsPAVWklDnoIoTT9TZvQxfhmIXuszqErtsq3aBg42HoPrmBrvtqjV635fq2E4FSQj+VAtBcX/6w99Q3wFdCiP0UdeB+BmKAEL3c1wvVLUHX9XnuMWx8rhFSPotd6AqFQvHvQAjhC2zSd1coFI+E0M37dFJKOe9p6/KsopKRFQqFQqH4ByKEOI4uojXiaevyLKMiOgqFQqFQKJ5bVI6OQqFQKBSK5xbl6CgUCoVCoXhuUY6OQqFQKBSKp4YQYr4Q4rp+ZGZ+mbMQYpvQLX68LX+ovn5qhWlCiMtCtxxG8ekS7kI5OgrF38DzNneMsufZ5nmzB54/m543ex6TX7h79vhPgB1Syoro5or6RF/+MroZ3CuiG+JvaCqGIihHR6H4e3jeHmrKnmeb580eeP5set7sKTH62buTihUHA/kLAC8EOhUqXyR1HAKchBCe95OvHB2FQqFQKBTPGqWllHEA+nd3fXkZILZQuyv6snui5tFR/Nv5W+ZX+Omnn/62c/0dKHuebZ43e+D5s+lvtOd+a5k9Eq1NupdI3+1y1XsUjWDNkVLOKaEahuy5r15qHh3Fvx1Z7+0pT1sHo3Fs3nC08X/HYs5/DyYeF/Fb/NXTVsNoRPb5D0GbP33aahiNI+3+i//U5+f+iRg2nJbN/vu01TAaO3Z9Cs+Ao7NNu/KBOhSfIVy/PE4zKWWcvmtql5SyshDiJ/320uLt7iVbdV0pFAqFQqF4MMKkZK+SsYE7iwO/AawvVN5PP/qqIZByPycHVNeVQqFQKBSKh0CYGC04VFSuEEvRLT7rKoS4AowDvgZWCCHeRregaXd98z+A9sBldAsE93+QfOXoKBQKhUKheDAlj87cFyllr3tUtTTQVgKDHkW+cnQUiofE19OZ0b1bULVcaW6lZvLDyj3sOnmZ6v6efNCpEVV8S6PVajl+4Qrf/raTmynpd8kwNzPlkz4tCQooi4OtFVeuJzNz9T4OnI0CwM/TmQnvtMPbzQmA89EJfPfbTiLjio+8fDzqFpuxIisbegXD2KFwNQ5a9RTYWN/pjn+7Fwx8A4NcjYNPv4aQ8+BZGsZ+BI3q6ep+3wEzFkBiEliYQ+MGuno7W6OaA0AZW0e+DGpLHVcvcrQa/oy5wBfHtqGRksg+/yEjL4f8lMRN0ef45NCf95Xna1+KzR3f4c+YMIbt3wjAwGovMLB6o4I2pkJgYWpGvVU/cCs706j2eFo7MSogmBpOZcnV5rEj/ixTw37HzsyK7+r0xdfWDRMhiEq/wQ9hfxCSHGNQzuBK7WjjWRNbcytSczNZF3uUBRG7AHA0t3kkWY9DGQcHvmzRktqenuRoNPx56RJf7tpJHS8v5nfqXKStrYUFAzduZPPlS3fJ2dyvH2XsHQr2Lc3M2B0VyYD16/FzcuKTJk2o4+mFqYkJIfHxTNi1k8hbt4xuT9myLgwZ2paKlTxIScngp9l/sX/fRUp7OPLbskFkZuYUtF3220EW/7rfoJzJU3vj6+eGubkp8XHJ/LJgDwf26+xu0LA8vXo3ws/PjZycPA4euMTsmTuKyP47eVIRnSeNcnQUiofA1EQw+cNg1uw+zaDJq6lT2ZupQzrRe8KvONhYsmZPCIdmRZOn1TK6dwvG9W/LkO/XGJSTkJTKu/9bQXzSbV6s4cdXH3Sk5+eLiLt5mxvJ6YyetYm4m7cxEYLuLWrx3/c60Gv8r0a15/jmO9sZmdC4M7RtXrTN4U1g9hBPiBFfQK1q8NM3sOcQDB0Hm5eAsxPUqQG/zYBSTpCeAeMnww8/w5iPjGoOAF8GteVmVjpBq6fjYGHFry170rdSXX65cAyA9pvmE5328D94X9RvS8jNol3/s0IPMiv0YMH+RzVfIsjdx+hODsCogGBu5aTRfudX2JtZMb3+W3Qt24B1sUf58uxqYtNvIpE0da/K5Dr9aLfzv2ik9i45668eY274DrI0ubhZOjC9Xn8i02+wKyGUTE3OI8l6HL5s0ZLEjAwazPkJB0tLfu3ajT6BtVh46iQ1Zs4oaNfA25u5wZ3YHRVpUE67RYuK7O966y3+uHgRAHtLK3aERzBqy1bSc3MY3KAhc14NpvXCX4xqi4mp4MtJ3di44SSjPl5KzcCyTPxvd94fMJ/cPA0Ar3acjFbz4NzdmdO3EhWdiFYjqVLVi28n9+KNPj+SlJSOra0lS37dT8jpGMzNzRjzWTDvfdCC76dsfqDcJ8ITiug8af6ZWiseCSHELiFE22JlQ/XTbq8ygnwphPi10L6ZEOKGEGLTI8qJEkK46rcPFCr/VggRqn9/XwjR73F1flR8PZ1xc7JlydYTaKXkWFgspy9fpf0LARw4G8WOY5dIz8ohOyeP5TtOEVjRy6CcrJw85mw4SNzN20gJ+0IiuXYjhaq+pQFIy8wm7uZtAIQArVaLj7vTE7Vt626dU1Kv5qMfGxkL5y7B4LfAyhLaNIVKfjqZAJ7uOicnHxMTiL5qHL2L42PnyO/RYeRoNSRmpbMnLoKKTq4lktWxXFVu52axPz7qvu06+1VndcTZ+7YpKV7Wpdged4YcbR43c9I4mHgRf7vS5GjziElPRCIRCDRS4mhhg4O5tUE5MemJZGlyC/a1SHxsnAEeWdbj4O3gwB8XL5Kj0ZCYkcHuqCgqurjc1a5rQACbL10kMy/vgTKDynjjYm3D5ku6CEhIQjwrQs+Skp1FnlbL/BMnKO/sjJOVlVFtKVvWFRdXe1atPIJWKzl1MprQs1do1ab6I8uKiLhR4BBJKTEzM8XNXRex+mvHOY4eiSA7O4+0tCx+33SKatW9jWrLI2EiSvZ6yqiIzr+DpUBPYEuhsp7ASCnlXiPITweqCyGspZSZQGvgsX7OpJSNCu2+B7hJKbMfVY4QwkxK+eAn5oMlGSgRlC9z9w9pnUpliLh686GkOjvYUNajFOFXE4uU75w+EGtLC0yE4Kf1B+5xtHFYtxmC2+ocq8K07KEra1QXRn5Q1GHJ53Ik+HiCrc2dssoVdOX5HA+B9z+BtHSBtZVk+sQnY8eCsGO84luVQwnROFpY0dSrPFNO7ymoX96mNyZCcPzGVSYe38HV9BSDcuzMLRge2ITe23/jtQqB9zxfkLsPrla2bI4JM7otAMujD9DGsybHkyJxMLemkWtlfrq0raB+yYuD8bV1w9zEjHWxR7mVc3dXaT79/JrwVvnm2JhZcjUjiS3XThepfxRZJeWXUyfpWLkyh67E4mhpRVNfX6YeKPrdtjIzo13FSgxYv+6hZHYNCODPS5fu6RQFeZfhenoayVlZj61/YQz9dAsh8PNzK9hfuuxDJJLjxyL56ce/uJ1y76jfpK+6U6euHxYWZhw5Es7FC4YHEdUM9CE6KtFg3d9C8YfEPwTl6Pw7WAVMFEJYSimz9fMVeAFXhBBnpZTVhRCm6LLcmwGWwEwp5U9CiFnAZinlBiHEWuCWlPItfSa8n5RyrP4cfwId9Ofqhc65agy6xdmA+YA/uiz5d6WUIUIIF307N+AIhZ4fQog0KaWdEGIDYAscFkJ8BVQF0qSU3wkhygMz9cdnAAOklGFCiF/QTSdeGzgBjHjcDzAqPomk1Az6tavHkm0nqFfFhzqVvTkWFlukXQVvV9559QVGTF9/D0l3MDU14csBL/P7/nNExxftUmk+eBZWFmZ0fLFaQYTnSXAtAY6ehomj75Q5OcLKnyRVKkDybfjyexg5EX7+7u7jMzLBzq5omb0tJBR6FtetCUf/gIQbkpWbwMvjydhyOCGGnhUCOdNjBGYmJqwKD2FrrK5Lo8fWxZxMvIqVqTkf12rKvObd6fD7PDQG5hEbHtiE5ZdPE5eRet/zdfGvwZ8xYWTk5d63XUk5kRRJsHd9drb6HDMTUzZdPc6u6+cK6nvvn46FiRnNSgdgLkzvK2tR5B4WRe6hkr0nTUsHkJZX9If/UWSVlMNXrtCjeg1CBn2ouz6hoWwNv1ykTbuKFbmVmcnhK1ceKE/nFFXk3Q2G7zUPOzsmtGjJpN27jaJ/YWJibnLrVjo9ejZk1coj1KpdjpqBZTl1MpqUlAw+eG8+ly8n4Ohgw5Chbfl0TDCfjFp2T3lj/rMSU1MT6tb1xaesC4amt6tb15c2bWvw4QcL7678mxAm/8xOoH+m1opHQkp5E50jkZ+C2hNYTtHZJN9GNx9BfaA+MEAI4QfsQe+woJtmO0C//RJQOBq0DOgphLACagKHC9VNAE5KKWsCnwL5nezjgH1Sytro5kYoa0D3V4FMKWUtKeXyYtVzgMFSyrrAx8CsQnWVgFZSyrucHCHEu0KIY0KIY3PmPNzknBqNlo9nbODFmv5smfIefdrUZdvRi1y/lVbQxtvdiWlDuzB56U5OXbp/QEsI+PKdduTlafnfb38ZbJOVk8fqXaeZ8HY7StkbvysBYP0WXR6Nd6GVYmxtoHoVXX6Oq7MueXj/UUGagT/5NtaQXqw8LR1sDahb2g1eCoIRE4xrA+g85IUte7Al9iLVln1H7RXf42hhxSe1dYlHR67HkqvVkpqbzYRj2/Cxc6SC493RuKql3HnRw5f5YUfuez5LUzPal63C6ogzxjcGXbRwWr3+7EoIpem28bTe8SX2ZtYMrlQ0izxHm8fWuBD6+Telov2DPciLqXFka3J5t2Kru+oeVdajIICFnbuw5fIlqs+YTp3Zs3C0smR048ZF2nUNCGDt+XOGhRSjbYWKpGRlGXSKnK2tWdilK4tPn2LjhQvGMKEIGo2WcWNX0aBhBVatGUL31xqwe9d5Em/cJiszl4sX4tFqJLdupTPthy3UD/LHxsbigTKPHImgXpA/LzSqWKSuaoAXn37WiQnj1nLlinEHJjwSQpTs9ZRRjs6/h/zuK/TvS4vVt0E3CdMpdE6KC7rVYfcCjYUQAcA5IEE/S+ULQEHcWUoZAviii+b8UUz2S8Cv+nZ/AS5CCEegCbBYX/478NCZokIIO6ARsFKv809A4YXdVkopNYaOlVLOkVLWk1LWe/fdh19X7/KVRN77ZgWtPprN4KlrKOPmSGikLsTs4WLPrBFdmbfxEH8cPP9AWZ+92QZnB1tGzdqIRnPvpE8TIbCyMMe9lN092zwO67dAp7b3b5P/nDL0L7OCH8TG6RKN8wkL15UbQqOB2Gsl0/V+OFlaU8bWkUUXjpOj1ZCck8nK8BCalSlvsL2UhrsfGpYuh7edI/s7D+JI18EMqNqAdj6V2di+6FQd7Xwqk5KTyaEE449OAnAwt8bD2okVMQfJlRpScjPZdPU4jdwqG2xvJkwpY+38ULIf1PZRZD0sTlZWeDk48OupU+RoNCRnZbEqNJRmvne+KJ52djTw9mHNuYdzdLoGBLDm/N33moOlJQu7dGVHRDizjtzfYX0cIiJuMHzoYjoHf88no5bh6elEWJiBLif9fSMe8gff1NQEL687/cQVKpTmy0nd+e5/mzh5IsoImj8GJiYlez1lnr4Gir+LdUBLIUQdwFpKeaJYvUAXHamlf/lJKbdKKa8CpdBFg/agc3xeQ9d9VDy2vwH4jrudqPutTVLSNUhMgORC+taSUlYtVG/0JIMK3q5YmJliaWFGn7Z1cXW0ZeP+c7g52fHjx91Z+ddpVu8OeaCc//RtiZ+nC8OmrSM7t2huQYOAslQuqxvqa2tlwbAezUjNyCLymvH/xZ08C9cToV2x0Vanz0FkDGi1cCsFJk2DoFoSewO+lp8PVKkAM3+B7GzYtgcuRuiSkgE2btN1j0kJV+Ph+5+hYR2jm8Kt7ExiUm/Ru1JtTIXA3tySrv41OH/rOhUdXalayh0TIbAxM2dMnZYkZKZyOeXuPKqll07SdN2PtP99Pu1/n89vl06y82o4b+wo2u3Q1b8Ga55QEjJASm4GVzOS6OrTAFNhgp2ZFR3K1OFSahzVHX0IdCqHmTDF0sSMfn5NcLa042xK7F1yBILOPkHYm+mScQMcvelWtgFHk8IBHknW43ArK4uYlGR6Bwbqro+lJV0CqhF240ZBm85VAzhx7RoxKYZzpwrjYWdHQx8f1pwLLVJuZ2HBwi5dOX7tGt/s22dUG4rj7++GuYUplpZmdO/RAGcXO7ZsDqFKVS+8fZwRAhwcrBk0uDWnTkaTnn53iqFPWReCgvyxsDDD1NSEVq2rUbNmWUJO6xxoXz83vv6mJzOmbeXgwct3Hf+38w+N6KgcnX8JUso0IcQudLkyxR0R0CUqfyCE+EtKmSuEqARclVKmAweBoUALdJGeVfpXceaj6/46I4RoVqh8D9Ab+FJfniilvC2EyC+fKIR4GZ1D9bD23BZCRAohukspVwrd36WaUsrTDzy4hLR/IYBOjatjZmrCyUtXGTRlNbl5Gjo1qY63uxMDXm3IgFcbFrRvMkg3ZLZ/+yBqVSrDR9+vxcPFnq7NAsnOzWPLlPcK2v530XY2Hw7DzsaSka+3wL2UHdm5eZyLTGDw1DXk5BkMTj0W6zZDq8ZFE4kBrlyDqXMhKVlX16gefPf5nfrxk/Xv+k7BKZ/Df76GBh118+h8P0E3igsgPAom/wS3U8HBHpo0gGEPH0R7JN7fs4bP67Xi/YCGaKTkUEI0E49tp5KTGxMbtMXDxp6MvFxO3LjK2ztXkqcfPj2w2gvUd/eh/84VZGnyyNLccT7T83LI1uaRVGj4eGlrO17wKMdnR7bcpYMxGXVyCcOrdqCff1O0UsvxpAimhv2Or607H1ftiJeNM3laDeFpCQw/vpDEbN3/jraegfT3b0bP/T8A0Mw9gIEV22BuYkpidiorYg6yIlo3RN7cxOy+sozJBxs38lnTZrxXr77u+sTGMnH3roL6zgEBzD127K7jgqtU4YOgoCLDyjtXrcrJuLudojYVKhDo4UFFFxe6BgQUlLddtJBrqca1qVWbGrTvEIiZmSlnQmIZ9fFScnM1eHo68faAZjg52ZCRkcPxY5FM/PJOcvXQ4brux++nbEYA/d5szGe+rmi1kitXkvhywlouXUoAoPtrQTg62fDxqA58PKoDAAnxKbzdf65RbXlonoERVCVBLer5L0II0RlYA1TVJ+36ol9ETQhhAkwEXkEXgbkBdJJSpugTj7+UUnoJIcyBZKCvlHKNXm6alNKu2LmaAR9LKTvqk5EXAH4YTkZ2BXYDXYC6UsrEwjKLbY/nTjKyHzAbXZeVObBMSvmFPhl5k5TyYYbOq0U9n2HUop7PNmpRz2cbYy/q+bLb+yVyGP688eNT9ZBUROdfhJRyLYW+9FLKKKC6fluLLlH4rqewlHIeME+/nYtuFFTh+rs6NaSUu4Bd+u0kINhAm5vocoPyGWZIZrHt8YW2I7mTYF1Y7pvFyxQKhULxmPxDIzrK0VEoFAqFQvFgnoF8m5KgHB2FQqFQKBQP5h/q6KhRVwqFQqFQKJ5bVERHoVAoFArFg3kG5sQpCWrUleLfjroBFArF84zxRl15DynZqKsr09SoK4VCoVAoFM84/9AcHeXoKP71NH3l26etgtHYvXEk1UdOfdpqGI2z3w6jcafn5/rsXTeS1ibdn7YaRmObdiWV/vv8fN8ufjqMl72HPG01jMafV6YZV6BydBQKhUKhUDy3qHl0FAqFQqFQPLeoiI5CoVAoFIrnFvHPHHWlHB2F4iEp5+3M0PdbUamCB8kpGfy4YDd7D10q0uaNno14q/eLDB+7guOnow3K+X5SD/zKuWJubkpcQgrzl+xn/+E7KxO3alqVAf0a4+hgzbFT0fzvh82kpmUZ3R5/d2fGdG5OQJnS3ErPZPLve9hxVreqdYMKPozp3AJPJ3vOxMQzZvkW4pINL4o4/71uVPBwwcLMlKtJt5mx9QA7QyMK6t9tEUT3hjWwt7Zkb1gU41dtJz07x+j2lPN2Zti7rahc3oPk2xnM+mU3ew9fwtfbhTFD21PGQ7fS6IXwBH6Yu4OoK3evXn4/OQAe7g6snPMeGZl39P9t7REWrjj42PoHD2pHmzea4VujLLuW7ufbt2YW1NVuUZ0PZ7yDe1lXwg5f4tv+M7kekwiAuYUZQ2YPoHHXhmRn5LDi2/WsnrrpnufpMrQDPUZ1wtLagr1rDjHtg7nk5ugWMi1dzo2P5w+kSoOKXI9JZMbgeZzcceaxbQMo4+jA+LYtqFXGkxyNhi1hl5i0bRcaKWlYzofRLRtTrpQTtzKymHPwKMtP3fu8AaXdGdO6KQEe7mTm5vLjgaMsOnqy4DxfdWxDoJcHcbdT+WLLTg5ExRjFhsL4VCjNwEndqVjDh5SkNOZNXM+BzSEANO5Ymz4jXsbV04nEa8n88r+NHNxi2J53xgbTsG0NSrk5cDM+heXTt7Jj9dGC+iH/60GNhhXw8nNj6ojf2L7yiNFteWj+oV1X/0z3TKH4mzE1EUwa25mDRyN45fXpfDdzK2NGtMfb686C614eTjR7sRKJN9M22An4AAAgAElEQVTuK2va3L/o0m8W7XtM47sZWxk7vAPOpXTLh/mWdWHEwDZMmvIHnfvOIjs7l2EftHoi9kx781V2n4/kxXGzGb9qO1/1eplyrk442Vjxfb9XmLHlAC+Om03olQS+69PhnrK+3rCL5l/OoeFnsxi/ajtf93wZV3udPa/WDaBj3ar0nbmc5l/OxdLcjE87NX8i9nz1n84cPBZBh77T+XbWVj4b1h4fr1Ik3krjs2/W077PdDr2m8G+I5cZ//ErjyynMO17T6Ntrx9o2+sHozg5ADevJbFk0mq2LNhZpNzBxZ5xq0ey8PNldHHpz8XjEYxdVrAsHH3Hv0aZCp708R3IyBbjeW1kMPXa1jJ4jnptAuk5uhOjWk2gj99APP1K029Cj4L6T38byuVTUXR1fYsFY5fy+coROLo6GMW+8W1bcDMjgxenzSF43mLql/Xm9bqBmJmYMLPrKyw7eYY6k2cxdN3vfNKqCVXcXQ3KKWVtxbyenVl28gxBU3+k9ewF7I+486diSvDLnI+/TtDU2UzZtZ9pXTpQysbaKDbkY2JqwufzB3BkeyivVf+EaaOWMXJaX8r4ueHi4cjIaX2Z+8VaulYZxc8T1zFqxhs4uty1JCAAWZk5jH9zDt2qjmbysMW8N6ErVev6FdRHnLvGzE9XcvnMFaPaUCKEKNnrKaMcHcVziRCimRCikbHklfV2wcXZjhXrj6HVSk6GxHD2/DXaNA8oaDP0/Zb8+MtucvM095UVEXUDjVY3HYWUElMzE9xd7QFo3TSAA0cvExJ6hcysXOYt3k+TFyphbW1uLFMA8HNzxt3BlkV7TqCVkiPhsZyKusYrdavSqkZFwhNusjXkEjl5GmZtPUhlLzf83EoZlHUxLvGOPUjMTE3wcNI91JsF+LP2yFniU9LIzMll/s6jtAushJW5cYPJ+ddn+Qbd9TlxJoYzYddo0yyAtPRs4q/fBnQTimi1kjKeTo8s50mzb+0RDqw/yu2bRSNnL3VpQFRoLHtWHSI3O5dfx6/AP9AXn8peALTu25QlE1eRlpxOTNhV/vh5O23eaGbwHK37NWPz/L+IPneFtOR0lkxcVdC2TEVPKtTxY9G45eRk5bBvzWEiz8TQuGsDo9jn7eTAn+cvkqPRkJiewd6IKCq6ueBobYW9lSXrz5wH4ExcAhGJSZR3dTEop39QXfZFRLMxNIxcjYb0nFzCbyYB4OvsRDUPd6btPUh2noatFy5z8cZN2lauaBQb8vGpUBqX0o6snbsTrVZy+sAlzh2NpEXX+rh6OpF+O5NjO3X2HP3rHNkZOXiWM+y4LZ78J1fCryOl5MLJaEKPhFO1rm9B/aaFezm1/yK52blGtaFE/EMdHdV1pXjmEEIIdJNZakt4vBnQDEgDDhhHJwNlgH85NwCavViJ3FwNh49HPpS8rz7vQt3AclhamHH4eCQXLscDuojO2bBrBe2uxSeTm6fBx8uZi+EJj21Hge73sKeihyt2lpZciLtRUJ6Zm0fszWTKe7gQeeOWQXkz+wfTsGJZLM3N2HchitArCXfOU+hkQggszc0o5+rEhbjEJ26Pf1m3gv0/lgzG2soCEyGYt3RfieUArJz7HlLCsdNRzPplNympmY+h/f3xreZDRMidiEVWRjbXwuMpV82HWwkpuJZxJrxQN2nE6WheDA4yKKtcNW8ObLjTLRJ+OhpnDyfsne3wreZDfEQCmYW6SSNCoilXzccodiw8eooOAZU5HH0FRytLmpT35YfdB7iZnsHG0DC6BlZj6YkQanp54OXowPHYqwblBJbx4OKNmyzr14NypZw4fS2eCVv+Iu52KhVdXYhNTiE9545TEJZwg4puzkaxIR+Dv90CfKt4smTKn8ReTqBB6+oc3RFKg9bVyc3JI/L8NQMHFcXCypxKgWXZtMjw9/Op8ww4LSVBOTqKZwIhhC/wJ7ATeAGoJYSYAjQHbgE9pZQ3hBADgHcBC+Ay0FdKmSGE+AVIAmrr318ENEKIPsBgKeXex9Ev+koSySkZ9OoSxIr1x6hdsyyB1X04eSYGaytzBvRrwojPVz60vP98sQZTUxPq1SpHWW9n8icot7a2ID09u0jb9IxsbKwtHkf9u4i8foubaZn0b1aPX/ecIKiCN/X8vTkSHouNpTlJaUV/uNOycrC1vLcOgxasx8zEhIYVy+LnXqrAnn1hUfRvVo8tpy9yOzOLt5rVA8DKwrgRqvzr83rnIJZvOEadGmWpVc2Hk2fv5Ga07z0dK0tz2rWoRoI+wvOoclJuZ/LOiEVcjryOg701w99rxefDOzBiwiqj2lMYKzsrUm4U1TcjJQMbe2us7awASE/JKKhLT8nA2t7KoCxrO6u72gIFsgrX5de7ehnHSTgac4XXalXnxMeDMDMxYU1IKNsu6nLCNoVeYFKHVoxp3QyA8Zt3EJ9quAvYw96eah7u9F+6hgvXExnVojFTgtvT69fl2FhYkFos/ys1O5vS9oa7jUpK7OUEkhNT6fZBS9bO3Ulgo0rUaFiBkAOX0Gol21cdYfSMN7CwNCM3V8N/35tPduaD89IGf/UaEeevcXzXeaPqazRUjo5C8dhUBhZJKWvr909IKesAu4Fx+rI1Usr6UspA4DzwdqHjKwGtpJRdgR+BqVLKWsWdHCHEu0KIY0KIY3PmzHkoxTQaLWMmraNhfX/WLhpIj0712LnvAjcSU+n/+ots3RlKfELKIxmr0Wg5fDyS+rX9aBRUHoDMzBxsbSyLtLO1tiyS/GoM8rRaPlq4gSZV/Nj1+bu80aQuW0IukpCSRkZ2LnZWRZ0aW0uLByYQ52m17LsQxYuVfWkW4A/AmqNn+fPUBRa83411I/pxJDwWgIR7JDaXFI1Gy6dfreOFuv6sXzCQnsH12Ln/AteLdQNlZeeyfvMpxnzUHidHm0eWk5mVy4XwBDRaya2UDKbO2UFQbT+jO6JFdE7LwsahaI6JjYMNGamZBdEX20L1Ng7WZKYaTl7PLCYrfztflo1D0c/ExsGajLTHj1YJYF7Pzmy9cJnAb2cQNHU2DlZWjGzeGH+XUnzfuT2jNmyh2tc/0GHOIt5pWI9m5f0MysrOy2PbhXDOxCWQo9EwY98h6vp4YWdpQUZODnbFHHI7SwvSc4x7/2jytHzxzs8EtazGbycn0eXd5uzddJLE+GRqvVSJt8cEM7r7NF7xG87obtMY+m0v/APK3Ffm22ODKVfZi6/eX2BUXY2K6rpSKB6baCnlIf22Fliu314MrNFvVxdCTAScADtgS6HjV0op758gA0gp5wD5Ho5csvHhZt6NiLrBR/9ZVrA/85vX2fxXKMEv18LN1Y7g9jr/zMnBmvGjX+G31UdYuvrBIyRMTU0KckaiYm5S3u9ON4lnaUfMzU2JvZb0UDo+ChfjEun/450o1OJBPVh//BxSQnC9Ozkp1uZm+Lg4Eh5veJRScUxNTPBxcQRASpi59SAzt+oSdhtVKkt8cioJt++fsF0SwqNvMHjsnesz62vd9SmOiRBYWZrh5mxHcrEIxqPIAV2OFTzZZ3lUaCxt+jUt2LeyscSzfGmiQ2NJS07n5rUk/AN9ObFdN+KnfKAvUaGxBmVFh16hfKAve1YeLGibFJ9MalIaUaGxePq7Y21nVeBA+dcsx857dPM9Ck7WVng5OrD4+ClyNRqSMzWsCQllaNNGhMTFE3nzFvsidd1vkUm32HU5kiblfdkVfndX8IXrichCS9QVXAMElxJv4uPkiK2FeUH3VRV3NzaGXnhsG4oTdf4ao7rdmXl48rphbF95mPLVvDl7+DKXQnTX4OLpGMJORlO7cWUizhnujusz4mXqNavKqG7TyHgCIyyNhXwGnJaSoCI6imeJ9PvU5T/ZfgE+lFLWACYAhWP09zv+sfH3dcPC3BRLSzN6dK6Pi7Mtm7efZfjY5fQf9AvvDFnIO0MWcjMpjckzt7Lu95N3ySjr7UyDun5YWJhhampC62YBBFbz5tRZ3UNx2+5zNAoqT82AMlhZmvNW75fYc/AimZnGT0Ss5OmKhZkpVuZmvNm0Lq4Otqw7eo4dZy9TobQLrWpUwMLMlPdbN+RiXKLB/Bw/t1K8VNkXSzNTzExM6FinCvX8ynAsQvdAd7C2LHB6/N2dGflKU37cfpgnsZZw+XL662NhRs/g+riUsuXPv85SL7AcFf3cMTER2Fhb8OFbzUlNzyb6HsPL7yUHIKCiJz5epRACHOyt+GhAS06ciSE94/EjBiamJphbmmNialJke//aI/hWL8tLXRpgbmlOn8+7ERkSTewFXc7Htl/30HtMV+ycbPGp7MXL77Rk68JdBs+x7dfdtHurBWWremPnZMvrY7oWtL16KY7wU1H0Hdcdc0tzXuwUhH/NcuxdffixbbuVmUXsrRRerxOIqRDYW1rSuUYAYQk3OBd/nXLOTjQsp8sF8nFypHkFf8Ku3zAoa3VIKK0rVaCquxtmJiYMfKkhx2KvkpqdTVRSMucTbvDhSw2xMDWldaXyVHZ3ZcuFSwZlPQ6+Vb0wtzTD0sqcru+1wNndge0rj3DxdAzVgsoXRHDKV/OmeoPy98zReW1Qa5p1qsunr88iNflux9vM3BRzSzMQomBbPC2Hw6SEr6eMiugonlVMgG7AMuB1IP9vpT0QJ4QwB3oDhv8iQSpgnHGxeto0D6Bjm5qYmppw5twVRny2ktw8DbmpRYNIGq0kNS2bzCydczJ8YGsApszahgDe7NWI8aNc0Wi1XI27xYRvNnIp/Dqgi+hMmbWNsR93xMHeiuOnovn6h83GNKOAV+pUpUtQdcxNTTgeeZUBc1aTq9FwKz2TYb9u4tNOzfm618uciYlj5JI/Co77vEtLAL5YswMhBAPbNKS8ewc0UktMYjIfL/md81d19pSytWZG/2A8nOy5lZ7J4n0nWXXYOPOyFKdtswA6ttZdn5BzVxg+Tnd97GwtGTqgJW4u9uTk5HH+cjwfT1hFTq7uuvXt1oCaVb0Z+eXq+8oB8PRwZFyfjpRytCEjI4ejp6OZMPnec9Y8Cr3HdqXfuNcK9lv1bcKiCSv4dcJKJnT7jg+nv80nvw4h7PAlJvX6vqDdonHLGTJ7AIujZpGTmcPyb9ZzbMspANx8XJkXOpW3qw3jRmwix7acYsW36/nur3FYWFuwb/VhFo1bXiBrUq/vGblgEGuTfuF6TCJfdJ9MSqLhfKZH5cPVG/m0dVMGNKyHVkoORcfy3+27ScrI5NPftzG2TTO8HBxIy85mQ2gYK0/pnMt6PmWY26MTtb/TzSt0KDqWKbv3M6dHJ6zMzDh+5RrD1935fg5b9wdfd2zDseEDuXb7NkPW/M6tDOMni7fsWp+2PV/AzNyUs0fC+fT1meTm5HHm0GWWTPmTMXPewsnVnpSbaSyfvpUTe8IAaN65Hj0+bM37Lb8CoP9/XiE3O495ez8rkL18+laWz9gGwKTfBlLzBd2osWr1/fnom16M6j6NMwcv87fzD43oCPkk/lopFI+IPhl5k5Syun4/DZgKtAdSgB76ZOQPgFFANHAGsJdSvqlPRt4kpVylP74SsApdF9j9kpGlWtTz2UUt6vlsoxb1fLbRL+ppNO+kXc2xJXIYNodMfKoekoroKJ4JpJRRQPViZZ8BnxUrmw3MNnD8m8X2LwI1ja2nQqFQ/Gv5h0Z0lKOjUCgUCoXiwShHR6EwHlJK4058oVAoFIrH4p866ko5OgqFQqFQKB7MMzCCqiQoR0ehUCgUCsWD+YdGdNSoK8W/HXUDKBSK5xmjeSdt608o0fNyy9FxatSVQqFQKBSKZxuVo6NQ/ENp3vZ/T1sFo7Fzy2g1j84zjJpH59nmOZ1Hx3ioHB2FQqFQKBTPLSqio1AoFAqF4nlFdV0pFAqFQqF4fvln+jnK0VEoHpayPi589GFrKlX0ICUlgx/n7mTfgaKrIvfr/SL9+73EiE+WceJktEE55f3dGTKoFf5+7mRm5LDpz1MsWnIAgKpVvHjrjcZUqlgarUZyKiSG6bO3k5Rk/IXZ/d2dGdO5OQFlSnMrPZPJv+9hx9lwABpU8GFM5xZ4OtlzJiaeMcu3EJecalDO/Pe6UcHDBQszU64m3WbG1gPsDI0oqH+3RRDdG9bA3tqSvWFRjF+1nfTsx1/tuzjlvJ0Z9m4rKpf3IPl2BrN+2c3ew5fw9XZhzND2lPFwAuBCeAI/zN1B1D1WL7+XHAAPdwdWznmPjMw7+v+29ggLVxx8bP2DB7WjzRvN8K1Rll1L9/PtWzML6mq3qM6HM97BvawrYYcv8W3/mVyPSQTA3MKMIbMH0LhrQ7Izcljx7XpWT733QqNdhnagx6hOWFpbsHfNIaZ9MJfcnDwASpdz4+P5A6nSoCLXYxKZMXgeJ3cYZxHWMo4OjG/bglplPMnRaNgSdolJ23ahkZKG5XwY3bIx5Uo5cSsjizkHj7L81L3PG1DanTGtmxLg4U5mbi4/HjjKoqMnC87zVcc2BHp5EHc7lS+27ORAVIxRbCiMT4XSDJzUnYo1fEhJSmPexPUc2BwCQOOOtekz4mVcPZ1IvJbML//byMEthu15Z2wwDdvWoJSbAzfjU1g+fSs7Vh8tqB/yvx7UaFgBLz83po74je0rjxjdlofmHxrR+YemFin+TQghdgkh6j1NHUxMBBPHd+HQ4XCCu/3A5O838+nojniXKVXQxsvTiaaNK5N407BDkM/YT14h5Ewswd1+YOjI33i1Q20aNawAgL2dFZv+OEWvfj/Ss99sMjNzGD2ivdHtMTURTHvzVXafj+TFcbMZv2o7X/V6mXKuTjjZWPF9v1eYseUAL46bTeiVBL7r0+Gesr7esIvmX86h4WezGL9qO1/3fBlXe1sAXq0bQMe6Vek7cznNv5yLpbkZn3Zq/kTs+eo/nTl4LIIOfafz7aytfDasPT5epUi8lcZn36ynfZ/pdOw3g31HLjP+41ceWU5h2veeRtteP9C21w9GcXIAbl5LYsmk1WxZsLNIuYOLPeNWj2Th58vo4tKfi8cjGLtsWEF93/GvUaaCJ318BzKyxXheGxlMvba1DJ6jXptAeo7uxKhWE+jjNxBPv9L0m9CjoP7T34Zy+VQUXV3fYsHYpXy+cgSOrg5GsW982xbczMjgxWlzCJ63mPplvXm9biBmJibM7PoKy06eoc7kWQxd9zuftGpCFXdXg3JKWVsxr2dnlp08Q9DUH2k9ewH7I+78qZgS/DLn468TNHU2U3btZ1qXDpSysTaKDfmYmJrw+fwBHNkeymvVP2HaqGWMnNaXMn5uuHg4MnJaX+Z+sZauVUbx88R1jJrxBo4uhid7z8rMYfybc+hWdTSThy3mvQldqVrXr6A+4tw1Zn66kstnrhjVhpIgTUr2eto8AyooFM8+ZX1ccHWxY+Wao2i1kpOnYzgbepXWLe+sQzpkUGvmzNtFXq72vrI8Sjuy/a9zaLWSa3HJnAm9gm853UP9yLEIdu+9QEZGDtnZeazdcILqAWWMbo+fmzPuDrYs2nMCrZQcCY/lVNQ1XqlblVY1KhKecJOtIZfIydMwa+tBKnu54edWyqCsi3GJaLS66TUkEjNTEzycdA/1ZgH+rD1ylviUNDJzcpm/8yjtAithZW7cYHJZbxdcnO1YvuEYWq3kxJkYzoRdo02zANLSs4m/fhvQRd61WkkZT6dHlvOk2bf2CAfWH+V2MUf5pS4NiAqNZc+qQ+Rm5/Lr+BX4B/riU9kLgNZ9m7Jk4irSktOJCbvKHz9vp80bzQyeo3W/Zmye/xfR566QlpzOkomrCtqWqehJhTp+LBq3nJysHPatOUzkmRgad21gFPu8nRz48/xFcjQaEtMz2BsRRUU3FxytrbC3smT9mfMAnIlLICIxifKuLgbl9A+qy76IaDaGhpGr0ZCek0v4zSQAfJ2dqObhzrS9B8nO07D1wmUu3rhJ28oVjWJDPj4VSuNS2pG1c3ei1UpOH7jEuaORtOhaH1dPJ9JvZ3Jsp86eo3+dIzsjB89yhh23xZP/5Er4daSUXDgZTeiRcKrW9S2o37RwL6f2XyQ3O9eoNpQIIUr2esooR0fxTCGE+EwIESaE2CaEWCqE+Fhf1UcIcUAIcVYIEaRvO14IsVAIsVUIESWE6CKE+EYIcUYIsVkIYW48vQzqip+v7uHVtHFl8vI0HD4acXfDYqxed4w2rapjamqCj7cz1aqW4fjJKINta9bwISracBfL42DQHqCihysVSrtwIe5GQXlmbh6xN5Mp72H4hwdgZv9gjv93MMuGvM7RiCuEXkm4c55CJxNCYGluRjlXw45GSbmXPf5l3Qr2/1gymO0rhzN0QEt+XXWoxHIAVs59j9U/v89/BrfD0d640YLi+FbzISLkTsQiKyOba+HxlKvmg52TLa5lnAk/fac+4nQ0vtV8DMoqV827SNvw09E4ezhh72yHbzUf4iMSyEzLuiMrJJpy95D1qCw8eooOAZWxMjOjtJ0tTcr7sjc8ipvpGWwMDaNrYDVMhKBWGU+8HB04HnvVoJzAMh4kZ2WxrF8PDn70Hj92D8bTwR6Aiq4uxCankJ5zxykIS7hBRTdno9iQj8HfbgG+VTy5dDqG2MsJNGhdHRMTwQtta5Cbk0fk+WsPlGthZU6lwLJEX4w3qr7GQoqSvZ42ytFRPDPou6e6ArWBLkDh7ipbKWUjYCAwv1B5eaADEAwsBnZKKWsAmfpyoxATm8St5Ax6dg/C1NSEenV8Cazhg5WlOVZW5rzTvwkzZu94KFkHD4fTtHFltmwcwaJ5A/hjSwgXDDzY/P3c6Ne7ET/+vNOAlMcj8votbqZl0r9ZPcxMTGhUqSz1/L2xMjfDxtKc1MyiOTRpWTnYWlrcU96gBetpMHYm7/+8lv0XosifcH1fWBRdg6rjVcoBOysL3mqmu6RWFkbzQQGIvpJEckoGr3fWXZ/6tXypVc0HK8s7kaP2vafz8uvTmDp3O5cirpdITsrtTN4ZsYjuA37inRGLsLG24PPhRvuaGcTKzor0lIwiZRkpGdjYW2NtZwVQpD49JQNreyuDsqyLycrfzpdV/DzpKRnY2BnHkTsac4UKri6c+HgQe4e8y9m4BLZd1OWEbQq9wKCXGnB29BB+6/saU3fvJz41zaAcD3t7OteoyqRtu2g642euJKcwJVjXvWtjYUFqsfyv1OxsbC3u/d0tCbGXE0hOTKXbBy0xNTOhTpMq1GhYAUsrC7RayfZVRxg94w02RExh1Iw3mDZ6GdmZD85LG/zVa0Scv8bxXeeNqq/ReEIRHSHER/o/saFCiKH6svFCiKtCiFP6V4n78JWjo3iWeAlYL6XMlFKmAhsL1S0FkFLuARyEEPkhgT+llLnAGcAU2KwvPwP4GjqJEOJdIcQxIcSxOXPmPJRiGo2WzyasoWFQeVYv+5DXugaxa08YNxJT6d/vJbbtCCU+IeWBcuztrfjfxO4sWrKfNh2/o3vvWdSv60dwx9pF2nl5OfH1xO7MmL2DM2eN3zefp9Xy0cINNKnix67P3+WNJnXZEnKRhJQ0MrJzsbMq+sNga2nxwATiPK2WfReieLGyL80C/AFYc/Qsf566wIL3u7FuRD+OhMcCkHCPxOaSotFo+fSrdbxQ15/1CwbSM7geO/df4HqxbqCs7FzWbz7FmI/a4+Ro88hyMrNyuRCegEYruZWSwdQ5Owiq7YeNtXF/SIvonJaFjUNRZ8PGwYaM1MyC6IttoXobB2syU7MwRGYxWfnb+bJsHIp+JjYO1mSkZT62DQKY17MzWy9cJvDbGQRNnY2DlRUjmzfG36UU33duz6gNW6j29Q90mLOIdxrWo1l5P4OysvPy2HYhnDNxCeRoNMzYd4i6Pl7YWVqQkZODXTGH3M7SgvQc4ya/a/K0fPHOzwS1rMZvJyfR5d3m7N10ksT4ZGq9VIm3xwQzuvs0XvEbzuhu0xj6bS/8H9AF/fbYYMpV9uKr9xcYVddnHSFEdWAAEAQEAh2FEPl9jVOllLX0rz9Keg416krxLHE/17/4Giv5+9kAUkqtECJX3lm8Tcs9vt9SyjlAvocjl65+uJmRIyJvMHTk0oL96VP7sHXbGV7tWBs3V/sCZ8XR0YZxY4JZuuIwy1YcLiLD08MJrVaydXsoAImJqfy1+zwNgvxZv0k3aqS0uwOTv+rJr78dYNuO0IfSrSRcjEuk/48rC/YXD+rB+uPnkBKC693JSbE2N8PHxZHw+IfrQjM1McHHxREAKWHm1oPM3KpL2G1UqSzxyakk3Db8b/1xCI++weCxywr2Z339Opv/uvvzMxECK0sz3JztSC4WwXgUOQD5X7cnmYYQFRpLm35NC/atbCzxLF+a6NBY0pLTuXktCf9AX05s1434KR/oS1RorEFZ0aFXKB/oy56VBwvaJsUnk5qURlRoLJ7+7ljbWRU4UP41y7Fz6b7HtsHJ2govRwcWHz9FrkZDcqaGNSGhDG3aiJC4eCJv3mJfpK5LLTLpFrsuR9KkvC+7wiPvknXheiKy0OOg4BoguJR4Ex8nR2wtzAu6r6q4u7Ex9MJj21CcqPPXGNXtzszDk9cNY/vK/7N33uFRVG0fvs9mk930HpJASKcFCEKEIC2UgLSXEroUQUBfQAVpCkhRERURDc03CEpTkA42mvQaegikVyAJJCQhyaZnvj8WluJGICwX6Dc31147M+fs75yH2Z0885znzDmJt18NLp2MI/ai9hzEXEgh6lwyL7WqTcJl/cNxgyd2JiCoLlP6hKLJ1++kvhA8m+95XeCEJEkaACHEQaCXIRuQIzoyLxJHgO5CCLUQwoIHh576AwghWgK5kiQ9OnxiYLw8HTE2NkKlUtKvT1Ps7cz5Y88lJk5dz/A3VzJyzA+MHPMDWbfy+eqbXWzbcfYvGlev3UIIaN+2LkKAra05bVvXIf7OUIqDvQULPh/Atp1n2fnr+WdqTy0XB0yURqiNlbzephMmbbwAACAASURBVAkOVuZsC7/Mvktx+FSzp0MDH0yURrwVHEhMWiaJN7P/ouHpaEvL2h6olEYoFQq6Na5DgGd1TidoL+hWpiqd0+PlZMfk7m34du9JnsVawt7ujpgYG6EyUTKgx8vY25rz+5+XCPB3x9fTCYVCYGZqwrgRbckrKCa5kunllekA1PN1wc3VFiHAylLNu6PaczYihQLN00cMFEYKjFXGKIwUD2wf3XoKj/o1adm7GcYqYwbP7EPixWRSo7U5H3vWHOK16SFY2JjjVtuVziPbs3vVAb1t7FlzkFdHtKNm3RpY2JgzaHqIru612DTizycxZFZfjFXGtOjZFK+G7hzefFKv1pOQXVhEanYugxr7YyQElioVvRrUIyrjJpfTb+BuZ0OguzYXyM3GmrY+XkTduKlXa/PFSIJr+VDXyRGlQsGYloGcTr1GXnExSbdyuJJxk3EtAzExMiK4lje1nRzYFR2rV+tp8KjrirFKiUptTMib7bBzsmLvxlPEXEjBr6m3LoLj7VeD+s28K83R6Tc2mKCeTZg2aCl5OX91vJXGRhirlCCEbls8pwRfSYgqve6Pot95jb5P9hLQWghhL4QwA7oAdxPDxgkhLgohVgoh9M+GeAzkiI7MC4MkSeFCiB3ABSAZOA3cdWiyhRDHACtgxPPoX3B7P7q+6o9SqeDipatM+mADpaXllJaWP1CvolwiL7+IoiLtHeWEdzoCsDB0NxpNCTM/2sroN4IY/3YnSopLOXYynrU/ae+wu7zqT3VXW4YNbsGwwS10ml16Gn49oe6N69K7aX2MjRScSbzGqLDNlJaXk11QyIQ1vzCtZ1s+G9iZiJQ0Jq+7FzWe2bs9AB9t2YcQgjEdA/F26kq5VEFKZg6T1v3KlWtax83W3JTFw3vgbGNJdkEha4+cY9NJwzyX5WE6BdWjW3BDjIwUXLx8lfdmbaS0rBwLcxXjR7XH0d6SkpIyrsSlM2nOJkrunLchfZrRsG4NJn+8+W91AFycrZk1uBu21mZoNCWEX0hmzoLKn1nzJLw2I4Shs/rp9jsMac3qOT+zZs5G5vT5knGL3uD9Ne8QdTKWuQO/1tVbPWsD7ywbxdqkpZQUlrDhi+2c3qV1kh3dHFgRuZA3/CZwMzWT07vO8/P87Xz55yxMTE04svkkq2dt0GnNHfg1k78fy9ZbP3AjJZOP+i4gN/O2Qewbt3kn04LbMCowgApJ4kRyKp/uPcgtTSHTft3DjI5BuFpZkV9czI7IKDae1zqXAW7VWd6/Jy99qX2u0InkVL46eJSw/j1RK5WcuXqd97bd+35O2PYbn3XryOn3xnD99m3e2fIr2ZqnH357mPYhL9NpQHOUxkZcOhXPtEFLKC0pI+JEHOu++p3pYSOwcbAkNyufDYt2c/ZQFABtewXQf1wwb7WfB8DwD7pTWlzGisMf6rQ3LNrNhsV7AJj74xgaNteO5Pi97MW7XwxkSt9QIo7HGdymR1LF0MhDUfSHy64IIT4H9gD5aK//ZcAy4GO00fuPgQVU8dovpGdxayUjU0WEEBaSJOXf8ewPAaMlSfpraMRwSPKini8u8qKeLzbyop4vNncW9TRY+Kdtx8+r5DDs3z31sfsghPgUuCpJ0tL7jnkAv0iSVL+yz/0dckRH5kUjTAhRD1ADq56xkyMjIyMj87g8oxEzIYSTJEk3hBA10c64bS6EcJEkKe1OlV5oh7iqhOzoyLxQSJI06Hn3QUZGRkbmrzzDZ+JsFkLYA6XAWEmSsoUQa4QQjdAOXSUBb1ZVXHZ0ZGRkZGRkZB7NM0qCliSplZ5jQwylLzs6MjIyMjIyMo/kRXjKcVWQHR0ZGRkZGRmZR/MPdXTkWVcy/9+RfwAyMjL/ZgzmnrTpPr9K18uDOyc/VxdJjujI/L8n+JVPnncXDMaeYzPk6eUvMPL08hebf+n0coMhD13JyMjIyMjI/HuRHR0ZGRkZGRmZfytyREdGRkZGRkbm38tzWmPraZEdHRkZGRkZGZlHIkd0ZGT+5dR0t2fcpM7Uqu1MTo6G5Yv3cfRQNNWcrVm75W0K71vBesPaY6z74YheHW/faoyd0AkvHyc0mhJ+236Otd8f1pW3bleXYSPb4OBoyc0bt1n5v/0cOxRjcHu8nOyY3qst9apXI7ugkAW/HmLfpXgAmvm4Mb1XO1xsLIlISWf6hl2k5eTp1Vn5Zh98nO0xURpx7dZtFu8+xv7IBF356HZN6RvYAEtTFYejkpi9aS8FxU+/2vfDuNewY8LoDtT2dibntoalPxzk8MlYPGrYM318F6o72wAQHZ/BN8v3kVTJ6uWV6QA4O1mxMexNNIX3+v/j1lOs+vn4U/e/x9hX6TgsCI8GNTnw01Hmj1iiK3upXX3GLR6JU00Hok7GMn/4Em6kZAJgbKLknWWjaBUSSLGmhJ/nb2fzwsoXGu09viv9p/REZWrC4S0nCP3vckpLygCo5u7IpJVjqNPMlxspmSx+ewXn9hlmEdbq1lbM7tSORtVdKCkvZ1dULHP3HKBckgh0d2Nq+1a429qQrSki7Hg4G85X3m69ak5MD25DPWcnCktL+fZYOKvDz+namdetI/6uzqTdzuOjXfs5lpRiEBvux82nGmPm9sW3gRu5t/JZ8cl2jv1xEYBW3V5i8MTOOLjYkHk9hx8+38nxXfrtGTmjB4GdGmDraEVWei4bFu1m3+ZwXfk7n/enQaAPrp6OLJz4I3s3njK4LY/NP9TRqeJapDIyVUMI8YMQos8zbuN1IYSrITUVRoI5n/fj5NFYer+6gK8//42ps3pQ3c1OV6dnp/n8p8MX/KfDF5U6OQAfzO5JxIUUer+6gIlj19CtV2Oat9SuTmzvYMn7s3rybegeegTPJ2zJPj6Y3QsbWzNDmoORQhD6+n84eCWRFrOWMXvTXuYN7Iy7gw02Zmq+HtqdxbuO0WLWMiKvZvDl4K6Van224wBtPw4j8MOlzN60l88GdMbB0hyA/zSpR7cmdRmyZANtP16OyljJtJ5tDWrLXXvmfdCL46cT6DpkEfOX7ubDCV1wc7UlMzufD7/YTpfBi+g2dDFHTsUxe1L3J9a5ny6vhdJp4Dd0GviNQZwcgKzrt1g3dzO7vt//wHEre0tmbZ7Mqpnr6W0/nJgzCcxYP0FXPmR2P6r7uDDYYwyT282m3+QeBHRqpLeNgI7+DJjakykd5jDYcwwuntUYOqe/rnzaj+OJO59EiMMIvp/xEzM3TsTawcog9s3u1I4sjYYWoWH0WLGWl2vWYFATf5QKBUtCurP+XASNFyxl/LZfeb9Da+o4OejVsTVVs2JAL9afi6Dpwm8JXvY9RxOSdeVf9ejMlfQbNF24jK8OHCW0d1dszUwNYsNdFEYKZq4cxam9kfSr/z6hU9YzOXQI1T0dsXe2ZnLoEJZ/tJWQOlP47pNtTFk8DGt7C71aRYUlzH49jD51p7JgwlrenBNC3SaeuvKEy9dZMm0jcRFXDWrD/ydkR0fm38jrgEEdnZruDtg7WLJ5/UkqKiTOn0nicsRVOrza4Im1qrnYsG/XJSoqJNKuZRN5MRV3T0cAHJ0syc8vIvyENrJy6lgcRYUluFS3/TvJJ8bT0Q4nK3NWHzpLhSRxKj6V80nX6d6kLh0a+BKfkcXui7GUlJWzdPdxars64umovw8xaZmUV2gfryEhoTRS4GyjvagH1fNi66lLpOfmU1hSysr94bzqXwu1sWGDyTVr2GNvZ8GGHaepqJA4G5FCRNR1OgbVI7+gmPQbtwHtDWlFhUR1F5sn1nnWHNl6imPbw7md9WDkrGXvZiRFpnJo0wlKi0tZM/tnvPw9cKut/YoHD2nDuk82kZ9TQErUNX77bi8dhwXpbSN4aBB/rPyT5MtXyc8pYN0nm3R1q/u64NPYk9WzNlBSVMKRLSdJjEihVUgzg9hXw8aK36/EUFJeTmaBhsMJSfg62mNtqsZSrWJ7xBUAItIySMi8hbeDvV6d4U2bcCQhmZ2RUZSWl1NQUkp81i0APOxs8HN2IvTwcYrLytkdHUfMzSw61fY1iA13cfOphn01a7Yu309FhcSFY7FcDk+kXcjLOLjYUHC7kNP7tfaE/3mZYk0JLu76Hbe1C37navwNJEki+lwykafiqdvEQ1f+y6rDnD8aQ2lxqUFtqAqSqNrreSM7OjLPDCHEh0KIKCHEHiHET0KISQ+VJwkhPhVCHBdCnBZCNBZC7BJCxAsh3rpTJ0gIcUAIsemO1johtBlxQogmQoiDQogzdz7ncidaFACsE0KcF0IY9lbuITy8HHXb67a8zY/b3mHS9O5YWVfe7NYNpwju3AAjIwU1atpRt34Nzp5OBCAmKo3UpEyat/RFoRC80roWpaXlJMbdMGi/9eUUCsDX2QGfavZEp93UHS8sLSM1KwdvZ/1/eACWDO/BmU/fZv07gwhPuErk1Yx77dzXmBAClbESdwf9jkZVqcwer5r3zs9v695m78b3GD+qPWs2naiyDsDG5W+y+bu3+ODtV7G2fKZfMTz83Ei4eC9iUaQp5np8Ou5+bljYmONQ3Y74C/fKEy4k4+HnplfL3a/GA3XjLyRj52yDpZ0FHn5upCdkUJhfdE/rYjLulWg9KavCz9O1Xm3USiXVLMxp7e3B4fgksgo07IyMIsTfD4UQNKrugqu1FWdSr+nV8a/uTE5REeuH9uf4u2/ybd8euFhZAuDrYE9qTi4FJfecgqiMm/g62unVqip6c3IFeNRxIfZCCqlxGTQLro9CIWjeqQGlJWUkXrn+SF0TtTG1/GuSHJNu0P4aDCGq9nrOyDk6Ms8EIUQAEAK8hPZ7dhY4o6dqqiRJzYUQC4EfgBaAGogEvr1T5yXAD7gOHAVaCCFOAouAHpIk3RRC9AfmSpI0QggxDpgkSdJpQ9mTmpxFTnYB/V5rzub1J2nUxIOGL7lz4WwSubkaxo5YQVxsOlZWZrw96VU+mN2TDyb8pFfrxNFYpsz8D30HNsdIqWDNikPEXEkDtNGGPb9H8MHsXpiYKCktK+fjGZspKjLs3VzijWyy8gsZHhTAmkNnaepTgwCvGpyKT8VMZcyt/MIH6ucXlWCuMqlUb+z321EqFAT61sTTyZa7D1w/EpXE8KAAdl2I4XZhESOCAgBQmxgb1J7kq7fIydUwqFdTNuw4TeMGNWnk58a5S/dyM7q8tgi1yphX2/mRcSfC86Q6ubcLGTlxNXGJN7CyNOW9Nzsw872uTJyzyaD23I/aQk3uzQf7q8nVYGZpiqmFGoCCXI2urCBXg6mlWq+WqYX6L3UBndb9ZXfLHVwN4ySEp1ylX6P6nJ00FqVCwZaLkeyJ0UYuf4mMZm7XDkwPDgJg9h/7SM/L16vjbGmJn7MTw3/aQvSNTKa0a8VXPbowcM0GzExMyHso/yuvuJhqlvqHjapKalwGOZl59Plve7Yu34//K7VoEOjDxWOxVFRI7N10iqmLh2GiUlJaWs6nb66kuPDReWlvz+tHwpXrnDlwxaD9NRQvQnSmKsiOjsyzoiWwXZKkQgAhxM5K6u248x4BWEiSlAfkCSGKhBB3b/tPSZJ09Y7OecADyAHqA3vuBHiMgLTH6ZgQYjQwGuB///vfYxlTXl7BrPc3Mu69TvQf3JyYqDQO/nmZ0pJyigpLiYnSNp2TXcDiBX/w8y8TMDMzQaN58OJmaanm04UDWbzgD/7ccwk7Owtmzg0hO7uAnVvO8FKAJ6PGtmPSuDXERqfhW8eFjz7vx/SJ64mPzXisvj4OZRUVvLtqBx/0aMsbQQFEXs1g18UYSsrK0RSXYqF+0KkxV5k8MoG4rKKCI9FJDG71EqlZuRy4nMCW8Es421jy/Vt9MFIoWHXoDG39vMmoJLG5qpSXVzBt3jbGj2rPoF5NiY5PZ//RaErKyh6oV1RcyvY/zrNz1TgGv72SnIf+sD9Kp7ColOh47XnIztWwMGwf238Yg5mpyQMJyoakKL8IM6sHo0ZmVmZo8gp10RdzK1NybpbeKTOlMK/oLzoAhQ9p3d2+q2Vm9WAumJmVKZqHnN6qIECXV9N/9QbMTYz5tGtHJrdtxeaLl/i6VxfGbtrJ0cRkPOxs+V+/HtzIK+BAfOJftIrLytgTHU9EmvY8LD5yglMT/ouFygRNSQkWDznkFioTCkoMe27Kyyr4aOR3jPm4D33HdCD2QgqHfzlHaUkZjVrW4o3pPZjaN5S4iKv4NnRj1spRfDjkWxIu649SAbwxowfutV15v98ig/bVoMiOjozMAzzuT6L4znvFfdt395UP1QEov3NcAJGSJDV/0o5JkhQGhN3d3fjD4y0BkRh/g4lj1+j2v/7fMPb89teZFLrl4/SEbF2q21JRXsHeP7Sfy7yZx/69l2na3IedW87g7VuNi+dTdI5TzJU0oi5f56UAT4M6OqDNrRn+7Ubd/tqx/dl+5jKSBD0C7uWkmBorcbO3Jj5d/yylhzFSKHCztwa0/xdLdh9nyW5twu4rtWqSnpNHxm39d+tPQ3zyTd6esV63v/SzQfzxZ+Rf6imEQK1S4mhn8RdH50l0AO6uFfgso/NJkal0HNpGt682U+HiXY3kyFTycwrIun4LL38Pzu7Vzvjx9vcgKTJVr1Zy5FW8/T04tPG4ru6t9BzybuWTFJmKi5cTphZqnQPl1dCd/T9Vnlj/uNiYqnG1tmLtmfOUlpeTU1jOlouRjG/zChfT0knMyuZIonZILfFWNgfiEmnt7aHX0Ym+kYl03xJ1unOAIDYzCzcba8xNjHXDV3WcHNkZGf3UNjxM0pXrTOlzb4mFBdsmsHfjSbz9anDpZByxF7XnIOZCClHnknmpVe1KHZ3BEzsTEFSXKX1C0eTrd1JfBKR/aLLLP7TbMv8AjgDdhRBqIYQFUPm0naoRDTgKIZoDCCGMhRB+d8ryAEsDt4entxPGJkaoVEr6DAzEzt6S3b9doE49V2rUtEMIsLQyZeyEjpw/k4SmoPgvGldTshBC0DbYDyHA1s6coA71SIjTOjExV67TwL8m3r7VAPCuVY0G/m4kxhs2RweglosDJkoj1MZKXm/TBAcrc7aFX2bfpTh8qtnToYEPJkoj3goOJCYtk8Sb2X/9P3G0pWVtD1RKI5QKBd0a1yHAszqnE7QXdCtTlc7p8XKyY3L3Nny79yTPYi1hb3dHTIyNUJkoGdDjZextzfn9z0sE+Lvj6+mEQiEwMzVh3Ii25BUUk1zJ9PLKdADq+brg5mqLEGBlqebdUe05G5FCgebpIwYKIwXGKmMURooHto9uPYVH/Zq07N0MY5Uxg2f2IfFiMqnR2pyPPWsO8dr0ECxszHGr7Urnke3ZveqA3jb2rDnIqyPaUbNuDSxszBk0PURX91psGvHnkxgyqy/GKmNa9GyKV0N3Dm8++dS2ZRcWkZqdy6DG/hgJgaVKRa8G9YjKuMnl9Bu429kQ6K7NBXKzsaatjxdRN27q1dp8MZLgWj7UdXJEqVAwpmUgp1OvkVdcTNKtHK5k3GRcy0BMjIwIruVNbScHdkXHPrUND+NR1xVjlRKV2piQN9th52TF3o2niLmQgl9Tb7zqVQfA268G9Zt5V5qj029sMEE9mzBt0FLycv7qeCuNjTBWKUEI3bZ4Xnkvooqv54wc0ZF5JkiSFC6E2AFcAJKB00CuAfVL7iQehwohrNF+l79Gm9vzA/CtEKIQaH53+Oxp6fBqAzp3b4RSaUTEhRTef3cdpaXluFS3ZfibbbGxNUNTUMzZ8EQ+nbVV97l3J3cG4Jv5v6PRlDBn2iZGjmnHu5M7U1xcxomjsfx4Zzr6xfMprFlxiA/nhmBra05ujoafVh/lzKkEvX16Gro3rkvvpvUxNlJwJvEao8I2U1peTnZBIRPW/MK0nm35bGBnIlLSmLzuN93nZvZuD8BHW/YhhGBMx0C8nbpSLlWQkpnDpHW/cuWa1jGzNTdl8fAeONtYkl1QyNoj59h00jDPZXmYTkH16BbcECMjBRcvX+W9WRspLSvHwlzF+FHtcbS3pKSkjCtx6Uyas4mS0nIAhvRpRsO6NZj88ea/1QFwcbZm1uBu2FqbodGUEH4hmTkLKn9mzZPw2owQhs7qp9vvMKQ1q+f8zJo5G5nT50vGLXqD99e8Q9TJWOYO/FpXb/WsDbyzbBRrk5ZSUljChi+2c3rXeQAc3RxYEbmQN/wmcDM1k9O7zvPz/O18+ecsTExNOLL5JKtnbdBpzR34NZO/H8vWWz9wIyWTj/ouIDdTfz7TkzJu806mBbdhVGAAFZLEieRUPt17kFuaQqb9uocZHYNwtbIiv7iYHZFRbDyvdS4D3KqzvH9PXvpS+1yhE8mpfHXwKGH9e6JWKjlz9Trvbbv3/Zyw7Tc+69aR0++N4frt27yz5VeyNQa5BDxA+5CX6TSgOUpjIy6dimfaoCWUlpQRcSKOdV/9zvSwEdg4WJKblc+GRbs5eygKgLa9Aug/Lpi32s8DYPgH3SktLmPF4Q912hsW7WbD4j0AzP1xDA2ba2eN+b3sxbtfDGRK31AijscZ3KZH8U/N0RHSs7i1kpEBhBAWkiTlCyHMgEPAaEmSzj7vfj2EJK9e/uIir17+YiOvXv5ic2f1coO5J4GDv6qSw3Bi7XvP1UWSIzoyz5IwIUQ9tLOoVr2ATo6MjIyMzGPyT43oyI6OzDNDkqRBz7sPMjIyMjIGQnZ0ZGRkZGRkZP6tyBEdGRkZGRkZmX8vsqMjIyMjIyMj82/lnxrRkWddyfx/R/4ByMjI/JsxmHvy8oiqzboKXynPupKRea50Cpj9vLtgMHadni1PL3+BkaeXv9j8S6eXG4x/akRHdnRkZGRkZGRkHo3s6MjIyMjIyMj8W5Ge19ITT4m81pWMjIyMjIzMvxY5oiMjIyMjIyPzaP6ZAR3Z0ZGReVzcPBwYN7UrvnVdyM3WsPyb3Rw7oF2oT6UyZtT4jrQO9kOpVJAQk8Gk0d/r1ZnyUW8aNfVErTYhOyufjauP8sf2e6tjNHrZk3FTu+LobE30pat8OXsbN9INth6qDi8nO6b3aku96tXILihkwa+H2HcpHoBmPm5M79UOFxtLIlLSmb5hF2k5eXp1Vr7ZBx9ne0yURly7dZvFu4+xP/LeIqSj2zWlb2ADLE1VHI5KYvamvRQUP/1q3w/jXsOOCaM7UNvbmZzbGpb+cJDDJ2PxqGHP9PFdqO5sA0B0fAbfLN9HUiWrl1emA+DsZMXGsDfRFN7r/49bT7Hq5+NP3f8eY1+l47AgPBrU5MBPR5k/Yomu7KV29Rm3eCRONR2IOhnL/OFLuJGSCYCxiZJ3lo2iVUggxZoSfp6/nc0LK19otPf4rvSf0hOVqQmHt5wg9L/LKS0pA6CauyOTVo6hTjNfbqRksvjtFZzbZ5hFWKtbWzG7UzsaVXehpLycXVGxzN1zgHJJItDdjantW+Fua0O2poiw4+FsOF95u/WqOTE9uA31nJ0oLC3l22PhrA4/p2tnXreO+Ls6k3Y7j4927edYUopBbLgfN59qjJnbF98GbuTeymfFJ9s59sdFAFp1e4nBEzvj4GJD5vUcfvh8J8d36bdn5IweBHZqgK2jFVnpuWxYtJt9m8N15e983p8GgT64ejqycOKP7N14yuC2PC7/1GRkeehK5l+DECJJCOHwLLQVRgpmLxjIySMx9Gn3OV/P3cnUj3tTvaY9AO9O746ltSmj+iymT7vP+farPyrV2vDDYYZ1/5reQfOY/d5PDPtvO3zquABgZW3GzPn9WbXsT/q0+5yYy9eZNs/ws3SMFILQ1//DwSuJtJi1jNmb9jJvYGfcHWywMVPz9dDuLN51jBazlhF5NYMvB3etVOuzHQdo+3EYgR8uZfamvXw2oDMOluYA/KdJPbo1qcuQJRto+/FyVMZKpvVs+0zsmfdBL46fTqDrkEXMX7qbDyd0wc3VlszsfD78YjtdBi+i29DFHDkVx+xJ3Z9Y5366vBZKp4Hf0GngNwZxcgCyrt9i3dzN7Pp+/wPHrewtmbV5Mqtmrqe3/XBiziQwY/0EXfmQ2f2o7uPCYI8xTG43m36TexDQqZHeNgI6+jNgak+mdJjDYM8xuHhWY+ic/rryaT+OJ+58EiEOI/h+xk/M3DgRawcrg9g3u1M7sjQaWoSG0WPFWl6uWYNBTfxRKhQsCenO+nMRNF6wlPHbfuX9Dq2p46T/p2xrqmbFgF6sPxdB04XfErzse44mJOvKv+rRmSvpN2i6cBlfHThKaO+u2JqZGsSGuyiMFMxcOYpTeyPpV/99QqesZ3LoEKp7OmLvbM3k0CEs/2grIXWm8N0n25iyeBjW9hZ6tYoKS5j9ehh96k5lwYS1vDknhLpNPHXlCZevs2TaRuIirhrUhiohqvh6zsiOjozMY+Dm4YC9oyVb1h2nokLiwulEIi+k0r5LQ2q42xPYujbfzN1Jbo6GigqJuKi0SrWSE25SWloOgHTnn2sNOwBatKtLcvxNDu+7TGlJGWvCDuDlWw03d8P6b56OdjhZmbP60FkqJIlT8amcT7pO9yZ16dDAl/iMLHZfjKWkrJylu49T29URT0dbvVoxaZmUV0g6e5RGCpxttBf1oHpebD11ifTcfApLSlm5P5xX/WuhNjZsMLlmDXvs7SzYsOM0FRUSZyNSiIi6TsegeuQXFJN+4zagveZWVEhUd7F5Yp1nzZGtpzi2PZzbWQ9Gzlr2bkZSZCqHNp2gtLiUNbN/xsvfA7fargAED2nDuk82kZ9TQErUNX77bi8dhwXpbSN4aBB/rPyT5MtXyc8pYN0nm3R1q/u64NPYk9WzNlBSVMKRLSdJjEihVUgzg9hXw8aK36/EUFJeTmaBhsMJSfg62mNtqsZSrWJ7xBUAItIySMi8hbeDvV6d4U2bcCQhmZ2RUZSWl1NQUkp81i0APOxs8HN2IvTwcYrLytkdHUfMzSw61fY1iA13cfOphn01a7YuyV4HqQAAIABJREFU36+9HhyL5XJ4Iu1CXsbBxYaC24Wc3q+1J/zPyxRrSnCp5De8dsHvXI2/gSRJRJ9LJvJUPHWbeOjKf1l1mPNHYygtLjWoDVXiH+royENXMi8sQoiXgRVAU8AIOAUMBN4C2gCJaJ31lZIkbbrzsclCiLshg0GSJMUZpC96+wce3k7UqV+DG+k5DHkziPZd/LmVmcfasAMc+fNKpXrjpnYluHsj1GpjYqPSOHVUOzTi7uVIQmy6rl5xUSlp17Jx93YkNTnTEKbo+v6XY4CvswMWKhXRaTd1xwtLy0jNysHb2Z7Em9l69ZYM70Ggb01UxkqORCcReTXjXjv3NSaEQGWsxN3Bhui0Z2+PV01H3f5v697GVG2CQghW/HSkyjoAG5e/iSTB6QtJLP3hILl5hU/R+7/Hw8+NhIv3IhZFmmKux6fj7udGdkYuDtXtiL9wrzzhQjItejTVq+XuV4NjO+4Ni8RfSMbO2QZLOws8/NxIT8igML/ontbFZNz93Axix6rw83StV5uTyVexVqto7e3BNwePkVWgYWdkFCH+fvx09iINXZ1xtbbiTOo1vTr+1Z2JuZnF+qH9cbe14cL1dObs+pO023n4OtiTmpNLQck9pyAq4ya+jnYGseEueicfCfCo48K6r34nNS6DZsH1Cd8XSbPg+pSWlJF45fojdU3UxtTyr8kvq/V/P5838tCVjIyBkSQpHNgBfAJ8AawFagEeQANgJND8oY/dliSpKbAY+NpQfUlNyiTnVgF9h7bAyEhB42beNGjsgUptjIOTFZ4+1SjIL2bQqwtY8sVvTJrdCzePyqMwiz//lV6tP+W9N1ZydP8VXY6EqZkJBfnFD9QtyC/C1ExlKFMASLyRTVZ+IcODAlAqFLxSqyYBXjVQGysxUxmTV/hgDk1+UQnmKpNK9cZ+v51mM5bw1ndbORqdxN0Hrh+JSiKkaX1cba2wUJswIigAALWJsUHtSb56i5xcDYN6NcXISMHLjTxo5OeGWnXvXq7La4voPCiUhcv3Eptwo0o6ubcLGTlxNX1H/Y+RE1djZmrCzPcqH9YzBGoLNQW5mgeOaXI1mFmaYmqhBnigvCBXg6mlWq+W6UNad7fvaj3cTkGuBjMLwwz7hKdcxcfBnrOTxnL4ndFcSstgT4w2J+yXyGjGtmzGpanv8OOQfiw8eJT0vHy9Os6WlvRqUJe5ew7QZvF3XM3J5aseXbR2mJiQ91D+V15xMeYmlX93q0JqXAY5mXn0+W97jJQKGreuQ4NAH1RqEyoqJPZuOsXUxcPYkfAVUxYPI3TqeooLH52X9va8fiRcuc6ZA5XfJD1X/qERHdnRkXnR+QgIBgLQOjstgY2SJFVIkpQO7H+o/k/3vT/sBAEghBgthDgthDgdFhb2WJ0oL69gzqT1NG3hy/pdkwgZ3JxDeyLJvHGb4uJSSkvL+XHFIcrKyok4m8yF04k0CfT+W82KConICyk4OlnRrc/LABRqSjAzf9CpMTNXUagp1idRZcoqKnh31Q5a1/HkwMzRDGvdhF0XY8jIzUdTXIqF+sE/DOYqk0cmEJdVVHAkOokWtT0IqucFwJbwS/x+Pprv3+rDtolDORWfCkBGJYnNVaW8vIJp87bRvIkX278fw4AeAew/Gs2Nh4aBiopL2f7Heaa/2wUba7Mn1iksKiU6PoPyConsXA0Lw/bR9CVPzEwN+4f0gT7nF2Fm9aCzYWZlhiavUBd9Mb+v3MzKlMK8IvRR+JDW3e27WmZWD/6fmFmZosl/+miVAFYM6MXu6Dj85y+m6cJlWKnVTG7bCi97W77u1YUpO3bh99k3dA1bzcjAAIK8PfVqFZeVsSc6noi0DErKy1l85ARN3FyxUJmgKSnB4iGH3EJlQkGJYZPfy8sq+GjkdzRt78eP5+bSe3RbDv9yjsz0HBq1rMUb03swtW8o3T3fY2qfUMbPH4hXvep/q/nGjB6413Zl3lv6JzG8CEiiaq/njTx0JfOiYwdYAMaAmkffH0iVbN87KElhwF0PR9ocNvuxOpIYl8HkN3/Q7S9c8QZ7fj3P9dRbj/X5ylAYKXCpoc1/SU64SXA3f12ZSm2MSw07kuNvVvbxKhOTlsnwbzfq9teO7c/2M5eRJOgRcC8nxdRYiZu9NfHp+mcpPYyRQoGbvTUAkgRLdh9nyW5twu4rtWqSnpNHxm39d+tPQ3zyTd6esV63v/SzQfzxZ+Rf6imEQK1S4mhnQc5DEYwn0QG4u1bgs3yOWlJkKh2HttHtq81UuHhXIzkylfycArKu38LL34Oze7Uzfrz9PUiKTNWrlRx5FW9/Dw5tPK6reys9h7xb+SRFpuLi5YSphVrnQHk1dGd/JcN8T4KNqRpXayvWnjlPaXk5OYXlbLkYyfg2r3AxLZ3ErGyOJGqH3xJvZXMgLpHW3h4ciE/8i1b0jUyk+37aunOAIDYzCzcba8xNjHXDV3WcHNkZGf3UNjxM0pXrTOlzb4mFBdsmsHfjSbz9anDpZByxF7XnIOZCClHnknmpVW0SLusfjhs8sTMBQXWZ0icUTb5+J/WF4AVwWqqCHNGRedEJAz4E1gGfA0eAECGEQghRDQh6qH7/+94NMx3mDp4+1TA2UaJSGdNn8CvYOViwZ+d5Is4mczM9lwGvt0RhpKCevxsNm3hw5nj8XzSsbc1p07E+alMTFApBk0Bv2naqz4XT2gv6sf1X8PB2omW7uhibKBk8qg2JsRkGzc+5Sy0XB0yURqiNlbzepgkOVuZsC7/Mvktx+FSzp0MDH0yURrwVHEhMWqbe/BxPR1ta1vZApTRCqVDQrXEdAjyrczpBe0G3MlXpnB4vJzsmd2/Dt3tP8izWEvZ2d8TE2AiViZIBPV7G3tac3/+8RIC/O76eTigUAjNTE8aNaEteQTHJlUwvr0wHoJ6vC26utggBVpZq3h3VnrMRKRRonj5ioDBSYKwyRmGkeGD76NZTeNSvScvezTBWGTN4Zh8SLyaTGq3N+diz5hCvTQ/BwsYct9qudB7Znt2rDuhtY8+ag7w6oh0169bAwsacQdNDdHWvxaYRfz6JIbP6YqwypkXPpng1dOfw5pNPbVt2YRGp2bkMauyPkRBYqlT0alCPqIybXE6/gbudDYHu2lwgNxtr2vp4EXVDv3O/+WIkwbV8qOvkiFKhYEzLQE6nXiOvuJikWzlcybjJuJaBmBgZEVzLm9pODuyKjn1qGx7Go64rxiolKrUxIW+2w87Jir0bTxFzIQW/pt66CI63Xw3qN/OuNEen39hggno2YdqgpeTl/NXxVhobYaxSghC6bfGcnlAsR3RkZAyMEGIoUCZJ0o9CCCPgGLAFuApcAmKAk8D9D5lRCSFOonXiBxqyP+27NOTVno1RKo24dC6ZD8au0c2emj3xJ8bP+A/9X29JRlou82dt1TknA4a3on6jmsx4dx1IEt1CAnjng24IIbiRnsO3C/7g+EHtHWdujoaPp/zM2CldmPJRb6IirzFv2qZK+/Q0dG9cl95N62NspOBM4jVGhW2mtLyc7IJCJqz5hWk92/LZwM5EpKQxed1vus/N7N0egI+27EMIwZiOgXg7daVcqiAlM4dJ637lyjVtDoytuSmLh/fA2caS7IJC1h45x6aThnkuy8N0CqpHt+CGGBkpuHj5Ku/N2khpWTkW5irGj2qPo70lJSVlXIlLZ9KcTZTcOXdD+jSjYd0aTP5489/qALg4WzNrcDdsrc3QaEoIv5DMnAWVP7PmSXhtRghDZ/XT7XcY0prVc35mzZyNzOnzJeMWvcH7a94h6mQscwfeSz9bPWsD7ywbxdqkpZQUlrDhi+2c3nUeAEc3B1ZELuQNvwncTM3k9K7z/Dx/O1/+OQsTUxOObD7J6lkbdFpzB37N5O/HsvXWD9xIyeSjvgvIzbxtEPvGbd7JtOA2jAoMoEKSOJGcyqd7D3JLU8i0X/cwo2MQrlZW5BcXsyMyio3ntc5lgFt1lvfvyUtfap8rdCI5la8OHiWsf0/USiVnrl7nvW33vp8Ttv3GZ906cvq9MVy/fZt3tvxKtsbwyeLtQ16m04DmKI2NuHQqnmmDllBaUkbEiTjWffU708NGYONgSW5WPhsW7ebsIe0zt9r2CqD/uGDeaj8PgOEfdKe0uIwVhz/UaW9YtJsNi/cAMPfHMTRsrp015veyF+9+MZApfUOJOG6QeRZPxgvgtFQFIT2LWysZmWeIEMJCkqR8IYQ92plYLe7k61QFSV69/MVFXr38xUZevfzF5s7q5QZzT/zHL6ySw3Dh6wnP1UWSIzoy/0R+EULYACbAx0/h5MjIyMjIPCYvwjBUVZAdHZl/HJIkBT3vPsjIyMj8v0N2dGRkZGRkZGT+rfxTE11kR0dGRkZGRkbm0cgRHRkZGRkZGZl/Lf9QR0eedSXz/x35ByAjI/NvxmDuSYNJVZt1FfGlPOtKRua58mqjmc+7Cwbjj/MfydPLX2Dk6eUvNv/S6eUG41nNuhJCvAuMQuuULZck6WshhB2wAe3ahklAP0mS9K8q/AjkJyPLyMjIyMjIPJpnsKinEKI+WienKeAPdBNC+ALvA/skSfIF9t3ZrxKyoyMjIyMjIyPzSJ7REhB1gROSJGkkSSoDDgK9gB7Aqjt1VgE9q9pv2dGRkZGRkZGReTTPIKKDdjmf1kIIeyGEGdAFcAOqSZKUBnDn3amq3ZZzdGRkZGRkZGQeTRVzdIQQo4HR9x0KkyQpDECSpCtCiM+BPUA+cAEoe7qOPojs6MjIPCZung6M/aAbvnVdyc0u4LuFuzm2/woAKrUxI9/rROtgP5RKIxJi0pn8xkq9Ol98N5w6DWpQXl4BQNaNPEb2vJc0OGBka7qEBGBuqSb8SCyhH+9AU1BscHu8nOyY3qst9apXI7ugkAW/HmLfJe2K68183Jjeqx0uNpZEpKQzfcMu0nLy9OqsfLMPPs72mCiNuHbrNot3H2N/ZIKufHS7pvQNbIClqYrDUUnM3rSXguKnX+37Ydxr2DFhdAdqezuTc1vD0h8OcvhkLB417Jk+vgvVnW0AiI7P4Jvl+0iqZPXyynQAnJ2s2Bj2JprCe/3/cespVv18/Kn732Psq3QcFoRHg5oc+Oko80cs0ZW91K4+4xaPxKmmA1EnY5k/fAk3UrSLxhqbKHln2ShahQRSrCnh5/nb2byw8oVGe4/vSv8pPVGZmnB4ywlC/7uc0hLt35Vq7o5MWjmGOs18uZGSyeK3V3Bun2EWYa1ubcXsTu1oVN2FkvJydkXFMnfPAcoliUB3N6a2b4W7rQ3ZmiLCjoez4Xzl7dar5sT04DbUc3aisLSUb4+Fszr8nK6ded064u/qTNrtPD7atZ9jSSkGseF+3HyqMWZuX3wbuJF7K58Vn2zn2B8XAWjV7SUGT+yMg4sNmddz+OHznRzfpd+ekTN6ENipAbaOVmSl57Jh0W72bQ7Xlb/zeX8aBPrg6unIwok/snfjKYPb8rhUNRn5jlMT9jflK4AVAEKIT9Eu3JwhhHCRJClNCOEC3Kha6/LQlcwLihDigBAi4Ck+P/5OGNQgKIwUzPp6EKcOxdC3zTy++XgHUz4NoXpNewDe/fA/WFqZMrr3Ivq2mcf/vvz9b/WWfvYrvV6ZS69X5j7g5HTo3oj2Xf157/XveC34S1QqJf99v4uhzNBhpBCEvv4fDl5JpMWsZczetJd5Azvj7mCDjZmar4d2Z/GuY7SYtYzIqxl8ObhrpVqf7ThA24/DCPxwKbM37eWzAZ1xsDQH4D9N6tGtSV2GLNlA24+XozJWMq1n22diz7wPenH8dAJdhyxi/tLdfDihC26utmRm5/PhF9vpMngR3YYu5sipOGZP6v7EOvfT5bVQOg38hk4DvzGIkwOQdf0W6+ZuZtf3+x84bmVvyazNk1k1cz297YcTcyaBGesn6MqHzO5HdR8XBnuMYXK72fSb3IOATo30thHQ0Z8BU3sypcMcBnuOwcWzGkPn9NeVT/txPHHnkwhxGMH3M35i5saJWDtYGcS+2Z3akaXR0CI0jB4r1vJyzRoMauKPUqFgSUh31p+LoPGCpYzf9ivvd2hNHScHvTq2pmpWDOjF+nMRNF34LcHLvudoQrKu/KsenbmSfoOmC5fx1YGjhPbuiq2ZqUFsuIvCSMHMlaM4tTeSfvXfJ3TKeiaHDqG6pyP2ztZMDh3C8o+2ElJnCt99so0pi4dhbW+hV6uosITZr4fRp+5UFkxYy5tzQqjbxFNXnnD5OkumbSQu4qpBbagSz2boCiGE0533mkBv4CdgBzDsTpVhwPaqdlt2dGT+rYwHDObouHk4YO9oyZa1x6iokLgQnkjk+RTad/Onhrs9zdrUJvTjHeRma6iokIi7klaldpq1rs2ubWfJzLhNUWEJP/9whDYd66NSGxvKFAA8He1wsjJn9aGzVEgSp+JTOZ90ne5N6tKhgS/xGVnsvhhLSVk5S3cfp7arI56Otnq1YtIyKa/QPl5DQkJppMDZRntRD6rnxdZTl0jPzaewpJSV+8N51b8WamPDBpNr1rDH3s6CDTtOU1EhcTYihYio63QMqkd+QTHpN24D2mtuRYVEdRebJ9Z51hzZeopj28O5nfVg5Kxl72YkRaZyaNMJSotLWTP7Z7z8PXCr7QpA8JA2rPtkE/k5BaREXeO37/bScViQ3jaChwbxx8o/Sb58lfycAtZ9sklXt7qvCz6NPVk9awMlRSUc2XKSxIgUWoU0M4h9NWys+P1KDCXl5WQWaDickISvoz3Wpmos1Sq2R2ijoxFpGSRk3sLbwV6vzvCmTTiSkMzOyChKy8spKCklPusWAB52Nvg5OxF6+DjFZeXsjo4j5mYWnWr7GsSGu7j5VMO+mjVbl+/XXg+OxXI5PJF2IS/j4GJDwe1CTt+J9ob/eZliTQku7vodt7ULfudq/A0kSSL6XDKRp+Kp28RDV/7LqsOcPxpDaXGpQW2oEs/I0QE2CyEuAzuBsXemkX8GBAshYoHgO/tVQh66knnuCCE+BF4DUoFM4MydosFCiFDAChghSdIpIcRswBNwAWoB7wGBQGfgGtAd+C/gCuwXQmRKkvTUIQSh58cqhMDdx4naDWpwIy2Xwf9tS/uu/tzKzGftt/s5uu9ypXqvvx3M8HeCuZqcxarFe7l4OuleO/c1JoTARGWMa007EmMyntaMv7cH8HV2wEKlIjrtpu54YWkZqVk5eDvbk3hT/2MslgzvQaBvTVTGSo5EJxF5NaNSe1TGStwdbIhOy3zm9njVdNTt/7bubUzVJiiEYMVPR6qsA7Bx+ZtIEpy+kMTSHw6Sm1f4FL3/ezz83Ei4eC9iUaQp5np8Ou5+bmRn5OJQ3Y74C/fKEy4k06JHU71a7n41OLbj3rBI/IVk7JxtsLSzwMPPjfSEDArzi+5pXUzG3c/NIHasCj9P13q1OZl8FWu1itbeHnxz8BhZBRp2RkYR4u/HT2cv0tDVGVdrK86kXtOr41/dmZibWawf2h93WxsuXE9nzq4/Sbudh6+DPak5uRSU3HMKojJu4utoZxAb7qLve4IAjzourPvqd1LjMmgWXJ/wfZE0C65PaUkZiVeuP1LXRG1MLf+a/LJa//fzefOsnqMjSVIrPceygPaG0JcjOjLPlTvDUyHAS2hDlvcPV5lLkvQKMAa4P+HFG+iKdvrhWmC/JEkNgEKgqyRJocB1oK0hnByA1KRMcm4V0Of1lhgpFTRu7k2DJu6o1SY4VLPG07camvxiXgv+kqWf/cqkj3vh5qn/Dm7F13sY3m0hgzt+ye+bTzP7m9dwqaGNlpw+GsurvRpTzdUGMwsV/V5vCYBabWIIM3Qk3sgmK7+Q4UEBKBUKXqlVkwCvGqiNlZipjMkrfDCHJr+oBHNV5X0Y+/12ms1YwlvfbeVodBJ3H7h+JCqJkKb1cbW1wkJtwogg7elVmxg2QpV89RY5uRoG9WqKkZGClxt50MjPDbXq3r1cl9cW0XlQKAuX7yU2Qf9w/6N0cm8XMnLiavqO+h8jJ67GzNSEme9VPqxnCNQWagpyNQ8c0+RqMLM0xdRCDfBAeUGuBlNLtV4t04e07m7f1Xq4nYJcDWYWhhn2CU+5io+DPWcnjeXwO6O5lJbBnhhtTtgvkdGMbdmMS1Pf4cch/Vh48Cjpefl6dZwtLenVoC5z9xygzeLvuJqTy1c9tMO7ZiYm5D2U/5VXXIy5iWF/P6lxGeRk5tHnv+2114PWdWgQ6INKbUJFhcTeTaeYungYOxK+YsriYYROXU9x4aPz0t6e14+EK9c5c+CKQftrMJ5dROeZIjs6Ms+blsB2SZIKJUnKQxu6vMtPAJIkHQKshBB3xxt+lySpFIgAjIA/7hyPQPsUzb9FCDFaCHFaCHE6LKzS/LgHKC+r4KMJP9G0ZS1+2juFkCEtOLw7ksyMXEqKSyktLePH5QcpKysn4kwSF8KTaNzcR69W9KWrFGpKKC0tZ+/O81w+n8LLLWsBsGvbOQ78EcEX3w3nf5vHceF0IgA3M3Ifq5+PS1lFBe+u2kHrOp4cmDmaYa2bsOtiDBm5+WiKS7F4yLEyV5k8MoG4rKKCI9FJtKjtQVA9LwC2hF/i9/PRfP9WH7ZNHMqp+FQAMipJbK4q5eUVTJu3jeZNvNj+/RgG9Ahg/9Fobjw0DFRUXMr2P84z/d0u2Fj/dWTzUTqFRaVEx2dQXiGRnathYdg+mr7kiZmpYf+QPtDn/CLMrB50NsyszNDkFeqiL+b3lZtZmVKYV4Q+Ch/Surt9V8vM6sH/EzMrUzT5Tx+tEsCKAb3YHR2H//zFNF24DCu1msltW+Flb8vXvbowZccu/D77hq5hqxkZGECQt6dereKyMvZExxORlkFJeTmLj5ygiZsrFioTNCUlWDzkkFuoTCgoMWzye3lZBR+N/I6m7f348dxceo9uy+FfzpGZnkOjlrV4Y3oPpvYNpbvne0ztE8r4+QPxqlf9bzXfmNED99quzHvre4P21ZA8o+foPHPkoSuZ583f/QweXlfl7n4xgCRJFUKIUunegm0VPMZ3+qEZANKWpY+3BERibAZTRt4LLH21aiR7d5zneuqtx/p85f25FwqXJIm1y/azdpk2IbVxc29uZuSSdcOwjgFoc2uGf7tRt792bH+2n7mMJEGPgHs5KabGStzsrYlP1z9L6WGMFArc7K0BrW1Ldh9nyW5twu4rtWqSnpNHxm39d+tPQ3zyTd6esV63v/SzQfzxZ+Rf6imEQK1S4mhnQc5DEYwn0QHt+YJKhjIMRFJkKh2HttHtq81UuHhXIzkylfycArKu38LL34Oze7Uzfrz9PUiKTNWrlRx5FW9/Dw5tPK6reys9h7xb+SRFpuLi5YSphVrnQHk1dGd/JcN8T4KNqRpXayvWnjlPaXk5OYXlbLkYyfg2r3AxLZ3ErGyOJGqH3xJvZXMgLpHW3h4ciE/8i1b0jUyk+y4NunOAIDYzCzcba8xNjHXDV3WcHNkZGf3UNjxM0pXrTOlzbyLBgm0T2LvxJN5+Nbh0Mo7Yi9pzEHMhhahzybzUqjYJl/UPxw2e2JmAoLpM6ROKJl+/k/pC8AI4LVVBjujIPG+OAN2FEGohhAXaIam79AcQQrQEciVJepKwRh5gabhugqdvNYxNlKjUxoQMbYGdgyV7dpwj4mwSN9NyGTCiFQojBfUa1aRhgAdnjsX9RcPcUk2T5j4YmyhRGClo26UhDZq46+paWJnqhrFqejkyeuKr/Bh2AOkZLL5by8UBE6URamMlr7dpgoOVOdvCL7PvUhw+1ezp0MAHE6URbwUHEpOWqTc/x9PRlpa1PVApjVAqFHRrXIcAz+r/x955h0VxfQ34vbt0EJCmIEixI1gRMZao2GPsLWqMvfdeYtfoZ2JviSVGjV2ssffeFQtWFBBBFKRIbzvfH7siyGLd/EzMvM+zDzNzz5x7z+xl5uy5587l8iP1Dd3c2DDL6XGzs2LEt1/z6+EL/B1rCRdxtsVAX4mhgR7tmlbCOr8p+47ewqusM8Vc7VAoBCbGBvTvWov4xFRC8phenpceAPdi9jg55EcIMM9nxKAevly9+ZjEpE+PGCiUCvQN9VEoFTm2z2y/iItHYaq1qIy+oT4dJ7Qi6EYIoffUOR+H1p6kw7iWmFma4lTCgYbdfTm4+rjWOg6tPUGDrrUpXMoRM0tT2o9rmSUb9uApD/2D+X5ia/QN9anazBu3Ms6c8rvwybbFJKcQGhNH+wplUQpBPkNDmnu6c/dZJLcjnuNsZYmPszoXyMnSglpF3bj7PFKrLr8bAdQtXpRSdrboKRT0rebD5dAw4lNTCY6O5c6zSPpX88FAqaRu8SKUsLPhwL0Hn2zDm7iUckDfUHM/6FUbKztzDm+5yP3rjyntXSQrglOktCMelYvkmaPTpl9dajaryNj2S4iPze146+kr0TfUAyGytsXf6Vm/jX/p0JUc0ZH5rEiSdEkIsQv1S6JCgMvAK4cmRghxFk0y8geqXgbsE0I81VWejm/jstRvXhE9PQW3rj5mTO/VpKdnAjB5yHoGT2hGm67VeRYeyy8/buNJsDrZtm23GniUd2Z8/7Xo6Sn4ob8vji42qFQqQoOimDxkA09C1A9dC0sTJi/ogE0Bc+Jikti5/jz7/K7k2aZP4dsKpWjh7YG+UsGVoDB6LPMjPTOTmMRkhqz9i7HNajHzu4bcfPyUEev2Zp03oYU6P3DKtiMIIehbz4cidt+QKal4HBXL8HV7uBOmzoHJb2rMoi5NKWiZj5jEZP48fY2tF3TzXpY3qV/TncZ1y6BUKrhx+wlDJ24hPSMTM1NDBvfwxdY6H2lpGdwJjGD45K2kab6771tVpkwpR0ZM9XurHgD7ghZM7NiY/BYmJCWlcel6CJNn5/3Omg+hw48t6TSxTdZ+ne9rsGbyZtZO3sLkVr/Qf2E3Rq8dyN0LD5j+3bzDThXkAAAgAElEQVQsuTUTNzFwaQ/+DF5CWnIam2bt5PIBfwBsnWxYGTCXbqWHEBkaxeUD/mz+eSe/HJ2IgbEBp/0usGbipixd07+bx4hV/dge/QfPH0cxpfVs4qJe6sS+/n67GVv3a3r4eKGSJM6HhPLT4RNEJyUzds8hfqxXEwdzcxJSU9kVcJct/mrn0supEMvbNqP8L+r3Cp0PCWXOiTMsa9sMIz09rjwJZ+iO1/1zyI69zGxcj8tD+xL+8iUDt+0hJkn3yeK+LStRv10V9PSV3Lr4kLHtF5OelsHN84Gsm7OPccu6YmmTj7gXCWxaeJCrJ+8CUKu5F23716W37wwAuoz5lvTUDFaeGp+le9PCg2xadAiA6ev7UqaKetZY6UpuDJr1HSNbL+Dmudw/pP5u/gnDUB+D+Dt+KcrIfAhCCDNJkhI07705CfSUJOnq/6h6SV69/J+LvHr5Pxt59fJ/NprVy3XmnpSYOvejHIZ744d8VhdJjujI/BNYJoRwB4yA1f9DJ0dGRkZG5gtHdnRkPjuSJLX/3G2QkZGRkfkykR0dGRkZGRkZmXfyb83RkR0dGRkZGRkZmXcjOzoyMjIyMjIyXyz/UkdHnnUl819H/geQkZH5ktGZe1JsxsfNunowRp51JSPzWalv1OFzN0FnHEhZR5X2sz93M3TGufXDqFdl6uduhs44eG78Fzd9uXrzXz53M3TGqe3DaWDT83M3Q2fsj3q/JW7em39pREd2dGRkZGRkZGTeiZyMLCMjIyMjI/PlIjs6MjIyMjIyMl8s4t+Z0ig7OjIyMjIyMjLvRB66kpH5wnEq4UD/+Z0pVt6VuKiXLB+zgbO7LgPQoEtN2g7/lvwFLAk4e4/ZvZYR/TQ2T11ft/ah47gW2DlZE/0sjtk9fuPWmXsAlKtVmv7zOmPrZM29Sw/5pcdvPH8cpXN7nB2sGN7Fl5KuBYh9mcSi9Sc5cTkQl0JWTOjTkEIFLAG4F/SMOauPEhwWrVVPq3rlaFSjNEWcbDh09i7TfjuQo9yrdGGGd/GlgHU+AgKfMu23/URExevcHidnGwYMb0CxkvbExiaxYtFhzpy4R4GCFqzdPpDkbCuMb/7zLOtWndKqx93Tkd6D61HY2YaIp7Es/HkfATdCs8otLE3oM6Q+3lWKIkkSl84FMnPSDt3bU7QAfae3ppinE3HRCayctpOz+28AUL1xeToOa4iNvSVR4bH88X+7OXdA+2Kp1RuXp1n3mriVLsR9/xBGtV6YVVba242pa/vkkDc2NWRaz5Wc2Xtdp/Y4O1oxpGcdSrip+9uS1Sc4dSEQF0drxg1qSKGCmv728BnzVxwlOI/V5QvamjO0Vx08SjiQlp7J8XP3WbjyKJkqdbRBoRB0bfcV3/h6YmJswJOnMQwav5mEpFSd2uNUrCD9ZrWnWFln4qLiWTFpK2f3qhdTrd60It+PaoKNQ34iw6L5Y9oOzu3z16rnt9OTsHO0yto3MNLn0pFbTOqwOMue70c1oV6HqhibGRH+6Dmjms0m8aXuFyp9J7KjIyMDQoh5wDZJkk4KIVYAcyRJuv0Z2vELsFeSpKO60KdQKpi0dSh7lh9hTKMZeNYoxRS/YfStPA4re0u6TG7DyPrTCQuMoM/sToxZ058Rdadp1VXB14Nu07/jp44LuXfpIVb2llll5tZmTNg4mLl9lnN+zzV+mNiKsWsHMPjribowIwulQjBrWFO2H7nBoJ+2Ur6UIz8Pb84PY9cSFZPI2Hm7iYh6iUIIWtYrx9QBjfl+9BqtuiJjEvhjxwUql3HGUD/nLcUinzEzhjRhxvKDnL76kJ6tqzJ1QGN6TNygU3sUSsHkWW3Ys/0Koweto0x5Z6b83JY+PywnQ7NKefN6s1Blvj30ns/ciMmz2rLg572cOX6XWnU9mPJzW35otYiE+BQAJsxozf074XRsvoDUlHRcitjp1Ba1PQom/N6DvWvPMO67xXj6FGXSHz3pX38WKclpjFjwPVO6LefysTtUqu3O2N+60tlnEnEvEnLpio9NZMeK4zgVLUDZqsVylAVcfESLEiOy9j2rFGXSqp5cPnZHp/YoFYIZY5qx88B1hk7aQrnSjswc24Juw9YQFZ3A+Fm7iIh8iUIhaN6wHJOGNabzkNVadQ3tVYfYuCSadV2Kmakhcya1plnDcvjtuQZA13Zf4VGyEL1Hr+dZ5EtcC9uQlp6hU3sUSgUT/+zH3j9OMLblXDyrFmfyn/3pV3sqKYlpjFzajcnfL+HykVt41/Vk7Mpe/FBhDHFaHPxe1Sbl2F91eTqndl7J2v9+VBNKeRdhSIOZPH8SjXNJB9JS03Vqz3vzL3V0FJ+7ATJfDkIIK8BHkqSTAJIkdf8cTo6GhcBoXSlzKuGAtX1+ti3Yh0olcf34bQLOPcC3QzV8GlXg5LaLhNwJIyM9k3UztlOmeins3bQ/AL//sSXrftrG3YuBSJLEi/AYXoTHAFC1WSVCbj/h1LaLpKems3baNtzKFMapuL2uTAHU0Ryb/GZs3HsFlSRx5XYoN+6H0bB6KRKSUomIegmAEKBSSTgWsMxT14lLgZy8HEicxhHITs1KRQl68oKjF+6Tlp7JCr+zFHO2xdnBSoumj6ewsw3WNvnw23gBlUrC/0owATdCqdOwzAfpcfd0IiY6kVNH76BSSRw5cJO42CSq1SwJQEVvN2wLmLN80WGSElPJzFTx8H6ETm0BdTTHuoAF25cfU/e3sw+4fSmI2i0rYWNvSeLL5Cxn5NLR26QmpWHvbKNVl//p+5z66xovnsW9s946rbw5vcef1OS0d8p+CIUdrbHOb8amXVdQqSSu3gzl5t0w6n3tru5vkZr+hrq/FbLPu7/ZF7Dg6Jl7pKVnEh2bxMVrwbg6qW03MzWkdeOKzFpygGcanUGPo0jTOLu6wqlYQawLWLBt6WH193PqHgEXH+Lb2gcbh/wkxiVx+cgtAC4euklKUioOLrbv1Ov5VXEsbfJx+i/1usZmFiY06+XL/CFref5EHVENuRtOeqpuHbf3RRIf9/ncyI6ODABCiB1CiCtCiAAhRE8hRB8hxKxs5Z2FEAs12+OFEHeFEIeEEBuEEMM1Yq2A/dnOOS6E8NJsJwgh/k9Tx2EhhLem/JEQoolGxkUIcUoIcVXz+UpzXCGEWKJp219CiL1CiFaasopCiBMavQeEEPYAkiSFANZCiII6uj5ajoGLuyNCCLIXv5J1cXfKdY5CIShW0Q0LG3NWBczmz8CF9Jv7AwZG+gA4l3Lk0c3HWfKpSak8ffQMZ3dHXZjxDnsEbo6vH5YHl/fj+OrBDP2hNqt3XvioelwdbXjw+HnWfkpqBk+exeFayPqj9OVJHva4uL1+uPy5fSDrdg5i2LhvMbcwzlPNm6qEIEtPSY9CPAl5wYjxTdm6fxgLV3bDs3xh3dmRrc7cB8GlpD0Prj8mNPAZlet6oFAIqtT3JD0tg6A74Z9Up6GRPtW+KcfhrRc/SY828jAHt8Kv+9veP/tzePMQBnf3Ze3WvPvb1r+u4lutJIYGethYmVG5gisXrgUBUMTZlkyVippVSrDj9z6sX9yV5g3L6diavO8HzqUK8cA/mMcPIvBpUFb9/TQsR3paBo9uP3mn3jptq3B691VSNcOsLu6FyMxUUe3bCqwP+JkVF6bybdeaOrbmAxAf+fnMyI6OzCu6SpJUEfACBgLbgBbZytsCmzSOS0ugvKbcK5tMVeAK2jEFjmvqiAemAXWB5sAUjcxzoK4kSRU09S3QHG8BuACeQHegCoAQQh915KaVRu/vwPRsdV7VtOmTCb0XTmzkS1oPbYxST0mFOp54Vi+FoYkhFw/4U6OlD64eThgY6dNhbHNUKhWGJga59FgWsEDfQI/qzb0Z5juVvpXHUKScC+3HNAPA2MyIxLikHOckvkzGOJ/2B/PHEhweTczLJDo0roRSqcDb05nypRwxNNTPkqnXYzF1uy9k9h9HuB/8/C3a8sbEUJ+EpJzRgcSkVEyMc1+bTyE0OIrYmERad6iCUqmgorcbnuWdMTTUJy4uiX5dVtCx+QL6dV6BiYkhoyc116on4MYTrG3yUbNuaZRKBXUblcG+kBWGGkfU1tYcL58iXL8aTNtv5uK34TyT/69tno7TR9sT+IzYqHha9fFFqaegQo2SePoUxdDIAJVK4vDWi4xa9AO7Hs1h5KIfWDBq4ydHYap+U46X0YncPBeoIyteExIWTWxcEu2bqftbpbLOlCvthJHh66HORh0X0bDDQuYuP8KDoLz7m39AKK6Frdm/fiDbV/bmXmAEpy6o22xrbUY+UyOcHPLTpvdyxs/aRde2X+FV1lmn9oQ+iFB/PwPqq+8HNd3x/Ko4Rsbq7+fIpnOM+rUbu8OXMOq37iwc9meW85IXhsYGVGtSgUMbz2Yds3HIj5mFCY5FCtC54limd/mVDiO/pfzXpXRqz3sjOzoy/3IGCiGuA+cBJ8AVeCSE8BFCWAMlgDNANWCnJEnJkiTFA7uz6bAHIvPQn8braM9N4IQkSemabRfNcX1guRDiJrAFcNccrwZskSRJJUlSBHBMc7wE4AEcEkL4Az8C2UMfzwGHNxuiiVhdFkJcXrbs/d4cmpmRyeTWc/BuWI6NIYtpOagRJ/3OExUWjf+xANZO9WP8xsGsvT+fZyFRJMenEKUleTdN8zDaufQg0RGxvHyRwLb5e6lUX/2rMzkhBRPznA9Nk3zGJMfrNvEwM1PFqNk7qVrelT1LevPdN14cOX+PyBc5cwhSUjPYfuQ6E/o0JL/5hz/Mk1LTMX3DqTE1NiBJx0MjmZkqJo3aTOWqxdi0Zwgtv/Ph5JHbREW+JCU5nQd3n6LKlIiNSWTR7H14+RTBRIsjGv8ymYmjNtGynQ+b9g7Fq3IRrl16RNRz9XVJTU0nIjyG/bv9ycxUcfxwAJHPX1K6TO7o3SfZk6FiSvcVePuWZv216bToWYtTf10jKiKWctWK021cU0a1XsC3rkMZ1WoBg3/+Djf3Qp9UZ51W3hzx0300B9Tfz9iZO6ji5cbOVX1o19SLY2fv8fyNnKKU1HR2HvBn3KCGWFqY5NIjBMye0IoT5x9Qr918vum0CDMzI/p0qgFAapp6SOePzedIS8vgYUgUR07fpUoFV93ak5HJlE5L8K7ryYbbP9Oyb11O7bxMVHgM5WuUotvEloxsNpvG9n0Z2fRnBs/rhJvH26OyVRuXJyEmkRtn7mcde3W/WPfLX6SlpBN0O4wT2y9Rqa6nTu15b4T0cZ/PjJyMLIMQoiZQB6giSVKSEOI4YARsAtoAd4HtkiRJQlvM9jXJmvO0kS69XlhNBaQCSJKkEkK86odDgGdAWdRO+Kukj7zqFECAJElV8ig30rQpB5IkLQNeeTiS38ATeZyek6BboTkSjOcem8ihdeqZO7t/O8Tu3w4BUKhoQdqPbkpwQGguHQmxSUQ+eQF5rDEXcucJdTvWyNo3NDHE3s2OkPcIe38oD0Oj6Dt1c9b+sknfsfdkQC45hRAYGephmz8fMR840yPoSRSNqpfO2jcy1KNQAUuCwrTPqPkUgh4+Z3jf1wnTc5d15vDeG7nksi59Hl355rXHDOi2ElAnOa/e0p+tG85n1eFTrbhuG54HwXfCGdlqQdb+7B1DOLzlAkVKO3LrQiAPNDPB7l9/zN1rIZSvXoJHt8M+qi4be0vKVCnKwtGbdNJ2bTwMiWLAj6/1L5nxHfuP5dHfDPSwtTIj9o3oprmZMQVszdm29xrpGZmkx2ey78gtuneoxtI1J3kYov6d9b9YwzHodhgjm7xe/mLO3lEc3nQON09Hbp57wAP/EADuXwvh7pUgyn9dike38v4/rtO2Coc3n89VB+R5u/if80/It/kY5IiODIAFEKNxckoCPprj24BmwHeonR6A08C3QggjIYQZ8E02PXeAop/YjqeSJKmA7wFltjpbanJ1CgA1NcfvAbZCiKyhLCFE6Wz6igO3PqE9OXD1cELfUB9DYwNaDW6Elb0lh9acRN9QPyuHxtbJmkFLurFj8QESYpO06jm45gRN+tTDwtYcM0sTmg9owIV96hkjZ3dexsXdkWrNKqFvqE/Hsc0JuhlK6P2nujIjiyJONhjoKzE00KP9N15YW5qy52QAlTycKe5sh0IITIwNGNixJi8TUwkO1+6cKBUCA30lSoVAoVBkbYM6UdnNyYaalYphoK+ka/MqBD6OJCRc+1T1T8G1iB36BkoMDfVo1d4Ha2szDu65Tkl3BxwLWyME5DM3pu/Q+vhfCSYpUft04yLFC6JUKjAxMaDngLpERcZz5cIjAM6cuItZPiPqNiqDQiGoXqsU1rb5ckw/1xUupRzQN9TD0Eiflr1qY2VnzuEtF7l//TGlvYtkRXCKlHbEo3KRPHN0FAqBvqEeSqUCITTbejlv/b4tK3H7chBPQ3T/GoNXFHF+3d/aNfXCOr8Z+44G4FXWmWKudigU6v7Wv0st4hNTCdEyvTwuPpnwiFiaNSiHUiEwMzGkQa3SBGqGusIj4vAPCKVTKx/09ZQ4O1pRu1pJzl5+pHN7XN0Lqb8fYwNa9quLVQELDm04y/1rIXj4FMuK4BTxdMLDpyhBAXk7oTb2lpStVoLDG8/lOP40OJKb5+7z3dBG6Bvo4VSsIF838+LigdwOvEzeyBEdGVAPKfUWQtxA7TycB5AkKUYIcRtwlyTpoubYJSHELuA6EAJcBl5N59gD9AJWfGQ7lgB+QojWqIenEjXH/QBf1E7LfeACECdJUpomKXmBEMICdX+eBwRo8neKatqnE3zbV6NBl1ro6Su5deYeYxrNJD0tA1MLE0av7oeDmx1J8SkcXHuS1ZO2ZJ3XbmQTPKqW5Mem6tzudT/twNw6H7/f/IW0lHRO+l1gw8ydAMRFxTP1u3n0m9uZkav6cvdSIDM6LdTank+lYXV3vq3liZ5SwfW7YQyasZX0jEzymRoyrHNtbK3MSE3L4M6jCIbM9MuaufJDU2/KlnBk6KxtAHRu7kP3ll/l0LvC7ywr/c4RG5/M2Hm7GNbZl0n9GhIQGMH4hXv+FnvqNPSkwbfl0dNTcuv6Y0YPWkd6eiYFC+Wna+9aWOY3JTExlauXgpgxYVvWeQNHNgJgway9ALTpUAXvr9T++qXzD5k8+nXUK/5lChNHbmLAiEb0H9aQ0JAoJo3cxMs43b/TxLdlJeq3q6LubxcfMrb9YtLTMrh5PpB1c/YxbllXLG3yEfcigU0LD3L15F0AajX3om3/uvT2nQFA7ZaVGDa3Y5beXQ/ncGjzBeYMXfe6rlbebP31iM5tyE79mqVpXMcTpVLBjTthDJ20hfSMTMxMDRncvTa21vlIS8vgTmAEw6dszepv37esTBl3R0ZM9QNg3P/tZGC32nRo7k2mSsW1W6EsXHU8q57Jc/Ywul99/lrTj9i4JFasP82VbAn+usK3jQ/1O1ZT97fzgYxpNVf9/Zy9z5+zdvPj772xtDMnLiqejfP2cfW4egJqrVbetBvcKMe0ct82Pty59IinwblH/mf2WMGQ+Z3YfH8OsVHxrJm5C/9Td3Vuz5eM+F+E+GS+LIQQZpIkJQghTICTQE9Jkq5qyk4DjSVJyvtteZ9WpzVwEaiqydfJS745UEGSpPHvUC3Jq5f/c5FXL/9nI69e/s9Gs3q5zgacXBfN/iiHIaj/sM866CVHdGQ+hmVCCHfUOTCrXzk5GoYBhQGdOjrAX0IIS8AAmPo2J0eDHvDlPPFlZGRkPjP/1hwd2dGR+WAkSWr/lrKPe+HKu+us+YHyW94tJSMjIyPz3vwDZlB9DLKjIyMjIyMjI/Nu5IiOjIyMjIyMzBeL7OjIyMjIyMjIfLH8Sx0dedaVzH8d+R9ARkbmS0Zn7onLsp8/6n4Z3HOEPOtKRuZz8qVNL/fqNudzN0NnXF45lDo1pr9b8F/C4ZPjaFhi9Oduhs7Yd2/mFze9vGGBPp+7GTpj37OlulX4L43oyI6OjIyMjIyMzDuRp5fLyMjIyMjIfLnI08tlZGRkZGRkvljkiI6MjIyMjIzMl4qQHR0ZmS8bpxIO9J/fmWLlXYmLesnyMRs4u0u9ZmiDLjVpO/xb8hewJODsPWb3Wkb0U+2rYMw6OI5S3kXJzFABEBUeTfcyIwDwblCOtiOb4OLuSFpKOhf2XuO3kX+SnJCic3tc7K0Y1aE2pZwLEBOfzPwtJzl+LRAPN3v6NPuKki4FUKlUXLn3hJ/XH+NFXGIuHfp6SkZ39MXbvTDmpkY8eR7LYr/TnL0VnCVjaKDH4DY1qOtVAj2lgvtPIun5f5tz6fpUCjtbM2BIA4oXL0hsbBLLlh7lzKl7FChowbrN/UlOSsuS3bj+HOvWnNaq589N/chvZYoqUx2mDwh4wuhhG3LJ/TyvA+UruFCv1k9ZsrrEyc2WvhObUax0IeKiE1g5ax9nDwdQ69tyDJjcPEtOKARGxgYMaLGQwDdWyNbXV9JvUjPKVSlKPksTnoa84I+5+7l88j7AB+n6VJwdrRjSsw4l3AoQ+zKJJatPcOpCIC6O1owb1JBCBS0BuPfwGfNXHCVYy+rlAAVtzRnaqw4eJRxIS8/k+Ln7LFx5lEyV+jtQKARd233FN76emBgb8ORpDIPGbyYhSftq9R+LU7GC9J3ZjmJlChP3Ip6Vk7dxdt91AKo3qUDHEY2xcchPVFgMf8zYyTlNmTbK1ShJt/HNcSxagPiYRJZP8uPUrqsUcrOj28QWuHu5oVAquO8fwtJxmwl7+Eyntrw38tCVjAwIIZoBZSRJmiKE6A0kSZK05jO0ozFQSZKkibrQp1AqmLR1KHuWH2FMoxl41ijFFL9h9K08Dit7S7pMbsPI+tMJC4ygz+xOjFnTnxF1p+Wpb/GQ1ezPtuLyK0wtTNgwYwc3T99F31CP0av702NGexYM+F0XZmShVAhm92/KthPX6TfbjwolHJk7sBkdJq/F3MSQbSdvcH5JCBkqFaM61GZil/oMnLdNq55n0fH0/L/NRES/pKqnKzP6NKbdhDU8ffESgHGd6qKnFLT68Q9eJqZQvLCtTm0BUCgFU35qze6dVxk1dD1lyhVm6ow29O62kowM9SrYTb/55b0dkvGjN3P1SnCe5bXrlkapVOii6VpRKBVMWNKJvRsvMK7LCjy93Zi09Af6N1/Asd3+HNvtnyVbp3lF2vetrdUxUegpiHwax8jvlxEZHkulr0swZl4H+nw7j+dhMR+k61NQKgQzxjRj54HrDJ20hXKlHZk5tgXdhq0hKjqB8bN2ERH5EoVC0LxhOSYNa0znIau16hraqw6xcUk067oUM1ND5kxqTbOG5fDbcw2Aru2+wqNkIXqPXs+zyJe4FrYhLT1Dp/YolAomrO7N3tWnGNd6Pp5fFWfS2j709/2JlKRURizuwpQffuXy0QAq1fFg7PIedK70I3FR8bl0FS5ekFFLuzJ7wGqunriDqbkxZubGAJhaGHP+wA3mDFpDckIK7Yd9w8TVvelZbbJO7Xlv/qURnb/vP1Xmv8pIYAmAJEm/fg4nR8MeoIlmhfVPxqmEA9b2+dm2YB8qlcT147cJOPcA3w7V8GlUgZPbLhJyJ4yM9EzWzdhOmeqlsHez++B6jm06y+VDN0hNTiMhNol9vx/FvUpxXZiQAxd7K2wtTVl38CoqSeLy3VCuB4bRqIo7Z28Fc+TyAxJT0khNy2DTEX/KFnPQqiclLYNlu87x9MVLJAlO3wgiPDKOUi4FAHAukJ8a5dyYvvowsQnJqCSJuyHPdW5P4cI2WFvnw2/zRVQqCf+rIQTcekLd+p46r8vU1JBOnauzfOkRnet+hZObLdZ25mz/47S6v51/yO2rwdRuWj6XbJ3mFTi846oWLZCanM66RYd5HhaDJElcPH6XZ0+iKVa6kFb5t+n6FAo7WmOd34xNu66gUklcvRnKzbth1PvanYSkVCIi1U6xAFQqiUL2lnnqsi9gwdEz90hLzyQ6NomL14JxdbIBwMzUkNaNKzJryQGeaXQGPY4iLT1Tp/Y4FSuIdUELtv92RP39nL7H7YsPqd26MjYO+Ul8mczlowEAXDp8i9SkVOxdbLTqajekEXvXnOLy0QBUmSriYxJ5GhIFwP1rIRxcf5aE2CQyM1Rs/+0ITsUKki+/qU7teW/ER34+M7Kj8x9FCOEihLgrhFghhLglhFgnhKgjhDgjhHgghPDWfM4KIa5p/pbQnDtUCPG7ZttTc76JEKI4kCpJUpSmbJIQYrhm+7gQYq4Q4qQQ4o4QopIQYpumrmnZ2rVDCHFFCBEghOiZ7Xg3IcR9jZ7lQohFmuO2Qgg/IcQlzacqgKR+E+ZxoLGOrpeWY+Di7ogQIsfY9StZF3enPPV1mdKWzU9+Zc6xiZSpUSpPOc9qJQm5/eTjG54nWuxBUKRQ7ptxheKFeBSmfRjhTazMTShcMD8Pw9Q3ag+3gkS8iKdX0yocnteHjZM7UbtisU9ruha05Q4IwMX1dfRo/eYBbNg6gOGjG2NuYfxWfWPGN2XrrsHMnP0dbkVyOqxde9Zk946rREfnHsrTFVpzIYTApVjBHIfsHCzx8HLlyM73c04src0o5GJDSGDuoY8P1fUhaDUHcCv8ur/t/bM/hzcPYXB3X9ZuzXtt4K1/XcW3WkkMDfSwsTKjcgVXLlwLAqCIsy2ZKhU1q5Rgx+99WL+4K80bltOxNW/5fko68MA/hND7T6lcvwwKhaBKw7Kkp2UQdFt7lKxkRVcAlhz/kXU3ZjJicWfMLLX/PvOsUozoZ3HEx/x9fe9LRHZ0/tsUBeYDZYCSQHugGjAcGAvcBWpIklQemAD8pDlvHlBUCNEcWAX0kiQpCagKvO0umSZJUg3gV2An0A/wADoLIaw1Ml0lSaoIeAEDhRDWQggHYDzgA9TVtPUV84G5kiRVAloCK7KVXQaqf9gl0U7ovXBiI1/SemhjlHpKKtTxxLN6KULIXLcAACAASURBVAxNDLl4wJ8aLX1w9XDCwEifDmObo1KpMDQx0Kpr5biNdC41hA5u/dm78iiT/YZpjf5U8PWgTscarJmyVRcm5CA4Ipro+CQ6NfBCqVRQubQzFUo4YmSQczS7qKMN3ZtUYf6Wk+/UqVQqmNqjIXvO3CYkIgYAu/z5KOpoQ0JyGg2G/casdUeZ1LU+LvZWOrXnccgLYmMTafOdD0qlgoqVXClTzhkjIz3i4pLo2+N32rdZSJ8ev2NiYsDY8U3z1DVj6k46tFlMh9aLuH41hJm/fIepmSEAxUvYU9rDie3bLum0/W8S+iiS2OgEWnWvgVJPQYWqxfCs5IqhkX4OOd9mFQi4HMyzJzHv1KnUUzDyl7Yc3n6VJ48ic5V/iK4PJSQsmti4JNo3q4RSqaBSWWfKlXbCyPB1f2vUcRENOyxk7vIjPAjKO+rnHxCKa2Fr9q8fyPaVvbkXGMGpC4EA2Fqbkc/UCCeH/LTpvZzxs3bRte1XeJV11qk9oQ8iiI1KoFW/uurv5+tSeFYphqGxASqVxOEtFxi1tAu7QhcycklXFoxYT2q2HLHs2Nhb4tuqMtO7LqObz0QMjAzo+1NbrXJ9Z7Rj2UTd3w/eH+kjP58X2dH5bxMkSdJNSZJUQABwRBMJuQm4ABbAFiHELWAuUBpAI98ZWAuckCTpjEafPZD7DvqaXZq/N4EASZKeSpKUCjwCXoU/BgohrgPnNceKAd6aeqIlSUoHtmTTWQdYJITw1+g3F0Lk05Q9B3KNuQghegohLgshLi9btuydFwkgMyOTya3n4N2wHBtDFtNyUCNO+p0nKiwa/2MBrJ3qx/iNg1l7fz7PQqJIjk8hKixaq657lx6SnJBCeloGh/88xe1z96lUP+evzpLeRRn1Rz+mtZ9PWGDEe7XxQ8jMVDF80S6qlnHjwJxedKxXkUOX7vM8JiFLxtHOkgWDWzB7wzH8H7w9Z0MImNq9ARkZKv5v/dGs46npGaRnZLLyr/NkZKq4ev8Jl++G4lNatw+ezEwVE8ZupXKVomzZMYjWbStz4thtIiPjSUlO5/69p6gyJWJjElk47wBe3kUwycMRDbj1hLS0DFJTM9iw7iwJCSl4limMEDBwaAOWLDj4tyQf57AnQ8WUfmvx/rok60+Po0WX6pzaf5OoZ3E55HybVuDwjivv1CeEYMSstmSkZ7Jk6k6tMu+r62PIzFQxduYOqni5sXNVH9o19eLY2Xs8f5GQQy4lNZ2dB/wZN6ghlha5oxpCwOwJrThx/gH12s3nm06LMDMzok+nGgCkpqlzcf7YfI60tAwehkRx5PRdqlRw1a09GSqmdP4V7zoerL/5f7ToU4dTu64Q9TQmK7F4VPO5fOs4gFHN5zB4TkfcSjtq1ZWWks7BjecIe/SclKRUNs3fj5evRw4ZC2szpm8ayJ4/TnBi+2Wd2vJB/EuHruRk5P822achqLLtq1D3janAMUmSmgshXFAPBb2iGJBATkciGbVz9K76steVVZ8QoiZqx6WKJElJQojjgBFv/1dRaOSTtZQZadqUA0mSlgGvPBzJb+CJt6h/TdCt0BwJxnOPTeTQulMA7P7tELt/OwRAoaIFaT+6KcEBoe+lV5JyDo0VKevM5K1DmdNrGf7HAt5Lx8cQ+CSKXrNez35aOaYde86q6ytonY8lw1qycvd59p67805d4zvXw8rclEHztpOZqco6/uDJ2/xe3RL06DnDBv6ZtT9/yQ8c3H8jl9yr5f20DUdqQ0L9gDUxNaR4CXt+nKSepaRQqs/fuHUgUyZu49aN9/u+35fgexGM/P61Iz57Q58cjoh7BWes7cw5feDmO3UNnt4SSxszJvRYlTXbLzsfoutjeRgSxYAfN2XtL5nxHfu19G+FEBgZ6GFrZUZsXFKOMnMzYwrYmrNt7zXSMzJJj89k35FbdO9QjaVrTvIwRN3f/hdrOAbfDmNk87lZ+7P/Gs7hTecpUtqRW+cDeXD9MQD3/UO4ezWI8jVK8igg9zB00O2w151SC2YWJkzfNJDzB2+wcd5+3RvyAYh/6awrOaIj8zYsgFc/5Tu/OiiEsEA9ZFQDsBZCtNIU3UE9HPYp9cVonJySqIeqAC4CXwsh8gsh9FAPUb3iINA/W9uyh0aKA7c+oT05cPVwQt9QH0NjA1oNboSVvSWH1pxE31AfZ3f1rzVbJ2sGLenGjsUHSIhNyqXD1MKEinU80TfUR6FUUKvdV3hWK8GVQ+oHsrO7I9N3jWLJ0DVc2HtNV03XSlFHGwz0lBga6NGxfkVsLEzZfeY2tpZm/Dq8NVuOXsfvRG5H4U3GfO+Lq701QxbsIPWN2S1X74cR8SKezo28USoEZYs6ULGkE+eyTT/XFa5udugbKDE01KN1u8pYWZtxcN8NSpZywNHJCiHA3NyY/oPq4X81mMTE3NON7ezMKe3hiJ6eAn0DJW3a+WBhYUzAzSckJqTStsV8enVbQa9uKxg3Uv3Q7tPjd+7mkX/xKbiUKIi+gR6GRvq07FodK7t8HN722tGp06wCpw/eIjlR+5DIK/pPbkbhInZM6r2atFTts4/eV9enUMTZBgN9dX9r19QL6/xm7DsagFdZZ4q52qFQCEyMDejfpRbxiamEaJleHhefTHhELM0alEOpEJiZGNKgVmkCNUNd4RFx+AeE0qmVD/p6SpwdrahdrSRnLz/SuT0u7oXQN9TD0Fifln3qYFXAgsObznPfP4TSlYtmRXCKeDjiUblonjk6hzaepe53VSjobIOhsT6t+9fj4iG1w2liZsS0TQMIuPiQVdN26NyGD+ZviugIIYZo8jJvCSE2CCGMhBB/CCGChBD+ms9HJ1vJER2ZtzELWC2EGAoczXZ8LrBEkqT7QohuwDEhxEngJDBbCCGkj/tJtR/oLYS4AdxDPXyFJElhQoifgAtAOHAbeBXDHwgs1pyjp2lDb01ZLWDMR7RDK77tq9GgSy309JXcOnOPMY1mkp6WgamFCaNX98PBzY6k+BQOrj3J6kmvR9fajWyCR9WS/Nh0Fnr6Sn6Y1BqnEg6oMlWE3nvK5DZzefLgKQCtBjfCwjYfQ37twZBfewDw/HEUPSuM0pUZWTSq4k6z6h7oKRVcexBGvzl+pGdk0qyGB452lvRo4kOPJj5Z8jX6LQKgSyNvyhUvxKB52ylonY+WNcuSmp7BgTm9smR/WnOY/RfukpmpYtiinfzYuS6dG3nz9MVLJq7Yn5XDo0vq1vegYeNy6CmV3LwRyqih60lPz8TewZKuPWthaWlCUlIaVy89YvqU1w+NQcMaAjB/9j6MTQwYNKwB9g75SU/LIDDwGWNHbOLlS3VgMCZbArKBJp8pJibhbxnK8m1anvqtvNHTU3DrSjBju6wkXTN7SN9Aj+oNyzB9wJ+5zmvbqyalvVyZ0GMVdg6WfNPOh7TUdNafHpcls3Di9qxp5W/TpUvq1yxN4zqeKJUKbtwJY+ikLaRnZGJmasjg7rWxtc5HWloGdwIjGD5la9ZMqe9bVqaMuyMjpvoBMO7/djKwW206NPcmU6Xi2q1QFmZ7VcPkOXsY3a8+f63pR2xcEivWn+bKzcc6t8e3VWXqd6iKnr6CW+cfMrb1AtLTMrh57gHrfvmLcSt7YGlrTtyLBDbN38/VE+rIaK2WlWg7sAG9v54KwMEN57BztGbe3pEAXD52m1/HqSOtXzUqR4nyLjiXsKduu9f/i72qTyEyTPf/Q+/i74joCCEKob6Pu0uSlCyE2Ay00xSPkCTpk5OSxP8ixCfz30EIMR/YLUnSYR3rNZMkKUET0dkO/C5J0va3yBcA1kuS5PsO1ZK8evk/F3n18n828url/2w0q5frLEvGbcNPH+UwPPpubJ5t0Dg654GywEtgB7AA9eSYv3Th6MhDVzK65idAJ++ueYNJmoTjW0AQ6n+Gt1EYGPY3tENGRkbmP4kQH/d5G5IkhQG/AI+Bp0CcJEkHNcXThRA3NK8mMfzYdstDVzI6RZKkZ7yeXaVLvcM/UP7vnf8rIyMj81/jI4euNO9E65nt0DLNpBCEEPmBpoArEIt6pm9H1GkHEYAB6skjo4ApH1O/7OjIyMjIyMjIvJOPzdF5Y6brm9RB/aqTSHUdYhvwlSRJr5LGUoUQq1C/3+2jkIeuZGRkZGRkZN7J3zF0hXrIykfzdn0B+AJ3hBD26jqFAJrxCTNo5YiOjIyMjIyMzDv5O2ZdSZJ0QQixFfVb9TOAa6ijP/uEELaok6n9eT2b9oORZ13J/NeR/wFkZGS+ZHQ266q439SPul/ebzn+s74fWY7oyPznqato/bmboDMOqbZQdtDcdwv+S7g+fwi+tWZ87mbojCPHxnxx/a3MkC+nv92YO4S6ytzrTP1bOZS56d1CH8C/9c3IsqMjIyMjIyMj807+ActWfRSyoyMjIyMjIyPzTuSIjoyMjIyMjMwXi+zoyMh8YTTt14B6P9TExbMwxzec4eeui7PKytf2oP+i7tgVtuHuhQf83GUxzx9HAeq1gwYu7UH1lj6kJqWx+eed+M39K896Wgz+hrYjm2FobMCpbedZ0Gc56WnqxRcLONsy/Pe+lKxcjOePo1g0YCXXjuhmhWnXAlaMbVWLUk4FiElIZu6ukxy98RA9pYKZnRrh7mRHIWsLui3cwuXA3Ksuv8LcxJDJ39WjSglnYhKTWfDXafZduQeAV1FHlvdrRUp6epb8T1uOsfvSbZ3YkJ3Cha0ZOKgexYoXJC4umd9+PcqZ0/cpUMCC9Rv7kpz8esHKjRvO8+faM7l0WFqa0K9/XcqUdcLISJ/g4CiWLjnC3TvhuWRHjPyGBg3L8H2HXwkP//R1h774/mZnxbhWtSjlqO5vc3af5OjNhwBULubE2Ja1KZg/HzdDIhi/4QBPY+K16inrYs/IZjVxK2BFWHQc07ce5VqQ+vuxMTdlQmtf3J0KYGdhRoMpKwmPeamT9r9J4ZKF6L+wK8UruhEb+ZLlo/7kzA71e0obdqtN25FNsSpoya0zd5nd7VdePNXeRwo42zJwcTdK+RQjPTWDU37nWTJkNapM9SrzCoWg06Q2NOhSE+N8xoQHRjDcdwqJcbkXDf67eY+p4v9I5PfoyMjkwYvwaNZN9+PAqmM5jptb52Oi3whWT9hIC+su3L/yiB83Dskq/35SGwoVtaejS19G1J5EmxFN8aqvfeFdr3plaTeqGSPrTKaja1/sXQvQafLrZMix6wcT6B9MS5uurPpxAxO2DMPCxvyTbVMqBPO7N+FkQBA1xixl6qbD/NSxIc62lgBcexTGuD/3ExmX+A5NMLZVbdIzMqn142+MXbuPca19KVLQOqs88mUCVUYuzvr8HU6OQiGYOq0V588H0rzpPObM3seYsd/i6GiVJdOk8RwaN5pN40aztTo5AMbGBty7F06fXqto3nQeBw/c5KcZrTEy0s8h5+HhiIODpU5t+OL7W7cmnAgIovq4pUzZfJgZHdT9zdLUiDldvmXRvrNUH7eU26HP+LnTN1r1mJsYsqBbU/44dpmqY5ew6uhlFnZvSj5j9eoAKpXEmbvBDF2Vt6OnCxRKBZO3D+fCnqu0sOnKvN7LGLWmP4WK2VOmRim6TGvHxOY/08KmKxFBzxm7bmCeugYu7kbs8zjaFupN7wojKVPDnSZ96mWVd5rUBvcqxRlYdTxNLTvzfz8sJi0lPU99MrmRHZ0PQAgxTwhR4z1lpwgh6nyg/v5CiC5vKR8shOj0ITo/oO6aQoivsu3/IYRo9XfU9Ua9e4UQun1i8O5r+T6c3n6Rszsv8fJFzl+W1VpUJjgglJNbz5Oems7aSZtxK+uCUwkHAOp+/zXrpm0lITaRx3fD2LviMPV+qKm1jrqdarL/96OE3H5CQmwi66ZtzZItVMyeohVcWTNxE2kpaZzedoGgm4+p3rLyp5gFqKM5thamrD1+FZUkcfFBKP5B4TSuVIqMTBXrTlzj2qNwVJLqrXqMDfSoU7YYi/eeJTktnWuPwjlx6xGNK5X65DZ+CIULW2NtY8bWLZdQqST8r4UQcCuMOnU9PkjP06exbN1yiejoRFQqiT1/+aOnp8Sp8GvHTaEQ9B9Yl4ULDr5F04fzRfc3OyvsLExZe0LT3wJDuRYcTmOvUviWKcbDiBccuv6AtIxMlh44R3EHW1zs8ufSU87FgRcJSRy6/gCVJLHnyl2iE5KpU6YoANEJSWw6c4OA0IhPbvPbKFyyENYOVvjN26Pub8cCuH32HnU6VsencUVObT1PyO0nZKRnsm7aNsp87Y69WwGtugq62HFiyznSU9OJeRbHpQP+OJd2AsDM0pQWgxoxt9eyrAhecEAo6amfx9FRCOmjPp8b2dF5T4QQVoCPJEkn30dekqQJ2lbwFkIo33La76iXq9dWvx7QFVj/PvV/BDWBr94l9D4INe/VtyRJaiRJUqwu6n2DPK/lp+JS2olHN0Ky9lOSUgl/GIFzaSfMLE2xKWTFw+uvyx9dD8FFc+N6E+fSjjlkH14PwaqgJfmszHAp7UTEo2ckJ6S81nUjJOsmqHMEFLW3+aBTnG3zk6mSCIl8/RXeC4vMEdGxMjPh6LSe7J3QleHNv8bYQPcj5kJLTF0IcHV9bc+Gjf3YuLkfI0Z+g7m58XvpLVLEDn19JeFhr4cdWrX25uaNUB49ivz0hr8HX0J/0zbkIYCiBW0oWtCa++Gvr2VyWgZPXsRSNFsfeq1H5Jr5Iz6i334y2oZwhMDFw0ndF7MbrNl08dB+Hbcv3EvNtlUxNDbA2iE/lRqU5/IBfwBcPQuTmZFJjZaV2RT2G6vuzM0R7flfI4T0UZ/PzRfv6AghdgghrgghAjQLiyGE6COEmJVNprMQYqFme7wQ4q4Q4pAQYoMQ4tX6Gq2A/RoZb816HAghmgohkoUQBkIIIyHEI83xrIiIECJYCDFBCHEaaC2EKCKE2K9p1ykhREkASZKSgGAhhLcWU2oDVyVJyhBClBJCXMzWfhchxA3N9kwhxG3Niq+/aLkeVpprckMIcV4IUUYI4YL6rZNDhBD+QojqGvEaQoizQohH2aM7QogRQohLGh2Ts7XhjhBiCeo3XDplk28ohNicbb+mEGJ3tmtjo9nuKIS4qGnDb0IIpRCijRBijqZ8ULbrW0RzPbXa/I5r+UkYmRnlGh9PikvCJJ8xxmZGADnKE+OSMM5npFWX8Ru6Xm2/0vVmPYlxSZiYvd9D+m0EP4shOj6ZzrW90FMoqFKiMF5FHDHS/zAnxNjQgISU1BzHElJSMTFUD/UEPYumzaw/8R2/jB6LtuLuaMfwZl9/cvvf5PHjF8TEJNK2XWWUSgUVvVwpU7Ywhkb6xMUl0afXKr5rt5g+vVZhYmLA2B+bvFOniYkBo8d+y5rVp0lMVNtoa5uPxt+W549Vp3RuQ158Cf0t6FkM0QnJdHmzvxnoYWygT3xKWg75+JQ0TAwNcunxDwrH1sKUhuVLoKdQ0KSSO07Wlh/cbz+V0LvhxD6Po83wJij1lFSsW4YyNdwxMjHk4r5rfN3aB1fPwhgY6dNxfCtUKhVGJrntAbhx4g7O7o7sjP2DjaG/8uDKw6xcHxtHK8wsTSlU3J7vi/RnSpu5fD+xNRXqeP4vzc1CdnT+uXSVJKki4AUMFEJYA1uBFtlk2gKbhBBeQEugvKbcK5tMVeCKZvuqRgagOuo1OCoBlYELebQjRZKkapIkbUT9eusBmnYNB5Zkk7us0fkmWfVLknQHMBBCuGVr/2ZN1Kk5UFqSpDLANC16JgPXNOVjgTWSJAUDvwJzJUkqJ0nSq7u4PVANaAzMBBBC1AOKAd5AOaBituG8Ehp95SVJev2zEQ6hXsvENFt7c7zJSghRSnO8qiRJ5YBMoANwMtv1qA68EEIU0rTr1DtszutafhIpCSmYvBERMDE3ISk+OevXsGm2chNzY5LjU9BG8hu6Xm2/0mVibvJGPcYkJSR/sg0ZKhWDV+6iemlXjkzrSadaFTnof59ncQkfpCc5NQ1To5w3cDMjA5I0ofUX8Uk8ehaNJEFY9Evm7jpFnXLFPrn9b5KZqWLieD8q+xRlq99AWrfx5sTxO0RFxpOSks79+xGoVBIxMUksmH+QSpXcMMnjwQNgYKDHtJ9ac+d2OBvWn8s63rd/Hdauee34/C/4UvrboJW7qF7KlaNTetKpZkUO+N/nWWwCyWnpmL3h1JgZGpCUmpZLT1xSCoNW7uL7mhU4NqUXVUs6c/7BY57Ffli//VQyMzKZ2OIXKjcqz+bw32g1tDEntpwj8skLrh29xZpJW5i4ZSh/Bi3mWXAkyfEpRD6JzqVHCMGMfWM5s/0i3+brRAvbbpjlN6X7zA4ApGkS6P+c6kdaSjpBNx9zfNNZvBuWz6Xrf8HftNbV385/wdEZKIS4DpxHHWUoplkl9ZEQwkfj+JQAzqB+eO6UJClZkqR4YHc2PfZAJIAkSRlAoObh7A3MAWqgfqjm9VNvE4AQwgz1ENEWIYQ/8JtG9yueAw5azs+qX8NmoI1m+5Xj8BJIAVYIIVoA2tLyqwFrNXYcBayFEBZ5tHmHJEkqSZJuA68GmOtpPtdQO3wlUTs+ACGSJJ1/U4nmeu0HvtUMwX0D7HxDzBeoCFzSXBdfwE2SpAjATAiRD/X3t56c1/ptNmu9lkKInkKIy0KIy8uW5bWgbt4EB4RSpIxz1r6RiSH2RQoQEhBKQmwiL8KjcSvrklVepKwLwQGhWnWFBDyhyBuy0RGxxEcnEBwQir2bXdavdgC3Ms6E5KHrQ3kQHkW3hVv4euyv9Pl1O4WsLbgV8mG5DSGRMegpFBS2fZ1mVdzBlocRL/I8J/fgg2549CiSoYPX0bzZPEaP3IS9vSV37+aeLfVq1Q9tw10A+vpKpkxrSVRUPHPn7MtRVqGCC7161WaL3wC2+A0AYOHiTtT2ddepLdn5Yvrb0yi6Lt5CjR9/pc9v23G0tuDW4wgCI15QvJBtlpyxgR6ONhYE5tGHrjwMo/3cDVT/cSlj1+3HxTY/tx7/vTk52gi6+ZhhtSfT0q47Yxr+hL2rHfcuqWeR7Vp6kM4lB9PGvientl1Aoacg+Fbu65jPygy7wjbsWLyf9LQM4qMTOPDH8SxH5tGNxwD8U5ZqknN0/oEIIWqiXgK+iiRJZVE/nF/9F29C7Si0BLZL6p70tjtwcrZzQf2QbQikA4dROxDVUEcgtPFq+ooCiNVETl59smduGmnqelf9m4A2QojigCRJ0gONQ+EN+KFe7XW/Fj3abMyrJ2b/2Sqy/Z2Rre1FJUla+YaN2nh1vWsDlzSO5JvtWp1NbwlJkiZpys4BXYB7qK97daAKcOYdNmu9lpIkLZMkyUuSJK+ePXvm2WCFUoG+oT4KpSLH9pntF3HxKEy1FpXRN9Sn44RWBN0IIfSe+qF6aO1JOoxriZml6f+zd95hVRxfA34PVbCAYkMEwd5L7EaNvSWx19ij0cQWu0aNJbEkUWNLjLH32HuMvfeKBXsBFSsWBAFBmO+PXfCClyJef5Zv3+e5z92dmT1zztzdu2fPzOzgnicLtTtWZcu8XWbr2LpgN7W+roJHvqykck7JV4MbxZT1v3yHq96+tB7WBFt7Wz6tX4rshbOxd2V8QcPXI1eW9NjZWJPC1oY2lYuTIU1K1h7WZkTZWltjZ2Otb1vFbMclNPwF209foUvtsjjY2VDUKwuVCuVgw9HzgDa9PHPa1ABkck7F91+WZ9fZqxbRPy7Zs2fA1tYae3sbmjQtRTqXVGzedIa8+bKQ1T0dIpAmjQNdu1fH+6Sf2aiMtbUVw4Y3IPz5C34ZvZ6495e2rf/mm46z6NRxNp06zgZgyKDl7Nt76Y31/+jPN9eX51vbSvr5duQcO05fIWdmF6oVzomdjTWda5Th8u0AfO+bn46d1y0DNlZWpLS3o0/ditwLDObAxZcBZDubl+eu6bal8Srkga29LfYOdjTu/QXpXNOyZe4ubO1tY8ZIZXB3ode0b1gz+T+Cn7z69/j0YRB3rt3jy29rYGVtRUonR6q3+SxmTNada/c4vec8Xw1qiK2dDR553fisaVkO/3virdiUGB9q19XH/h4dJ+CxUipEHwdTxiRvFTAY8AMG6Gn7gL9FZAxa23wOzNDzzgM5gV36/h5gPlpXzQM9MpQZ8ElIIaXUUxG5LiJNlFLLRXusLKyUOqUXyY0WXYpLdP3Rcq6KSCTwI7GjRY5KqY0icgi4YkbOHrQuoZ91RzBA1ykISMo80s36sYuUUsF6N1JSpgDsAmYB3xCn20pnO7BWRCYope7rXVKp9S6wPcBP+uckUBkIVUoFJmJzfG2ZJFoOaUSbYU1j9qu1rsj8EctYMGI5IxqPo9uUDgxc0IMLhy8zqsXEmHLzhy2lx1/fsNB3KuGh4Sz9bW3M4MIM7umZ5TOBDgV68eBmAMc2e7Ns7FrG7RiGnYMd+1YeZv6wl80zqsVE+s3pyupHc7l/I4CfmownMMAy7wX5okQ+GpYtiI21FSeu+tN56koiIiMBWDu4LW4uWqBvWpdGANQeMYvbj57SoXpJPsnuRte/12g6Lt/OiBY12DnyW56EhDJq+faYiE6+rBkZ07o2qR3tCXwWxs4zV5i8Idk/SYJUq16QOp8XwcbGmjOnb9K/7xIiIiJxdXWmQ8fPcHZ2JCQknOPHrzPy55cBxZ69agIwccJmChR0o2y5XISFRbBuQ++YMj8MWMqZM7d48uTVIGlgYCjh+nto3oSP/Xz7skQ+GpbRz7dr/nSapp1vj5+F0nvuBgY1rMzolrU5c+MO/edvjDluSJOqAIxcvh2A9lVKUD6fFwD7L/jSa/a6WPUcG/tyDsK6Qe0A3sp6XNVaVaB2hyrY2NpwZt95BtYcSUT4C1I6OfLDwu645shEaFAYm+fuYu7Ql23cYmB9ClbIy+DPfwFgROPxfPd7W5r1r0tUZBSndp1jWu95MeVHt5xEn5nfBfscuQAAIABJREFUsvLBLJ7cD2TesGWc3HHW4vYkBasPdA3kj3r1chGxB9YAbmjRgAzAcKXULj1/A5BfKZXd5JjhQAs0B+gBsEspNUMfoNtZKdVKL+cAPAG+VEptEZHpQGalVF09fy6wQSm1QkR8gRJKqQA9zwv4C607yhZYopT6Sc87AdSILmuiVzZggVKqoklaX2As4KWU8hURV7QuoRRoEZJxSql5ceSkA+YAXmjdPJ2UUqf1yNAKIAroDnSI1l8/LlgplUrf/h7oqIsMBlqhjanZoJSKdz6viPwBtAMy6oOFMW0bEWkG/IAW9YoAuiqlDolIDjQHJo9S6pKIbAEuKKV6JGRzfG0ZB/WxLbJoLOr5/mIs6vl+85Eu6mmxvuJSmwYly2E4Umu0sXr520Ip9Ryteym+/C/MJI9TSg0XEUe0SMJ4vexeERkjIs5KqSdKqVDA3kRWrD4QpVQ7k23POHnXgVpxKxaRYoCPuRuzUspPRB6KSC6l1GU9bRwwzqTMHbRunHhRSj0C6plJvwQUNknaGyc/lcn2JGCSGfEJvrREKdUN6BYnzdNkeylmoj1KqauYXKxKqRom22ZtTqgtDQwMDAxen/dhvE1y+KgdnWQyXUTyo0UI5imlTDtD+wAeaJGct0F6tK6o+BiIFgW6/Jbq/5hIrC0NDAwMDF6D92G8TXIwHJ04KKW+SiDPMqPy4pe/NZH8i2hdcAaJkFhbGhgYGBi8HkZEx8DAwMDAwOCjxYjoGBgYGBgYGHy0fKgRnY961pWBQRIwLgADA4OPGYvNeKq0vW+y/i93VR1nzLoyMDAwMDAweL8xuq4MDD5QPrb3mhj2vL8Y9rzffIz2WJIPtevqo14CwsDAwMDAwOD/N0ZEx8DAwMDAwCBRPtSIjuHoGBgYGBgYGCTKh+roGF1XBgbxUK9rLf488gv/hi6m3+yusfKKVSnIrHMTWR+8kLHbh5HRI31Mnq2dDX1mfceaJ/NYensGjXqZW2nkJQ17fs7S2zNY83gefWZ9h63dy+ePTNkyMHb7MNYHL2TWuYkUq1rIsMewx7DHsOeN7UkOVqKS9XnXGI6OgUE8PLz9iEWjVrJ5zs5Y6WlcUjNsZT/mDV1CQ5f2XDp+jSFLesXktx7eFLecrrTy7EK/KsNp2q8eJWoWNVtHiRpFaD6gPv2rjaCVVxdcvTLRZsTLRQUHLe7JFW9fGqX/mjlD/mHo8j44pU/KIvOGPYY9hj2GPZbFCpWsz7vGcHReAxGpLyJDk1i2rogMfE35hfRVz+PLLyYiM19H5mvU7SkiX5nst9NXG3+riMhPIlLtLchNsC2Twr7VRziw9ihPHwbFSi/fsDS+PjfZs+IQEc8jWDB8GdmLeOKeJwsA1Vt/xqKRKwh+8owbF/zZOHMbNdpWMltH9TaV2DR7B37nbhH85BmLRq6IKeuWy5Wcn3gxf9hSwsPC2bfqMNfP3KBCo9KGPYY9hj2GPW9kT3IwIjr/P+gPTE1KQaXUOqXUL3HTRSTecVFKqTNAVhHxiKfIIGBKUupPBp5AvOt8vS4iYp2UckqpoUqpbZaq10RuYm2ZbDwLuHPttF/MfljIc25fvUu2Au6kck5Jerd0XD31Mv/aKT88C7iblZWtQNZYZa+e8iNdZmdSp0uFZwF37l67R2hw2EtZp/3IFo8swx7DHsMew563ieHovCfokYkLIjJTRM6KyCIRqSYi+0XksoiU0suVEpEDInJS/86jp/cWkdn6diFdhqOI5AaeK6UCRMRaRK6JhrOIRIlIRf2YvSKS0zQiIiJzReR3EdkJ/CoiKUVktogc1euvZ2LCeqC5GbtSA4WVUqdExEpEfEXE2ST/iohkEpEmus6nRGSPGTkiImP1MmdEJDou+gtQQUS8RSQ67ppFRDbp7fabiYwaInJQRE6IyHIRSaWn+4rIUBHZBzQxKe+k51np+44iclNEbPW2aaynFxeR3SJyXEQ2i4iriGQUkeN6fhERUdHOi4hc1WXFZ7PZtnxTUqRKwbPAkFhpIYEhOKZ2wCFVCoBY+c8CQ3BIncKsLIc4sqK3o2XFredZYAiOqRwsYkc0hj2GPYY9yedjsychDEfn/SInMAkoDORFi1SUB/qiRUUALgAVlVLFgKHAaD19IpBTRBoAc4DOSqkQ4FPgBIBSKhK4BOTX5R5HcxLsgaxKqStmdMoNVFNK9QEGAzuUUiWBysBYEUmplzsGVDBzfAngrF5/FLAWaAAgIqUBX6XUPd2WmkqpIkBdM3IaAkWBIkA1vW5XYCCwVylVVCk1QS9bFGgGFAKaiYi7iKQHhui2fKLr29tEfphSqrxSakl0glIqEDgFfKYnfQlsVkpFRJcREVu0aFVjpVRxYDYwSil1H0ghImn0djmG1tbZgPv6bxOfzfG15RsRFhyGY5rYfy6OaRwJCQqNedpKaZLvmMaB0KAwzBEaR1b0drQsxzSOcepxICQ41CJ2RGPYY9hj2JN8PjZ7EsJwdN4vriulzugOgQ+wXWmLep1B66IBcAKWi8hZYAJQAGKciHbAAmC3Umq/Xt4VeGBSx16gov4Zg+bwlASOxqPTct1BAqgBDBQRb2AXkAKI7mK5D2Qxc3zc+peiOSGgRS2W6tv7gbki8g1grvuoPPCPUipSd4x263qbY7tSKlApFQacA7IBZdAcvP26/m31dFO9zBGfvtHkAQoCW3W5Q4Cset4BNEezIppDWhHNgdmbiM1m21JEOonIMRE5Nn369HjUjR9fn5vkKPzS5BSO9rjmyISfz02Cnzzj4e1HZC/iGZOfo4gnvj43zcry87lFjjhlH919QtCjYHx9buKaPWPMUyFA9sLZ8ItHVnIx7DHsMewx7EkKxmDk94vnJttRJvtRvHx30M/ATqVUQbQIg2ksMRcQTOybZGicMnvRbralgI2AM1AJeKW7SOeZybYAjfToSVGllIdS6ryel0KvKy5x6z+IFnnKANQHVgEopb5FcxLcAW8RcYkj53UWVzNtx0i0thNgq4nu+ZVSHeKx05R1QG0RSQcUB3aY0cvHRG4hpVQNPS+6rbOhRbKKoDlseyBBm822pVJqulKqhFKqRKdOneI13sraClt7W6ysrWJt7199BM+CHpRvWBpbe1taDW3M9dN+3Lx4G4CtC/bQcnAjUjmnxD1PFmp3rMqWebvM1rF1wW5qfV0Fj3xZSeWckq8GN4op63/5Dle9fWk9rAm29rZ8Wr8U2QtnY+/Kw/HqnBCGPYY9hj2GPW+CEdH58HAC/PXtdtGJIuKE1u1VEXCJHj8CnEfrEovmMFAOiNIjHt5AZ15GGRJiM9BdRESvs5hJXm70Lqo4xKpfj1CtBn4HziulHuqyciilDiulhgIBaDd/U/agdUNZ605SReAIEASkToLuh4BPRSSnXl/0+KUEUUoF6/VMAjaYRLeiuQhkEJGyulxbESlgonMr4LIecXsE1EGL5CRkc3xtmSRaDmnExtDFtBjYgGqtK7IxdDEthzQiMOApIxqPo/3IFqx+NJe8pXIxqsXEmOPmD1vK7Wt3Weg7lfG7RrB83DqObfYGIIN7etY9XUAGd+09G8c2e7Ns7FrG7RjGQt+p3Pd7wPxhL4Ndo1pMJHfxHKx+NJcOY1ryU5PxBAY8Newx7DHsMex5I3uSg5VEJevzrhHtfvnxICKeaDfSgvr+XH1/hWmefkOdh9YdtANorZTy1AcieyulJouIO7ATzaEJRuuWKqg7GYjIXrRxLYNEm5o9FUinlIoSkXZACaVUN1Md9OMc0MYClUOLZPgqpb7Q8/5AG7+y3oxtZ4BySqkgfb+ErlM7pdQ8PW0VWkRKgO1AT2XyI+vO1W9AbUABI5VSS/UxMpuA9MBc4HG0/vpxG4BxSqldIlIF+BWw18UOUUqtExFf/ZiAeH6bxsByoJJSareZ36coMBnNCbUBJiqlZujlbui6TheRQUBzpVThhGxOqC1NUB/bIn6GPe8vhj3vNx+jPbxeFD9BWh7+JlkOw6LSMyymQ3L46Bydt4mITALWv43p0Lp8e7QxM+WVUi/M5PcCgpRSb+VdOh8TibWlCYaj8x5j2PN+Y9jzfmNpR6f14Y7JchgWlJ75Th2d/89dV8lhNOCYaKnk4wEMTODG/Bexx80YxE9ibWlgYGBg8Bp8qGN0jEU9XwN9ltK6tyj/MnA5gfwwtNlgBomQWFsaGBgYGLwe78N4m+RgODoGBgYGBgYGiWL9HkRnkoPRdWVgYGBgYGDw0WIMRjb4/45xARgYGHzMWGwgcKdjbZP1fzm9xLx3OhjZ6LoyMDAwMDAwSBRjjI6BwQfKxzadtHau/u9aDYvx3+XfqJ3h23ethsX478E0art1f9dqWIz//KdQy+nrd62GxdgUOJuaKVq+azUsxuawRRaV9z7MoEoOhqNjYGBgYGBgkCjWH2hPv+HoGBgYGBgYGCSK0XVlYGBgYGBg8NFidF0ZGHzkeOR1o9sfHcldPDtPHjxlRv8F7F9zBIDaHarQbEAD0mV25uy+C4zvMJWHdx6/thyAik3K0nZ4U9JndeHBzYfMHryYA2uPWtwe9xwZ6TKsPrkKuhH46Bmzfv2XA1t9qFy3GN1/ahhTTqyEFA52dK8/iSs+/q/I+XVhZ/IW9SDyhfa09/DeU76pOfaVcr1+aUKNRiX5uuqv3Lnx0PL25MpMl1+bk6tINgIfBjFr+CoObNQWT6xQrzit+n9B+ixpCfB/zNxRazj436l4ZRWtmJcOwxqSNUcmgp48Y8awlexdexyA0jUK0W5IfTJ5uHDdx59JvRZy49Idy9uTMxNdRjclVyF3Ah8GM2vkGg5sOq3Z82UxWvWpQ3pXZwJuP2buLxs4uPm0WTkdf6xPmZqFSJshDQ/vBrJ0yha2r3h5vllZCa361qFGs7I4pLLnju8DBjSZwrOnoZa1J7crXce3ivl9Zv64nAMbTgBQq00FmvaqQ9qMTvgcuszvXefw6O4Ts3K+/KYK1VuWxzO/G7tXHGZ8l9kxeXlLZKfNkAbkKpqNyEjFmX0X+Kv/Yh7dC7SoLQDuebLQbVI7chXzIjDgKTN++IcD645p9rSvRLO+X5I2kzM+By4yvvN0Ht0xb89vWwaTr1TOmOsn4PYjOhbuF5PfYkA96nSsQkqnlBzd5M2krrMICbLsb5NU3tZ7dPTljTqizYI9A7QHXIElQDrgBNp6lOHJkW+8R8fAIAlYWVsxYk1/Dv97nIYu7ZnY+W8GLOiOWy5XClfMT/tRXzGs/q80dGnPXd/7DFrc87XlALhkScfABT2Y1mce9ZzaML3/An5Y9D3OGdJY3J6hf7XlyM7zNC0xnMlDVtJvXAvcPNOzc91JGhb9Mebz5/DV3Lnx0KyTE83UEWtjyptzcgoU98TVw8WiNrxiz4LvOLLlDE1z9WZy70X0m9oet+wZccnsTL+p7ZkxdAWNvHoyc8RK+k/rgFP61GZleeR2ZcC0r5k3ei2NcvSia+VRXDnlB0CW7BnpP+1r/ui3mMY5enN4y2mGLfwOK2vL/pVaWVsxdE4njmw7S9MCA5g8YAn9prTBLXsGXDI70W9yG2aMWE2jPP2YOXIt/f9si5NLKrOywkLCGd52Oo3z9md8zwV0HtGIfCW8YvJb9a1DvhLZ6V13PI3y9GNsjwWEP4+wuD3D/unOkU2naOLZnUnfz6P/9G9wy5GJQp/mpt3QRoxoMYUmnt256xfAwFmd45X16O4T/hm7ni0L972Sl8o5Jf/N3U3bQv1pW7AfIUFh9J5q+cHSVtZWDF/Rm8MbT9LYtRMTu85iwJzvcMuZmUIV8tJ+RFOGN/6dxq6duOv7gB/md0tQ3p+95lE/fQfqp+8Qy8mp1qoCVb8qT+/KI/jKqyv2DnZ0mdDG4vYkFSuikvVJCBFxA3qgLQhdELAGmqMtHD1BKZULbZHpDsnX2wARqS8iQ9+CXFd91W9EpISITLZ0HUnUI4OIbHoXdZvokOQ2FpG6IjLwNeUX0ldCj97/QkRGvKaa8eKR1w2XLOlYOWEDUVFReO88y7n9F6nWuiJlvizO3hUH8Tt3ixcRL1j08woKf5Yf1+yZXksOQIas6Qh+8oyjm7RIxJGNJwh79hzXHJktZQoA7tkz4JIxDavn7CUqSnHq0FXOnfClSv1PXilbrUEJtq0+nuy6rKyt+G5oPaaOWPMmKieIe67MuGR2YvW07Zo9+y5y7shVqjQtTfoszjwLDOHYdh8Ajm49y/OQ57h6pjcrq3nv2mycv5dj232Iiowi6PEz7vgGAFC8cn7OHrqCz+GrREVGsXzyFlwyO1O4XC7L2pMzEy6ZnFg9fadmz/5LnDt6jSqNSpHe1ZlnT0M5tvOcZs92nwTtWTh+I7eu3kMpxcWTfvgcuUq+4pqjk8rJgfodKzO53z/c99cikH4X7xDx3LJLxLnndsUlszOr/tyi2bPnAj6HL1O1eTlK1y7K3jXH8LtwmxcRkSz+bT2Fy+fB1SuDWVn715/g4L8nCXoU/EresW1n2LvmGCFBYTwPDWf9jO3kL23Z3wa0aI6La1pWTf5Ps2fXOXwOXqZqy/KUqfMJe1Ydwe+8Py8iIlk0ZjWFK+TDNXvG166nTJ1P2DR3Fw9uPSLs2XOWjV/PZ43LYO9gZ3GbksJbXOvKBnAQERu09STvAFWAFXr+PKB+svVO7oEfGf2BqW9Bbm9gBoBS6phSqsdbqCNRlFIPgDsi8um7qF8nyW2slFqnlPolbrp+EcR3zBkgq4h46En/AnVFxDKLsIqZ912J4FnAAxGJna9vexZ0fy05AJeOXePmeX/KflkCKysrytUrScTzCK6f9rOEFSZVmtMDPHPFdqgyZnGmYEkvtq9J2NFp37cWSw4PY9ySLhQqlT1WXoP2FThz9Dq+F+++sd7xYc4cRPDM68Zlbz9uXr5L6ZqFsbISytYuQkT4C66fMx+hyqs7AVN3/8iis7/Sb2p7Ujk7xtRj2nbR+9nyuf1v7MnjyuVTNzR7qhfU7KlZWLfndqJy7VLYkruIB34Xta42z7xZiHwRSfnPi7Lo5Chm7P2RL9pWsKgtuupm0rR2EyTWK+2iy1qiTQuWy4PfhfgjkcnF3PUjAp75syIicf4O9P+D/Gb+D3Ta/9SMZbem8fvOYRSumC+WTInz32KXwg63nJZ98Ekq1kQl6yMinUTkmMmnU7RMpZQ/MA64gebgBALHgScmizLfApJ9Qnwwjo6IeIrIBRGZKSJnRWSRiFQTkf0icllESunlSonIARE5qX/n0dN7i8hsfbuQLsNRRHIDz5VSAXrelyJyWD9+m4hkEhErEfEVEWcTfa7oeTlE5JCIHBWRn0TE9DGjEbBJL1/JJLozXETmicgWXW5DEflNRM6IyCYRsdXLDdXlnhWR6aKf8SJSUkROi8hBERkrImf1dGt9/6iebxr/XQMk+IKI/0Ub6zpeEw1nEYkSkYr6MXtFJKeItBORP/S0uSLyu4jsBH4VkZQiMlu38aSI1DMxYT1ayBOlvfJ7F/BFYudWUrh5wZ8n9wNp2q8u1jbWFK9emMKf5SeFox1HNp7gsyZl8SrkgV0KO1oNbUxUVBQpHO1fSw5AVFQUWxfs5odF37MxbDE/LPqeid9OJyzEsovW37x2nyePgmn8zWdY21jxSflcFCqZHXsH21jlqjYojs+x69y7ZX68EcDssRtpX+VXWlcYyaalhxn+d3tcPdIBkD6zE3Wal2bBxC0W1f8Vey7f5cmDIBp3q6HZUykfhcrlwt7RlqgoxbZlhxjw99es8/+D/tM6MLnvIp6HmO/uT58lLVWblGFU+7/pUHoodg62dBnTHIATu85TqGwuCpXLjY2tNc161sbGzvqVdntje67c40lAEI2/q6rZUzEvhcrkxN7BTrNnxREG/NmOddcn0P/PtkwesJTnoYkPX+j+SzOunfPn+K7zmq2uzqRycsQte0balx3OqE6zaNWnNsUq5LGsPZfuavZ8XwtrG2s+qVKAQp/mIYWjHUe3nqZig5J4FciKXQpbWg6oq10/Dq9eP6+DV4GstBzwJTN/XGYhK15y8+Jtnjx4SpPeX2j2VCtEoQr5sHe058hmbyo2KoNXQXfNnkENiIqKwt7RfBRm1uAltMvXi5bZu7Fx1g5GrOwTE/05uuUUtdpXIlO29DimcaBpH+3vLD5Zb5vkRnSUUtOVUiVMPtOjZYpIWqAe4AVkAVICtc1Un+wBQh+Mo6OTE5gEFAbyAl8B5YG+wCC9zAWgolKqGDAUGK2nTwRyikgDYA7QWSkVAnyKNtApmn1AGf34JUB/pVQUsBZoACAipQFffTXzScAkpVRJIOaRSkS8gMdKqfjuUDmAz9F+4IXATqVUISBUTwf4QylVUu+3dODlTXsO8K1SqiwQaSKzAxCo61IS+EbXA+AYkJRHtbfaxkqpSOASkF+XexyoICL2QFal1BUzOuUGqiml+gCDgR26jZWBsSKSMh4bk2pzokS+iGRYg98oXac4y+7MoHHvL9m97AAP/B9xcsdZ5g9fxrAVfVnoO5V7vvcJDQrjwa1XB9wmJAegWNVCfPNrK/pWHkZt+xb0qTSM3jO+JUcRT0uYYaJHFD99N49SlfKx+MCPNPy6Inv/O03A3diDNqvWL55ot9XFUzcJffaciPBItq0+zrkTvpT8LC8AnYfUZfEf2wgJDrOo/nGJfBHFT22nUap6QRb7/EbDLtXYu/Y4AbefaAOLhzZkQL3f+TJLNwbUG0/PCa3JXjCrWVnhYRFs+ecA/tfuE/bsOUsnbKJEtQIA3Lpyj/Hd59Hll2YsOvsraVxScePiHQJumx9o+kb2dJhBqaoFWOw9moadq7B3/UkC7jyhaIU8dBhSnwGNJ/GlZy8GNJpEz7EtyF4g4QfeDkPqkS2PK2O+nRPLVoDFE/4jPCwC3/O32b32BCWrFrCwPZH89NUUStUowj+XJ9CoW032rj5KwO3HeO8+z8LRaxmyoCvzz47l3o0A7fq5/SjZ9blmz8jPK3oxbcA/+By8bEFLNCJfRDKiye+Uql2UJX5/0uj7OuxZeYgA/0d47/Rhwc8r+XFJTxZcmsQ9P82eAH/z9lw8epXQ4DAiwl+wbeFezh28RMmaRQHYPHc3u5Yd5LctQ5h+4jdO7da6K+OT9baxlqhkfRKhGnBdKfVAKRUBrALKAc7yMoqfFZP76+vyoc26uq53USAiPsB2pZQSkTOAp17GCZgnIrnQPEBbAKVUlIi0A04Dfyul9uvlXYEHJnVkBZaKiCtgB1zX05ei3dTnoEUNlurpZXnZd7gYLQRnTm5c/lNKRei6W6NHftBGnEfbUllE+qP1WaYDfERkL5BaKXXApM5oB6gGUFhEGpu0RS7dhvto3nJi/C/aeC9QEc2DHwN8A+wG4ptatFx3kKJtrCsiffX9FIAHcN6MjWZtFi1s2gng77//TqgtYnH9zA36VB4Wsz9x30i2zt8FwLqpm1k3dTMAbrlc+WpwI3zP3nxtOTmKenJ6z3kuHb8GwKVjV7lw+DLFqhXi6infJOuaFHwv3qV/y2kx++OXdonl1OT/JBsuGdOwb9OZ15KrlIrpfyhaNicFinvydf/PY/InLO/KtJHr2LXe+w0tiI3vOX/61/s9Zn/8v/3YtvQQOQq6c/bgFS6fugHAJW8/Lhy/TrGK+bh29tYrcq6fuwUJrAG4b/0J9q3Xno1SpnGgxlfluHTS16K2APiev03/xi+H9Y1f24tty4+QI78bZw9d4fJp7fy6dOoGF076Uax8Hq7FM2C8VZ86lKicn/6NJ8VyOq+f1+4d/4slD6/73KL/57/G7P++ZRDb/tH+ItbP3MH6mTsAcMuRiRZ9v8TvfPK6nDK6u/DLmr4sHrue7UsPvrni8XD97E36VR8Zsz9h5zC2LtoLwPq/t7L+760AuOXMzFcD6+HrY/7/IC7a5SP6tmLBzytZ8PNKAD6pVogHtx4R4B9/hPVtYvV2Xhh4Aygj2jCDUKAq2kPqTqAxWsChLVqwIVl8aBEd0+hIlMl+FC+dtp/RoiMFgS/RboTR5AKCiX3zC41TZgpaJKUQ0Nkk7yBatCIDmmOzKhFd48o1a4seLYpQL1dXjQJsRCQF2piWxrouM3R5CS2OJkB3pVRR/eOllIruM0ih65QY/4s23osWaSkFbAScgUrAnnh0emayLUAjExs9lFLn9by4Npq12TSM2qlTp7jZ8eJVyANbe1vsHexo3OdL0rmmZcvcXdja2+JZQOt/z+Cenl5/d2bN5I0EP3n2WnIALh29SqEKeWMiODmKelKoQj6Lj9EB8MyTGVs7G+xT2NKoQ0XSZUjDtlXHYvKrNSjBvs1nCH0Wf7dZytQp+KR8bmztbLCytqJy3WIUKpmd43svAdCx+m90/XIC3epqH4DhnedyYMtZy9uT3w1bexvsHWxp1KU66TI5sW3JQS55+1KgTM6YCE6OQu4ULJNTc2jMsPWfg1RvUY7M2dJj72BLkx41ObLlpbOXs7AHVlaCk0squo9vyeHNp7l15Z7l7cmXRbMnhS2NOlchXUYnti07zKVTNyhQOkdMBCdHgawULJ0jxmmJS9Nu1anUoDiDWvxJ0OOQWHl3/AI4c+gKzb+vga2dDe45M1Gx7icc2Wb538erQFb997GjUfeapMvsxNZF+7G1t4kZj5Mhazq+n9SWNdO2EvwkxKwcK2srbO218810G8DF1Zlf1vdj/cwdbJy9y+I2xLKnoPvL67hnHdK5OrN1/h5s7W3Jll871zK4u/D91A6s+XOzWXtSOjlSvFohbO1tteuneTkKlc/D8a3aqwJSp00Z043lkdeNzr+2ZNGYVbyrxbjfRkRHKXUYbdDxCbQHfStgOjAA6C0iVwAXYFZy9f7QIjpJwQmIfhRoF50oIk5oXTIVgT9EpLFSagVaJKBVPMe3jU7Uoxqrgd+B80qp6H6JQ2hjcZaijw/RucTLCEhyiHYMAkQkFZqMgNHRAAAgAElEQVRnu0Ip9VhEgkSkjFLqUJw6NwPficgOPVqUG/BXSj1D6/6JHsvjBsxXSlVNpm5v2saHgfnANaVUmIh4ozmVSRlPsxnoLiLd9d+kmFLqpJ4XY2M8+29EtdafUbtDFWxsbTiz9zwDa/xMRPgLUjo58sOi73HNkYnQoDA2z93J3B+XxhzX4ocGFCyfj8Gfj05QDsDpPedYMGI5Py7vQ9pMTgQ+eMo/Y1bF/PFZkqr1i1OzSUlsbKw5e+w6g9rNICJcC5zZ2tlQoU5hRnVb8Mpxzb6tTIESXgztOBsbW2va9qpJ1uwZiYqK4ta1+/zUZR7+17UAXuCjV529wEfPCLfwrB6Aqk1KU7PVp9jYWnP20BUGNZlERPgLzhy4zKKxGxg8uxPOGdIQGBDE0ombOKGPU6ncqBTNetbi2wo/AbBl8QEyZk3HxE0DADi2w4dpg16O8/h2dFO8CmQlMiKSveuOM33oileVsYQ9jUpSs0U5zZ7DVxnU4g/NnkNXWDT+Pwb/3QHnDKkJfBjM0ilbOLHngmZPgxI0616Db6to51v7H+oS8TyCWfteTnpcOmULS6doz0C/dp1Lz3FfsfTsLzwJCGL+2H/x3nfJ8vY0L0vNNhW18+3gZX6oP16/fhwYOLMTrl4ZCQkOY+uifcwfuTrmuGZ9Pqdg2dz82FhzlL/q9yWtfqhnIrccC8esZeEva6nVpiJZvDLSckBdWg6oG1OmgVsXy9vzVXlqta+s/T77L/JDnV9i/g8GzutKluwZCQkKY8uCPcwbvjzmuOb961Lw07wMqfebdv0Mb4J7nixERUZx8+IdRjSdwK3L2mDxNC6pGbGqDxmyuhAYEMSaPzbx36ydFrclqbytNyMrpYYBw+IkX0N7GH5j5F15hq+LiHgCG/QoAqJNJd6glFphmiciZdGmoj0AdqC9ZMhTHyTrrZSaLCLuaGGxcmjRh6NAQf3GWQ+YgHYjPwSUVEpV0ussoZdtp5Sap6flQhtjI2gzfToppdz0vO1o41SuiEgloK9S6gsRGQ4EK6XG6eWClVKp9O2YPBEZiebI+AI3AT+l1HB9jNAMtEjHLrTxMp+KiBUwEi3KInob1FdKBepdPc+VUlN0O0YppWq+izbWZe8F9iqlBonIV2jRq3Qm3V8llFLdTHXQj3NAGwtUTrfRVyn1hZ73B7BZKbVe398A/BDdFRcPyljU8/3FWNTz/cZY1PP9Rl/UM6FegNfit3O1k+Uw9M//n8V0SA4fjKPzNhGRScB6pdS2ZBzrCITqTlJzoIVSqp6e1wAorpQaYmF9UymlgvXtgYCrUur7RI7ZA9TTI0LdgBtKqXWW1CuR+pPdxkmUb482zqe8UuqFiGQCFichamU4Ou8xhqPzfmM4Ou83hqOj8TF2XSWH0UDpZB5bHK2bRoAnQMxVr5RaLSJv43Wwn4vID2i/nx8m3Ufm0McV/a6Ueqzr9cdb0Ckx3qSNk4IHMFC9fO+CB9DnLdZnYGBg8P8KY1HPDxh9mniyohtKqb1AkQTyZyZXrwRkLuXlrK+klH+A9h6dd8abtHES5V8GLpvsW35xKAMDA4P/x1i/nVlXbx3D0TEwMDAwMDBIFCOiY2BgYGBgYPDRYp3IAp3vK8ZgZIP/7xgXgIGBwceMxQYCT71YOVn/l13y7DQGIxsYGBgYGBi833yoER3D0TH4f0/NVG0TL/SBsDl4HqXa/p54wQ+EI/N6U7XS6MQLfiBs3zWIj+11BkW7T3jXalgM7ym9qJ3pu3ethsX4795fFpWXhHWr3ksMR8fAwMDAwMAgUd7SWldvHcPRMTAwMDAwMEgUI6JjYGBgYGBg8NFiZYzRMTD4uHHP40q339uQq6gngQFBzBiylAPrjwNQq+1nNOv9OWkzOeFz8BLjv5vFo7tPXpFha2dDtwltKFa5AKnTpuT2tfvMGb6CYyaLdiZV1pvi6ZqO/m2qkNczE4+DQpmydA+7jl+hYA5XOjcsR17PTERFRXHiwi3GLdzJw0Dzq7EDVC+dh471y5DZJQ0PA5/x04zNeF/yx8baip+/q0M+z0xkyeDEt2OWceKC+VXD3xQPDxd69KxJrtyZCQwM4e+/drB/3yUyZXZi8ZKuhIaGx5RdsvggCxfsT1Be4SIeTJjUioUL9jNn1m4APL0y8O13VcmdJzNOTo4WHT9Ur2starSthGchD3b9s5+xX/8Zk1esSkG6/dGRjB7puXD4MmPb/8n9GwGAdk71+OsbKjQqw/OQcJaNXcvKCRviradhz89p1r8+9g527F11iMnfzYhZVDZTtgz0nd2FvKVzcf9GAH90n8XJ7QktFZd0vDKl44emlcnnnonHwaFMWLOHnaevYmNtxZi2dSjgkZEsLk50nLScY1fMnyO2NtYMalqF0nk8cHJMwc0HT5iyYT/7z/kCkD1zOn5uXQv39E4AnLt5n99W7OTa3UcWscEU91yZ6fJLc3IV9iDwYRCzRqziwH+nAKhQ9xNa9fuC9FnSEuD/mLlj1nJQzzNH0Yp56fBjA7LmzETQ42fMGL6SvetO4JY9Ix2GNSR/iexYWVtxyduPvwYvw//qPYvbkxSs5cPsurJ61woYGHwIWFlbMXxJTw7/501j9y5M7DGHATM745YzE4XK56H98MYMbz6Jxu5duOsXwA9zzQ9otLKx4oH/I/rVGkPDLN8x/+eVDJ7fhUwe6QFeS9abYG0ljOtZj33e16jWZSpj5mxlROfaeGRyJnVKe9bsOk39PjOp22cmz8LCGdqxZryyShXwoFvTCvw8cwuVOk+h8+hl+D8IjMk/dcmfYX//R8CTYIvbEY2VtfDzqMYcOniFBnUn8Pu4//hhcF2yZk0XU6buF+P5ovY4vqg9LlEnx9raiq7dq3PunH+s9BcvItm96zzjfvvX4jY8vP2IRaNWsnlO7NWp07ikZtjKfswbuoSGLu25dPwaQ5b0islvPbwpbjldaeXZhX5VhtO0Xz1K1Cxqto4SNYrQfEB9+lcbQSuvLrh6ZaLNiGYx+YMW9+SKty+N0n/NnCH/MHR5H5zSp3lj26ythImd6rLn7HU+G/AXPy/Zxug2tfHI4AyA9zV/Bs3fxIMEnOloOfceB9Fx0nLK9/+TP/89wG/tPydLOk3HB4HP6DdrAxUH/EWlgdPYfeYqv7Sr88b6x8XK2oqh877lyJYzNM3Th8l9F9NvanvcsmfEJbMT/f5sz4xhK2mUoxczf1pF/6lf45Q+tVlZHrkzM+Cvr5k3Zh2Ncvama9XRXDl1A4CUTg4c2nyajp8Op0XB/lw86cuwee9u7TdropL1edcYjs5HgIhMFJGK+vZMEcn/jvQYJyJVLCDHU0TOvuHxX72pHqa453HFxdWZVX9sJipKcWr3eXwOXaZqi08pU7sYe1Yfwe+8Py8iIln0y1oKl8+Lq1fGV+Q8Dwln4eg13LsRgFKKw5tOcdcvgFzFPAFeS9abkM01HemdU7J48wmilOLY+ZucuuxP7U/zc/C0L9uPXuZZWDjPw1+wfJs3hXNliVdWpwblmLX2EGev3kEpePA4mAePNafmRWQUS7ac5NTl20RGvb2nQQ+P9LikT82K5UeIilJ4n/TD5+wtqtUomCx5TZqV5vjRa9y88TBW+q2bj/hv4yl8fQMsoXYs9q0+woG1R3n6MChWevmGpfH1ucmeFYeIeB7BguHLyF7EE/c82m9SvfVnLBq5guAnz7hxwZ+NM7dRo20ls3VUb1OJTbN34HfuFsFPnrFo5IqYsm65XMn5iRfzhy0lPCycfasOc/3MDSo0evMl6jwzpSODU0oW7tTOt6OXbuJ97TZflMrHi8goFu06ife120RFJXxTDAt/wbT/DnH70VOUgr0+1/F/GEg+d+36CAp9zu1HTwEQgagohbvuTFkS91yZccnsxOq/t2v/B/sucu7IVao0KU36LGl59jSUYzt8ADi67SzPQ57j6pnerKzmveqwcf5eju3wISoyiqDHz7jjp51fl076sWXxAYKfhBD5IorVf2/HPVdmUqdNaXGbkoKVRCXr864xHJ0PHBFJB5RRSu0BUEp1VEqde0fqTAEGmssQEd//oR6egEUdHW3N1rhp4Jk/KyKx86O3PfO7JSrXOWMasubMhN95/xiZyZX1Opi1ByFH1lf/jIvlceOa/8NX0gGsRMjnlQnn1A6s/O1r1k/4hr6tq2Bv+7/tFTf3NjIRwcsrQ8z+P0u6sWR5N/oN+Jw0Tg7xysqYKQ21axdm/vx9b0HT18ezgDvXTvvF7IeFPOf21btkK+BOKueUpHdLx9VTL/OvnfLDs4C7WVnZCmSNVfbqKT/SZXYmdbpUeBZw5+61e4QGh72UddqPbPHIeh3M/z6Q09X8zT+ppEvtSLaMabl6N/b5uffX7zj8ew8GNK7MrC1H3qgOc5i5fEAEz7xZuOztx81LdyhdszBWVkLZ2kWICH/B9TjRwWjyFvcCYOquISw6/Qv9/mxHKmdHs2ULlc3Fo3uBBD1OOPL1tjAiOgavjYisEZHjIuIjIp1E5DsR+c0kv52ITNG3fxSRCyKyVUT+EZG+erHGwCaTY3aJSAl9O1hEftXr2CYipfT8ayJSVy/jKSJ7ReSE/imnp1uJyFRdtw0islFEGut5xUVkty53s4i4Aiil/AAXEcmcRPsz6PacEJG/RcRPRKL/+WxEZJ6InBaRFSLiqB/jKyKjReSgiBwTkU90Ha6KSHRM9xeggoh4i0gvs5W/Jjcv3uHJg6c06VkHaxtrPqlSkELl82LvYMeRLaep2LAUXgXcsUthS8sf6hEVFYW9o32CMq1trBk461u2Lt7PzUt3AJIt63XxvfOIx09DaF2nBNbWVpQumI1P8mYlhV1sByWne3o61CvLlKV7zMpJ5+SIrY01VUvmotOopbT6cQF5smXg67pvc6H6V7lx4yGPHz+jWfMyWFtbUbyEF4WLeGBvb0tgYAjfdZ5Ni+Z/8F2nOTg62jNocL14ZXXrXoM5s/cQFhrxP7QgflKkSsGzwJBYaSGBITimdsAhVQqAWPnPAkNwSJ3CrCyHOLKit6Nlxa3nWWAIjqnidwqTiu+9xzwKCqVd1RLYWFlRNq8HxXO+er69DjZWVoxuW5v1h8/he+9xrLwKA/6ifP8/+WXFDi7eevCm6r/Czct3eRIQTOOu1bG2seKTz/JRqGwu7B3siIpSbFt+mAF/tWfdzSn0n/o1k/st5nlIuFlZ6V2dqdq4NKO+nk6HMsOwS2FHl9HNzJbrMqY504etsLg9ScVaVLI+7xrD0Xm3fK2UKg6UAHoAq4CGJvnNgKW649IIKKbnlzAp8ylwPB75KYFdeh1BwEigOtAA+Ekvcx+orpT6RK9vsp7eEC0yUgjoCJQFEBFbtMhNY13ubGCUSZ0ndJ2SwjBgh173asDDJC8PMF0pVRh4CnQxybuplCoL7AXmojl7ZUxsGgjsVUoVVUq98jYz3ak8JiLHpk+fniRFI19EMqL5ZErVKsKSq5Np1KMWe1YdIcD/Ed67zrFg1Gp+XNSNBed/555fAKFBYQT4xz8AUkToP7MTEeEv+LP3gpj05MhKDpGRUfSbvI5Pi2Rn0+TOtKxVnG1HLnH/0ctxNFkzOjOxT0N+X7QT70vmn0af64NYl2315mHgMwKDw1i86QTlinhZVN/EiIyMYtiQFZQuk5MVq3rQpGlpdu86T8CDp4SFRnDp4l2iIhWPHz9j8qTNlCyVHUdHu1fklC2bE0dHO3btPP8/1T8hwoLDcEwT29lwTONISFBoTPQlpUm+YxoHQoPCMEdoHFnR29GyHNPEjiQ4pnEgJDj0jW14ERVFrxnrKF/Ai22jO9G6SnG2nLzEvWSO2xKBkW1q8eJFJL8s32m2TFj4C5bvO83PrWuS1gLOmimRL6L4qd00SlUryOIzv9Lwu2rsXXecgDuPYwYWD2gwgS+zdmdAg9/p+XsrshfIalZWeFgEW5YcxP/afcJCnrN00iZKVI3d5erkkopRS3vw79zd7F59zKK2vA5WRCXr864xZl29W3qISAN92x3wAq6JSBngMtrNfj/wPbBWKRUKICLrTWS4AvE9soTzMtpzBniulIoQkTNoTgyALfCHiBQFIoHcenp5YLlSKgq4KyLR/yZ5gILAVr37wxq4Y1LnfSCLruefvHR6soiIt769XCk1Sq+jAYBSapOImD6W3VRKRY8YXYjmCI7T99eZ2JRKKRUEBIlImIgk2iGvlJoORHs4amXvhAemRnPd5yb9ao2J2Z+wbQhbF2vdG+unb2f99O0AuOXMxFf96+J7Lv7ZRb2ndiBtRieGNBxP5IvIWHmvKyu5XLkZwLdjlsXszxzSnH/3aeMKMruk5o/+jZi99hD/HYj/ph8U8px7D4NQ78GLxK5de0Dvngtj9if/0YYtm83MGNJVNdd9V6y4J7nzuLJ8VQ8AUqa0JypK4eWVgaFD3s2TtK/PTWq0+SxmP4WjPa45MuHnc5PgJ894ePsR2Yt4cmKbNnMvRxFPfH1umpXl53OLHEU82bP8YEzZR3efEPQoGF+fm7hmz4hDqhQxDlT2wtnY+Y9luvAu3w6g4+TlMfvzejVj3ZHk9bIP/6oGLqkd6TZtNS8SGNdjJUIKW1syOqfisQUcNlN8z/nTv8HL56jxG/qybekhchTIytlDV7isDyi+5O3HhRPXKVYxL9d8Xr2Or5/zhwTWnEzl5MiopT04tOU0SyZuirecQfwYEZ13hIhUAqoBZZVSRYCTQApgKdAULYKzWmmrria0IFqofpw5ItTLVVujgOcAuvMS7eT2Au4BRdAiRdGPufHVKYCPHi0pqpQqpJSqYZKfQtcJpVTX6HLAbZNjRpnIio+4V77p/vO4NpnsvzXn3auAO7b2ttg72NG4R23SZXZm68J92Nrbkk0fQ5Mhazq+n9KeNVO3EPwkxKycHpPa4p7HlaFNJhAeFrt75HVlvQk53dNjZ2uNvZ0NLWsXJ71zSjbsO0eGtKmYOrAJK7afYtXO04nKWb/Xh6bVipE2tQOpHe1pUaMY+7yvvbTJxho7W+tXti1N9uwZsLWzxt7ehibNSpPOJRWbN50mb74sZHVPhwikSeNA1+7V8T7px7Nnz1+RMWfWHtq2nkanjrPo1HEWB/Zf5t8N3oz99eV0bVs7a2xtrF9uW8geK2srbO1tsbK2irW9f/URPAt6UL5haWztbWk1tDHXT/tx8+JtALYu2EPLwY1I5ZwS9zxZqN2xKlvm7TJbx9YFu6n1dRU88mUllXNKvhrcKKas/+U7XPX2pfWwJtja2/Jp/VJkL5yNvSsPW8S+XFnSY2djTQpbG9pUKU56p5SsO6w5OrY21thFt6mNVcy2OQY3q4pXpnT0+HstzyNiPySUyeNBnqwZsBIhZQo7+jT4jKehYVx/C9PLPfO7YWtvg72DLY2+q0a6TE5sW3qIS95+FCidMyaCk6NgVgqWzhnvGJ2tSw5QvUVZMmdLj72DLU261eDIVs1Bd0yVgpFLu+Nz5CpzRq6xuA2vi7VEJevzrjEiOu8OJ+CxUipERPKidb2A1n01GPADBuhp+4C/RWQM2m/2OTBDzzsP5AR2vYEet5RSUSLSFi1CE11nWxGZB2QAKgGLgYtABhEpq5Q6qHdl5VZK+ejH5QaWkzT2oTl1v4pIDSCtSZ5HdB1AC71sUgkCzM/lfAOqtihHrbafYWNrzdkDl/ih7m9EhL8gpZMjA2d/RxavjIQEh7JlwT7m/bwy5rjmfb+gYLk8DGk4nozuLnzeoQrhYeEsuTo5psykHnPZuewgdilsE5RlSWqXy0+9zwpiY22F9yV/uv22kogXkdT7rCBZMzrTsX4ZOtYvE1O+Uuc/AGj3RSmK5nGj5/jVAMxadwjn1ClY8Wt7wiMi2XbkEnPWv7w5Lv+lHVkyaO81mdKvEQD1+szkTsBTi9pTrUYh6nxeBBsba86cvkn/vv8QERGJq6szHb6phLOzIyEh4Rw/dp2RP7+8afTsXQuAib9vIjQ0PNb7dsLDXxAWFkGQ3hUU/U6eaDZtGcDdu09o2XzqG+vfckgj2gxr+tKe1hWZP2IZC0YsZ0TjcXSb0oGBC3pw4fBlRrWYGFNu/rCl9PjrGxb6TiU8NJylv63l2GYteJrBPT2zfCbQoUAvHtwM4Nhmb5aNXcu4HcOwc7Bj38rDzB+2NEbWqBYT6TenK6sfzeX+jQB+ajKeQAv9Tl+UzEeDctr5duKqP9/+oZ1vAGuHtCWLi3aO/NVVO0fqDJvF7UdP6VCjJMVyuNHtrzW4pk1Nk/KFeR7xgu2jO8XIHrlkOxuPXSC1gz0DmlQmk3MqwsJfcO7GPbpOXU14nKipJajauDQ1W36Kja0VZw9dZVCTyUSEv+DMwcssGreBwbO+wTlDGgIfBrN00iZO7NYio5UblaRZj1p8+9nPAGz55yAZs7owcWN/AI7tPMe0wVqktVydouQp5km2PK5Ub/7yWuxc4Sce+D/mf837MLA4OYhKIGRm8PYQEXtgDeCG7jwAw5VSu0RkA5BfKZXdpPxwtBu+H1pX1S6l1AwRqQB0Vkq10svtAvoqpY6JSLBSKpXJ8cFKqXH6frBSKpWI5AJWAiHATqC7nm4FTAUqApcAe+B3pdRWvZtrMpqTZANM1HWxBU4DhZRSL+LY66uU8oyTlhH4B83B2Y02RsgLrTtuI7AHKIfWjddadwp9gRJKqQARaadvd4uuAy0qFYjWZZcemGtunI4JyljU8/3FWNTz/cZY1PP9Rl/UM6HI+Wux9Xq+ZDkM1b3OW0yH5GBEdN4RSqnnQO148r4wkzxOKTVcn320Bxivl90rImNExFkp9UQpVclETiqT7eFx6kilf18GCptk/aCnR4lIX6VUsIi4AEfQxsSglPJGc4Di8gWwIq6Tox/jaaZ8IFBTKfVCRMoClfV28QXMvgvIVI5Sai7aYGRzdVQ1d7yBgYGBQfJ4H7qhkoPh6Hw4TBftRYApgHlKqRMmeX3QZixZep2ADfrgXjvgZ6XU3UTK26A7YEnEA1imR4/CgW+Sp6aBgYGBwdvG+j2YdJAcDEfnA0EpFe8L8JRSlhkt+KrcSq9ZPqljc6LLX0abMm9gYGBg8J7zPkwVTw6Go2NgYGBgYGCQKEbXlYGBgYGBgcFHy4fadWXMujL4/45xARgYGHzMWGzG09Ebnsn6vyzp4WvMujIwMDAwMDB4v/lQ36NjODoG/+/52N5rUjtzl8QLfiD8d3cqtZy+ftdqWIxNgbM/vvPNrfu7VsNi/Oc/hRq2zd+1GhZjS8QSi8r7ULuuDEfHwMDAwMDAIFGs3oOVyJOD4ej8X3vnHddl9T3w9wERJQduUUEEN6JlrlzlLs0cmGbONLNSy42lpjb9ZmbuHLlHlmZKy5l758aZAy3TUpNAEAfn98fzgB/wA7LMXvzu+/X6vHieey/n3HOfA8/53GkwGAwGg+G+mB4dg8FgMBgMmRYT6BgMmYwWvZ6mcZen8A30YcPirYzpNjk+77H6Feg96WUK+uTn2M6TjHlpMn+euwyAW9YsvDG1B3WCahATdZOvxqxg2bjvklJD677NaDe4Je7Zs7L5mx1MeG0Gt25ap2gUKl6AgbNep2z1Uvx57jKT+nzBvnWHMsQ+71KFef2jdpSq6EP4lQi+eHc52348AECd5yrTceCz5C/iyeULfzPnw5Vs/+mAUzn9x3fiqVZVuX3r7skfbUoNIDZWKVvZl07BzSlV0YfY2FgObjvJ1KFf8fefGXugJ4B3aS96je1IqUrFCb8SwczhX7PtO2sD8ac716Ftv6bkKZib0B0n+bTXbK5edL6RePMe9WnUoTa+5YuycelOxr4+Kz6vbBU/Og9rRalHi3PnjnJoyzGmDl7E1Uvh6a5/pve3koV4/cO2lAr0JvxKJF+8/y3bfjoIQJ3mj9FxQFPye9n+Nvo7tq866FTOy8NbUqNJIHkK5OLKxXCWTFzNuqW74vN//H0iN6JiiFtQvHHFL4wftDhDbEhgT9ki9JnQjVKV/bj21z/MHLKQrSt2A/B0t3q0G9SCvIU9Obz1GGN7TOPqH84P4Vzx95wE91mzZyXk89VM6TuHstVL0nVkW0pW9iP2TiwHNx5hSr85Sfrug8bloa6dSjsuD7sCBsN/lSsXrrLwg2Wsmv1zgvRc+XIyYtkg5r7zJa3zvcSJX04z7Mt+8fmdRralaEkvOvq+zqD6I2k7qAVVmjzqVEeVxpV4IbglgxuOomOJ1/EqUYjOo9rF57+9qC+/7j9LUP5uzB62mHe+HkDu/LnSbZuLqwvvzOnJrjWHaFt2IBMGLmLQ5K4U9StIvsK5GTSpKzNGLiWoZH9mvrucwVNeInf+HEnKWzp5Da39+8d/YmOtt0wOTw9+XLCFrlWH06XKMKIjb9D/s07prr8ze0Ys7sOunw7wvG8fxr85l8HTe1DUvxCBtUrT9Z0gRrWfyPO+fbgYdpkhX/RMUtbVi9dYPCaE1Qu23JOXw/MRfpyzkS6Bg+lSYRBRETfoPyVjJktnen+b/Qq71h6mbUAwE4K/ZNDEzhT1K2D524TOzBi1nKAyg5j5/goGT+5C7nzO/e1G1E1GdplOm7KDGdt3Pj1HBVGuSokEZV5vNJrWpQfSuvTABxLkuLi6MGrZIHb+sJeggt0Z/9oMguf2omgpLwLrlKPbey8wMugTggp25+LZv3h7QdITtlvk6Rr/aVe0Jzejb7J56Q4Acnrm4PuZ6+hcsg+d/HsTFRnNgJmvZrg9KcUVTdPnYfPQAh0RaSki7zxgHSIi60UkRX+pIvKDfbZTanR8aZ8A/q8hIo+JyEz7+jkRGfJv6neoR6CIzMkgWRtEpEo6fr+vfeBp3P1aEcmTnjptWb6LbSt288+ViATptVtX52zoeTYt3cGtmFvMH/kVfpV88S5TBIBGnZ5k4ftLibx2nXPHfueHmWtp3OUppzoadX6Kn2atJ9fiN9EAABOISURBVOzIb0Reu87C95fGly1ayouSlUswb8QSbt64yZZvdnLm0DnqBFVPj1kAeJcqRL7CuVk+bT2xscqBrSc4sus09dtUI79XHq7/E82e9UcA2L32MDHRMXgVL5BqPXvWH2FLyD6iIm8QE32LlbM2Ur6af7rrnxjv0l7kK+zJN5NXW/ZsOkbozpM0eKEm1Z95lM3f7iHs2AVu37rDoo9DqFi7DF4lnNuzNWQv27/fR8TVyHvtWXuIzd/uISriBjHRNwmZsY7y1TPmzz9T+1vJQuQrlJvl03++62+7T1M/qBr5vTwtf/vZ9rd1ocRExeDlm9+prAVjf+C3U5dQVY7vCyN01ynKPV7CadkHhU/ZIuQrkodln/1AbKyyf0MoodtO0LBDHWo8+ziblu0g7Mhv3L51h4UffEPFuuXx8it0X7l1gqpz7c9wDm05BsDuVfvZvGwnURHRxETfZOWUVQTULPOgzUsSlzR+HjYPsw6DgSkPWEdT4ICqpqifXFWbqmqCPkE7WEqunaZi2fJv8jYwEUBVV6rq6H9ZP7buQ0AxEfFJnCcic0TkqX+xOn0BD4f7+cADWWftG+DN6YNh8fc3omK4cOoixQO8yeH5CPmL5uXUgbv5pw+E4Rvg7VRW8YBiCcqeOhBG3sKe5MybA98Aby6evkR05I27sg6GUTwJWalBnO0hJuBbtggnD4Rx/uRFqjcOxMVFeOLpStyKuc2Zo78nKe/ZrnX56ugYJqwaQq1mznsTAAJrlOTc8T/SXf97qu7MHBGKlytq2Sr3li1ermi69VaoWYawY0m3S0aQKfzN2ZCHCL5lvDh54Jzlb40qWP7WpCK3bt7mzJEL95WbNZsbpSv5EJbIp8Ys68vCfR8wbMbLFCyWN931d1Z3Z0m+AcUQsXwvcVHfgGL3FduoU13WLticZH5gnXKEHfkt9fX9f06ygY6I+IrIMRGZKSKHRWShiDQUka0iclJEqtnlqonINhHZZ/8sY6f3F5FZ9nWgLcNDREoDMap62c6bIyJTReRnETktIk+KyCwROerYY2CX2SMioSIyyk7LLSLHHXQuFpG4U7A7ACvs9MEi8oZ9PU5E1tvXDURkgX19VkTy23YfFZEpwF7AW0Qai8h2EdkrIl+LSFy/6magoYgkO99JRHqIyG4ROSAiy+x2yG3rdLHLeIjIeRFxE5GqInLQ1jlGRA7bZXICFVX1gH3fVUQmpbcd7fSm9vPeIiITROQ7O/0RW85u+xm3cDAtBEjxxhMiMtzWscZ+VgMdsjva/nPYwbdGishcEVltt1VrEflYRA6JyE92W70BFAF+FpG4fv+VQPuU1is1ZMuRjevhUQnSosKj8MiZnew5sgEkyL8eHkX2nNmcysqeSFbcdZysxHquh0fhkSN7um04/+tFrl2OpE2vRrhmcaHyk+UIfKIU7tmzEhurrP1qJ8FTX2LluQkMnvISEwYvJibqplNZK2ZuoHvNkbxQIZj5H4fQf3xnylf1u6ecb7mivNi/KTPf/Sbd9b/HnhMXuXY5gjZvPo1rFlcq1w8gsFYZsnlkZfeag9RtVZUSAcXIms2NDsHPERsbS7bs7unSWSKgGB2CmzNz+FcZZIVzMoe/XbKez2sNLH+rW5bAGiXv+tvSXQRP7srKM+MYPLkLE4KXEBPt3N8c6TO6HaeP/M4vG47Gpw1q/Rlda4zglSff58qlcEbN7YmLa8Z+pz9/7ALX/gzn+QHNcc3iyuMNKxJYtzzuHu7s+nE/ddvUoESgD1mzudFxWBCxsbG4eyTvbwW88xFYtzxr5m90ml8i0IcOQ4OYEbwwQ21JDa6Sts/DJiVPvyQwHqgIlAVeBGoDA7F6FgCOAXVV9THgHeBDO/0zoKSItAJmAz1VNQqohRVAOJIHqA/0w3p5jgMCgEARifuKOFRVq9h1eVJEKqpqONAbmCMiLwB5VHWGXb4W8It9vQmoY19XAXKIiJtti7MQugwwz7bpOjAMaKiqlYE9QH8AVY0FfgUqJduK8I2qVlXVSsBRoLtd9wPAk3aZ5sAqVb1lt9erqvoEcMdBThXgcDJ60tSOIpINmAY8o6q1Acd+/aHAelWtCtQDxojII3beHu62a7KINTQVhHVieWvbFkceUdWaWD0xsxzS/YFmQAtgAfCzqgYC0UAzVZ0AXADqqWo9AFX9G3AXkXxO6vGKHejtmT59ekqqnoAbkTfwyJXwn79HLg+iIqLjvw0/4pDvkSs70RE3cEZ0Illx13GyPHJ5JCjvkSs7UZHRqa5zYu7cjuXdrtOo1rACiw6OpvWrDdi8ci+X/7jGo3XK0H14S4Jbf0Zz7zcIbj2OvmM74JfEN9JTh84T8fd1Yu/EsntdKD8v203NRL06Xr4FeG9RLz4f/jWhO0+lu/732nOHd1+cSLXGlVh8chxBvZuwefluLl/4m/0bj7LgwxUMm9+LeYfHcOncZaIjbvDXhatp1uflV5D3lvbj8+DFhG4/mYGW3Eum8bfuM6jWIIBF+z+kdc/6bA7Zd9ffhrUkuM14mvv2IzhoPH3HtMcvIPket+7DWlC8jBcfvTo7Qfrhnae4fesO1/+JZto7Synskw+fUvcfNkqdPXcY2WYs1Zs+xpLfPieoXzM2Ld3O5d+vsv/nw8x7dynvLOnHglOTuHT2L6IjbnD5t+T9rVHHuoRuPcbFs3/dk1fEvxAfhAxhav+5HN56LENtSQ2uSJo+D5uUBDpnVPWQ/UIPBdapdUDWIcDXLpMb+NrudYh7scYFAV2xhhE2qupWu7wXkPhphjjIvZRIZ5yetiKyF9hn6yhv61lj/95k4GUHmXlVNW7A+xfgcbtHJAbYjvWirYPzQCdMVXfY1zVsXVtFZD/QBSjuUPZPrB6F5KggIptF5BBWT1OAnb4EiJsN+AKwRKx5QjlVdZudvshBjrO2cySt7VgWOK2qZ+wyjjP4GgNDbNs3ANmAuOGqeNtFpImI7LfLPQfMtO932mVrAytUNdp+LiGJ6r4YQFU3Abnk7nypH+3g7xDgCvxkpzv6oDOcPhdVna6qVVS1yiuvvJLMrzvnbOh5/CveffzZPNzx8i9EWOh5Iq9d58qFq/hVulst/0q+nA0971RWWOhv+Ccqe/XiNSKuRnI29DxefgXjv7UD+FUsTlgSslJtx9HfGdxqHO3KD2ZY+0kULp6f4/vO4l/Bm8M7fuXkgXOoKif2h3Fs71keq1s2hZI1wdBYwWJ5+ejrN1g87kfWO6yOyWjOhP7G4Gb/o22JNxja+lMK+xbg+C+nAQiZuZ7uld/ihZJ92bLiF1yzuBKWzFBcchT0zsfobweyaEwI65Zsz0gTnJJ5/O0Cg9tMoF2FIQzrMIXCxfNxfH8Y/uWLWv528LzlbwfOcWxfGI/VTnouSscBTalSrzxDX5xMVKTzoC4OVZIYO0sfZw6dY2CDd2lTuAdvN/uIwiUKcXz3rwCETF3NS+X70bZoTzYv34VrFpckn0kcDTvWZc38TfekF/TJz+ifhrHww29YtzDpYa1/g8w8RyfG4TrW4T6Wu8vT38P6ll0Bq1fCsd+0FBBJwhdOdKIyjnocdcTrEZESWL1IDVS1IvB9nAx76KecLddxQPZ23LCQ/aI8C7wEbMMKbuph9RYc5V6uO1wLsEZVH7U/5VW1u0N+Nlt3cswBets9EaMc7F8JPCMieYHHgfUkfwibs7ZzJK3tmJxOAYIc7PdR1bg2i7ddVVfFlbHtetm+r+4gJzkST8+Pu4+x5ccCt/TuSbSOPuiMlDyXJHFxdcHN3Q0XV5cE11uX78K3gg+1W1fHzd2Nju+04czBMM4ft+YUrJm/iQ5Dg8jh+QjeZYrwzMsNWD13g1Mda+Zv5Olu9fEpV4wcno/w4tCg+LK/n/yDU/vP0mnE87i5u1GrZTX8KhZn87KdTmWlFt9yRXFzz4J7djeCXmtI3kK5WLtkByf2hxFQvWR8D45/hWJUqO7PmSPOA4Pazz5GNg93RITKT5ajXlA1dqy2lgbnK5yb0UvfJGT2Rn6Y92D/SZcIKGbbk5WgPk3IWzg3axZuxc09S/x8nALF8vLm+C58+/kaIq9FOZVjPessDs89S/zQRz4vT0aHDCJk5np+mLUhQ+uf+f2tiPV8srkR1LM+eQvmZu1XOzlx4BwB1f3je3D8A2x/O+p8jk7b3o14qtXjvN1+MhF/J3yGPqUL4xdQFBcXIZtHVnqMaMWVi9c4f/JihtjgSIlAH9zc3XDPnpU2/Z4lX2FPVs/diJu7W/x8nALe+eg7tQfLJ/5E5LXrScoq/0Rp8hfNw6alOxKk5yuSh49XDydk6iq+n742w21ILa4iafo8bDJqH53cQNx/wa5xiSKSG2vYqy4wSUTaqOpSrMCiYyp15MIKPsJFpBDwDFbvAljDNEexhtJmicgTdmBzHPDDGloCa/hqINANqzfgU+AXhxdnUuwAJotISVX9VazVPcVU9YSdXxqrxwQRmQdMUtXEX11zAn/Yw2UdsNtLVSNFZBdWO32nqneAv0UkQkRq2L1KjnNgjgID7tdYyZBUOx4D/ETEV1XPcreXCWAV0EdE+qiqishjqrrPwfbkhtIc2QJME5GPsHyvGTDDIb8d1jyb2kC4qoZLyv9IIrDaOG7elwCFsYLbNNFhWBCdR7SNv2/YqS7zRn3F/FFfM6rNJ/Se2J0h89/g2M6TfND+s/hy80Ys4Y2pPVhwdgo3o2+y5OMV7Fm1H4AC3vn5InQc3QP68df5y+xZtZ+vxqzgk/UjyJo9K1uW7WTeiCXxsj5o/xmDZvdi+dU5/HnuMu8+P5bwyxmzB02D56vR5MVaZHFz4fDOU7zddiK3bt7m0PaTLBz7PUNnvoxngVyEX4lkyYRV7N1oxbb1Wlel3ZtNePXJ9wFo8XI9+n7aERG4eO4KEwYs5NA2azinSYdaePkWoMOApnQY0DRed2v//hliQwJ7XniCJp3rkiWLK4e3n+StlmO5dfM2j+TOzpCZr+BVoiBRkTdYs3AL895fHv977QY0o8ITpRneZhwALw5qTse3WjjIrcmCj1awYPQKnu5clyIlCtIh+Dk6BD8XX6ZV0fTPe8/0/hZUlSbta5LFzdXyt/aTLH/b8SsLx/7I0Gnd8SyQ0/K3iavZu8kaoqnXqgrt+jTm1frWjIiX3nqOWzG3+GLL3UW7SyauZsnE1eQpkIveH7Ulv5cnN6JucmTPGUZ0mcad2xl/GGXDDnV4uls9srhl4fCWYwx55gPb3zwYMr8PRfwKERVxg9VzNzDXoY1fCG5JYO2yDG1+dw1Jo0512fLt7gQTwQGe6VafIv6F6Di8DR2Ht4lPb5Gna4bbkxJc/gPDUGlBknvHi4gv1su3gn0/x75f6pgnIk8Ac7GGVNYDnVTVV6yJyPtVdYKIeAM/AzWxenh2AxXsF6dTuU50zgGqA6exvuWvxOqdWQFUU9UIEfkUiFDVESIyHPhDVeOWYjfAGvbwVNXrInIC+FxVP7Xzz2LP33Gsg51XH/gfEDejbJiqrrSDhRBVjZs8ux9orqoJ+ilF5DWs1VlhWEFWTlXtaue1Ab4GnlLVjXZadawg4DpWIFJXVWvZeYeAmra9XYEqqto7Pe2oqnNEpDkwBitY2AUUUtUOIpIda75VTaxembOq+qwtdxLWvKIEw1C2jjmquiFR+kisScJhWP6yQVVniMgGrOHEJ7GCsW6qussuH6mqn9i/H6mqORxkRarqJyLSB+hlP+969nygt1Q1iOTRTHfIojnU8z+LOdTzv00mPdQzw6KTaxe807QpjmeR8w81Qko20HmgikXGYwUID6w/TkS8sCYUN3qAOvoB/6jqF2Lt1/OFqqb7P5mI5FDVSPt6COClqm866IyIC+Ayijiddm/IZOCkqo5Lprw7sBGoraq3kyqXhA4PrB62V1Q18cT0dGP710pVXXefoibQ+Q9jAp3/NibQ+W+T0YHOPxd80hQw5Cpy7qEGOg9zntCHJNz3JMNR1T+AGZLCDQPTyDWs3ixU9Z+MCHJsmtkTeQ9jTZh+3yFvKgnn32QUPeweqVCs4chp9ynvAwxJaZBjM93WsRdY9iCCHJvDKQhyDAaDwZBC/r/P0Uk1qnoJa+jpQet5oJtcqOrs+5dKk9wlWCuynOXdwFrJltE6x2Gtmktp+ZNAqtbWquqLqa1XWtC7WwwYDAaDIQNweUB9I2Ltg+f4vvPD2qrGE+jB3ZXGb6vqD6mVbw71NBgMBoPBcF8e1GRkVT0OPAogIq5Yi3WWY62SHhc3RzOtmEDHYDAYDAbDfXFN9jSkDKMBcEpVw1Kx6jZZHtpkZIPhP4L5AzAYDJmZDOuGib1YOk3/L10Kn0hxHezV2ntVdZK9srYr8A/WLvwD1Nr1PlWYQMdgMBgMBsMDQ0ReARy3oZ+uqvecvyMiWbGO8wlQ1Uv29i2Xsb6Qvoe1+jjVyzBNoGMwGAwGg+GhI9aB0b1UtbGTPF8S7W+XUv4Lx1AYDAaDwWAwtMfhnEV7L7w4WpHyXfgTYHp0DAaDwWAwPFTsTWTPA36qGm6nzcdajaVYx/n0tPfHS51sE+gYDAaDwWDIrJihK4PBYDAYDJkWE+gYDAaDwWDItJhAx2AwGAwGQ6bFBDoGg8FgMBgyLSbQMRgMBoPBkGkxgY7BYDAYDIZMiwl0DAaDwWAwZFpMoGMwGAwGgyHT8n88qtk3orq3DgAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x11c6844a8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"fig, ax = plt.subplots(1, figsize=(7,5))\n",
|
||
"sns.heatmap(df_performance_test.drop(['thr', 'specificity_at_sensitivity100'], axis=1), annot=True, fmt=\".2f\", \n",
|
||
" annot_kws={\"size\": 12, #'weight':'bold'\n",
|
||
" },\n",
|
||
" linewidths=.5, cmap=\"viridis_r\", vmin=75, vmax=100, ax=ax)\n",
|
||
"ax.xaxis.tick_top()\n",
|
||
"ax.set_ylabel('')\n",
|
||
"locs, labels = plt.yticks()\n",
|
||
"plt.setp(labels, rotation=0)\n",
|
||
"pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 46,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"os.makedirs('img', exist_ok=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Confusion matrix on validation set"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 47,
|
||
"metadata": {
|
||
"scrolled": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a215c4438>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"cc = 'score_image+gbmt'\n",
|
||
"optimal = False\n",
|
||
"mask = dfpred[\"set\"]==\"test\"\n",
|
||
"label = df_test.label != 'normal'\n",
|
||
"fpr_, tpr_, thresholds = roc_curve(label, df_test[cc], pos_label=1)\n",
|
||
"if optimal:\n",
|
||
" opt_thr = thresholds[np.argmax(tpr_ - fpr_)]\n",
|
||
"else:\n",
|
||
" opt_thr=THR\n",
|
||
"\n",
|
||
"fig = plt.figure(figsize=(8, 2))\n",
|
||
"\n",
|
||
"gs = gridspec.GridSpec(1, 2, width_ratios=[15, 1],) \n",
|
||
"axs = [plt.subplot(gs_) for gs_ in gs]\n",
|
||
"\n",
|
||
"conf_view = pd.crosstab(dfpred[cc][mask]>=opt_thr, dfpred[mask][\"view\"]).loc[:,[\"N\", \"M\", \"T\",\"W\", \"X\"]]\n",
|
||
"conf_view.index = conf_view.index.map(lambda x: {True:\"special\", False:\"normal\"}[x])\n",
|
||
"colmap = {\"N\":\"normal\", \"M\": \"magnified\\nor spot\",\n",
|
||
" \"T\":\"stereotactic\", \"W\":\"wire\\nlocalization\", \"X\":\"other\"}\n",
|
||
"conf_view.columns = conf_view.columns.map(lambda x: colmap[x])\n",
|
||
"\n",
|
||
"formatter = LogFormatter(10, labelOnlyBase=False) \n",
|
||
"hm = sns.heatmap((conf_view+1), #.applymap(lambda x: np.log10(1+x)),\n",
|
||
" annot=conf_view,\n",
|
||
" annot_kws={\"size\": 16, 'weight':'bold'},\n",
|
||
" fmt=\"d\", linewidths=.5, cmap=\"YlGnBu\", \n",
|
||
" vmin=1, vmax=600,\n",
|
||
" ax=axs[0],\n",
|
||
" cbar_kws=dict(format = formatter, ticks=1+np.r_[0,10,100, 500],\n",
|
||
" ),\n",
|
||
" cbar_ax=axs[1],\n",
|
||
" norm=LogNorm())\n",
|
||
"\n",
|
||
"locs, labels = plt.yticks()\n",
|
||
"plt.setp(labels, rotation=0)\n",
|
||
"\n",
|
||
"axs[1].set_yticklabels([0,10,100, 500])\n",
|
||
"axs[0].axes.yaxis.set_tick_params(rotation=0, labelsize=16)\n",
|
||
"axs[0].axes.xaxis.set_tick_params(rotation=30, labelsize=16)\n",
|
||
"\n",
|
||
"# axs[0].axes.yaxis.set_label(\"prediction\", size=16)\n",
|
||
"axs[0].set_ylabel(\"prediction\", fontsize=16, labelpad=12)\n",
|
||
"axs[0].set_xlabel(\"ground truth\", fontsize=16, labelpad=12)\n",
|
||
"axs[0].set_title(\"Confusion matrix\", fontsize=16)\n",
|
||
"# fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
|
||
"\n",
|
||
"# plt.subplots_adjust(top=0.85, bottoxm=-0.0)\n",
|
||
"plt.savefig(f\"./img/confmatr_test_0.5-{tag}.eps\", bbox_inches='tight', pad_inches=0)\n",
|
||
"plt.savefig(f\"./img/confmatr_test_0.5-{tag}.tiff\", bbox_inches='tight', pad_inches=0, dpi=300)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## HOLDOUT SET\n",
|
||
"in code and tables referred to as 'val'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 48,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Applications/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: \n",
|
||
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
|
||
"Try using .loc[row_indexer,col_indexer] = value instead\n",
|
||
"\n",
|
||
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
|
||
" self.obj[item] = s\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"df_val.loc[:,\"score_wire\"] = df_val[\"score_wire\"].fillna(0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"source": [
|
||
"## Confusion matrix on the holdout set"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 49,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th>view</th>\n",
|
||
" <th>N</th>\n",
|
||
" <th>M</th>\n",
|
||
" <th>T</th>\n",
|
||
" <th>W</th>\n",
|
||
" <th>X</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>score_max_wire_image+gbmt</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>False</th>\n",
|
||
" <td>602</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>True</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"view N M T W X\n",
|
||
"score_max_wire_image+gbmt \n",
|
||
"False 602 0 1 1 1\n",
|
||
"True 2 96 3 8 1"
|
||
]
|
||
},
|
||
"execution_count": 49,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.crosstab(df_val['score_max_wire_image+gbmt']>0.5, df_val.view)[['N','M','T','W','X']]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 50,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<matplotlib.collections.PathCollection at 0x1a1f90cef0>"
|
||
]
|
||
},
|
||
"execution_count": 50,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x11d441eb8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.scatter(df_val.view, df_val['score_max_wire_image+gbmt'], alpha=0.2)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 51,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# def specificity_at_sensitivity100(fpr_, tpr_):\n",
|
||
"# tpr_max = tpr_.max() \n",
|
||
"# if tpr_max == 1:\n",
|
||
"# return 1-fpr_[np.argmax(tpr_ == tpr_max)]\n",
|
||
"# else:\n",
|
||
"# return 0"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 52,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"modeldict = {\"max_image_wire\":\"max(image, wire)\",\n",
|
||
" 'max_wire_image+gbmt': 'max(wire, image+gbmt)',\n",
|
||
" \"max_image_wire+gbmt\":\"max(image,wire) + gbmt\"}"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 53,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"score_gbm gbm 111 0.5\n",
|
||
"score_xgb xgb 111 0.5\n",
|
||
"score_rpart rpart 111 0.5\n",
|
||
"score_gbmt gbmt 111 0.5\n",
|
||
"score_image image 111 0.5\n",
|
||
"score_image_max image_max 111 0.5\n",
|
||
"score_glmnet glmnet 111 0.5\n",
|
||
"score_wire wire 111 0.5\n",
|
||
"score_wire_max wire_max 111 0.5\n",
|
||
"score_image+glmnet image+glmnet 111 0.5\n",
|
||
"score_image+gbmt image+gbmt 111 0.5\n",
|
||
"score_max(image;gbmt) max(image;gbmt) 111 0.5\n",
|
||
"score_image*glmnet image*glmnet 111 0.5\n",
|
||
"score_image*gbmt image*gbmt 111 0.5\n",
|
||
"score_max_image_wire max(image, wire) 111 0.5\n",
|
||
"score_max_image_wire_max max_image_wire_max 111 0.5\n",
|
||
"score_max_image_wire+gbmt max(image,wire) + gbmt 111 0.5\n",
|
||
"score_max_image_wire_max+gbmt max_image_wire_max+gbmt 111 0.5\n",
|
||
"score_max_wire_image+gbmt max(wire, image+gbmt) 111 0.5\n",
|
||
"score_max_wire_max_image+gbmt max_wire_max_image+gbmt 111 0.5\n",
|
||
"score_max(image;wire_max;gbmt) max(image;wire_max;gbmt) 111 0.5\n",
|
||
"score_ViewModifier ViewModifier 111 0.5\n",
|
||
"score_wire wire 9 0.5\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"dfmodels = []\n",
|
||
"THR = 0.5\n",
|
||
"optimal=False\n",
|
||
"\n",
|
||
"for cc in df_val.columns:\n",
|
||
" mdict = {}\n",
|
||
" if not cc.startswith(\"score\"):\n",
|
||
" continue\n",
|
||
"\n",
|
||
" label = df_val[\"label\"]!= 'normal'\n",
|
||
" fpr_, tpr_, thresholds = roc_curve(label, df_val[cc], pos_label=1)\n",
|
||
" cc_out = cc.replace('score_','')\n",
|
||
" cc_out = modeldict.get(cc_out, cc_out)\n",
|
||
" if optimal:\n",
|
||
" try:\n",
|
||
" opt_thr = df_performance_test.loc[cc_out, \"thr\"] / 100\n",
|
||
" except KeyError as ee:\n",
|
||
" print(\"no key '%s' found\" % cc_out)\n",
|
||
" else:\n",
|
||
" opt_thr = THR\n",
|
||
" print(cc, cc_out, label.sum(), opt_thr)\n",
|
||
"# pr, rec, thresholds_ = precision_recall_curve(df_test[\"label\"]!= 'normal', df_test[cc], pos_label=1)\n",
|
||
" mdict[\"specificity_at_sensitivity100\"] = specificity_at_sensitivity100(fpr_, tpr_)\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_val[cc]>THR)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" auc_ = auc(fpr_, tpr_)\n",
|
||
" mdict[\"auROC\"] = auc_\n",
|
||
"# auc_ = auc(pr, rec, )\n",
|
||
"# mdict[\"auPRC\"] = auc_\n",
|
||
" mdict[\"thr\"] = opt_thr\n",
|
||
" mdict[\"model\"] = cc\n",
|
||
"# print(cc, auc_)\n",
|
||
" dfmodels.append(mdict)\n",
|
||
"# break\n",
|
||
"\n",
|
||
"for cc in [\"score_wire\"]:\n",
|
||
" cc_out = cc.replace('score_','')\n",
|
||
" cc_out = modeldict.get(cc_out, cc_out)\n",
|
||
" mdict = {}\n",
|
||
" if not cc.startswith(\"score\"):\n",
|
||
" continue\n",
|
||
"\n",
|
||
" if cc==\"score_wire\": \n",
|
||
" label = df_val[\"view\"]== 'W'\n",
|
||
" else:\n",
|
||
" label = df_val[\"label\"]!= 'normal'\n",
|
||
" \n",
|
||
" fpr_, tpr_, thresholds = roc_curve(label, df_val[cc], pos_label=1)\n",
|
||
" if optimal:\n",
|
||
" try:\n",
|
||
" opt_thr = df_performance_test.loc[cc_out, \"thr\"] / 100.0\n",
|
||
" except KeyError as ee:\n",
|
||
" print(\"no key '%s' found\" % cc_out)\n",
|
||
"# opt_thr = thresholds[np.argmax(tpr_ - fpr_)]\n",
|
||
" else:\n",
|
||
" opt_thr = THR\n",
|
||
" print(cc, cc_out, label.sum(), opt_thr)\n",
|
||
"# pr, rec, thresholds_ = precision_recall_curve(df_test[\"label\"]!= 'normal', df_test[cc], pos_label=1)\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_val[cc]>opt_thr)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" auc_ = auc(fpr_, tpr_)\n",
|
||
" mdict[\"auROC\"] = auc_\n",
|
||
"# auc_ = auc(pr, rec, )\n",
|
||
"# mdict[\"auPRC\"] = auc_\n",
|
||
" mdict[\"thr\"] = opt_thr\n",
|
||
" cc = \"score_wire (vs other views)\"\n",
|
||
" mdict[\"model\"] = cc\n",
|
||
"# print(cc, auc_)\n",
|
||
" dfmodels.append(mdict)\n",
|
||
" \n",
|
||
"dfmodels = pd.DataFrame(dfmodels)[[\"model\", \"auROC\",\"average_precision_score\", \"f1_score\", \n",
|
||
" \"precision_score\", \"recall_score\", \"accuracy_score\", 'thr',\n",
|
||
" 'specificity_at_sensitivity100']]\n",
|
||
"\n",
|
||
"dfmodels[\"model\"] = dfmodels[\"model\"].str.replace('score_','')\n",
|
||
"dfmodels.columns = [cc.replace('_score','') for cc in dfmodels.columns]\n",
|
||
"dfmodels.rename(columns={\"average_precision\":\"auPRC\", \"f1\":\"F1\"}, inplace=True)\n",
|
||
"\n",
|
||
"dfmodels = dfmodels.set_index('model').round(4)*100\n",
|
||
"dfmodels = dfmodels.loc[[ 'ViewModifier', 'rpart', 'gbm', 'glmnet','xgb', 'gbmt', \n",
|
||
" 'image',\n",
|
||
" 'image_max',\n",
|
||
"# 'wire', 'wire_max', \n",
|
||
" 'wire (vs other views)',\n",
|
||
" 'wire_max (vs other views)',\n",
|
||
"# 'max_image_wire',\n",
|
||
"# \"image+glmnet\" ,\n",
|
||
"# 'max_image_wire+gbmt',\n",
|
||
" 'max_image_wire_max',\n",
|
||
" 'image+gbmt',\n",
|
||
"# 'max_image_wire_max+gbmt',\n",
|
||
" 'max_wire_max_image+gbmt',\n",
|
||
"# 'max_wire_image+gbmt'\n",
|
||
"# # \"image*glmnet\" ,'img*gbmt'\n",
|
||
" ]]\n",
|
||
"dfmodels.rename(index={\"max_image_wire\":\"max(image, wire)\",\n",
|
||
" 'image':'avg(image)',\n",
|
||
" 'image_max':'max(image)',\n",
|
||
" 'image+gbmt': 'avg(image)+gbmt',\n",
|
||
" 'wire_max':'max(wire)', \n",
|
||
" 'wire (vs other views)':'avg(wire) (vs other views)',\n",
|
||
" 'wire_max (vs other views)':'max(wire) (vs other views)',\n",
|
||
" 'max_wire_image+gbmt': 'max(wire, image+gbmt)',\n",
|
||
"# \"max_image_wire+gbmt\":\"max(image, wire) + gbmt\",\n",
|
||
" 'max_image_wire_max': \"max(avg(image), max(wire))\",\n",
|
||
"# 'max_image_wire_max+gbmt':'max(image, max(wire))+gbmt',\n",
|
||
" 'max_wire_max_image+gbmt':'max(max(wire), avg(image)+gbmt)',\n",
|
||
" }, inplace=True)\n",
|
||
"df_performance_val = dfmodels.copy()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 54,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"N 604\n",
|
||
"M 96\n",
|
||
"W 9\n",
|
||
"T 4\n",
|
||
"X 2\n",
|
||
"Name: view, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 54,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_val.view.value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 55,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(715, 28)"
|
||
]
|
||
},
|
||
"execution_count": 55,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_val.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Error analysis on the holdout set"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 56,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Int64Index([416533, 737995], dtype='int64')"
|
||
]
|
||
},
|
||
"execution_count": 56,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_val[(df_val['score_max_wire_max_image+gbmt']>0.5) &\n",
|
||
" (df_val.label == 'normal')].index"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 57,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Int64Index([403353, 605642, 703377], dtype='int64')"
|
||
]
|
||
},
|
||
"execution_count": 57,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_val[((df_val['score_max_wire_max_image+gbmt']<=0.5) &\n",
|
||
" (df_val.label != 'normal'))].index"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 58,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'max(max(wire), avg(image)+gbmt)'"
|
||
]
|
||
},
|
||
"execution_count": 58,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"best_model_name = df_performance_test['auROC'].drop(['avg(wire) (vs other views)',\n",
|
||
" 'max(wire) (vs other views)']).argmax()\n",
|
||
"# best_model_name = 'max(max(wire),image+gbmt)'\n",
|
||
"best_model_name"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"source": [
|
||
"## Performance table for the validation set + best model for the holdout set"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 59,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>auROC</th>\n",
|
||
" <th>auPRC</th>\n",
|
||
" <th>F1</th>\n",
|
||
" <th>precision</th>\n",
|
||
" <th>recall</th>\n",
|
||
" <th>accuracy</th>\n",
|
||
" <th>thr</th>\n",
|
||
" <th>specificity_at_sensitivity100</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>model</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>ViewModifier</th>\n",
|
||
" <td>92.23</td>\n",
|
||
" <td>75.03</td>\n",
|
||
" <td>85.47</td>\n",
|
||
" <td>83.33</td>\n",
|
||
" <td>87.72</td>\n",
|
||
" <td>95.32</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>rpart</th>\n",
|
||
" <td>94.30</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>gbm</th>\n",
|
||
" <td>94.82</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>1.31</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>glmnet</th>\n",
|
||
" <td>95.88</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>0.33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>xgb</th>\n",
|
||
" <td>96.30</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>11.11</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>gbmt</th>\n",
|
||
" <td>96.59</td>\n",
|
||
" <td>90.39</td>\n",
|
||
" <td>93.95</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>88.60</td>\n",
|
||
" <td>98.21</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>5.56</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>avg(image)</th>\n",
|
||
" <td>99.60</td>\n",
|
||
" <td>93.10</td>\n",
|
||
" <td>95.96</td>\n",
|
||
" <td>98.17</td>\n",
|
||
" <td>93.86</td>\n",
|
||
" <td>98.76</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>79.41</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(image)</th>\n",
|
||
" <td>99.52</td>\n",
|
||
" <td>92.26</td>\n",
|
||
" <td>95.54</td>\n",
|
||
" <td>97.27</td>\n",
|
||
" <td>93.86</td>\n",
|
||
" <td>98.62</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>75.33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>avg(wire) (vs other views)</th>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>91.05</td>\n",
|
||
" <td>95.24</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>90.91</td>\n",
|
||
" <td>99.86</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(wire) (vs other views)</th>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(avg(image), max(wire))</th>\n",
|
||
" <td>99.98</td>\n",
|
||
" <td>97.54</td>\n",
|
||
" <td>98.69</td>\n",
|
||
" <td>98.26</td>\n",
|
||
" <td>99.12</td>\n",
|
||
" <td>99.59</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>97.71</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>avg(image)+gbmt</th>\n",
|
||
" <td>99.29</td>\n",
|
||
" <td>92.61</td>\n",
|
||
" <td>95.41</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>91.23</td>\n",
|
||
" <td>98.62</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>76.14</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max(max(wire), avg(image)+gbmt)</th>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>98.52</td>\n",
|
||
" <td>99.12</td>\n",
|
||
" <td>100.00</td>\n",
|
||
" <td>98.25</td>\n",
|
||
" <td>99.72</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>99.84</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>[holdout] max(max(wire), avg(image)+gbmt)</th>\n",
|
||
" <td>99.73</td>\n",
|
||
" <td>95.95</td>\n",
|
||
" <td>97.74</td>\n",
|
||
" <td>98.18</td>\n",
|
||
" <td>97.30</td>\n",
|
||
" <td>99.30</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>88.25</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" auROC auPRC F1 precision \\\n",
|
||
"model \n",
|
||
"ViewModifier 92.23 75.03 85.47 83.33 \n",
|
||
"rpart 94.30 90.39 93.95 100.00 \n",
|
||
"gbm 94.82 90.39 93.95 100.00 \n",
|
||
"glmnet 95.88 90.39 93.95 100.00 \n",
|
||
"xgb 96.30 90.39 93.95 100.00 \n",
|
||
"gbmt 96.59 90.39 93.95 100.00 \n",
|
||
"avg(image) 99.60 93.10 95.96 98.17 \n",
|
||
"max(image) 99.52 92.26 95.54 97.27 \n",
|
||
"avg(wire) (vs other views) 100.00 91.05 95.24 100.00 \n",
|
||
"max(wire) (vs other views) 100.00 100.00 100.00 100.00 \n",
|
||
"max(avg(image), max(wire)) 99.98 97.54 98.69 98.26 \n",
|
||
"avg(image)+gbmt 99.29 92.61 95.41 100.00 \n",
|
||
"max(max(wire), avg(image)+gbmt) 100.00 98.52 99.12 100.00 \n",
|
||
"[holdout] max(max(wire), avg(image)+gbmt) 99.73 95.95 97.74 98.18 \n",
|
||
"\n",
|
||
" recall accuracy thr \\\n",
|
||
"model \n",
|
||
"ViewModifier 87.72 95.32 50.0 \n",
|
||
"rpart 88.60 98.21 50.0 \n",
|
||
"gbm 88.60 98.21 50.0 \n",
|
||
"glmnet 88.60 98.21 50.0 \n",
|
||
"xgb 88.60 98.21 50.0 \n",
|
||
"gbmt 88.60 98.21 50.0 \n",
|
||
"avg(image) 93.86 98.76 50.0 \n",
|
||
"max(image) 93.86 98.62 50.0 \n",
|
||
"avg(wire) (vs other views) 90.91 99.86 50.0 \n",
|
||
"max(wire) (vs other views) 100.00 100.00 50.0 \n",
|
||
"max(avg(image), max(wire)) 99.12 99.59 50.0 \n",
|
||
"avg(image)+gbmt 91.23 98.62 50.0 \n",
|
||
"max(max(wire), avg(image)+gbmt) 98.25 99.72 50.0 \n",
|
||
"[holdout] max(max(wire), avg(image)+gbmt) 97.30 99.30 50.0 \n",
|
||
"\n",
|
||
" specificity_at_sensitivity100 \n",
|
||
"model \n",
|
||
"ViewModifier 0.00 \n",
|
||
"rpart 0.00 \n",
|
||
"gbm 1.31 \n",
|
||
"glmnet 0.33 \n",
|
||
"xgb 11.11 \n",
|
||
"gbmt 5.56 \n",
|
||
"avg(image) 79.41 \n",
|
||
"max(image) 75.33 \n",
|
||
"avg(wire) (vs other views) 100.00 \n",
|
||
"max(wire) (vs other views) 100.00 \n",
|
||
"max(avg(image), max(wire)) 97.71 \n",
|
||
"avg(image)+gbmt 76.14 \n",
|
||
"max(max(wire), avg(image)+gbmt) 99.84 \n",
|
||
"[holdout] max(max(wire), avg(image)+gbmt) 88.25 "
|
||
]
|
||
},
|
||
"execution_count": 59,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"ds_best_performance_val = df_performance_val.loc[best_model_name]\n",
|
||
"ds_best_performance_val.name = \"[holdout] \" + ds_best_performance_val.name\n",
|
||
"df_performance_test.append(ds_best_performance_val)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 60,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"auROC 99.73\n",
|
||
"auPRC 95.95\n",
|
||
"F1 97.74\n",
|
||
"precision 98.18\n",
|
||
"recall 97.30\n",
|
||
"accuracy 99.30\n",
|
||
"thr 50.00\n",
|
||
"specificity_at_sensitivity100 88.25\n",
|
||
"Name: [holdout] max(max(wire), avg(image)+gbmt), dtype: float64"
|
||
]
|
||
},
|
||
"execution_count": 60,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# from matplotlib.pyplot import cm\n",
|
||
"ds_best_performance_val"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 61,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['ViewModifier', 'rpart', 'gbm', 'glmnet', 'xgb', 'gbmt', 'avg(image)',\n",
|
||
" 'max(image)', 'avg(wire) (vs other views)',\n",
|
||
" 'max(wire) (vs other views)', 'max(avg(image), max(wire))',\n",
|
||
" 'avg(image)+gbmt', 'max(max(wire), avg(image)+gbmt)'],\n",
|
||
" dtype='object', name='model')"
|
||
]
|
||
},
|
||
"execution_count": 61,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_performance_test.index"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 62,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAGoCAYAAABWhaGzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd4lEXXwOHf2fReCCUkJCH0Xgy9FxFsgAiCYkFFsIG+KvqJIlhe9QVFkSIgRbABAoKodCR0Ahh6aEkgQAiENNLLzvfHbkLKJoBsjMa5rytXdmdmz87JZndnZ2afR5RSaJqmaZqmaZYZKroDmqZpmqZpf2d6sKRpmqZpmlYGPVjSNE3TNE0rgx4saZqmaZqmlUEPljRN0zRN08qgB0uapmmapmll0IMlTbMiEZkoIhdEJFxEjonIsEJ1IiJvicgpETkpIltEpEmhelcRmS0iZ0TkqIiEiki7ismkpGK5HRGR+y2UF8nZXP+qiESYb3NQRB6rmAxKEpE8c7/zf4JEpIr5sUkVkekV3UdrEpGdN6j/VUQ8/6r+/FXMj+sR8+XuIrKmovuk/bPYVnQHNK0SmqqUmiIi9YD9IvKjUioHeB7oCLRQSqWLSB9gtYg0UUplAl8BUUA9pZRRRIKBRhWWhWX5uTUCtolItWLlRXIWkdHAnUBbpVSKiHgAAyqq8xZkKKVaFi4QERfgbaCp+edvSURslFJ5t3IbpVTHG9TffXu9si4REUCUUsaK7svfhYjYKqVyK7of/zZ6ZknTbkBEfhKR/ebZnmfMZamF6h8UkYXFb6eUOgWkA17moteBF5VS6eb69cBO4BERqQO0A97Kf2NQSkUqpX4px9RuJ7fjQC7gU6y8eM5vAs8ppVLM9clKqa/LJRkrUUqlKaW2A5kV1QfzTEiEiHwtIodE5EcRcRaRaBGZICLbgcEiUkdE1pofw20i0tB8++oistI8k3dQRDqay1PNv33NM5f5s4RdzOXRIuJjvvwfc90REXmpUL+Oi8hc8//MehFxKofcj4vITOAA8KiI7BKRAyKyTERcze3aiMhOc357RcTNfNtt5rYH8vP+q5TyfOpr7stBEdlkLnMVkQUictj8+A4yl1t87onIQhH5VES2AB+LSFtz7n+Yfzcwt7MRkSmF4r4oIr1EZGWhuHeKyIq/7q9SOeiZJU27sSeVUgnmN4UwEVl+MzcSkdbAKaXUZRFxB1yUUmeKNdsHNAGuAOG3OlNgBX82t3aAEVO/C5cXztkNcLOQ89+Jk4iEmy9HKaUGVmhvimoAPKWU2iEi84HnzOWZSqnOAOY339FKqVPmx2Qm0BOYBmxVSg0UERvAtVjsh4F1SqkPzPXOhStF5A5gBKYBvAB7RGQrkAjUA4YppUaKyFJgEPBNOeQ+ApgArAB6K6XSROR14D8i8hGwBHhIKRVmfn5lAJeBO5VSmWKa5fweCLFy38pS/Pm0CpgLdFVKRYmIt7nd20CyUqoZgIh4lRKvsPqY/g555ny7KqVyRaQ38F9Mj8MzQG2glbnOG9NjNkNEqiqlrmD6uy6wYs7/CnqwpGk3NkZE8t9Ea2F6syjLyyIyEggG+t6grQAVec6hP5PbcOAapjcqJSL55cVzrujcbkaJZbi/kRil1A7z5W+AMebLS8A0O4FpWXeZ+TEAcDD/7gk8BmAegCcXix0GzBcRO+AnpVR4sfrOwEqlVJr5vlYAXYDVmAaV+e33A0G3kWNpziqldovIvUBjYIc5R3tgF6bBVKxSKgwgf+ZSTEuo00WkJZCHaYDxVyr+fHoGCFVKRZn7mWCu6w0Mzb+RUirxJmIvK/RhygP42jwgVIBdobhf5i/T5d+fiCwGhovIAqAD5v8N7ebpZThNK4OIdMf0AtRBKdUC+ANwpOggwLHYzaYqpRoADwGLRMTR/GKeJqZ9SIW1Bo4BR4EWIvKXPSdvI7eWSqkuSqltxcpvNmft5hQfaOZfTzP/NgBJ5scj/+em9rgppUKBrsAFYLGU3HQvJW9VIKvQ5TzK50N3fo4CbCiUX2Ol1FOUPhB/GYgDWmCaUbIvh75ZVMrz6SCW+1la/8t67qUVuvwesEUp1RS4r1Db0uIuAIYDwzANuvSep1ukB0uaVjYPING8Ibsh0N5cHicijcyDG4tLN0qpFZiW2R43F00GpuXv8TBPn3cGvjMvVe0DJon5I7SI1BOR/uWVGLeRW2ks5PwhpiUAdwARcc/fy6HdUICIdDBfHgZsL1xpHoxGichgKPi2ZQtz9SbgWXO5Tf7fP5+IBAKXlVJzgXmYBu2FhQIDxLRPygXT/8E2/nq7gU4iUhfA3J/6QARQU0TamMvdRMQW0/90rHnf36OAzV/YV0vPJwegm4jUNvczfxluPfBC/g0LLcPd7HPPA9NAF+CJQuXrgdHmv0XB/SmlLgIXgbeAhX82wX8zPVjStLKtBWxF5BCmT3O7zeVvAGuAzUBsGbd/F9MeCwPwBablj8MicgLTvoX+SqkMc9ungRrAaRE5jGmvw0Ur51PY7eZWmsI5zwK2YNq/cQTYimkD+N+aiEQDnwJPiMh5EWlcAd04Djxufny8Mf0ti3sEeEpEDmKancwfXI8Fepj/j/Zj2hdXWHcgXET+wLTX5fPClUqpA5jeVPcCe4CvlFJ/WCGnW2LeY/ME8L3577AbaKiUysY0i/mFOfcNmGZXZmL6m+3GtASXZjFw+bD0fLqCaSluhbmfS8xt3we8xHw4DaCHufxmn3v/Az4UkR0UHRB+BZwDDpnjPlyo7ltMS7vHbiPHfy1R6u++pUDTNO3fRUSCgDXmZRZNu21iOmbYH0qpeRXdl38ivcFb0zRN0yoxEdmPaZbtlYruyz+VnlnSNE3TNE0rg96zpGmapmmaVgY9WNI0TdM0TSuDHixpWjmqrF+Tr6x5gc7tn6iy5gWVOzdrEpH5InLZ/K3b/DJvEdkgppOXb8g/RIP5MBvTROS0mE4LU/zQGSXowZKmla/K+kJXWfMCnds/UWXNCyp3bta0kJJnTHgD2KSUqofp2GNvmMv7YTpbQT1Mf19Lh+UoQg+WNE3TNE37RzMflT6hWHF/IP/E3V8DAwqVL1ImuwFPEfEtK74+dID2b/SXfQV09uzZf+n9/VUqa16gc/snqqx5wV+eW1mnublldxoGW63fG9WPoyg6yzZHKTXnBjerrpSKBVBKxYpINXO5HxBTqN15c1mpBwLVhw7Q/o1U03FTK7oPVnXkfy8DEBv7Zw64/ffm62v6wDdwx/MV3BPrWtlpBgCfR/Su4J5Y39iGGwGov/y9Cu6JdZ0c9DYAXe+fXME9sb7Q1a/B33iwtMG47IZ9K34wVxFJUkp5FqpPVEp5icgvwIdKqe3m8k3AOKXU/tJi65klTdM0TdOs7687L3hp4kTE1zyr5AtcNpefB2oVaufPDU4tVeGZaJqmaZqmlYPVXD+p9+PAqkLlj5m/FdceSM5friuNnlnSNE3TNM3qxGDVVb2y70vke0wniPYRkfPAO8BHwFIReQrTCYYHm5v/CtwNnMZ0Yu8RN4qvB0uapmmaplnfX7gMp5QaVkpVLwttFXBLmyD1MpymaZqmaVoZ9MySpmmapmlW91cuw5U3PVjSNE3TNM36Kv7bcFZTeTLRNE3TNE0rB3pmSdNuILiaN+MH9KCxX3US0zL45JdQNh09Q/OAGrzYpyON/auTZzQSFnmeD1f9Tvy1tBIx7GxseHtgT9rXC8DD2ZFz8Ul8vnYH209EF9zHh0P74u/tAcCxC5f5cNUWIi8XP3q/dfTtW/QUStnZ2fTv35+xY8cSGxvLsGHDcHR0LKh/+OGHeeyxxyzGio2N5eOPP+b48eNUq1aNsWPHEhISAsCmTZtYuHAhCQkJ2NnZ0a5dO8aMGYOLi0u55FWQT3wGlxZHkH4mGbE14B5SjRrD6iM2Bo49uRGxN4CYlgg82lan5ojGZcbLiksn8u3duIdUw++ZpgBcWRNF/C/R1xsZFSrXSP3PumLrZl8ueaXE5RI6O5G4iCwMdkKdjs50ftqTrDQjv30QT+KFXJRR4eVvR8cRnvg2crAYZ+fCJE6FppOdbsTB1UDjPq6EDHEHICMl75ZiWYufswcTW/Wjpbc/2cY81l04zgcH19HK25+5nR8u0tbF1p4Xdi1j/cWIEnF+uXM0NZ09Cq47GGwJjTvN6J1LCHL1Zlyz3rSu4o9BDBxOvMj74euISr1abnkF+nvz8uje1K9Tg6SUdGYt2Mq23aeoUc2dpV+NIj0ju6Dtdyv2smjJLotxPnv/IYIDfbCzsyE2Lpn53+1g+57TALQPCWb4g+2oHeBDdk4eO/eeZvr8LWRk5JRbXjdFL8Npf2ci8jumo5OuK1T2EtAccFdKPXib8RXwjVLqUfN1W0yHid+jlLr3FuJEAyFKqXgR2amU6mgun4zpa52/AmeAdKXUotvp859lYxCmPX4/S3cfYuTcFYQE+zN9RH8Gf/YN7k6OLNtzmB2L15BnNDJ+QA/eH9KH0fNWlohjaxAuJV/jiS+XEZuUQteGtflk+D0M/HQxFxNTuJKSxsuL13AxMQWDCMM6tmDKI3fzwNRvyiWvtWvXFlzOyMhg4MCBdO/evUibNWvWYGt745eI9957jyZNmvDxxx+ze/du3nnnHb799ls8PT1p1qwZX3zxBZ6enqSnp/Ppp58yb948xowZY+2Uiri0OAIbd3vqT+2CMT2Xs1MOkLD5PFXuDACgzqT22Fd3vvl430TgWNu9SFnVe2tT9d7aBdcv/3SG9JNJ5TZQAgidnYiTh4HHF/qRnWZk9TtXOPJrKo3vcqXHi9541rQFgag9Gfz6fjwjFtXEYFPyDatRbxfaDHXHztFA6tVcfn7nCl61bKnTwRk7R8MtxbKWia36cTUznU6/TMXdzpEFXYbzcHAIi8+E0WrVxwXt2voE8mXHh9gWd8ZinHs2fFnk+qa+L7D2/HEA3O0c2Rx7kv/bt5q03Gyeb9SVWR2H0Hf9Dc+j+qfYGIT/jh/IqrUH+c+EZbRsWosP3xrIUy8tIjc3z9TfYdPIM974QNfTvtrM2XPx5BkVjer7MvXdITzy7FdcTUzD1dmBRUt3cfDIeezsbJjw6r0890R3Ppm1oVzyumlSeQZLehmucvoeGFqsbCiw4HYHSmZpQFMRcTJfvxO4cDsB8wdKZqOA1kqp15RSX97KQMk8cLOa2lW9qebuwqJtBzAqxd4zMYRHX+S+1o3YfiKa9YdPkZaVTWZOLt/tPEiroJoW42Tk5DJzw24uJqagFGw9HsWFhGQa+5lOVXQtM4uLiSnmHCDPqKhVxdNiLGvbunUrXl5eNG/e/JZvGxMTw6lTpxgxYgQODg5069aN4OBgtm7dCkC1atXw9Lyeh8Fg4MKF2/pXuSnZ8Rm4t6mOwc4GWw8HXJv5kHWx5IzfzUjecwkbJ1tcGnmV2kYpRfKuS3h2KvNcnLctJS6Xup2csbUXnL1sCGjlSEJMDrb2gpe/nWlDrQKDQchKNZJ5zWgxjpe/HXaO11/+xSCkxOYC3HIsa/F39uK3C8fINuYRn5XGtrjT1HOvWqLdwMDmrLtwnIy8G8+atPEJwNvBhXUXTIOlQ4kX+TE6nOScTHKVkYWndhPs5oOnvdMNIv05Af5VqOLtytJV+zAaFQcOnePI8Yvc1aPsmUxLIqOvXB9UKYWNrYFqPm4AbAw9zt4D0WRl55KalsWa9Ydo1sjPmqn86+mZpcrpR+B9EXFQSmWZz5dTEzgvIkeUUk1FxAbTAbu6Aw7ADKXUbBGZCaxVSq0WkZVAolLqSfNBvWorpd4y38dvwD3m+xqGaYDWBUBEvIH5QDCmA349o5Q6JCJVzO2qAnspdB4iEUlVSrmKyGrABdgjIh8CjYBUpdQUEakDzDDfPh0YqZSKEJGFmM423Qo4ALxirT+kpQ9GAtSr4VOi/I7afpy+dHPT+VVcnQn08eJMXNH2Oyc9i7O9PQYRpq/f+We6fMvWrVtHnz59kGLJDh1qGm+HhIQwevToIoOefNHR0fj6+uLsfH2Wpk6dOkRHRxdcP3ToEP/3f/9HWloajo6OvPde+Z8vzLt3ACl7LuHSwIu89BxSD8dTdUCd6/3+aB9KgXNdD6oPrY+9j+U3y7yMXK78FEnga61JDC19kJd+MonclGzc76hWahtraH6vG6e2pVOzmQNZqUbOHcig7cPXl5x+GHOJpAs5GHOh0Z0uOHvalBrrwI8p7FuWQm6mwr26DfW6Fp1pu5VY1vD16T3c49+EPVei8bBzomv1unx+7PcibRxtbLnLrxGjdy65qZgDA1uw7nzpA6s2VQO5nHGNpOyM2+2+RRYnVgRqB1wfBC6dNwqlYF94NLMWbCX5Wul9+ejtB7ijRSAO9rbsORBFxOlLFtu1aOJP1Ln42+3+bRND5ZmP0YOlSkgpdVVE9gJ9MR3efSiwhKJnrn4K0yHe24iIA7BDRNYDoZgGPasxnYU5/6NyZ+CHQrf/AZggImswLe/NN98OYBLwh1JqgIj0BBYBLTEdUXW7UupdEbmHomeQzu/7/eaBU0sAEZlYqHoOMFopdUpE2gEzgZ7muvpAb6VUnqW/iYg8k39/5rN435Soy4lcTc1gRLcQFm87QNs6/oQE+7P3TEyRdvVr+PBs7/a8uHD1DWPaGgx8NKwfq/YfI+pKYpG6ju/MwsnOlvtDGhObeO2m+/lnxcXFcfDgQcaNG1dQ5uHhwZdffkndunVJSUnhs88+44MPPmDy5JInD83IyCix/8jV1ZUrV64UXG/evDm//PILV65cYc2aNdSoUaP8EjJzaeBFUugFIp7/HYwKj06+uLU2vUEFvn4HznU8MGbncXnFGWI+Dyd4YjvEpuQL+5WVZ/DsUhM7b8cSdYUl74jFPaQaBsfyfUmt2dSB4xtS+WroBZQRGvR0pnb76wO9odNqkJutiNqdTl5u2bFaP+hOq0FuxEflELU7A3vnovnfSixrCIs/x5DarTlw/+vYGgysiD7IhosnirS5y68Ridnp7I0/e8N4jja29C1jYFXdyY13Wvblw0Plt1R19nwCScnpDHugLUtX7aN1swBaNqnFH4fPkZySwcj/LOJ05GXc3Z14eVRv3n7lHl6d+GOp8d54bwU2NgZCWgQS4O+NsrB6F9IykL49mzLq1fJZwr8lehlO+wcovBQ31Hy9sD6Yzo0TDuwBqgD1gG1AFxFpDBzDfCJCoANQMNWhlDoEBGGaVfq1WOzOwGJzu81AFRHxALoC35jLfwESuUki4gp0BJaZ+zyb6wM5gGWlDZTM9zdHKRWilAp55pkSY7RS5RqNjP16NV0b1eb3t5/h8a53sO7QSeKSUwva1KriwaynBvLR6t85EF32EpMIfDi0Lzl5efz3py0W22Tk5LJ09yH++9BdeLuUz/JAvnXr1tGsWTN8fa//KZ2dnWnYsCG2trZ4e3szduxYwsLCSEsruYzl5OREenp6kbK0tLQiM035qlatStu2bXn33Xetn0ghyqg4++kB3FpXo+GsHtSf1pW8tBwuLzNthnVp4IXYGrBxtqPGww3IvpJBVmx6iTiZ566RdiyBKn0Cyrw/Y3YeKfvi8OxYvktwyqhYM/EKtds788xSf55cXJOsVCO7vk4u0s7WXqjX1YUDy1OIj8ouJZqJiFA12B5beyHs++QS9bcS63YIMK/zw6y/EEGLVR/R9ucpuNs78lrTogdfHhjYnFVnD99UzD41G5GUnWFxYOVl78yCzo/w7Zn9/HL+qDVSsCgvz8ib//2JDiHB/PT1czw0IIQtO05w5eo1MjJzOHE6jjyjIjEpnc9mb6Jt69o4O5W95y0vz8ieA1G0bV2bTm3rFKlr3MCXCa/cy9sfreL8xZt+eS0/BoP1fio6lYrugFZufgJ6iUhrwEkpdaBYvQAvKqVamn9qK6XWK6UuAF6YZqVCMQ2ehmBaCis+1bEamELJgZiljxOq2O9bZQCSCvW3pVKqUaH6P7ch5SacvBTPiC+X0XnSl4yatxJ/bw8Ox5imv3093fhq5CBmb9rDzweO3zDWuw/2oYqbMy8v+plcY+l7QAwiONrbUc3D1Wp5WLJ+/XruuuuuMtvkL88pCx9jg4KCuHjxYpEB05kzZwgKCrIYKy8vj4sXyzy5923LS8shNyEL7161MNgZsHW1x7NzTVIPl7IsIYKlj+hpEYlkx2dw8tXtnHgplKvrzpGy/zKRE/cUaXdt/2VsXOxwblj6niZryEw1khqfR7N7XLGxExzdbWjYy4Vz+y0v2xhzIeXSzU0JGY2K5DLa3kqsP8PT3omazh58cyaMHGMeSdkZrDh7kG416ha0qeHkTlufIFaeO3RTMQcGNucnC21Nm8cfYXPsSb48sd1qOZQmMvoKY978gfuGT+fViT9Ss7oHx0+WXD5T5pfGm52MsTEYqFnj+tJ4veBqfDh+IB9NW8uBQ+es0nftOj1YqqSUUqnA75iWx4oPZgDWAc+KiB2AiNQXkfz1lF3AS1wfLL1q/l3cfOBdpVTxj3qhwCPmuN2BeKVUSrHyfpgGZTebTwoQJSKDzbcXEWlxs7e/HfVr+GBva4OjnS1PdL0DH3cXftp3jGruLswf9SA/7DrI0t03fgGf8EAvgqt58/yCVWTlFp0E61AvgIY1q2IQwcXBnnH3diMlI7PcDh0AcOTIEeLj40t8C+7YsWOcO3cOo9FIcnIyX3zxBS1btsTVteTArVatWtStW5eFCxeSlZXFtm3bOHPmDN26dQNgw4YNxMXFoZTi0qVLzJs3j9atW5dbTgC2bvbY+TiRuOU8Ks9IXnoOyTticajlRuaFVDLPXUMZFcbMXOJ+OImdpwMOviUPZeDVzY96H3eizqR21JnUDq/ufrg29yHgP62KtEvaGYtHR98Se76szcndBvfqNhz9LRVjniIr1ciJzelUCbLn0oksYo9lkZejyM0ycmB5ChlJeVSvX/Lr/sqoOLo2lcxUI0op4k5mceTXVPybm5YabyWWtSRmZxCTlsjDwXdgI4KbnQMDA5oTkRxX0GZAQDP+uBpDTNqNZ0yqO7nRrmoQK88WfV662Nozv/PDHLgaw5Qjm62ehyXBQVWxt7PBwd6WoQPaUMXbhd82HaFRfV9q+XkhAu5ujowd2YsDh86Rll5yBi/Az5t2rWtjb2+LjY2BO7s3pkUTfw4eMW0HqB3gw+SJD/L5nE3sDLP8LcEKIWK9nwqm9yxVbt8DKyj5zTiArzAtox0Q06v8FWCAuW4b0EcpdVpEzgLeWBgsKaXOA59biD0RWCAihzBtxH7cXD4J+F5EDgBbMZ0F+lY8AswSkbcAO0z7pg7eYoxbdt8djXigTVPsbAzsj7rAyLnLycnLY1DbZtSq4smzvdvzbO/2Be3bvj0DgJE92tC6th/Pzv8JX083hrRvTlZOLlvfvr4MOGnFJn75IwI3Rwf+r38Pani4kpmTy5HzcYz+aiXZuaWuLN62devW0aVLlxJLZrGxscydO5ekpCScnZ0JCQnh7bffLqj/5JNPAHjlFdM++gkTJvDRRx9x3333Ub16dSZNmlSwGfzs2bPMnj2b1NRUXF1dad++PSNHjiy3nPLVeqE5l74/Qfxv0YhBcG7oRY2h9cm6kErsoghyEjMxONjgXNeTWi+1RGxNnxuvrIki/WQSgf9phcHBBoPD9U3NBgcb00yV+/VlkpzETNKOJ+I7vGG55wTQ9w0fts9L4o8VKYhB8GvmQKenPEk8n8P2uUmkXMrFYCtUCbTjngk+uFQx9f/k72ns/zGFYdNNS4WRuzPYvTiZvFyFi7cNze5xo9m9psFwXo4qM1Z5eWHXMt5s0YeRDTpiVIrdV6L576H1BfUDApvz1cmSxyC6r1ZTRjfsXOSQAQMCmhOecL7EwKpPzYY09/ajrntVBgZe/6x19/pZxGaklENWcFf3xtzbpzk2NgYOHTvPfyYsIyc3j5o1PHjm0Xvx9HAmPT2bsPCzvDtlTcHtXnn2TgA+mbUBERgxrCOTavmQZzRyPjaRiZN/5mTkZQAeGhCCp7sz417sy7gXTcdQi7uSwuMvLCiXnG5aJTrOkliaWte0Sk41HTe1ovtgVUf+9zJgGuhUNvn7qQbuuKWThP/trexkGlR/HtG7gntifWMbbgSg/vLy/+bjX+nkINOHhq73l/yywz9d6OrXwPIWij+tr88zVhtgrI2fU6EjLz2zpGmapmma1UklOjecHixpmqZpmmZ9lWgZrvIM+zRN0zRN08qBnlnSNE3TNM36/gbfYrMWPVjSNE3TNM36KtFgSS/DaZqmaZqmlUHPLGmapmmaZn1/g9OUWIs+zpL2b6T/6TVN00qy6rpZP/8xVnut/e38NH2cJU3TNE3TKplKtGdJD5a0f6X2wz+t6C5Y1e5v/gNAnU8qV14AZ14x5dZmROXKLWyBKa87DYMruCfWt8G4DICgRR9XcE+sK/qx1wHoV/s/FdwT6/stqnI9v6xND5Y0TdM0TbM+PbOkaZqmaZpWBn0Eb03TNE3TtH8HPbOkaZqmaZr16WU4TdM0TdO0MkjlWbyqPJlomqZpmqaVAz2zpGmapmma9VWiDd56sKRpNxBU05tXH+9Jw9rVSbyWwfTvQ9m673SRNk8NbM/IQR158cMfCTt6zmKcGW8OJti/CvZ2Nly8nMKc5TvZduBMQX2fDg159qHOeLo6sffIWT6Yu56UtMxyy6uOtzeTevWkafXqJKRn8FFoKOtPm/LqGFCLib16UdPNjYOxl3ht7VouXrtmMc63gwdTz6cK9jY2nE9O4bOdO9l45npez7Vry7DmzXFzcGBrVBTjN2wkNTu73PICCPL1ZtyjPWkUaHrMpi0N5fcDp6ld05uJT/fFv5onABHRcUz5bgtRFxNuKQ6AbxV3Vk95mvTM67ks+jWMeT/vsVoe/Z/vS5/HuxPULIDfv9/B5CdnFNS16tmUF6Y/TbUAHyL2nGLyiBlcPhcPgJ29LWNmjaTLoPZkpWezdPIqlk9dU+r9PPDSPTw0bgAOTvZsW7Gbac/OJSc7F4DqgVV5df5zNGxXj8vn4pn+4jz+2HTYajnm83dx5712fWhd1Y9sYy6/nj3Bu2GbyFOKDjUCGH9HDwLdvEjMymDqCPX7AAAgAElEQVTWkd18f+pgqbGaeFdnQpteNPWuTnpuDjMP72JBxP6C+5nc6W5a+tTkYloKE/ZuYEfsWavnk69WnWo89+4g6jX1JzkhjXkf/szO9aa/X5d7WjD8pb741PAgPjaJhZN/ZdeGIxbjPP3mfbTv3RSvqm5cjUtmycxNbFqxr6B+zH8H06xdHWoG+TB13BI2Lg8rt5xuWiXas6SX4TStDDYG4X8v92dHeCR9Rs3ko3kbmDi6H7VqeBa08avmQY+29bmSmFpmrKmLt3DvC7PpNXIGH83fwMRn+1HF0wWA2n5VeP3J3kya9Rt3P/8lmdm5vPZEz/LLS4TZ/fuzOTKS1jNmMn7DBj65ux9BXp54OTky8/77mbpjB61nzORwXBzT7r231FjvbtlChy9n03L6jII4VV1MeT3QuDEDGjdmyA8/0HH2HBxsbXmnZ49yywtMj9mUMf3ZHh5Jrxdm8t+vN/DuM/0IqO7JlcQ03pixhl4vzOTOF2cRGh7JB6PvueU4hfV8fgbdnp1Ot2enW3WgBHD1YgLffrCcdQu2FCl3r+LGO8tf4+sJP/BAlRGc3B/JWz+8XFD/6MQh+NX1ZXjQc7zWcyJDXutPyF0tLd5HSJ8WDH19AON6T2J47efwrV2dxyY9VFD/5ncvcTo8mkE+T7Lgre+ZsOwVPHzcrZonwHvt+nA1M522y6Zz988LaVc9gEcbtMZWDMzu/gDfnQyn2Q+f8ULoKt4K6Ukjr6oW43g5OPF1r8F8dzKcVkum0X3lHEJjowvqp3W9n6MJl2m5ZBqT/whlVrcBeDs4WT0fAIONgQlzn2Tv5mMMafUW095cymtTH8avdlWqVPfgtU8fYe77qxjU7E2++vBnxn0+HI8qrhZjZaZnM/HpeTzYfDyfvPo9oyYMoFHroIL6yOMXmfH2ck4fuVAuufzb6cGSVi5EJE9EwkXkiIj8LCKe5vIgEckw1x0TkS9Fru8CFJGXRSRTRDwKlXUXkWQR+UNEIkRkirl8hDlOuIhki8hh8+WPrJVHYE1vfLxc+P63AxiVYv+xGA6dukC/zo0L2rz6eE9m/LCN3Ny8MmOdjoknz2g6VZJSYGtjoLq3GwB3dWrI9j8iCT9xgYysHOb8uIPuberh7GhnrVSKqOPtTTVXF+bvN+W1KyaG/RcuMLBRY+6qW49TV6/y28lTZOfl8fnOnTSqWpVgby+LsU7Ex5NnPsekAuwMBnzdTHn1rBPMssNHiL2WSnpODnPCwrinQQMcbctvUjvI15uqni58t96U277jMRw8dYG7OzYmNSOL2KspgOlDr9FopFY1z1uO81fZvnIvO1eFkXK16Kxe5wfaEX00htAfd5OTlcPiiUsJbhFErQY1Abjz0W58+/6PpCalcS7iAr9+tZE+j3e3eB93PtadtfM3c/bYeVKT0vj2/R8L2vrV86Vu69osemcJ2ZnZbF+xh6jD5+gyqJ3Vc63l6smasxFkGfO4kpnG1ouR1Pf0wdPBEXd7B1ZEHgXg0NVLnE6+Sj0PH4txnm7chtCLUayKOka2MY+03GzOJF8FoLabF028qzM1fDtZebmsPXeSiMQr9AtsYPV8wDSrVKWaByvnbcVoVBzcdZpj+6PpOfAOfHw9SEvJYN/WCADCthwnKz0b34AqFmN989k6zkdeRinFifBzHA2LpFHrwIL6NYt3EL7zFDlZOeWSy58iYr2fCqaX4bTykqGUagkgIl8DzwMfmOvOKKVaiogtsBkYAKww1w0DwoCBwMJC8bYppe4VESfgDxFZqZRaACww30c00EMpFW/NJMTCeSUFIdjf9ELds209cnLz2HUw6qbiTXllAG2aBOBgb8uuQ9Ecj7oEQLBfFQ6fii1od+FyMjm5edSq4cWJ6MtWyKR4EhbyEqG+jw+uDvYcv3yloDwjN5dzyUnUq+JDZEKixXBzBwygU2AADra2hEZFc/iSKS9BityVIDjY2hLk5UnEFas+VIUTsVAkBPtdf3PdPOM5nBzsMYgw+6edfzoOwOopI1FKsffoWT5fGkpyavktneYLalKLyEPXl44y07O4eOYSgU1qkRiXjI+fN2cOXq+PPHiWTv3bWowV2MSfnauvL9mcOXgW7xqeuHm7EtSkFpci48golFPkobMENqll9ZwWROzjvqBG7L50Dg97R7rXDObT8G3EZ6azKuoYg+s249uT4bSs4oufizthl89bjNPKpyYnkq6wvO9wAt08CY+PZcLe9VxMu0Z9Tx9iriWTlnt96fR44mXqeVoeeN0usfQmLxBU35dvP1tHzJnLtOvdhLDNx2jXqwk52blERcSWvE0x9g521G8ewJrFpfzv/l38DQY51qJnlrS/wi7Ar3ihUioX2AnUBRCROoAr8BamQVMJSqkMINxSvPIQHZtAYko6w+8JwcbGQNumgbRq5I+jvS1ODnY8O6QzU7/5/abjvfrJT/QcOZ2X/7eCPYeiMU/I4ORoT2p6VpG2qenZuDjZWzGb6yITErians4zbUKwNRjoHBhIW39/HO1scbaz51p20b5cy8rC1b70Wa6RP/1E8y+m8+TyFYRGR5N/qvGt0VEMadoMP3d3XO3teaZtGwCcbMtnxgyuP2aP9jM9Zu2aBNK6gT+ODtc/G/Z8fiY9npvO5G82c+Ks5cHojeIkpWbw2KRvuf/VuTw26VucHe15b9Td5ZZXYY6ujqQlpxcpS09Ox9nNCSdXR4Ai9WnJ6Ti5OVqM5VQsVv7l/FjF7yctOR1nV+svW+2Oi6G+pw9Hhr3MnsHPc/jqJdbFnAJgddQxxjTvxMlHXmVp30eYEr6N2HTLe+hquLgxqE5TJoVtpNPyWcSkJjGty/2mnOzsuZZT7H87OwtX2/J5nsWciSPpaioPjuqBja2B1l3q06xtHRyc7DAaFRtX7OP1z4az+sT/GPf5cKaNX0ZWxo338734wYNEHr/I/tCIcum3VpIeLGnlSkRsgF7Aagt1zua6/N2iw4DvgW1AAxGpZuE2XkA9IPQW+/GMiOwTkX1z5sy56dvl5Rl5fepqOrYM5tfpo3j47jvYtOcklxNSGTmoA79tP07slZRb6Qp5eUZ2HYqmXfMgurQOBiAjs+TAyMXJnrSbeOH8M3KNRkavWk332sHsHj2Kp0Lu4NcTJ7l0LZX0nGxc7Yv2xdXegdTssqf3c41GtkZH0zUoiF51THktO3yEn09E8N2Qwax94nF2n4sB4FKq5Tc6a8jLM/LqF6vp3DyYtZ+N4pG+d7AxzPSYFZaZncvy3w8ycWRfvNxKvvnfKE5GVg7Ho+PIMyoSUtKZ/M1mOjQNwsWxfN54i/Q9NRNn96J9dnZ3Jv1aRsEskEuhemd3JzKuWZ7xyigWK/9yfixnd+di9+NEemqGVfLIJ8Ci3kNYe+4kjb/7lJZLPsfDwZE3Wnenjrs307v255Udv1Dvm8n0WT2PUU3a0sMv2GKsrNxc1p07xaGrl8gy5vH5oR2EVPPHzc7e9L9tZ+F/O7d8nmd5uUbeHTWftj0a893eSTzwdHe2/XqQ+NhkWnaqx1Nv3Mvrw2ZwX/1xvD50Bi999BDBjWqWGfOp/7uPwPo1+PCFr8ulz1ZlEOv9VDC9DKeVFycRCQeCgP3AhkJ1dcx1ClillPrNXD4UGKiUMorICmAwkP/1ny4icghoAHyklLp0K51RSs0B8kdJan7ozZ9h+3RMPM99sLTg+pwJQ/l1+1Ee6NWCat5uDOrdAgBPdyfef/FevlkTxuI1N/4miq1B8DPvl4m8cJV6Adc3rNas6oG9nQ0xlywve1nDifh4Hl56Pa9lw4ay4uhRlIIHmlzfl+Nka0uApwenrt7cspmNQQjwMOWlgM937uLznbsA6BwYSOy1a1y6VvZm+Nt1+nw8oz6+ntu88UNZs+NoiXYGERzt7ajq5UritZIDgJuNAxTMpllYubW66KMx9HmsW8F1R2cHfOtU5+zRGFKT0rh6MYHgFkEc2HgIgDotgog+GmMx1tmj56nTIojQZbsK2iZcSuJaQirRR2PwDa6Gk6tjwSAsuHkgW77fbtV8PB2c8HNxZ1HEfrKNeWRn5bHs9GFeadmFg/GxRKYkEHrRtNQdmZLAlvORdPcLZsuFyBKxjideRl1/NApmbwXhZFI8AW6euNjaFyzFNfKqxuqoY1bNp7DoiFjGDb3+LcZPfnyRjcv3UaexH0f2RnLqsGk58eShGCLCz9Kqc30ij1+0GGv4S3cR0q0h44bOID01y2KbvxW9DKdpN5S/ZykQsMe0ZynfGaVUS6VUK6XURAARaY5pxmiDef/RUIouxW1TSjUHmgHPiojlr/aUg7q1fLC3s8HB3paH774DH08Xfgk9xgsf/sjDb3zNo+MX8+j4xcQnpvHx/A38uCG8RIxAXy86NA/Cwc4WGxsDfTs1omVDf/6IML1QrtsRQefWwbRo4Iejgy3PPNiR38NOkZ5Zfps1G/j4YG9jg6OtLU+H3EFVFxeWHz3G+tOnqe/jw1316mFvY8OLHToQcSXe4n6lYG8vugUF4WBri63BQP9GjWjj78/e86a8PBwdCfAw7dWv6+3N+O7dmL5rd6G3svJR198He1vTYza87x1U8XBhzfZjtG0cQP2AqhhEcHG056Wh3bmWlkl0KYcOKC0OQJPgGgTW8EIEPFwcefWRHuw7HmPV2UCDjQE7BzsMNoYil3es3EtQ0wA6P9AOOwc7hk94kKhDZ4k5YXqT3bA4lEfGD8LV04VaDWrS7+lerP/6d4v3sWHxVvo+2ZOARv64errw8PhBBW0vnIrlTHg0j74zGDsHOzoNaEtw80C2Lbfut/4SszI4dy2J4Q1aYSOCu50Dg+o05XjiZY4mxBHk5kWHGgEABLh60tO/DscTr1iMtezMYe6qVZ/GXtWwFQNjmndkb1wMKTlZRF1L5FjCZca26ISDwYa7atWjkVdVfjt7wqr5FBbU0Bc7e1scHO0YNLI73tXc2bh8LycPxdCkTe2CmaQ6jf1o2iaYqAjLA6Uhz/ai+/2tefPRL7mWlF6i3tbOBjt7WxApuGxxz9RfSIlY7aei6ZklrVwppZJFZAywSkRmldF0GDBRKfVhfoGIRIlIYOFGSqmTIvIh8Dql7Guytr6dG3N/96bY2hg4eOICYz5eTk5uHjmpRb/9ZjQauZaWRYb52yjjRvQC4H8LNiEiPP1AB4L8qmA0GomJS+Kt6b8UbN6OunCVj+dvYtKz/fBwdSLs6Fnen7O+XPMa2LgxQ5o1xdZgYN+FCzz+43Ky8/JIyMjgudU/M7FXTz7t14/wS7GM/eWXgtu919uU19sbNyEIYzp2YFoVU17RSUmMXfMLRy+b8vJycmTugAH4urmRkJHBwgMH+OGw9Y/RU9zdHRvTv6vpMQs/eYEXppgeMzdnB14b3pNqXq5k5eRyLCqOMZ+uINv8TcYn7mlLq/p+jJ26ssw4AH5VPXhuUGe83Z1Jy8hiz9FzvPXlL6X26c945K1BPPbOkILrvR/tyqJJS1k8aRmTHpzCC188xRuLxxCx5xQfDPusoN2id5YwZtZIvomeSXZGNkv+t4p960yD+Kq1fJh3dCpPNXmZKzHx7FsXztLJq5iy+R3snezZvnwPi95ZUhDrg2Gf8dqC51mZsJDL5+J5d/AnJMff2tLzzRj9+0omtOnF6CbtyVNGdl06x3v7NnM1M51xO39jYpve+Lm6cy07m1VRR1liPs5Sm2r+LOw1mCbfTwVg16VzTP5jK/N7PYiTjR1hl88zdtvPBffzYugqpnS6h4NDx3IhLYVnt/5EQpZ1lxUL6zUwhLseaoetrQ1HwiJ589HZ5GTncXjPGb79fD3jZz6Bp48ryQlpLJm5kQPbTgLQo39rHnquN6Pv+h8AI8bdQ05WLvO2vFkQe8nMjSyZuQmADxaNonn7ugA0CanN2A+HMG7oDA7vOYN2+0Sp8v6Mp/0biUiqUsq10PWfgaWY9iOtUUo1LdY+CuinlIooVPYpEAfsAV5VSt1rLncCTgOdlVJR5rJoIOQmvw2n2g+/+WW4f4Ld3/wHgDqfVK68AM68YsqtzYjKlVvYAlNedxoGV3BPrG+DcRkAQYs+ruCeWFf0Y68D0K/2fyq4J9b3W9SnYOVF5L7NxlttgLH28AcVOr2kZ5a0clF4oGS+fl+hq02LNUcpVdtCWeFXpN8LlWdQ7NtwSqmgP9lVTdM0rTz8DZbPrEXvWdI0TdM0TSuDnlnSNE3TNM36KtHMkh4saZqmaZpmfZVosKSX4TRN0zRN08qgZ5Y0TdM0TbO6v8PxkaxFD5Y0TdM0TbO+SrR2VYlS0TRN0zRNsz59UErt30j/02uappVk1XWzu0ImWu21dt2+ifqglJqmaZqmVTJ6z5Km/bN1GvxJRXfBqnYsewXQpzv5J9GnO/nn+Rec7sSqKtMGb71nSdM0TdM0rQx6ZknTNE3TNOurRNMxerCkaZqmaZr16WU4TdM0TdO0fwc9s6RpmqZpmtVVpg3eerCkaZqmaZr1VZ6xkl6G0zRN0zRNK4ueWdK0Gwj08+aVp3vRILg6SSnpzFgcSuje00XajHiwA08/1JGx7y5j3+FzFuPUC6rKy0/2pE5gVdIzslm98RALftwNQJN6vowc2okGwdXIMyr+OBrDZ/O3cDUprdzyquPtzaRePWlavToJ6Rl8FBrK+tOmvDoG1GJir17UdHPjYOwlXlu7lovXrlmM8+3gwdTzqYK9jQ3nk1P4bOdONp45U1D/XLu2DGveHDcHB7ZGRTF+w0ZSs7PLLS+AIF9vxj3ak0aB1Um8lsG0paH8fuA0tWt6M/HpvvhX8wQgIjqOKd9tIepiwi3FAfCt4s7qKU+Tnnk9l0W/hjHv5z1Wy6P/833p83h3gpoF8Pv3O5j85IyCulY9m/LC9KepFuBDxJ5TTB4xg8vn4gGws7dlzKyRdBnUnqz0bJZOXsXyqWtKvZ8HXrqHh8YNwMHJnm0rdjPt2bnkZOcCUD2wKq/Of46G7epx+Vw801+cxx+bDlstx3z+Lu68164Prav6kW3M5dezJ3g3bBN5StGhRgDj7+hBoJsXiVkZzDqym+9PHSw1VhPv6kxo04um3tVJz81h5uFdLIjYX3A/kzvdTUufmlxMS2HC3g3siD1r9Xzy1apTjefeHUS9pv4kJ6Qx78Of2bne9Pfrck8Lhr/UF58aHsTHJrFw8q/s2nDEYpyn37yP9r2b4lXVjatxySyZuYlNK/YV1I/572CatatDzSAfpo5bwsblYeWW002rRMtwemZJ08pgYxA+GtefHfsj6TdiBh/P3sCEF++mlq9XQRu/6h706FCP+ITUMmO9M/Yewo+fp9+IGbzwzhIG9GlB55A6ALi5OLBqwyEGPfcVg56dS3pGDm8+f1f55SXC7P792RwZSesZMxm/YQOf3N2PIC9PvJwcmXn//UzdsYPWM2ZyOC6OaffeW2qsd7dsocOXs2k5fUZBnKouLgA80LgxAxo3ZsgPP9Bx9hwcbG15p2ePcssLTI/ZlDH92R4eSa8XZvLfrzfw7jP9CKjuyZXENN6YsYZeL8zkzhdnERoeyQej77nlOIX1fH4G3Z6dTrdnp1t1oARw9WIC336wnHULthQpd6/ixjvLX+PrCT/wQJURnNwfyVs/vFxQ/+jEIfjV9WV40HO81nMiQ17rT8hdLS3eR0ifFgx9fQDjek9ieO3n8K1dnccmPVRQ/+Z3L3E6PJpBPk+y4K3vmbDsFTx83K2aJ8B77fpwNTOdtsumc/fPC2lXPYBHG7TGVgzM7v4A350Mp9kPn/FC6CreCulJI6+qFuN4OTjxda/BfHcynFZLptF95RxCY6ML6qd1vZ+jCZdpuWQak/8IZVa3AXg7OFk9HwCDjYEJc59k7+ZjDGn1FtPeXMprUx/Gr3ZVqlT34LVPH2Hu+6sY1OxNvvrwZ8Z9PhyPKq4WY2WmZzPx6Xk82Hw8n7z6PaMmDKBR66CC+sjjF5nx9nJOH7lQLrn8GcpgvZ+K9jfogvZvJiLVReQ7EYkUkf0isktEBopIdxFJFpFwETkkIhtFpJr5Nk+IiBKRXoXiDDSXPWjN/gX4eePj7cqSNfsxGhUHjsRw+MQF+nZtVNDm5ad6MeubbeTk5pUZy7eqO+u3HcdoVFyIS+ZQxAVq+1cBYHd4NFt2nyQ9I5us7FyWr/2D5g38rJlKEXW8vanm6sL8/QcwKsWumBj2X7jAwEaNuatuPU5dvcpvJ0+RnZfH5zt30qhqVYK9vSzGOhEfT575HJMKsDMY8HVzA6BnnWCWHT5C7LVU0nNymBMWxj0NGuBoW36T2kG+3lT1dOG79abc9h2P4eCpC9zdsTGpGVnEXk0BTB96jUYjtap53nKcv8r2lXvZuSqMlKtFZ/U6P9CO6KMxhP64m5ysHBZPXEpwiyBqNagJwJ2PduPb938kNSmNcxEX+PWrjfR5vLvF+7jzse6snb+Zs8fOk5qUxrfv/1jQ1q+eL3Vb12bRO0vIzsxm+4o9RB0+R5dB7ayeay1XT9acjSDLmMeVzDS2XoykvqcPng6OuNs7sCLyKACHrl7idPJV6nn4WIzzdOM2hF6MYlXUMbKNeaTlZnMm+SoAtd28aOJdnanh28nKy2XtuZNEJF6hX2ADq+cDplmlKtU8WDlvK0aj4uCu0xzbH03PgXfg4+tBWkoG+7ZGABC25ThZ6dn4BlSxGOubz9ZxPvIySilOhJ/jaFgkjVoHFtSvWbyD8J2nyMnKKZdc/u30YEmrMCIiwE9AqFIqWCl1BzAU8Dc32aaUaqmUag6EAc8XuvlhYFih60OB0ufl/3wfLZbVDjC9UPdoX5/c3Dx2/RF1w1hLfzlA325NsLExEFDTi6b1axJ22PL0f8tG/kTFxN9e58tSSl71fXyo51OF45evFJRn5OZyLjmJelUsvzkBzB0wgGNjx7DykYfZE3Oew5cumWIiRe5KEBxsbQnysjxAsYpScgv2u97/zTOeY/ucsbz6SE8W/LL3T8cBWD1lJGs+GcmEJ/vg4ep4e32/SUFNahF56Pr/TmZ6FhfPXCKwSS1cPV3w8fPmzMHr9ZEHzxLUpJbFWIFN/Iu0PXPwLN41PHHzdiWoSS0uRcaRkZp5PdahswSWEut2LIjYx31BjXC0saW6kyvdawaz9UIk8ZnprIo6xuC6zTCI0NqnJn4u7oRdPm8xTiufmiRnZ7K873D2DX6Br3oMoqaLafBe39OHmGvJpOVeXzo9nniZep6l/2/fDkuvHwgE1ffl1KEYYs5cpl3vJhgMQoc7m5KTnUtUROwN49o72FG/eQBnT8aVQ6+tSMR6PxVMD5a0itQTyFZKfZlfoJQ6q5T6onAj86DKDUgsVLwNaCsidiLiCtQFwq3dwbMXEkhMTufh+9tgY2OgbfNAWjb2x9HeDidHO0Y93JnPF265cSBgx/5IerSvx+Zvx/L950+yZvMRIs6UfLGrE+DDiMHtmbE41NrpFIhMSOBqejrPtAnB1mCgc2Agbf39cbSzxdnOnmvZWUXaX8vKwtXertR4I3/6ieZfTOfJ5SsIjY4m/1TjW6OjGNK0GX7u7rja2/NM2zYAONmWHut2RccmkJiSzqP9QrCxMdCuSSCtG/jj6HB9Nqvn8zPp8dx0Jn+zmRNnL/+pOEmpGTw26Vvuf3Uuj036FmdHe94bdXe55VWYo6sjacnpRcrSk9NxdnPCyTxgK1yflpyOk5vlgZxTsVj5l/NjFb+ftOR0nF2tv2y1Oy6G+p4+HBn2MnsGP8/hq5dYF3MKgNVRxxjTvBMnH3mVpX0fYUr4NmLTLe+hq+HixqA6TZkUtpFOy2cRk5rEtC73m3Kys+daTrH/7ewsXG3trZ4PQMyZOJKupvLgqB7Y2Bpo3aU+zdrWwcHJDqNRsXHFPl7/bDirT/yPcZ8PZ9r4ZWRl3Hg/34sfPEjk8YvsD40ol35bixLr/VQ0PVjSKlIT4EAZ9V1EJBw4B/QG5heqU8BG4C6gP7C6rDsSkWdEZJ+I7JszZ85NdzAvz8j//W8VHe+ozc9zRzP0vhA27zzB5YRrPDWkI+tCjxF7OeWGcdxcHfl0/AMsWLabng9/xoBRs2nXIpCBfVoUaedXw5NPxj/AZwu2cDCi/PYe5BqNjF61mu61g9k9ehRPhdzBrydOculaKuk52bjaF33zcLV3IDW77On9XKORrdHRdA0KoledYACWHT7Czyci+G7IYNY+8Ti7z8UAcCnV8hudNeTlGXn1i9V0bh7M2s9G8UjfO9gYdpLLxfaUZWbnsvz3g0wc2Rcvt5Jv/jeKk5GVw/HoOPKMioSUdCZ/s5kOTYNwcSyfN94ifU/NxNm9aJ+d3Z1Jv5ZRMAvkUqje2d2JjGuZWJJRLFb+5fxYzu7Oxe7HifTUDKvkkU+ARb2HsPbcSRp/9yktl3yOh4Mjb7T+f/buOzyqom3g8G82m94rhFQSAqbQIkWKEhI6SpWiFBuKAgIqoAJS7K90pCi+KIJ0AoKgdCT0aiAEQkI6EBJSSbLpOd8fGxaQDSJs5P1w7uvKxe6Zs8+Zh+xmn52ZczYEXxsHFjzTk/cObcPvpxl02rKU4YEtaO/mozdWSXk5O1LiOJt1jZLKCuadPUQzF3esjU20z21jPc/t8po54aCivJKPh39Pi/YBrDo+nT7DQjjw6xky0/Jo0saP1z54lvdfWMhz9Sfw/sCFjP1yAD7+de4Z87UPn8Orfm2+GPVjjfRZ0k+eDSf9zxBCLATaAqXAeLTTcM9Wtb0PfAW8edtD1gCjAVvgPWBidbEVRVkC3KySlB93zbrvfsWnZDJq6jrd/W8+fYHffo+md+fGODtY07tq4aydjTmfvPssP/18gpWb7zwTxc3FlopKhe0R5wG4nl3A7kMXaRVcl007tbOHtZysmffR8yzbcJQdERfuu38P6mJmJi+uu5XX+hcGsjE6GkWBPoG31uWYq9V42tkSl9azsXQAACAASURBVHV/04JGKoGnrXaaTQHmHT7CvMNHAGjr5UVafj7X8u+9GP5hXbqcyfD/3Mpt6aSBbD0Ufdd+KiEwMzHG2d6KnPy7C4D7jQPoRtP+iWvLJEWn0mloO919MwtTXH1rkRydSkFuIVlXs/Fp7M3p3WcB8G3sTVJ0qt5YydGX8W3sTcT6I7p9s6/lkp9dQFJ0Kq4+LphbmemKMJ9GXuxbfdCg+diZmuNmacPymFOUVlZQWlLB+ktRvNfkac5kppFwI5uIq9qp7oQb2ey7nECImw/7riTcFetCTgbKrd8GVcvpEAhiczPxtLbDUm2im4rzt3dhS+J5g+Zzu6SYNCYMvHUW46wNb7M7/CS+AW6cO55AXJR2OjH2bCoxkck0bVufhAtX9cYaPLYzzdo9wYSBC9EUlOjd53/K/8D0maHIkSXpUYoGgm/eURRlJBAG6DvNZQvwzO0bFEU5DgQBToqixNZUJ309nTAxNsLURM0LzzXD0d6SX3+PZvT09Qx5bxkvj1/Oy+OXk5ldyFff7mbjjrtnA1PSchACOrZ9AiHAwc6CsDYNuJSsXRvk5GDF11P7s3FHJD/vOltTqdyhgZMTJkZGmKnVDGv2JM6WloRHn2fnpUvUd3Kis58fJkZGvN2qFTHXM0nIzrkrho+DPe28vTFVq1GrVPT096e5uzvHL2vfAGzNzPC0tQWgnoMDk0LaseDI0dveympGPXcnTNTa39ngLk/iaGvJ1oPnaRHgSX1PZ1RCYGlmwtiBIeQXFpNUzaUDqosDEOhTG6/a9ggBtpZmjBvUnpMXUim8j2mU+6UyUmFsaozKSHXH7UObjuMd5EnbPi0xNjVm8JTnSTybTOpF7ZvsrhURDJrUFys7Szwa1KHrsDB2/vi73mPsWrGfLq+G4unvjpWdJS9O6qvb90pcGvGRSQyZ2g9jU2Pa9GqBTyMvDoQb9qy/nJIiUvJzGdygKUZCYGNsSl/fIC7kZBCdnY63tT2tansC4GllR6i7LxdyruuNtT4+is4e9Qmwd0EtVIxu1Jrj6ancKCshMT+H89kZjGncBlOVEZ09/PC3d+a35IsGzed23k+4YmyixtTMmL6vh+DgYsPu8OPEnk0lsHld3UiSb4AbQc19SIzRXyj1fyuMkB7BTBzyDfm5mrva1cZGGJuoQQjdbb1rpv5JwoA/j5gcWZIepb3A50KItxRFWVy1zaKafdsC8Xq2fwjon18wkC7tAng2tCFqtYozF64w9pMNlJVXUFZw59lvlZWV5BcWU1Ssna4a/3oHAGZ8txtNUSkTZ25hxKBnGPd6B0pKyzl0Mp4fq950ngttiFttO17p14pX+rXSxew45I7lWwbVOyCA/g2DUKtUnLxyhZc2hFNaUUF2UREjtvzCtLBQZnftSuS1NMZs26Z73CcdtCchfrR7DwLB6NatmO/oSGVlJUm5uYzZuo3oDO06IHtzM77r1QtXa2uyi4pYdvo0a6IMf42eP+vWOoCezwShNlIRGXuFUTPDKSuvwNrClPGDQ3Gxt6KkrJzziemMnr2R0qozGV/u3oKm9d0YM2fTPeMAuDnbMqJvWxxsLCgsKuFYdAqTv9lWbZ8exKDJfRk6tb/ufochz7B8+jpWTF/P9OdnMurr1/hgxWhijsXx2Qtzdfstn7qW0Ytf56ekRZQWlbL2q82crCrinT2cWBo9h9cC3+F6aiYnd0SybsZmZu6diom5CQfDj7F86lpdrM9emMv4H0ayKXsZGSmZfNxvFnmZfz31/He9+fsmpjQP483Ap6hQKjlyLYVPTu4lq1jDhMO/Ma15B9ysbMgvLWVzYjRrq66z1NzFnWVh/QhcPQeAI9dSmPHHfr4Pex5zI2NOZFxmzIFfdMd5O2IzM9t058zAMVwpvMFb+38mu8Sw04q3C+vdjM4DWqJWG3HuRAITh3xLWWkFUcfiWTlvJ5MWvYydkxV52YWsXbSb0we0n/va9wxmwIgOvNn5KwBemdCdspJylu67NYC+dtFu1i7aA8Bny4fT6Kl6AAQ2q8uYL/ozYeBCoo7p+7P5z3icvu5EKEpNf8aTpOoJIVyBOUBL4DpQCHwDpAObgUS0nyvygGGKosQKIV4GmimKMupPsZYBWxVF2fAXh1Xa9Lv/abj/Dw6tfw8A31mzH3FPDC/+vXcBaP7K45XbiR+0eXVU9XvEPTG8XZXrAfBe/p9H3BPDShr6PgBd6777iHtieL8lzgYDj+GEhn1psAJj754PHmnlJUeWpEdKUZQ0tKf962NbzWOWAcv0bH/ZUP2SJEmSHtJjtNBHFkuSJEmSJBnc4zQN9xjVfZIkSZIkSYYnR5YkSZIkSTK8x2dgSRZLkiRJkiQZ3v/ClbcNRU7DSZIkSZIk3YMcWZIkSZIkyfAeowXesliSJEmSJMngHqdpOHlRSunfSD7pJUmS7mbQ8qZdt68M9rd2/68T5EUpJUmSJEl6zDxGI0uyWJL+ldp3ery+hmHfTu3XMMivO/n/Q37dyf8//4KvOzEs1eNTLcliSZIkSZIkg3uc1izJSwdIkiRJkiTdgxxZkiRJkiTJ8B6jkSVZLEmSJEmSZHByGk6SJEmSJOl/hBBijBDinBAiWggxtmrbNCHEFSFEZNVPtweNL0eWJEmSJEkyvH/oCt5CiCDgdaAFUApsF0Jsq2qeoyjKzIc9hiyWJEmSJEkyuH9wGs4fOKooigZACLEf6G3IA8hiSZL+gqeHI2Pe7kh9v9rk5Wr45r/7OHgojlq1bFiz4i2Kikp1+65ed4wVKw/rjePr48LokR3w8XGhSFPK1l8jWX7bviHPPMHLQ9vi7GRFxvV8/vtDBIcOx9VYXr4ODkwPCyWoVi2yNUV8GRHBzkuXAGjt6cG0sDDqWFtzJu0a47dv52p+vt44K/v1w8/JERMjIy7n3WDu4cPsjo/XtY9o2YIXGjXC2tSU/YmJTNq1m4LSUr2xDMXb1YEJQ0Lx96pFTn4R89dF8PvpS9St48C0YV1wd7EDICYpnZmr9pF4NftvxQFwdbRhy8xhaIpv5bL81xMs/eWYwfLoObILnV4KwbuhJ7+vPsSMVxfq2pqGBjFqwTBcPJ2IORbHjFcWkpGSCYCxiZrRi1/n6b5PUaIpZd2MzYTP2VrtcfqM7c6ACb0wNTfhwMajzH/rO8pKywGo5eXMuO9H8ERLPzJSMlnw9lL+2BNlsBxvcre04ZOWnQh2dqO0spxfky/y8Yk9VCgKrWp7MunJ9nhZ25NTUsTic0dZHXem2liBDrWY0jyMIIdaaMrLWBR1hB9iTumOM6NNN5o41eFq4Q2mHN/FobRkg+dzk4evCyM+7otfkDt52YUs/eIXDu/U/v893b0xg8d2wam2LZlpuSyb8StHdp3TG2fYxOd4qkMQ9s7WZKXnsXbRHvZsPKlrH/15Pxq29KWOtxNzJqxld/iJGsvpURBCvAG8cdumJYqiLKm6fQ74TAjhCBQB3YCTQBYwSggxtOr+e4qi5DzI8eWaJUm6B5VK8On0Phw9Fk/PvvOYNW87E99/Fnc3e90+z/aeS7eec+jWc061hRLA5A+f42xUKj37zmPsuFX0eLYprZ+qB4CToxUT33+WRd/upXuvuXz73T4mf/AcdnYWNZKXkRB827MnexMSCF64iEm7djGrW1e87e2wNzdjUY8ezDl0iOCFi4hKT2f+s89WG+vjffto9c23NFmwUBfH2dISgD4BAfQKCKD/mjW0/nYJpmo1U0Pb10hOutxUgpmje3IwMoGwUYv4/MddfPxGVzxr2XE9p5APFm4lbNQiOr69mIjIBD57s/vfjnO70JELaffWAtq9tcCghRJA1tVsVn4Wzo4f9t2x3cbRmqnh4/lxyhr6OL5C7KkEJq95R9c+ZFp/3Oq5Mth7BONDp9F/fE+adW6i9xjNOjVm4Pu9mNBhOoPrjsC1bi2GTh+ga5+4aiyXIpPo6/QqP0xezZT172HrZGPQPAE+admJrGINLdYvoNsvy2hZy5MhDYJRCxXfhvRhVWwkDdfMZVTEZiY3C8Xf3llvHHtTc34M68eq2Eiarp1PyKYlRKQl6drnP9OD6OwMmqydz4w/IljcrhcOpuYGzwdAZaRiynevcnzvefo3ncz8iesYP+dF3Oo641jLlvGzB/Hdp5vp23Ai//3iFybMG4yto5XeWMWaUqYNW8rzjSYxa9xqhk/phX+wt6494cJVFn4UzqVzV2oklwciDPejKMoSRVGa3fZzs1BCUZQLwH+AXcB24AxQDiwGfIEmQBow60FTkcWS9FCEELWEEKuEEAlCiFNCiCNCiN5CiBAhxF0fZYUQvwshUoS4NZkthPhZCFFQddtbCKEIId6+rX2BEOLlv+hHLyFEgAFTA8DT0xEnRyvWh5+gslLhj8gUzkVfoWOHoL8dq3YtW3bvPU9lpcLVtFyioi/j7e0EgLOzNQWFxRw/kQDA0eMJFBeXUcfV7l4hH5ivgwMuVpZ8f+o0lYrCkdRUTl25Qm//ADrX8yMuK4vfYuMorahg3uHD+Ds74+NgrzfWxcxMKqq+Y1IBjFUqXK2tAQj19WF91DnS8gvQlJWx5MQJujdogJm65ga1vV0dcLazZNVObW4nL6RyJu4K3VoHUFBUQlrWDUC7nKKyshIPF/3/x/eK8085uOk4hzef4EbWnaN6bfu0JCk6lYgNRykrKWPFtHX4NPbGo0EdADoOacfKTzdQkFtISswVfv3vbjq9FKL3GB2HhrD9+70kn79MQW4hKz/doNvXzc+VesF1WT51LaXFpRzceIzEqBSe7tvS4Ll6WNmxNTmGksoKrhcXsv9qAvXtnLAzNcPGxJSNCdEAnM26xqW8LPxsnfTGGRbQnIiriWxOPE9pZQWF5aXE52UBUNfankCHWsyJPEhJRTnbU2KJyblOV68GBs8HtKNKji62bFq6n8pKhTNHLnH+VBKhvZ/EydWWwhtFnNwfA8CJfRco0ZTi6umoN9ZPc3dwOSEDRVG4GJlC9IkE/IO9dO1bVxwi8nAcZSVlNZLLg1CE4X7+8liKslRRlGBFUZ4BsoE4RVHSFUWpUBSlEvgO7ZqmByKLJemBVRU8PwMRiqL4KIryJDAQcP+Lh+YCbapi2AGuf2rPAMYIIUz+Rnd6AQZ/F9P3GhVCUNf71h/qNT+9xbqVI5jwXjdsbKr/hBq+6SSdOgRhZKTCw92BQH83Tp1OAuBi7DVSUrJo/VQ9VCpBm9Z+lJVVkJB43cAZ6ZLQs0lQ38kJPydHLmTcOm5ReTkpebn4Oep/cwL4rlcvzo8ZzaZBL3Is9TJR165pYyLuOJRAYKpW421fM0Wg9iD6c/Nxu9X/vQtHcHDJGMYNCuWHbccfOA7Alpmvs3XW60x5tRO2VmYP1/f75B3oQcLZW1NHxZoSrsZfwyvQAys7S5zcHIg/c6s94Uwy3oEeemN5BbrfsW/8mWQcatth7WCFd6AH1xLSKSoovhXrbDJe1cR6GD/EnOQ5b3/MjNTUMrcipI4P+68kkFmsYXPiefrVa4hKCIKd6uBmacOJjMt64zR1qkNeaTHhXQZzst8o/tu+L3UstcV7fTsnUvPzKCy/NXV6IScDP7vqn9sPQ+hb4CzAu74rcWdTSY3PoGWHQFQqQauOQZSVlpMYk/aXcU1MjanfyJPk2PQa6PX/T0IIl6p/PYE+wGohxO3vLb3RTtc9ELlmSXoYoUCpoijf3NygKEoy8LUQIuQej1uDtqg6iPZJvREIvK39OnAIeAntpwEdIYQvsBBwBjRoz4BwAHoA7YQQk4G+iqLEYwApqdnk5GoY2K8F6zeepGkTTxo39CDyTAp5eUUMH/kjl+LTsbUxZ8zbnZj8wXNMmLhOb6wjx+L5cHx3BvRrgZGRih9XHOJirLaoqKxU2Lk7mskfPoeJiZqysgqmf/ozxcU18ykxITubLI2GN5o34/tTp3nKw4MW7u4cTU3FwtiE7CLNHfvnl5RgZWJcbbzXf/4ZtUpFG09PfBwcuPlV4/uTEnmjWXO2XYwlr7iYN1o0B8BcXX2sh5WUlk3ODQ1DujZj1c7TNHvCg+AG7pyMSdXtEzpyEWYmap5tE6gbafq7cXILihg6fSWxKRnYWpkzYXAonwzvxuhZG2sst5vMrMzIu35nvzV5GiyszTGvKtgK8279DgvzNJhb6y/kzK3M7toX0MW6ve1mu1MdB4Pkcbuj6akM9GvMuRfeQa1SseFSFDtStWv2tiSe58tWXZnavAMAk4/tJE2jfw1dbUtrghxrMXjXWi7mXOeDJ0OY/3QPnt++EgtjE/LLSu7YP7+0hNoW1gbPByA1Pp3crAKeH96eTUv307hVPRq28OXs0UtUVirs3niS9+cOxsRU+5r/fOSPlBT99Xq+tz97noQLVzkVEVMj/TaYf+hsuCrhVWuWyoCRiqLkCCFWCCGaoB30TgKGP2hwWSxJDyMQOP0Aj9sDfCeEMEJbNL0BfPSnfb4EfhNCfP+n7UuANxVFiRNCtAQWKYoSKoTYAmxVFGWDvgPevjjw22+/ve+OVlRU8tG0jYwe2YGBA54iNvYav0fEUFZWQXFxGbFx2mInJ1fDvAW72Lh2FBYWJmg0d/7Bs7Y24z+f9WP+wl3s3nseBwcrpn/Ui5zcQjb/8gfBTb14Y1gIY8etJu7SNer71eaz6X15f9J64hMy7ru/96u8spI3N29hamgobzRvTlR6Or9ejKW0ogJNWSlWJncO6lmZmFJQeu/Crbyykv1JSbwcHExKXi574hNYH3UOV2trVvXvh5FKxdKTp+jg68u1Av1vdIZQUVHJuK+3MH5QKEO7NedCUjq7T8RSWlZxx37FpeWE/36GnfPfov/EZeTkF/2tOEUlZVxI0n6yz76hYcZPe9k+700szUwoLK7ZBezFBcVY/GkU08LGAk1+kW4UyNLGnNzrZVVt5hTlF98VB6DoT7Fu3r4Zy8LmznVzFjbmaAru/L96WAJY3qE/q2Ij6fvbT1gYGzOjdTc+CA5h/aWzLHimJ8N/38SBq4nUtXFgaWhf0jX57LuScFeskvJydqTEcTZL+9qcd/YQkQPGYG1son1uG+t5bpfXzO+rorySj4d/z4hpfeg3PJS4qFQO/HqGspJymrTx47UPnuX9FxZy6dwV/Bq6M/W71/jo5SUkXLhabczXPnwOr/q1+eDFRTXSZ0P6Jy9KqSjK03q2DTFUfFksSQYjhFgItEV7nYvx99i1Au2o0gDAXFGUpD8PVyuKkiiEOA68eFt8K6A1sP62/U3vp29ViwFvLghUVm+4/29DT0i8zthxq3X3v54zmJ279ZwNVLVuR9/fB9fadrrRI4DMzHz2/n6Bls192PzLH9TzrcXZqFRd8XUx9hoXLl7lyWDvGimWQLvW6MV1t0bB1r8wkI3R0SgK9Am8NaNprlbjaWdLXFbmfcU1Ugk8bbXTbAow7/AR5h0+AkBbLy/S8vO5ll9guET0uHQ5k+H/uZXb0kkD2Xoo+q79VEJgZmKMs73VXcXS34kD6EbT/omveEiKTqXT0Ha6+2YWprj61iI5OpWC3EKyrmbj09ib07vPAuDb2Juk6FS9sZKjL+Pb2JuI9Ud0+2ZfyyU/u4Ck6FRcfVwwtzLTFWE+jbzYt/qgQfOxMzXHzdKG5TGnKK2soLSkgvWXonivydOcyUwj4UY2EVcTAUi4kc2+ywmEuPnoLZYu5GSg3Ppt3HxZIhDE5mbiaW2HpdpENxXnb+/ClsTzBs3ndkkxaUwYeOssxlkb3mZ3+El8A9w4dzyBuCjtdGLs2VRiIpNp2rZ+tcXS4LGdadbuCSYMXIimoETvPlLNkGuWpIcRDQTfvKMoykggDO0U2V9ZA3wN6J+z0voceJ9bz1MVkKsoSpPbfvwfqOd/g09dZ4yNjTA1VdP/+RY4Olqyfec5/J9wxcPdASHAxtqMt0d04I/IZAo1d39KvXwlGyEgrL0/QoC9vSXt2z2hK4QuXkyjUZA7vj4uANTzdaFhkAcJiTVTKAE0cHLCxMgIM7WaYc2exNnSkvDo8+y8dIn6Tk509vPDxMiIt1u1IuZ6JgnZd59x6+NgTztvb0zVatQqFT39/Wnu7s7xy9o3AFszMzxtbbU5OTgwKaQdC44cve2trGbUc3fCRG2EqYmawV2exNHWkq0Hz9MiwJP6ns6ohMDSzISxA0PILywmqZpLB1QXByDQpzZete0RAmwtzRg3qD0nL6RSeB/TKPdLZaTC2NQYlZHqjtuHNh3HO8iTtn1aYmxqzOApz5N4NpnUi9o32V0rIhg0qS9WdpZ4NKhD12Fh7Pzxd73H2LViP11eDcXT3x0rO0tenNRXt++VuDTiI5MYMrUfxqbGtOnVAp9GXhwIN+xZfzklRaTk5zK4QVOMhMDG2JS+vkFcyMkgOjsdb2t7WtX2BMDTyo5Qd18u5Ohfz7c+PorOHvUJsHdBLVSMbtSa4+mp3CgrITE/h/PZGYxp3AZTlRGdPfzwt3fmt+SLBs3ndt5PuGJsosbUzJi+r4fg4GLD7vDjxJ5NJbB5XXz8tYvyfQPcCGruQ2KM/kKp/1thhPQIZuKQb8jP1dzVrjY2wthEDULobutdM/VPMuDZcI+aHFmSHsZe4HMhxFuKoiyu2na/57ofAL4AVle3g6IoMUKI88CzwHFFUW4IIRKFEP0URVlftcC8kaIoZ4B8oEYWHnTsEEj3Lo1Rq1WcPXeZcR+spaysAtfadgx79Rns7CzQFJZy6nQSn3zxi+5x74zuBMCc+TvRaEqZ8vEm3ngthLGjO1NaUsbho/H8tFr7af5MVCrLVhxi+ke9sLe3IDeviJWrj3DyVFJNpARA74AA+jcMQq1ScfLKFV7aEE5pRQXZRUWM2PIL08JCmd21K5HX0hizbZvucZ90CAPgo917EAhGt27FfEdHKisrScrNZczWbURnaIs8e3MzvuvVC1dra7KLilh2+jRrogx/jZ4/69Y6gJ7PBKE2UhEZe4VRM8MpK6/A2sKU8YNDcbG3oqSsnPOJ6YyevZHScu3U2svdW9C0vhtj5my6ZxwAN2dbRvRti4ONBYVFJRyLTmHyN9uq7dODGDS5L0On9tfd7zDkGZZPX8eK6euZ/vxMRn39Gh+sGE3MsTg+e2Gubr/lU9cyevHr/JS0iNKiUtZ+tZmTOyIBcPZwYmn0HF4LfIfrqZmc3BHJuhmbmbl3KibmJhwMP8byqWt1sT57YS7jfxjJpuxlZKRk8nG/WeRl6l/n9TDe/H0TU5qH8WbgU1QolRy5lsInJ/eSVaxhwuHfmNa8A25WNuSXlrI5MZq1VddZau7izrKwfgSungPAkWspzPhjP9+HPY+5kTEnMi4z5sCt1+XbEZuZ2aY7ZwaO4UrhDd7a/zPZJYadVrxdWO9mdB7QErXaiHMnEpg45FvKSiuIOhbPynk7mbToZeycrMjLLmTtot2cPhALQPuewQwY0YE3O38FwCsTulNWUs7SfRN1sdcu2s3aRXsA+Gz5cBpVXYoksFldxnzRnwkDFxJ1zCDLNx+I8hgNxwhFqenPeNLjrOpsgzlAS7QLswuBb4B04De0FwW7qR/aAmmcoign/xSnQFEUKyGEN9q1R0FV2xsDfwCvKoqyTAhRF+21M1wBY2CNoigfCyHaoF0MXgI8/xcLvJX2ne5/Gu7/g3073wfAd9bsR9wTw4t/710Amr/yeOV24gdtXh1V/R5xTwxvV+V6ALyXP16vs6Sh2tdZ17rvPuKeGN5vibPBwGM4rV6cZbAC48iq9x7p+JIcWZIeiqIoaWgXaeuj7zz6kGriWFX9mwQE3bb9DLdNFyuKkgh00fP4Q9TApQMkSZIkSRZLkiRJkiQZ3D95NlxNk8WSJEmSJEmG96gXmBvQY7T8SpIkSZIkyfDkyJIkSZIkSQYnp+EkSZIkSZLu5TEqluQ0nCRJkiRJ0j3IkSVJkiRJkgzucZqGkxellP6N5JNekiTpbgYtb1q8PNtgf2uPL3v3kZZechpOkiRJkiTpHuQ0nPSvFBby+aPugkHt+V37fVHy607+/5Bfd/L/z7/g604M6nGahpPFkiRJkiRJhieLJUmSJEmSpOo9TiNLcs2SJEmSJEnSPciRJUmSJEmSDO8xGlmSxZIkSZIkSQanyC/SlSRJkiRJ+neQI0uSJEmSJBne4zOwJIslSfornp6OjB7bGb/6tcnL0/Dt4r0cOhgLgKmpmuFvhRHS3h8jIxUJ8Rm8M+YnvXE+nNSDpsHemJkZk5NdwNo1R/l12xlde9Ngb0aP7YyLiw0xF67yny9/ISP9Ro3l5evgwPSwUIJq1SJbU8SXERHsvHQJgNaeHkwLC6OOtTVn0q4xfvt2rubn642zsl8//JwcMTEy4nLeDeYePszu+Hhd+4iWLXihUSOsTU3Zn5jIpF27KSgtrbG8ALxdHZgwJBR/r1rk5Bcxf10Ev5++RN06Dkwb1gV3FzsAYpLSmblqH4lXs/9WHABXRxu2zByGpvhWLst/PcHSX44ZLI+eI7vQ6aUQvBt68vvqQ8x4daGurWloEKMWDMPF04mYY3HMeGUhGSmZABibqBm9+HWe7vsUJZpS1s3YTPicrdUep8/Y7gyY0AtTcxMObDzK/Le+o6y0HIBaXs6M+34ET7T0IyMlkwVvL+WPPVEGy/Emd0sbPmnZiWBnN0ory/k1+SIfn9hDhaLQqrYnk55sj5e1PTklRSw+d5TVcWeqjRXoUIspzcMIcqiFpryMRVFH+CHmlO44M9p0o4lTHa4W3mDK8V0cSks2eD43efi6MOLjvvgFuZOXXcjSL37h8E7t/9/T3RszeGwXnGrbkpmWy7IZv3Jk1zm9cYZNfI6nOgRh72xNVnoeaxftYc/Gk7r20Z/3o2FLX+p4OzFnwlp2h5+osZzulzwbTpL+JVRGgk8+e56jRy7Ru8ccZs/8jQ8n9cDd3QGAd8d1w8bGnFeGLqF3jzksWri7HTuuUwAAIABJREFU2lirVh5m0MCF9Og+i8mTNvDKa+3wq18bABtbc6Z93Icflu6nV4/ZXLyYxkdTe9dYXkZC8G3PnuxNSCB44SIm7drFrG5d8ba3w97cjEU9ejDn0CGCFy4iKj2d+c8+W22sj/fto9U339JkwUJdHGdLSwD6BATQKyCA/mvW0PrbJZiq1UwNbV9jeQEYqQQzR/fkYGQCYaMW8fmPu/j4ja541rLjek4hHyzcStioRXR8ezERkQl89mb3vx3ndqEjF9LurQW0e2uBQQslgKyr2az8LJwdP+y7Y7uNozVTw8fz45Q19HF8hdhTCUxe846ufci0/rjVc2Ww9wjGh06j//ieNOvcRO8xmnVqzMD3ezGhw3QG1x2Ba91aDJ0+QNc+cdVYLkUm0dfpVX6YvJop69/D1snGoHkCfNKyE1nFGlqsX0C3X5bRspYnQxoEoxYqvg3pw6rYSBqumcuoiM1MbhaKv72z3jj2pub8GNaPVbGRNF07n5BNS4hIS9K1z3+mB9HZGTRZO58Zf0SwuF0vHEzNDZ4PgMpIxZTvXuX43vP0bzqZ+RPXMX7Oi7jVdcaxli3jZw/iu08307fhRP77xS9MmDcYW0crvbGKNaVMG7aU5xtNYta41Qyf0gv/YG9de8KFqyz8KJxL567USC7/drJYkh4pIYSHECJRCOFQdd++6r6XEMJPCLFVCBEvhDglhNgnhHimar+XhRDXhRCRQohoIcQGIYSFofvn6emEo5M1G9Yfp7JSIfKPZKLPXaZDpyDcPRxo1dqP2TN/JS9PQ2WlQlzstWpjJSdlUlZWAYCiKCgK1KljD8DTTzcgOSmTiP0xlJVWsHzZAXx9XfDwdDR0SoB2VMnFypLvT52mUlE4kprKqStX6O0fQOd6fsRlZfFbbBylFRXMO3wYf2dnfBzs9ca6mJlJRdV3TCqAsUqFq7U1AKG+PqyPOkdafgGasjKWnDhB9wYNMFPX3KC2t6sDznaWrNqpze3khVTOxF2hW+sACopKSMvSjtYJAZWVlXi42P3tOP+Ug5uOc3jzCW5k3Tmq17ZPS5KiU4nYcJSykjJWTFuHT2NvPBrUAaDjkHas/HQDBbmFpMRc4df/7qbTSyF6j9FxaAjbv99L8vnLFOQWsvLTDbp93fxcqRdcl+VT11JaXMrBjcdIjErh6b4tDZ6rh5UdW5NjKKms4HpxIfuvJlDfzgk7UzNsTEzZmBANwNmsa1zKy8LP1klvnGEBzYm4msjmxPOUVlZQWF5KfF4WAHWt7Ql0qMWcyIOUVJSzPSWWmJzrdPVqYPB8QDuq5Ohiy6al+6msVDhz5BLnTyUR2vtJnFxtKbxRxMn9MQCc2HeBEk0prtW85n+au4PLCRkoisLFyBSiTyTgH+yla9+64hCRh+MoKymrkVweiDDgzyMmp+GkR0pRlFQhxGLgS+CNqn+XAOnAWWCcoihbAIQQQUAzIKLq4WsVRRlV1bYKGAD8YMj+6XuNCiGoW9cZf/86pKfn8dIrz9CxUxBZWQUsX3aAAxEXq403emxnOndphJmZMXGx1zh2TDul4+3tTHx8hm6/4uIyrl7NxdvbidSULEOmdDMJvXnVd3LCytSECxnXdduLystJycvFz9GJhOwcveG+69WLNl6emKrVRCQmEXVNWzQKxB2HEghM1Wq87e2IuZ5p2JxuJaJnk8DH7dab696FIzA3NUElBN/+fPiB4wBsmfk6iqJwPDqZeesiyCsofrj+3wfvQA8Szt6aOirWlHA1/hpegR7kpOfh5OZA/Jlb7QlnkmnTs4XeWF6B7hzecmvKJv5MMg617bB2sMI70INrCekU3ZZTwtlkvAI9DJ7TDzEnec7bn6PXUrA1MSOkjg+zIw+QWaxhc+J5+tVryMrYSJo4uuJmacOJjMt64zR1qsPF3OuEdxmMl7UdkZlpTDm+k6uF+dS3cyI1P4/C8ltTpxdyMvCz0194PSyh72wwAd71XVk5dwep8Rm07BDIib3naRkWSFlpOYkxaX8Z18TUmPqNPNm6oprn7v+K/4Eix1DkyJL0v2AO8JQQYizQFpgFDAKO3CyUABRFOacoyrI/P1gIoQYsAf3v5A8hJSWLnJxCBgx8CiMjFU82q0ujxp6Ymhrj7GyDj48LhYUl9O87n6/n7eT9D5/D8x6jQfPn7uC5bjMZ8/ZyDhy4SFmpdqTJ3NyYwsI732QLC4qxsDAxdEoAJGRnk6XR8EbzZqhVKtp6edHC3R0zYzUWxibkl5bcsX9+SQlWJsbVxnv9559p9PUCXg3fSERSEje/anx/UiL9gxriZmODlYkJb7RoDoC5uvpYDyspLZucGxqGdG2GkZGKloFeBDdwx8z01mfD0JGLaD9iATN+2svF5IwHipNbUMTQ6SvpMe47hk5fiYWZCZ8M71Zjed3OzMqMwjzNHds0eRosrM0xtzIDuKO9ME+DubWZ3ljmf4p18/bNWH8+TmGeBgsrw09bHU1Ppb6dE+deeIdj/UYSlXWNHalxAGxJPM/oRm2IHTSOdV0GMTPyAGka/Wvoalta09c3iOkndtMmfDGpBbnMf7qHNidjE/LL/vTcLi3BSl0zr7PU+HRyswp4fnh7jNQqgp+uT8MWvpiaG1NZqbB740nenzuYLRe/YsK8wcyftJ6Sor9ez/f2Z8+TcOEqpyJiaqTf0t1ksSQ9coqilAHj0RZNYxVFKQUCgdN/8dABQohI4ArgAPxS3Y5CiDeEECeFECeXLFly332rqKhk6uQNtHyqHhs2jqZf/5bs//0CmddvUFJSRllZBT+tOEh5eSVnz6QQ+UcyzZr73DNmZaXCuajLODtb06NnMABFRWVYWJjesZ+FpSkaTc0shC6vrOTNzVsIqevD0TeH81qzJ/n1YizX8gvQlJViZXLnm4eViSkFpfce3i+vrGR/UhLPeHsT5qv9P1gfdY5fLsawqn8/tr/8EkdTUgG4VqD/jc4QKioqGff1Fto28mH73OEM6vIku0/EkpFdcMd+xaXlhP9+hmmvd8He+u43/7+KU1RSxoWkdCoqFbJvaJjx015aBXljaVYzb7x39L2gGAubO/tsYWOBJr9INwpkeVu7hY05Rfn6R7yK/hTr5u2bsSxs7pzdtrAxR1NQZJA8bhLA8g792Z4SS8Cq2TRZOw9bUzM+CA7B18aBBc/05L1D2/D7aQadtixleGAL2rvpf52VlJezIyWOs1nXKKmsYN7ZQzRzccfa2ET73DbW89wur5nXWUV5JR8P/54W7QNYdXw6fYaFcODXM2Sm5dGkjR+vffAs77+wkOfqT+D9gQsZ++UAfPzr3DPmax8+h1f92nwx6sca6bMhKcJwP4+anIaT/ld0BdKAIGDXnxuFEJsAPyBWUZQ+VZvXKooySmjHuheiLbi+1BdcUZQlaKf3AJS1qz6/744lJFzn3bG3znCbv2AoO3dEceXKww1kGRmpdGuWkpKu06lzQ12bmZkxderYk5RUQ1NVaNcavbhune7++hcGsjE6GkWBPoG31uWYq9V42tkSl3V/fTFSCTxtteuAFGDe4SPMO3wEgLZeXqTl53Mtv+AeER7epcuZDP/PrdyWThrI1kPRd+2nEgIzE2Oc7a3Iyb+7ALjfOIBuNO2fmHpIik6l09B2uvtmFqa4+tYiOTqVgtxCsq5m49PYm9O7zwLg29ibpOhUvbGSoy/j29ibiPVHdPtmX8slP7uApOhUXH1cMLcy0xVhPo282Lf6oEHzsTM1x83ShuUxpyitrKC0pIL1l6J4r8nTnMlMI+FGNhFXEwFIuJHNvssJhLj5sO9Kwl2xLuRkoNz6bVC1nA6BIDY3E09rOyzVJrqpOH97F7YknjdoPrdLikljwsBbZzHO2vA2u8NP4hvgxrnjCcRFaacTY8+mEhOZTNO29Um4cFVvrMFjO9Os3RNMGLgQTUGJ3n3+p/wPFDmGIkeWpEdOCNEE6Ag8BbwjhHAFooHgm/soitIbeBntCNIdFEVR0I4qPVMT/fPxccbYxAhTUzX9BrTEwdGKHdvPcvZMChkZebz4YmtURoLAIHcaN/HkxIm7/4Db2VnQPjQAM3NjVCpBs+Z1aR8awB9/JAFw8EAs3nWdefqZBhibGDFkaFsSEjJqZr1SlQZOTpgYGWGmVjOs2ZM4W1oSHn2enZcuUd/Jic5+fpgYGfF2q1bEXM/Uu17Jx8Gedt7emKrVqFUqevr709zdneOXtW8AtmZmeNraAlDPwYFJIe1YcOTobW9lNaOeuxMmaiNMTdQM7vIkjraWbD14nhYBntT3dEYlBJZmJowdGEJ+YTFJ1Vw6oLo4AIE+tfGqbY8QYGtpxrhB7Tl5IZXC+5hGuV8qIxXGpsaojFR33D606TjeQZ607dMSY1NjBk95nsSzyaRe1L7J7loRwaBJfbGys8SjQR26Dgtj54+/6z3GrhX76fJqKJ7+7ljZWfLipL66fa/EpREfmcSQqf0wNjWmTa8W+DTy4kC4Yc/6yykpIiU/l8ENmmIkBDbGpvT1DeJCTgbR2el4W9vTqrYnAJ5WdoS6+3Ih57reWOvjo+jsUZ8AexfUQsXoRq05np7KjbISEvNzOJ+dwZjGbTBVGdHZww9/e2d+S65+neHD8n7CFWMTNaZmxvR9PQQHFxt2hx8n9mwqgc3r6kaSfAPcCGruQ2KM/kKp/1thhPQIZuKQb8jP1dzVrjY2wthEDULobutdMyU9EDmyJD1SVaNCi9FOv6UIIWYAM4FhwIdCiB63rVu619lubYH4e7Q/sA6dGtKte2PUaiOizqYyYdxq3VltH03awLjx3Rj4Yisy0m/w5ee/6AqcFwe1pmEjDz58fy2KAs/1CGbsu10QQpCenseiBbs5fEi7JiMvT8P0qRt5e0xnPpzUgwsXrvLpxz/XRDo6vQMC6N8wCLVKxckrV3hpQzilFRVkFxUxYssvTAsLZXbXrkReS2PMtm26x33SIUyb++49CASjW7divqMjlZWVJOXmMmbrNqIztOuA7M3N+K5XL1ytrckuKmLZ6dOsiTL8NXr+rFvrAHo+E4TaSEVk7BVGzQynrLwCawtTxg8OxcXeipKycs4npjN69kZKy7W/z5e7t6BpfTfGzNl0zzgAbs62jOjbFgcbCwqLSjgWncLkb7ZV26cHMWhyX4ZO7a+732HIMyyfvo4V09cz/fmZjPr6NT5YMZqYY3F89sJc3X7Lp65l9OLX+SlpEaVFpaz9ajMnd0QC4OzhxNLoObwW+A7XUzM5uSOSdTM2M3PvVEzMTTgYfozlU9fqYn32wlzG/zCSTdnLyEjJ5ON+s8jLNPz1v978fRNTmofxZuBTVCiVHLmWwicn95JVrGHC4d+Y1rwDblY25JeWsjkxmrVV11lq7uLOsrB+BK6eA8CRaynM+GM/34c9j7mRMScyLjPmwK0Z+rcjNjOzTXfODBzDlcIbvLX/Z7JLDDuteLuw3s3oPKAlarUR504kMHHIt5SVVhB1LJ6V83YyadHL2DlZkZddyNpFuzl9QHsNt/Y9gxkwogNvdv4KgFcmdKespJyl+ybqYq9dtJu1i/YA8Nny4TR6qh4Agc3qMuaL/kwYuJCoYzXyZ/G+/C9MnxmKUJSa/ownSdUTQrwBhCmKMqDqvhFwHHgX7Rlxs4Enqm7nA18pirJbCPEyMAPteiUVcBl4WVEU/at176SEhdz/NNz/B3t+1/4B9Z01+xH3xPDi33sXgOavPF65nfhBm1dHVb9H3BPD21W5HgDv5f95xD0xrKSh7wPQte67j7gnhvdb4mww8MRZk7fnGKzAiPz6nUdaesmRJemR+tNaIhRFqQCevG0XvacXVZ0Vt6wm+yZJkiQ9uMdpZEmuWZIkSZIkSboHObIkSZIkSZLhPUYjS7JYkiRJkiTJ8B6jYklOw0mSJEmSJN2DHFmSJEmSJMngHqcF3rJYkiRJkiTJ8B6jYklOw0mSJEmSJN2DvCil9G8kn/SSJEl3M+hYUMN3DXdRyqjZ8qKUkiRJkiQ9bh6jaThZLEn/Sh3bfPqou2BQuw5NBuTXnfx/Ir/u5P+ff8HXnUjVkMWSJEmSJEmGJ0eWJEmSJEmSqicvHSBJkiRJknQvj1GxJC8dIEmSJEmSdA9yZEmSJEmSJIOT03CSJEmSJEn38hgVS3IaTpIkSZIk6R7kyJIk/QVPL0dGvdeV+g1qk5ur4buFezgUcREAU1M1b4zqQLvQANRqFfGXMnhv5HK9cWZ+PQT/QDcqKioByMzM59UXFuvaXxzahu49g7G0NuP4kUvM/c82NJrSGsvL18GB6WGhBNWqRbamiC8jIth56RIArT09mBYWRh1ra86kXWP89u1czc/XG2dlv374OTliYmTE5bwbzD18mN3x8br2ES1b8EKjRlibmrI/MZFJu3ZTUFpzeQF4uzowYUgo/l61yMkvYv66CH4/fYm6dRyYNqwL7i52AMQkpTNz1T4Sr2b/rTgAro42bJk5DE3xrVyW/3qCpb8cM1gePUd2odNLIXg39OT31YeY8epCXVvT0CBGLRiGi6cTMcfimPHKQjJSMgEwNlEzevHrPN33KUo0paybsZnwOVurPU6fsd0ZMKEXpuYmHNh4lPlvfUdZaTkAtbycGff9CJ5o6UdGSiYL3l7KH3uiDJbjTe6WNnzSshPBzm6UVpbza/JFPj6xhwpFoVVtTyY92R4va3tySopYfO4oq+POVBsr0KEWU5qHEeRQC015GYuijvBDzCndcWa06UYTpzpcLbzBlOO7OJSWbPB8bvLwdWHEx33xC3InL7uQpV/8wuGd2v+/p7s3ZvDYLjjVtiUzLZdlM37lyK5zeuMMm/gcT3UIwt7Zmqz0PNYu2sOejSd17aM/70fDlr7U8XZizoS17A4/UWM53Tc5siRJf48QopYQYpUQIkEIcUoIcUQI0VsIESKEyBNCRAohzgohdgshXKoe87IQQhFChN0Wp3fVtueFEJuqHnfpthiRQojWhuq3ykgw/cv+HDsUR5+us5j7n195f0pP3DwcABj7fnesbcx5bdA39Ok6i2/m77xnvAVzttOj41f06PjVHYVSx66NCOvSkLFv/cjAnnMxNVUz8t0uhkrjLkZC8G3PnuxNSCB44SIm7drFrG5d8ba3w97cjEU9ejDn0CGCFy4iKj2d+c8+W22sj/fto9U339JkwUJdHGdLSwD6BATQKyCA/mvW0PrbJZiq1UwNbV9jeQEYqQQzR/fkYGQCYaMW8fmPu/j4ja541rLjek4hHyzcStioRXR8ezERkQl89mb3vx3ndqEjF9LurQW0e2uBQQslgKyr2az8LJwdP+y7Y7uNozVTw8fz45Q19HF8hdhTCUxe846ufci0/rjVc2Ww9wjGh06j//ieNOvcRO8xmnVqzMD3ezGhw3QG1x2Ba91aDJ0+QNc+cdVYLkUm0dfpVX6YvJop69/D1snGoHkCfNKyE1nFGlqsX0C3X5bRspYnQxoEoxYqvg3pw6rYSBqumcuoiM1MbhaKv72z3jj2pub8GNaPVbGRNF07n5BNS4hIS9K1z3+mB9HZGTRZO58Zf0SwuF0vHEzNDZ4PgMpIxZTvXuX43vP0bzqZ+RPXMX7Oi7jVdcaxli3jZw/iu08307fhRP77xS9MmDcYW0crvbGKNaVMG7aU5xtNYta41Qyf0gv/YG9de8KFqyz8KJxL567USC4PQhGG+3nUZLEk1TghhAB+BiIURfFRFOVJYCDgXrXLAUVRmiiK0gg4AYy87eFRwAu33R8InAFQFKW3oihNgGG3xWiiKMphQ/Xd09MJRydrwtceo7JSIfJ0EuejLtOhS0PcPR1o1bY+c/+zjbxcDZWVCnEXrz3QcZ5q48f2rZFcz7hBcVEZa386QkhoAKamNTP46+vggIuVJd+fOk2lonAkNZVTV67Q2z+AzvX8iMvK4rfYOEorKph3+DD+zs74ONjrjXUxM5OKqu+YVABjlQpXa2sAQn19WB91jrT8AjRlZSw5cYLuDRpgpq65QW1vVwec7SxZtVOb28kLqZyJu0K31gEUFJWQlnUDACGgsrISDxe7vx3nn3Jw03EObz7Bjaw7R/Xa9mlJUnQqERuOUlZSxopp6/Bp7I1HgzoAdBzSjpWfbqAgt5CUmCv8+t/ddHopRO8xOg4NYfv3e0k+f5mC3EJWfrpBt6+bnyv1guuyfOpaSotLObjxGIlRKTzdt6XBc/WwsmNrcgwllRVcLy5k/9UE6ts5YWdqho2JKRsTogE4m3WNS3lZ+Nk66Y0zLKA5EVcT2Zx4ntLKCgrLS4nPywKgrrU9gQ61mBN5kJKKcranxBKTc52uXg0Mng9oR5UcXWzZtHQ/lZUKZ45c4vypJEJ7P4mTqy2FN4o4uT8GgBP7LlCiKcXV01FvrJ/m7uByQgaKonAxMoXoEwn4B3vp2reuOETk4TjKSspqJJd/O1ksSf+EUKBUUZRvbm5QFCVZUZSvb9+pqqiyBnJu23wAaCGEMBZCWAH1gMh/oM9VndK/zbuuM08EuJFxLY+hw9qxYdu7LFn+Bm1DnrhnuFeHt2fDtneZu/glGjW99YdOCBC3HUwIMDFV60awDE7cnZgQgvpOTvg5OXIh47pue1F5OSl5ufg56n9zAviuVy/OjxnNpkEvciz1MlHXtEWjQNxxKIHAVK3G215/gWIQ1eTm43ar/3sXjuDgkjGMGxTKD9uOP3AcgC0zX2frrNeZ8monbK3MHq7v98k70IOEs7emjoo1JVyNv4ZXoAdWdpY4uTkQf+ZWe8KZZLwDPfTG8gp0v2Pf+DPJONS2w9rBCu9AD64lpFNUUHwr1tlkvKqJ9TB+iDnJc97+mBmpqWVuRUgdH/ZfSSCzWMPmxPP0q9cQlRAEO9XBzdKGExmX9cZp6lSHvNJiwrsM5mS/Ufy3fV/qWGqL9/p2TqTm51FYfmvq9EJOBn521T+3H4bQ8xxCgHd9V+LOppIan0HLDoGoVIJWHYMoKy0nMSbtL+OamBpTv5EnybHpNdBrAxIG/HnEZLEk/RMCgdP3aH9aCBEJpAAdgO9va1OA3UBnoCewpaY6qU9qcha5OYX0f7EVRkYqnmzhQ6MmXpiZGePsYkNdXxcKC0oY2HMuC2ZvZ8KkHnh66f9k+N/FexjafyEv9JrHti1/8MlX/XF1047WnDgaT9fnmlCrti0WlqYMGKydSTQ1Na6RvBKys8nSaHijeTPUKhVtvbxo4e6OmbEaC2MT8ktL7tg/v6QEK5Pq+/L6zz/T6OsFvBq+kYikJG5+1fj+pET6BzXEzcYGKxMT3mjRHABzdc3kBZCUlk3ODQ1DujbDyEhFy0Avghu4Y3bbKF3oyEW0H7GAGT/t5WJyxgPFyS0oYuj0lfQY9x1Dp6/EwsyET4Z3q7G8bmdmZUZhnuaObZo8DRbW5phXFWy3txfmaTC31l/Imf8p1s3bN2P9+TiFeRosrAw/bXU0PZX6dk6ce+EdjvUbSVTWNXakxgGwJfE8oxu1IXbQONZ1GcTMyAOk/R979x0WxfE/cPw9d/QuRUUEEcSC2AU1drFGjb0lajQae01ssWvUJMYWW6KJGjX2Fmss2LuiYgEVFVFELCggCNJuf3/ciRAO6xG/P53X8/Bwuzv32Znb4XZ2ZnZJ1D+HLr+lNa08fZhwOoCqG34lIiGW2dU/05bJ2IT41H/V7ZRkrIxMDF4egIgb94l9lEDrnrVRG6koX70opfw8MTU3RqNRCNgYyPBZHdlydSrDfunI7FHrSE569Xy+/pNbE3b5LmcOXcmVfBuMbCxJ0tsTQswTQpwXQjyfgfh8CM0VWAJM/ddbVqMdfmsPrHrLffYQQgQKIQIXLlz42u9LT9cw7rt1VPqkCGu3DqJ1+0oc3BfCwwfxJCenkpqazoqlh0lL03Ah6DZBZ8Op4OehN9aVkLskJaaQmprOnn8uEHzhDn5VPAHYuS2I/QHBTJvbiT/+6knQ2XAAoh/qPyG8qzSNhl6bt1CrsAcnevWkW8UK7Lgayr34BBJTU7AyyXrysDIxJSHl5d37aRoNB8PDqeHujr+n9jNYd/ESW69eYWXbNuzs8iUnbkcAcC8hd8oF2mM2ZM4WqpX2YOesnnzRsAIBp0N58DghS7pnKWlsOHCe8V83JI919pP/q+IkJadyOfw+6RqFx08S+fmvfVTxccfSLHdOvFnynvAMC5usebawsSAxPimjF8gy03YLG3OS4p+hT9K/Yj1//TyWhY3Fv/ZjTmJCkkHK8ZwAltVty87boXivnEHZNb9ga2rGiPK18LSxZ26NZnx7dDtef/1M/S2L6FnSj9ou+v/OktPS2HX7Ghce3SNZk84vF45SMW9BrI1NtHXbWE/dTsudGw7S0zRM7LkYv9rerDw1gZbda3F4x3mio+IoW9WLbiOaMLzDPJoWHcbw9vMY9GM7PEoUeGnMbt81pVDR/PzQb2mu5FnST94NJ/0XgoFWzxcURekrhHAEAvWk3QJsyLxCUZRTQggfIElRlFC9XduvoCjKQuB5K0lZt3TSa7/35o0HfNtvecbyrN++ZM8/F7l7R/8dVG+Qp4yhN0WBZYsOsWzRIQAq+Hnw8METoh8+ead9vMzV6Gg+X7s2Y3ldh/ZsDA5GUaBlyRfzcsyNjHCzs+Xao+jXiqtWCdxstcNsCvDLseP8cuw4ANUKFSIqPp578QkvifDurt+JpudPL8q2aFR7th0NzpZOJQRmJsY45bEiJj57A+B14wAZvWn/xVVweHAE9TvXzFg2szDF2TMft4IjSIh9yqO7j/Eo487ZgAsAeJZxJzw4Qm+sW8F38CzjzqF1xzPSPr4XS/zjBMKDI3D2yIu5lVlGI8yjdCH2rzpi0PLYmZrjYmnDsitnSNGkk5KczrrrF/m2bHXOR0cR9uQxh+7eBCDsyWP23wmjlosH+yPDssW6HPMA5cXRQDedDoEgNDYaN2s7LI1MMobiSuRySPYUAAAgAElEQVTJy5abIQYtT2bhV6IY1v7FXYzT1/cnYEMgnt4uXDoVxrWL2uHE0AsRXAm6RblqRQm7fFdvrI6DGlCxZnGGtZ9HYkKy3jT/S/4XJmYbiuxZkv4L+wAzIUTvTOssckhbDbihZ/13wEhDZ+x1FPbMi7GJGlNTI1p3qIy9gzW7d5znQtBtHtyPo0OnqqjUgpKlClKmfCECT2b/Are0MqWinwfGJmpUakGd+j6UKutG4CltUa2tzTKG5NzcHenZvy5/LTmc8UWfG4o5OmKiVmNmZET3ihVwsrRkQ3AIu69fp6ijIw28vDBRq+lfpQpXHkYT9jgmWwwP+zzUdHfH1MgII5WKZiVK4FuwIKfuaE8AtmZmuNnaAlDE3p5RtWoy9/gJcrFY2n0VdMTESI2piREdG1bAwdaSbUdC8PN2o6ibEyohsDQzYVD7WsQ/fUZ4Do8OyCkOQEmP/BTKnwchwNbSjCFf1CbwcgRPX2MY5XWp1CqMTY1RqVVZXh/ddAp3HzeqtayEsakxHce25uaFW0Rc1Z5k9yw/xBejWmFlZ4lrsQI06u7P7qUH9O5jz/KDNPyqDm4lCmJlZ8nno1plpI28FsWNoHA6jWuDsakxVZv74VG6EIc3GPauv5jkJG7Hx9KxWDnUQmBjbEorTx8uxzwg+PF93K3zUCW/GwBuVnbUKejJ5ZiHemOtu3GRBq5F8c6TFyOhYkDpTzh1P4InqcncjI8h5PEDBpapiqlKTQNXL0rkceKfW1cNWp7M3Is7Y2xihKmZMa2+roV9XhsCNpwi9EIEJX0LZ/QkeXq74OPrwc0r+htKbXv7U+uz8ozs9BvxsYnZthsZqzE2MQIhMl6/zYWlQX1Aw3CyZ0nKdYqiKEKI5sBMIcQw4CHwFBiuS/J8zpIA4tDe3fbvGP/8V/n9t7oNS9GoSVmMjNRcPH+bEYNWkJqaDsC4EWv5ZkQT2nX8hAf34pj6/RYibmvvvOnQuSo+pV0ZNWQ1RkZquvSohWshBzTpChG3oxn/3Tru3NaepG3sLPh+ajuc8toQF5vIprWn2LHlXK6Wq4W3N21L+WCkUhEYGcmX6zeQkp7O46Qk+mzZynj/Osxo1Iige1EM3L49433f19U+yWFMwF4EggGfVGG2gwMajYbw2FgGbttO8APtPKA85mb83rw5ztbWPE5K4s+zZ1l90fDP6Pm3Tz/xplkNH4zUKoJCI+k3bQOpaelYW5gytGMd8uaxIjk1jZCb9xkwYyMpadrj2aWxH+WKujBw5qaXxgFwcbKlT6tq2NtY8DQpmZPBtxn92/Yc8/Q2vhjdis7j2mYs1+1Ug2UT1rJ8wjomtJ5GvzndGLF8AFdOXmNyh1kZ6ZaNW8OAX7/mr/D5pCSlsGbqZgJ3ae+LcHJ1ZFHwTLqVHMzDiGgCdwWx9ufNTNs3DhNzE45sOMmycWsyYk3uMIuhS/qy6fGfPLgdzcQ204mLNnyPZ68Dmxjr60+vkpVJVzQcv3eb7wP38ehZIsOO/cN437q4WNkQn5LC5pvBrNE9Z8k3b0H+9G9DyVUzATh+7zY/nzvIYv/WmKuNOf3gDgMPb83YT/9Dm5lWtTHn2w8k8ukTeh/8m8fJhh1WzMy/RUUatKuEkZGaS6fDGNlpAakp6Vw8eYMVv+xm1Pwu2DlaEff4KWvmB3D2cCgAtZuVp12fuvRqoJ2V0HVYY1KT01i0/8U145r5AayZvxeAyct6UrpyEQBKVizMwB/aMqz9PC6e1HftKb0poeTmpask/W9S6lV9/WG4/w/2HB0NgOf0Ge85J4Z349tvAPDt+mGV7fQSbbnqqdq855wY3h7NOgDcl/30nnNiWOGdtdd3jQp/855zYnj/3JwBBu7DKT5upsEaGFcmDH6v/UuyZ0mSJEmSJMP7Hxg+MxTZWJIkSZIkyfA+oMaSnOAtSZIkSZL0ErJnSZIkSZIkg/uQHh0gG0uSJEmSJBneB9RYksNwkiRJkiRJLyEbS5IkSZIkSS8hh+EkSZIkSTK4D2nOknwopfQxkpVekiQpO4M2b4pOMtxDKUNHy4dSStJ/roF5p/edBYPalaT9R79l+818zzkxvKC5gwGoU+/H95wTw9q3ZwQAjTyGvOecGN4/YdMA8P3qA3vq+mLtk7sb5e/znnNieP/cm2/4oB9Qz5JsLEmSJEmSZHgfUGNJTvCWJEmSJEl6CdmzJEmSJEmSwX1IE7xlY0mSJEmSJMP7gBpLchhOkiRJkiTpJWTPkiRJkiRJBieH4SRJkiRJkl5GNpYkSZIkSZJeQnw4z/+VjSVJegXXYgXoN+tLvMq5Excdz+8jV3FsyxkAGnapSbshTcmTz5bgY6FM7/U7j6Nic4xVs01lOo5sTl5XRx7fj2V6j4VcOhoKQNla3vSb9SVOrg5cPX2DaT0W8uD2o1wrV+F89nzXtjYl3PIRk5DEzE2H2H/hBh757fm+c0NcHW0BCLn9gKnr9xN277HeOO1qlOGzyiXxcnZg55mrjP1rd5btfkVd+a5tHfLbW3Mp/B5jl+8iKiY+18oF4ObmwMB+9fEqmo+42CQW/L6fI0dDyZfPllV/9SYpKSUj7ao1J/hrxTG9cUp6u9C3tz9ubg5E3Yvjl9m7uRR8J2O7ra05/frUpZKfJ4oCJ0/dYMqPW3OtXK6eeekzoSVepVyIe/SURT9u49juSwBU/7QMHQfVxzG/LdFRcfw5bQfH9wTrjVP90zI071odD+8ChJ6PYPjnv74os29hvl/cPUt6c0tTJvVZytGdF3OtbO7O9gzrWIcShfIRE5/E7HWHOHD2OoUL2DO+e0MKOtkBcOXWfaat3M/Nu/rro7ODDcM7+VPK05nUtHT2Bl5jxqr9pGu0J26VEPRoXoXPqvtgYWbCnfux9Jq6joSk5Fwpl6tXfvr80A6v0m7EPYpn0cRNHPvnPADVPytPxyFNcCxgR/TdGP6csoXjO8/rjfPbwdHkLWifsWxiakzgvhDGd9YeO5VK0HFoE+p3qIK5lRlRNx8yvNUsnj5JypVyfWxkY0l6J0KIWcBGRVEOCSH+AGYoihLyHvIxDdihKMo+Q8ZVqVWMXzeI7X/s47vGP1KqegkmbviGPpVHY5/fjq4T2jKs4RQir9+j97ROfLe0L0PrT9Ybq3wdH7pNaseUTnO5ejoMe2e7jG02DlaMXT2QmX0WcWL7Ob4c14qRy/sxqOYEQxYng1olmNXzM9YduUCvuRup4FWQ2T2b0e6nv3gY95Shf2zj7uMnqISgXY0y/Nj1U9r+8JfeWA/jnvLHzpNUKVEIM+OsXyl2lmZM/7opE1fu4eDFMPo2+YSfvmpM5+mrc6VcoD1pfD+hFVu3nWPoiNWUKe3GpImt6Nl7CalpGgCaNp+JRvPyq15razMmTWzFrNm7OHwklDq1vZn8fWu+6PwrCQnaE+uEcS25ejWKDl/8yrPkVAq7O+VeudQqxi7syo6VxxnVeQGlKnky/vev6Nd0Bs8SUxg6owMTe/5J4MEr+NYuwci5nehSYwpxjxKyxYqPS+TvJYdx9cxLmSpFsmwLPn2TlqVGZSxr99OVwINXc61sapVgWv9mbDxwnn7TNlC+WEFmDGxOx/HLeRjzlBHzthH1SFsf2/iXZXLPxnw+brneWMM7+RPzJJFGgxdgbWHK3CGtaV2nLGsCzgHQo3kVShcpwFeTV3HvUTyeLg6kpKblSrlUahVj/+zJjmWHGdV2NqWqeDF+eW/61f2BZ4nJDJ3bhYldfiNwXwi+dX0YubA7XfxGExed/Zj1qjkpy/LikxM5vPVsxnLHoU0o4evBN02m8eDOYwoVdyYlOTVXyvW6PqQ5S/JuOOmtCSHsgcqKohwCUBSl+/toKOnMAUYYOqhrsQI4OOdh4+ydaDQK5w+GEHw8FP/Pq1K5cTkObTzFrcuRpKWms+LHvyldvTjOhfPqjdVpTEtWTPmbK6duoCgKj+7G8OhuDABVm/ly63IkhzeeIjU5leWTNuFRyg3Xos6GLhIA7vnscbK15K99Z9EoCqdDIwgKu0sT3xLEJyVz9/ETAIQAjaLg6mSXY6x956+z/8IN4p4+y7bNv6wXYVGP2HPuGilp6fy64zhFXZxwz5cnV8oF2l4lRwcr1m84jUajcC7oFsEhkdSr6/NGcUp6uxAT85SDh66i0SgE7A0mNi6R6tWKAVCxgjt5nWxY8Pt+niYmk56u4fqN+7lRJEDbq+SQ14ZNiw5p6+Lx64ScuUmd5hVwzG/H0yfPCDx4BYDT+y+TnJiCs5uD3lhBR69xeMd5Ht2Pe+V+67aqyJGdF0nO1BtnaO7O9jjZWbJyt7Y+Bl6J4Py1SD79xJuEpGSiHmWqjxoNrnlzro8FHG3YczqUlLR0Hj1J5PjFcDwKaD8HawtTOtQrz+Q/93DvkbZ380bkI1LS0nOlXK5e+XDIb8umBfu0x+xoKCGnwqjT2g9H5zw8fZJE4D7tV+bpgEskJyXjXOjVDe5SVbywc7TiyHZtA9DK1pzmPWoz+9sVPLij7XG7dSWK1OTcaQS+NmHAn/dMNpY+UkKIv4UQZ4QQwUKIHkKI3kKIqZm2dxFCzNG9HiOEuCKE2COEWCWEeP7PrFoDOzO954AQoqLudYIQ4ifdPgKEEH667WFCiM90adyFEIeFEGd1P5/o1quEEPN1edsmhNghhGit21ZBCHFQF3eXEMIZQFGUW4CDECK/YT8nvZ8d7iULIkTW7UK34F6yYLb3qFQCr/KFsXWyZsmlafx1/Rf6zuyMiZkxAIW8XQi7cDsjfXJiMlFhDyjk7WLI4mTKq/51RQo4ZiwfntqbkzMHMLx1bRbtOvVW+/HM78DVyIcZy89S0rgTHYuns/6TuCGIHL5ZM/f6rF7RhzUr+zBsyKfY2Jjrj/PvA4x28XmcEiVciLjziOFDG7Npw0Dmz/2S0qVdDVQKffnRv9K9aH6uXYwg4sZ9Kvl7o1IJqtQrSWpKGjevRL3TPk3NjKnWsBQBGwLfKc6rZS+cEAIPlxf1cd/cPhxZMJAhn9dhyfac6+PqgHPUr1QMUxMjnOys+KSUO8cvhQNQpKAj6RoN/hWLsnNmT9ZP6UqbOmUMXpqMMuiriwLcixfg2vlbRFy7R6X6pbTHrGEZUpPTuHk58pVx67atxJFt50hO1DZg3Uu4kJ6moVrTcqy48AO/Hx1Hk641DF2cj5psLH28vlIUpQJQERgAbARaZtreDlija/y0AsrptlfMlKYqcCaH+JbAAd0+4oFJQD2gBTBRl+YBUE9RlPK6/c3WrW8JuAOlgO5AFQAhhDHaHqTWuriLgcxjXmd1ecpG1yAMFEIELly4MIcsZxdxNYrYh09o801j1EZqyvv7UKp6cUzNTTi18zw1WlWisI8rJmbGfPFdczQaDaYWJtni2OWzxdjEiOrNffm27vf0qTQKzzKF+HxEMwDMLc14+iQxy3uePknE3Er/ifxdhd+L4XF8El3qVsRIpaJKcTcqFCmImcmLYbTqw36l2tB5/LhuH1fvPHxJtJyZmxqT8K8eiYSkFCxNs39GhnI74hExsYm0a1sJtVpFxQrulCnthqmZEXFxifTq+yftv5hPrz5/Ym5uwqjvmuqNExx8B0cHK+rULoFaraJ+PR8KOOfB1FT7GTk5WuNb0YOg87dp3XYO69afYtKEVjk2vt5VxI0HxD5KoHWPWqiNVJSvVpRSfh6Ymptoe742nWH4rC/YcuVHhs36gtmjN7xzb1DVhqV4EpPIxZM3DFQK/cLvPSYmPpFODSuiVquoVLIQ5YtlrY91+s2ndt+5/LxiH1dvP8gx1tmrd/Ao4MCBef3YMaMHl8Pvc+DsdQDy5rHG2sIMt/x5aDZsESPmb+XrZlXw83bLlXJFXL9HbHQCrfvW0x6zmiUoVcXrxTFbe5Lhv3Zly+3ZDJvfldnDVmU0gHJiam5MtSbl2LPmRMY6R2c7rGwtcPHIR1e/sUzu/gcdhzSmXI3iuVKu1yZ7lqQPwAAhxHngBOAKFAbChBCVhRAOQDHgKFAN2KwoSpKiKPFA5tmrzkBOZ9EUXvQ6XQQOKoqSqnvtrltvDPwuhLgIrAO8deurAesURdEoinIP2K9bXwzwAfYIIYKA0UDmbpwHQAF9mVEUZaGiKBUVRanYo0ePl30uWaSnpTOh7Sz8GpZldfgcWg1sxKENJ4mOjCHoQAjLJ21kzKoBLL86i/u3okmKf0Z0ZPaJpym6k9bmX/fw+F4cTx4lsHH2P/g20F7VJj19hoV11pOshbU5SQm5MzkzTaNh8MItVCtZmIAfetDJvwK7z4ZyPybrXIlnKWmsO3KB7zs3IM9bNNySklOxMsvaMLI0N+Fpcu4N6aSnaxg7bgOVK3myfm1/2rT248DByzx8GM+zZ6mEht5Do1GIiU1k9tw9+Fb0wEJPA/dJ/DNGj9tA61Z+bFjbHz9fD86eC+dhtHb4JjkljaioWP7ZeYH0dA37D1zmwcMn+OjpWTRIudI0TOz1J361S7Dy5Dhadq/J4R3nib4XS9mqXnQb3pjhn/9K02IjGN7hVwb90AaPEnr/HF5b3VYV2bspt3uVtMdsyJwtVCvjwc6ZPfmiQQUCTofyQE993HDgPOO7NySPdfb6KATM+aYl+89eo0bvOdTtPx9rS1P6t6kOQLJubtIfW46TnJrG9TvR7D55laqlC+dOudI0TOyyAL+6Pqy88CMte/lzeMtZoqNiKVu9GN3GNGd4y1k0dR3A8JYzGTT9CzxeUX8++bQc8bGJXDx2LWNdyjPt3KSVM3aQ8iyV8MuRHPz7DL7+JXOlXK9LEYb7ed/kBO+PkBCiFlAXqKIoSqIQ4gBgBqwB2gJXgE2KoihC6O38fy5J9z59UhVFeT6DVgMkAyiKohFCPK93g4H7QBm0Dffnk15y2qcAghVFqZLDdjNdngzq5qWILJO2Z+4fy56/DgOwdUEAWxcEAOBSJD+fj2hGeKa7pZ5LiE3k4Z1HoOifVHwrJJJ6HatlLJtamOLskZdbIa/ukn9b1+5G0/2XdRnLS79px5aT2aecqYTAzNiYvHZWxLxh4+3GvUc09fPOWDYzMaKgoy03onLvLj+AsJsPGfztyozlObM6smvPpewJdccjp6G7Cxci6NNvKaAdSl2xrBdr12uHgMLCHlClchG978st4VeiGNbhxZ1r09f1I2BjIJ4lCnDpVBjXLmrrXuiFCK4E3aZcVS/CLt99q305OttSupInc0ZtMEjeX+X6nWh6/rQ2Y3nRyPZsO5r9bj6VEJiZGOOUx4qY+Kz10cbSjPwONqzdG0RqWjpxaelsPRJM7xZVmbPuMNcitNd2OfwZ5orwy5EMazEzY3n61iEErD2Bp48rl05c59p57fB7aNAtrpwNp1yN4oTp+Q55rm7bSuxddzLLupu67wnlvyzY/xghxEDga7Tnid8VRZmlm1e7Bu0FejjQVlGUmLeJL3uWPk62QIyuoVQcqKxbvxFoDnRAW8EAjgBNhRBmQggroHGmOJeBdzlb2AJRiqJogE6AOtM+W+nmLuUDaunWXwWchBAZw3JCiMyXTkUBPWfEd1PYxxVjU2NMzU1oPehT7PPbsWf5YYxNjSnkrb0KdHJ1YOC8r/h73i4SYhP1xtm97BCf9amPrZMNVnYWtOjXkJP/BAFwbEsg7t4Fqda8IsamxnQc2ZyblyKICH23OScv41XAERMjNWbGRnT2r4CjjSVbToZQubgbxQo6oRICSzMTvm1ZkydJz7iZw6MD1CqBiZEalUqgUqkwMVKjVmkbH/vOX8ezgAP+ZYtgYqSmZ6PKXIuMJvz+W31fvTaPwk4YG6sxNTWibWs/7O2t2LX7IsWLO+Na0B4hwMbajH5963Eu6BZPE/XfNl7EMx9qtQoLCxN696zDw+h4AgNvAnDkaCjWVmbUr+eDSiWoUb0Yjg7WWR4tYGjuxZ0xNjHC1MyYVt1rYp/XhoANpwm9EEFJX4+MniRP7wL4+BbOcc6SSiUwNjFCbaRGZLzOejrwb1GBkLO3iMrFx1dkVqSgtj6amhjRsUEFHGwt2XY0BD9vN4q6vaiPg9rXIj7xGeF6Hh0Ql/CMyIextK5dBrVKYGVuSuOqJTMaSZEP4zh79Q5fNamEsZEad2d76vkV48j5sFwrl3sJF4xNjTA1N6ZV77rY57MhYM0JQoNuUbJSkYyeJE+fgvhU8sxo+Ojj6GxHmapFCcg0BAcQdSuai8ev0X5gQ4xNjHD1yk+NZhU4pe8C4b/0Hw3DCSF80DaU/NBefDcRQnihvelnr6IoXsBe3uEmINmz9HHaCfQSQlxA2wA5AaAoSowQIgTwVhTllG7daSHEFuA8cAsIBJ7fQrMd6An88Zb5mA9sEEK0QTvU9lS3fgPgj7bhEwqcBOIURUnRTfSeLYSwRVt/ZwHBuvlMRXT5Myj/z6vSsEstjIzVXDp6le8a/0hqShqWthaM+LM3BTzykRifxO7lh1k6YX3G+9oPbYpP1WKMbj4NgBU/bMbGwZrFF6aS8iyVQxtPseqnLQDERcfzfYfZ9J3ZmWGLe3Pl9A1+6DTP0EXJoolfCVp84oORWsXZ65H0mruB1LR0rM1NGd66NvnyWPEsJY2Q2/fpO29Txh1D3er7Us7ThX6//g3A1w0r0evTKlni/rbjOL/tOEFMQhJD/tjGiDa1mdy5EZduRTFiyY5cLRdAvbo+fNqoDEZGKi5cjGDoiNWkpqZTwNmObl1rYmdnQWJiCmfOhjNpypaM9w0a2ACAWb/sAqB9u0r4+XkAcPr0TcaO35iRNj7+GaPHrmfggPoM7F+f2xGPGDNuA09y8bk2/s0r0KCdH0ZGai6dvsnIzgtITUnn4qkwVvyym1HzOmPnaEXc46esmb+Ps0e0z/Cq3awc7Xr706uhti7WaVGBb39unxF3y5Uf2bP+NDOGrXmxrxYVWf/7gVwry799WsWbZjW09THoWiT9puvqo4UpQ7+oQ948ViSnphFy8z4DZmzMqI9dGvtRrqgLA2duAmDY3K1806EWnRv5otFo76ybsfpFOUYv2MGYrvUJmN2bmPhEftt0lNOXI3KtXP5t/GjweVWMjFVcOnmDkW3nkJqSxsXj11gxfTuj/uiOnZMNcY8SWDN7F2cPXgagdktf2g1skOWRAXVaV+Jy4E2ibkVn289PvRczaEZH1lyeSmx0Ast+2krQkdx73MNr+e+Gz0oAJxRFSQQQQhxEOz+2GS8utpcCB4Dhb7MD8TF320mvRwhhpShKghDCAjgE9FAU5axu2xGgiaIoOT+J8d326QCcAqrq5i/llL4FUF5RlDGvEV5pYN7JUFn9n7ArSfvMmbL9Zr4i5f8/QXMHA1Cn3o/vOSeGtW+P9iK3kceQV6T8/+efMG2jzPerGe85J4Z1evE3ADTK3+c958Tw/rk3HwzcvPH4ZYbBGhg3B33bE8g84XShoigLAYQQJYDNaG8GSkLbixQIdFIUJeM5E0KIGEVR3uq5JbJnSXodC4UQ3mjnBC193lDS+RZwAwzaWAK2CSHsABPg+5c1lHSMgOkGzoMkSZL0tgz47050DSO9tzIrinJZCPETsAdIQDsSYtCHTMnGkvRKiqJ8/pJtJ3Pa9o77rPWG6de9OpUkSZL0X/kv72JTFGURsAhACDEFuAPcF0I4K4oSpXsmX87PnHgFOcFbkiRJkqT/14QQeXW/3dA+q28VsAX4UpfkS7RDdW9F9ixJkiRJkvT/3QbdHNdUoK/uhqUfgbVCiG7AbaDN2waXjSVJkiRJkgzvvx2Gq65n3SO0d1a/M9lYkiRJkiTJ4P4XnrxtKHLOkiRJkiRJ0kvI5yxJHyNZ6SVJkrIzaF+Q+/xpBvuuDe8z5L32U8lhOEmSJEmSDO8DGoaTjSXpo9TAsvP7zoJB7Xq6DACfYR/eE7wvTdU+wbtm46nvOSeGdXD7MAAalh37nnNieDuDJgIf8BO8Xfq/55wY3j+Rc953Fv6nycaSJEmSJEmGJ3uWJEmSJEmSXuIDaizJu+EkSZIkSZJeQvYsSZIkSZJkeAb8R7rvm2wsSZIkSZJkeHIYTpIkSZIk6eMge5YkSZIkSTK4D+nfncjGkiRJkiRJhifnLEnSx8O1WAH6zeyMV1l34qLj+X3Uao5tPQNAwy9r0u7bJuTJZ0vw8VCm9/qDx/di9caZ+s93lPDzJD1NA0D03Ri6lxsOgF+DMrQb0hR3bxdSklM5uSOIBSNWkpTwLNfK5ZHXnlHNa+Ptko+Yp0lM336IvcE3KO2Wn/71P8G7YD7SNRpOh93hh80HiI5/mi2GsVrNmBZ1qOzlhq2FGbejY/ll51GOXA3PSGNmbMSQxjVoUKYoRioVV6Me0uW3dblWLoBCrvYM6l2PokXyExuXyG+LD3D4+DXy57VhzZJeJCalZKRdtf4ky1Yf1xtn9eKe2NtZkK7RfukHX45kyJjseZ85pR3lyxSiTtOfM9LmBtfCjvT9rgleJQoQF/OUP2bu5tj+y9T+tDQDRjfNSCeEwMzchH4dfuX65agsMYyN1fQb2YSylTyxtjXnbsRj/pwTQODRawBvFMuQ3J3tGdaxDiUK5SMmPonZ6w5x4Ox1ChewZ3z3hhR0sgPgyq37TFu5n5t3H+uN4+xgw/BO/pTydCY1LZ29gdeYsWp/xnFRCUGP5lX4rLoPFmYm3LkfS6+p60hISs6VcrkWyUefKW3xKuVK3KMEFk36m2M7LwBQvWk5On77KY7OdkTfjeHPH7dxfNeFHGOVrV6MbqOaUdAzL/Gxifw+cROHt57DxcOJbqOb412xMCqVitDzt/l17HoibzzIlTK9NtmzJElaQojmQGlFUSYKIXoBiYqiLHsP+WgC+CqKMs6QcVVqFePXDGL7on181+QnSlUvzsR139DnkzHY57el64Q2DGv0A5HX79H7545892cfhjackmO8ed8sZ+fSg9nWW9pasGrqZi4euYqxqREjlvTm6yctGtEAACAASURBVMntmT3wT0MWJ4NaJZj95WesPXGBr3/fSEWPgszt2ow2s/7CxtyMdScvcnT5NtI1GkY1r82ktvXptWhTtjhGKsG9uHi6/LaOqNgn1ChemOkdG9NixnLuxjwBYHyruqhVKj6btpS4xGcUL+CUK2XKXLbJY1qyZUcQ345eSxkfV34Y15Lu/ZeSlpYOQJO2v7x2o+a7iRs5E3Qrx+11a3mjVuf+9E+VWsW4WZ+zY10gI3stpVQFdybM/oK+7X5l/44L7N/x4iRb77OydPi6lt7GjUqt4uH9JwzrvpgHUXH4VvNi5NS29G4zj/t3Y98olqGoVYJp/Zux8cB5+k3bQPliBZkxsDkdxy/nYcxTRszbRtSjJ6iEoI1/WSb3bMzn45brjTW8kz8xTxJpNHgB1hamzB3SmtZ1yrIm4BwAPZpXoXSRAnw1eRX3HsXj6eJASmparpRLpVYxdkkPdiw/wqj2cylVxYvxf/agX4OfeJaYwtDZnZn41e8E7g/B178kIxd8RZdK44h7lJAtlptXfobP/ZLpg/7i7KErWNqYYWVjAYCljQUndl9kxjcrSEp4xueDGzFucQ961JyUK+X6GMkJ3tK7GgbMB1AU5bf30VDS2Q58JoSwMGRQ12LOODjbsXHOTjQahfMHLxN8IhT/DlWp/Gk5Dm08xa3LkaSlprPix82Url4c58J533g/+9ceJ3DPRZKTUkiITeSfJQfxruJlyKJkUdjJnrw2liw7fBaNonDqRgRB4XdpWr4ER66Gs/viNZ4mp/AsNY2Vx85Tzr2A3jhJqWnM33OCuzFPUBQ4ePkmkY/j8HbRfgbuTnmo5e3B+A0BxDxNQqMohETm7tWum6sDDvZWrP07EI1G4dyF21wKiaR+nZIG35elhQldPv+E3xYfMHjsf3N1d8TByZqNfx3T1sXTNwkOuo1/kzLZ0tZtWo6924L0xkl+lspfv+3n/t1YFEXh1OFQ7kfGUKSE/mP8sliG4u5sj5OdJSt3a+tj4JUIzl+L5NNPvElISibqkbbhLQRoNBpc89rlGKuAow17ToeSkpbOoyeJHL8YjkcBBwCsLUzpUK88k//cw71H8QDciHxEiq4RbWiuRfLhkM+WTQv3a4/Z0VBCTodRp5Ufjs52PH2SROD+EABO7w0mOTEZZ3dHvbHaD2zAjr+OErg/BE26hviYRKJuRQMQGnSL3atPkBCbSHqahk2/78e1SD6s8xj06/CNCWG4n/dNNpY+EkIIdyHEFSHEH0KIS0KIFUKIukKIo0KIa0IIP93PMSHEOd3vYrr3fiOEWKx7XUr3fgshRFEgWVGUaN228UKIIbrXB4QQM4UQh4QQl4UQvkKIjbp9TcqUr7+FEGeEEMFCiB6Z1ncTQoTq4vwuhJirW+8khNgghDit+6kKoCiKAhwAmhj4c9O7zt3bBSFElu3PX7t7F8wxXtcJbVh7ax4zAkZTunrxHNOVqlaMWyGR75Dzl9P35SMAr/zZv6grFHbh+r1HrxXXwcqCQo55uHFfm760a37uxsTTt34VDo/rxcbBnajrU+Rdsv5K+r5XhRB4FHpRtjVLerFuaW9GDGqErY35S+ONHtKEzSv7Me37NngWztor9vWXNdi8I4jHMdmHKA1N7zETgkJFsjbO8zrb4lO+EAFbX6+BY2dviUshB27pGbJ501hvT//fmYfLi2O2b24fjiwYyJDP67Bk+6kcI60OOEf9SsUwNTHCyc6KT0q5c/xSOABFCjqSrtHgX7EoO2f2ZP2UrrSpk72xaSh6T/JC4F7MmWvnbxNx7R6V6vmgUgmqNChNakoaN0Pu6o1VvLw7APMDvmPF2UkMnd0ZKzv9jaFSlYrw+H4c8TGJBirJWxKK4X7eM9lY+rgUAX4BSgPFgc+BasAQYCRwBaihKEo5YCzwfDxpFlBECNECWAL0VBQlEagKnH3J/lIURakB/AZsBvoCPkAXIYSDLs1XiqJUACoCA4QQDkKIAsAYoDJQT5fX534BZiqK4gu0Av7ItC0QqK4vI0KIHkKIQCFE4MKFC1/2GWURcTWK2IdPaDP4U9RGasr7+1CqWnFMLUw5tes8NVr6UdjHFRMzY774rhkajQZTCxO9sRaNWUMXnyF84TWQHUsOMGHdYL29UOXrlKTu59VYNmnja+fzTd18EMOjhCS61qyIkUrFJ15uVPQoiJlx1pH5ovkd6V23MtO3H35lTCOVih87NGLzmRBuPowBIJ+tFUWdHUl4lkztSQuZsnkfU9o1wCOvfa6UC+DWncfExiXSoZUfarWKiuXcKePjiqmpMXFPkugxcBntuv5Gj4FLMTc3YfSQnNvXk37eRruvFtC262+cu3Cbn79vg5WlKQDFiuTHx9uFjVvO5FpZMosIjyb28VNad6mG2khF+SqelKpQCDOzrPWtbpOyBJ+7xf27+ufOZaY2UjF8SmsCtgZxJzw62/Y3ifUuwu89JiY+kU4NK6JWq6hUshDlixXEzORFfazTbz61+87l5xX7uHo7597Js1fv4FHAgQPz+rFjRg8uh9/nwNnrAOTNY421hRlu+fPQbNgiRszfytfNquDn7ZYr5Yq4fp/Y6Hha9/bXHrMaxSlVuQim5iZoNAoB608xfF4XttycybB5XzJ7+BqSM82ny8zR2Q7/Vr5M7vEH3apNxMTMmD7ft9abrs/kNiyckH3YXHp7srH0cbmpKMpFRVE0QDCwV9cjcxFwB2yBdUKIS8BMoCSALn0XYDlwUFGUo7p4zsDDl+xvi+73RSBYUZQoRVGSgTDAVbdtgBDiPHBCt84L8NPt57GiKKlA5hm1dYG5QoggXXwbIYS1btsDQO9YgqIoCxVFqagoSsUePXroS6JXelo6E9r/gl+DsqwOm0OrAY04tPEk0ZGPCToQwvLJGxmzoj/Lr8zk/u1okuKfER2pf+Lp1cAwkhKekZqSRsCKI4ScuIZvg6xXtcV9PRm+uDeTOs4h8vq9187nm0rTaBi4dAs1ShTmwJgefFmjArsuhHI/7sVcCVcHW37t1oIftxzgbPjLe7mEgB/aNyQ1PZ0pf+/PWP8sLY3UtHQW7D1JWrqGwLBITt24wydehXKtbOnpGkZ9v4nKvp5s+qsv7Vr4sv/IFR4+iifpWSpXr98jXaMQE5vIL78F4FehMBbm+hu4ly5HkpKSRnJyGivWnSQhIZnSJQsiBAzuU485C/bl6oTuLOVK0zBx8Cr8qhVlVcAwWnWqyuHdwUTfj8uSzr9pWfa8Rk+QEIKhk1qRmpbOvB+3603zurHeVXq6hiFztlCtjAc7Z/bkiwYVCDgdyoOYrHN3nqWkseHAecZ3b0ge6+w9gkLAnG9asv/sNWr0nkPd/vOxtjSlfxvtNVSybm7SH1uOk5yaxvU70ew+eZWqpQvnTrnSNEzs9jt+/iVZGTSFlj3rcHjrOaKjYrWTtUc3Z3jrX2jqPpjhrX5h0M8d8CjpojdWyrNUdq85SWTYQ54lprBmzm4q/mto2dbeiskr+7B92WEObv5vGvEvJQz4857JCd4fl8y3e2gyLWvQ1oXvgf2KorQQQrijHdZ6zgtIIGtjJAltA+tV+8u8r4z9CSFqoW38VFEUJVEIcQAw4+V/Gipd+iQ928x0eTKom5ciskzanrl3DHtWHAFg68K9bF24FwCXIvn5fFgzwkPuvFZcRVGydNN7linEhHWDmdH7D4IOhBiuADkIvRdN10x3pf3Vpx2bz2j362xnzR9ft2LB3pNsPXv5lbEmtq6Pg7UFvRdtIk2jebGPqOy9Ff+FsPCHDByxKmN53rQv2BlwKVs67bXCG86JEAJLC1OKeeVn3AjtXWNqlfa6c92y3oz/YQsXgl+vDrypm9fuM6z74ozlGUu7E7DlRWPGu6wbDk7WHNkT/MpYg8c3I4+DFWP6Lc+4QzOzN4llCNfvRNPzp7UZy4tGtmfb0ez7VgmBmYkxTnmsiInP+uduY2lGfgcb1u4NIjUtnbi0dLYeCaZ3i6rMWXeYaxHaazvlPxzVCb98l2GtZ2csT988mIB1p/D0duHSietcuxABQOj521w5d4ty1YoRFpz94uTm5bsvzbiVrTmTV/XhxO5LrJ692/AFeRv/A40cQ5E9S1JmtsDzv9Iuz1cKIWzRDn/VAByEEM/7fi+jHdp7l/3F6BpKxdEOuwGcAmoKIfIIIYzQDrc9txvolylvZTNtKwpkPyO+o8I+rhibGmNqbkLrgY2wz2/Hnr8OY2xqTCFv7VWgU0EHBs7pyt/zd5EQm32egKWtBRXqlsLY1BiVWkXtdlUoVbU4ZwIuAlDI24XJfw9h/rfLOflP7l/Jg3aIzcRIjZmxEV1qVMDRxpK/A0PIa2PJ4p6tWX38PGtP5Hwb83NjW/rjkdeevks2k/yvibJnwiKJio2ne20/1CpBuUIF8PUsyNHQ8FwqlZaHuxMmxmpMTY1o19IXhzyW7Ay4RIlizri62CME2FibMaBnXc5duM3TxOxDH3mdrPEp4YKRkQoTYzXtW/pha2POpZA7JDxNplXn+XTvv5Tu/ZcyfNx6AHoMXEbIVf1zTgyhsFc+jE2MMDUzplXnqtg7WrNny7mM7XWbluVIQAhJesqTWf9RTXEt7MS4AStISdZ/J9jrxjKUIgW19dHUxIiODSrgYGvJtqMh+Hm7UdTNCZUQWJqZMKh9LeITnxGu59EBcQnPiHwYS+vaZVCrBFbmpjSuWjKjkRT5MI6zV+/wVZNKGBupcXe2p55fMY6cD8u1crmXKICxqe6Y9ayDfV5bAtaeJPT8bUpW8szoSfIsWRCfSp7aRpEee9acoF67yuR3c8DUzJg2fetyaq/2687CyoxJK/oSfPomS37Yovf90ruRPUtSZlOBpUKIb4B9mdbPBOYrihIqhOgG7BdCHAIOAdOFEEJR3upabSfQSwhxAbiKdigORVEihRBTgJPAXSAEeD7WMACYp3uPkS4PvXTbagPfvUU+Xsq/Q1UaflkTI2M1l45d5bumP5GakoalrQUjlvSmQOF8JCYksXv5YZZO3JDxvvZDmuJTtSijW0zHyFjNl2Nb4VrUGU26hojQKCa0n8Wda9qhttYDGmHraM3g+d0YPL8bAA9uR9PDd6Shi5OhaYUStPT1wVit4szNSL7+fQOp6em08iuFq4MdvetWpnfdyhnp/cbMA+Dr2r6UL+xC78V/42xnTdvKpUlOTePgmBfDmxM27mX7uSukaTT0X7qFCa3r0q22L1ExTxi5emfGnKbcUr9OSZo0KI1areJi8B2+Hb2W1LR0CuS34+vO1bGzsyAxMYXAc+FMnLo1433f9K0PwIx5u7EwN+GbvvUo4GxHSko618MeMGzsep7Ea599lXlSt4mxGoCYmKe5Oizn36QMDVpUwMhIxaWzt/mu11JSU7UNVGMTI2rUL8mkb9dke1+7bjXwKVeIMf2Wk9fZlsZtfElJTmXV3qEZaWZP2prxyICXxcotn1bxplkNH4zUKoKuRdJv+gZS09KxtjBl6Bd1yJvHiuTUNEJu3mfAjI0Zd7B1aexHuaIuDJypnaMzbO5WvulQi86NfNFotHfWzVh9IGM/oxfsYEzX+gTM7k1MfCK/bTrK6csRuVYu/1a+NOjwifb74+QNRnaYS2pKGhdPXGfF9H8YtaAbdk7WxD1KYM2c3Zw9dAWA2i0q0q5/fXrV0fZq715zgrwF7Zm17VsAAg9c5rcx2kb6J41KU6xcIQoVy0+9tpUy9t2z1mQe3s3dv7WXe/8Tsw1FvN05TpK0hBC/AFsVRQkwcFwrRVESdD1Lm4DFiqLkOGNRCJEPWKkoiv9rhFcaWHY2VFb/J+x6qn1ig8+wme85J4Z3aepgAGo2nvqec2JYB7cPA6Bh2bHvOSeGtzNoIgC+X814zzkxrNOLvwGgkUv/95wTw/sncg4YeODMffmPBmtghHca8V4H9eQwnPSupgC58TCP8bpJ3JeAm8Dfr0jvBnybC/mQJEmSPnJyGE56J4qi3OfFXW+GjDvkDdOfNnQeJEmSpLcn/geej2QosrEkSZIkSZLhfUB3w8nGkiRJkiRJBvch9SzJOUuSJEmSJEkvIXuWJEmSJEkyPDkMJ0mSJEmSlLM3ejL+/zj5nCXpYyQrvSRJUnYGbd54rp5isO/aG+1Hvteml+xZkiRJkiTJ8D6gCd6ysSR9lOqp2rzvLBjUHo32H+IWnfThPcE7dLT2Cd41mv38nnNiWIc2a//VyIdWFyFTfZzyYdXH0JHaulhP3e4958Tw9qQb/l/byLvhJEmSJEmSPhKyZ0mSJEmSJIP7kCZ4y8aSJEmSJEkGJ4fhJEmSJEmSPhKyZ0mSJEmSJMOTw3CSJEmSJEk5k8NwkiRJkiRJHwnZsyRJ/9Ksb0Pqf1kL91JuHFh1lJ+/mpexrVwdH/rN7U5eN0eunLzGz13n8eB2NADGJkYM+PVrqreqTHJiCmt/3syGmdty3E/LQY1pN6w5puYmHN54gtm9fyc1JQ2AfIWcGLK4D8UrefHgdjRz+y/i3N6LBi2np4M9YxvVxid/Ph4nJjF17yH2XL2BsUrF9Baf4uOcl4J2tnRcvo5Tt+7kGMfWzJQpTepT1aMQMUlJTN93hG3BVwHwK1SQZR1bk5SampF+4s79bLoQYtCy/FuhgvYM7lmXop75iX2SyK9/HuTwiWvkz2vD2t97kpiUkpF25cZTLFt7PFsMO1sLBnSvQ1kfV8xMjbl5O5q5i/dzOTQqW9oRAxryqX8pOvT8nch7sQYrx8dSF0FXHxtkqo/7DrEn9AYAVdxdGdegDs421py/e48RW3dx90m83jjlXJwZVa8WHg723ImLY8LOfZy5cxcAJ0tLJjbyx8c5H/msrag9bxGRcU8MXpbM3Iq70G/OVxSt4EHswyf8Pvwvjv59GoBG3erQblgz7PPbcenoFaZ3+41HUTF64+Qr5MSAed0oUdmL1OQ0Dm84wfzBS9GkawBQqQSdx7elYddamFubc/f6PYb4T+RpXGKulu9lPqBRONmzJEn/9ujuY1ZM3sCuJfuzrLdxsGbchqEsHbualg5dCT0TxujVgzO2dxrfFpciznR078PQOuNpO7QZFRuU1buPivXL0H54c4bVnUDHwn1wLpyPzhNePOhu5MpBXA8Kp5XjVywZvYqx677F1tHGYGVUC8H8tp9x4NpNfKf/ypgdAfzcrBHu9nYAnImIZOjmnTyIf/rKWOMa1SE1PZ1PZi5gyN//MKGRP0UcHTK2P4hPoNzUeRk/ud1QUqsEU0a24NjpMJp0nMO0ebsZPfhTChbIk5Gm8eezadj+Fxq2/0VvQwnA3MyYK9fu8fU3y2jScQ47913ipzEtMTczzpKuVAkXXPLb5UpZPoa6CLr62PozDly/ie/MXxnzTwA/f6atj3nMzZjbsimzDh7Dd8avXIq6z6wWjfXGsTUz5bc2zfjjRCAVZ8znj+OB/NamGTZmpgBoUDgcFk7/jTk3HA1JpVYxYdMQTm4/S0vHr5jVayHDl/XDxcuZ0jVK0HVSe8a1+JmWjl9x7+YDRq4YkGOsAfO6EfsgjnYuvehVfhila3jzWe/6Gds7j2+Ld5WiDKg6hmZ2Xfjpy3mkPEvNMd5/QQjFYD/vm2wsvYQQYpYQosZrpp0ohKj7hvH7CSG6vmT7ICFE5zeJ+Qb7riWE+CTT8p9CiNa5sa9/7XeHEMLgZ5ZXfZZv4simUxzbfJonj7JeuVZrWYnw4AgOrT9BanIqy8evxaOMO67FCgBQr1NNVkxaT0LsU25fiWTHHwHU/7KW3n3U61yLnYv3cSvkDgmxT1kxaX1GWhcvZ4qUL8yycWtIeZbCkY0nuXnxNtVbVTJE8QDwcLQnr7UlS06eRaMonAiP4OyduzQrVYJUjYalp85xJuIuGkXz0jjmxkbUL+7FrIPHSExN5UzEXfZdC6N5qRIGy+ubcivogIO9FWu3BKLRKJy9eJtLl+/SoJb3G8WJuh/H2i2BPIp5ikajsHX3BYyN1Li62GekUasEA3v4M3PBXkMXA/g46iJkqo+ndPXxlq4++pSgfjEvrkU/YueVa6SkpzPn8HGK53XCwyFPtjjlChYg+mkiO69cQ6MobAm+wuPEJOoXKwLAo6eJrDx7gYt37xk0/zlxK+6CQwF7NszajkajELQ/mJBjV6nbsTqVm1Tg8PoT3Aq5Q1pqOismbaR0TW+cPfLpjZXfPS8H1x0nNTmVmPtxnN4VRKGSrgBY2VnScuCnzOy5MKN3MTw4gtRk2VgyFNlYyoEQwh6orCjKoddJryjKWEVRAvTEUb/kbYsBvZcSQggj4Ctg5evs/y3UAj55VaLXIbReqy4pivKpoiiGG6d4IcfP0lDcS7oSduFWxvKzxGTu3rhHoZKuWNlZ4uhiz43zL7aHnb+Fu+7L7N8KlSyYJe2N87ewz2+Htb0V7iVduRd2n6SEZy9iXbiV8cVoCPq6xwVQ1MnxjeK42+dBo1EIf/zikF6+/5AiTi96luwtLTg2qAd7+33Fd/VqYm6cu6P/eh+EJ6BwIaeMxbV/9GT9ol6MGNAQW2vz14pbpHBejIzURGYaJmnTrCIXgu8Qduvhu2b7jXxIdRFyqI9CWx+LODlw5cGLzzcpNY3bsbFZei9fxBHZjr8Q4PWG9dpgciiYu48rQoislVX30t1H/2e7ac4OarWriqm5CQ4F8uDbsByBu4IAKFzKjfS0dGq0qsSayAUsuTwzS6+T9O4+uMaSEOJvIcQZIUSwEKKHbl1vIcTUTGm6CCHm6F6PEUJcEULsEUKsEkIM0SVrDezUpfETQmzUvW4mhEgSQpgIIcyEEGG69Rk9M0KIcCHEWCHEEaCNEMJTCLFTl6/DQojiAIqiJALhQgg/PUWpA5xVFCVNCFFCCHEqU/7dhRAXdK9/FEKECCEuCCGm6fk87HWfyQUhxAkhRGkhhDvQCxgshAgSQlTXJa8hhDgmhAjL3MskxP+xd97hVRRdHH5PekLoNYRAQu9dihSRjooioYiAgiAiqCC9SVGwIk1ABVF67/ghvffeQi8JoRNCQkISCMl8f+wm3ISbULwRvcz7PPfJ7szsmfnNnew9e2Z2V3qLyF7TxjCLNpwQkYnAAcDHonwjEZlvsV9LRFZY9E02c7uNiOwx2/CriDiKSAsRGWXmd7Po3wJmf1rV/Ji+tAlunm6PzP9HhUfhkd4dd083gCT5d8OjcE/vZtWWezJbCdsJtpLXczc8Cg/PJ/tRfxLO37pN6N1oOlatiJODA9Xy5+WlfHlwe0pHJp2LCxH37iVJi7x3j3SuxlTV+ZBQ3po8k2pjJvH+zIWU9MpB/3qv2EyHNYIuhRIWHkWrtyvh6OjAS2V9KVvCBzdXJ8LvRPNhz+m06PgrH/aYjoe7C1/0tD6lY4mHuwuDur/G1Lk7uBtlrHfKkS09bzYow5TZ29JUjzXsaSyCxXisYo5Hv7y8lNcYjx7OzkTG3E9SPiLmPulcXB6xc/DyFXJ4puP14kVwcnDg7VLFyZs5U5o76CkRfPIKYTfCadHrTRydHKlQrzSlaxbHzcOVPX8d5JXmVfArlRcXN2fafNGM+Ph43Dwe1QVwZPMJ8hXPw7KwqcwN/oUz+88lrn3KlicLnpnS4V3Yi7YFPuHLFqNpO6Q55euW+iflPkKCP2iLz/PG7pwl4AOlVAWgIvCZiGQFFgJNLcq0BOaJSEXAHyhn5le0KFMN2G9uHzDLANQAjgEvAZWB3Sm0I0YpVV0pNReYBHxqtqsXMNGi3D7TZnIS61dKnQBcRCS/Rfvnm9Gvt4ESSqnSwHArdoYBB838AcB0pVQg8AswWilVVim11SzrBVQH3gC+BRCR+kAhoBJQFqhgMTVZxLRXTin18NIU1gJVRCSdRXuTvKVRRIqZ6dWUUmWBOKA1sMWiP2oAt0TE22zX1sdoTqkvEZFOIrJPRPZNmjTJWpHHEhMZg0eGpD8SHhk8iIqITrzyTmeR75HBneiIGKwRncxWwnaCLY8MHsnqcScqMvqZ2m2NB/HxdFmwnFoF/djevRMfVK7AX8dPcy0i8qns3L1/H0/XpCd3TxcX7prh/5C7UZwLCUUBl8Lu8P36rTQoWshWMqwSFxfPgK+XUrVifpZO7ULLJhXZuP0UN0MiiI6J5dTZ68TFK26HRzHm1/VUKueHh7v1HygAFxcnvh3UlIDTV5i16OG/+6cdajNt3s5E5+mfxJ7GIpjjcaE5Hj8zx+OJ01y7E0lUbCzpko8xVxfu3n+038OiY/h44XI+qFSeHd0+okb+fOy4cJFrd55uXNuKuAdxDGk6ksqvlWP+lV9p1uMNNi/Yyc1Ltzi44RjThy5gyIIezLwwgeuBN4mOiOHmpdBH7IgI3/w1gO1L9tA4/Xs0zd4Bz8zp6PhtawDumzcszPxqEfdjYrlw9CKb5u2gUqNyj9j6J3EQZbPP88YenaXPROQwsAsj2lFIKXUTOC8iVUznqQiwHeMHeJlSKlopFQGssLDjBdwEUEo9AM6aP/CVgFFATYwf5q1YZx6AiHhiTHctEJFDwK+m7QRuALmtHJ9Yv8l8oIW5neB83AFigN9EpClg7baH6sAMU8cGIKuIZEyhzUuVUvFKqeNAwsR5ffNzEMNpLIrhPAEEKaV2JTdi9tcqoLE5nfg6sCxZsTpABWCv2S91gPxKqWuAp4ikx/j+ZpO0r1PTnFJfopSapJSqqJSq2KlTpxTkp05gQDAFSudL3HfzcMWrQE6CAoKJDLvLrSuh5C/jm5hfoIwvgQHBVm0FBVyiQLKyodfCiAiNJDAgGK/8ORIjBAD5S+cjKAVbz8qpGyG0mbGAyqN+ocOcJfhkysiRp1zLERh6G0cHB/JlfrgMrWjO7Jy9ectqeaWME39acz7oJp8NnEvjtuPpNXQhuXNl5MSZR7UpZZyEU2qSs5MjXw9ows1bEYycuCZJXvnSefm43SssmdqFJVO7APDz962piSISYAAAIABJREFUWzPt12vZ21gEOHUzhDYzF1B5zC90mGuOx6vXOHvzFkVzPJxCdXd2Im/mjJwNsT7G9l68jP/UOVQa/TO9l6/CL2vmpx7XtuTC0Yv0rD0M/xwd6d/oa7z8cnBqr3GX3/Kf19CuaHdaeHVi6+LdODg5EHjs0b5Nn8WTHHmzsXTCKmLvPyAiNJLVUzclOkPnj1wEHo5nje2xK2dJRGoBdYGqSqkyGD/wCf/l8zCcDX9giTJGVWpn7WiLY8H4oW4ExALrMJyQ6hiREGsk3EbkAISZEZyEj+XZ1M2s63H1zwNaiEhhQCmlzphOSSVgEdAEc9owGdY0pvQfZTmfIhZ/v7Foe0Gl1JRkGq2R0N+1gb2mM5q8XdMs7BZRSg0183YC7YFTGP1eA6gKbH+M5pT68qlwcHTA2dUZB0eHJNvbl+zBt2ReqjetjLOrM20GN+PCkSCCTxm3Ja+dsYXWA/3xzJQOnyK5adSxDmumbbJax9oZm2n4QW3yFsuDZ6Z0vDvQP7Hs5TNXOXcokLZDmuPs6ky1JpXIXzofWxelFMR8NorkyIaLoyNuTk58UKUC2dOnY/Fh4041Z0dHXBwdzW2HxO3kRMc+YO3Js3SrVRV3ZyfK58lNncIFWHr0BGA8OsArQ3oAcmXwpFft6qw3bwdPS/Lny46LsyOuLk680+QlsmZOx1/rj1GssBc+3pkRgQzp3ejWqQ4Hjl60Gh1ydHTgy75vcu/eA74es5Lkv0Otu0zhg27T6NDd+AD0G76YLbvO2EzHizIWAYpktxiPlSuQ3TMdi48cZ83psxTOnpX6RQri4uhI1+pVOHUjhPO3rN9iXyxndpwcHEjn4kLfOjW5dieSbRceBr5dHB1xcXJ8uJ3C2LYVfqXy4uzqjKu7C816vEEWr8ysmboJZ1fnxHVk2X2y8vkvH7J03F9Ehj16Wr1zK4Kr56/TuHN9HBwdSJfRg3rvvZK4bu3q+esc2XKCdwc0xdnFibxFvXmlRVV2/+9Ammp7HPa0wNvenrOUEbitlIoy1wVVschbDAwEgoC+Zto24FcR+QajL14HJpt5J4CCwCZzfwswHWPa6aYZocoFBKTWIKXUHRG5ICLNlVILxLisLq2UOmwWKYwR5UpOQv0Jds6JSBzwBUmjVh5KqZUisgs4a8XOFozpra9MZzLEbFME8CT3/642j52llIo0p8Se5BaLTcAU4EOSTcGZrAeWichopdQNc3otvTmdtwX40vwcBF4FopVS4Y/RnFJfPhWtB/nz3pAWift129Zk+rD5zBi2gGHNRvLJTx3oN+MzTu4+w4hWYxLLTR8yj89+/pCZgRO5H32fed8vS1yAmd0nG1MCRtOhxOfcDA5h3+pDzP9hGSM3DMHF3YVti3YzfcjDbhrRagy9/+jKktCp3LgYwpfNfyQ8xLbPg3mrVDGaly2Jk6MD+y9epv2sRcTGxQGw+uP3yZPJCED+8a4/AK/+ZDyTpnO1l6jo403HuUsBGPrXer5pXJ+dn3cmLDqaIX+tT7zqL5ErBz++1YgM7q6ERcew7tRZRm3821/RY2nwanHeqFcaR0cHjhy/RI/BC4h9EEfunBnp1PYNMmX0ICrqPnsPB/HlyIe3kff8uB4AP/68lpJFc1OtUkFi7sXyv9kP7x3o8+VCjhy/TJiV59eE34nmvvl8IlvwooxFMMdjGXM8Bl+m/RxjPN6OiubTxX8yuMGrjHyzEYevXOXzpSsTjxvWsA4AQ1YZdyR+WKUirxTwA2Dr+UC6LlqepJ5jfR9+l6s7twOg8Nejba4ngbptatCoQ22cnJ04uu0E/RoMJ/b+A9Jl9KD/zE/xKpCT6IgYVk/dxNTBD/u9Vb8mlKxRlIGvf2vobPYjH496n5Z93iQ+Lp7Dm47zS49pieW/bj2Wnr91ZtHNKYTdCGfakPkc3HAszXQ9Cf8GJ8dWiD2F7UTEFVgKeGNEJbIDQ5VSm8z8P4HiSqn8FscMBVphOFE3gU1KqcnmouePlFJtzHLuQBjQWCm1RkQmAbmUUm+a+VOBP5VSC0UkEKiolAox8/yAnzGm1pyBuUqpL828A0D9hLIW7coHzFBK1bRI6wX8APgppQJFxAtjessNI1IzUik1LZmdLMAfgB/GlFUnpdQRM0K1EIgHPgU6JLTfPC5SKeVpbncDOpomI4E2GGuM/lRKlUzl+xgPtANymAuwsewbEWkJ9MeIvsUCXZVSu0SkAIYTVEQpdVpE1gAnlVKfpaY5pb60gqrn0PwxRf5brI1fAEDh4Wl30n9enB5kPD+o5ls/POeW2JYty3oDYG9jESzGYxo6Ic+D0wOMsVjPseVjSv73WBtnXIPb0maZP7+wmYNx+I2vnusyb7uKLCml7mFMlaWU/4aV5JFKqaEi4oER0fjRLLtVRL4RkUxKqTClVDTgamErycIXpVQ7i23fZHkXgIbJKxaRckCAtR93pVSQiNwSkUJKqTNm2khgpEWZqxhTUimilAoF3rKSfhoobZG0NVm+p8X2WGCsFfMpOkrmcZ8AnyRL87XYnoeVqJNS6hwW/7RKqfoW21Y1p9aXGo1Go/nn+TfcxWYr7MpZekYmiUhxjEjFNKWU5SRvTyAvRkQpLciGMa2WEv0wolG2WwRhvzyuLzUajUbzD/JvuIvNVrzwzpJS6t1U8my/ijGp/bWPyT+FMZ2oeQyP60uNRqPRaJ6VF95Z0mg0Go1GY3vsaYG3dpY0Go1Go9HYHIcUn1Lz30M7SxqNRqPRaGyOPS3wtquHUmo0Go1Go9HYGh1Z0mg0Go1GY3Ps6W44u3oopUbzhOhBr9FoNI9i04mzqmv62excu7P+t891Uk9Pw2k0Go1Go9Gkgp6G07yQ2NsrJhJeL2FvusB+tdmrLrBfbfaqCx5qsyX2NA2nnSWNRqPRaDQ2x56es6Sn4TQajUaj0WhSQUeWNBqNRqPR2Bw9DafRaDQajUaTCvb0BG89DafRaDQajUaTCjqypNFoNBqNxubY0wJv7SxpNBqNRqOxOfa0ZklPw2k0yXira0Mm7PmW/0XPpvfvXZPklatdkinHx7AiciY/rB9CjrzZEvOcXZzoOeVjloZNY96Vyfh//kaq9TTt/jrzrkxm6e1p9JzyMc4uD69dcubLzg/rh7AiciZTjo+hXJ1SWtcLqM1eddmzNnvV9aKjnSWNJhm3roQya8QiVv+xMUl6hqzpGbKoN9MGz6Vp1vac3n+eQXM/T8xvO7QF3gW9aOPbhd61h9Ki91tUbFDWah0V65fhnb5N6FN3GG38uuDll5P3hrVMzB8wuztnDwXin+0D/hg0h8ELepIxWwat6wXTZq+67Fmbvep6FhxE2ezzvNHOUiqISBMRGfyEZd8UkX5Pab+UiExNJb+ciPz2NDafom5fEXnXYr+diIxPi7qS1fuliNRNA7up9uXTsG3JHnYs28udWxFJ0qs3rUxgQDBbFu4i9l4sM4bOJ38ZX3yK5AagXttXmDV8IZFhd7l48jIrf1tH/fdrWa2j3nu1WPX7BoKOXyIy7C6zhi9MLOtdyIuC5f2YPmQe92Pus23xbi4cvUgN/8pa1wumzV512bM2e9X1LGhn6cWhDzDxSQoqpZYrpb5Nni4iKa4LU0odBfKISN4UigwAfnqS+p8BX+DdxxV6UkTE8UnKKaUGK6XW2apeC7uP68u/jW8JH84fCUrcj4m6x5Vz18hXwgfPTOnI5p2Fc4cf5p8/HIRvCR+rtvKVyJOk7LnDQWTJlYn0WTzxLeHDtfPXiY6MeWjrSBD5UrD1d7FXXWC/2uxVF9ivNnvVlRraWfoXYUZITorIbyJyTERmiUhdEdkuImdEpJJZrpKI7BCRg+bfImZ6DxH53dwuZdrwEJHCwD2lVIiIOIrIeTHIJCLxIlLTPGariBS0jMyIyFQRGSUiG4HvRCSdiPwuInvN+t+ykLACeMeKrvRAaaXUYRFxEJFAEclkkX9WRHKKSHOzzYdFZIsVOyIiP5hljopIQqz2W6CGiBwSkYRYcG4RWWX22/cWNuqLyE4ROSAiC0TE00wPFJHBIrINaG5RPqOZ52Due4hIsIg4m33TzEyvICKbRWS/iKwWES8RySEi+838MiKiEhwgETln2kpJs9W+tBVunm7cDY9KkhYVHoVHenfcPd0AkuTfDY/CPb2bVVvuyWwlbCfYSl7P3fAoPDzdbaIjOfaqC+xXm73qAvvVZq+6XhT+886SSUFgLFAaKIoRMakO9MKIzgCcBGoqpcoBg4GvzfQxQEEReRv4A/hIKRUFVAMOACil4oDTQHHT7n4MR8MVyKOUOmulTYWBukqpnsBAYINS6iXgVeAHEUlnltsH1LByfEXgmFl/PLAMeBtARCoDgUqp66aWBkqpMsCbVuw0BcoCZYC6Zt1eQD9gq1KqrFJqtFm2LNASKAW0FBEfEckGDDK1lDfb28PCfoxSqrpSam5CglIqHDgMvGImNQZWK6ViE8qIiDNG1KyZUqoC8DswQil1A3ATkQxmv+zD6Ot8wA3zu0lJc0p9iYh0EpF9IrJv0qRJ1oo8lpjIGDwyJD3heGTwICoiOvEqLp1FvkcGd6IjYrBGdDJbCdsJtjwyeCSrx52oyOhnavfjsFddYL/a7FUX2K82e9WVGg4om32eN/biLF1QSh01nYoAYL1SSgFHMaabADICC0TkGDAaKAGJjkg7YAawWSm13SzvBdy0qGMrUNP8fIPhNL0E7E2hTQtMJwugPtBPRA4BmwA3IGG66AaQ28rxyeufh+HIgBE9mWdubwemisiHgLWpsOrAHKVUnOlcbTbbbY31SqlwpVQMcBzIB1TBcBK3m+1/30y3bJc1UmpvAkWAksBa0+4gII+ZtwPDWa2J4dTWxHCCtj5Gc0p9iVJqklKqolKqYqdOnVJocuoEBgRToPRD6W4erngVyElQQDCRYXe5dSWU/GV8E/MLlPElMCDYqq2ggEsUSFY29FoYEaGRBAYE45U/R+LVJkD+0vkISsHW38VedYH9arNXXWC/2uxVV2roabh/H/cstuMt9uN5+Cypr4CNSqmSGJEOy/hmISCSpD+00cnKbMX4wa4ErAQyAbWAR6a+TO5abAvgb0Zxyiql8iqlTph5bmZdyUle/06MCFh2oAmwGEAp1RnD0fABDolI1mR2JIX2WcOyH+Mw+k6AtRZtL66U6pCCTkuWA41EJAtQAdhgpV0BFnZLKaXqm3kJfZ0PI6JWBsPp2wKpak6pL58KB0cHnF2dcXB0SLK9fckefEvmpXrTyji7OtNmcDMuHAki+NQVANbO2ELrgf54ZkqHT5HcNOpYhzXTNlmtY+2MzTT8oDZ5i+XBM1M63h3on1j28pmrnDsUSNshzXF2daZak0rkL52PrYt2a10vmDZ71WXP2uxV14uOvThLT0JG4LK53S4hUUQyYkzh1QSyJqynAU5gTO8lsBt4GYg3Iy+HgI94GO1IjdXApyIiZp3lLPIKY063JSNJ/WakbAkwCjihlLpl2iqglNqtlBoMhGA4EJZswZhSczQdrZrAHiACSP8Ebd8FVBORgmZ9Ceu5UkUpFWnWMxb40yLKlsApILuIVDXtOotICYs2twHOmJG/UOA1jIhSappT6sunovUgf1ZGz6ZVv7ep27YmK6Nn03qQP+EhdxjWbCTth7diSehUilYqxIhWYxKPmz5kHlfOX2Nm4ER+3DSMBSOXs2/1IQCy+2Rj+Z0ZZPcxnquyb/Uh5v+wjJEbhjAzcCI3gm4yfcjD4NuIVmMoXKEAS0Kn0uGb1nzZ/EfCQ+5oXS+YNnvVZc/a7FXXs2BPkSUxfoP/u4iIL8aPcUlzf6q5v9Ayz/xRnoYxtbUBaKuU8jUXdx9SSo0TER9gI4ZTFIkxxVbSdFQQka0Y63wGiHHb/UQgi1IqXkTaARWVUp9YtsE8zh1jbdTLGBGVQKXUG2beeIz1PCusaDsKvKyUijD3K5ptaqeUmmamLcaIjAmwHuiuLL5U00H7HmgEKGC4UmqeuWZoFZANmArcTmi/edyfwEil1CYRqQ18B7iaZgcppZaLSKB5TEgK300zYAFQSym12cr3UxYYh+HIOgFjlFKTzXIXzbZOEpEBwDtKqdKpaU6tL5Oh6jk0f0yR/xZr4xcAYG+6wH612asusF9t9qoLErU9zUzEY3l7e1ebORhLqk2waduelv+8s5SWiMhYYEVa3Opu2nfFWENUXSn1wEr+50CEUipNnrVkTzyuL5OhnaX/EPaqzV51gf1qs1ddoJ2lx/EiTcM9C18DHo8t9ezkBfql8uP+M0nXEWlS5nF9qdFoNJp/EHuahtMv0k0F8+6x5Wlo/wxwJpX8GIy79DSP4XF9qdFoNJp/ln/DLf+2QkeWNBqNRqPRaFJBR5Y0Go1Go9HYnH/D9Jmt0M6SRqPRaDQam+Mg8c+7CTZDT8NpNBqNRqOxOf/kAm8R+VxEAsz3hs4RETfzXaQXzHegHjIfV/NM6MiSRqPRaDSa/ywi4g18BhRXSkWLyHwevlS9d8IzD/8O2lnSvJAkPC/F3rBXXWC/2uxVF9ivNnvVZWv+4bvhnAB3EYnFeOTPFVsa19NwGo1Go9FobI4tp+FEpJOI7LP4JL4RXSl1GRgJXASuAuFKqTVm9ggROSIio82HFz8TOrKkeSGxtyfwJlzpNiw18Dm3xPasOjoCgEZeXZ9zS2zLX1cnANDIr8dzbont+evCKAAaZvnwObfEtqwKnQxAA/e2z7kltmd19L/7kX5KqUnAJGt5IpIZeAvwA8KABSLSBugPXANczGP7Al8+S/06sqTRaDQajcbmOEi8zT6PoS5wQSl1UykVCyzGeK/qVWVwD/gDqPSsWnRkSaPRaDQajc1x/Oees3QRqCIiHkA0UAfYJyJeSqmr5gvlmwDHnrUC7SxpNBqNRqP5z6KU2i0iC4EDwAPgIMa0218ikh3jBcGHgM7PWod2ljQajUaj0dicf/JuOKXUEGBIsuTatrKvnSWNRqPRaDQ2Rz/BW6PRaDQajeYFQUeWNBqNRqPR2Bz9Il2N5gUib1FvPhnfkcIV8hN28w6T+8xg+9I9ADTqUJuWfd8mS65MHNt2kh87TOTW1dtPbQegZvOqvD+0BdnyZOVm8C1+HzibHcv2ppkuH7/sdB3YmELFvQm/fZffflzFjg3HefX1Mnw2+K3EciKCm7sLn7ScwNnjjz4U9/vfO1C0tA9xcUbI/db1O3R8c8wj5Xp81ZT6TSrQ/rUfuRocmma6AHwK5aTL1y0pVDov4bcimfLVEnb8dRiAGo3L06b362TzykTIldtM/WY5O1cdSdFW2RpF6PBFE/IUyEnE7SgmD1vM1hUHAKhcryTtBrxFTp+sXDh+mbG9ZnHx9LW001UgB12+9KdQyTyEh95lyjcr2LHmqKHr9TK06d6QbLkyEnI1jKk/rGTnWus3/3Qc0JgqdUuSOXt6bl0PZ97E9axfvC8x38FBaPN5Q+o3r4R7OleuBoXQt9VE7kbEpJ22wrno+n1rCpXNS3hIJL8NWciO/x0EoGHb6rTo1ojMOTIQsPssoz6dSui1cKt2Gnd8lXqtXsa3uDebF+3lx0/+SMwrWjE/7w14i0Jl8hEXF8/R7af4ud9cQq9bt2UTXUVy88mY9ylUzpfwkAgmD5jDjuX7DV3tXqFlr8ZkzpmRgB2n+bHzZEKvhlm18/3qARSrVIC4B8b/WciV23Qs0ycxv1WfN3mt46uky5iOvasPM7brFKLS8Pt6Ehz/2Sd4pyl6Gk6jSQUHRweGLe3D7v/tp2nW9oz56Ff6zvgU70JelK5ZnPYj3mVIk+9omrU91wJvMGB296e2A5A1dxb6zfiMX3pO462M7zGpzwz6z+pGpuwZ0kzXkHFt2LPlFM2rD2fssKX0+aY53vmysvF/h3m78peJnwkjlnMl+JZVRymBiV//mVjemqNUolw+vHyypImW5Dg4OjD4j4/Ys+4YLYr1Zlzv2fQe/z7e+XOQNVdGeo9/n8lDF+FfqCe/fbmEPhPbkzGrp1VbeQvnou/E9kz7dgX+hXvRtd43nD1yEYDcftnpM6Ed4/vOpVmRXuxee5QhUzvj4Jg2p1UHRwcGT/6APRuO06LcIMYNmE/v0e/i7ZedrDkz0ntUayYPX4Z/qQH89s0K+oxtk6KumKj7DO04hWalB/Jjrzl8NLgJxcr7Jua3+bwhxcr70sN/HP6lBvBDj9ncv/cgTXQlaBsy8xP2rDlC8/zdGfv5DPr80gHvAjkp9XJh2g16m2FtJtC8QHeuBYXQb3LKD7sMvRbGnB//x5pZ2x/J88zkwV/TtvB+2X68X6YfUZEx9BjfLk11DV3Qnd1/HaRZ7s6M6fo7fX//GO+CuShVvSjth7VgaPPRNMvdmWuBN+k/LfUHr074fDpNsn9Ik+wfJnGU6rauTp13q9Gj9le8m/9TXN2c6TLqvTTT9SKinSU7RESaiMhgc7uziPzn/mtEZMczHLPOfJKrzchb1JusubOwaPSfxMfHc2jjMY5vP0XdtjWp0rgCWxfuJOj4JR7EPmDWVwsp/UpxvPLnfCo7ANnzZCEy7C57Vx0CYM/KA8TcvYdXgVy2lJOIj182suZIz+Lp24mPVxzec56AQ0HUaVzukbJ13yzP+uWHnrkuB0cHPu7/BhO/XvF3mvzE+BTMSdZcmVjy6wZD2/bTHN97ntrNKpHNKzN370Szb8NxAPauD+Be1D28fLNbtfVOt4asnLGNfRuOEx8XT8Ttu1wNCgGgQq3iHNt9joA954iPi2fB+LVkzZWR0lULpY2uAjnImiMjS6ZsNnTtPMvx/YHUfrsC2bwyGro2nzR0bTzBvaj7eOXNatXWzDGruXT+BkopTh26SMDe8xQrnw8AzwzuNGlfk3H953PjshElDTp9jdj7aecs+RTORdZcGVk8ca2hbetJAvacpU7LKlRuWJqty/YTdPIKD2LjmD3yT0pXK5Lid7b9z4PsXHmIiNC7j+TtW3eMrcv2ExURw73o+6yYvJHilQqmna4iucnqlZnF41YZujYfJ2Dnaeq8W40qr5djy+I9BJ24zIPYOGZ9u5TSNYri5Zfjqeup8no5Vk3bzM1LocTcvcf8Uf/jlWaVcXV3SQNVT84/+FDKtNfyvBugSRP6ABMBlFK/KKWmP+f2PDVKqZeTp4mI42MOmwF0sWlDRKym+ZbIi4gkzTe3fUv6PJUdgNP7zhN84jJVG1fEwcGBl996idh7sVw4EmQLFVaqfrQ9IkK+gkkdvRxemShZwZd1Kw6maq9dt/rM2zKAH6d3onRFvyR5Tdu+zLH9gVw4ff3vN/wJsKYNwLeoF2cOBxF85hqV65fCwUGo2rA0sfcecOH4ZavHFK1gaJm4YQCzDn1N7/Hv45nJw6wnaV0J+/mKetlYUYJ9a2MIfAt7ceZIMMHnblC5bglDV72SxN5/wIWTVx9r18XVmcKl8xJkfj++Rb2Ii4uneqMyzNozlMkb+vFG22q2lpNMRgrjsai3+X+WNB0gX7Hcf7veki8XIuiUTd+3mgTr//aCb4k8PHr6MM8fJfKkaK/9ly2YHzyRURu+oHSNokmOTTI+BFzcXPAumDYXW0+KLd8N97zRztJzQkR8ReSkiPwmIsdEZJaI1BWR7SJyRkQqmeUqicgOETlo/i1ipvcQkd/N7VKmDQ8RKQzcU0qFmHlDRaSXub3JfJngFhE5ISIvichis77hFm1bKiL7RSTA8mWFItJBRE6bdiaLyHgzPbuILBKRveYn1TOriEwUkTfN7SUWOjoktENEIs2/tURko4jMBo6aaW1EZI+IHBKRXy2cqOVAq7/3zSQl+ORlwm6E06L3mzg6OVKhXmlKv1IcNw8X9qw8wCvNq+JXKi8ubi60GdyM+Ph43DwefVdjanYA4uPjWTtjM/1ndWNlzGz6z+rGmM6TiIm6Z0s5D9tz4SZhoXdp1r4Gjk4OlK9akFIVfXFzc05Sru6b5Qg4EMj1y9bXYQFMGb2a9o1G0qbOd/y1cC9Dx7fFK48x5ZYtZ0Zea16J6RPWpYkOawSfvUZYSATNutQ1tL1SlFJVC+Hq7kJ8vGLdgt30ndie5UFj6TOxPeP6zOFe9H2rtrJ5ZaJOs0qM6PgbHV4ehoubM11GtADgwJaTlKpakFJVC+Hk7EjLbg1wcnFMs6v54HPXCbsVSbOPXjV01ShMqUoFcHV3NnQt3kffMW1Yfup7+oxtw7iBC1LUZcmnI5px/sQV9m8xolLZcmXCM4M73n7ZaV9jBCO6TKNNtwaUq144TXQBBJ8xv7NPG+Do5Ej5V4tT6uXCuHm4sHftUWo2qYhfcW9c3Jxp3fsN4//M/ZnfiQqAX3FvWvduzG+DF9pIxaMEn7pK2M07NO/xuqGrTklK1SiKq7sLe1YdpqZ/ZfxK+hi6+jchPj4eVw/r42fKoHm0K96T1gU+Y+WUjQxb1CMxCrV39WEatnuFnHmz4ZHBnRY93gBI0dY/haMom32eN9pZer4UBMYCpYGiwLtAdaAXMMAscxKoqZQqBwwGvjbTxwAFReRtjHfefKSUigKqYTzFNCXuK6VqAr8Ay4CuQEmgnYgkxOw/UEpVACoCn4lIVhHJDXwBVAHqme1NYCwwWin1EuAP/PYY3VuAGua2N1Dc3K4ObLVSvhIwUClVXESKAS2BakqpskAc0BpAKXUbcLXQkYjlG6snTbL6LkarxD2IY8jb31P5tQrMvzqZZj0as3n+Dm5eDuXghmNMHzqfIQt7MTNwItcDbxAdEcPNS7eeyg5AuTql+PC7NvR6dQiNXFvRs9YQekzuTIEyvk/c1qch7kE8X3abSaWaRZizsT/+71dn6+pjhCRb6FqncVnWLk89qnTq6CWio+4TGxvHuuUHOX4wiJdqGj+snfu+xqxfNhAVmTZOnzXiHsTzZftfqVS3JLMPf0PTznXYuuIAIVfCjMXag5rQ138MjfN2o+/bo+kaSMD6AAAgAElEQVT+Y2vyp3A1fz8mljVzd3H5/A1iou4xb9xqKtYuAcCls9f58bMZdPm6BbMOfU2GLJ5cPH2NkBQW6NpE10e/U+nV4szeM4ymHWuxdeVhQq6GU7ZaITr0e4O+rSbQuHAf+r4zge7ftiT/Y6IvHfo3Jl/hXHzzybQkmgFm/7SG+/diCTx5lc1/HuSlWsXSRJehLY4v20ygUv1SzDk5Ev+u9dm6dB8hV25zaMtJZn67nEHTPmb64W+5fvEW0ZEx3LySsgP/OLz8svPV/G780n8uAbvO2FBJUuIexDGsxRgqNSzL3MCf8O/WiC2LdhNy+TaHNh1nxvDFfDHnM2acGsP1oBCiI2IIuWz95odTe88RHRlD7P0HrJu1jeM7z/BSwzIArJ62hU3zd/H9mgFMOvAth7ecAEjRlubp0XfDPV8uKKUSoiUBwHqllBKRo4CvWSYjME1ECgEKcAZQSsWLSDvgCPCrUiphNaMXcDOVOpebf48CAUqpq2b95wEf4BaGg/S2Wc4HKATkAjYrpULN8guAhEvNukBxizBwBhFJr5SKSKENW4HuIlIcOA5kFhEvoCrwmZXye5RSF8ztOkAFYK9Znztww6LsDSC3qSORZG+sVgs6r02haY9y4ehFer768MGwY7YNZ+30TQAsn7ia5RNXA+BdyIt3B/oTeCz4qe0UKOvLkS0nOL3/PACn953j5O4zlKtbinOHA5+4rU/DhdPX6dP+oV87akYn1lk4RsXL5iVr9gxsW/N0r1NSPJxWKVu5ACXK+9KhR8PE/NEzO/PLd3+yaWXKd6D9XQJPXKFP04cLzX9c3pN1C3ZToEQeju0+y5nDxiLt04cvcvJgIOVqFOF8wKVH7Fw4cRlUyle12/53kG3mHVvpMrhT/52qnD6UNlOnAIEnr9LnnQmJ+z8u/JR1i/ZRoLg3x/ac58xRQ8PpI8GcPBREueqFOX/C+jRTm+4NqPhKUfq8MyGJM3vhpFFepaI7Lbhw/DJ9Go9M3B+1qi/r5uwEYMWUTayYsgkA7wI5adXzdYJOWJ86fRw58mTh2yU9mD3yf6yfv+tvt/txXDgWTO/6IxL3R28czNqZxjXhil/XseJXI+rqXTAX7/Z7i0Ar49AaSqnEqTelFDOGL2bG8MUAlK9TkpuXQwlJJSL8T+DA819rZCt0ZOn5Ynm5HW+xH89DR/YrYKNSqiTQGHCzOKYQEInhHCQQnaxMSnVa1pdYp4jUwnB+qiqlymC8Y8cNrCwqeIiDWb6s+fFOxVFCKXUZyAw0xIgybQVaAJEpHGe5UlOAaRZ1FVFKDbXId8PoA5vhVyovzq7OuLq70KxnY7J4ZWbN1E04uzrjW8JYn5TdJxuf//oRS8etJDLs0YWlqdkBOL33HKVqFE2MJBUo60upGsXSbM0SgF/hnDi7OOHq5oz/+9XJki09a5c+DErWfas829YFEB2V8lROuvRuVHi5IM4uTjg4OvDq62UoVd6X/TuMq/UOjUfTxf8nujYbT9dm4wEY+ukMdqw/nma6AHyL5cbZ1QlXd2f8O9chS84MrJu3i9OHgyhRuWBiJKlAyTyUrFTAcIqssHbuLuq9U4VcebPi6u5M86712bPuofNYsLQPDg5CxqyefPp9K3avOcqls2m3Nsu3qNfD7+zDWmTJkYF1i/Zw+kgwJV7yS4wkFSjuTcmX8ic6Pslp8XEdar1ZngFtfyEiLCpJ3tWLtzi65xzvdK2Hs4sjPgVyUPP1suzZkLbfmV9xb/M7c8H/k/pkyZmJtXN24OzqlLg+Kbt3FrqNbsvSX9cTGR5l1Y6DowPOrk44OAoOjmJuGz91Wb0y8e2ynqyYspGVUzenqZ5EXSV9Hv7fd3+NLLkysXbGVpxdnclX3BiH2X2y0m3CByydsJrIsEd1pcvoQYW6pXB2dTb+z955mVLVi7J/rXHBkT5zusQpubxFc/PRd62Z9fXSf9zhTY49rVnSkaV/PxmBhDN5u4REEcmIMf1VExgvIs2UUguBE0Cbv1nfbaVUlIgUxZh2A9gDjDbvNovAmG47auatAT4BfjDbVlYpdchcd/WJUsra3Xg7ge4Y7+7JCiw0P49jPbBMREYrpW6ISBYgvVIqyHyzdC4g8KlVp0Ldtq/QqENtnJydOLr1BP3qf0Xs/Qeky+hB/1nd8CqQk+iIGFZP3cjUL+YlHteq/9uUrF6Mga9/naodgCNbjjNj2AK+WNCTzDkzEn7zDnO+WZx4MkwL6rxRjgb+FXFycuDYgSD6d/qD2Ng4AJxdnKhZvyTDe8x+5LiWHV+hZAVfvvh4Gk5ODrz/aT3y+GUnPi6e4As3GdZ9JpcCjTvGwq3ckRR++26a3oYOUKdZZRq8+zJOzo4c232WAS3HE3v/AUd3nmXWyJUMnNyRTNnTE34rknnj1nDAvIvs1aYv0fKzBnSuZSzhWzN3JznyZGHMyt4A7Nt4gl8GzU+sp/NXzfEr7k1cbBxb/zzIpCGL0lbX2xVp0LIyTk6OHNt7ngFtfyX2fhxHd59j1tg1DJzYjkzZPAkPvcu8ies4sPW0oeut8rTsUpfODb4HoH2f14m994ApGwck2p43cR3zJq4H4LvPZtL9u5bMOzCcsFuRTB+1ikM70m66CqBOy6o0aFvd0LbrDP2bjjL+zzK402/Sh3j5ZicqMoa1s7cz/eulice1/Pw1SlYtyBctxgHwbq/XadP3zSR2Z363nJnfraBh2xrk9stB696Nad27cWKZt/N+mna63q1Gw3a1jLG4/RT9X/828fzRb+rH5M6fk6iIaNbM2Mq0YQ9Pge/0bkzJakUY1GQkTs6OvD+0GT6FvYz/s9NXGdZiDJfOGM/0ypA1PcMW9SB7niyEh0SwdMJq/vp9Y5ppehGR5+15vqiIiC/wpxkxQkSmmvsLLfNEpCowDWNqbQPQVinlay6KPqSUGiciPsBG4GWMSNNeoKQ5pTcUI2IzUkQ2Ab2UUvvMCFIvpdQbZv2bMNZKHQWWYqwlOgVkB4YqpTaZi717AVcwnLJQpdRAEckGTACKYTjgW5RSnUWkGVBPKfWRFf0dgK+UUrlFxBkIM7UtNvMjlVKeydtp5rUE+mNEtGKBrkqpXSJSEeivlPJ/TPereg7NH1Pkv8Xa+AUANCw18Dm3xPasOmpMYTTySv0ZNP81/rpqTKc18uvxnFtie/66MAqAhllSfh7Sf5FVoZMBaODe9jm3xPasjp4Bqc8gPDUDjzS1mYMxovRim7btadGRpeeEUioQY2F1wn47a3lKqZ08XBsExiJrlFIfWJQPxlgsDhjPG8JY27POcopKKVXLYnsTsMlaHtAohWbPVkpNEhEnYAlGRAnzzruWVspXxnCiHkEpNQWYYm7HAumS5Xtaa6eZNg+Yx6O0xXxkgkaj0WieL/+G6TNbodcs2SdfAx5pYHeoiBwCjgEXMCJQKaKU6q2USrt5pEc5ppRa/w/Wp9FoNJoXAB1ZskOUUtd5eNebLe32srVNW6KUmvy826DRaDQaA8d/wZO3bYV2ljQajUaj0dgcB/0iXY1Go9FoNJoXAx1Z0mg0Go1GY3P0NJxGo9FoNBpNKjjYkbOkp+E0Go1Go9FoUkE/lFLzIqIHvUaj0TyKTR/8+P3xRjY71/Yp/pd+KKVGo9FoNBr7wp6m4bSzpHkhaZjxg8cX+g+xKvx3AEr3GP2cW2J7joz6HIBXGv/wnFtiWzavMN43Z2+v3oGHr98p8pV9jcdTXxhjsZF32r1L7nnx1+WfbG7T0Y6C+HrNkkaj0Wg0Gk0q6MiSRqPRaDQam6On4TQajUaj0WhSwRH7cZb0NJxGo9FoNBpNKujIkkaj0Wg0GpvjIPazwFs7SxqNRqPRaGyOnobTaDQajUajeUHQkSWN5jH4FPai649tKFQmH+G3IvjtiwXs+PMAAA3fq0GLz18jc46MBOw6w6iufxB6LewRG84uTnwyqi1lXylG+syeXLlwnanDFrNv3dHEMk9qy1b45cjCQP9XKZYnJ7fvRjNqxRY2HD1H6Xy56NrwZYr75CQuPp59Zy/x7ZJNhETcTdFWw7KF6dygCl6ZMhAScZcv5qzhwIXLODk68F2b1yjukwPvLBn5YMIC9p27lGaaEsiXJwvdO9elcMFchIVH8csfm9m66wy5cmRg3pSPiIq+n1h2zqI9TJ+3M1V7ZUrmYdw3rZg+bydTZm4DwC9vNrp0qEXhgjnJlMEjTZ4D9VbXhtR/vxa+pfKyac52fvhgQmJeudol+WR8R3LkzcbJ3Wf4of0EblwMAYzx9tnPH1LDvwr3ou4z/4dlLBr9Z4r1NO3+Oi37NMHV3YWti3cx7uPJxN5/AEDOfNnp9XsXilYuxI2LIYz/dAoH1x9N0dazkj9bFoY0fJUSXjkJjYrm+3VbWHfqHM4ODoxs+holvXKQJ1NG2k5fwJ4g62PI2dGRoY1qU9UvL5nc3Qi6HcboDdvZci4QgALZsvD9Ww3xyZwRgICrNxi+eiPnQkJtricBn4I56fJ1CwqV8iH8ViRThi9lx6ojANRoXI42PV8jm1cmQq7cZuq3f7Jz9ZEUbZWtUYQOA98iT4EcRIRFMfnLJWxdcRDv/NnpMKgJxSv64eDgwOnDF/l58EIun7uRZrqeBHt6ka6OLNkJIrLjebchNUSkjYgcEZEAETksIr+JSCYzb5OInBKRQyJyQkQ6WRwXKCJbk9k6JCLHRKSBuX1IRCItbEy3VbsdHB0YMudT9qw6THPfTxnbbRp9Jn2Id4GclKpWmHaD/RnW6iea+37KtaAQ+k35yLodJwduXgqlz+vf4e/TlenDlzJg6sfkzJsV4Kls2QJHB2HsB2+y+fgFagz6mS/nr+ObdxuRL3smMri7sXDXURp+NYWGX03h7r37fNWqfoq2qhTOS/c3ajB47hqqDBhP+wnzuRT60Mk7eOEyA2at4uadlJ0tW+LoIIwY9DY7956n8bs/MXLCGgb2fI08uTMnlnnjnXE0ajGWRi3GPtZRcnR04NMP6xBw8kqS9AdxcWzcdorvx61OEx0At66EMmvEIlb/sTFJeoas6RmyqDfTBs+ladb2nN5/nkFzP0/Mbzu0Bd4FvWjj24XetYfSovdbVGxQ1modFeuX4Z2+TehTdxht/Lrg5ZeT94a1TMwfMLs7Zw8F4p/tA/4YNIfBC3qSMVsGm+p0FGFiizfZeOYClUb+zOD/reOHJo3wzZIJgAMXL9Nn6SpupOKwAzg5CFfvRNB2+gIqfD+BsZt2MMb/dbwzGu29EXGXzxb+SaWRP1Plx1/YcPoco5u+ZlMtljg4OjD4j07sWXeMFiX6Mq7vXHr/9B7e+bOTNVdGeo97j8nDluBfpDe/DV9GnwnvkzGrp1VbeQvlou/495n23Z/4F+1D1/rfcvZIMADpMniwa81ROtYcTquyAzh1KIghv3eyauefxAFls8/zRjtLdoJS6uXn3QYR8RWRTVbSGwKfA42UUiWA8sAOIKdFsdZKqbJANeA7EXGxyEsvIj6mrWIJiUqp1UqpsuZx+xJsKKXes5Umn8JeZM2VicUT1hAfrzi85SQBu89Q552XqdyoLFuX7iPo5BUexMYx+/sVlK5eBC+/7I/YuRd1n5nfLuP6xVsopdiz+jDXg25SsKwvwFPZsgV+ObKQI2M6Zmw+QLxS7DkbzMHAK7xRoRjbTgay9vAZ7t67T0zsA+ZuO0xZ39wp2urSoCq/rt3FkaBrKAU3wu9yI9z4UXsQF8/MLQc5eOEK8fH/zFVm3jxZyZrFk/nL9hEfrzh45CLHTlyh/qvFn8ley7crsu9gIBcvJ40+BF++zcq1Rwk0ozlpwbYle9ixbC93bkUkSa/etDKBAcFsWbiL2HuxzBg6n/xlfPEpYnxP9dq+wqzhC4kMu8vFk5dZ+ds66r9fy2od9d6rxarfNxB0/BKRYXeZNXxhYlnvQl4ULO/H9CHzuB9zn22Ld3Ph6EVq+Fe2qc782bKQI306pu42xuOuwGAOBF/hrdLFiI2PZ9qeg+wPvkK8Sn0MRcc+YPyWXVwOv4MCNp25wKWwcEp45QAg4t49LoffAYyXoMUpRV7TIUsLfArmJGvOjCyZtNE4f2w/zfG956ntX4lsXpm4eyeafRuPA7B3fQD3ou7h5ZvNqq13ujVg5czt7Nt4nPi4eCJuR3E1yBh7pw8FsWbuLiLDooh7EM+SyRvxKZiT9Jk90kzbi4Z2luwEEYk0/9YSkc0iMl9ETovItyLSWkT2iMhRESlglmssIrtF5KCIrBORnGZ6dhFZKyIHRORXEQkSkWxmXhvTziEzz/EJmzcQ6KWUugyglIpTSv2ulDplpawncBeIs0ibDyRc6rYC5jxl9zwzYuXVjSJCvmLeCJLktZMJZfMV836s3UzZM+BdMBdBJy4bx/4NW8+CVV1AQa9HT9QVCnhz7votq3YcRCjhk5PM6Tz4c0B71g7uSP+mr+Lq/KRDw/akpC1/voeO57zfP2LBH53p160hGTO4p2grZ/YMvFa3FNPm/rsCt74lfDh/JChxPybqHlfOXSNfCR88M6Ujm3cWzh1+mH/+cBC+JXys2spXIk+SsucOB5ElVybSZ/HEt4QP185fJzoy5qGtI0HkS8HWs2L9/wwKZbfuODwpWdN54Js1M2dvJh2/e3t/zJEBn/FFw1f5dduev1VHaljThQi+Rbw4c/giwWeuUbleSRwchKoNShN7/wEXjl+xchAULe8LwMR1/Zl1YDi9x72HZybrzlCpygUJvR5OxO0oGyl5Nhwl3maf5412luyTMkA3oBTQFiislKoE/AYkvNRoG1BFKVUOmAv0MdOHABuUUuWBJUBeSIzotASqmZGcOKD1E7anBHDgMWVmicgR4BTwlVLK0llaCDQ1txsDK56w3r9N8OlrhIVE0KxbQxydHClfuwSlqhXBzcOFvWuPUPPtl/ArkQcXN2da932T+Ph43NxdU7Xp6ORI3986sW7Odi6duQbwzLaelQvXbxMaGU37Vyvi5OBA1cJ5qVggD27OSZcxFvLKxkf1qzBq+VardrKm98DZyZF6ZQrR7qf5NP9xJkW9c9Cprm0jD09D0KVQwsKjaNW0Eo6ODlQs50uZkj64ujoRfieaTp9Pp+UHv9Lp8+m4u7swqOfrKdr6rFNtpszcRnRM7D+o4PG4ebpxNzzpD2FUeBQe6d1x93QDSJJ/NzwK9/RuVm25J7OVsJ1gK3k9d8Oj8PBM2cF8Fs6H3Cb0bjQdqxrjsVr+vLyU79Hx+DQ4OTgwskkjlhw+zvlbt5PkvfTDz1T8fgJf/bWB49du/t3mp0jw2evG+ePjOjg6OVC+ZlFKVSmIq7sL8fGKdQv30HdCO5ZfGE2fCe8zru887lmsp7Mkm1cm6vi/xIhOv9Gh+pe4uDnT5atmVst1GdGcScOWpJmuJ8WBeJt9njfaWbJP9iqlriql7gHngDVm+lHA19zOA6wWkaNAbwyHBqA6hvOEUmoVkHCWqQNUAPaKyCFzPz+AiCwx01YCFS3WEbVP3jARKWXmnRORlhZZrZVSpTGcs14iks8iLxS4LSLvACeAp75cEpFOIrJPRPZNmjTpiY+LexDHl+/+RKX6ZZhzZjT+nzRg65K9hFy5zaHNJ5j59TIGzejK9GM/cP1iCNERMdy8kvJiURGh96SOxN5/wIResxLTn8XW3+FBfDzdfl9OjeJ+bBjWifdqVWD14dNcD49MLOOTLSMTO73Nd0s2ceDCZat2YmKNRcBzth4iJOIuYXdjmLF5P9WL+aVJu5+EuLh4Bo5YSpWX8rNkehdaNqnIxm2nuBkSQXRMLKfOXicuXnE7LIqxv6ynUnk/PNxdHrHz8ksF8HB3YeM2awHQ50tMZAweySJiHhk8iIqITowCpbPI98jgTnREDNaITmYrYTvBlkeGpNELjwzuREVG20RHAg/i4+k6fzmvFPJj2+edaF+lAquOn+b6ncjHH2wFAb5v0pDYuDi+WrXRapno2AfM2X+E795qQBYP2zp/CcQ9iOfLDpOpVKcEsw99TdOParN1xUFCroYZi7UHNaFvs7E09v2cvv5j6f5DK/KXsB5Nvh8Ty5p5u7l8/iYxUfeZ99MaKtYukaRMxiyejJjdhf9N38rmZfvTRNPT4CjKZp/njb4bzj65Z7Edb7Efz8Pv/CdglFJquYjUAoaa6dYCxwnp05RS/ZNnKKXeBmPNEjBVKVUrWZEAjHVKG5VSR4GyIjIeeOQMpZS6KSIHgMpAkEXWPGAC0C6F9qWKUmoSkOAlqcW9dz3xsRcCLtHn9e8S90etGcC6OdsBWPHbBlb8tgEA7wI5adWrceLUmjU+H9+ezNkz8EXzMcQ9iEuS97S2/i5nrobwwYQFifvTP23J8n3G+gmvzOmZ1NmfSWt28+f+EynaiIi+x7XbEah/wQJMS84H3qRb/7mJ+xO+f5dVGwIeKZfQbmvTJeXL5KVIoVwsnt4FAE8PF+LiFfnzZWPgiKVp0/AnJDAgmPrvvZK47+bhileBnAQFBBMZdpdbV0LJX8aXA+uMO6sKlPElMCDYqq2ggEsUKOPLlgU7E8uGXgsjIjSSwIBgvPLnwN3TLdEJy186HxvnbLO5plM3Qmg7/eF4nNOuJUuPHH8mWyMa1/9/e+cZXkXRBeD3pCeUhBACARISeoDQm1KkFxFBAtKLgHRURDrSbHxKV0GlSBHpIqC0gEiVTiihtxB6DyWBtPl+7CYk5CYEvAHFeXnysHdm9uyc3bm7Z885MxePDC68O28pMankytmI4GxvT/bMGbkZYV0DMJ6zRy7Sv+mkhM9jl/Vh3aKd5CuSi0PbT3LCTNI+vv8cR/eFUqpyIU6HJP/enzlyEVTK37OMrs58Nq8H29ceYv6ktSm20zwb2rP038UViP9Gtk9UvgV4G0BE6gDxU4jWA01FxNOsc3/M+5MaXwBjRCR3ojKLr3Ii4gKUwvCIJWYp8CWQflOPUsCvaG7sHe1wdHYgsHdd3HO4EjR3K/aOdgk5Rdlyu/P+xPb8+l0Q925bdnz1Ht8W70JeDG8xiajHwjpPK8saFPDywMHOFid7O9pXK0O2zBlYtvMwnq4ZmNa9KQu27mfRXylPY47n110htKxcEveMzmRydqRN1dJsOnz6kW62tjjY2ZrbNgnb6Ule32w42Nvi6GhH87fKkdU9A6vXHcK/oBfeubIgApkzOfFel5rsO3CO+xHJQx/T526hTdfpdH5vFp3fm8XWnaf4be0BRk9cndDGwd4WO1MfB3tb7K2sm42tDfaO9tjY2iTZ3rp0J77FfKjcpAL2jva0GdaUMwdCCTtm5LsEzdlE6yGBZHTLgHehnNTvXJO1s/60eIygORup17EGPv65yeiWgVZDAhPaXjhxiVPBZ2k7vBn2jvZUalyevMXzsHnJDqvqCVDI0wMHW1uc7OzoWLEMnhkz8Mt+w1iyt7XFwTbRGLJN+TyPfL0m+Tzc6TZ/GQ8feyF51c8H/xzZsBEhg4MDA+u8xp0HDzh1Lf2WDvD1z2ncP5zsCexaA3dPV9Yt3MHx/ecoWiFfgicpX9HcFKuQzzCKLBC0YDu1m1ckh09WHJ3sadazFjvXHwLAJaMTn87tSciuM/z4xfJ00+VpsSXOan8vGu1Z+u8yAlgkIheA7UB83GQkMM8MkW0ELgF3lVLXRWQosFZEbIBooCdJvT8WUUqtFJFswCozKfw2cIikhs9cEYkEHDG8U3sek3EX+B8YoaznSc0Wr1C3XVXs7Gw59NcJBjUeS3RUDBlcnRk4rQtefp5E3HtA0NwtzP70UZ5A874NKPZKQT5uOh5P76w06FidqAfRzDs+PqHNpA9ms2HRdhyc7FOVlR40LOtPkwrFsLO1Ye/pC3T5fgnRsbE0qRCAt4cb3epUpFudigntKw4y1vjpXLMcpfPmosdUw7vyw9odZMngzPJBHYiKjmXN/uNMXfcoaXb5oPbkcjfWtfm+WyAA9T6ZzsVbd9JNtzrVi/BGneLY2tpw8PB5+n68iOiYWHLmcOXddm/g5upCREQUu4NDGfXVo/WHPuxRG4Bxk4OIjIwmMvKRUfswKoYHD6K5a3pY4tdsiifolw+5dCWcFp3THuZ9Eq2HBtJu+NsJn2u1rcrskQuZM3IRI5uOodfXnRg45z2O7jjBZy0nJLSbPXwB7015l5/OTiYqMooFXy5j95pgALJ5ezA9ZDydivbhWth1dq8JZuFXyxjzx3AcnB3YsmQHs4cvSJD1WcsJ9PuxJ0tvzuTqueuMajaW8OvWv3aNAvxpWsoYj3vOXeCducZ4BFjdoz253YwxNKO1MYZqTJrOhfA7dK1UjrI+uXh33q/kdM1EizLFeRgTw5YPH02dH/77elYcOkpmJ0c+rled7Jkz8jA6hoMXr9D556VExcYm75CVqBlYjrotX8XO3pZDO04xuOU3REfFcHD7SeaOXcWQ7zvhli0T4TfuseDrtezddBSA6m+VpXnvOnSr8TkAaxdsxzO3OxN+6wvA7j+P8N3HiwF4tX5xCpXKQ55COaj99qN8wa7VPuPaxVu8KGz+AYnZ1kJUKm49zX8PEXEEYpVSMSLyCjDFTOh+mVD1XDu+6D5YldXhMwAo/uH4J7T893FgnLF+UHos+vgi2biiHwC1bZq94J5Yn6A4I5xW6JOXazwe+9gYi/Vz9X5Cy38fqy58DSmnYTwTi06VsZqB0Szfnuf7lvwY2rOkeRwfYKHpPYoC3n3B/dFoNBrNv5B/QvjMWmhjSZMEpdQJjJwhjUaj0WiemX/CLDZroRO8NRqNRqPRaFJBe5Y0Go1Go9FYnX/CYpLWQhtLGo1Go9ForM4/4WdKrIUOw2k0Go1Go9GkgvYsaTQajUajsTp6NpxGo9FoNBpNKtj8w34G6e+gF6XU/BfRg16j0WiSY9WFH4PO+FvtXlvb74helFKjed68bKsmx6+YXD/3ey+4J9Zn1XnjR0jrub9c6zBrKF4AACAASURBVKOuvjkVePnGIiQaj34fvuCeWJdVZ8YBUMeh1QvuifVZG/Wz1WW+TAne2ljSaDQajUZjdWxfIie+NpY0Go1Go9FYnZdpnSW9dIBGo9FoNBpNKmjPkkaj0Wg0Gqujc5Y0Go1Go9FoUuFlylnSYTiNRqPRaDSaVNCeJY1Go9FoNFbHRl4ez5I2ljQajUaj0Vgd/XMnGs1LTKOe9ajTvhq+AT78OW8rX3X8NqGuVI1i9PqmM54+HhzdcYKv3vmWq+euA2DvYMd7U96lSmBFHkZEsfCrZSwZ/1uKx2nyQQOa92+Mo7MDm3/ZzqTuU4mOigEge55sfDSjB4UrFODquet803s6+9YftKqe3vmz0+OzZhQI8Cb85j2mf7qMbasPAFDljVK06VsfDy83rl+8zcz/reCvNZaP/+G41lRrXIaY6NiEsqb+/YmLUxQu7Uvbj16nQHFv4mIVB/46wZRhS7h19Y5VdUmmW8Ec9PyyNQVK+hB+/R7Thi9m2+/7AKjXtjJvv1+fLJ6ZCdlxknG9Z3LzcrhFOQ07V6d2y1fxLZKLjUt2MbbXjwl1hcvmpd3gRhQokYfY2DgObj3GlIHzuXnFsqxn4b8yFgG883nSY1QgBYrlJvzmfaZ/sYJta43jVGlQgjYf1MMjhyvXL91m5lcr+SvokEU5nQc3pGKtYmTJlokbV8JZMHk963/ZnVC/6sw4HkQ8JP7HKzb+to+JAxdaXZ8EvQrnpPfEdyhQ2o/b1+4wbdDPbF1m9KfeO9Vo3u9N3HO4cWjrMcZ2+Z6bl25blLPs5owknx2cHVjxXRCT+8yicPn8dBjRjPyl/YiLjePApiNM7jOLm5cty9I8PTpn6W8gIo1FZFga274pIgOteOxt1pKVHohIGxE5ICIhIrJfRKaJiJtZ96eIHBORYBE5IiJdEu13VkQ2PyYrWEQOiUhdcztYRO4lkjFbRAJEZKY1+n7j4k3mfraENT9uSFKeOWsmhi/px6xh82mS9R2O7znN0Pl9EurbjnibXPm9aOPbg341RvB2v0aUrVvS4jHK1ilBiwGN6V9rJG38euDll512I5sn1A/++QNOBp8l0KMjPw6dx7BFfXH1yGwN9QCwsbVh2Ix32bkuhLeLDWRS//n0m9SWXH7ZyJrDlX6T2jJ11FICC/dn2qe/0v+b9rhmzZiivMVT1tOkUL+Ev7g440mU0dWZVXO30aHiSNpXGE7kvYd8OK611fRISbfhP/Vi59oDNMv7ARP7zKH/d53IlS87Aa8WpMPQtxjZ5lua5fuAy6HXGTg15ZXBb16+zbyxv7N27tZkdRndXFg1axPtSw6kfYmBRNx7wIffdLCqLv+FsQjmeJzakZ1/HObtUkOZNHgh/ca3MsZjdlf6jWvN1E+XERgwmGlfrKD/xDYpjscHEVGM6DydpsWHMPajeXQd1hj/0r5J2vR4fSxNig2iSbFB6Woo2djaMHJJX3as3Edg9neZ2GMaA2b2IFeBHARUKUzHT5ozoulYArO/y+Wz1xg8p3eKshq5d0z4a567O1GRUWxesgOATFky8Pv0P2hX4H3a5n+PiLuR9J3aNd30Siu2KKv9vWi0sfT36A9MTktDpdRypdTox8tF5Jm8e0qpV59lP2siIr4i8qeF8npAH6C+UqooUBrYBmRP1Ky1UqokUAn4n4g4JKrLJCLepiz/+EKl1BqlVElzv93xMpRS7ZRSB4HcIuLzd/XasnQn25bt4s6Nu0nKKzepwNmQMDYt3k70w2jmjFhI3hK+eBfKCUDttq8x99PF3Lt9n3NHL7By2jrqtK9m8Ri121Vj9Yw/CD18nnu37zP308UJbXMV8CJ/aT9mD19A1IMotvyygzMHz1ElsMLfVS0B7/zZyZrdlaVTNxAXp9i/7QSHd52hRmA5PLzcuH8nkt0bjgCw64/DPIyIwiuPx1MfZ/eGI2z5PZiIew94+CCa5TM3UaSsn9X0sIR3wRxkzeHKL5ODDN02HyVk50lqNq9IhXrF2bxsD6FHLxITHcvPY36jeKVCePlmsyhr62/7+GtlMHdv3k+u27pDbF62h4i7D3gYGcWKqRsoUj6/VXX5L4xFMLxKWT1dWTp9o3HN/jrJ4T1nqfFWGTy8XI3xuPEoALs2HDHGo09Wi7J+mrCG86evopTiWPA5Qnadxr90Hqv2N634FM5JVq8sLJm4krg4RfCfhwnZdpxaratQsUFpNi3ZQejhC8RExzL3818oXtUfr7yeT5RbJbA8t6/e4eAW85ys2c/mJTuIuBvJw8golk9eS9FXC6a3ek/ERpTV/l40L72xZD7Qj5qejUMiMldEaonIVhE5ISLlzXblRWSbiOwz/y9kln8oIjPM7QBThouIFAQeKqWui4itiJwWAzcRiRORquY+m0Ukv4h0EJFvzLKZIjJORDZgGAoZRGSGiOwyj98oDXrdM/+vJiIbRWShiBwXkdEi0lpEdorIQRHJZ7ZrKCI7TPnrRCS7WZ5NRIJEZK+IfC8ioSLiYda1MeUEm3W2aTztQ4CPlFIXAJRSsUqpGUqpYxbaZgTuA7GJyhYC8a+2LYF5aTzuCqBFGts+Nb5FvTl9IDTh84OIh1w8dZk8Rb3J6JYBj1zunNr/qP70/lB8i3pblJWnaO4kbU/tD8U9hxuZ3DPiW9Sby6evEHnvwSNZB0LJk4KsZ0Es/SSlgG9hL07sP0fYyStUqF0MGxvhlboBREfFcObIxRTlvdG+MgsPfcGklf2o9HqJFNsFVMjPueOXraBByoiF3wIVEfIUzoWIJPmpUDFPRB7/nH/7uMVeLUDosZTPkTV5mcYiPLoOSQvBt6AXJw6EEXbqKhVqFTXGY+1ixng8eumJch0c7SlY3IfQ41eSlH+1oCdzd45g6JQOeObKYi01kmNBLxHBt2huRCSJ3vHbKV2nxNRuU5V1czenWB9QpTChh88/Q4c1KfHSG0sm+YGJQHGgMNAKqAx8BAw22xwFqiqlSgHDgM/N8glAfhF5C/gR6KqUisDwiOwFwxgAjgNFTLl7gCoi4gjkVkqdtNCngkAtpVRfDOPiD6VUOaA68JWIZHgK/UoA7wMBQFugoFKqPDANiPfrbgEqmvrNx/CKAQw3j10aWAr4QIJHpzlQyfTkxAJpjZ8UxTw3qTBXRA4Ax4BPzHMYz2KgibndEMMISgu7gSppbPvUOGV04n54RJKyiPAIXDI545zRCSBJ/f3wCJwzOVmU5fyYrPjteFmPH+d+eAQuGZ2togdA2Mkr3L5+l6bda2JrZ0PpqoUJqJgfRycH4uIU6xbvZMA37Vl+ehz9v2nPpAHzeRgZZVHWshkb6VT5E1qUGMKcMb/z4bjWFr1Hvv45adWnLtM+/dVqeljU7cRlQ7fedbG1s6V09SIEvFoQJxcHdgUdpGrjsvgVyYWDkz2t+71BXFwcTs6Of+uYfkVy0bpfQ6YNW2wlLVLnZRqLAGGnrnD7xj2adq1ujMcqBQkonw9HZ3tjPP6ymwET2rD82Jf0n9iGSUMWpTgeE9P7s6acPnKRPZuOJpT1a/4NHap8Speao7lx9Q4jp3fGxjZ9HoVhRy9y++odmvV9A1s7W8rUCiCgqj+Ozo7sXB1M1aYV8QvwxsHJnjZDmhAXF4eji0OqMrN5ZyWgqj9BczZZrPcL8Kb1kCZMHWj9H8Z9Wl6mMNx/JcH7jBmmQURCgPVKKSUiBwFfs40rMEtECgAKsAdQSsWJSAfgAPC9Uio+ecELuJboGJuBqoAf8AXwLrAR2JVCnxYlMhDqAG+KyEfmZycMo+VIGvXbpZS6ZOp3Clhrlh/EML4AcgMLRMQLcADOmOWVgbdMXVeLyC2zvCZQBthlvvE4A1fNYyw19XQAfEQk2NxnolLqUQas0TYAmANkAgYrpRaYVa2VUrtFJBuwTURWK6XiX29vArdEpIV5DpLerVPmKmDRRWDmRXUB+P7779MoLikP7j3AJXPSh4RLZhci7kYmvHlnyOzM7WvRZp0zkXcfJJMDEPmYrPjteFkumV0eO44zEfcin6nfloiNiWNU52n0+KQpzXrU4sT+c2z+bR/RUTGUrFyQTkMaMaDZJE4ePE+B4t4Mn/EuH7f9jtOHLySTderQozfYXX8cZsPS3bxavwSHd59JKPfy9eCTOd34bvgvhOw8bTU9LOsWy6g239L9fy15+/16nAgOZfOvu4mOiiF401F+Gr2cobO6kyGzM0unrCPy3gOuXbz1ZMEp4OWXjU8Wvs93g+YTsv2EFTVJmZdpLII5HrvOoMeIJjTrWoMTB8PYvHI/0Q9jKFmpAJ0GvsGAlt9y8tAFCgTkZvjUTnzc4QdOp+Lt7DSoIXkK5mBgq6SZEofM8RcTHcv3I5ey5ODn+OTPztljT/ZUPb1esYxoNpae4zvQ/KOGHN9zJiF0GrwhhNmjFjNsfh8yuDrzy6RVRN59wPXzN1OVWbtNFUK2HuPy2WvJ6nLmy85nywcwpe9sDm215Mh/vvwTjBxr8V/xLD1MtB2X6HMcjwzGT4ANSqliGN6MxK9hBYB7JH0QRz7WZjOGV6M8sBJwA6oBls1/I/QUjwCB8fk4SikfpVRaDSVIm35fA98opQKAron6bikgE18+K1GfCimlRgAopd4yvU2vA7sTtYk3lEIw8pRQSh00267CMLiSoJS6huGFejwJYgHwLWkPwWHqZPEurpT6QSlVVilVtkuXLpaaPJGzIWHkK/4o98HJxRGvfNkJDQnj3u373Lh4k7wlfBPq85Xw5WxImEVZoSHnyfdY25uXb3P35j3OhoThldczwUMAkLd4HkJTkPWsnD1ykf5NJ9E8YBBD20whh48Hx/aFkq9obg7tOMmJA2EopTi+/xxH94VSqkqhtAlWScMqnrmy8MW8nsybsIY/lqT07mBdzhy+QP+GY3g7fx+GNJ1ADl8Pju0xjLcV0/+kU7mhtCjUly0r9mJra0vokeRGYFrwzO3O6KUf8vOY31m/cLs1VUiVl20sApw9eon+Lb6leemPGdr+B3J4u3Ns/znyFcnFoZ2nOXHwvDEeD4RxNDiUUpVTzslp80Fdyr5WmCHtvifi3sMU2wHGrLiU7oJW4MzBMD6q9QlNvboy+I3R5PDz5NiuUwCs+C6Id4p+yNu5u7N56U5s7Ww4G5J6+KxWmyoWvUqePh6MXjWYuZ8vZf3cLemiy9NiI9b7e9H8V4yltOAKxN8xO8QXiogrRgivKpBVRJqaVUcwwnvx7ABeBeKUUg+AYAyjJOXA8iPWAL3FfMKISCnz/1wisv5ZFXqMxPq1T1S+BXjbPF4dID6Avx5oKiKeZp27iKQ1S/ILYIyI5E5UZtFvLyIuQCng1GNVS4EvMc5NWikIWJ5P/BTY2Npg72iPja1Nku2tS3fiW8yHyk0qYO9oT5thTTlzIJQwM08laM4mWg8JJKNbBrwL5aR+55qsnfWnxWMEzdlIvY418PHPTUa3DLQaEpjQ9sKJS5wKPkvb4c2wd7SnUuPy5C2eJ2Hmi7Xw9c+JvaMdjk72BHatgbtnZtYt2snx/ecoWj4feYvkAiBf0dwUq5AvxZylyg1K4uTigIhQumphqjcpy/YgY8p31hyujF7QmxWzNrPyp+QzytILvyK5DN2cHQjsVQf37G4EzduGvaNdQn5StlzuvD++Lb9+v5574Zadl8b1t8PGVrCxFXPbuG1m9XJj9LK+rJi+gZUzN6aLHv+VsQhGvpy9gzke361mjMclOzl+IIyi5fzIa163fEVyUaxcXs4ctTwe3+5ek2pvlmZw2++4ezvpdfUpkJ28/jmxsRGcXBx4d0gjblwJJ+zkFYuyrIFfgDf2jvY4OjvQtE8DsuZwY+3sTdg72uNb1LhFZvPOygeTO7P0mzXcu518MkE8RSoWwCNnFjY9dv6z5szCl2uGsOK7IH6faq1HhiYx/5UwXFr4EiMM9yHwR6Ly8cBkpdRxEekEbBCRTRgeo7EiIsrgoYiEAfGvl5sxkpPTsiDJJxi5UQdMg+ks8AZGqC/GCroBjAAWicgFs4/xSSUjgXki0hwjbHgJuGsmrg8F1oqIDRAN9ARCk0l+DKXUSjO8tspMCr+NYcQkNnzmikgk4AjMVErteUzGXeB/kELyp2WqA7+ntXFKtB4aSLvhbyd8rtW2KrNHLmTOyEWMbDqGXl93YuCc9zi64wSftZyQ0G728AW8N+Vdfjo7majIKBZ8uYzda4wIZTZvD6aHjKdT0T5cC7vO7jXBLPxqGWP+GI6DswNbluxg9vAFCbI+azmBfj/2ZOnNmVw9d51RzcYSft26axPVDCxH3RavYGdvy6Gdpxjc6luio2I4uP0kc8etYsgPHXHzyET4jXss+Hote828j+pvlaV5r9p0q/kFAI06vsYHX7VERLgcdoNJ/edz8C8jTa9uy1fw8vWgdZ/6tO5TP+HYTQr1s6ouyXRr/gp121bGzs6WQ9tPMKjJOKKjYsiQ2ZmBP7yLl282Iu49IOjnrcz+/FEOVfM+r1Pslfx8/PYkAFp91IA2A95MIven/y3np/+toF7bKuT086R1v4a07tcwoc1bPilP/35a/itjEaDmW2Wp27yCcc12nWZw2++Jjorl4I5TzJ24liGTO+DmkZHwm/dZMHkdezcfB6B6o9I071GLbnW/BOCd/g2IfhjD9A2DE2QvmLyOBZPXk8UjE70+bYpHDlceRERxeO9ZhneaRmxM+i2eWKtVFep1rG58z7YcZeDrXxhj0dWFgbN7kTOvJxF3H7B29kZmDX+0jEGLAY0IqFSIIW9+mVBWu21Vtvy6K0nCPUD9jtXJmS87bYY2oc3QJgnljdw7ppteaeFlCsOJUi+PMs8bEZkIrFBKrUsn+b2Ac0qp5ekh3zyGIxCrlIoRkVeAKWbY7F+FqcdGoLJS6kkGpqpt0+w59Or5ERS3CID6ud97wT2xPqvOG4ZLPfeU10P6N7L65lQAXraxCInGo9+HL7gn1mXVmXEA1HFo9YJ7Yn3WRv0MVg5Inj3vZTUDwzf3pRcajNOepb/H5yTPtbEaSqlv0kt2InyAhab3KAojMf3fiA8wMA2Gkkaj0Wg0T4U2lv4GSqkrQLp5fZ4HSqkTGDlD/2pMPZ7PVCSNRqPRPBHbf0BitrXQxpJGo9FoNBqrY5ue0wyfM3o2nEaj0Wg0Gk0qaM+SRqPRaDQaq/MyeWO0saTRaDQajcbq2KZ92Zd/PC+T4afRaDQajUZjdbRnSaPRaDQajdWxeYkSvPWilJr/InrQazQaTXKsat3cvuhttXutW84wvSilRvO8edlW4DVX36VG7dEvuCfW54+ggQDU9x/0gntiXVYdMX4upn7ej15wT6zPqtNjAKhXctgL7ol1WR08CoB6md95wT2xPqvv/PjkRv9htLGk0Wg0Go3G6rxMYThtLGk0Go1Go7E6L9NsOG0saTQajUajsTo2L9GE+5dHE41Go9FoNJp0QHuWNBqNRqPRWB2ds6TRaDQajUaTCrby/IJXItIH6IyxNMxB4B3AC5gPuAN7gbZKqahnka/DcBqNRqPRaP61iEgu4D2grFKqGGALtAD+B4xXShUAbgGdnvUY2ljSaDQajUZjdWys+C8N2AHOImIHuACXgBrAYrN+FtD4WXXRYTiN5gl4F85J74nvUKC0H7ev3WHaoJ/Zumw3APXeqUbzfm/insONQ1uPMbbL99y8dNuinGU3ZyT57ODswIrvgpjcZxY+/rnoP6M7XnmzA3Bi7xkmfziLc0cupJtePj5Zeb9XHQoUzE747Ui+n7qBLVuPkz27K/N+6k5k5CNv9bwF2/lp7jaLcooWyUXP7jXx8cnKpcvhTJy0lkMh5wEoUdyHsV+15OHD6IT2E79ey9qgQ+mmF4B33mz0+LgRBYrmIvzmfaaPWcm2dYep/kZJeo94dL8UG8HJ2YHegV9z8vDFZHJ+2T0iyWcHJ3t+n7edKZ+tSFLeqkdN2vauxaCO0wj+61S66ATgnc+THiObUCAgF+E37jN99G9sW2ucyyqvl6DNB3XwyOHK9UvhzByzkr+CQizKqfJ6CRq/U4W8RXJyfH8YA1pNSVJf4pX8dB70BjnzeBB+6z6LvvuDVfN3pJteAN5+HvQc9AYF/HMSfus+08avZduGI1R/vTjvDW2Y0E7EuGa9Wk7h5JFLyeT0/yyQkuXz4uhsz60b91g8cwurl+5NqC9ZPi89BzUgWw5Xjh26wNhhv3D1Unj66VXQi55j21KgZB7Cb9xl2tCFbPvN6E+9dlV5+8PXyeLpSsj2E4zrMYObly3fP/pP7ULJ1/xxdHHk1tVwFk9YxerZmx7p9Zo/Pce2JVtud47tPs3Y7tO5GnYj3fRKC1fURqvJyinSBeiSqOgHpdQPAEqpCyIyBjgHRAJrgT3AbaVUjNn+PJDrWY+fqrEkIr7AEeCYUqqk+fk3082VJkRkprnP4sfKqwEfKaXeeKoeG/u6Aa2UUpPNz/mAJUB+pVTGp5X3rIjIB8BNpdTsNLTtBkSkpW0aZOUEJimlmv5dWemFiHyIMbCjgThgPTBAKRUtImeBu0Ashrt0qFJqmbmfAn5SSrU1P9thvCHswLjG75uHKAIcM2WsBrYA5ZRSw62ph42tDSOX9OX3H9YzsP7nFK/qz6ilH9G9/GDcc7jR8ZPm9KvzKRdOXKb7uPYMntObj2p9YlFWI/eOCdtOLo4sOD+FzUuMB9CNi7f4pMUEroRex8ZGeLN7HQb/1JtuZQZaU51HetkIn4wMZMVv++g3cD4livvw6ahAunb/keiYOAAaNh5PXFzqv1aQKZMTn44KZMKkNWzecpwa1Yvw2SdNad1uCvfuPTR0u3GX5q0mp4selrCxtWHYt+1YOX8HQzpNJ6CcHyMmt6dX4Nds+C2YDb8FJ7St1bg0rbrXsGgoATQpOyJh29HZnnmbh7B5zcEkbby83alctxg3rt5JF33isbG1YdgP77Dy578Y0u57AirkY8TUjvRqOI4HEVH0G9eSUV1nsnvjUcpV92fwN23pUPVzwm/cSybrbngEv/64Ge98npR4JX+SOls7Gz7+rj3TR//OqnnbKVjcm9Fzu3E0+BxnjiY3Tqyl2/AJrVi5aDeDu80ioIwvIye1pmfzKWxYeYANKw8ktK39ZklavlvNoqEEsGDGJsaP+JXo6Fhy+3rw5bR3OHn0EiePXCKzmwsfj23BhFHL2L7xGO171mDQ/96mT7up6afX/PdYOX0Dgxt9RUDlwoxc8D49qwzHPbsbHYYHMqDB/7hw6grd/teKgTO60v/1/1nWa+xvjO85g+ioGHIXyMGXKwdy8kAoJ4NDyeyekY9/6sWE3j+yfVUw7Yc2YdDM7vSp+Wm66PUiMA2jHyzViUgWoBHgB9wGFgH1LYl51uOnxbd1SilV8lkPkE64AT3iPyilnnsfzYd4R+DntLRXSn1nyVAy5TwVSqmL/wRDSUSqmcbw4+XdgDpARaVUAFAOuAo4J2pW3bxmTYFJicrvA8VEJL5tbeACgFLqR6VUSXO/i/EylFIDgd+BN0XExZo6+hTOSVavLCyZuJK4OEXwn4cJ2XacWq2rULFBaTYt2UHo4QvERMcy9/NfKF7VH6+8nk+UWyWwPLev3uHglqOG0uERXAm9blSKEBsbR8582a2pSlK9fLLikTUji5fsIi5OsS84lJDDF6hdK83vQYDhVbp16z4bNx0jLk6xbn0It8MjqFK5UDr1/Ml4581G1myZWDprC3Fxiv07TnN4Xyg13iyVrG2txqVZt2xfmuRWqRPA7Zv3ObT7bJLy7kPf5Mexq4mJjrVG91PEO58nWT0zs3T6JkOvv05yeM8ZajQug0cON+7fecDujcZ42rXhCA8jovDyyWpRVvDWE2xeuZ8bV5J7VDK5uZAhkzN/LN0DwPEDYYSduopPgfQbj96+HmTNlolfftpm6LbrDCHB56j5RolkbWs1LMX6RAbv44SeukZ0/LVQCpRh0AJUqulP6OmrbA4KIToqhjlTNpC3YA5y+3qkj14Fvciaw41fvl1r6LXpCCE7TlCzxatUqF+Szb/uIvToRWKiY/n5yxUUr1wYL79slvU6epHoKNNJogzdvPyMe02lN8sQevQim3/dTfTDGOZ88St5i3mTu0COdNErrXh5eVllOlwa5NQCziilrimlooFfgFcBt0TP2NwYz41n4llylmxFZKqIhIjI2viHmoiUFJHtInJARJaall4SRKSeiBwVkS1Ak0Tl7iLyq7nvdhEpbpaPEJGPErU7ZHq3RgP5RCRYRL5KrbPmA32jiCwUkeMiMlpEWovIThE5aHqlEJGGIrJDRPaJyDoRyW6WTxKRYeZ2XRHZJCI2GLHQvUqpGBHxFJE9ZpsSIqJExMf8fEpEXBLrIiJ/isjnIrIReF9EsonIEhHZZf5VeoJOviJyyNzuYJ67FSJyRkR6iciHph7bRcTdbPeuKXu/eSwXszyf2W6XiIwSkXuJjtPPLD8gIiNT69NjDAG6K6VuAyilopRSo5VSll69M2Mk3iVmFdDA3G4JzHvSAZXxi9B/Ak/tqUwVCyvQigi+RXMjIkii+vht36LeTxRbu01V1s3dnKz8l6tT+f3uLHpOaM/8/y37Gx1PHUlhSq+f76Mb9fy5PVjwcw/6f/Q6mTM7W2wvIsnOkUhSOW5uGVi8sDdzZ3ejR7eaODnZW0GDlLGomYDvYw97z5xuFCvrx/pley3tkYyajUsna1u5bjFiomPZtenYM/Y27VhcDFkE34I5OHEwjLBTV6hQswg2NsIrtYsSHRXzTJ6g29fvsWH5Xmo3K4eNjVC4VB48c2YhZPeZv69ECljSTUTIkz/pi4enlyvFSudh3YqUjSWAnoPf4Ne/hjJt2fvcvH6XXZtPAJAnnyenj11OaPfwQTSXzt8kT74nv+A8C2Lp/oGQxz+XoXOS+4fxfx7/3CnK6zmuLb9e/o5pe7/g5uVwdq09YO6TvUDy1wAAD65JREFUi9MHzyW0exgRxaUzV8nj/8xRp38b54CK5rNWgJrAYWADxgs5QHvgmW+qz2IsFQC+VUoVxXB3BZrlszHCLMUxpu0lCYeIiBMwFWgIVAESm7wjgX3mvoNNWakxENPjpZTql4Y+l8AI3wQAbYGCSqnywDSgt9lmC4YnpBTGVMP+iY7VXESqY3hA3lFKxQGVMGKiKKWuAk4iktnUbTdQRUTyAFeVUhEW+uSmlHpNKTUWmIiRsV8O43xOS4NOiSkGtALKA59hhPtKAX8B7cw2vyilyimlSmCEVuNnBUwEJprHTrC6RaQOxrUuD5QEyohI1Sd1REQyARmVUk+6s24wDb6NwNDH6uYDLcwxUxwjBJcWdmOcf0v96iIiu0Vk9w8/WPTkWiTs6EVuX71Ds75vYGtnS5laAQRU9cfR2ZGdq4Op2rQifgHeODjZ02ZIE+Li4nB0cUhVZjbvrARU9SdozqZkdU083+Utj858+/5MTgafTXM/n5ZzYTe4dTuC5m9XwNbWhrJlfClR3AdHJzvCwyPo1nMmLVpPpluPmTg7OzBkUEOLckJCzuORNSM1qvtja2tDndrFyOmVBUdHu4TjdOk2g2bNv6Zv/3kULJCD7l1rpJteAGFnrnH75n2adqqKrZ0NpV8tQEBZPxwfM9JqNipNyJ6zXLnwuK2enGxergSU82Pdr4+MJScXBzr0qcv3X/xmdR0sEXbqKrdv3KNpl2qGXpULElA+L47ODoZXb+keBkxozfKjo+k/oTWThi7hYeQzzZJm4/JgWvWuzfKjoxmzoAezxq7iejrm9YSdvW5csw6VDd1eyUdAmTw4OSX9LtV6oyQh+0K5ctFyXk88337+G00qfUbfDtPYuv4I0dGGR8bZ2YH7Zng4nvv3HuKSIfXv7LMSdvwSt6/doen79bG1s6V0jaIEVC6Ek4sju9YeoOpb5fArmhsHJ3taD2hEXFwcTqncP779cA5Ncnanb53P2bpiD9EPTb0yOHL/TmRSve5E4pLRKV30ehr+rncpLfsrpXZgJHLvxbA/bDBCdgOAD0XkJJAVmP6s/XgWY+mMUirerN8D+IqIK8bDPz6baxbw+IO1sLnvCdML8FOiusrAHACl1B9AVlOmtdillLqklHoInMJI/gLjpPqa27mBNSJyEOgHFDX7EwG8CwQB3yil4rM3vYBriY6xDcOAqgp8bv5fBUjuPjBYkGi7FvCNiAQDy4HMptGRVjYope4qpa4B4UB89mli/YqJyGZTv9bx+gGvYMR3IWlIsY75tw9jABbGMJ4wPXDBGEbdm6aHL1hE6mK82CfEhU1vXLCInBWRVxPJr27mvgWYuifkmimlDpj9bgmsfIrzcBXIaalCKfWDUqqsUqpsly5dLDWxSGxMLCOajaVC/VIsCJtM4AcN2LR4O9cv3CB4QwizRy1m2Pw+/HRyEldCrxF59wHXz99MVWbtNlUI2XqMy2evWax/EPGQ335YT/8Z3XHLljnNfX0aYmPjGDZ8CRUr5GPxwt40a1qePzce4dq1uzx4EM3x45eJi1Pcuh3BpG+CKFc2Ly4WbuJ37j5g6PAlNA0sz5KFvSlfLi97953l2vW7ANy6dZ/QczdQCi5fDuf7aRuoWrVwuuiUoFtMHKN6zaH8a4X4efMQmrxTmc2rD3L9sZBTzUalkhg/qVGzUWkO701qWLXpVYs/lu9Lk7FlDWJj4hjVbSblq/vz847hNOn8GptX7uf65duUrFSATgMaMKDVFBoWGsiAllP44Itm5PW3+HVIldx5szHw6zaM6TuPhoUG0rXuGJp2rUa56v7poJVBbEwco/rMo3zlgsxb15/AtpXYvDYk+TVrWJKgJ3iV4omLU4QEn8Mje2beaFYOgMjIKFwyOiZp55LBkYj7z2ZUPonYmFhGtfqa8nWLM+/kBAJ712Pz0l1cv3CT4I1H+OnzXxn6Uy9mh4zhyrnrRN59wLULqd8/4uIUIdtP4JEzC290rm7odf8hLo95f10yORNx70G66PVPRCk1XClVWClVTCnVVin1UCl1WilVXimVXynVzLQBnolnmQ2X+GCxJM1DeRIpJVdZshwVEENSg+5ZzeTEfY5L9DmOR+fga2CcUmq5GMnnIxLtEwDcIOmDOPKx/mzGMI7yYLj6Bpg6pPTaeT/Rtg3wilIqMoW2TyIt+s0EGiul9otIB6DaE2QK8IVS6vvHK5RSFSAhSb+DUqpDkh1F7ouIn1LqjFJqDYYR+huQ7GmrlDolIlcwErZ3JqpaDowx+2k58SI5ThjXxaqcORiWJGl7/MYRrDO9Qiu+C2LFd0EA5CqQg1aDGnPWnAmWErXaVGHBl8tTbSM2gqOLI1lzZeH2tfRJHD595hp9+j6yj7+e0IY1lmapKeNrm1Lo7sCBMHr0mgUYieNzZ3dj4eKdFtsqpZ7Lmr5nj1+mf6Kk3bE/d0tiGBUplYes2TKz5bFk7ZSo2ag0i6b+maSsZMV8eORwpUGLigC4umdg8LhWLJq+kUXTknsNrcHZo5fo3/LRzLWxi3qx7pfd5PPPyaGdpzlx0Bh7xw+EcTT4HKUqFeD0kadL0/At5MWF09fYu/k4ABfOXGPXhiOUfa0wuzYcsZ4yj3HmxBX6d340Y3TcrM6sW/7IMCpS0oes2TKxJYUZfilha2uTkLMUeuoqtRo+yl1zdLLHK3cWQk9d/Zu9T5kzIeeTJG2PCxrCup+3ArBi6h+smPoHALnyZ6dlv4aEpnEGrK2dbULOUuiRC9Rq9Sh7w9HFAS+/bGmWld54eXnJpUuXnjq52lo5T9bAKussKaXCgVsiEh8CaYsRXknMUcAvPkcIw2sQzyYMb0f8A/i6md9yFihtlpfGyHQHYybV03he0oIrZiIxRmwT87h5gL5AKaC+iFQwq44AiaeRbALaACfMMN1N4HVgaxqOvRboleiYJc3/y4vI3549Z5IJuCQi9pjn2mQ7j0KpLRKVrwE6xnt8RCSXiKQ1sP8FMEWMWYuYMWSLhq4p0w8IfaxqBjBKKZW2p5lBQcDqc9L9Aryxd7TH0dmBpn0akDWHG2tnb8Le0R7fokZ+QTbvrHwwuTNLv1nDvdv3U5RVpGIBPHJmYdOSpJHF0jWLka9kHmxsBJdMznT7qg33bt3n3FM+6J6GvH7ZsLe3xdHRjreblsfdPSNr1h6kcGEvvHO7IwKZMznRq2dt9gWHcj/C8ktZ/nzZsbW1wcXFge5da3Dt+l12m/ktJYr74Gl6x7Jly8S7naqx7a8T6aZTPL4Fc2DvYIejkz2B71TBPVsm1pkJy2Akdm8JOkRkxJM9Cv4lffDwzMzm1UmH4qCO0+n+5gR6NZlEryaTuHn1DpNGLGXFz9utrk88voW9HunV+TXcPTOzbskujh8Io2i5vAmepHxFclKsnF+KOUs2NoK9gx22drZIwrbxODgVcoGcvh4Js+S8fLJSvnoRzqTjWATwK5D9kW7tKuHukYmg5Y+S72s1LMmWdYdTvWauWTLwWt1iODk7YGMjlHklP9XqBxC80xiP2/44gm8+TyrVLIK9gx2tu1bjzIkrnD97Pf30Kpobe0c7HJ0dCOxdD/fsrgTN3YK9o11CTlG23O68P7EDv04J4t7t5Fkbrh6ZeC2wPE4ZHA29ahajWtMKBG80jNdtK/bi65+LSm+Wwd7RjtYDGnEm5DznT1xOJkvzbFhznaX2wHdm4vBpjKXGE1BKPRBjnYTfReQ6Ro5Q/NSbEcCPInIAiOCRsbIEaGeGfHYBx01ZN0Rkq5nzsiqNeUtPYgSwSEQuYBgQfuZDfjrGEgcXRaQTMFNEymEkIc9JpN9ZM5kv/pVyC5BbKZUWH/17wLem/namjG6AD9bzlHyMkfsTihGeizc2PwB+EpG+GDPKwgGUUmtFxB/4y9TrHoYxmJZXsCkYi4LtEJGH5r5bMUJ68WwQkVjAHhiolLqSWIBS6jxGPtXTUB0Y9JT7PJFarapQr2N17OxtObTlKANf/4LoqBgyuLowcHYvcub1JOLuA9bO3sis4QsT9msxoBEBlQox5M0vE8pqt63Kll93EfmYezyDWwZ6TuiARy53HkZGcXz3aQY3HE10ovWJrE3tWsV4vX4J7OxsOHAwjH4D5xMdHUtOLzc6vfMabm4uREREsWfvWT79/JEn7IP36wIwYeIaQ8/mFShfPi8Au3adYdiIXxLaFiiQnSGDGpIxoxN37kSyddsJps2w3torKVHzzVLUbVoOOzsbDu05y+BOMxJmSNk72FGlXgCfvT832X7Nu1SjaBlfhnWdmVBWq3Fptq4LSfaQvvvYQy0uTnHvTiQP0mCAPSs1G5ehbvPy2NnZcmjXGQa3+57oqFgO7jzN3IlrGfJtO9w8MhJ+8z4LJv/B3i2Gd6h6o1I0716TbvXGAFDjrTL0/erRu9Hyo6MJWryLcf0XcOncDcYPWEi3YY3xzOVGxN0HbFi+jzULLXsLrabbGyWo+1YZ45rtPcegbrOSXLOqdYryad8FyfZr3qkqxUrl4eNecwBFg2bl6T20ISLC1UvhfPfVKrb/acwSDL8VwacfzafHwAb0/yyQY4fOM3rgomQyrapXi1ep266qcf/46ziDGo8x7x/ODJzeFS8/TyLuPSDopy3M/vTRd6d53wYUe7UgHweOBwUNOlWn9/j2iI1wNewG3w38me0rjVtq+I27fNr2W3qMaUP/qV04tvs0o9+ZklKXXghP6136J3mVAESplPsuz7Cu0otERO4953WWlgL9lVLp8qosxky/OWYOT7pgGreRSiklIi2AlkqpRul1vPRCjNmLPyulaqahuarj0Cq9u/RcWRtlhNNq1B79gntiff4IMtaaqu9vdTv4hbLqyBcA1M/70RNa/vtYddowyuqVHPaCe2JdVgePAqBe5nee0PLfx+o7P0IKk0mtxb/ZWHpSGC4WcDU9O/9YzOnvwcCVJza2LgMxEr3TBaVUv/Q0lEzKAMGmV6sHRsjx34gP/96+azQazUtPWg2gf5qhBE8IwymlwoAnLxrzgjFnqD33hTOVUscwVpH+16KU2oyxtMK/GqXUrhfdB41Go9G8nOgf0tVoNBqNRvNceJLX6J/oVQJtLGk0Go1Go9GkijaWNBqNRqPRPDdS8h79U71KoI0ljUaj0Wg0mlTRxpJGo9FoNJrnyuNepH+yVwmesM6SRvOSoge9RqPRJOe5GiyJ113SxpJGo9FoNBrNvxgdhtNoNBqNRqNJBW0saTQajUaj0aSCNpY0Go1Go9FoUkEbSxqNRqPRaDSpoI0ljUaj0Wg0mlTQxpJGo9FoNBpNKmhjSaPRaDQajSYVtLGk0Wg0Go1GkwraWNJoNBqNRqNJBW0saTQajUaj0aTC/wESqRBfN39NiwAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a1f969a58>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"fig, ax = plt.subplots(1, figsize=(8.5,6))\n",
|
||
"# cmap = haline_r#\n",
|
||
"cmap = plt.cm.get_cmap('viridis_r')\n",
|
||
"cmap.set_under([0.9]*3)\n",
|
||
"\n",
|
||
"hm = sns.heatmap(df_performance_test.append(ds_best_performance_val).drop(\n",
|
||
" ['thr', 'specificity_at_sensitivity100'], axis=1).rename(\n",
|
||
"# index = {'rpart':'RPART', 'gbm':'GBM', 'glmnet':'GLMNet', 'xgb':'XGB', 'gbmt':'GBMT',\n",
|
||
"# 'avg(image)+gbmt':'avg(image)+GBMT',\n",
|
||
"# 'max(max(wire), avg(image)+gbmt)':'max(max(wire), avg(image)+GBMT)',\n",
|
||
"# '[holdout] max(max(wire), avg(image)+gbmt)':'[holdout] max(max(wire), avg(image)+GBMT)',\n",
|
||
"# } \n",
|
||
"\n",
|
||
" index = {'rpart':'RPART', 'gbm':'GBM', 'glmnet':'GLMNet', 'xgb':'XGB', 'gbmt':'GBMT',\n",
|
||
" 'avg(image)+gbmt':'image+GBMT',\n",
|
||
" 'max(avg(image), max(wire))':'max(image, wire)',\n",
|
||
" 'max(max(wire), avg(image)+gbmt)':'max(wire, image+GBMT)',\n",
|
||
" 'max(wire, image+gbmt)':'max(wire, image+GBMT)',\n",
|
||
" '[holdout] max(max(wire), avg(image)+gbmt)':'[holdout] max(wire, image+GBMT)',\n",
|
||
" } ),\n",
|
||
" annot=True, fmt=\".2f\", \n",
|
||
" annot_kws={\"size\": 12, #'weight':'bold'\n",
|
||
" },\n",
|
||
" cbar_kws={'extend':'min', 'ticks': np.arange(80,100+1, 5)},\n",
|
||
" linewidths=.75, cmap=cmap, vmin=80, vmax=100, ax=ax)\n",
|
||
"ax.xaxis.tick_top()\n",
|
||
"ax.set_ylabel('')\n",
|
||
"locs, labels = plt.yticks()\n",
|
||
"plt.setp(labels, rotation=0)\n",
|
||
"plt.tight_layout()\n",
|
||
"plt.savefig(f\"./img/all_model_performance-{tag}.eps\",)\n",
|
||
"plt.savefig(f\"./img/all_model_performance-{tag}.tiff\", dpi=300)\n",
|
||
"pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 63,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"auROC 99.73\n",
|
||
"auPRC 95.95\n",
|
||
"F1 97.74\n",
|
||
"precision 98.18\n",
|
||
"recall 97.30\n",
|
||
"accuracy 99.30\n",
|
||
"thr 50.00\n",
|
||
"specificity_at_sensitivity100 88.25\n",
|
||
"Name: [holdout] max(max(wire), avg(image)+gbmt), dtype: float64"
|
||
]
|
||
},
|
||
"execution_count": 63,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"ds_best_performance_val"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Calibrate threshold for the whole dataset"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>accuracy_score</th>\n",
|
||
" <th>average_precision_score</th>\n",
|
||
" <th>f1_score</th>\n",
|
||
" <th>precision_score</th>\n",
|
||
" <th>recall_score</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0.010000</th>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>0.268765</td>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020697</th>\n",
|
||
" <td>0.156643</td>\n",
|
||
" <td>0.155462</td>\n",
|
||
" <td>0.269091</td>\n",
|
||
" <td>0.155462</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020780</th>\n",
|
||
" <td>0.158042</td>\n",
|
||
" <td>0.155680</td>\n",
|
||
" <td>0.269417</td>\n",
|
||
" <td>0.155680</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020882</th>\n",
|
||
" <td>0.159441</td>\n",
|
||
" <td>0.155899</td>\n",
|
||
" <td>0.269745</td>\n",
|
||
" <td>0.155899</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.022620</th>\n",
|
||
" <td>0.160839</td>\n",
|
||
" <td>0.156118</td>\n",
|
||
" <td>0.270073</td>\n",
|
||
" <td>0.156118</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" accuracy_score average_precision_score f1_score precision_score \\\n",
|
||
"0.010000 0.155245 0.155245 0.268765 0.155245 \n",
|
||
"0.020697 0.156643 0.155462 0.269091 0.155462 \n",
|
||
"0.020780 0.158042 0.155680 0.269417 0.155680 \n",
|
||
"0.020882 0.159441 0.155899 0.269745 0.155899 \n",
|
||
"0.022620 0.160839 0.156118 0.270073 0.156118 \n",
|
||
"\n",
|
||
" recall_score \n",
|
||
"0.010000 1.0 \n",
|
||
"0.020697 1.0 \n",
|
||
"0.020780 1.0 \n",
|
||
"0.020882 1.0 \n",
|
||
"0.022620 1.0 "
|
||
]
|
||
},
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# df_val[\"score_max_wire_img+gbmt\"]\n",
|
||
"# df_val.label\n",
|
||
"cc = \"score_image+gbmt\"\n",
|
||
"df_thr_calibration = {}\n",
|
||
"\n",
|
||
"label = df_val[\"label\"]!= 'normal'\n",
|
||
"# _,_, thresholds = roc_curve(label, df_val[cc])\n",
|
||
"\n",
|
||
"thresholds = df_val[cc].unique()\n",
|
||
"thresholds = thresholds[(thresholds<=0.5) & (thresholds>=1e-3)]\n",
|
||
"thresholds = sorted([0.01] + thresholds.tolist() + [0.5])\n",
|
||
"# thresholds = thresholds[::-1]\n",
|
||
"# thresholds = thresholds[thresholds<=0.5]\n",
|
||
"\n",
|
||
"# for thr in [0.01, 0.02, 0.03, 0.04] + np.arange(0.05, 0.55, 0.05).tolist():\n",
|
||
"for thr in [0.01] + thresholds:# np.arange(0.01, 0.51, 0.01).tolist():\n",
|
||
" mdict = {}\n",
|
||
"\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_val[cc]>thr)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" df_thr_calibration[thr] = pd.Series(mdict)\n",
|
||
" del mdict\n",
|
||
"df_thr_calibration = pd.DataFrame(df_thr_calibration).T\n",
|
||
"df_thr_calibration.to_csv(\"threshold_calibration_{}.csv\".format(cc))\n",
|
||
"df_thr_calibration.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 65,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAEfCAYAAACXuWs2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XmcHFW5//HPtyeBkBBCyGJYEgKC7IiQKCASXDB4FVGiggiCKChw9aIi/q6iN15BQERBFBRRkC2yXlSuFxExIASX4AIiCRJDICGBJEg2kpDl+f1xakjTzEx6Zrq6a7q/79erXjNddbrqqZqeeeacOnWOIgIzM7M8lRodgJmZNT8nGzMzy52TjZmZ5c7JxszMcudkY2ZmuXOyMTOz3DnZmPWQpA9JurPRceRB0lhJIalfo2Ox5uBkY9ZDEXFdRLy90XH0BZKmSvpYo+OwxnGysZampGl/DySdIOmqRsdh1rS/ZNZcJH1e0jxJyyTNlPRWSW2SviBpVrb+QUmjs/IHSvqjpCXZ1wPL9jVV0jmS7gdeAHaUNETSDyXNz45ztqS2jcR0gqT7yl6HpFMl/SOL56uSXi3pAUlLJd0oaZOs7FBJt0taKOlf2ffble1rB0n3Zvu5S9J3JV1btn1/SdMkPS/pr5IO6cE17fIYmRMlPZ1dl8+WvXeypJskXZu9/2FJr5H0n5KelfSUpLdnZc8B3gR8R9JySd/pbqzWBCLCi5dCL8AuwFPANtnrscCrgc8BD2fbBbwWGAZsBfwLOA7oB3wwez0se/9U4Elgj2x7f+A24PvAIGAk8Afg4xuJ6wTgvrLXAfwM2CLb92rg18COwBDg78DxWdlhwCRgIDAYuAm4rWxfDwDfADYBDgKWAtdm27YFFgP/RvqH8dDs9YhOYryqk/i7OsbY7HymZNdkL2Ah8LZs+2RgFTAxu4ZXA7OBL2bX8yRgdtmxpgIfa/RnyUvjFtdsrC9YB2wK7C6pf0Q8ERGzgI8BZ0XEzEj+GhGLgXcC/4iIayJibURMAWYAh5ft86qIeCQi1pKS0zuA0yNiRUQ8C3wLOLoHsZ4fEUsj4hHgb8CdEfHPiFgC/B/wOoCIWBwRt0TECxGxDDgHmAAgaQwwHvhyRLwYEfeRkli7Y4FfRMQvImJ9RPwKmE5KPlWp4hjtvpJdk4eBK0mJu91vI+KX2TW8CRgBnBcRa4CfAGMlbVltTNbc3NPECi8iHpd0Oum/6T0k/RL4DDAamNXBW7YB5lSsm0OqEbR7quz77Un/jc+X1L6uVFGmWs+Ufb+yg9ejACQNJCW0w4Ch2fbBWdPdNsBzEfFCRbyjy+J9v6Ty5Nkf+E2270uBY7L1mwD9JL0ne/1kROxdxTHK17WbQ6rhdHauiyJiXdlrgM2B57GW55qN9QkRcX1EHET6QxvA+aQ/hK/uoPjTWblyY4B55bss+/4pUpPX8IjYMlu2iIg9anYCr/RZUvPfGyJiC+DgbL2A+cBWWUJqV54EngKuKYt1y4gYFBHnAUTEqe3rgVOB68vK7Z3tY2PH6GjdGNK17QkPL9/inGys8CTtIuktkjYl3SdYSWpauwL4qqSds15le0saBvwCeI2kYyT1k3QUsDtwe0f7j4j5wJ3AhZK2kFTKbuxPyPG0Bmfn8bykrYD/KotnDqlZbLKkTSQdwMubAK8FDpc0MeskMUDSIeUdDDamimO0+5KkgZL2AD4C3NDdE808Q7p3ZS3Kycb6gk2B84BFwALSDfwvAN8EbiQliqXAD4HNsvs27yLVHhYDZwLviohFXRzjw6Qmp7+TOhPcDGydx8lkLgI2I53T74A7KrZ/CDiAFP/ZpD/yqwEi4ingCNI1WEiq6XyO7v8+d3qMMvcAj5M6OnwjInr6EOvFwPuynnff7uE+rA9ThGu3ZkUn6QZgRkT810YLF/gY1rpcszErIEnjs6a8kqTDSDWZ2/raMczauTeaWRckfY/U1bjStRHxiRwPPQq4lfQ8zlzglIj4cx88hhngZjQzM6sDN6OZmVnuWq4Zbfjw4TF27NhGh2Fm1mc8+OCDiyJiRG/20XLJZuzYsUyfPr3RYZiZ9RmSKkfk6DY3o5mZWe6cbMzMLHdONmZmljsnGzMzy52TjZmZ5a7uyUbSwZJ+lk29G5JOqNiubMrZpyWtVJrCd4+KMkMlXaM05e+S7HtP0mRmVlCNqNlsTprB8D/YMMFSuTNJo/V+kjST4LPAryQNLitzPbAvaXbFw7Lvr8kxZjMz64W6P2cTEb8gzTeCpKvKtylNk3g6aWrZW7J1x5MSzjHA9yXtRkowB0XEtKzMx4HfStolImbmGf8zS1dx3e963eW86W01aBOOP3AsZTNfmlkLK9pDnTuQBgd8ac6MiFgp6V7gQOD7pPk3lgPTyt53P7AiK/OKZCPpZOBkgDFjxvQqwIXLVnPJbx7v1T6aXftwe2/Z9VWMGTaw68Jm1hKKlmxGZV+fqVj/DBvmjx8FLIyyEUQjIiQ9W/b+l4mIy4HLAcaNG9erkUf33HYIs899Z2920fRu+/M8Tr/hL6xdv77RoZhZQRS1N1plQlDFuo4SRmUZa5D2ljP/MMysXdGSzYLsa2UNZSQbajsLgJEquxmQfT+CV9aIrAHafzSevcLM2hUt2cwmJZND21dIGgC8iQ33aB4g9Wg7oOx9BwCDePl9HGuQ9v8CPFeSmbWr+z0bSZsDO2UvS8AYSfsAz0XEk5IuAr4oaQbwGHAWqUPA9QAR8aikO0g9004i/W37PnB73j3RrDql9ppNg+Mws+JoRM1mHPDnbNkM+Er2/X9n278OfBP4LjAd2Bp4e0QsK9vHh4C/knqt/TL7/rh6BG8b197Aud41GzPLNOI5m6lsaGnpaHsAk7OlszLP0fG88FYApfYOAs41ZpYp2j0bawop27hmY2btnGys5lyzMbNKTjZWc+76bGaVnGys5l7q+uz+aGaWcbKxmitln6r1zjVmlnGysZoT7c1ozjZmljjZWM15bDQzq+RkYzW3oYOA042ZJU42VnPu+mxmlZxsrOba79k8On9pgyMxs6JwsrGaG73VZgD85aklDY7EzIrCycZqbvthg9hmyICXmtPMzJxsLBeS/JyNmb3EycZyIXkEATPbwMnGclGS3BvNzF7iZGO5kDzFgJlt4GRjuXDNxszKOdlYLlyzMbNyTjaWC9dszKyck43lQrg3mplt4GRjuShJrF/f6CjMrCicbCwXvmdjZuWcbCwXJcmNaGb2Eicby4Xk+WzMbAMnG8tFyWOjmVkZJxvLRck1GzMr42Rj+XDNxszKONlYLkqCx59dzjW/m9PoUMysAAqZbCQNlnSRpDmSVkqaJml82fbNJV0iaW62faakTzcyZnu5140eysLlq/nSbX9zc5qZ0a/RAXTiCmBv4HhgLnAscJek3SNiHvBN4G3AccBs4GDgB5IWRcQ1DYrZynz58N0Zsll/vnXXY0Sk3mlm1roKV7ORtBkwCfh/ETE1Ih6PiMnA48ApWbEDgWsi4jcR8UREXA38DnhDQ4K2DrUnGNdrzKxwyYZU22oDVlWsXwkclH1/H3C4pNEAkg4E9gHuqFeQtnGlLNl4JAEzK1yyiYhlwAPAWZK2ldQm6VjgAGDrrNingL8AT0paA9wDfD4ibu9on5JOljRd0vSFCxfW4SwMQFnVxrnGzAqXbDLHAetJ92tWk5LLFGBdtv2TwBuBdwP7AZ8GviHpsI52FhGXR8S4iBg3YsSIvGO3jFyzMbNMITsIRMQsYIKkQcAWETFf0g3A7OyezrnA+yPi59lbHpK0D3AGbkorDOFeAWaWFLVmA0BErMgSzVBgIvBToH+2rKsovo6Cn0+r8T0bM2tXyJqNpImkxDED2Am4AJgJXBkRayTdA5wnaTkwB5gAfBg4s0EhWwde6o3mXGPW8gqZbIAhpKay7YDngFuAL0bEmmz70dn264CtSAnnS8B36h+qdaaUZRvXbMyskMkmIm4Ebuxi+wLgI/WLyHrDqcbMfI/DctNeswlPD23W8pxsLDcbRhBw3cas1TnZWG7aOz57qgEzc7Kx3JRK7SMIONuYtTonG8uNazZm1s7JxnLz0thovmdj1vKcbCw37R0E7n702cYGYmYN52Rjudl11BYA3Pzg3AZHYmaN5mRjudlv+6G8cadhbkQzMycby1dJYp17CJi1PCcby1VbSR4bzcycbCxfba7ZmBlONpazUsnJxsycbCxnbXIzmpk52VjO2lyzMTOcbCxnpZI8XI2ZOdlYvtqEazZm5mRj+XIHATMDJxvLmTsImBk42VjO3EHAzKAHyUbSppK+Iun3kv4g6auSBuQRnPV9JY8gYGZAvx685yLg9cCVwGDg34FRwEk1jMuahEcQMDPoItlIGh0RT3Ww6b3AHhGxOCv3KHAFTjbWATejmRl03Yz2iKQzJbVVrF8BbFP2emvghZpHZk2hJD9nY2ZdJ5tDgaOAv0o6uGz9t4H7JN0k6RfAxdk6s1doK8Hy1WtZsGRVo0MxswbqNNlExO+B8cD3gdsk/VjS8Ii4GHgfMAf4O/DuiPhGXaK1PmfMsEEA3PuPhQ2OxMwaqcveaBGxPiIuAXbLys6U9ImI+FVEnJEtd9QlUuuT3rLrSADCPdLMWlpVXZ8j4pmIOA44Ejgt6/K8b76hWTNQ9tW5xqy1dZlsJH1Y0hRJ/yPpTOAPwOuAm4C7JV0iaYt6BGp9U0kp3TjXmLW2TpONpK8BlwDPA7OA04CfRcTaiLgA2JPUE22mpA/VMihJgyVdJGmOpJWSpkkaX1HmNZJulfS8pBck/UnSbrWMw3ovyzV+sNOsxXX1UOeJwMkRcQOApO+REsvoiHgqIuYC75M0kZSUrqthXFcAewPHA3OBY4G7JO0eEfMk7QDcD1wNvIWUEHcFltcwBqsBN6OZGXSdbNYAm5e9Hkz627GmvFBE/FLSnrUKSNJmwCRgUkRMzVZPlnQ4cApwFnAOcGdEfLbsrf+sVQxWO3IzmpnR9T2bi4DLJN0u6SbgbuDGiFhQWTAiXqxhTP2ANqDywYyVwEGSSsDhwN8l3SFpoaQ/SjqqhjFYjbQ3o7k3mllr6+o5mwuBw0jP0swDTgWOyTugiFgGPACcJWlbSW2SjgUOIN0jGkmqcX0BuJP08OkU4DpJ7+pon5JOljRd0vSFC/28Rz25Gc3MYCMDcUbE3aQaTb0dB/yIdL9mHfAnUkLZlw0J8qcR8c3s+79IGkfqxHB75c4i4nLgcoBx48b5z14dvdQbzdnGrKUVcj6biJgVERNINZjREfF6oD8wG1gErCXVuMo9Coypa6C2URt6ozU2DjNrrEImm3YRsSIi5ksaCkwk1WZeBP4I7FJR/DWkIXSsQIQ7CJhZz+azyV3WnboEzAB2Ai4AZpLm0AH4OnCjpN+SmvneDBwNvKf+0VpXlP0742Y0s9ZW1JrNEOA7pGRzNXAf8PaIWAMQEbcBJwNnAA8DnwQ+HBH/25hwrTPuIGBmUNCaTUTcCNy4kTJXAVfVIx7ruQ3P2TjbmLWyotZsrEmUXnrOprFxmFlj9TrZSLpb0nWS9qtFQNZc2jsIuDeaWWurRTPajqRBOT8o6c6IOKwG+7Qm0d71+ad/mccjTy95af1bdh3Jkftu16CozKzeep1sImIspFGYgYO7Lm2tZtN+Jd6y60ieWLyCv89fCsCCJauYvWiFk41ZC6lZB4GIeAx4rFb7s+YgiR+d8LLZIfj4NdOZs/iFBkVkZo3gDgJWd20lsc43ccxaSqc1G0ndGRMtIuKtNYjHWkBbqeRkY9ZiumpGK1H9KCPaeBGzpF9JrHWyMWspnSabiDikjnFYCynJzWhmrcb3bKzu+vmejVnL6eqeTbe6MUfEvb0Px1pBW5ub0cxaTVf3bKZS3T0bZeXaahGQNb82ifUev8aspXSVbN5ctyispbSVxNp16xsdhpnVUVcdBO6pZyDWOnzPxqz1uIOA1V1bSaxzM5pZS6l6uBpJewIfJU3HPKBisx/qtKp5BAGz1lNVspH0BuAe4AlgZ+AhYCgwBpgLPJ5TfNaE/FCnWeupthnta8CtwB6k3mcfzUZ7fhupF9rZuURnTalUEhGw3gnHrGVUm2z2Bq5lQ1foNoCIuJuUaM6tfWjWrPpl03f6vo1Z66g22fQHVkTEeuA5YOuybTNJk6eZVaWtlD52vm9j1jqq7SAwC9g2+/4h4ERJt2evPwIsqHVg1rzasn9xTrvuT7SVhAQnvnEH3rDjsMYGZma5qTbZ/Bw4BLiedP/mf4GlwDpgc+BTeQRnzWnc2K3Ya9shzHt+JQCPPbOMkYMHONmYNbGqkk1ETC77/i5J+wOTgIHAHRFxZz7hWTPad8xQfv7Jgza8/uqviKpnszCzvqhH00JHxJ+BP9c4FjMza1JVdRCQtL+kD3Sy7f3ZczhmPSLAHdPMmlu1vdHOJT1j05HdcNdnMzPrQrXJ5rXA7zrZ9gfSczhmPSJVP/+4mfVN1SabAV2UbQMG1SYca01qdABmlrNqk82jwLs72fZu0oOdZj3mezZmza3aZPM94CRJF0h6jaSBknaWdAFpJOhLaxmUpMGSLpI0R9JKSdMkje+k7OWSQtIZtYzB6keu2Jg1vWqfs/mBpF2ATwOfKd8EfCsiLq9xXFeQ7gMdTxpV+ljgLkm7R8S89kKS3geMB56u8fGt7ly1MWtmVT9nExFnSLoMOBTYClgE3BUR/6xlQJI2Iz0wOikipmarJ0s6HDgFOCsrtz1wMWnk6f+rZQxWX67YmDW/bj3UGRGzSOOk5akfqdPBqor1K4GDACT1A6YAZ0fEo3I7TJ/nezZmza3qaaElDZL0KUk3S7pb0s7Z+qMl7VqrgCJiGfAAcJakbSW1SToWOIANo01/BVgcEZdVGfvJkqZLmr5w4cJahWo14v8VzJpftSMIjCaN9nwBaabOCcDgbPObgVrfnD8OWE+6X7OaNNDnFGCdpAnACcCJ1e4sIi6PiHERMW7EiBE1DtV6S8g1G7MmV23N5kLSH/2dgf14eTP7PcDBtQwqImZFxATSiNKjI+L1pDl1ZpOS29bAfElrJa0FtgfOlzS3lnGYmVltVHvP5lDg5Ih4UlJbxbZ5bJjrpqYiYgWwQtJQYCJwJnAbcHNF0V+Saj4/yCMOy1caQcBVG7NmVm2y2QRY1sm2IcCa2oSTSJpIqnXNAHYiNd/NBK6MiDXAsxXl1wALIsIPl5qZFVC1yeYhUnfkOzrY9g7gwZpFlAwhDe65HWka6luAL2aJxpqMgHsfW8TxP/pDzff9+h224rQ371Tz/ZpZ91SbbC4Abs66GF+frdtd0hGkEQQ6G8qmRyLiRuDGbpQfW8vjW30d8bptmTZrMc+vrO3/Ek899wIzFix1sjErgGpHELhV0qnAeWzoBXY1qWnt3yOioxqPWVU+f1jNes6/zH/e+hC/fvTZjRc0s9x1ZwSB70m6hvS8y0hgMTAtey7GrHAksd79DswKYaPJRtImwA2kMdDuBe7KPSqzGigJwg/wmBXCRp+ziYgXSeOPVT3agFkRlCTWO9mYFUK1CeR+YP88AzGrtZKb0cwKo9p7Np8FbpO0nPRQ5XwqxoSPiPU1js2sVyRcszEriGprNg8DryYN6T8HeJH0IGf78mIu0Zn1Qkkec82sKKqt2fw3nt3K+piSazZmhVHtczaTc47DrObcQcCsONzDzJqWn7MxKw4nG2tafs7GrDicbKxpuYOAWXE42VjTcgcBs+JwsrGm5Xs2ZsXhZGNNq5SmxPB9G7MCcLKxplVKuca1G7MCqHqKAbO+JqvY8MEf/O6lxHPMG7bn3a/dpnFBmbUo12ysaR208wgOfPUwINVu/vrUEn7x0PwGR2XWmlyzsaa1z+gtuf6kDYOVT/zWvQ2Mxqy1uWZjZma5c7IxM7PcOdmYmVnunGzMzCx3TjZmZpY7JxszM8udk42ZmeXOycbMzHLnZGNmZrlzsjEzs9wVMtlIGizpIklzJK2UNE3S+Gxbf0nnS3pI0gpJ8yVdL2lMo+M2M7OOFTLZAFcAE4Hjgb2AO4G7JG0LDAT2Bc7Jvh4BjAbukOSx3szMCqhwf5wlbQZMAiZFxNRs9WRJhwOnRMRZwKEV7/k48AiwG/BwHcM1M7MqFLFm0w9oA1ZVrF8JHNTJe7bIvv4rr6DMzKznCpdsImIZ8ABwlqRtJbVJOhY4ANi6srykTYALgZ9HxNyO9inpZEnTJU1fuHBhnuGbmVkHCteMljkO+BEwF1gH/AmYQrpH85LsHs21wJbAuzvbWURcDlwOMG7cOE8S3MIe+Odijrz0/rofd+TgAXz7g69jk36F+//OrC4KmWwiYhYwQdIgYIuImC/pBmB2e5ks0UwhdSA4JCIWNyZa6ys+MH40U2c+W/fj/uuFF7njkQXMXLCMvbYbUvfjmxVBIZNNu4hYAayQNJTUO+1MSN2fgZ8Ae5ISzYLGRWl9xUcP2oGPHrRD3Y87a+Fy3nrhPcxYsNTJxlpWIZONpImk+0kzgJ2AC4CZwJVZjeYmYDxwOBCSRmVvXRIRKxsQslmnxg4bxKb9SsxYsKzRoZg1TFEbkIcA3yElm6uB+4C3R8QaYDvSszXbAA8C88uWoxoSrVkX2kriNa8azEwnG2thhazZRMSNwI2dbHsCUF0DMuulXUcN5jcz3RPSWldRazZmTWWXUYNZtHw1i5avbnQoZg3hZGNWB7ttnZ47dlOatSonG7M62GXUYAAenb+0wZGYNYaTjVkdDN98U4ZvvqlrNtaynGzM6mTXUYPd/dlalpONWZ3sOmowjz2zjHXrPWKStR4nG7M62WXUYFavXc8Ti1c0OhSzunOyMasT90izVuZkY1YnO43cnJJghnukWQtysjGrkwH929hh+CB3ErCW5GRjVke7jtrCycZakpONWR3tMmowTz73AitWr210KGZ1VciBOM2a1a7ZSAJHfPd+NvWsnYXUVhLH7r89Hxg3utGhNBUnG7M6OuDVwzhin21csymwp59fxZk3P8TsRSv43Nt3oVTyIPO14GRjVkeDB/Tn4qNf1+gwrAtr163nv372CJdNncWTi1/gwg+8lgH92xodVp/nZGNmVqZfW4mz37MnOwwfxDm/eJSnl6zkBx8ex/DNN210aH2aG43NzCpI4mNv2pHLPrQfj85fynsvvZ/Hn3Uvwt5wsjEz68Rhe47ihpMPYOWL6zny0mlMm7Wo0SH1WU42ZmZdeO3oLbnttAMZNWQAH/7hH7hp+lONDqlPcrIxM9uI7YYO5OZTDmT/HYfxuZsf4sI7ZxLh0bu7w8nGzKwKWwzoz5UfGc9R40Zzyd2Pc/oNf2HVmnWNDqvPcG80M7Mq9W8rcd6kvRg7fBDn3zGDp59fyfePG8dWgzZpdGiF55qNmVk3SOKUQ17Nd4/Zl7/OXcKRl97PPxcub3RYhedkY2bWA+/ce2umnLQ/y1at5cjLpvGH2c81OqRCc7IxM+uh/bYfyv+c+kaGDdqEY6/4Pbf9eV6jQyosJxszs14YM2wgt57yRvbbfiin3/AXLr7rH+6p1gEnGzOzXhoysD8/PvH1TNp3O75112N89qa/8uLa9Y0Oq1DcG83MrAY26VfiG+/fm7HDBnLhrx7j6edX8r1j92PLge6pBq7ZmJnVjCQ++dadufjoffjTnOc58rJpzFm8otFhFUIhk42kwZIukjRH0kpJ0ySNL9suSZMlPZ1tnyppj0bGbGbW7oh9tuW6k97Av1a8yHsvncaDc9xTrajNaFcAewPHA3OBY4G7JO0eEfOAM4HPAicAM4EvA7+StEtEeGhWM2u48WO34tZT38iJV/2RD17+e7YfNrDRIfXIUeNrM2Np4ZKNpM2AScCkiJiarZ4s6XDgFElfAk4HzouIW7L3HA88CxwDfL/+UZuZvdIOwwdx6ykHcuGvZvLcihcbHU6P1Goen8IlG1JMbcCqivUrgYOAHYBRwJ3tGyJipaR7gQNxsjGzAhk6aBPOfs9ejQ6j4Qp3zyZrBnsAOEvStpLaJB0LHABsTUo0AM9UvPWZsm0vI+lkSdMlTV+4cGFeoZuZWScKl2wyxwHrSfdrVgOfAqYA5UOsVj41pQ7WpYIRl0fEuIgYN2LEiBzCNTOzrhQy2UTErIiYAGwOjI6I1wP9gdnAgqxYZS1mJK+s7ZiZWQEUMtm0i4gVETFf0lBgIvBTNiScQ9vLSRoAvAmY1pBAzcysS0XsIICkiaREOAPYCbiA1MX5yogISRcBX5Q0A3gMOAtYDlzfoJDNzKwLhUw2wBDgXGA74DngFuCLEbEm2/51YDPgu8BQ4PfA2/2MjZlZManVRicdN25cTJ8+vdFhmJn1GZIejIhxvdlHoe/ZmJlZc2i5mo2kJcA/NlJsCLBkI2WGA4tqElTxVHP+eRsDPJnTvmt1fr2JsbsxdKd8tWU3Vq6ZP+Pgz3m1xpByRe+eG4mIllqAy2tUZnqjz6WR16gOMSws+vn1JsbuxtCd8tWW3Vi5Zv6M1/Jz0MsYmvpzXr60YjPaz2tUppkV4fyfz3HftTq/3sTY3Ri6U77askX4OTdSEc6/2T/nL2m5ZrRakTQ9ennDzDrXF65vX4ixN5r9/IqgL1zjWsXYijWbWrm80QE0ub5wfftCjL3R7OdXBH3hGtckRtdszMwsd67ZmJlZ7pxszMwsd042ZmaWOycbQNKpkmZLWiXpQUlv2kj5CVm5VZL+KekTFdsPlvQzSfMkhaQTcj2BPiCHa3yapIckLc2WByS9s2AxTs5+/uXLgs72V2/dOV9JW0u6XtIMSeskXVXHUPukbl7fCZKmSVosaWV2nc8oYJyHdPCZDkm7bvRAjX6oqdELcBSwBjgJ2A24hDSC9JhOyu8ArMjK7Za9bw0wqazMvwFfA94HvACc0OjzbMJrfATwDtKo4K8BzsnK7F2gGCeTRi4fVbaMaPTPo4fnOxb4NnACaSqPqxp9DkVeenB99wOOBvbIPlvHZp+vUwsW5yGkSSp3r/hct230WI3+oTR6IY0Y/YOKdf8Azu2k/PnAPyrWXQE80En55U42+V7jsjLPAR8vSoxZsvlbo69/Lc63otztTjb5Xd+y8rcCU4oUZ1myGd7dY7V0M5qkTUjLHPBxAAAGqElEQVT/UdxZselO4MBO3nZAB+V/CYyT1L+2EfZ99bjGktokHU2a2bXbE+jlHOOOWXPqbEk/kbRjd+OrtR6er1WpFtdX0uuysvfUNrqXHaM3cU6XNF/SryW9uZrjtXSyIQ002MYrp5N+hldOO91uVCfl+2X7s5fL7RpL2kvScmA18D3gvRHxcIFi/D2p2ekdpGaKUcA0ScN6EGMt9eR8rXo9vr6S5kpaDUwHLo2I7+UTItCzOOcDpwCTgCNJk1r+WtLBGztYUSdPq7fKJ1vVwbqNle9ovW2QxzWeCewDbEn68P9Y0iER8bcixBgR//eyjdLvgH8CxwPf7GGMtdTd87Xu6cn1fROphr4/cL6k2RFxTR7Blak6zoiYSfq9a/eApLHAGcC9XR2k1ZPNImAdr8ziI3lltm+3oJPya4HFNY2uOeR2jSPiReDx7OV0SeOBTwMfLUqM5SJiuaRHgJ27GV+t9eR8rXo9vr4RMTv79mFJryLd98sr2dTqc/B7UueGLrV0M1r2x+pB4NCKTYfSedv/A8DbOig/PTZMW22ZOl/jErBpUWOUNADYldQU0TA9PF+rUg2vb48+z9WqYZz7UM1nutG9Nhq9kLr+vQh8jNT172JSD7Lts+1XA1eXlW/v8npRVv5j2fvLu7xunv0A9iF1ff5y9n2H3QmbfcnpGp9HanIYC+wFnAusB95RoBi/AUzIyr6B1Itrafs++9LPJFvX/pm+F/hZ9v3ujT6XIi49+Dx9EngXqda7M6l2vhQ4r2Bxng68J4txj+z3LoAjN3qsRv9QirAApwJPkG40PwgcXLZtKjC1ovwE4E9Z+dnAJyq2H5L9ACqXqxp9rk10ja8C5mTbnwXuAiYWLMafAE9nv8zzgFuK9Me5B+fb0Wf6iUafR1GX7lzf7I/4I6R/YJZkn6tTgVLB4jyT1HS9kvSowW+Bf6vmOB712czMctfS92zMzKw+nGzMzCx3TjZmZpY7JxszM8udk42ZmeXOycbMzHLnZGMtSdJ7JH2mYl37xFCVIwPUnaSxWSwfq/H+Tqii7BOeHM1qzcnGWtV7gM9stJSZ1YSTjVkNZHPqtPrAtmadcrKxlpM1ER0PbFs2h/oTZUUGSvqOpEWSFkq6VtKWFfsISedI+n+SZpOGpNkr2zZc0mXZpGmrs/nkT654/yhJP5b0dFZmvqTbJY2sCLdN0n9n25+X9HNJ21Xsq7+ks7Pmrxezr2dXM5mfpP/Iyq+SNL2r+efNesP/iVkr+iowAhgPvDtbtxoYkn1/MWnQzGOAXYCvk4ZiP75iPyeQ5qc5gzSm1dOStgDuBzYjDQ8/G5gIXCZp04i4JHvvNcD2wOeAp4BXAW8FBlYc4z9JI/CeSBr6/ULgOtK4bO1+DHwA+BpwH2kW0bOAHbNz6JCkj5IGEr0KuAHYCZgCDO7sPWY91ujB6rx4acRC+gM7t2LdIaTBJX9csf47wCpIYwlm64I0yOZmFWW/lJXduWL9D0jzh/TLXi8HPtVFfGOzY9xTsf6MbP022es9s9eTK8qdla3fu2J/J2SvS6Qkd0fF+46ixQeN9ZLP4mY0s1f634rXD5PmFXlVxfo7ImJlxbrDSJNJzZbUr30BfgkMA3bPyv0R+FzWjLWXJNGxjmIBGJN9bZ+O99qKcu2vJ9Cx7bLlxor1t5AmgDOrKScbs1d6ruL16uzrgIr1HU0YNZKUANZULDdl24dlX48izQlzJvAQME/SlyVV/k5uLJatOollQcX2SltnX182I2NEeMZZy4Xv2Zj1XEfzcywmza/zH528ZyZARDwLnAacJmkX0v2grwALgcu6EUN7MhoFzCpb3z7Vb2eJoz05vay2ltXChr2yuFnvuGZjrWo16SZ+rd1Bmvr5yYiY3sGyrPINETEzIr4A/It0D6Y77sm+Vs4B/6Hs672dvG8u6Z7NByrWT8L/hFoO/KGyVvV3YCtJpwDTSTf1a+FbpCay30r6FqkmM4iUgN4UEUdIGkKaWfQ6YAapme0IYChwZ3cOFhGPSJoCTM5qJdNIvdG+BEyJiIc6ed96SV8BrpB0JWlW0Z1Ivd+WdvOczTbKycZa1RXA/qTuwluSppg+obc7jYglkg4Evgx8HtgWeJ6UdG7Jiq0iTft7Eqn78/ps+4ci4qc9OOzxpC7YJ5J6oT0NnE9qlusq1h9K2pw0ksIHgb+RakiVnQ3Mes3TQpuZWe58z8bMzHLnZGNmZrlzsjEzs9w52ZiZWe6cbMzMLHdONmZmljsnGzMzy52TjZmZ5e7/A5I1o23jSoQAAAAAAElFTkSuQmCC\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a1f9659e8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"xticks = [0.01, 0.03, 0.05, 0.1, 0.3, 0.5]\n",
|
||
"fig, ax = plt.subplots(1)\n",
|
||
"(100*df_thr_calibration.recall_score).plot(ax=ax)\n",
|
||
"plt.xscale('log')\n",
|
||
"\n",
|
||
"ax.set_xticks(xticks)\n",
|
||
"ax.set_xlim([0.008, xticks[-1] + xticks[0]])\n",
|
||
"# ax.set_yticks(np.arange(97.0, 100.5, 1.0))\n",
|
||
"\n",
|
||
"ax.axes.yaxis.set_tick_params(rotation=0, labelsize=14)\n",
|
||
"ax.set_xticklabels(xticks, fontdict={\"fontsize\": 14})\n",
|
||
"\n",
|
||
"plt.xlabel(\"threshold\", fontdict={\"fontsize\": 16})\n",
|
||
"plt.ylabel(\"recall, %\" , fontdict={\"fontsize\": 16})\n",
|
||
"plt.title(cc)\n",
|
||
"\n",
|
||
"pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 66,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>accuracy_score</th>\n",
|
||
" <th>average_precision_score</th>\n",
|
||
" <th>f1_score</th>\n",
|
||
" <th>precision_score</th>\n",
|
||
" <th>recall_score</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0.001140</th>\n",
|
||
" <td>0.981818</td>\n",
|
||
" <td>0.409091</td>\n",
|
||
" <td>0.580645</td>\n",
|
||
" <td>0.409091</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.001209</th>\n",
|
||
" <td>0.983217</td>\n",
|
||
" <td>0.428571</td>\n",
|
||
" <td>0.600000</td>\n",
|
||
" <td>0.428571</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.001519</th>\n",
|
||
" <td>0.984615</td>\n",
|
||
" <td>0.450000</td>\n",
|
||
" <td>0.620690</td>\n",
|
||
" <td>0.450000</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.001624</th>\n",
|
||
" <td>0.986014</td>\n",
|
||
" <td>0.473684</td>\n",
|
||
" <td>0.642857</td>\n",
|
||
" <td>0.473684</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.001643</th>\n",
|
||
" <td>0.987413</td>\n",
|
||
" <td>0.500000</td>\n",
|
||
" <td>0.666667</td>\n",
|
||
" <td>0.500000</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" accuracy_score average_precision_score f1_score precision_score \\\n",
|
||
"0.001140 0.981818 0.409091 0.580645 0.409091 \n",
|
||
"0.001209 0.983217 0.428571 0.600000 0.428571 \n",
|
||
"0.001519 0.984615 0.450000 0.620690 0.450000 \n",
|
||
"0.001624 0.986014 0.473684 0.642857 0.473684 \n",
|
||
"0.001643 0.987413 0.500000 0.666667 0.500000 \n",
|
||
"\n",
|
||
" recall_score \n",
|
||
"0.001140 1.0 \n",
|
||
"0.001209 1.0 \n",
|
||
"0.001519 1.0 \n",
|
||
"0.001624 1.0 \n",
|
||
"0.001643 1.0 "
|
||
]
|
||
},
|
||
"execution_count": 66,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# df_val[\"score_max_wire_img+gbmt\"]\n",
|
||
"# df_val.label\n",
|
||
"cc = \"score_wire\"\n",
|
||
"df_thr_calibration = {}\n",
|
||
"# for thr in [0.01, 0.02, 0.03, 0.04] + np.arange(0.05, 0.55, 0.05).tolist():\n",
|
||
"\n",
|
||
"label = df_val[\"view\"]== 'W'\n",
|
||
"# _,_, thresholds = roc_curve(label, df_val[cc])\n",
|
||
"# thresholds = thresholds[::-1]\n",
|
||
"thresholds = df_val[cc].unique()\n",
|
||
"thresholds = thresholds[(thresholds<=0.5) & (thresholds>=1e-3)]\n",
|
||
"thresholds = sorted([0.01] + thresholds.tolist() + [0.5])\n",
|
||
"# thresholds.remove(0.0)\n",
|
||
"\n",
|
||
"for thr in thresholds:# np.arange(0.01, 0.51, 0.01).tolist():\n",
|
||
" mdict = {}\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_val[cc]>thr)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" df_thr_calibration[thr] = pd.Series(mdict)\n",
|
||
" del mdict\n",
|
||
"df_thr_calibration = pd.DataFrame(df_thr_calibration).T\n",
|
||
"df_thr_calibration.to_csv(f\"threshold_calibration_{cc}-{tag}.csv\")\n",
|
||
"df_thr_calibration.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 67,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.006923830000000075"
|
||
]
|
||
},
|
||
"execution_count": 67,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"thr_wire = df_thr_calibration[df_thr_calibration.recall_score==1.0].f1_score.argmax()\n",
|
||
"thr_wire"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 68,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a1ffc2400>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"xticks = [0.01, 0.03, 0.05, 0.1, 0.3, 0.5]\n",
|
||
"fig, ax = plt.subplots(1)\n",
|
||
"(100*df_thr_calibration.recall_score).plot(ax=ax)\n",
|
||
"plt.xscale('log')\n",
|
||
"\n",
|
||
"ax.set_xticks(xticks)\n",
|
||
"# ax.set_xlim([0.008, xticks[-1] + xticks[0]])\n",
|
||
"# ax.set_yticks(np.arange(97.0, 100.5, 1.0))\n",
|
||
"\n",
|
||
"ax.axes.yaxis.set_tick_params(rotation=0, labelsize=14)\n",
|
||
"ax.set_xticklabels(xticks, fontdict={\"fontsize\": 14})\n",
|
||
"\n",
|
||
"plt.xlabel(\"threshold\", fontdict={\"fontsize\": 16})\n",
|
||
"plt.ylabel(\"recall, %\" , fontdict={\"fontsize\": 16})\n",
|
||
"plt.title(cc)\n",
|
||
"\n",
|
||
"\n",
|
||
"pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.013986013986013986"
|
||
]
|
||
},
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"(df_val['score_wire']>thr_wire).mean()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 70,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.012587412587412588"
|
||
]
|
||
},
|
||
"execution_count": 70,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"(df_val[cc]>0.5).mean()\n",
|
||
"# thresholds"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 71,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"threshold_calibration_score_image+gbmt-fixed_wire-e5ce2d69b035975cb5336cec0da9a32a.csv\n",
|
||
"1.0\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>accuracy_score</th>\n",
|
||
" <th>average_precision_score</th>\n",
|
||
" <th>f1_score</th>\n",
|
||
" <th>precision_score</th>\n",
|
||
" <th>recall_score</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0.010000</th>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>0.268765</td>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020697</th>\n",
|
||
" <td>0.156643</td>\n",
|
||
" <td>0.155462</td>\n",
|
||
" <td>0.269091</td>\n",
|
||
" <td>0.155462</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020780</th>\n",
|
||
" <td>0.158042</td>\n",
|
||
" <td>0.155680</td>\n",
|
||
" <td>0.269417</td>\n",
|
||
" <td>0.155680</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020882</th>\n",
|
||
" <td>0.159441</td>\n",
|
||
" <td>0.155899</td>\n",
|
||
" <td>0.269745</td>\n",
|
||
" <td>0.155899</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.022620</th>\n",
|
||
" <td>0.160839</td>\n",
|
||
" <td>0.156118</td>\n",
|
||
" <td>0.270073</td>\n",
|
||
" <td>0.156118</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" accuracy_score average_precision_score f1_score precision_score \\\n",
|
||
"0.010000 0.155245 0.155245 0.268765 0.155245 \n",
|
||
"0.020697 0.156643 0.155462 0.269091 0.155462 \n",
|
||
"0.020780 0.158042 0.155680 0.269417 0.155680 \n",
|
||
"0.020882 0.159441 0.155899 0.269745 0.155899 \n",
|
||
"0.022620 0.160839 0.156118 0.270073 0.156118 \n",
|
||
"\n",
|
||
" recall_score \n",
|
||
"0.010000 1.0 \n",
|
||
"0.020697 1.0 \n",
|
||
"0.020780 1.0 \n",
|
||
"0.020882 1.0 \n",
|
||
"0.022620 1.0 "
|
||
]
|
||
},
|
||
"execution_count": 71,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# df_val[\"score_max_wire_img+gbmt\"]\n",
|
||
"# df_val.label\n",
|
||
"cc = \"score_image+gbmt\"\n",
|
||
"df_thr_calibration = {}\n",
|
||
"# for thr in [0.01, 0.02, 0.03, 0.04] + np.arange(0.05, 0.55, 0.05).tolist():\n",
|
||
"\n",
|
||
"label = df_val[\"label\"]!= 'normal'\n",
|
||
"# _,_, thresholds = roc_curve(label, df_val[cc])\n",
|
||
"thresholds = df_val[cc].unique()\n",
|
||
"thresholds = thresholds[(thresholds<=0.5) & (thresholds>=1e-3)]\n",
|
||
"thresholds = sorted([0.01] + thresholds.tolist() + [0.5])\n",
|
||
"\n",
|
||
"for thr in thresholds:# np.arange(0.01, 0.51, 0.01).tolist():\n",
|
||
" mdict = {}\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, (df_val[cc]>thr) | (df_val['score_wire']>thr_wire))\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" df_thr_calibration[thr] = pd.Series(mdict)\n",
|
||
" del mdict\n",
|
||
"df_thr_calibration = pd.DataFrame(df_thr_calibration).T\n",
|
||
"outfn = f\"threshold_calibration_{cc}-fixed_wire-{tag}.csv\"\n",
|
||
"print(outfn)\n",
|
||
"df_thr_calibration.to_csv(outfn)\n",
|
||
"print(df_thr_calibration.recall_score.max())\n",
|
||
"df_thr_calibration.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 72,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a1fda9eb8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"xticks = [0.01, 0.03, 0.05, 0.1, 0.3, 0.5]\n",
|
||
"fig, ax = plt.subplots(1)\n",
|
||
"(100*df_thr_calibration.recall_score).plot(ax=ax)\n",
|
||
"plt.xscale('log')\n",
|
||
"\n",
|
||
"ax.set_xticks(xticks)\n",
|
||
"# ax.set_xlim([0.008, xticks[-1] + xticks[0]])\n",
|
||
"# ax.set_yticks(np.arange(97.0, 100.5, 1.0))\n",
|
||
"\n",
|
||
"ax.axes.yaxis.set_tick_params(rotation=0, labelsize=14)\n",
|
||
"ax.set_xticklabels(xticks, fontdict={\"fontsize\": 14})\n",
|
||
"\n",
|
||
"plt.xlabel(\"threshold\", fontdict={\"fontsize\": 16})\n",
|
||
"plt.ylabel(\"recall, %\" , fontdict={\"fontsize\": 16})\n",
|
||
"plt.title(cc)\n",
|
||
"pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 73,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>accuracy_score</th>\n",
|
||
" <th>average_precision_score</th>\n",
|
||
" <th>f1_score</th>\n",
|
||
" <th>precision_score</th>\n",
|
||
" <th>recall_score</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0.010000</th>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>0.268765</td>\n",
|
||
" <td>0.155245</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020697</th>\n",
|
||
" <td>0.156643</td>\n",
|
||
" <td>0.155462</td>\n",
|
||
" <td>0.269091</td>\n",
|
||
" <td>0.155462</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020780</th>\n",
|
||
" <td>0.158042</td>\n",
|
||
" <td>0.155680</td>\n",
|
||
" <td>0.269417</td>\n",
|
||
" <td>0.155680</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.020882</th>\n",
|
||
" <td>0.159441</td>\n",
|
||
" <td>0.155899</td>\n",
|
||
" <td>0.269745</td>\n",
|
||
" <td>0.155899</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.022620</th>\n",
|
||
" <td>0.160839</td>\n",
|
||
" <td>0.156118</td>\n",
|
||
" <td>0.270073</td>\n",
|
||
" <td>0.156118</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" accuracy_score average_precision_score f1_score precision_score \\\n",
|
||
"0.010000 0.155245 0.155245 0.268765 0.155245 \n",
|
||
"0.020697 0.156643 0.155462 0.269091 0.155462 \n",
|
||
"0.020780 0.158042 0.155680 0.269417 0.155680 \n",
|
||
"0.020882 0.159441 0.155899 0.269745 0.155899 \n",
|
||
"0.022620 0.160839 0.156118 0.270073 0.156118 \n",
|
||
"\n",
|
||
" recall_score \n",
|
||
"0.010000 1.0 \n",
|
||
"0.020697 1.0 \n",
|
||
"0.020780 1.0 \n",
|
||
"0.020882 1.0 \n",
|
||
"0.022620 1.0 "
|
||
]
|
||
},
|
||
"execution_count": 73,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# df_val[\"score_max_wire_img+gbmt\"]\n",
|
||
"# df_val.label\n",
|
||
"cc = \"score_max_wire_image+gbmt\"\n",
|
||
"df_thr_calibration = {}\n",
|
||
"# for thr in [0.01, 0.02, 0.03, 0.04] + np.arange(0.05, 0.55, 0.05).tolist():\n",
|
||
"label = df_val[\"label\"]!= 'normal'\n",
|
||
"thresholds = df_val[cc].unique()\n",
|
||
"thresholds = thresholds[(thresholds<=0.5) & (thresholds>=1e-3)]\n",
|
||
"thresholds = sorted([0.01] + thresholds.tolist() + [0.5])\n",
|
||
"\n",
|
||
"for thr in thresholds:\n",
|
||
" mdict = {}\n",
|
||
" for ff in [f1_score, accuracy_score, precision_score, recall_score, average_precision_score]:\n",
|
||
" mm = ff(label, df_val[cc]>thr)\n",
|
||
" mdict[ff.__name__] = mm\n",
|
||
" df_thr_calibration[thr] = pd.Series(mdict)\n",
|
||
" del mdict\n",
|
||
"df_thr_calibration = pd.DataFrame(df_thr_calibration).T\n",
|
||
"df_thr_calibration.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 74,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style>\n",
|
||
" .dataframe thead tr:only-child th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>accuracy_score</th>\n",
|
||
" <th>average_precision_score</th>\n",
|
||
" <th>f1_score</th>\n",
|
||
" <th>precision_score</th>\n",
|
||
" <th>recall_score</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0.111608</th>\n",
|
||
" <td>0.988811</td>\n",
|
||
" <td>0.933100</td>\n",
|
||
" <td>0.964912</td>\n",
|
||
" <td>0.940171</td>\n",
|
||
" <td>0.990991</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.145841</th>\n",
|
||
" <td>0.990210</td>\n",
|
||
" <td>0.941131</td>\n",
|
||
" <td>0.969163</td>\n",
|
||
" <td>0.948276</td>\n",
|
||
" <td>0.990991</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.157418</th>\n",
|
||
" <td>0.991608</td>\n",
|
||
" <td>0.949303</td>\n",
|
||
" <td>0.973451</td>\n",
|
||
" <td>0.956522</td>\n",
|
||
" <td>0.990991</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.160415</th>\n",
|
||
" <td>0.993007</td>\n",
|
||
" <td>0.957618</td>\n",
|
||
" <td>0.977778</td>\n",
|
||
" <td>0.964912</td>\n",
|
||
" <td>0.990991</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>0.174540</th>\n",
|
||
" <td>0.994406</td>\n",
|
||
" <td>0.966080</td>\n",
|
||
" <td>0.982143</td>\n",
|
||
" <td>0.973451</td>\n",
|
||
" <td>0.990991</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" accuracy_score average_precision_score f1_score precision_score \\\n",
|
||
"0.111608 0.988811 0.933100 0.964912 0.940171 \n",
|
||
"0.145841 0.990210 0.941131 0.969163 0.948276 \n",
|
||
"0.157418 0.991608 0.949303 0.973451 0.956522 \n",
|
||
"0.160415 0.993007 0.957618 0.977778 0.964912 \n",
|
||
"0.174540 0.994406 0.966080 0.982143 0.973451 \n",
|
||
"\n",
|
||
" recall_score \n",
|
||
"0.111608 0.990991 \n",
|
||
"0.145841 0.990991 \n",
|
||
"0.157418 0.990991 \n",
|
||
"0.160415 0.990991 \n",
|
||
"0.174540 0.990991 "
|
||
]
|
||
},
|
||
"execution_count": 74,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_thr_calibration.loc[0.1:0.2]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 75,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_thr_calibration.to_csv(f\"threshold_calibration_final_model-{tag}.csv\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 76,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x1a20227d68>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"xticks = [0.01, 0.03, 0.05, 0.1, 0.3, 0.5]\n",
|
||
"fig, ax = plt.subplots(1)\n",
|
||
"(100*df_thr_calibration.recall_score).plot(ax=ax)\n",
|
||
"plt.xscale('log')\n",
|
||
"\n",
|
||
"ax.set_xticks(xticks)\n",
|
||
"ax.set_xlim([0.008, xticks[-1] + xticks[0]])\n",
|
||
"ax.set_yticks(np.arange(97.0, 100.5, 1.0))\n",
|
||
"\n",
|
||
"ax.axes.yaxis.set_tick_params(rotation=0, labelsize=14)\n",
|
||
"ax.set_xticklabels(xticks, fontdict={\"fontsize\": 14})\n",
|
||
"\n",
|
||
"plt.xlabel(\"threshold\", fontdict={\"fontsize\": 16})\n",
|
||
"plt.ylabel(\"recall, %\" , fontdict={\"fontsize\": 16})\n",
|
||
"\n",
|
||
"pass"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python [default]",
|
||
"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.6.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|