{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Supplement 2: Main Effect Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Source code for prediction of COVID-19 test results. This is supplemental material to publication\n",
"\n",
"Wojtusiak J, Bagais W, Vang J, Guralnik E, Roess A, Alemi F, \"The Role of Symptom Clusters in Triage of COVID-19 Patients,\" Quality Management in Health Care, 2022.\n",
"\n",
"Source code by Wejdan Bagais and Jee Vang with contribution of other authors. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from models import select_attributes\n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"import timeit\n",
"\n",
"import pickle\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.model_selection import StratifiedKFold\n",
"from sklearn.metrics import roc_auc_score\n",
"import numpy as np\n",
"from joblib import Parallel, delayed\n",
"\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run LASSO Model for the 30 splits data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"start = timeit.default_timer()\n",
"\n",
"#list of inverse of regularization\n",
"c_list = [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.5,2]\n",
"\n",
"split_ids = []\n",
"cs = []\n",
"source = []\n",
"AUCs = []\n",
"prec = []\n",
"rec = []\n",
"vars_cnt = []\n",
"vars_lists = []\n",
"ys_test = []\n",
"ys_pred = []\n",
"\n",
"# loop over the 30 split data\n",
"for i in range (0,30):\n",
" # read the data\n",
" tr_path = \"../data/30_splits_data/binary-transformed_tr_\"+str(i)+\".csv\"\n",
" ts_path = \"../data/30_splits_data/binary-transformed_ts_\"+str(i)+\".csv\"\n",
"\n",
" train = pd.read_csv(tr_path)\n",
" test = pd.read_csv(ts_path)\n",
" \n",
" XT = train.drop(columns=['TestPositive'])\n",
" Xt = test.drop(columns=['TestPositive'])\n",
" yT = train['TestPositive']\n",
" yt = test['TestPositive']\n",
" \n",
" # loop over inverse of regularization\n",
" for c in c_list:\n",
" # run the model\n",
" auc, recall, precision, valid_cols, yt, y_pred = select_attributes(XT, yT, Xt, yt,c)\n",
" \n",
" # save results to the list\n",
" split_ids.append(i)\n",
" cs.append(c)\n",
" source.append('no_cluster')\n",
" AUCs.append(auc)\n",
" prec.append(precision)\n",
" rec.append(recall)\n",
" vars_lists.append(valid_cols)\n",
" vars_cnt.append(len(valid_cols))\n",
" ys_test.append(yt.values.tolist())\n",
" ys_pred.append(y_pred)\n",
"\n",
" \n",
" print(f'ID {i}, C={c:.2f}, AUC={auc:.5f}, Precision={precision:.5f}, Recall={recall:.5f}, cls# {len(valid_cols)}') \n",
"\n",
"stop = timeit.default_timer()\n",
"print('Time: ', stop - start) "
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"# identify the list of unique selected predictors\n",
"unq_var = vars_lists.copy()\n",
"for i in range(0, len(unq_var)):\n",
" unq_var[i] = [sub.replace(' & ', ',') for sub in unq_var[i]]\n",
" \n",
"sympt_lists = []\n",
"for i in range(0, len(unq_var)):\n",
" l = \",\".join(unq_var[i])\n",
" l2 = list(set(l.split(',')))\n",
" sympt_lists.append(l2)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"ys_pred_l = []\n",
"for i in ys_pred:\n",
" ys_pred_l.append(list(i))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# create df for the results\n",
"ff = pd.DataFrame({'split_ids' : split_ids,\n",
" 'cs' : cs,\n",
" 'source' : source,\n",
" 'AUCs' : AUCs,\n",
" 'prec' : prec,\n",
" 'rec' : rec,\n",
" 'vars_cnt' : vars_cnt,\n",
" 'vars_lists' : vars_lists,\n",
" 'y_test' : ys_test,\n",
" 'y_pred' : ys_pred_l\n",
" })"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# add list of unique predictors and its count\n",
"ff['sympt_lists'] = sympt_lists\n",
"ff['sympt_cnt'] = ff['sympt_lists'].apply(lambda x :len(x))"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [],
"source": [
"# save the results\n",
"ff.to_csv('../data/results/main_effect_model.csv', index =False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Identifying the best inverse of regularization strength value (C)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [],
"source": [
"# display average results bases on C\n",
"table = pd.pivot_table(ff, values=['AUCs', 'vars_cnt', 'sympt_cnt']\n",
" , index=['cs']\n",
" , aggfunc=np.mean).round(decimals=4)\n",
"\n",
"table['sympt_cnt'] = table['sympt_cnt'].round().astype(int)\n",
"table['vars_cnt'] = table['vars_cnt'].round().astype(int)"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AUCs | \n",
" sympt_cnt | \n",
" vars_cnt | \n",
"
\n",
" \n",
" cs | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0.1 | \n",
" 0.7779 | \n",
" 6 | \n",
" 6 | \n",
"
\n",
" \n",
" 0.2 | \n",
" 0.7843 | \n",
" 9 | \n",
" 9 | \n",
"
\n",
" \n",
" 0.3 | \n",
" 0.7843 | \n",
" 11 | \n",
" 11 | \n",
"
\n",
" \n",
" 0.4 | \n",
" 0.7819 | \n",
" 13 | \n",
" 13 | \n",
"
\n",
" \n",
" 0.5 | \n",
" 0.7789 | \n",
" 14 | \n",
" 14 | \n",
"
\n",
" \n",
" 0.6 | \n",
" 0.7751 | \n",
" 16 | \n",
" 16 | \n",
"
\n",
" \n",
" 0.7 | \n",
" 0.7740 | \n",
" 18 | \n",
" 18 | \n",
"
\n",
" \n",
" 0.8 | \n",
" 0.7728 | \n",
" 19 | \n",
" 19 | \n",
"
\n",
" \n",
" 0.9 | \n",
" 0.7722 | \n",
" 20 | \n",
" 20 | \n",
"
\n",
" \n",
" 1.0 | \n",
" 0.7703 | \n",
" 21 | \n",
" 21 | \n",
"
\n",
" \n",
" 1.5 | \n",
" 0.7607 | \n",
" 24 | \n",
" 24 | \n",
"
\n",
" \n",
" 2.0 | \n",
" 0.7554 | \n",
" 26 | \n",
" 26 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" AUCs sympt_cnt vars_cnt\n",
"cs \n",
"0.1 0.7779 6 6\n",
"0.2 0.7843 9 9\n",
"0.3 0.7843 11 11\n",
"0.4 0.7819 13 13\n",
"0.5 0.7789 14 14\n",
"0.6 0.7751 16 16\n",
"0.7 0.7740 18 18\n",
"0.8 0.7728 19 19\n",
"0.9 0.7722 20 20\n",
"1.0 0.7703 21 21\n",
"1.5 0.7607 24 24\n",
"2.0 0.7554 26 26"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.2"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"column = table[\"AUCs\"]\n",
"column.idxmax() # best C value based on AUC"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Build model based on the selected C and using all data to identify the list of predictors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Read all data (original cleaned data)"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"path = \"../data/preprocessed.csv\"\n",
"df = pd.read_csv(path)\n",
"df.columns = [s.replace('_',' ') for s in df.columns]"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [],
"source": [
"X = df.drop(['TestPositive'], axis=1)\n",
"y = df['TestPositive']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### k-fold cross-validation, k=24"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [],
"source": [
"Xy_pickle = 'BinaryDataX_no_cluster.p'\n",
"pickle.dump({'X': X, 'y': y}, open(Xy_pickle, 'wb'))"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [],
"source": [
"def do_validation(fold, tr, te, c= _C):\n",
" data = pickle.load(open(Xy_pickle, 'rb'))\n",
" X, y = data['X'], data['y']\n",
" \n",
" X_tr, X_te = X.iloc[tr], X.iloc[te]\n",
" y_tr, y_te = y.iloc[tr].values.ravel(), y.iloc[te].values.ravel()\n",
" \n",
" print(f'fold {fold:02}')\n",
" \n",
" regressor = LogisticRegression(penalty='l1', solver='saga', C=c, n_jobs=-1, max_iter=5000*2)\n",
" regressor.fit(X_tr, y_tr)\n",
" \n",
" y_pr = regressor.predict_proba(X_te)[:,1]\n",
" \n",
" score = roc_auc_score(y_te, y_pr)\n",
" print(f'fold {fold:02}, score={score:.5f}')\n",
" return score, regressor.coef_[0]\n",
" \n",
"\n",
"skf = StratifiedKFold(n_splits=24, shuffle=True, random_state=37)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"outputs = Parallel(n_jobs=-1)(delayed(do_validation)(fold, tr, te, _C) \n",
" for fold, (tr, te) in enumerate(skf.split(X, y)))"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"scores = pd.Series([score for score, _ in outputs])\n",
"coefs = pd.DataFrame([coef for _, coef in outputs], columns=X.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Coefficients from k-fold cross-validation that is consistent 95% of the time\n",
"- Consistent means in same direction and not absent."
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [],
"source": [
"def get_profile(df, col):\n",
" s = df[col]\n",
" \n",
" s_pos = s[s > 0]\n",
" s_neg = s[s < 0]\n",
" \n",
" n = df.shape[0]\n",
" p_pos = len(s_pos) / n\n",
" p_neg = len(s_neg) / n\n",
" \n",
" return {\n",
" 'field': col,\n",
" 'n_pos': len(s_pos),\n",
" 'n_neg': len(s_neg),\n",
" 'pct_pos': p_pos, \n",
" 'pct_neg': p_neg, \n",
" 'is_valid': 1 if p_pos >= 0.95 or p_neg >= 0.95 else 0\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [],
"source": [
"valid_coefs = pd.DataFrame([get_profile(coefs, c) for c in coefs.columns]).sort_values(['is_valid'], ascending=False)\n",
"valid_coefs = valid_coefs[valid_coefs.is_valid == 1]"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression(C=0.2, max_iter=10000, n_jobs=-1, penalty='l1',\n",
" random_state=37, solver='saga')"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valid_cols = list(valid_coefs.field)\n",
"regressor = LogisticRegression(penalty='l1', solver='saga', C= _C, n_jobs=-1, \n",
" max_iter=5000*2, random_state=37)\n",
"regressor.fit(X[valid_cols], y.values.ravel())\n"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"y_pred = regressor.predict_proba(X[valid_cols])[:,1]\n",
"\n",
"t = X[valid_cols].copy()\n",
"t['y_pred'] = y_pred\n",
"t['y_actual'] = y\n",
"# save results\n",
"t.to_csv(\"../data/results/prediction_main_effect_model.csv\", index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Visualize coefficients"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [],
"source": [
"c = pd.Series(regressor.coef_[0], valid_cols)"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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fLjDMYZhKCIiQh9++KEiIiK0Y8cODRkyROXKldOkSZPUs2dP7d69Wx988IFSU1MlyT5TbdCgQdq2bZvmzp2revXqacuWLRoyZIj8/Pz05JNPyjAMPfTQQ/L19dWqVasUEBCgZ599Vtu2bbviullXq+la/fzzz2rXrp0efPBBrVy5UiEhIdq6datsNpskae3atbrvvvuueI577rlHy5cvlyStX79erVu3VkhIiP32P/zhD/Lx8dH69etVp06da6pr7ty56t69uyIjI+378vPzFRgY6HBc+fLldejQIR06dEi1a9d22fiX+/HHH7VhwwZ9/vnnN3R/AACuyAAAwMv079/f6Ny5c4m37dmzx5BkfPXVVw77mzdvbgwYMMAwDMN4++23jQoVKhg5OTn223ft2mVIMhITE+37ateubd/etm2bIck4cOBAieOuXbu2xNsnTJhgxMTE2Lfbtm1r3H///df8WC/V4e/vb1SoUMHw9/c3JBm+vr7GkiVL7Md89913RkBAgMNjMgzDGDBggPHHP/7xuh63JGPgwIEO51mwYIFRvXp14+LFiw77O3bsaAwfPtwwDMN45plnjI4dOxo2m63Ex1GpUiVjwYIFV3ycl+q4lufxwIEDhiTj1Vdftd9+8eJFo0KFCsZbb71V6jglueuuu4yhQ4fat//9738b/v7+xqlTp0q9zzPPPGMkJCTYty9/rhcsWGD4+vrat/v27Wu0bt3a4RzJycmGJGPt2rWljjNz5kyjbt269u3ExESjdu3aDsfs37/fsFgsxq5duxz2T5o0yWjatKlhGIbxzTffGJKM9PR0++2ZmZlGYGCg8eSTT5Y6/rXUdPljN4zi/yb69etn3HHHHUZRUVGJ5zx//ryxZ8+eK/45fPiw/fguXboYvXv3LnYeq9VqTJ8+/ZoeR2pqqiHJ+O9//+uwv1+/fkadOnWMHTt2GDabzdi0aZNRpUoVQ5KxYcOGGxr/8tdDaZ566imjevXqRmFh4TU9BgAArgcziQAAZcrOnTslSe3atXPY365dO23cuNF+TMOGDR1mADRo0ECVK1cu9bx33HGH7r33Xt1+++3q0qWLOnTooD/96U+qWbPmddX3/fffKykp6bruI0lPPfWUhg0bptOnT2vy5MmqU6eOevToYb89NTVVBQUFql69usP9CgoK7DNqrudxt2zZ0mE7NTVVx48f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bdqknj17erosr9aoUSN99tlnKigo0I4dO7RixQrdeeedni7LpSyGYRieLsIbFBQU6Ouvv9bu3bslSQ0bNlSXLl3k7+/v4cq80zvvvGO//nbWrFnKy8vTlClTuP7WjXbu3FnifqYYu1dOTo7WrVunmJgYNWzYUFlZWfr5559ZC8oNvvzyS0nS//73Px09elRxcXEOb5ofeOABT5Xm1U6cOKEFCxZoz549kqR69erpiSeeUFhYmPbv368GDRp4uELvlZeXp6CgIPn4+Cg/P1/5+fmqXLmyp8sCXOLixYvy8fHR0aNHZRiGIiMjZRgGYaibefuCvjejI0eO6Mcff5Qk3X777apRo4aHK/JuNptNK1eu1I4dO2QYhpo2baqEhARPl+VShEQuMnPmTJUvX1733HOPJGn9+vU6d+6cRo0a5eHKvNOYMWPs199Onz5dkvTss89qxowZHq4MwK1q8eLFV7z90UcfNakSwP0uXLigL7/8UllZWRoyZIiOHTumo0ePet2noZ62Zs0atWvXzh5CX47w2X0u/a54tX1wncsX9D127JjXLeh7s0lOTtbTTz991X1wnWXLlqlbt25X3Xcr43IzFzl27JhDQHH77bfr2Wef9WBF3o3rb80zfvx4JSYmFvsGIhYLd6+SvvFJou/uRAjkGbm5uUpJSdHJkyft6+RI0rBhwzxYlfd78803FR0drYyMDElSeHi4Zs6cSUjkYhcuXJAk/frrrx6upOzIyclRdna2CgoKdODAAV36PPzXX3+1Px9wj7KwoO/N5vDhww7bNput2GWtcK3Vq1cXC4RWrVpFSITioqKilJGRofr160uS9uzZo9jYWA9X5b1Kuv62V69eni7LKyUmJkpisXCz0W/PSUpKKvEr2WNiYpSQkMBlxC42ffp0NWjQQE2aNOGbh0x04sQJjRw5UuvXr5ckXtdu0qVLF0mE0GZKS0vT6tWrderUKYf/SwMDA9W7d28PVub9ysKCvjeLJUuWaMmSJSooKFD//v0l/fZBop+fn9dd+nSzWLdundatW6fMzEyHGYn5+fle92UnhEQusnfvXq1Zs0ZWq1WSlJWVperVq9tX+2dVf9e65557FB0dbb/+9tlnn+X6W5OcOXNGFy9etG9fes3DtfLy8q54O99E5D4RERHKzc3V3XffLUnasGGDQkJCdPToUc2dO5cp3C524cIF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KCjA8uXL8eKLL+LYsWMIDw8XHYuI6L7H5WZkk/z9/fHmm29i3LhxAIBjx47Bz88PBoOh048NIiK6v8myDFmWIUkSgI7Nq41Go+BURGTr+vTpg+jo6E5jGRkZeOqppwQlIiKyDdy4mmySLMsoLCxEcXExAMDPz08pjIiIyHZ8/PHHqKurw/Tp0yFJEg4ePIg+ffpg8eLFoqMRkcqsWrUKO3bsEB2DiOi+xpKIVKG4uBi5ublYtmyZ6ChERHQHTCYTsrOz8f3330OWZYwYMQKPP/44NBquiCci82JJRET0v3G5GdmsiooK5ObmoqCgAJ6enhgzZozoSEREdIc0Gg1mzJiBGTNmiI5CRERE1OWxJCKbUlVVhfz8fOTl5cHFxQUTJkyALMvYtGmT6GhERHQHEhISEBERgbVr1yr7Ef3S1q1bBaQiIlu3ePHi236myLKMtrY2AYmIiGwLl5uRTZk3bx78/PywatUq9OvXDwDwl7/8BYmJiYKTERHRnWhoaEDv3r1RV1d32+seHh5WTkREREREXPBPNmXt2rXo1asXXnvtNezcuVPZw4KIiGzLW2+9BQD47LPP4OHhccs/IiIiIrI+LjcjmzJmzBiMGTMGBoMBJ06cQEZGBq5evYoPPvgAY8aMwYgRI0RHJCKiP8BoNOK7775DaWkpCgsLb7k+duxYAamIiIiIujYuNyOb19raioKCAuTn53NvIiIiG1FcXIycnBwUFBQgKCjoluvh4eECUhERERF1bSyJiIiIyOoKCgowfvx4ZGdnY9q0aaLjEBERERG4JxEREREJsH//fgDAN998IzgJEREREd3EmURERERkdbGxsTCZTKioqICfn98t16OjowWkIiIiIuraWBIRERGR1RmNRpSXlyMxMRErV6685XpAQICAVERERERdG0siIiIiEqa5uRlarVZ0DCIiIiIC0E10ACIiIup6kpOTsWTJEiQlJUGSpFuuc7kZERERkfWxJCIiIiKrmzx5MgDg6aefFpyEiIiIiG7icjMiIiISqrm5GQC47IyIiIhIMM4kIiIiIquTZRnp6enIysqCLMuQZRkajQYzZ85ESEiI6HhEREREXRJnEhEREZHVHThwAGfOnMGKFSvg6ekJALh8+TJ27dqFESNGYPbs2YITEhEREXU9GtEBiIiIqOs5evQoXn75ZaUgAoC+ffvir3/9K44ePSowGREREVHXxZKIiIiIrK69vf22exBptVq0t7cLSERERERELImIiIjI6rp1++1tEX/vGhERERFZDu/CiIiIyOoqKioQGhp6y7gsy7hx44aARERERETEjauJiIiIiIiIiIjLzYiIiIiIiIiIiCURERERERERERGBJREREREREREREYElERERERERERERgSUREREREREREREB+D8YavJ5trFYgAAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.style.use('ggplot')\n",
"\n",
"i = pd.Series([regressor.intercept_[0]], index=['intercept'])\n",
"s = pd.concat([c[c > 0], c[c < 0]]).sort_index()\n",
"s = pd.concat([i, s])\n",
"color = ['r' if v > 0 else 'b' for v in s]\n",
"\n",
"ax = s.plot(kind='bar', color=color, figsize=(20, 4))\n",
"_ = ax.set_title(f'Logistic Regression, validated auc={scores.mean():.5f}')"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIEAAAFgCAYAAAAsFmlBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde1iUdf7/8dcAAiKKCB4CNQTDY3miNPNAiumStdnJynO51dqJ3Ex/bqZmKqubuaJtW5ZuWfs1ay3XdDXKVDQPpGaewAO6q6CIQIKGCHP//vBytgkUVGZumfv5uK6uy7nvm3ve8547Dq/5fD63zTAMQwAAAAAAAPBoXmYXAAAAAAAAANcjBAIAAAAAALAAQiAAAAAAAAALIAQCAAAAAACwAEIgAAAAAAAACyAEAgAAAAAAsABCIAAATBYREaHXX3/9ms4xadIkNW/evIoq8mxV0e/r3bfffqu2bduqRo0aio2NlST9+OOPuu222+Tv76+IiAhJks1m06JFiyp93is9/noRGxurkSNHXvaY4cOHKy4uzk0VAQBgDh+zCwAA4Ho1fPhwHT16VMnJyS59nq1btyogIKBSx6akpKh79+7KyMhw/CEvSS+99JKeffbZa6ojIiJCR44ckST5+fmpcePGeuSRR/Tqq6/K19f3ms59PbmSfldXv//973Xrrbdq5cqVqlWrliTp5ZdfVp06dbRv3z7HtqysLNWtW7fS573S4yvLx8dH8+fP1/Dhw6v83AAA4H8IgQAAMFn9+vWv+RyBgYEKDAy85vOMHTtWCQkJKi4u1ubNm/XEE0/Ibrdr2rRp13zuihQXF7slbKqKfl/v9u/fr/Hjx6tJkyZO24YNG+YUHjZq1OiKznulxwMAgOsL08EAALhKBQUFeuqpp1S/fn35+/srJiZGq1evdjpm+/bt6tKli/z9/RUdHa1PP/20zHSkXz/+4osv1KFDBwUEBKhu3bq67bbbtH37dh0+fFjdu3eXJDVr1kw2m80x1ae86WDJycnq3r27AgICFBQUpJ49e+rgwYOXfU2BgYFq1KiRmjZtqoceekh9+vTRqlWrnI4pLCzUCy+8oPDwcAUEBKhDhw765z//ecWv22azac6cOXrssccUFBSkQYMGSZJOnDih4cOHq379+qpdu7buuOMOrVu3zvF158+f1+jRo9W4cWP5+fnphhtu0COPPOLYv3v3bvXt21d169ZVrVq11KpVK3344YeX7HdF7+Phw4dls9n0ySef6J577lFAQIAiIyOdzllZJSUleu211xQVFSU/Pz+Fh4frueeec+zPysrSI488orp166pmzZqKjY1Vamqq0zkOHDigBx54QHXr1lVwcLDuuusu/fjjj5IuTAOz2WwqLS3V0KFDZbPZtHDhQtlsNh08eFCvvvqqbDabJk2a5HgPfjm9q7CwUAkJCWrSpIn8/PwUERHhFACWd/zlroXK9C4iIkKlpaUaMWKEbDabbDbbJft3/vx5jRs3TuHh4fL19VXr1q318ccfOx1z5MgR9evXTzVr1lTTpk2VlJRU5jx5eXkaOHCgatWqpYYNG+qVV16RYRhOx6SkpOiOO+5Q7dq1Vbt2bbVr167M/wsAAFQ3hEAAAFylxx9/XKtWrdKiRYu0fft23XHHHerfv7/27dsnSTp79qzi4+NVv359bdmyRR988IFmzZql7OzsS57z+PHjeuihh/Too49q9+7d+u6775SQkCAfHx81adJEX3zxhSRpy5YtysrKKhO+XJScnKy+ffuqU6dO+u6777R582YNHTpU58+fr/Tr2759u1JSUpxG5xiGoXvuuUc//PCDFi9erF27dun3v/+9HnnkEX399ddX/LonT56s22+/Xdu2bdPUqVP1888/684771RBQYFWrlyp7du3Kz4+Xn369NHevXslSUlJSfrkk0+0aNEi7d+/X8uWLVOXLl0c53z00UcVEhKijRs36scff9SsWbMUHBx8yddZ0ft40bhx4zRkyBDt3LlTDz/8sEaMGKH9+/dXup+S9MQTT2ju3LmaNGmS9uzZo88++0yRkZGO3t53333at2+fli9fri1btqhhw4bq06ePcnJyJF0IyLp166YGDRpo/fr12rRpk1q0aKHY2FidPHlSXbt2VVZWliRp7ty5ysrK0kMPPaSsrCw1btxYY8eOVVZWll566aUytRmGof79+2vZsmVKSkrS3r179cEHH1xy5FRlroXK9G7r1q3y9vbW7NmzlZWV5ai/POPHj9e7776r2bNna9euXRo8eLAGDx7seD7DMDRgwACdOnVK3377rZYtW6Zly5Zp27ZtTud5/PHH9f333+tf//qXvvnmGx0+fFhLly517C8tLdW9996rzp07a9u2bdq2bZsmTZrk8dMIAQAWYAAAgHINGzbM6N27d7n79u/fb0gyvvzyS6ftHTp0MEaMGGEYhmG88847Rq1atYz8/HzH/r179xqSjClTpji23XjjjY7H27ZtMyQZGRkZ5T7v+vXry90/ceJEIyoqyvG4W7duxt13313p13qxDl9fX6NWrVqGr6+vIcnw9vY2li5d6jhmzZo1hp+fn9NrMgzDGDFihPHb3/72il63JOPxxx93Os+CBQuM8PBw4/z5807b77zzTuOFF14wDMMwnn/+eePOO+807HZ7ua+jTp06xoIFCy77Oi/WUZn3MSMjw5BkvPHGG47958+fN2rVqmW8/fbbl3yeX7v4XEuWLCl3f3JysiHJ2L17t2NbUVGR0ahRI2Py5MmGYVx4nzt37uz0dXa73YiMjDTefPNNxzZJxocffnjJ113ecReff+vWrZd8Db88vjLXQmV75+3tfdn3zDAM48yZM4avr68xb948p+333XefceeddxqGYRhfffWVIclIS0tz7M/Ozjb8/f2NJ554wjCM/70Pq1evdhxz7tw5IywszPH/e25uriHJWLNmzWVrAgCgumFNIAAArsKePXskST169HDa3qNHD3333XeOY1q1aqWgoCDH/pYtW152Yd1bbrlFffv2Vdu2bdWnTx/Fxsbq/vvvd1rbpTK+//57JSYmXtHXSNIzzzyjUaNGKS8vT6+//rqaNWum++67z7F/69atKi4uVnh4uNPXFRcX66abbpJ0Za/7tttuc3q8detWHT9+vMyx586dU82aNSVJI0aMUJ8+fdS8eXP16dNHffr00T333OMYsfTSSy9p5MiRWrhwoWJjY3XvvfeqY8eO5b7eyryPF7Vv397xbx8fHzVs2FAnTpwo97zluTga5a677ip3/+7duxUSEqLWrVs7tvn5+alz587avXu3pAv9+f7778us//Tzzz9f8aikX/v+++8VHBysmJiYSh1fmWvhomvtnXRhGlxxcXGZ96pnz56aPn26pAvvZ2hoqKKjox3769evrxYtWjgeX3zPu3bt6tjm6+urW2+9VYWFhZKk4OBgjRw5Un379lWvXr3Us2dPDRgwwOk8AABUR4RAAABUIcMwnNY0udz6JuXx9vbWypUrtXXrViUnJ+uzzz7TuHHjtGTJEvXv3/+KznWlzy1J9erVc6wt9Mknn6hFixbq2LGjhg4dKkmy2+0KCgrS1q1by3ztL6eNVfa5L96l6iK73a5WrVo5Tc256OJUnPbt2ysjI0NfffWV1qxZoxdeeEETJkzQpk2bVKdOHU2YMEGDBg3Sv//9b33zzTeaNm2aXn755Su6Lfyv38dfv76Lr9Fut1f6nJVRXt9+WYvdblfv3r01d+7cMsf9MnSryue/lMpeC+U9vpbe/brGX/anvPft14xfrf1zKe+++65eeOEFrV69Wl999ZUmTJiguXPn6qmnnrqqugEAuB6wJhAAAFehTZs2kuS0YLEkrV+/3rGvdevW2rt3r3766SfH/rS0NOXn51/23DabTbfddpvGjx+vdevWqWfPnlqwYIGk//0xXVpaetlzdOrU6ZoXsfXz89P48eP18ssv68yZM5KkmJgY5efnq6ioSM2bN3f6r2nTppKu/nVfPP+hQ4dUp06dMucPCwtzHBcYGKgBAwZozpw5Sk1N1d69e7V27VrH/sjISI0aNUqffvqpXnvtNf31r38t9/kq8z5WlYujkX69ePgva8nJyXGMVJEujIDasmWLo5aYmBjt3r1b4eHhZfpzrXc969Spk3Jzc8ssRH0plbkWKsvX17fCa7p58+by8/Nzep+lC+/dxf60adNGJ0+edBoVlZOTo/T0dMfji8du3LjRsa24uLjcMKtt27YaPXq0Vq5cqSeeeELvvPPOFb0uAACuN4RAAABcRmFhoXbs2OH03759+xQVFaWHHnpIo0aN0qpVq7Rv3z698MIL2rVrl8aMGSNJGjRokAIDAzV06FDt3LnTccv1mjVrXnK0wsaNGzVlyhRt3rxZ//nPf/T1119r586djilCN954o7y8vLRixQplZ2c7BS2/NGHCBK1cuVIJCQnauXOn0tLStHDhQqWlpV3R6784Amj27NmSpF69eikuLk7333+/li5dqkOHDun7779XUlKS3n333at+3RcNGjRIzZo10913363Vq1fr8OHD2rx5s6ZPn67PP/9ckjRz5kx99NFH2r17tzIyMvT+++/L29tb0dHRKiws1DPPPKNvvvlGGRkZ2r59u/797387TbH6pcq8j1WlefPmGjRokEaNGqVFixbp4MGD2rp1q/7yl79IutDb2267TY899pg2bNigXbt2aejQoSoqKtLvf/97SdKzzz6r0tJS3XfffVq/fr0OHz6slJQU/fGPf3QKNa5Gr1691L17dw0cOFBffPGFMjIytGHDBs2fP/+Sx1d0LVRWs2bNtGbNGmVmZjoWwf61gIAAPf/885owYYKWLFmi/fv3a9q0afriiy80fvx4SVLv3r3Vrl07DR48WFu2bNGOHTs0aNAg+fj8b/B78+bNde+99+qZZ57RmjVrtGfPHo0cOVIFBQWOYw4cOKCxY8cqJSVFR44c0Xfffaf169df8joCAKC6IAQCAOAyNm/erA4dOjj9d3GNnPnz56tv374aPHiw2rVrpw0bNmj58uVq2bKlpAt/tK5YsUInTpzQrbfeqsGDByshIUGBgYHy9/cv9/mCgoL03Xff6be//a1uuukmPf744xo0aJAmTJggSWrYsKGmT5+uxMRE3XDDDfrtb39b7nnuuusurVixQps3b1bnzp1122236e9//7tq1KhxRa/f399fzz33nGbOnKnc3FzZbDYtW7ZM999/v0aPHq2WLVvq7rvv1pdffqmoqKirft2/fL61a9cqJiZGI0aMUHR0tO6//35t2bJFN954oySpTp06mjVrlm6//XbdfPPNWrp0qT777DO1aNFCPj4+ysvL0xNPPKFWrVqpb9++atiwYZnbiP9SRe9jZQ0fPlwRERGXPWbBggV66qmn9Morr6hVq1YaMGCAMjIyJF0YAfb55587enrrrbfq+PHj+uqrrxQaGirpwvv/3XffKTQ0VPfff79atGihQYMG6ciRI7rhhhuuqN5fs9ls+vLLLxUfH6+nn35aLVq00ODBgy8ZylTmWqisN954Q99//72aNWt22RFNU6dO1e9+9zslJCSoTZs2WrRokRYtWqTevXs7avr8888VFBSkHj16qH///oqPjy+zJtT777+v9u3bq3///urZs6fCw8M1YMAAx/5atWpp//79euSRRxQdHa0HHnhAXbt2LXcaHgAA1YnNqOzEaAAAcM2OHDmiiIgILVu2TPfcc4/Z5biNFV53jx491KpVK/3tb38zuxQAAIByEQIBAOBCixYtUnh4uJo1a6YjR47o5Zdf1okTJ5SWliY/Pz+zy3MZq73uvLw8tWzZUnv27FFISIjZ5QAAAJSLu4MBAOBCp06d0sSJE3Xs2DHVq1dPd9xxh5YsWeKRQcgvWe11BwcHX/EtzwEAANyNkUAAAAAAAAAWwMLQAAAAAAAAFlDhdLDi4mJNnDhRJSUlKi0tVZcuXfTwww87HXP+/HnNnTtXhw4dUu3atZWQkKAGDRq4rGgAAAAAAABcmQqngxmGoXPnzsnf318lJSV69dVXNXz4cEVHRzuOWbVqlY4cOaInn3xSGzZs0JYtW/Tiiy9W+OSZmZnX/gpMEBoaesnbpcI16Ln70XP3o+fuR8/dj567Hz13P3rufvTc/ei5+9Fz96uuPQ8LC7vkvgqng9lsNvn7+0uSSktLVVpaKpvN5nRMamqqYmNjJUldunTRrl27xFJDAAAAAAAA149K3R3Mbrdr7NixOn78uPr27aubbrrJaX9ubq7jdqje3t4KCAhQQUGB6tSp43RccnKykpOTJUmJiYkKDQ2titfgdj4+PtW29uqKnrsfPXc/eu5+9Nz96Ln70XP3o+fuR8/dj567Hz13P0/seaVCIC8vL82cOVNnzpzRn//8Z/3nP/9R06ZNHfvLG/Xz69FCkhQXF6e4uDjH4+o4rEqqvkPCqjN67n703P3oufvRc/ej5+5Hz92PnrsfPXc/eu5+9Nz9qmvPr2k62C/VqlVLrVu31o4dO5y2h4SE6NSpU5IuTBk7e/asAgMDr6JUAAAAAAAAuEKFIdDp06d15swZSRfuFPbjjz8qPDzc6ZhOnTrp22+/lSRt2rRJbdq0KXckEAAAAAAAAMxR4XSwvLw8zZs3T3a7XYZh6Pbbb1enTp20ePFiRUVFKSYmRr169dLcuXP13HPPKTAwUAkJCe6oHQAAAAAAAJVUYQh04403asaMGWW2Dxw40PFvX19fjR49umorAwAAAAAAQJW5ojWBAAAAAAAAUD0RAgEAAAAAAFhApW4RDwAAANcI+9UNN1zyHC46b+axYy46MwAAcAVGAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAX4VHRATk6O5s2bp/z8fNlsNsXFxSk+Pt7pmN27d2vGjBlq0KCBJKlz58568MEHXVMxAAAAAAAArliFIZC3t7eGDBmiyMhI/fzzzxo3bpxuueUWNW7c2Om4Vq1aady4cS4rFAAAAAAAAFevwulgwcHBioyMlCTVrFlT4eHhys3NdXlhAAAAAAAAqDoVjgT6pezsbGVkZKh58+Zl9qWnp2vMmDEKDg7WkCFD1KRJkzLHJCcnKzk5WZKUmJio0NDQqyzbXD4+PtW29uqKnrsfPXc/eu5+9Nz96Lln4b0sH9e5+9Fz96Pn7kfP3c8Te24zDMOozIFFRUWaOHGi7r//fnXu3Nlp39mzZ+Xl5SV/f39t27ZNCxcu1Jw5cyo8Z2Zm5tVVbbLQ0FDl5OSYXYal0HP3o+fuR8/dj567Hz0vKyw83OwSrlrmsWNml3Bd4jp3P3rufvTc/ei5+1XXnoeFhV1yX6XuDlZSUqI33nhD3bt3LxMASVJAQID8/f0lSR07dlRpaalOnz59leUCAAAAAACgqlUYAhmGobffflvh4eHq379/ucfk5+fr4oCiAwcOyG63q3bt2lVbKQAAAAAAAK5ahWsCpaWlad26dWratKnGjBkjSXr00UcdQ6Luuusubdq0SatXr5a3t7d8fX2VkJAgm83m2soBAAAAAABQaRWGQC1bttQnn3xy2WP69eunfv36VVlRAAAAAAAAqFqVWhMIAAAAAAAA1RshEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFiAT0UH5OTkaN68ecrPz5fNZlNcXJzi4+OdjjEMQwsWLND27dvl5+enUaNGKTIy0mVFAwAAAAAA4MpUGAJ5e3tryJAhioyM1M8//6xx48bplltuUePGjR3HbN++XcePH9ecOXO0f/9+zZ8/X9OmTXNp4QAAAAAAAKi8CqeDBQcHO0b11KxZU+Hh4crNzXU6JjU1VT169JDNZlN0dLTOnDmjvLw811QMAAAAAACAK1bhSKBfys7OVkZGhpo3b+60PTc3V6GhoY7HISEhys3NVXBwsNNxycnJSk5OliQlJiY6fU114uPjU21rr67oeVm+fn4uf44wF523+Nw5F525euM6dz967n703LPwXpaP69z96Ln70XP3o+fu54k9r3QIVFRUpDfeeEPDhw9XQECA0z7DMMocb7PZymyLi4tTXFyc43FOTs6V1HrdCA0Nrba1V1f0vCxXBTTuwHtZPq5z96Pn7kfPy+L7uefhOnc/eu5+9Nz96Ln7Vdeeh4Vd+reLSt0drKSkRG+88Ya6d++uzp07l9kfEhLi1JhTp06VGQUEAAAAAAAA81QYAhmGobffflvh4eHq379/ucfExMRo3bp1MgxD6enpCggIIAQCAAAAAAC4jlQ4HSwtLU3r1q1T06ZNNWbMGEnSo48+6hj5c9ddd6lDhw7atm2bnn/+efn6+mrUqFGurRoAAAAAAABXpMIQqGXLlvrkk08ue4zNZtPIkSOrrCgAAAAAAABUrUqtCQQAAAAAAIDqjRAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAnwqOuCtt97Stm3bFBQUpDfeeKPM/t27d2vGjBlq0KCBJKlz58568MEHq75SAAAAAAAAXLUKQ6DY2Fj169dP8+bNu+QxrVq10rhx46q0MAAAwsLDXf8cLjpv5rFjLjozAAAAcHUqnA7WunVrBQYGuqMWAAAAAAAAuEiFI4EqIz09XWPGjFFwcLCGDBmiJk2aVMVpAQAAAAAAUEVshmEYFR2UnZ2tP/3pT+WuCXT27Fl5eXnJ399f27Zt08KFCzVnzpxyz5OcnKzk5GRJUmJiooqLi6+xfHP4+PiopKTE7DIshZ6X5evnZ3YJV6343DmzS7gucZ2XxXXuebjOy+I69zxc5+5Hz92PnrsfPXe/6tpzX1/fS+675pFAAQEBjn937NhR7733nk6fPq06deqUOTYuLk5xcXGOxzk5Odf69KYIDQ2ttrVXV/S8LFetY+IOvJfl4zovi+vc83Cdl8V17nm4zt2PnrsfPXc/eu5+1bXnYWGX/u3imkOg/Px8BQUFyWaz6cCBA7Lb7apdu/a1nhYAAAAAgGqDG1qgOqgwBJo9e7b27NmjgoICPf3003r44Ycdw6Huuusubdq0SatXr5a3t7d8fX2VkJAgm83m8sIBwN34wQ4AAACgOqswBEpISLjs/n79+qlfv35VVhAAAAAAAACqXpXcHQwAAACoLhjZCQCwKi+zCwAAAAAAAIDrEQIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAF+JhdAAAAAADPFhYe7vrncNF5M48dc9GZAcD9GAkEAAAAAABgAYRAAAAAAAAAFkAIBAAAAAAAYAGEQAAAAAAAABZACAQAAAAAAGAB3B0MAAA4cAcfAAAAz8VIIAAAAAAAAAsgBAIAAAAAALAApoMBAAAAgIdhei+A8jASCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgIWhAQAAAABAtcMC6FeOkUAAAAAAAAAWQAgEAAAAAABgAYRAAAAAAAAAFkAIBAAAAAAAYAEVLgz91ltvadu2bQoKCtIbb7xRZr9hGFqwYIG2b98uPz8/jRo1SpGRkS4pFgAAAAAAAFenwpFAsbGxGj9+/CX3b9++XcePH9ecOXP05JNPav78+VVaIAAAAAAAAK5dhSFQ69atFRgYeMn9qamp6tGjh2w2m6Kjo3XmzBnl5eVVaZEAAAAAAAC4NhVOB6tIbm6uQkNDHY9DQkKUm5ur4ODgMscmJycrOTlZkpSYmOj0ddWJj49Pta29uqLnnoX30v3oufvRc/ej5+5Hz92PnrsfPXc/eu5+9Nz9zOr5NYdAhmGU2Waz2co9Ni4uTnFxcY7HOTk51/r0pggNDa22tVdX9LysMLMLuAbV9b2k5+5Hz92PnrsfPXc/eu5+9Nz96Ln70XP3o+flCwu7dGeu+e5gISEhTsWfOnWq3FFAAAAAAAAAMM81h0AxMTFat26dDMNQenq6AgICCIEAAAAAAACuMxVOB5s9e7b27NmjgoICPf3003r44YdVUlIiSbrrrrvUoUMHbdu2Tc8//7x8fX01atQolxcNAAAAAACAK1NhCJSQkHDZ/TabTSNHjqyyggAAAAAAAFD1rnk6GAAAAAAAAK5/hEAAAAAAAAAWQAgEAAAAAABgAYRAAAAAAAAAFkAIBAAAAAAAYAGEQAAAAAAAABZACAQAAAAAAGABhEAAAAAAAAAWQAgEAAAAAABgAYRAAAAAAAAAFkAIBAAAAAAAYAE+ZhcAzxAeHuaGZ3HNcxw7lumS8wIAAHuE04oAACAASURBVAAAcD1hJBAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABRACAQAAAAAAWAAhEAAAAAAAgAUQAgEAAAAAAFgAIRAAAAAAAIAFEAIBAAAAAABYACEQAAAAAACABfhU5qAdO3ZowYIFstvt6t27t+677z6n/d9++60+/PBD1atXT5LUr18/9e7du+qrBQAAAAAAwFWpMASy2+1677339MorrygkJET/7//9P8XExKhx48ZOx3Xt2lVPPPGEywoFAAAAAADA1atwOtiBAwfUqFEjNWzYUD4+Puratau2bt3qjtoAAAAAAABQRSocCZSbm6uQkBDH45CQEO3fv7/McZs3b9bevXt1ww03aNiwYQoNDS1zTHJyspKTkyVJiYmJ5R5THfj4+FTb2lEW76X70XP3o+fuR8/dj567Hz13P3rufvTc/ei5+9Fz9zOr5xWGQIZhlNlms9mcHnfq1El33HGHatSoodWrV2vevHmaOHFima+Li4tTXFyc43FOTs7V1Gy60NDQalu764SZXcBVq67vZfXtOD03Az13P3rufvTc/ei5+9Fz96Pn7kfP3Y+eu58rex4WdunOVDgdLCQkRKdOnXI8PnXqlIKDg52OqV27tmrUqCHpQtBz6NChq60VAAAAAAAALlBhCBQVFaWsrCxlZ2erpKREGzduVExMjNMxeXl5jn+npqaWWTQaAAAAAAAA5qpwOpi3t7cef/xxTZ06VXa7XXfeeaeaNGmixYsXKyoqSjExMVq5cqVSU1Pl7e2twMBAjRo1yh21AwAAAAAAoJIqDIEkqWPHjurYsaPTtoEDBzr+/dhjj+mxxx6r2soAAAAAAABQZSqcDgYAAAAAAIDqjxAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAIIgQAAAAAAACyAEAgAAAAAAMACCIEAAAAAAAAsgBAIAAAAAADAAgiBAAAAAAAALIAQCAAAAAAAwAJ8zC7AFcLDw9zwLK55jmPHMl1yXgAAAAAAYG2MBAIAAAAAALAAQiAAAAAAAAALIAQCAAAAAACwAEIgAAAAAAAAC6jUwtA7duzQggULZLfb1bt3b913331O+8+fP6+5c+fq0KFDql27thISEtSgQQOXFAwAAAAAAIArV+FIILvdrvfee0/jx4/Xm2++qQ0bNujo0aNOx3zzzTeqVauWkpKSdPfdd+ujjz5yWcEAAAAAAAC4chWGQAcOHFCjRo3UsGFD+fj4qGvXrtq6davTMampqYqNjZUkdenSRbt27ZJhGC4pGAAAAAAAAFeuwulgubm5CgkJcTwOCQnR/v37L3mMt7e3AgICVFBQoDp16jgdl5ycrOTkZElSYmKiwsLCrvkFlKd650+u6Ymr0XMTVOOmV9OO03Mz0HP3o+fuR8/dj567Hz13P3rufvTc/ej5FatwJFB5I3psNtsVHyNJcXFxSkxMVGJi4pXUeN0ZN26c2SVYDj13P3rufvTc/ei5+9Fz96Pn7kfP3Y+eux89dz967n6e2PMKQ6CQkBCdOnXK8fjUqVMKDg6+5DGlpaU6e/asAgMDq7hUAAAAAAAAXK0KQ6CoqChlZWUpOztbJSUl2rhxo2JiYpyO6dSpk7799ltJ0qZNm9SmTZtyRwIBAAAAAADAHN6TJk2adLkDvLy81KhRIyUlJenf//63unfvri5dumjx4sUqKipSWFiYmjZtqpSUFH388cc6fPiwnnzySY8fCRQZGWl2CZZDz92PnrsfPXc/eu5+9Nz96Ln70XP3o+fuR8/dj567n6f13GZwGy8AAAAAAACPV+F0MAAAAAAAAFR/hEAAAAAAAAAWQAiE647dbldaWprZZQAAAAAA4FF8zC4A+DUvLy998MEHmjp1qtmlWE5aWppOnjyp0tJSx7aePXuaWBEAANe3ffv2acmSJcrJyVFpaakMw5DNZtPcuXPNLs2j5efn6x//+Ify8vI0fvx4HT16VOnp6erVq5fZpXmcxMTEy975eezYsW6sxloMw9D69euVnZ2tBx98UDk5OcrPz1fz5s3NLs2jnTx5UllZWbrllltUXFys0tJS1axZ0+yyqgwhUCW99tprevXVVyvchqrRrl07bdq0SZ07d77sDx1UnaSkJJ04cUIRERHy8vrfIEFCINfZt2+fIiIi5O/vr3Xr1ikjI0Px8fGqX7++2aV5NLvdrvz8fNntdse20NBQEyvybEOHDi3zfTwgIECRkZEaOnSoGjZsaFJlnm3RokW6//775evrq2nTpunIkSMaNmyYevToYXZpHuftt9/WsGHDFBkZ6fTzE6711ltvKTY2VkuXLpUk3XDDDXrzzTcJgVzg3nvvNbsEy5o/f75sNpt2796tBx98UP7+/nrvvfc0ffp0s0vzWMnJyfr6669VWFiopKQknTp1Su+++65H/d1PCFSB4uJiFRcXq6CgQIWFhY7tZ8+eVV5enomVebbly5fr3Llz8vLykq+vr+NTtb///e9ml+axDh06pFmzZhG6udH8+fM1c+ZMHT58WMuWLVOvXr00d+5cTZ482ezSPNbKlSv16aefKigoyHGt22w2/fnPfza5Ms/Vv39/BQcHq1u3bjIMQxs3blR+fr7CwsL017/+VZMmTTK7RI/0ww8/aPDgwdqyZYvq1aun0aNHa/LkyYRALhAQEKAOHTqYXYblFBQUqGvXrvr8888lSd7e3oRwLtK6dWuzS7CsAwcO6E9/+pNefvllSVJgYKBKSkpMrsqzrVq1StOnT9f48eMlXQiYf/rpJ5OrqlqEQBVITk7Wl19+qby8PKehjgEBAerbt6+JlXm2Dz74wOwSLKdJkybKz89XcHCw2aVYhre3t2w2m1JTUxUfH69evXpp7dq1Zpfl0VasWKHZs2erdu3aZpdiGTt27NC0adMcj+Pi4vTHP/5RDz74oOMTfFS9i9N6t23bpm7duikwMNDkijxXmzZt9OGHH6pz587y8fnfr9aRkZEmVuX5/Pz8VFBQ4Aj009PTFRAQYHJVnukPf/hDuR8SXvyQlg9SXMfb21t2u93R/9OnT/OBrYvVqFHD6Xt5aWmpx/WcEKgC8fHxio+P18qVK/Wb3/zG7HIsg/mv7ldQUKDRo0erefPmTt/4mOftOv7+/lq6dKnWr1+vyZMny2638+mOi4WGhvJHgpvZbDZt3LhRXbp0kSRt2rTJ5IqsoVOnTkpISJCvr69Gjhyp06dPq0aNGmaX5ZEOHDgg6cKI2l+aOHGiGeVYxtChQzVjxgwdP35cEyZM0OnTp/Xiiy+aXZZHGjdunNklWNZvfvMbzZw5Uz/99JP+8Y9/aNOmTRo4cKDZZXm01q1b65///KeKi4u1c+dOrVq1Sp06dTK7rCplMwzDMLuI6qC4uFirV6/Wvn37JEmtWrVSnz595Ovra3Jlnundd991zH998803VVhYqKlTpzL/1YX27NlT7naGALtOfn6+UlJSFBUVpVatWiknJ0e7d+9mHSYXWL58uSTpv//9rzIzM9WxY0enP4j79+9vVmke78SJE1qwYIH2798vSbrppps0fPhw1atXT4cOHVLLli1NrtBzFRYWKiAgQF5eXioqKlJRUZHq1q1rdllAlTh//ry8vLyUmZkpwzAUFhYmwzAIO13M0xfMvR4dO3ZMP/74oySpbdu2aty4sckVeTa73a5vvvlGO3fulGEYateuneLi4swuq0oRAlXSrFmzVLNmTXXv3l2StGHDBp05c0ajR482uTLPNHbsWMf81xkzZkiSxowZo5kzZ5pcGYDqaMmSJZfd/9BDD7mpEsA9zp07p+XLlysnJ0dPPfWUsrKylJmZ6XGfZppp3bp16tGjhyNk/jXCZde6+LtiRdtQdX69YG5WVpbHLZh7vUlKStJzzz1X4TZUnRUrVig+Pr7CbdUZ08EqKSsryymAaNu2rcaMGWNiRZ6N+a/uM2HCBE2ZMqXMHXxYjNt1yrtbkkTPXYmQxzynT59WcnKyTp486VinRpJGjRplYlWe76233lJkZKTS09MlSSEhIZo1axYhUBU6d+6cJOnnn382uRJryc/PV25uroqLi5WRkaGLn2f//PPPjvcErmGFBXOvN0ePHnV6bLfby0w9RdVau3ZtmcDn22+/JQSyooiICKWnpys6OlqStH//frVo0cLkqjxXefNfH3nkEbPL8khTpkyRxGLc7kSvzZOYmFju7cqjoqIUFxfHFF8XmDFjhlq2bKmbb76ZO/e40YkTJ/Tiiy9qw4YNksS17QJ9+vSRRMjsbjt27NDatWt16tQpp5+n/v7+evTRR02szPNZYcHc68XSpUu1dOlSFRcXa9iwYZIufFjo4+PjcVOTrhcpKSlKSUlRdna204jCoqIij7uhCCFQJR04cEDr1q1TaGioJCknJ0fh4eGO1fJZFb9qde/eXZGRkY75r2PGjGH+q5v89NNPOn/+vOPxxWseVaewsPCy+7mLj+s0bNhQp0+f1h133CFJ2rhxo4KCgpSZmam//e1vDK92gXPnzmnw4MFml2E5Pj4+Ki4udvyBdvz4cac/3lB1iouL9c033+jo0aMqLi52bGe0m2vExsYqNjZWmzZtciw4D/ewwoK514sBAwZowIAB+vjjj/XYY4+ZXY4ltGjRQsHBwSooKNA999zj2O7v768bb7zRxMqqHmsCVdLJkycvu79+/fpuqsQaFixYoK5duzLayo1SU1P1wQcfKC8vT3Xq1HEEnbNmzTK7NI/zzDPPyGazqbxvvzabTXPnzjWhKmuYOHGiJk+eXO620aNHc727wP/93/8pOjpaHTt2NLsUS9m5c6c+++wzHT16VO3atVNaWppGjRqlNm3amF2ax5k1a5bCwsK0YcMGPfDAA0pJSVF4eLhGjBhhdmke6eJaTP/617/KHYXCWkyuU96Cub1792Y0kAvt27dPERER8vf317p165SRkaH4+Hj+9sQ14SOhSqpfv7727dunrKws3XnnnTp9+rSKiorUoEEDs0vzSM2aNdM///lPZWZm6rbbblPXrl0VFRVldlkebfHixZo6daqmTJmiGTNmaNeuXY5pBKha8+bNM7sEyzp9+rRycnKcRnWePn1akhgl4SIrVqzQ0qVL5ePjIx8fH9a+cpNbbrlFzZo10/79+2UYhoYPH646deqYXZZHOn78uEaPHq3U1FTFxsaqW7dumjp1qtlleayL6/4UFRWV2UcY4VpeXl6Ki4tjOpIbzZ8/XzNnztThw4e1bNky9erVS3Pnzi3zgRaunZXWSeU33kpasmSJDh486AiBSkpKlJSU5FhPBVXr4lDfwsJCbdq0SR999JFycnI0Z84cs0vzWN7e3qpdu7YMw5Ddblfbtm310UcfmV2WRzp27JjCw8MvubBfZGSkmyuyjiFDhmjChAlq1KiRDMNQdna2Ro4cqaKiIvXs2dPs8jwSa2CZ5/z586pVq5ZKS0sdi4u2bt3a5Ko8j7e3tySpVq1a+s9//qO6detWOIIcV+/iWkw333yzWrZs6bRv3759ZpRkGd9//70WL16skydPym63e+Qfx9cbb29v2Ww2paamKj4+Xr169dLatWvNLssjWWmdVEKgStqyZYtmzJihsWPHSpLq1avH3SDc4Pjx48rMzNTJkycVHh5udjkerVatWioqKlLLli01Z84cBQUFOX6xRdVavny5nnrqKX344Yfl7p84caKbK7KOjh07as6cOTp27JgkKSwszLFg7t13321maR6HsNNcixYt0nfffafGjRs7PtG02WyEQC4QFxenwsJCDRw4UDNmzFBRUZEGDhxodlkeb8GCBWVuB1/eNlSdhQsX6qWXXlLTpk0ZdeUm/v7+Wrp0qdavX6/JkyfLbrerpKTE7LI8nt1uV35+vux2u2ObJ62TSghUST4+PrLZbI5veOUNQUXVWbRokbZs2aKGDRvq9ttv1wMPPKBatWqZXZZHGzNmjHx9fTV8+HCtX79eZ8+e1YMPPmh2WR7pqaeekkTYY4Zff3p25MgRSWIUkAsQdppr69atmj17tmrUqGF2KR6vd+/eki6MsmJNN9dLT09XWlqaTp8+reXLlzu2nz171ukPNlS90NBQNWnShADIjV588UWlpKTo6aefVt26dZWTk6N7773X7LI82sqVK/Xpp58qKCjI6UMUT7oRFCFQJd1+++165513dObMGSUnJ2vNmjWOH/qoeg0aNNDrr7/O+gVu5O/vr/z8fB04cECBgYFq3769x90O8XqUlpamkydPqrS01LGNQMJ1Dh486Ph3cXGxdu3apWbNmtFzFyDsNFfDhg1VWlpKCOQGBQUFWrJkidLS0iRJrVq10gMPPMDPUBcpKSlRUVGRSktLnUblBwQEaPTo0SZW5vkGDRqk6dOnq3Xr1k7fW1iM23Xq1q3r1N/Q0FB+Z3GxFStWaPbs2R79PZy7g12BnTt36ocffpBhGGrfvr1uueUWs0vyaKmpqdqzZ4+kC5+uxcTEmFyRZ/v666/16aefqm3btjIMQ3v37tUDDzygXr16mV2ax0pKStKJEycUEREhLy8vx/bHH3/cxKqs5ezZs0pKSnJM9YVrEHa6z/vvvy9Jys3N1ZEjR3TzzTc7LXrO95eqN2XKFLVq1Uo9evSQJK1fv1579uzRhAkTTK7Ms508eVL169dXUVGR/P39zS7HEl5//XX5+/uXmQ720EMPmViVZ0tPT9eCBQt09OhRlZSUyG63y9/fn3WYXGjy5Ml65ZVXPHpZDEYCVVJ2drZatmzpCH6Ki4uVnZ3N3cFc5OOPP9aBAwfUrVs3SReG5aWnp+uxxx4zuTLPtWzZMs2YMcORehcUFOiVV14hBHKhQ4cOadasWQyrNpGvr6+OHz9udhke7VJhJyGQa1xcaykyMpIPT9yksLDQafr0Aw88oK1bt5pYkTXk5eVp2rRpKioq0l//+lcdPnxYycnJGjlypNmleazCwkK98sorZpdhKe+//74SEhI0a9YsJSYmau3atcrKyjK7LI90cXppgwYNNGnSJHXs2NFjR7wRAlXSrFmz9Prrrzsee3l56c0339T06dNNrMpzbdu2TTNmzHD8wRAbG6uXX36ZEMiFQkJCVLNmTcfjmjVretQCaNejJk2aKD8/X8HBwWaXYhmJiYmO0M1ut+vYsWO6/fbbTa7KsxF2uldsbKykC2sX+vr6On6O2u12nT9/3sTKPFebNm20YcMGx/eSTZs2qWPHjiZX5fkWLlyoP/7xj5oxY4YkKSIiQnv37jW5Ks92880364cfflC7du3MLsVSGjVqJLvdLi8vL915550EcS5ycXppaGioQkNDVVJS4rGLcBMCVVJpaanTcGofHx+PvSiuF2fPnlVgYKDj33CtevXqafz48YqJiXHcijIqKsqRintS+m22i0FEUVGRRo8erebNmzt9f2Fqkuv8cjFFLy8v1a9fXyEhISZW5PkIO80xZcoUTZgwwTFNpri4WK+//rrTB1qoGsnJyfryyy8di0Lb7Xb5+flp+fLl3D7bxX79YdUvRxui6q1atUrLli2Tj4+PfHx8uEW8G/j5+amkpEQRERFatGiR6tatq3Pnzpldlke69dZbdeONN1riQytCoEqqU6eOUlNTHUOrt27d6tGLRZntvvvu08svv6w2bdo41qdhFJBrNWzYUA0bNnQ8vnit/3LRRVSNmJgY/fTTT2rVqpXT9j179qhevXomVWUNrVu3Vn5+vmOB6BtuuMHkijwXYae5iouLndZJ8ff35w8HF/nggw/MLsGSQkJClJaWJpvNppKSEq1YsULh4eFml+XRuNbd79lnn5Xdbtfjjz+uL7/8UqdOndIf/vAHs8vySG+//bays7PVrFkztWjRQi1atNBNN92kgIAAs0urciwMXUnHjx9XUlKScnNzJV34wfPss8+qUaNGJlfmufLy8nTw4EEZhqGbbrpJdevWNbskoEokJibq0Ucf1Y033ui0/eDBg1qyZInGjRtnUmWeb+PGjVq0aJFat24tSdq7d6+GDBmiLl26mFyZ57m4sP+lXHwP4BoTJkzQiBEjHGsEHTp0SO+9956mTp1qcmVA1Th9+rQWLlyoH3/8UXa7Xe3atdOIESP4kNaF9u3bp4iICPn7+2vdunXKyMjQ3XffzfIBLrRixQrFx8dXuA1V49y5czpw4IDS0tKUnp6ugwcPqm7dumrRooVHrTfGSKBKsNvtOnTokKZOnaqioiIZhuG0dgpcIzg4mEUt4ZFOnjxZJgCSpKioKJ08edKEiqxj6dKlmj59uoKCgiRd+CNiypQphEAucDHkWbRokQYPHuy075dBHFxj2LBhevPNNx3T8PLy8vTiiy+aXBVQderUqaPnn3/e7DIsZf78+Zo5c6YOHz6sZcuWqVevXkpKStLkyZPNLs1jrV27tkzg8+233xICuYifn5/atGmjqKgo3XTTTUpLS9PatWu1Y8cOs0urUoRAleDl5aVVq1apa9eu3IISwDUrLi6+qn24dna73REASVJgYKDsdruJFXm+H3/8scy2HTt2lAmGULWaN2+uN998U5mZmZKksLAwp+l4QHV34sQJLViwQPv375fNZlN0dLSGDRvmNLUdVcvb29uxbmR8fLx69eqltWvXml2WR0pJSVFKSoqys7P1pz/9ybG9qKiI0W4ukpKSorS0NB0+fFg1atRwBEFTpkzxuBkp/DZQSTfffLOWLVtWJgi6uHAxUN3t27dPLVu2rHAbrl1UVJSSk5MVFxfntP2bb75xTN2Aa7Rv315Tp07VHXfcIenC9LAOHTqYXJVnWr16tVatWqXs7Gy99NJLju0///yzWrRoYWJl1pGZmamjR4/q/PnzysjIkCT17NnT5Ko8T1JSkp577rkKt6FqzZkzR3379tWYMWMkSRs2bNBf/vIXTZs2zeTKPJe/v7+WLl2q9evXa/LkybLb7dwox0VatGih4OBgFRQU6J577nFs9/f3L3c0Oa7d3/72N4WHh6tPnz5q1aqVwsLCzC7JZQiBKmnNmjWSLqyKf5HNZnPcCQJVo7Cw8LL7Cd1cZ8GCBU6fNFxqG67d8OHD9ec//1kpKSmO0OfgwYMqKSlx/DKLqnX8+HHl5+dryJAh2rx5s/bt2yfDMBQdHa1u3bqZXZ5H6tatm9q3b6+PP/5YgwYNcmyvWbMm38vdYMmSJdqzZ4+OHj2qDh06aPv27WrZsiUhkAscPXrU6fHFZQTgWoZhqEePHo7HPXr0cPo9HVXvxRdfVEpKip5++mnVrVtXOTk5TnfdRNWpX7++6tevzzpubvT3v/9dhw8fVnp6upYsWaLMzEwFBwcrOjpa0dHRatu2rdklVhkWhsZ15ZlnnpHNZpNhGMrJyVFgYKAMw9CZM2cUGhqqefPmmV2ix0lPT1daWppWrFihu+++27H97Nmz2rp1q2bOnGlidZ5t165d+u9//yvpwm20PemHy/WGxbjN99NPP+n8+fOOxywk6lp/+MMfNHPmTI0dO1YzZ85Ufn6+3n77ba71KrR06VItXbpUxcXF8vPzk3QhmPDx8VFcXBx3NXWxjz76SLVq1VLXrl1ls9m0ceNGnT9/Xv369ZPEB4cArk1+fr42bdqkL7/8UtnZ2Vq8eLHZJVUZRgJV0rlz57R8+XLl5OToqaeeUlZWljIzM9WpUyezS/MoF0Oed955RzExMerYsaMkafv27eWuK4FrV1JSoqKiIpWWljrdDj4gIECjR482sTLP17ZtW4IfN2ExbvOkpqbqgw8+UF5enurUqaOcnByFh4dr1qxZZpfm0Xx9feXl5SUvLy+dPXtWQUFBys7ONrssjzJgwAANGDBAH3/8MYGPCTZu3ChJ+uqrr5y2r1mzhtH6AK7YkSNHHHcFS0tLU0lJiaKjo/Wb3/zG46axEwJV0ltvvaXIyEilp6dLunCL+FmzZhECucjBgwf15JNPOh536NDBo9LX60nr1q3VunVrxcbGqn79+pIuDGUvKipSQECAydUBVYPFuM2zePFiTZ06VVOmTNGMGTO0a9cubdiwweyyPF5UVJTOnDmj3r17a9y4cfL391fz5s3NLssjPfbYY8rNzdXJkydVWlrq2M4d8FyL0eHwZK+99ppeffXVcu+wCdd466231KJFC7Vv314DBw50/F3kiQiBKunEiRN68cUXHb+4+vr6mlyRZ6tTp44+++wzde/eXTabTevXr2clfBf7+OOP9bvf/U5eXl4aN26czp79/+3de1BTZ8IG8CdBEAGDiCLWG4M3EC91pYiKGqzaat1Ou0O9tiBeVsFdnaKAtYOXsqxKFTtKwWkti1htHd2VtcIWi1q5end2qwhUWVQKCHIRMKQIOd8fjvlKcVvbJnnDyfObcSZ5zz/PME5O8pz3osGcOXO41ptkgZtxi2NlZYXu3btDkiTodDqMHDkSBw8eFB1L9pYtWwYAmDlzJp5//nk0NzdzM1EjOXjwIPLy8tC/f38oFAoAj/eNZAlkXC0tLTh58iQKCwsBAJ6enpgxYwa/oxsBCwnTq6urQ0FBAS5fvoxJkybhxzu48LuL4VnSPqgsgZ5Rly5d0NLSor+5V1ZW8qhVI1qzZg2OHDmCHTt2AHh8Y1+zZo3gVPJWVlYGOzs7ZGdnY+zYsVi0aBHWr1/PEohkgZtxi2Nvbw+tVgsPDw/s3r0bjo6OsLKyEh1Ltn5qQ+KSkhL+cDCCCxcu4IMPPoC1tbXoKBYlPj4e3bp10+8BlJubi/j4eC5lUaVRawAAGKdJREFUNwIWEqY3b948pKamoqamBikpKR2ub9q0SUAqkgu2GM/ojTfeQExMDO7fv4/du3ejqKgIISEhomPJloODA4KDg0XHsChtbW1obW3FxYsX8fLLL6NLly760pOos+vRowf+8pe/tNuM+3e/+x33ZDKB8PBw2NjYYPHixcjOzoZGo0FAQIDoWLJ14MABAI9nSZSUlGDQoEGQJAl37tzBkCFDEB0dLTih/PTp0wdtbW0sgUysoqKi3eEVI0eOZKlvJCwkTM/X1xe+vr44evQo75lkcCyBntGYMWPg7u6Ob7/9FpIkYfHixVCpVKJjyVZ5eTm++OKLDuvreZMxnunTp2PVqlVwc3ODp6cnqqur0a1bN9GxiAyKm3Gbnq2tLaqrq1FRUQG1Wo3vv/8eOp1OdCzZenKf/OCDD7BixQoMHDgQAHDnzh188cUXIqPJlo2NDcLDwzFq1Kh2s8SXLFkiMJX8ubm5obi4GMOGDQMAfPvtt7LbvNVcsJAQJyAgAJcuXUJBQQEAwMvLi3vSmohWq4Wtra3oGEbBI+Kf0ZO1sD83RoYRHh6OGTNmwN3dHUqlUj/O6aam1dbWxmUbRPSbZGZm4tSpU2hqasKePXtQUVGBjz/+mPdPIwsPD283S+J/jdFv9/XXXz91XK1WmzSHpXn77bdRXl6OXr16AYD+5EGFQgGFQqHfUoAMi4WEaR06dAg3b96En58fgMfLHgcPHswTCY2oqKgIe/fuhVarRWJiIkpLS5GZmanfa08OOBPoZ7S0tKClpQWNjY1oamrSj2s0GtTV1QlMJm9KpRIzZ84UHcOi1NfX47PPPkNdXR02bNiAsrIyFBcXY9q0aaKjEVEnlpGRga1bt2LDhg0AgL59++LBgweCU8lfv379sHfvXv0BC1lZWejXr5/oWLLEskeMJ58pZDo/LiTS09NRVFTEQsKIrly5gtjYWP1DcbVajYiICP7NjWj//v149913ERsbC+DxrMMbN24ITmVYLIF+RmZmJtLS0lBXV4f169frN0Kzs7PDSy+9JDidfI0bNw4ZGRnw8fFpt8bewcFBYCp5S0hIgFqtxrFjxwA8/qG2a9culkBE9JtYW1u3WyLT1tbG/cZMIDQ0FCdPnkR6ejqAxwcs8OGKYcXFxSEsLAxr16596v9pzkQxrifHNz948ACPHj3Sjz+ZGUSGx0JCDI1Go/8NpNFoBKexDD/+HPnhyhQ5YAn0M2bPno3Zs2fjX//6F2bNmiU6jsU4e/YsAOD48eP6MYVCgfj4eFGRZK+xsRETJ05EamoqgMfHOsvtA4+ITG/EiBH4xz/+gZaWFvznP/9BRkYGlw+YgI2NDebMmYM5c+aIjiJbTw6wWL9+veAklunSpUtISUlBXV0dVCqVfjlYXFyc6GiyxkLCtF577TVERETAy8sLkiThxo0bLN2MzNnZGUVFRVAoFGhtbUV6errsZtKyBHpGs2bNQlFRUYeNiqdOnSowlXx9+OGHoiNYnK5du6KxsVH/NLO4uBh2dnaCUxFRZ7dw4UKcPn0aAwcOxFdffYWxY8fixRdfFB1L9ioqKnDo0CGUlZW1myXBhymG4+TkBODxjJT6+nrcunULADBkyBA4OjqKjGYRDh8+jJiYGERHRyM2NhbXrl1Dbm6u6FiyxkLC9Pz8/ODl5YVbt25BkiS8+eab6NGjh+hYsrZ8+XIkJyejtrYWK1euxOjRo7F06VLRsQyKJdAz2rNnD+7duwc3N7d2syNYAhnPnTt3Onx55d/beAIDAxEbG4vKykpERUWhoaEBYWFhomMRUSem0+kQHx+P1atXY/r06aLjWJSEhATMnTsX+/fvx4YNG3DmzBnRkWQrLy8Pn376KUaMGAEASEpKwltvvQVfX1/ByeTNysoK3bt3hyRJ0Ol0GDlyJA4ePCg6lqyxkBDDyckJ3t7eomNYDJVKhdWrV4uOYVQsgZ5RSUkJ4uLiuI+BiRw5cgQFBQUoKyvD2LFjcfXqVXh4eLAEMiJ3d3ds3rwZ5eXlkCQJzz33XLt9PIiIfimlUonGxka0trby88TEWlpaMGrUKEiShN69e2Pu3LnYuHEj5s6dKzqa7Bw7dgxbt27Vz/5paGhAdHQ0SyAjs7e3h1arhaenJ3bv3g1HR0eeaGoCLCRI7uLj4xEcHAx7e3sAQFNTE1JSUhAaGio4meHwG9kzGjBgAOrr6/VTf8m4zp07h/fffx+RkZEIDQ1FfX099u7dKzqW7N28eVO/5PG///0vAM6+IqLfpnfv3oiKisK4ceNga2urH+deNcZlY2MDnU6Hvn374ssvv0TPnj15KpuR6HS6dsu/HBwcoNPpBCayDOHh4bCxsUFQUBCys7Oh0WgQEBAgOhYRdXJ37tzRF0DA48/00tJScYGMgCXQM2psbERYWBiGDBnS7mlmZGSkwFTyZWNjA6VSCaVSCY1GA0dHR1RVVYmOJWtc8khExuDk5AQnJydIkoTm5mbRcSxGUFAQWlpaEBwcjMOHD+PatWtYtWqV6Fiy9PzzzyMmJgaTJk0CAOTm5mLs2LGCU8nfD0tltVotLgiREVVWVsLZ2RnW1ta4fv06bt++jalTp7YrKciwJElCU1OTfgP0pqamdnsCy4FCenLmOf2kgoKCp44/Wf9NhrVv3z4sWLAAubm5OHHiBGxtbeHm5iaraXjm5u233+aSRyIyGo1GA4VCgW7duomOYlG0Wm27H8tkHOfPn0dRUREkSYKnpyd8fHxERyIyOBYSphceHo5t27ahuroaMTExGDduHCoqKvDOO++IjiZbZ8+eRWpqKsaPHw/g8QqVP/zhD5gyZYrgZIbDEojMXlVVFZqbmzFo0CDRUWQtLi4OwcHBXPJIRAZ169YtJCQkQKvVAgDs7OwQEhICd3d3wcnkrbi4GImJidBqtUhMTERpaSkyMzOxbNky0dFkIzAwUP/g5Mdfp62treHq6or58+dj1KhRIuIRGRwLCdOLjIzE9u3bcfz4cVhbW2PWrFmIiIhAbGys6GiydvfuXVy/fh2SJGHUqFHo37+/6EgGxeVgPyMqKgrR0dHtbvTA45u9QqHA/v37BaazDC4uLqIjyNq2bdugUCig1Wq55JGIDC4xMRHLli2Dp6cnAKCwsBAJCQnYsWOH4GTylpycjHfffVf/Q8HNzQ03btwQnEpeUlJS/uc1nU6HO3fuYM+ePdi5c6cJU8nfe++9h40bN+LTTz/Fm2++KTqORVEqlbCyssKFCxcwe/ZsfSFBxmNlZYWcnBycPXtW/51cbkuTzNGAAQOgUqn0p1Tfv38fvXr1EpzKcFgC/Yzo6GgAP32jJ+rMXn31VdERiEjGunXrpi+AAMDDw4NLwkzkx19Yf7jfGxmXUqmEm5sbXn75ZdFRZKeurg4FBQW4fPkyJk2a1GEWFmcZGg8LCdMLDQ3FyZMn8frrr8PFxQVVVVWYPHmy6FiydunSJaSkpKCurg4qlQr3799Hv379EBcXJzqawbAEIrJwPXv2RH19PTw8PNqNFxQUoGfPnoJSEVFnV1JSAgAYPHgwPvroI0yaNAkKhQJ5eXncT88EnJ2dUVRUBIVCgdbWVqSnp6Nfv36iY1mcGTNmiI4gO/PmzUNqaipqamqe+pB206ZNAlJZBhYSpte/f38sWbIEwOMNipubm/Haa68JTiVvhw8fRkxMDKKjoxEbG4tr164hNzdXdCyDYglEZkeSJNy8eRO1tbVQKBRwcnLCkCFDuGGxkSQnJ2PBggUdxrt27Yrk5GSsX79eQCoi6uwOHDjQ7v3Ro0cFJbFMy5cvR3JyMmpra7Fy5UqMHj0aS5cuFR2L6Dfz9fWFr68vjh49yiPhTYyFhOlt3rwZERER0Ol0CA8Ph0qlwogRIxAUFCQ6mmxZWVmhe/fukCQJOp0OI0eOxMGDB0XHMiiWQGRW/v3vf2Pfvn3o27evfhZKTU0NKisrsWzZMowZM0ZwQvmprq5+6qbbgwcPRnV1tYBERCQHfBovlkqlwurVq0XHIDKagIAAXLp0SX+Cr5eXF8aNGyc4lbyxkDA9jUYDOzs7nDp1Cv7+/pg7dy7WrVsnOpas2dvbQ6vVwtPTE7t374ajoyOsrKxExzIolkBkVpKTkxEVFdVhM+iqqips3boVu3btEpRMvlpaWn7VNSIiMj9JSUk/ef3JU3yizu7QoUO4efMm/Pz8AADp6ekoKirCwoULBSeTLxYSptfW1oa6ujrk5+dj/vz5ouNYhPDwcNjY2CAoKAjZ2dnQaDSym3XIEojMSltbG5ydnTuM9+zZE62trQISyd/gwYORmZmJ6dOntxs/ffo0N1ckIupkfvi5feTIEbzxxhsC0xAZz5UrVxAbG6vf8FytViMiIoIlkBGxkDC9gIAAxMTEYPjw4RgyZAju3bsHV1dX0bFkzdbWVv9arVZDp9MhNzdXVvtfsQQis+Lv74933nkHEydO1J9qcv/+feTl5WHatGmC08nT4sWLsWPHDuTk5Oh/PNy6dQutra0IDw8XnI6IiH4JtVqtf52ent7uPZHcaDQaODg46F+TcbGQML0JEyZgwoQJ+vd9+vTh7Csj0Wg0yMjIQG1tLby9vTF69GhkZGTg+PHjcHNzk1UJpJB+fK4ikWBlZWW4dOkSamtrIUkSnJ2d4e3tjf79+4uOJmvXrl3D3bt3AQADBgzAyJEjBSciIjlYv3491Go1/Pz89D/WyDQiIyOxfft20TGIjCInJweHDh2Cl5cXJEnCjRs3sHDhQkyaNEl0NCKDqampQVJSkv60x+HDhyM4OPipKyfot4mNjYW9vT2GDRuGb775Bg8fPkRrayuCg4Ph5uYmOp5BsQQiIiIio6msrMSZM2eQl5eHwYMHQ61WY8yYMTzx0QRYApHc1dXV4datW5AkCUOHDkWPHj1ER5I1FhKmFx0dDT8/P0yZMgUAkJ2djezsbERFRQlOJj9r167Fzp07AQA6nQ5Lly5FQkICunXrJjiZ4XE5GJmV7777Dvv374dCoUBwcDD+/ve/4+LFi+jbty9WrVrF2UBERJ2Mq6srFixYgHnz5uHKlStITEyEUqmEv78/Zs+ezdlBBhYYGKgv2L7//nv9qT2SJEGhUGD//v0i4xEZlJOTE7y9vUXHsBgJCQnw8/NDWFgYgMeFREJCAgsJI2poaIC/v7/+vVqtRlpamsBE8tWly/9XI0qlEi4uLrIsgACWQGRmPvroI/z+97+HVqvFe++9h0WLFiE0NBSXL19GUlISNm7cKDoiERH9Qrdv38aZM2dw9epVjB8/HpMnT0ZhYSG2bNmC999/X3Q8WUlJSREdgYhkioWE6alUKmRlZelPwcvJyUH37t0Fp5Kn0tLSdg9OWlpaEBQUJMuHKCyByKw0Nzfrn+gcPnxYv67b29sbR44cERmNiIh+hcjISNjb22PatGlYtGgRrK2tAQBDhw5FUVGR4HRERPSsWEiYXkhICD755BP9Solhw4YhNDRUdCxZOnz4sOgIJsMSiMyKTqfTv54zZ067azwinoio8wkLC0OfPn3ajVVVVcHFxYUnnBDRr1ZZWQlnZ2dYW1vj+vXruH37NqZOnQp7e3vR0WSLhYTp9erVC5GRke3G0tLS8MorrwhKRHKgFB2A6IdeeuklaLVa/esnKisrMWrUKFGxiIjoV4qLi+sw9mTjRSKiX2vnzp1QKpWorKzE3r17UVVVhd27d4uOJWtPColPPvkE+/btQ0REBM6fPy86lsU5ceKE6AjUyXEmEJmVGTNmPHXc1dUVixcvNm0YIiL61b777jvcvXsXGo2m3Y+E5uZmPHr0SGAyIpIDpVIJKysrXLhwAbNnz8asWbMQEREhOpbFOXHiBGelEHUyLIGIiIjI4MrLy3HlyhU8fPgQly9f1o/b2tpixYoVApMRkRxYWVkhJycHZ8+e1S+XaWtrE5yKiMj8sQQiIiIig3vhhRfwwgsvoLi4GMOGDRMdh4hkJjQ0FCdPnsTrr78OFxcXVFVVYfLkyaJjERlEYGAgFApFh/Enp1YR/RYKSZIk0SGIiIhIXpKSkn7y+pIlS0yUhIjkrqmpCTU1NRg0aJDoKLL0c4XE559/LiAVEf1anAlEZqm+vh6fffYZ6urqsGHDBpSVlaG4uBjTpk0THY2IiJ6Bu7u76AhEJGObN29GREQEdDodwsPDoVKpMGLECAQFBYmOJjspKSmiIxCRAbEEIrOUkJAAtVqNY8eOAQD69u2LXbt2sQQiIuok1Gq16AhEJGMajQZ2dnY4deoU/P39MXfuXKxbt050LCIis8cSiMxSY2MjJk6ciNTUVACPN/9TKpWCUxER0S+1ZcuWp45v2rTJxEmISE7a2tpQV1eH/Px8zJ8/X3QcIqJOgyUQmaWuXbuisbFRv/64uLgYdnZ2glMREdEv9dZbb+lft7S04Pz587CyshKYiIjkICAgADExMRg+fDiGDBmCe/fuwdXVVXQsIiKzx42hySyVlJTgb3/7G+7cuYOBAweioaEBYWFh3PCPiEgGNm3a9D9nCBERERGR8XAmEJkld3d3bN68GeXl5ZAkCc899xy6dOF/VyKizqapqUn/WqfToaSkBPX19QITEZEc1NTUICkpCUVFRVAoFBg+fDiCg4Ph7OwsOhoRkVnjTCAyS+fPn+8wZmdnh4EDB8LR0VFAIiIi+jVWrVoFhUIBSZJgZWUFFxcXBAQEwMPDQ3Q0IurEoqOj4efnhylTpgAAsrOzkZ2djaioKMHJiIjMG6dWkFk6ffo0iouL4eXlBQAoKCjA0KFDUVFRgYCAAP0Nn4iIzNuHH34oOgIRyVBDQwP8/f3179VqNdLS0gQmIiLqHHjcEpklhUKBXbt2Yd26dVi3bh3i4uJgbW2Nv/71r/jnP/8pOh4RET2jL7/8Eg8fPtS/b2pqQkZGhsBERCQHKpUKWVlZ0Ol00Ol0yMrKQvfu3UXHIiIyeyyByCxVV1ejR48e+veOjo6oqKiAg4MDT5UhIupETp06BXt7e/17BwcHnDp1SmAiIpKDkJAQ5OfnY/ny5fjjH/+Ic+fOITQ0VHQsIiKzx+VgZJY8PT2xbds2+Pr6AgDOnTsHDw8PaLXadj8miIjIvEmSBEmSoFAoADzeHLq1tVVwKiLq7Hr16oXIyMh2Y2lpaXjllVcEJSIi6hy4MTSZJUmScP78eRQWFgIAPDw89IUQERF1HgcOHEB1dTVmzJgBhUKBkydPolevXggMDBQdjYhkJiQkBImJiaJjEBGZNZZA1CkUFhYiJycHy5YtEx2FiIh+AZ1Oh8zMTHzzzTeQJAljxozBiy++CKWSK9KJyLBYAhER/TwuByOzVVpaipycHOTn58PFxQU+Pj6iIxER0S+kVCoxc+ZMzJw5U3QUIiIiIovHEojMSnl5OfLy8pCbmwsHBwdMnDgRkiRh06ZNoqMREdEvEBcXh7CwMKxdu1a/H9AP7dixQ0AqIursAgMDn/qZIkkSWlpaBCQiIupcuByMzMq8efPg4eGBkJAQuLq6AgD+9Kc/IT4+XnAyIiL6JWpra9GzZ09UV1c/9Xrv3r1NnIiIiIiIuCCfzMratWvRo0cPbNmyBXv37tXvIUFERJ3L9u3bAQCff/45evfu3eEfEREREZkel4ORWfHx8YGPjw+0Wi0uXryItLQ0PHjwAB9//DF8fHwwZswY0RGJiOgZtLa24uuvv0ZxcTHOnz/f4fr48eMFpCIiIiKybFwORmavqakJ+fn5yMvL495ARESdRGFhIbKzs5Gfnw9vb+8O10NDQwWkIiIiIrJsLIGIiIjI4PLz8zFhwgRkZmZi+vTpouMQEREREbgnEBERERlBamoqAOCrr74SnISIiIiInuBMICIiIjK46Oho6HQ6lJaWwsPDo8P1yMhIAamIiIiILBtLICIiIjK41tZWlJSUID4+HitXruxwfcSIEQJSEREREVk2lkBERERkNA0NDVCpVKJjEBERERF4RDwREREZQXJyMhYvXoyEhAQoFIoO17kcjIiIiMj0WAIRERGRwU2ZMgUA8OqrrwpOQkRERERPcDkYERERGVVDQwMAcFkYERERkWCcCUREREQGJ0kSjhw5goyMDEiSBEmSoFQqMWvWLAQEBIiOR0RERGSROBOIiIiIDO7EiRO4evUqVqxYARcXFwDAvXv3sG/fPowZMwZz5swRnJCIiIjI8ihFByAiIiL5ycrKwpo1a/QFEAD06dMHf/7zn5GVlSUwGREREZHlYglEREREBtfW1vbUPYBUKhXa2toEJCIiIiIilkBERERkcF26/O9tB3/qGhEREREZD7+FERERkcGVlpYiKCiow7gkSXj06JGARERERETEjaGJiIiIiIiIiCwAl4MREREREREREVkAlkBERERERERERBaAJRARERERERERkQVgCUREREREREREZAFYAhERERERERERWYD/AzIzzYJOEkOkAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"s_odds = np.exp(s)\n",
"color = ['r' if v > 1 else 'b' for v in s_odds]\n",
"\n",
"ax = s_odds.plot(kind='bar', color=color, figsize=(20, 4))\n",
"_ = ax.set_title(f'Logistic Regression, coefficient odds')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tabular output of coefficients with odds"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" coefficient | \n",
" coefficient_odds | \n",
"
\n",
" \n",
" \n",
" \n",
" intercept | \n",
" -2.2125 | \n",
" 0.1094 | \n",
"
\n",
" \n",
" Age 30 and over | \n",
" -0.2601 | \n",
" 0.7710 | \n",
"
\n",
" \n",
" Chest pain | \n",
" 0.6929 | \n",
" 1.9995 | \n",
"
\n",
" \n",
" Chills | \n",
" 0.3731 | \n",
" 1.4522 | \n",
"
\n",
" \n",
" Cough | \n",
" 0.4291 | \n",
" 1.5359 | \n",
"
\n",
" \n",
" Difficulty breathing | \n",
" 0.2009 | \n",
" 1.2225 | \n",
"
\n",
" \n",
" Headaches | \n",
" 1.0631 | \n",
" 2.8952 | \n",
"
\n",
" \n",
" Joint pain | \n",
" 0.3509 | \n",
" 1.4204 | \n",
"
\n",
" \n",
" Loss of appetite | \n",
" 0.2733 | \n",
" 1.3143 | \n",
"
\n",
" \n",
" Loss of smell | \n",
" 0.1747 | \n",
" 1.1909 | \n",
"
\n",
" \n",
" Loss of taste | \n",
" 0.3813 | \n",
" 1.4643 | \n",
"
\n",
" \n",
" Race White | \n",
" 0.1132 | \n",
" 1.1199 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" coefficient coefficient_odds\n",
"intercept -2.2125 0.1094\n",
"Age 30 and over -0.2601 0.7710\n",
"Chest pain 0.6929 1.9995\n",
"Chills 0.3731 1.4522\n",
"Cough 0.4291 1.5359\n",
"Difficulty breathing 0.2009 1.2225\n",
"Headaches 1.0631 2.8952\n",
"Joint pain 0.3509 1.4204\n",
"Loss of appetite 0.2733 1.3143\n",
"Loss of smell 0.1747 1.1909\n",
"Loss of taste 0.3813 1.4643\n",
"Race White 0.1132 1.1199"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame({\n",
" 'coefficient': s,\n",
" 'coefficient_odds': s_odds\n",
"}).round(decimals=4)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12, 2)"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(pd.DataFrame({\n",
" 'coefficient': s,\n",
" 'coefficient_odds': s_odds\n",
"}).round(decimals=4)).shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.8.11"
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}