{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "83573fc7",
   "metadata": {},
   "source": [
    "# check moderation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b5def06f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T22:09:01.583073Z",
     "start_time": "2023-12-14T22:09:01.573287Z"
    }
   },
   "outputs": [],
   "source": [
    "import modal\n",
    "import json\n",
    "from uuid import uuid4\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ce7492a8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:57:49.242645Z",
     "start_time": "2023-12-14T21:57:47.844395Z"
    }
   },
   "outputs": [],
   "source": [
    "f = modal.Function.lookup(\"chirpv2_moderator\", \"ModerationStub.moderate_text\")\n",
    "inputs = [\n",
    "        \"I hate coding so fuckin gmuch\" ,\n",
    "    ]\n",
    "fn_call = f.remote(inputs[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e2b14e42",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:57:49.245880Z",
     "start_time": "2023-12-14T21:57:49.244334Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_result(input_text):\n",
    "    return f.remote(input_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6a2f92b1",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:57:50.011450Z",
     "start_time": "2023-12-14T21:57:49.248169Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "from sklearn import model_selection\n",
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b1de001b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:57:50.014498Z",
     "start_time": "2023-12-14T21:57:50.012894Z"
    }
   },
   "outputs": [],
   "source": [
    "good_data = \"/home/victor/glockenspiel/notebooks/good_prompts.jsonl\"\n",
    "bad_data = \"/home/victor/glockenspiel/notebooks/bad_prompts.jsonl\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d78b02b2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:57:50.119310Z",
     "start_time": "2023-12-14T21:57:50.016024Z"
    }
   },
   "outputs": [],
   "source": [
    "x_data = []\n",
    "y_data = []\n",
    "with open(good_data, \"r\") as fp:\n",
    "    for l in fp.readlines():\n",
    "        line = json.loads(l)\n",
    "        x_data.append(line.get(\"prompt\", \"\"))\n",
    "        y_data.append(1)\n",
    "with open(bad_data, \"r\") as fp:\n",
    "    for l in fp.readlines():\n",
    "        line = json.loads(l)\n",
    "        if random.random() < 0.25:\n",
    "            x_data.append(line.get(\"prompt\", \"\"))\n",
    "            y_data.append(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "599a4360",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:57:50.332680Z",
     "start_time": "2023-12-14T21:57:50.120780Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2126, 2126)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(x_data), len(y_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "9bbe4f55",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T22:12:01.401841Z",
     "start_time": "2023-12-14T22:11:40.728794Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  1%|█▎                                                                                                             | 26/2126 [00:20<27:48,  1.26it/s]\n"
     ]
    },
    {
     "ename": "AttributeError",
     "evalue": "'list' object has no attribute 'apppend'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[16], line 6\u001b[0m\n\u001b[1;32m      4\u001b[0m     results\u001b[38;5;241m.\u001b[39mappend(f\u001b[38;5;241m.\u001b[39mremote(data))\n\u001b[1;32m      5\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m----> 6\u001b[0m     \u001b[43mresults\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapppend\u001b[49m({})\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'list' object has no attribute 'apppend'"
     ]
    }
   ],
   "source": [
    "results = []\n",
    "for data in tqdm(x_data):\n",
    "    if data:\n",
    "        results.append(f.remote(data))\n",
    "    else:\n",
    "        results.append({})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "393a2d77",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:58:27.864818Z",
     "start_time": "2023-12-14T21:58:27.864809Z"
    }
   },
   "outputs": [],
   "source": [
    "\n",
    "model_out = []\n",
    "for data in x_data:\n",
    "    fn_call = f.remote(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "c9a36101",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:18:19.419737Z",
     "start_time": "2023-12-15T00:18:19.416667Z"
    }
   },
   "outputs": [],
   "source": [
    "x_train, x_test, y_train, y_test = model_selection.train_test_split(x_data, y_data, test_size=0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "270f010c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d8276f2c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T21:58:27.866508Z",
     "start_time": "2023-12-14T21:58:27.866499Z"
    }
   },
   "outputs": [],
   "source": [
    "len(x_train), len(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "8b4dcff2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T23:35:39.262167Z",
     "start_time": "2023-12-14T23:35:39.244740Z"
    }
   },
   "outputs": [],
   "source": [
    "results = []\n",
    "with open(\"/home/victor/glockenspiel/notebooks/mod_results.jsonl\", \"r\") as fp:\n",
    "    for line in fp.readlines():\n",
    "        results.append(json.loads(line))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "fb0db9c4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T23:35:40.023852Z",
     "start_time": "2023-12-14T23:35:40.016086Z"
    }
   },
   "outputs": [],
   "source": [
    "df = pd.DataFrame(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "2273f2bb",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-14T23:36:26.450164Z",
     "start_time": "2023-12-14T23:36:26.448291Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2035, 5)\n"
     ]
    }
   ],
   "source": [
    "print(df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "067a2c3f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:14:12.126660Z",
     "start_time": "2023-12-15T00:14:12.124841Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.utils import shuffle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "f00e386c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:14:12.346554Z",
     "start_time": "2023-12-15T00:14:12.345027Z"
    }
   },
   "outputs": [],
   "source": [
    "rf = RandomForestClassifier(n_estimators=100, max_depth=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "7a632d72",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:14:12.901132Z",
     "start_time": "2023-12-15T00:14:12.892382Z"
    }
   },
   "outputs": [],
   "source": [
    "df = shuffle(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "a2110550",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:20:17.110027Z",
     "start_time": "2023-12-15T00:20:17.108142Z"
    }
   },
   "outputs": [],
   "source": [
    "candidate_labels = [\n",
    "            \"threatening\",\n",
    "            \"harrassment\",\n",
    "            \"self-harm\",\n",
    "            \"harmful\",\n",
    "            \"offensive\",\n",
    "            \"sexual\",\n",
    "            \"murder\",\n",
    "            \"rape\",\n",
    "            \"violence\",\n",
    "            \"gore\",\n",
    "            \"minors\",\n",
    "            \"racist\",\n",
    "            \"cheerful\",\n",
    "            \"normal\",\n",
    "            \"ok\",\n",
    "            \"good\",\n",
    "        ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "96f5d39e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:21:05.721334Z",
     "start_time": "2023-12-15T00:21:05.718279Z"
    }
   },
   "outputs": [],
   "source": [
    "df[\"label_idx\"] = df[\"max_label\"].apply(lambda x: candidate_labels.index(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "357f7d80",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:21:05.878559Z",
     "start_time": "2023-12-15T00:21:05.876040Z"
    }
   },
   "outputs": [],
   "source": [
    "train_df, test_df = model_selection.train_test_split(df, test_size=0.4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "e2bbb8b8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:21:24.698482Z",
     "start_time": "2023-12-15T00:21:24.695505Z"
    }
   },
   "outputs": [],
   "source": [
    "x_train = train_df[[\"total_score\", \"max_score\", \"label_idx\"]]\n",
    "y_train = train_df[\"y_true\"]\n",
    "x_test = test_df[[\"total_score\", \"max_score\", \"label_idx\"]]\n",
    "y_test = test_df[\"y_true\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "f281596f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:21:06.646080Z",
     "start_time": "2023-12-15T00:21:06.513638Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(max_depth=5)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(max_depth=5)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(max_depth=5)"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_ = rf.fit(x_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "db2b24a0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:21:48.315570Z",
     "start_time": "2023-12-15T00:21:48.304040Z"
    }
   },
   "outputs": [],
   "source": [
    "y_pred_test = rf.predict_proba(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "71fb5b9c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:22:29.075231Z",
     "start_time": "2023-12-15T00:22:29.073300Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df[\"pred_prob\"] = y_pred_test[:, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "94591e6d",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_df[\"pred_prob\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "1c1fa1cd",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:23:59.380650Z",
     "start_time": "2023-12-15T00:23:59.100526Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import RocCurveDisplay\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "3ed75828",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:24:22.714514Z",
     "start_time": "2023-12-15T00:24:22.504848Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbgAAAHcCAYAAACkr7//AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACEpElEQVR4nO3dd1hTZxsG8DsECEOmyEYBRXFvrFsUxVG3lTrRqlXrqqt1b8W6at17VovVOqti1Yq7Llx1yxCqgoICMgRJnu8PPgIhgAQSDoTnd125SN4z8uQQcnNO3nNeERERGGOMMS2jI3QBjDHGmCZwwDHGGNNKHHCMMca0EgccY4wxrcQBxxhjTCtxwDHGGNNKHHCMMca0EgccY4wxrcQBxxhjTCtxwDHGGNNKHHCs0B48eID+/fvDwcEBEokE9vb26NevHx48eCB0aRrVqlUriEQi+c3Q0BC1atXCypUrIZPJNPa8ixYtwuHDh/M1b1hYmEKNOjo6sLS0RIcOHXD16tVcl7t8+TK6d+8OGxsbSCQSODs7Y/jw4QgPD891mTt37qB///5wcnKCRCKBpaUlvLy8sH37dkilUlVfJmOFJuJrUbLCOHjwIPr06QNLS0sMGTIELi4uCAsLw9atWxETEwN/f390795d6DI1olWrVggODoafnx8AIDo6Gnv37sWNGzcwbdo0LFy4UCPPW6ZMGfTq1Qs7duz47LxhYWFwcXFBnz590LFjR0ilUjx9+hTr1q1DcnIybty4gZo1ayoss3r1aowbNw6urq4YNGgQ7Ozs8OjRI2zZsgUAcOLECTRp0kRhmS1btmDEiBGwsbHBgAED4Obmhg8fPuDs2bM4fvw4FixYgGnTpqltGzCWL8RYAT1//pyMjIzI3d2d3rx5ozDt7du35O7uTsbGxhQcHCxQhZrVsmVLql69ukJbcnIyVahQgUxMTCgtLU0jz2tsbEy+vr75mjc0NJQA0NKlSxXaT548SQBo5MiRCu2XLl0iHR0dat68OSUmJipMe/78OdnY2JCdnR29e/dO3n716lUSi8XUrFkzio+PV6rhxo0btH379vy9OA1JTk4mqVQqaA2s6HHAsQIbPnw4AaALFy7kOP38+fMEgIYPHy5vmz17NgGgZ8+eka+vL5mZmZGpqSkNGjRI6QOViGj37t1Ur149MjAwIAsLC/Lx8aHw8PA867px4wYBoB07dihNCwgIIAB07NgxIiKKj4+ncePGUYUKFUhfX5/KlStHXl5edOvWrc++/pwCjoioV69eBIBevXql8mt5+vQp9ejRg2xsbEgikZCDgwP5+PhQbGwsEREBULrlFXa5BVxCQgIBoHbt2im0e3t7k1gsppCQkBzXt3PnTgJAfn5+8rb27duTrq4uvXjxItc68uPEiRPUokULKlOmDJmYmFCDBg1oz5498ukVKlTI8bW2bNmSWrZsKX987tw5AkC//fYbTZ8+nezt7UkkEqn0viAi+u+//2jw4MFkbW1N+vr6VK1aNdq6davSsqtWraJq1aqRoaEhmZubU/369RXqJiJ69OhRobcPUx0HHCswe3t7cnZ2znMeZ2dncnR0lD/OCLi6detSjx49aN26dTR06FACQD/88IPCsgsWLCCRSEQ+Pj60bt06mjt3LllZWZGzszO9f/8+z+d1dXWljh07KrUPHjyYLCwsKDU1lYiI+vbtS/r6+jRhwgTasmUL/fTTT9S5c2f69ddfP/v6cwu4Bg0akEgkoqSkJJVeS0pKCrm4uJC9vT0tWLCAtmzZQnPnzqWGDRtSWFgYEaWHpEQioebNm9Pu3btp9+7ddOXKlVxrzC3g/v33XwJAPj4+8rbExETS1dWlVq1a5bq+jx8/kkQioaZNm8qX0dPTo9atW392e+Vl+/btJBKJqEaNGrRw4UJau3YtDR06lAYMGCCfR9WAq1atGtWpU4dWrFhBfn5+lJiYmO/3RWRkJDk6OpKTkxPNmzeP1q9fT126dCEA9PPPP8uX27RpEwGgXr160caNG+mXX36hIUOG0NixYxXWD0ChRlY0OOBYgcTGxhIA6tq1a57zZXwoZBy6ygi4b775RmG+7t27U9myZeWPw8LCSCwW08KFCxXmu3//Punq6iq1Zzd16lTS09NTOJSWkpJC5ubmCs9tZmZGo0aNynNduWnZsiW5u7vT27dv6e3bt/T48WOaPHkyAaBOnTqp/Fpu375NAGj//v15Pm9BDlHOnTuX3r59S5GRkXTx4kVq2LCh0nPduXOHANC4cePyXGetWrXI0tKSiIju3r2br2XyEhsbSyYmJtSoUSNKTk5WmCaTyeT3VQ04V1dXhX8yiPL/vhgyZAjZ2dlRdHS0wvJff/01mZmZydfbtWvXHP/JyY4DThjci5IVyIcPHwAAJiYmec6XMT0+Pl6hfcSIEQqPmzdvjpiYGPl8Bw8ehEwmQ+/evREdHS2/2draws3NDefOncvzeX18fPDp0yccPHhQ3vbXX38hNjYWPj4+8jZzc3Ncu3YNr169+swrztnjx49Rrlw5lCtXDu7u7li6dCm6dOmi0AEkv6/FzMwMAHDq1CkkJSUVqJ7czJ49G+XKlYOtrS2aN2+OR48eYfny5ejVq5d8HlV+pxm/p4yfn1smL6dPn8aHDx8wZcoUGBgYKEwTiUQFXq+vry8MDQ0V2vLzviAi/PHHH+jcuTOISOF35u3tjbi4OAQFBQFIf//8999/uHHjRp61EBECAwML/FpYwXDAsQLJ+EDL+FDMTW4fmuXLl1d4bGFhAQB4//49AODZs2cgIri5uckDJOP26NEjvHnzBgCQkJCAyMhI+e3t27cAgNq1a8Pd3R379u2TP8e+fftgZWWF1q1by9uWLFmCf//9F05OTvDw8MCcOXMQEhIin57b+jM4Ozvj9OnTOHXqFNatWwcHBwe8fftW4YM6v6/FxcUFEyZMwJYtW2BlZQVvb2+sXbsWcXFxeW7j/Pj2229x+vRpHDt2DOPHj0dycrJS131VfqcZ85qamuZrmbwEBwcDAGrUqFHgdeTExcVFqS0/74u3b98iNjYWmzZtUvp9DR48GADkv7Mff/wRZcqUgYeHB9zc3DBq1ChcvnxZra+DFZyu0AWwksnMzAx2dna4d+9envPdu3cPDg4O8g/CDGKxOMf56f9nrchkMohEIpw8eTLHecuUKQMAWLZsGebOnStvr1ChAsLCwgCk/7e+cOFCREdHw8TEBEePHkWfPn2gq5v5tu/duzeaN2+OQ4cO4a+//sLSpUvx008/4eDBg+jQoUOe6wcAY2NjeHl5yR83bdoU9erVw7Rp07Bq1SqVXgsALF++HIMGDcKRI0fw119/YezYsfDz88M///wDR0fHHLdZfri5ucnr/PLLLyEWizFlyhR4enqiQYMGAIBKlSpBV1c3z99pSkoKnjx5orTM/fv3C1xbfuW2NyeVSnPcrtn33jJ87n2RcQ5j//794evrm+M6atWqBQCoWrUqnjx5gj///BMBAQH4448/sG7dOsyaNUvhfcMEIuTxUVayDRs2jADQxYsXc5x+4cKFXHtRvn37VmHe7du3EwAKDQ0lIqIlS5YQAHry5EmeNQQHB9Pp06flt0uXLsmnPXz4kADQhg0b6NChQwSAzp07l+f6oqKiyMHBQd6JIq/159bJxNfXl/T19eW95vL7WnJy+fJlAkDTp0+Xt5UpU6bQpwm8f/+ezMzMyNvbW6G9bdu2JBaL5Z1astu1a5dSL8p27dqRrq7uZ3u35mb//v0EgA4dOpTnfHXr1s3xO18nJ6ccv4PL7bvMz70v0tLSyMTEhPr06aPya0lJSaFOnTqRWCxW+j6RFT0OOFZgT58+JUNDQ6pWrZrSl/ExMTFUrVo1MjIyoufPn8vb8xtwz58/J7FYTH379lXoaECU3vEg+/PlpmbNmuTp6Ulff/012dnZKZwLlZaWJu9+n1XDhg2pQYMGn113bgH34MEDEolE8o4X+X0tcXFx9OnTJ4Xp8fHxpKOjQ5MmTZK32djYfLZzT4bcAo6I6IcffiAAdPv2bXnb+fPnSUdHh1q1aqXUQSMkJIRsbW2VzoO7fPkyicViatmyJX348EHpeW7evJlj1/wMcXFxZGJiQh4eHnl2MunVqxfZ2NhQSkqKvO3YsWNKHTg+F3BEeb8viIgGDRpE+vr6dP/+faVls57zmdP7cPLkyaSjo6NwTiCfJiAMPkTJCszNzQ07d+5Ev379ULNmTaUrmURHR+O3335DxYoVVV53xYoVsWDBAkydOhVhYWHo1q0bTExMEBoaikOHDuHbb7/FpEmTPrseHx8fzJo1CwYGBhgyZAh0dDK/dv7w4QMcHR3Rq1cv1K5dG2XKlMGZM2dw48YNLF++XOWaM1SrVg0dO3bEli1bMHPmzHy/lr///hujR4/GV199hcqVKyMtLQ27d++GWCxGz5495euvX78+zpw5gxUrVsDe3h4uLi5o1KiRynWOGzcOK1euxOLFi+Hv7w8AaNGiBZYtW4YJEyagVq1a8iuZPH78GJs3b4ZMJsOJEyfk35kCQJMmTbB27Vp89913cHd3V7iSSWBgII4ePYoFCxbkWoepqSl+/vlnDB06FA0bNkTfvn1hYWGBu3fvIikpCTt37gQADB06FAcOHED79u3Ru3dvBAcH49dffy3Q+yuv9wUALF68GOfOnUOjRo0wbNgwVKtWDe/evUNQUBDOnDmDd+/eAQDatWsHW1tbNG3aFDY2Nnj06BHWrFmDTp06KXzvXLVqVbRs2ZI7mhQ1oROWlXz37t2jPn36kJ2dHenp6ZGtrS316dMnx/9+87sHl+GPP/6gZs2akbGxMRkbG5O7uzuNGjUq34f7nj17Jj8hOuvhRaL0w0mTJ0+m2rVrk4mJCRkbG1Pt2rVp3bp1+Vp3bntwRESBgYEEgGbPnp3v1xISEkLffPMNVaxYkQwMDMjS0pI8PT3pzJkzCut+/PgxtWjRggwNDQt8oneGQYMGkVgsVtjLJko/vNy1a1eysrIiPT09Kl++PA0bNizXQ5dERLdu3aK+ffuSvb096enpkYWFBbVp04Z27tyZr6uIHD16lJo0aUKGhoZkampKHh4e9NtvvynMs3z5cnJwcJCfi3fz5s1cTxPIaw8ur/dFhqioKBo1ahQ5OTnJ39dt2rShTZs2yefZuHEjtWjRgsqWLUsSiYQqVqxIkydPpri4OIV1gU8TEARfi5IxxphW4tMEGGOMaSUOOMYYY1qJA44xxphW4oBjjDGmlTjgGGOMaSUOOMYYY1qJA64U2LFjB0QikcI1FNVh0KBBcHZ2LtCyc+bMKdSV4ouz7777Dm3bthW6DKYhmn7vFubvKjcxMTEwNjbGiRMn1Lre4o4DrgTq0qULjIyM8ryCe79+/aCvr4+YmJgirIyFhoZiy5YtmDZtmkL727dvMW7cOLi7u8PQ0BDW1tbw8PDAjz/+iISEBJWf58qVK5gzZw5iY2PVVLlmyGQyLFu2DG5ubjA0NETFihUxcuTIfL/mWrVqoXz58sjrdN2Mq4ikpaWpq2ytU7ZsWQwdOhQzZ84UupSiJfCJ5qwA/P39CQDt3Lkzx+mJiYlkbGxMnTt3JqL0ay4mJycrXQexsFJTU+njx48FWvbTp09aeTHacePGUeXKlRXaYmJiqHz58mRubk4TJkygTZs2kZ+fH/Xp04dMTEyUrt6SH0uXLs3xyi/FzYoVKwgAdevWjTZu3EjTpk0jFxeXfNe9ePFiAkDnz5/PcXpoaCiJRCIaM2aMGqvOm6bfu76+vlShQgW1rzfjItNnz55V+7qLKw64EigpKYlMTEyUrgSfYe/evQSA/P39871OmUymdHFdpprU1FSysrKiGTNmKLRnjCZw+fJlpWXi4uIK9GFZUgLOw8ODqlevrvDPlVQqVbqodG7Cw8NJJBIpjEiR1aJFiwgA/fPPP4WqMzk5OV+XEysK6gw4qVSq8P6qUaMGDRgwQC3rLgn4EGUJZGhoiB49euDs2bPygRez2rt3L0xMTNClSxcAOX8H5+zsjC+//BKnTp1CgwYNYGhoiI0bNwIAXrx4gS5dusDY2BjW1tYYP348Tp06BZFIpHCx2OzfFYSFhUEkEmHZsmXYtGkTKlasCIlEgoYNGyqNeJzb9xi//vorPDw8YGRkBAsLC7Ro0QJ//fWXfPqRI0fQqVMn2NvbQyKRoGLFipg/f77S4J3ZHThwACKRCOfPn1eatnHjRohEIvz7778AgMjISAwePBiOjo6QSCSws7ND165dP/sd5qVLlxAdHa0wPhyQPqCnWCzGF198obSMqamp0ijW165dQ/v27WFmZgYjIyO0bNlSYRDNOXPmYPLkyQDSB/UUiUQKv9+0tDTMnz9fvv2dnZ0xbdo0pKSkKDzPzZs34e3tDSsrKxgaGsLFxQXffPONwjzLli1DkyZNULZsWRgaGqJ+/fo4cOBAntshKx0dHfl4eFnbso7JlxcnJye0aNECBw4cwKdPn5Sm7927FxUrVpRfbPrly5f45ptvYGNjA4lEgurVq2Pbtm0KywQGBkIkEsHf3x8zZsyAg4MDjIyMEB8fj0+fPmHu3Llwc3ODgYEBypYti2bNmuH06dPy5Qv63gWAdevWoXr16pBIJLC3t8eoUaPydZg5MTEREydOhJOTEyQSCapUqYJly5YpHboViUQYPXo09uzZI3+egIAA+fS2bdvi2LFjeR7y1SpCJywrmL/++osA0OrVqxXaY2JiSE9PjwYOHChvy+lCxhUqVKBKlSqRhYUFTZkyhTZs2EDnzp2jhIQEcnV1JUNDQ5oyZQqtXLmSPDw8qHbt2krjZmX/TzPjwr5169alSpUq0U8//URLliwhKysrcnR0pNTUVPm8GRddzmrOnDkEgJo0aUJLly6lX375hfr27Us//vijfJ5u3bpR7969aenSpbR+/Xr66quvCIDCcDI5SUpKojJlytB3332nNM3T01PhoslNmjQhMzMzmjFjBm3ZsoUWLVpEnp6euR4my7BgwQISiURKF9rN2MvIa8iYDGfPniV9fX1q3LgxLV++nH7++WeqVasW6evr07Vr14iI6O7du9SnTx8CQD///DPt3r2bdu/eTQkJCUSU/nsBQL169aK1a9fSwIED5YcJM0RFRZGFhQVVrlyZli5dSps3b6bp06dT1apVFepxdHSk7777jtasWUMrVqwgDw8PAkB//vnnZ18LUfrFiPH/sdcKatOmTQSAjh07ptB+7949AkCzZs0iIqLIyEhydHQkJycnmjdvHq1fv566dOki304ZMi7GXK1aNapTpw6tWLGC/Pz8KDExkaZNm0YikYiGDRtGmzdvpuXLl1OfPn1o8eLF8uUL+t7NWM7Ly4tWr15No0ePJrFYTA0bNlT428j+dyWTyah169YkEolo6NChtGbNGurcuTMBoO+//16hDgBUtWpVKleuHM2dO5fWrl2rMBzSr7/+SgByvBC6NuKAK6HS0tLIzs6OGjdurNC+YcMGAkCnTp2St+UWcAAoICBAYfnly5cTADp8+LC8LTk5mdzd3fMdcGXLllUYL+zIkSNKH1DZPySePXtGOjo61L17d6VDRVkPb+V0GHX48OFkZGT02e8D+/TpQ9bW1pSWliZve/36Neno6NC8efOIKH0gUORx9f289O/fn8qWLavUHhkZSeXKlSMA5O7uTiNGjKC9e/cqjUUnk8nIzc2NvL29lV6zi4sLtW3bVt6W2yHKO3fuEAAaOnSoQvukSZMIAP39999ERPKBPm/cuJHna8q+vVNTU6lGjRrUunXrPJfLMGXKFNLX1yexWEwHDx7M1zLZvXv3jiQSidIApFOmTFEYSHbIkCFkZ2enNEbb119/TWZmZvLXkhFwrq6uSq+vdu3a1KlTpzzrKch7982bN6Svr0/t2rVTmGfNmjUEgLZt2yZvy/53dfjwYQJACxYsUFh3r169SCQSKYwEAYB0dHTowYMHOdZ+5coVAkD79u3L8zVqCz5EWUKJxWJ8/fXXuHr1qsKhs71798LGxgZt2rT57DpcXFzg7e2t0BYQEAAHBwf54U0AMDAwwLBhw/Jdm4+Pj8J4Yc2bNwcAhISE5LrM4cOHIZPJMGvWLKWxubIeDjI0NJTf//DhA6Kjo9G8eXMkJSXh8ePHn63rzZs3CodZDxw4AJlMBh8fH/n69fX1ERgYiPfv33/+xWYRExOj8Loz2NjY4O7duxgxYgTev3+PDRs2oG/fvrC2tsb8+fPlh4vu3LmDZ8+eoW/fvoiJiUF0dDSio6ORmJiINm3a4MKFC5DJZHnWkNENfMKECQrtEydOBAAcP34cAGBubg4A+PPPP3M89Jch6/Z+//494uLi0Lx5cwQFBX1mawCrVq3CihUrcPnyZfTp0wdff/210iE7iUTy2Z59FhYW6NixI44ePYrExEQAABHB398fDRo0QOXKlUFE+OOPP9C5c2cQkXzbRUdHw9vbG3FxcUo1+/r6Kry+jO3y4MEDPHv27LOvL0N+3rtnzpxBamoqvv/+e4V5hg0bBlNTU/nvJScnTpyAWCzG2LFjFdonTpwIIsLJkycV2lu2bIlq1arluK6M92d0dHS+X19JxgFXgvXr1w9AeqgBwH///YeLFy/i66+/hlgs/uzyLi4uSm0vXrxAxYoVlb5jqFSpUr7rKl++vMLjjD+qvAIjODgYOjo6uf5hZnjw4AG6d+8OMzMzmJqaoly5cujfvz8AIC4uLs9lM77X2rdvn7xt3759qFOnDipXrgwg/QP3p59+wsmTJ2FjY4MWLVpgyZIliIyMzHPdGSiX7zbs7Oywfv16vH79Gk+ePMGqVatQrlw5zJo1C1u3bgUA+Yeqr68vypUrp3DbsmULUlJSPvsaX7x4AR0dHaXfl62tLczNzfHixQsA6R+CPXv2xNy5c2FlZYWuXbti+/btSt/T/fnnn/jiiy9gYGAAS0tLlCtXDuvXr/9sHcnJyZg9ezaGDh2KBg0aYPv27WjdujW6d++OS5cuyV9vampqvgZr7devHxITE3HkyBEA6adJhIWFyf8G3r59i9jYWGzatElp2w0ePBgAlL6vzun9P2/ePMTGxqJy5cqoWbMmJk+ejHv37uVZW37euxnbvUqVKgrt+vr6cHV1lU/PbVl7e3uFAVSB9EFUs647r9eVIeP9qa3noGbHAVeC1a9fH+7u7vjtt98AAL/99huISP5H/znZ/3tVl9zCNbcP//yKjY1Fy5YtcffuXcybNw/Hjh3D6dOn8dNPPwHAZ/duJBIJunXrhkOHDiEtLQ0vX77E5cuX5XtvGb7//ns8ffoUfn5+MDAwwMyZM1G1alXcvn07z/WXLVv2s3t9IpEIlStXxpgxY3DhwgXo6Ohgz549CvUvXboUp0+fzvFWpkyZPNef9Xk+N/3AgQO4evUqRo8eLe+cUb9+ffk5ahcvXkSXLl1gYGCAdevW4cSJEzh9+jT69u372d/lo0ePEBsbK+9Yo6uriwMHDqBGjRro1KkTgoKCsGnTJlhbW+frpPgvv/wSZmZm8n/m9u7dKz+KAWRuu/79++e67Zo2baqwzpze/y1atEBwcDC2bduGGjVqYMuWLahXrx62bNny2RqLi7z+rjPen1ZWVkVVjqDy15WJFVv9+vXDzJkzce/ePezduxdubm5o2LBhgddXoUIFPHz4EESk8CH5/PlzdZSbq4oVK0Imk+Hhw4eoU6dOjvMEBgYiJiYGBw8eRIsWLeTtoaGh+X4eHx8f7Ny5E2fPnsWjR49AREoBl1HPxIkTMXHiRDx79gx16tTB8uXL8euvv+a6bnd3d+zZswdxcXEwMzP7bC2urq6wsLDA69ev5c8JpPeszN4TM7vcAqxChQqQyWR49uyZ/D98AIiKikJsbCwqVKigMP8XX3yBL774AgsXLsTevXvRr18/+Pv7Y+jQofjjjz9gYGCAU6dOQSKRyJfZvn37Z19bRn0RERHytowraTRr1gze3t74+PEjFixYoLDu3EgkEvTq1Qu7du1CVFQU9u/fj9atW8PW1hYAUK5cOZiYmEAqlX52232OpaUlBg8ejMGDByMhIQEtWrTAnDlzMHTo0Bznz897N2O7P3nyBK6urvL21NRUhIaG5llzhQoVcObMGXz48EFhLy7jkHz232leMv5Wsr43tBnvwZVwGXtrs2bNwp07d/K995Ybb29vvHz5EkePHpW3ffz4EZs3by7Uej+nW7du0NHRwbx585T2xDL2FjL2DLPuPaSmpmLdunX5fh4vLy9YWlpi37592LdvHzw8PBQO6SQlJeHjx48Ky1SsWBEmJiZKh++ya9y4MYgIt27dUmi/du2a/LujrK5fv46YmBj5Yav69eujYsWKWLZsWY5X+nj79q38vrGxMQAodTHv2LEjAGDlypUK7StWrAAAdOrUCUD6f/LZ98IyPpwzXqdYLIZIJFI4BSMsLAyHDx9Wqi27mjVrwsbGBmvWrFE4NFi2bFls374d0dHRSE5ORufOnT+7rgz9+vXDp0+fMHz4cLx9+1bhvS4Wi9GzZ0/88ccf8tM9ssq67fKS/co/ZcqUQaVKlfL83efnvevl5QV9fX2sWrVKYbtv3boVcXFx8t9LTjp27AipVIo1a9YotP/8888QiUTo0KFDvl4bANy6dQtmZmaoXr16vpcpyXgProRzcXFBkyZN5N9NFDbghg8fjjVr1qBPnz4YN24c7OzssGfPHvm5Wpo6dl+pUiVMnz4d8+fPR/PmzdGjRw9IJBLcuHED9vb28PPzQ5MmTWBhYQFfX1+MHTsWIpEIu3fvVunQp56eHnr06AF/f38kJiZi2bJlCtOfPn2KNm3aoHfv3qhWrRp0dXVx6NAhREVFyQ+H5aZZs2YoW7Yszpw5g9atW8vbd+/ejT179qB79+6oX78+9PX18ejRI2zbtg0GBgbyy3rp6Ohgy5Yt6NChA6pXr47BgwfDwcEBL1++xLlz52Bqaopjx44BSA9DAJg+fTq+/vpr6OnpoXPnzqhduzZ8fX2xadMm+SHd69evY+fOnejWrRs8PT0BADt37sS6devQvXt3VKxYER8+fMDmzZthamoqD8lOnTphxYoVaN++Pfr27Ys3b95g7dq1qFSp0me/l9LV1cWaNWvg4+ODmjVrYvjw4ahQoYL8ddesWRP//fcfunbtisuXL8PU1PSzv7uWLVvC0dERR44ckZ8LmtXixYtx7tw5NGrUCMOGDUO1atXw7t07BAUF4cyZM3j37t1nn6NatWpo1aoV6tevD0tLS9y8eRMHDhzA6NGjc10mP+/dcuXKYerUqZg7dy7at2+PLl264MmTJ1i3bh0aNmwo/x45J507d4anpyemT5+OsLAw1K5dG3/99ReOHDmC77//Xr7nnx+nT59G586dS813cHyagBZYu3YtASAPD48cp+d2mkBu3aFDQkKoU6dOZGhoSOXKlaOJEyfSH3/8oXTFiNxOE8ipiz0Amj17tvxxTucSERFt27aN6tatSxKJhCwsLKhly5Z0+vRp+fTLly/TF198QYaGhmRvb08//PADnTp1SukUhrycPn2aAJBIJKKIiAiFadHR0TRq1Chyd3cnY2NjMjMzo0aNGtHvv/+er3WPHTuWKlWqpNB27949mjx5MtWrV48sLS1JV1eX7Ozs6KuvvqKgoCClddy+fZt69OhBZcuWJYlEQhUqVKDevXsrXWJp/vz55ODgQDo6Ogq/30+fPtHcuXPJxcWF9PT0yMnJiaZOnapwGkVQUBD16dOHypcvTxKJhKytrenLL7+kmzdvKjzH1q1byc3NjSQSCbm7u9P27dtz/d3l5MKFC+Tt7U2mpqYkkUioRo0a5OfnR0lJSXTy5EnS0dGhdu3a5fvKJpMnTyYA1Lt37xynR0VF0ahRo8jJyYn09PTI1taW2rRpQ5s2bZLPk3GawP79+5WWX7BgAXl4eJC5uTkZGhqSu7s7LVy48LPncBJ9/r1LlH5agLu7O+np6ZGNjQ2NHDmS3r9/rzBPTlcy+fDhA40fP57s7e1JT0+P3NzcaOnSpUqX3wNAo0aNynHbPHr0iADQmTNncpyujUREpeWUdlYYK1euxPjx4/Hff//BwcFB6HKKrZCQELi7u+PkyZP5OlWDsaLy/fff48KFC7h161ap2YPjgGNKkpOTFXpiffz4EXXr1oVUKsXTp08FrKxkGDlyJJ4/f65weSfGhBQTE4MKFSrg999/lx+CLg044JiSDh06oHz58qhTpw7i4uLw66+/4sGDB9izZw/69u0rdHmMMZYv3MmEKfH29saWLVuwZ88eSKVSVKtWDf7+/jl2p2eMseKK9+AYY4xpJT4PjjHGmFbigGOMMaaVSt13cDKZDK9evYKJiUmp6SrLGGPahIjw4cMH2NvbK43gkFWpC7hXr17ByclJ6DIYY4wVUkREBBwdHXOdXuoCLuNipREREfm6PBBjjLHiJT4+Hk5OTkpDCGVX6gIu47CkqakpBxxjjJVgn/uaiTuZMMYY00occIwxxrQSBxxjjDGtxAHHGGNMK3HAMcYY00occIwxxrQSBxxjjDGtxAHHGGNMK3HAMcYY00qCBtyFCxfQuXNn2NvbQyQS4fDhw59dJjAwEPXq1YNEIkGlSpWwY8cOjdfJGGOs5BE04BITE1G7dm2sXbs2X/OHhoaiU6dO8PT0xJ07d/D9999j6NChOHXqlIYrZYwxVtIIei3KDh06oEOHDvmef8OGDXBxccHy5csBAFWrVsWlS5fw888/w9vbW1NlMsYYK4FK1MWWr169Ci8vL4U2b29vfP/998IUxBhjLHdEwIf/AMiUp5VxAHQ0G0ElKuAiIyNhY2Oj0GZjY4P4+HgkJyfD0NBQaZmUlBSkpKTIH8fHx2u8TsYYK/Y+vgcir2v2OU4NBRL+U2jaEwR8XQcQDw8DTCto9OlLVMAVhJ+fH+bOnSt0GYwxVnwkvAY22hftc+oaAAC8qxH878nQD3kPdaOWp9T4M6iRra0toqKiFNqioqJgamqa494bAEydOhUTJkyQP84YKI8xxrRCagLweC8QFZT/Ze5tzLwvMQPMXNVfVwZTZyR7boGhqSUAwApAP809m4ISFXCNGzfGiRMnFNpOnz6Nxo0b57qMRCKBRCLRdGmMMVa0Yh4Cd9YDD3cCqR8Ktg6H5sDXF9RbVzbh4eFoXc8DkyZNwogRIzT6XNkJGnAJCQl4/vy5/HFoaCju3LkDS0tLlC9fHlOnTsXLly+xa9cuAMCIESOwZs0a/PDDD/jmm2/w999/4/fff8fx48eFegmMMZa7+HDg7zHA63/Uu14iIPlt5mOLykDlXoDYIP/rMLYDqvuqt65swsPD4enpiZCQECxbtgy+vr65Hm3TBEED7ubNm/D09JQ/zjiU6Ovrix07duD169cIDw+XT3dxccHx48cxfvx4/PLLL3B0dMSWLVv4FAHGmLDiI4APEYptMQ+A85OAVA11bBPpABW7AHVGAeVbpz8uRrKGm6urK86dO1ek4QYAIiKiIn1GgcXHx8PMzAxxcXEwNTUVuhzGWHGVGAWEBQAyad7zxYUA1xbmPt2uEdByOaCv5s8bYxvAyFq961ST7OEWGBio1r4P+f0cL1HfwTHGWJEoaC9D84qZ93X0gKr9AY8fNX6+V3Gi6XBTRenZ6owxlp30ExA4AYgPU2wP+TPzvr4J4Ngy7/WIdIBa3wKundReYklz8ODBYhFuAAccY6w0e/0PcGdN7tPLVgcG3gV0xEVXUwk3btw4iEQi9OjRQ/BTsjjgGGOllzQ1/WcZB6BJtgtCSMyBip053PLh5cuXMDc3h7GxMUQiEcaNGyd0SQA44BhjDDCwBGoOEbqKEikiIgKtWrVC+fLl8eeff8LY2FjokuQ44Bhj2ufdU+DZgXz0gAwumnq0VEa4hYSEAABiY2M54BhjTKP+Hg28OJ3/+fWMNFeLlsoabhkdShwcHIQuSwEHHGNMO1ycln7eGgC8e5z+07n9569YL9IBqg3QbG1aJqdwE7pDSU444BhjJU/Ca0CWmvn40nTg0R7l+Vr8BJSrVXR1lQIlJdwADjjGWHFGMuDVVeBTQmbb1fnAq8u5L9P9T0AkBkycAKvqmq+xlImJicH79++LfbgBHHCMsaKU9AZ4+ofi3ldeglalXworN7pZLi6sawx88wQwLFu4Glme6tSpg7///htly5Yt1uEGcMAxxorCvc1A1C3FcchUZV03876RNeC9HShjV/ja2GdFRETg1atXaNSoEYD0kCsJOOAYY5pDBFz4Abi5TLFdrA+49czfOvRNgUbTAdPivbegrTK+c3v79i1Onz4tD7mSgAOOMZZ/qR+A2GDg9HDl6zfmRCYFPsZkPm4yL33vq8bg9JBjxVr2DiX29gW4ALWAOOAYY8pig9OHi8nq5jLg+SHV1yUSA3VHAw0mASaO6qmPaVxJ6i2ZGw44xpiil1cA/6Z5z+PQDGj1MyCWfH59RtbpY5exEkMbwg3ggGOMZRf7PP2nriFQJtshKUMroJM/YOZc5GWxovH69WutCDeAA44xlhQNXJgMJEenP/4Qkf7TsQXQM0C4upggLC0t4e7uDgAlOtwADjjGSgeSpd+yk6YA68vlvIwRH1YsjSQSCQ4ePIh3797Bzq5kn4bBAceYtntxFjjSFfiUmPd8huWA5n7p93X0ANcvNV8bKxYiIiKwZ88e/PjjjxCJRJBIJCU+3AAOOMZKrrjQ9JOnP+ex/+fDrVwdYMCt9AsPs1Il+5A3U6ZMEbgi9eGAY0xISW+AB7uAtGTVliMpcHXu5+fLqvYIoOlC5XaRCDCwUG1dTCtk7y3Zr18/oUtSKw44xoR0fQlwa3nh1mHroXhNxpzoGQO1RwKGloV7LqY1tOVUgLxwwDFW1O5vBe6sA0BA/Iv0NtuGgHU91dfl2BKo2ket5THtVxrCDeCAY6zopCakX7bq+uLMc80y1PseqNpXkLJY6ZKSkoI2bdpofbgBHHCMaV5KHPBkP3B6mGJ7y2VA2erp33/ZeghTGyt1JBIJZs2ahXnz5uHs2bNaG24AICIiErqIohQfHw8zMzPExcXB1NRU6HJYabC3CfD6auZjXQPArCLQ9yqgbyJcXaxUS0lJgUSSj0utFUP5/RznPTjG1C3kBBB8NPPx2zvpP8tWAxpNA6pqV081VvyFh4dj5MiR2LJli/z8tpIabqrggGNMXaL/BS78CISeyHl69z8BM5eirYmVeuHh4fD09ERISAiGDh2K48ePC11SkeGAY0wV1xYDQSsB5HBkP+mN4uP64wHJ/88vK1uVw40Vuazh5urqig0bNghdUpHigGMsP+LDgQ//AXfXAUlRec9bqRvQdAFgVb1ISmMsJ9nDTZt7S+aGA46xvMS/AO5uSO/an1WHXemXt8pO34SHkmGC43BLxwHHWG7ePwe2uSm2mVcEzCsBlb/6/NVDGBPIsGHDSn24ARxwrLS5tRIIP5u/eUP+zLxvVRNosQRwaa+RshhTp61bt2Lo0KHYvHlzqQ03gAOOlRYhJ4BzY4HYYNWXrfwV0Pl39dfEmBqlpqZCX18fAODo6IiAAB6slgOOabfUBCA+DLi9SjHc2m4EROLPL29sC7h00Fh5jKlDREQEvLy8MG/ePPj4+AhdTrHBVzJh2keWBoT/DSRHAyeynVRdfwLwxUzAwFyQ0hhTt6wXTq5cuTLu378v35PTVnwlE1b6vL4GhP0F3Fmr3JXfyBowtAJqfcvhxrRG9lEBzpw5o/XhpgoOOFbyxYUC1/yA+5uVpzm2ACp2ARpMLPq6GNOg0jLkTWFwwLGS4/wPQPgZ5fY3txUfV+4FmFRIv5KIiUPR1MZYEeJwyx8OOFYyxIUCN5fmPU/ZakDr1UD51kVTE2MC2b59O4dbPnDAseKNCPizN/D0QGZb18OAONuV0CVmgF0jQKRTpOUxJoSZM2cCAAYPHszhlgcOOFa8Pd6rGG6VuqV/pyYSCVYSY0J4/fo1ypYtC319fYhEIsyaNUvokoo9/neXFW/xLzLvDwsHuh7icGOlTkREBJo1a4bevXsjNTVV6HJKDN6DY8XXp2Tg0vT0+zWGAKZ8KIaVPlk7lABATEyMfNBSljfeg2PF18tLmffLcG9IVvrk1FuSwy3/eA+OFT8yKfAmCIi+l9nWaKpw9TAmAD4VoPA44FjxEzgeuL0687FNfR6ahpUqHG7qwQHHig/pp/TLbAUfS39sWA4wsABqjRC2LsaKWHh4OKKiojjcCokDjgkv/O/0PbaQP9MvlJyh7QbArYdwdTEmkKZNm+LUqVMoX748h1shcMAx4V1bmB5yWbVYCrh0FKYexgQQERGBuLg41KhRA0B6yLHC4YBjwpP+/7ye2iPTr0bi0gkwshK2JsaKUMZ3bvHx8Th37pw85Fjh8GkCTFjS1MzTASp4AdV9OdxYqZK1Q4mpqSnMzMyELklr8B4cE8Z/F4GIQOD64sw2Eb8dWenCvSU1iz9RWNGLCAR+91RuL59DG2NaisNN8zjgWNF6eVkx3Kr2B8rYpw9Iqm8iXF2MFaGXL19yuBUBDjhWNKSfgLBTwOHOmW3ttgA1hwhXE2MCMTU1hb29PQBwuGmQ4J1M1q5dC2dnZxgYGKBRo0a4fv16nvOvXLkSVapUgaGhIZycnDB+/Hh8/PixiKplBUIyYHcdxXDzXMnhxkotExMTnDhxAhcuXOBw0yBBA27fvn2YMGECZs+ejaCgINSuXRve3t548+ZNjvPv3bsXU6ZMwezZs/Ho0SNs3boV+/btw7Rp04q4cqaSt/eAmIfp93X0gDZrgXrjhK2JsSIWHh6OtWvXyh+bmJjAwYEvIq5Jgh6iXLFiBYYNG4bBgwcDADZs2IDjx49j27ZtmDJlitL8V65cQdOmTdG3b18AgLOzM/r06YNr164Vad1MBe+eALvrZj4emwCI9YWrhzEBhIeHw9PTEyEhIRCJRPjuu++ELqlUEGwPLjU1Fbdu3YKXl1dmMTo68PLywtWrV3NcpkmTJrh165b8MGZISAhOnDiBjh1zv+JFSkoK4uPjFW6siMSFAdvdMx/Xn8DhxkqdrOHm6uqKzp07f34hphaC7cFFR0dDKpXCxsZGod3GxgaPHz/OcZm+ffsiOjoazZo1AxEhLS0NI0aMyPMQpZ+fH+bOnavW2lk+yKTAg52Zj6v4AK2WC1cPYwLIHm7coaRoCd7JRBWBgYFYtGgR1q1bh6CgIBw8eBDHjx/H/Pnzc11m6tSpiIuLk98iIiKKsOJSSpYG7KoFXJ2T/ti8ItBpr6AlMVbUONyEJ9genJWVFcRiMaKiohTao6KiYGtrm+MyM2fOxIABAzB06FAAQM2aNZGYmIhvv/0W06dPh46Ocl5LJBJIJBL1vwCWu6S3mZ1KxBKg6UJAVKL+l2KsUBITEzncigHBPnX09fVRv359nD17Vt4mk8lw9uxZNG7cOMdlkpKSlEJMLBYDAIhIc8WyAhIBYxMBdx+hC2GsSBkbG2PcuHGoWLEih5uABO1FOWHCBPj6+qJBgwbw8PDAypUrkZiYKO9VOXDgQDg4OMDPzw8A0LlzZ6xYsQJ169ZFo0aN8Pz5c8ycOROdO3eWBx0rRkQiQId/L6x0Gjt2LIYMGQJjY2OhSym1BA04Hx8fvH37FrNmzUJkZCTq1KmDgIAAeceT8PBwhT22GTNmQCQSYcaMGXj58iXKlSuHzp07Y+HChUK9BJYTkgpdAWNFLiIiAhMmTMCmTZtgYWEBABxuAhNRKTu2Fx8fDzMzM8TFxcHU1FTocrRP0C9A4MT0kBPpABM47Jj2y3rh5F69emH//v1Cl6TV8vs5zt/8M/UKDcjcg3NqJWgpjBWF7KMCrFixQuiS2P9xwDH1SYkDwgLS77dZC/Q6I2w9jGkYD3lTvHHAMfX4lASsMc98bGSd3smEMS3F4Vb8ccAx9XiRZW9NRw9wyf3yaYyVdESEfv36cbgVcxxwTD1SYjPvj4oB9IwEK4UxTROJRNiyZQuaN2/O4VaM8YCnrPA+JQEBvun3HVvyyNxMa6WlpUFXN/1js3Llyjh//jxEfCi+2OI9OFZ4CS8z71fuJVwdjGlQREQEateujYCAAHkbh1vxxgHH1EdiBtQdLXQVjKldRoeShw8fYuLEiUhLSxO6JJYPHHCscEJOACd9ha6CMY3J3lsyICBAfpiSFW/8W2IFF3oSONQp83EZB+FqYUwD+FSAko0DjhXMm7vAwSynAjSeDdT6Vrh6GFMzDreSjwOOFUzUrcz7HfcCVfsIVwtjGrB69WoOtxKOA47lLfIG8PQAkP2a3NH30n+6dORwY1opY5iuMWPGcLiVUBxwLHeRN4A9HnnPIzErmloYKwJv3rxB2bJlIRaLIRaLsWTJEqFLYoXAAcdydzPLVdErdQfMKypOF+sD1QcXbU2MaUjGd24tWrTAli1beBBlLcABx3L27BDwxD/9fuXeQOd9wtbDmAZl7VACADExMbC2tha4KlZYfB4cU/b+OXC0R+bjhpOEq4UxDcuptySHm3bgPTimKCoICFqZ+bjrYcC2oVDVMKZRfCqAduOAY5kibwJ7soSZYwugUlfh6mFMgzjctB8fomSZ/lmQeb9iV6DlMuFqYUzDHj58iIiICA43LcZ7cCxTwn/pP6v2BzruFrYWxjTM29sbx44dQ7Vq1TjctBQHHEv39EDm1Umc2wlbC2MaEhERgU+fPsHV1RVAesgx7cWHKFm6rJfecmgmXB2MaUjGd25ZTwdg2o0DjgFpKcD1xen3648HzFyErYcxNcvaoURPTw96enpCl8SKAAccA16czrwvMResDMY0gXtLll78HVxp9ikR+JQMHO6c2VZ3jHD1MKZmHG6lGwdcaZMSD0T/m34ZrturFafVGQ0YWAhTF2NqxuHGOOBKEyLg13pAbLDyNJsGQOtVRV8TYxpiaGgIExMTDrdSjAOutMkIN1Pn9O/b2m0GrOsAOvxWYNrFysoKZ86cQXJyModbKcWfaqVVvxuAkZXQVTCmVhEREQgMDMSAAQMApIccK7044BhjWiH7kDcZIcdKLz5NgDFW4mXvUNKqVSuhS2LFAAdcafLxvdAVMKZ23FuS5aZQAffx40d11cGKwol+mfd1xMLVwZiacLixvKgccDKZDPPnz4eDgwPKlCkjP949c+ZMbN26Ve0FMjWJeQyEBaTft/Xg891YiRcXF8fhxvKkcsAtWLAAO3bswJIlS6Cvry9vr1GjBrZs2aLW4pgaZR2l22u9YGUwpi6mpqbo378/hxvLlcoBt2vXLmzatAn9+vWDWJx5mKt27dp4/PixWotjaiT9/+Fkuy8A67rC1sKYGohEIsyZMwdBQUEcbixHKp8m8PLlS1SqVEmpXSaT4dOnT2opihXQx1gg8lrO0z68TP9ZqTsgEhVZSYypU3h4OGbPno01a9bA2NgYIpEIZmZmQpfFiimVA65atWq4ePEiKlSooNB+4MAB1K3LewaC+qMdEHkj73m4cwkrocLDw+Hp6Sn/3n/79u0CV8SKO5UDbtasWfD19cXLly8hk8lw8OBBPHnyBLt27cKff/6piRpZfsW/SP9p6Q7oGipPN7BM34NjrITJGm6urq6YN2+e0CWxEkDlgOvatSuOHTuGefPmwdjYGLNmzUK9evVw7NgxtG3bVhM1MlV13g9Y1RC6CsbUInu4cYcSll8FulRX8+bNcfr06c/PyIrOw91A0huhq2BMrTjcWGGo3IvS1dUVMTExSu2xsbFwdXVVS1FMRUTAxamZj034A4CVfESEnj17crixAlM54MLCwiCVSpXaU1JS8PLlS7UUxVT07zYg4f/bvvUaQMK9yljJJxKJsGnTJjRs2JDDjRVIvg9RHj16VH7/1KlTCl1zpVIpzp49C2dnZ7UWx/Lp/bPM+249hKuDMTWQyWTQ0Un/37tu3bq4du0aRHxqCyuAfAdct27dAKT/V+Xr66swTU9PD87Ozli+fLlai2Mqqj8eKGMndBWMFVhERAS6dOmCtWvXokmTJgDA4cYKLN8BJ5PJAAAuLi64ceMGDyTIGFOrrBdOHjVqFG7duiXfk2OsIFTuRRkaGqqJOlhhJEUJXQFjhZJ9VICjR49yuLFCK9BpAomJiTh//jzCw8ORmpqqMG3s2LFqKYzl06PfgAc7hK6CsQLjIW+YpqgccLdv30bHjh2RlJSExMREWFpaIjo6GkZGRrC2tuaAK0rJ74ATfTMfV+omWCmMFQSHG9MklY8BjB8/Hp07d8b79+9haGiIf/75By9evED9+vWxbNkyTdTIcnN3Xeb9ngGAYwvhamGsABYtWsThxjRG5YC7c+cOJk6cCB0dHYjFYqSkpMDJyQlLlizBtGnTNFEjy8mT/cDlmen3DSwBZ29h62GsAFauXIkRI0ZwuDGNUDng9PT05F/+WltbIzw8HABgZmaGiIgI9VbHcnd7Veb97seFq4MxFb179w5EBACQSCRYv349hxvTCJUDrm7durhxI31IlpYtW2LWrFnYs2cPvv/+e9SowRf41TgiIOo2kPz/y6W1+hmw/0LYmhjLp4iICDRs2BCTJk2ShxxjmqJywC1atAh2duknEy9cuBAWFhYYOXIk3r59i40bN6q9QJZN+Fng13rAu0fpj834+p+sZMjaoeTw4cN4//690CUxLadyL8oGDRrI71tbWyMgIECtBbE8EAGB49Pv65sCji0Bp5bC1sRYPuTUW9LS0lLospiWU9uZlEFBQfjyyy9VXm7t2rVwdnaGgYEBGjVqhOvXr+c5f2xsLEaNGgU7OztIJBJUrlwZJ06cKGjZJcu7x0D0v+n3K3UFuh/lCyuzYo9PBWBCUSngTp06hUmTJmHatGnyYeMfP36Mbt26oWHDhvLLeeXXvn37MGHCBMyePRtBQUGoXbs2vL298eZNzuOapaamom3btggLC8OBAwfw5MkTbN68GQ4ODio9b4l1ol/m/aYLhauDsXzicGOConzasmULiUQiKlu2LOno6FC5cuVo9+7dZG5uTsOHD6eHDx/md1VyHh4eNGrUKPljqVRK9vb25Ofnl+P869evJ1dXV0pNTVX5uTLExcURAIqLiyvwOoqcTEYUeZNoGdJve74QuiLG8uXAgQMkEonI1dWVwsPDhS6HaYn8fo7new/ul19+wU8//YTo6Gj8/vvviI6Oxrp163D//n1s2LABVatWVSlYU1NTcevWLXh5ecnbdHR04OXlhatXr+a4zNGjR9G4cWOMGjUKNjY2qFGjBhYtWpTj+HQZUlJSEB8fr3Arca4tAn7N/O4T3Y7mPi9jxUjPnj2xf/9+3nNjgsh3wAUHB+Orr74CAPTo0QO6urpYunQpHB0dC/TE0dHRkEqlsLGxUWi3sbFBZGRkjsuEhITgwIEDkEqlOHHiBGbOnInly5djwYIFuT6Pn58fzMzM5LcS+UcW+//x3gwsgRrfAEblhK2HsTxERETg9evX8sc9e/YsmX93rMTLd8AlJyfDyMgIQPr4TBKJRH66QFGRyWSwtrbGpk2bUL9+ffj4+GD69OnYsGFDrstMnToVcXFx8luJOhldlgb8PQ54cSb9sccUwHursDUxloeM79xatWqlEHKMCUGl0wS2bNmCMmXKAADS0tKwY8cOpXHh8nuxZSsrK4jFYkRFKQ71EhUVBVtb2xyXsbOzg56eHsRisbytatWqiIyMRGpqKvT19ZWWkUgkkEgk+aqp2Im8oXjFEiNr4Wph7DOydyhJS0sTuiRWyuU74MqXL4/NmzfLH9va2mL37t0K84hEonwHnL6+PurXr4+zZ8/KRwuXyWQ4e/YsRo8eneMyTZs2xd69exWGtH/69Cns7OxyDLcST/r/oYiMbYE26wBX1U/DYKwocG9JVhzlO+DCwsLU/uQTJkyAr68vGjRoAA8PD6xcuRKJiYkYPHgwAGDgwIFwcHCAn58fAGDkyJFYs2YNxo0bhzFjxuDZs2dYtGiR9g/RI7EA3LoLXQVjOeJwY8VVgQY8VRcfHx+8ffsWs2bNQmRkJOrUqYOAgAB5x5Pw8HCFUX2dnJxw6tQpjB8/HrVq1YKDgwPGjRuHH3/8UaiXwFipxuHGijMRUem64ml8fDzMzMwQFxcHU1NTocvJW8R54PdWgGVVYPBDoathTMl///2HVq1agYg43FiRye/nuKB7cIyxks3R0RGBgYEgIg43Vuyo7VqUTANkn4SugDEl4eHhOHz4sPyxo6MjhxsrljjgiquPscCBtv9/UKqOIrNiLDw8HJ6enujZs6dCyDFWHBUo4IKDgzFjxgz06dNHfmHkkydP4sGDB2otrlT7wzvzfiXuQcmElxFuISEhcHZ2Rv369YUuibE8qRxw58+fR82aNXHt2jUcPHgQCQkJAIC7d+9i9uzZai+wVEqMAj6Ep9938gSaLxK2HlbqZQ037i3JSgqVA27KlClYsGABTp8+rXBydevWrfHPP/+otbhSJyUeONQF2GgPJP7/epytV+W9DGMaxuHGSiqVe1Hev38fe/fuVWq3trZGdHS0WooqtV5dAUKOpd+39QBqDgXKVhe2JlaqxcTEcLixEkvlPThzc/McL6J6+/bt0jPwqKbQ/4f9sWkA9LsG1BoGiETC1sRKNUtLS3To0IHDjZVIKgfc119/jR9//BGRkZEQiUSQyWS4fPkyJk2ahIEDB2qixtKHQ40VEyKRCKtXr8b169c53FiJo3LALVq0CO7u7nByckJCQgKqVauGFi1aoEmTJpgxY4YmamSMFaGIiAiMGTMGqanpF/sWiUQoW7aswFUxpjqVv4PT19fH5s2bMXPmTPz7779ISEhA3bp14ebmpon6Spd/FgpdASvlsl5bEgBWr14tcEWMFZzKAXfp0iU0a9YM5cuXR/ny5TVRU+mU9AZ4fTX9Po/7xgSQ/cLJP/zwg9AlMVYoKh+ibN26NVxcXDBt2jQ8fMgXAFabk1m+v2zHo3azosWjAjBtpHLAvXr1ChMnTsT58+dRo0YN1KlTB0uXLsV///2nifpKj6hb6T9NnABjG2FrYaUKhxvTVioHnJWVFUaPHo3Lly8jODgYX331FXbu3AlnZ2e0bt1aEzWWEv/vOdn9uLBlsFJFJpPhyy+/5HBjWqlQF1t2cXHBlClTsHjxYtSsWRPnz59XV12lF58iwIqQjo4OVq9ejVq1anG4Ma1T4IC7fPkyvvvuO9jZ2aFv376oUaMGjh/nvQ/GSoKs4xy3aNECt2/f5nBjWkflgJs6dSpcXFzQunVrhIeH45dffkFkZCR2796N9u3ba6JGxpgaRUREoEmTJrh//768TUeHR85i2kfl0wQuXLiAyZMno3fv3rCystJETYwxDcnaoeTbb7/FlStXIOLD4kxLqRxwly9f1kQdpVvCayD5rdBVMC2Xvbfk77//zuHGtFq+Au7o0aPo0KED9PT0cPTo0Tzn7dKli1oKK1XOT8y8LzYQrg6mtfhUAFYa5SvgunXrhsjISFhbW6Nbt265zicSiSCVStVVW+mRHJP+s2w1wLyisLUwrcPhxkqrfAWcTCbL8T5TM4+pfJoAU7tp06ZxuLFSSeWuU7t27UJKSopSe2pqKnbt2qWWohhj6rNu3Tr079+fw42VOioH3ODBgxEXF6fU/uHDBwwePFgtRZUaJANCTwIJfJkzpl7x8fHy+yYmJti9ezeHGyt1VA44Isqx59V///0HMzMztRRVakScBw52BGL+f9Fqsb6w9TCtEBERgbp162LBggVCl8KYoPJ9mkDdunUhEokgEonQpk0b6OpmLiqVShEaGsoneqsqKSr9p4El4NYDcObtxwona4eS7du3Y+zYsTA1NRW6LMYEke+Ay+g9eefOHXh7e6NMmTLyafr6+nB2dkbPnj3VXqDWIhlwvE/6/XK1gXabha2HlXg59ZbkcGOlWb4Dbvbs2QAAZ2dn+Pj4wMCAz9cqlPfPM++bVxKuDqYV+FQAxpSpfCUTX19fTdRRCmVe7BZe64Qrg5V4HG6M5SxfAWdpaYmnT5/CysoKFhYWeV7e5927d2orrlQwsAB0VP4/gzG5M2fOcLgxloN8fbL+/PPPMDExkd/n69cxVnxknJ7j5eXF4cZYFiLKOjBUKRAfHw8zMzPExcUJ+wX8uyfAdvf0PbhRvNfLVBMREYEyZcrAwsJC6FIYK3L5/RxX+Ty4oKAghXGkjhw5gm7dumHatGlITU0tWLWlDVHmKQKMqSg8PBytWrWCl5cX3r9/L3Q5jBVbKgfc8OHD8fTpUwBASEgIfHx8YGRkhP379+OHH35Qe4FaKXA8sK+l0FWwEig8PByenp4ICQlBbGwsEhMThS6JsWJL5YB7+vQp6tSpAwDYv38/WrZsib1792LHjh34448/1F2fdoq8kf5TRw+o8rWwtbASI2u4ZXQocXR0FLosxootlbvvEZF8RIEzZ87gyy+/BAA4OTkhOjpavdVpuy9/B9y6CV0FKwFyCjfuUMJY3lTeg2vQoAEWLFiA3bt34/z58+jUqRMAIDQ0FDY2NmovkLHSjsONsYJROeBWrlyJoKAgjB49GtOnT0elSulX4Thw4ACaNGmi9gIZK+1SUlLw8eNHDjfGVKTyIcpatWop9KLMsHTpUojFYrUUxRjL5ObmhsDAQBgYGHC4MaaCAl9C49atW3j06BEAoFq1aqhXr57aimKstIuIiMDTp0/Rpk0bAOkhxxhTjcoB9+bNG/j4+OD8+fMwNzcHAMTGxsLT0xP+/v4oV66cumvULomRwKsrQlfBirGMa0u+fPkSx48fl4ccY0w1Kn8HN2bMGCQkJODBgwd49+4d3r17h3///Rfx8fEYO3asJmrUHsnvgA12mY/1TYSrhRVLWS+c7ODggMqVKwtdEmMllsp7cAEBAThz5gyqVq0qb6tWrRrWrl2Ldu3aqbU4rRPyZ+Z9i8qAE5/szTLxqACMqZfKe3AymQx6enpK7Xp6evLz41gupFkuZTbwHo8iwOQ43BhTP5UDrnXr1hg3bhxevXolb3v58iXGjx/P3xV8zvv0S5yhYhdAVyJsLazYiIqK4nBjTANU3oVYs2YNunTpAmdnZ/kfYUREBGrUqIFff/1V7QVqjQ//ATeXpd937SxsLaxYsbKywhdffAEAHG6MqZHKAefk5ISgoCCcPXtWfppA1apV4eXlpfbitEpSFAACytgDNYcIXQ0rRsRiMXbt2oXo6Gi+GhBjaqRSwO3btw9Hjx5Famoq2rRpgzFjxmiqLu0lEgM8YGypFxERgfXr12P+/PkQi8UQi8UcboypWb4Dbv369Rg1ahTc3NxgaGiIgwcPIjg4GEuXLtVkfYxpnawdSgBg0aJFAlfEmHbKdyeTNWvWYPbs2Xjy5Anu3LmDnTt3Yt26dZqsjTGtk7235MiRI4UuiTGtle+ACwkJga+vr/xx3759kZaWhtevX2ukMMa0DZ8KwFjRynfApaSkwNjYOHNBHR3o6+sjOTlZI4Uxpk043Bgreip1Mpk5cyaMjIzkj1NTU7Fw4UKYmZnJ21asWKG+6rSJTCp0BUwgaWlp8Pb25nBjrIjlO+BatGiBJ0+eKLQ1adJE/kU5AIi4d2Durs5J/2lsl+dsTPvo6upiyZIl+OGHH3Dq1CkON8aKiIiISOgiilJ8fDzMzMwQFxcHU1PTonnStI/AL4bp9/tcAewbF83zsmIlLS0Nurp8eTbGCiu/n+MqX6pLE9auXQtnZ2cYGBigUaNGuH79er6W8/f3h0gkQrdu3TRbYGEd75N536KKcHWwIhMREQFPT08EBwfL2zjcGCtaggfcvn37MGHCBMyePRtBQUGoXbs2vL298ebNmzyXCwsLw6RJk9C8efMiqrQQYv//IWdaATC0FLYWpnEZHUoCAwMxdOhQocthrNQSPOBWrFiBYcOGYfDgwahWrRo2bNgAIyMjbNu2LddlpFIp+vXrh7lz58LV1bUIqy2AT8lAwv8vTN1ht7C1MI3L3lty165dQpfEWKklaMClpqbi1q1bCtex1NHRgZeXF65evZrrcvPmzYO1tTWGDCkB13R8sAP4GAOYlAfsvhC6GqZBfCoAY8WLoF8KREdHQyqVKl2Dz8bGBo8fP85xmUuXLmHr1q24c+dOvp4jJSUFKSkp8sfx8fEFrrdAXv+T/rPGN4BYeRw9ph043Bgrfgq0B3fx4kX0798fjRs3xsuXLwEAu3fvxqVLl9RaXHYfPnzAgAEDsHnzZlhZWeVrGT8/P5iZmclvgn3o6Bl/fh5WYo0bN47DjbFiRuWA++OPP+Dt7Q1DQ0Pcvn1bvncUFxen8kVjraysIBaLERUVpdAeFRUFW1tbpfmDg4MRFhaGzp07Q1dXF7q6uti1axeOHj0KXV1dhR5rGaZOnYq4uDj5LSIiQqUaC+zFGeDqfODt3aJ5PiaoTZs2oXv37hxujBUjKgfcggULsGHDBmzevBl6epmH3Jo2bYqgoCCV1qWvr4/69evj7Nmz8jaZTIazZ8+icWPlc8Xc3d1x//593LlzR37r0qULPD09cefOnRw/WCQSCUxNTRVuGpf2ETj0JXBlVmbA6RnlvQwrcZKSkuT3rayscPDgQQ43xooRlb+De/LkCVq0aKHUbmZmhtjYWJULmDBhAnx9fdGgQQN4eHhg5cqVSExMxODBgwEAAwcOhIODA/z8/GBgYIAaNWooLG9ubg4ASu2Ckqak3wCg5lDAsBzg3ifvZViJEh4ejtatW2PixIk8IgBjxZTKAWdra4vnz5/D2dlZof3SpUsF6rLv4+ODt2/fYtasWYiMjESdOnUQEBAg73gSHh4OHR3Bz2ZQTdaLw7ReA+hKhKuFqV14eDg8PT0REhKC5cuXY9CgQTA0NBS6LMZYNioH3LBhwzBu3Dhs27YNIpEIr169wtWrVzFp0iTMnDmzQEWMHj0ao0ePznFaYGBgnsvu2LGjQM+pUSf6Cl0B05Cs4ebq6opz585xuDFWTKkccFOmTIFMJkObNm2QlJSEFi1aQCKRYNKkSRgzZowmaix53v3/FAeT8rz3pkWyhxt3KGGseCvwxZZTU1Px/PlzJCQkoFq1aihTpoy6a9OIIrnY8hZXIC4U6PsPYNdIM8/BihSHG2PFR34/xwt8ore+vj6qVatW0MUZK1EOHTrE4cZYCaNywHl6euY57tvff/9dqIIYK47GjRsHAOjRoweHG2MlhMoBV6dOHYXHnz59wp07d/Dvv//C19dXXXUxJriXL1/C3NwcxsbpV6HJCDnGWMmgcsD9/PPPObbPmTMHCQkJhS6IseIg49qS5cuXx59//ikPOcZYyaG2E8z69++f5xA3jJUUWS+cHB4eXqALGDDGhKe2gLt69SoMDAzUtTrGBJHTqAAODg5Cl8UYKwCVD1H26NFD4TER4fXr17h582aBT/RmrDjgIW8Y0y4qB5yZmZnCYx0dHVSpUgXz5s1Du3bt1FZYiUWUfg4cK1E43BjTPioFnFQqxeDBg1GzZk1YWFhoqqaS7cocoStgBfDu3TvExsZyuDGmRVQKOLFYjHbt2uHRo0cccLmJ+TfzfrnawtXBVFK7dm38/fffsLS05HBjTEuo3MmkRo0aCAkJ0UQt2sVrPaDLnW6Ks4iICFy7dk3+uHbt2hxujGmRAg14OmnSJPz55594/fo14uPjFW6MlQQZ37m1bdtWIeQYY9oj34co582bh4kTJ6Jjx44AgC5duihcsouIIBKJIJVK1V8lY2qUvUOJvb290CUxxjQg3wE3d+5cjBgxAufOndNkPYxpFPeWZKz0yHfAZYyq07JlS40Vw5gmcbgxVrqo9B1cXqMIMFacvX79msONsVJGpdMEKleu/NmQe/fuXaEKYkwTLC0t4e7uDgAcboyVEioF3Ny5c5WuZMJYSSCRSHDw4EG8e/cOdnZ2QpfDGCsCKgXc119/DWtra03VwphaRUREYPfu3Zg6dSpEIhEkEgmHG2OlSL4Djr9/YyVJ1g4lADBt2jSBK2KMFbV8dzLJ6EXJWHGXvbfkgAEDhC6JMSaAfO/ByWQyTdbBmFrwqQCMsQxqG/CUMaFxuDHGsuKAY1ohJSUFbdq04XBjjMlxwDGtIJFIMGvWLLi5uXG4McYAcMAxLdK/f3/cv3+fw40xBoADjpVg4eHh6NixI16/fi1vk0gkAlbEGCtOOOBYiRQeHg5PT0+cPHkSQ4cOFbocxlgxxAHHSpyMcMvoULJhwwahS2KMFUMccKxEyR5u3KGEMZYbDjhWYnC4McZUwQHHSoxvv/2Ww40xlm8ccKzE2LJlC7y9vTncGGP5otJwOYwVtdTUVOjr6wMAHB0dERAQIHBFjLGSgvfgWLEVERGBmjVrYt++fUKXwhgrgTjgWLGUceHkp0+fYtasWUhNTRW6JMZYCcMBp04fY4FnB4WuosTLPirAmTNn5IcpGWMsvzjg1OnBjsz7+iaClVGS8ZA3jDF14YBTp9QPmfcrdReujhKKw40xpk4ccJpQ61tAz0joKkqcnTt3crgxxtSGTxNgxcb06dMBAL6+vhxujLFC44Bjgnr9+jXKli0LfX19iEQizJgxQ+iSGGNagg9RMsFERESgWbNm6N27N58GwBhTO96DY4LI2qEEAGJiYmBnZydwVYwxbcIBpw4kA/Z7AS8vCl1JiZBTb0kON8aYunHAqUPCayDiXOZjmwbC1VLM8akAjLGiwgGnTjq6wPCXgJG10JUUSxxujLGixJ1M1ErE4ZaH8PBwREVFcbgxxooE78GxItO0aVOcOnUK5cuX53BjjGkcBxzTqIiICMTGxqJmzZoA0kOOMcaKAh+iZBqT8Z2bp6cn7t+/L3Q5jLFShgOOaUTWDiVmZmYwNzcXuiTGWCnDAcfUjntLMsaKAw44plYcboyx4qJYBNzatWvh7OwMAwMDNGrUCNevX8913s2bN6N58+awsLCAhYUFvLy88pyfFZ2XL19yuDHGig3BA27fvn2YMGECZs+ejaCgINSuXRve3t548+ZNjvMHBgaiT58+OHfuHK5evQonJye0a9cOL1++LOLKWXampqawt7fncGOMFQsiIiIhC2jUqBEaNmyINWvWAABkMhmcnJwwZswYTJky5bPLS6VSWFhYYM2aNRg4cOBn54+Pj4eZmRni4uJgampa6PoBAB9eApscAR09YHzpvir+hw8fEB8fDwcHB6FLYYxpqfx+jgu6B5eamopbt27By8tL3qajowMvLy9cvXo1X+tISkrCp0+fYGlpqakyWR7Cw8Oxdu1a+WMTExMON8ZYsSDoid7R0dGQSqWwsbFRaLexscHjx4/ztY4ff/wR9vb2CiGZVUpKClJSUuSP4+PjC14wUxAeHg5PT0/5kDejRo0SuCLGGMsk+HdwhbF48WL4+/vj0KFDMDAwyHEePz8/mJmZyW/8vZB6ZA03V1dXdOnSReiSGGNMgaABZ2VlBbFYjKioKIX2qKgo2Nra5rnssmXLsHjxYvz111+oVatWrvNNnToVcXFx8ltERIRaai/NsocbdyhhjBVHggacvr4+6tevj7Nnz8rbZDIZzp49i8aNG+e63JIlSzB//nwEBASgQYO8x16TSCQwNTVVuLGC43BjjJUUgl9secKECfD19UWDBg3g4eGBlStXIjExEYMHDwYADBw4EA4ODvDz8wMA/PTTT5g1axb27t0LZ2dnREZGAgDKlCmDMmXKCPY6SoPExEQON8ZYiSF4wPn4+ODt27eYNWsWIiMjUadOHQQEBMg7noSHh0NHJ3NHc/369UhNTUWvXr0U1jN79mzMmTOnKEsvdYyNjfH999/jl19+wblz5zjcGGPFmuDnwRU1Pg+u8BITE2FsbCx0GYyxUqpEnAfHir+IiAh89dVXeP/+vbyNw40xVhIIfoiSFV9ZL5wMAPv37xe4IsYYyz/eg2M5yj4qwIoVK4QuiTHGVMIBx5TwkDeMMW3AAccUcLgxxrQFBxyTIyL079+fw40xphU44JicSCTCli1b0KJFCw43xliJx70oGdLS0qCrm/5WcHNzQ2BgIEQikcBVMcZY4fAeXCkXERGB2rVrIyAgQN7G4cYY0wYccKVYRoeShw8fYuLEiUhLSxO6JMYYUxsOuFIqe2/JgIAA+WFKxhjTBhxwpRCfCsAYKw044EoZDjfGWGnBAVfKrF69msONMVYq8JcupUzGwLFjxozhcGOMaTUOuFLgzZs3KFu2LMRiMcRiMZYsWSJ0SYwxpnF8iFLLhYeHo3HjxhgyZAikUqnQ5TDGWJHhPTgtFh4eDk9PT/l4bjExMbC2tha4KsYYKxq8B6elsoZbRocSDjfGWGnCAaeFcgo37lDCGCttOOC0DIcbY4yl44DTMo8ePUJERASHG2Os1ONOJlrG29sbx44dQ7Vq1TjcGGOlGgecFoiIiEBqaioqVqwIID3kGGOstOOAK+Eyri2ZmpqKwMBAecixwpPJZEhNTRW6DMZKHT09PYjF4kKvhwNOHZ4fFuRps184WV9fX5A6tFFqaipCQ0Mhk8mELoWxUsnc3By2traFGoCZA04drsxO/ykrugFDeVQAzSEivH79GmKxGE5OTtDR4b5YjBUVIkJSUhLevHkDALCzsyvwujjgCuvuBuBjTPr9jruL5Ck53DQrLS0NSUlJsLe3h5GRkdDlMFbqGBoaAki/jq61tXWBD1fyv6aF9exg5v2KXTT+dBxumpdxzU4+5MuYcDL+ufz06VOB18EBpy5tNwH6Jhp/GkNDQ5iYmHC4FYHCHPtnjBWOOv7++BCluugaFsnTWFlZ4cyZM0hOTuZwY4yxPPAeXAkQERGB3bszv9+zsrLicGPFRmpqKipVqoQrV64IXYrW2LBhAzp37ix0GSUeB1wxl/Gd28CBAxVCjrHiYsOGDXBxcUGTJk2Upg0fPhxisRj79+9XmjZo0CB069ZNqT0wMBAikQixsbHyttTUVCxZsgS1a9eGkZERrKys0LRpU2zfvr1Q39F8zr1799C8eXMYGBjAyckpX4MF37hxA23atIG5uTksLCzg7e2Nu3fvKsxDRFi2bBkqV64MiUQCBwcHLFy4UD79m2++QVBQEC5evKj211SacMAVY9k7lLRq1UrokhhTQERYs2YNhgwZojQtKSkJ/v7++OGHH7Bt27YCP0dqaiq8vb2xePFifPvtt7hy5QquX7+OUaNGYfXq1Xjw4EFhXkKu4uPj0a5dO1SoUAG3bt3C0qVLMWfOHGzatCnXZRISEtC+fXuUL18e165dw6VLl2BiYgJvb2+FIB43bhy2bNmCZcuW4fHjxzh69Cg8PDzk0/X19dG3b1+sWrVKI6+t1KBSJi4ujgBQXFxc4Vf2KZloGdJvD3YXfn1ZhIeHk6urKwEgV1dXCg8PV+v6We6Sk5Pp4cOHlJycnN4gkxGlJghzk8nyVfObN2/IxsaGFi5cKG+7fPky6enp0ZkzZ0gmk1GbNm2oXbt2JPv/OmNiYsjBwYFmzpxJRERz584lOzs7io6Olq+jY8eO1KpVK5JKpTk+740bN0hHR4fi4+OVpu3YsYO++OILio2NJSMjI6X3sK+vL3Xt2lVpuXPnzhEAev/+PRER/fTTT6Sjo0NBQUFK86amplJCQkLeG6eA1q1bRxYWFpSSkiJv+/HHH6lKlSq5LnPjxg0CoPBa7927RwDo2bNnRET08OFD0tXVpcePH+f5/OfPnyd9fX1KSkoq5CspmZT+DrPI7+c4dzIpjDtrM++L1delnE8FKGbSkoBVZYR57rEJgJ7xZ2crV64ctm3bhm7duqFdu3aoUqUKBgwYgNGjR6NNmzYAgJ07d6JmzZpYtWoVxo0bhxEjRsDBwQGzZs0CAEyfPh0BAQEYOnQoDh06hLVr1+LKlSu4e/durie7X7x4EZUrV4aJiXIP4q1bt6J///4wMzNDhw4dsGPHDsycOVPlTbBnzx54eXmhbt26StP09PSgp6eX43Lh4eGoVq1anuueNm0apk2bluO0q1evokWLFgqni3h7e+Onn37C+/fvYWFhobRMlSpVULZsWWzduhXTpk2DVCrF1q1bUbVqVTg7OwMAjh07BldXV/z5559o3749iAheXl5YsmQJLC0t5etq0KAB0tLScO3aNT56U0AccIWR9CbzvnN7tawyLi6Ow40VSMeOHTFs2DD069cPDRo0gLGxMfz8/OTTHRwcsHHjRgwcOBCRkZE4ceIEbt++DV3d9I8BsViMX3/9FXXq1MGUKVOwatUqbNmyBeXLl8/1OV+8eAF7e3ul9mfPnuGff/7BwYPp54n2798fEyZMwIwZM1Tu/v3s2bMCfcDb29vjzp07ec6TNVCyi4yMhIuLi0KbjY2NfFpOAWdiYoLAwEB069YN8+fPBwC4ubnh1KlT8u0cEhKCFy9eYP/+/di1axekUinGjx+PXr164e+//5avy8jICGZmZnjx4kW+Xi9TxgGnDvUnAhJTtazKzMwMAwYMwO7duzncigtdo/Q9KaGeWwXLli1DjRo1sH//fty6dQsSiURh+ldffYVDhw5h8eLFWL9+Pdzc3BSmu7q6YtmyZRg+fDh8fHzQt2/fPJ8vOTkZBgYGSu3btm2Dt7c3rKysAKSH75AhQ/D333/L9yjzi4hUmj+Drq4uKlWqVKBlCyo5ORlDhgxB06ZN8dtvv0EqlWLZsmXo1KkTbty4AUNDQ8hkMqSkpGDXrl2oXLkygPS93fr16+PJkyeoUqWKfH2GhoZISkoq0tegTbiTSTE0Z84cBAUFcbgVFyJR+mFCIW4q7u0EBwfj1atXkMlkCAsLU5qelJSEW7duQSwW49mzZzmu48KFCxCLxQgLC0NaWt7XV7WyssL79+8V2qRSKXbu3Injx49DV1cXurq6MDIywrt37xQ6m5iamiIuLk5pnbGxsRCLxTA2Tj80W7lyZTx+/PhzL11JeHg4ypQpk+dt0aJFuS5va2uLqKgohbaMx7a2tjkus3fvXoSFhWH79u1o2LAhvvjiC+zduxehoaE4cuQIgPRrK+rq6srDDQCqVq0qrzmrd+/eoVy5ciq/dpaOA64YiIiIwODBg5GYmChvMzMzE7AiVhKlpqaif//+8PHxwfz58zF06FD5BWszTJw4ETo6Ojh58iRWrVqlcEgMAPbt24eDBw8iMDAQ4eHh8sNsualbty4eP36ssJd14sQJfPjwAbdv38adO3fkt99++w0HDx6Ud/+vUqUKHjx4gJSUFIV1BgUFwcXFRf7dWt++fXHmzBncvn1b6fk/ffqk8HeTVcYhyrxuI0aMyPW1NW7cGBcuXFDo/Xj69GlUqVIlx8OTQPo/EDo6OgqHYTMeZ4xM0bRpU6SlpSE4OFg+z9OnTwEAFSpUkLcFBwfj48ePOX73yPJJI91fijG19qI8/0N6D8pzEwu8iqy9JQcNGlT4mlih5dV7qzibNGkSOTs7U1xcHEmlUmrWrBl16tRJPv3PP/8kfX19unXrFhERTZ06lRwdHendu3dERBQREUEWFha0atUqIiIKCAggXV1dunr1aq7PGR0dTXp6enT//n15W9euXcnHx0dpXqlUSra2trRmzRoiInr//j1ZW1tT79696ebNm/Ts2TPaunUrmZiY0Pr16+XLffz4kZo3b04WFha0Zs0aunPnDgUHB9O+ffuoXr16dPv27YJvtDzExsaSjY0NDRgwgP7991/y9/cnIyMj2rhxo3yegwcPKvSqfPToEUkkEho5ciQ9fPiQ/v33X+rfvz+ZmZnRq1ev5NuhXr161KJFCwoKCqKbN29So0aNqG3btgrPv337dnJ1ddXIaysJ1NGLkgOuoFITM08RKGDA8akAxVNJDLhz586Rrq4uXbx4Ud4WGhpKpqamtG7dOvlpBIsWLZJPT01Npfr161Pv3r3lpxF4e3vLTyMgIhozZgxVrFiRPnz4kOtz9+7dm6ZMmUJERJGRkaSrq0u///57jvOOHDmS6tatK3/85MkT6t69O9nb25OxsTHVrl2bNm/erFADUXrI+fn5Uc2aNcnAwIAsLS2padOmtGPHDvr06ZNqG0sFd+/epWbNmpFEIiEHBwdavHixwvTt27dT9v2Ev/76i5o2bUpmZmZkYWFBrVu3Vvon4eXLl9SjRw8qU6YM2djY0KBBgygmJkZhnnbt2pGfn59mXlgJoI6AExEV8BvcEio+Ph5mZmaIi4uDqWkhOoY8Owwc7Z5+v9kioNFUlRbnUwGKr48fPyI0NBQuLi45dqBgiu7du4e2bdsiODgYZcoIdDqFlnnw4AFat26Np0+fltqvK/L6O8zv5zh/B1dQ0o+Z9+uOVmlRDjemTWrVqoWffvoJoaGhQpeiNV6/fo1du3aV2nBTFz5NoLDKt1ZpmBwiQs+ePTncmFYZNGiQ0CVoFS8vL6FL0Aq8B1fERCIRNm7ciIYNG3K4McaYBvEeXBGRyWTyyx3VrVsX165d4wE1GWNMg3gPrgiEh4ejXr16CuNlcbgxxphmccBpWHh4ODw9PXH37l2MGjVKfrInY4wxzeKA06CMcMvoUHL06NFcr8rOGGNMvfjTVkOyhxt3KGGMsaLFAacBHG6MMSY8DriCIAIuz8h1sp+fH4cbK7ZEIhEOHz4sdBkq27FjB8zNzYv0OQMDAyESieQXiM7N2bNnUbVqVUil0qIprIT74osv8Mcff2j8eTjgCiI+DIj9/5XADa2VJq9cuRIjRozgcGNFLjIyEmPGjIGrqyskEgmcnJzQuXNnnD17VujStNoPP/yAGTNmQCwWK7QnJyfD0tISVlZWSqMmALn/szFo0CB069ZNoe358+cYPHgwHB0dIZFI4OLigj59+uDmzZvqfClK1q5dC2dnZxgYGKBRo0a4fv16nvPv2LEDIpFI4Zb9UlszZszAlClTNN7pjgOuII50z7zfZg2A9HGbMi7rKZFIsH79eg43VqTCwsJQv359/P3331i6dCnu37+PgIAAeHp6YtSoUUKXp7UuXbqE4OBg9OzZU2naH3/8gerVq8Pd3b1Qe803b95E/fr18fTpU2zcuBEPHz7EoUOH4O7ujokTJxai+rzt27cPEyZMwOzZsxEUFITatWvD29tbaRim7ExNTfH69Wv5Lfuo5B06dMCHDx9w8uRJjdUOcMAVzLv/D75o0wAwLIuIiAg0bNgQEyZMKPDow6z4S0xMzPX28ePHfM+bnJycr3lV9d1330EkEuH69evo2bMnKleujOrVq2PChAn4559/FOaNjo5G9+7dYWRkBDc3Nxw9elQ+TSqVYsiQIXBxcYGhoSGqVKmCX375RWH5jD2MZcuWwc7ODmXLlsWoUaMUxk5LSUnBjz/+CCcnJ0gkElSqVAlbt26VT//333/RoUMHlClTBjY2NhgwYACio6NVes1HjhxBvXr1YGBgAFdXV8ydO1c+SGvfvn3h4+OjMP+nT59gZWWFXbt2AUi/AIOfn5/8tdauXRsHDhxQqQZ/f3+0bds2xwtzb926Ff3790f//v0VXrsqiAiDBg2Cm5sbLl68iE6dOqFixYqoU6cOZs+eLR9IVRNWrFiBYcOGYfDgwahWrRo2bNgAIyMjhYFrcyISiWBrayu/2djYKEwXi8Xo2LEj/P39NVY7gOIxHtyaNWuoQoUKJJFIyMPDg65du5bn/L///jtVqVKFJBIJ1ahRg44fP57v51LLcDkrDdKHyYkNVRryJvuQF6zkyW2YDgC53jp27Kgwr5GRUa7ztmzZUmFeKyurHOdTRUxMDIlEIoXhcHIDgBwdHWnv3r307NkzGjt2LJUpU0b+3k1NTaVZs2bRjRs3KCQkhH799VcyMjKiffv2ydfh6+tLpqamNGLECHr06BEdO3aMjIyMaNOmTfJ5evfuTU5OTnTw4EEKDg6mM2fOkL+/PxGljwVXrlw5mjp1Kj169IiCgoKobdu25OnpmWvd27dvJzMzM/njCxcukKmpKe3YsYOCg4Ppr7/+ImdnZ5ozZw4RpY9/Z2hoqDDUz7Fjx8jQ0JDi4+OJiGjBggXk7u5OAQEBFBwcTNu3byeJREKBgYFElD4MEQB6//59rnXVqlVLaRgdIqLnz5+TRCKhd+/eUUxMDBkYGFBYWJjS7+LQoUNKy/r6+lLXrl2JiCgoKIgA0N69e3OtITcLFy4kY2PjPG8vXrzIcdmUlBQSi8VK9Q0cOJC6dOmS63Nu376dxGIxlS9fnhwdHalLly7077//Ks23fv16qlChQq7r0Yrx4Pz9/UlfX5+2bdtGDx48oGHDhpG5uTlFRUXlOP/ly5dJLBbTkiVL6OHDhzRjxgylARfzos6AC39whcdz00IlMeCuXbtGAOjgwYOfnRcAzZgxQ/44ISGBANDJkydzXWbUqFHUs2dP+WNfX1+qUKECpaWlydu++uor+UCnT548IQB0+vTpHNc3f/58ateunUJbREQEAaAnT57kuEz2gGvTpo1SoO/evZvs7OyIiOjTp09kZWVFu3btkk/v06ePvMaPHz+SkZERXblyRWEdQ4YMoT59+hBR/gLOzMxM4TkyTJs2jbp16yZ/3LVrV5o9e7bCPPkJuH379hEACgoKyrWG3MTExNCzZ8/yvOU2nt7Lly8JgNL2mTx5Mnl4eOT6nFeuXKGdO3fS7du3KTAwkL788ksyNTWliIgIhfmOHDlCOjo6JJVKc1yPOgJO8GtRZt0FBoANGzbg+PHj2LZtG6ZMmaI0/y+//IL27dtj8uTJAID58+fj9OnTWLNmDTZs2FBkdUfEAq06fY2QsHDuLVlKJCQk5Dote+eCvL6jyH6yf1hYWKHqAqDyofFatWrJ7xsbG8PU1FSh5rVr12Lbtm0IDw9HcnIyUlNTUadOHYV1VK9eXeF129nZ4f79+wCAO3fuQCwWo2XLljk+/927d3Hu3Lkcx48LDg5G5cqVP/sa7t69i8uXL2PhwoXyNqlUio8fPyIpKQlGRkbo3bs39uzZgwEDBiAxMRFHjhyRHxZ7/vw5kpKS0LZtW4X1pqamom7dup99/gzJyclKhyelUil27typcGi3f//+mDRpEmbNmqXSBR9U/d1mZWlpCUtLywIvXxCNGzdG48aN5Y+bNGmCqlWrYuPGjZg/f7683dDQEDKZDCkpKTA0NNRILYIGXGpqKm7duoWpUzMHC9XR0YGXlxeuXr2a4zJXr17FhAkTFNq8vb2LtNtzxHtCq/VASAyHW2libGws+Ly5cXNzg0gkwuPHj/M1v56ensJjkUgk79Hm7++PSZMmYfny5WjcuDFMTEywdOlSXLt2Ld/r+NwHVkJCAjp37oyffvpJaZqdnV2+XkNCQgLmzp2LHj16KE3LCJx+/fqhZcuWePPmDU6fPg1DQ0O0b99evjwAHD9+HA4ODgrLSySSfNUAAFZWVnj//r1C26lTp/Dy5Uul7wClUinOnj0rD1UTExPExcUprTM2NlY+FlxG2D9+/Fil4AWARYsWYdGiRXnO8/DhQ5QvX16p3crKCmKxGFFRUQrtUVFRsLW1zXcNenp6qFu3Lp4/f67Q/u7dOxgbG2ss3ACBAy46OhpSqVTpC0gbG5tc/1AjIyNznD8yMjLH+VNSUhS658bHxxeyauB6uAyh7wBX5/IcbqxYsLS0hLe3N9auXYuxY8cqhWZsbGy+zyG7fPkymjRpgu+++07eFhwcrFI9NWvWhEwmw/nz53Mc26xevXr4448/4OzsDF3dgn0M1atXD0+ePEGlSpVynadJkyZwcnLCvn37cPLkSXz11VfyYK5WrRokEgnCw8Nz3dPMj7p16+Lhw4cKbVu3bsXXX3+N6dOnK7QvXLgQW7dulQdclSpVcOvWLfj6+srnkUqluHv3LoYOHQoAqFOnDqpVq4bly5fDx8dHae8vr9/tiBEj0Lt37zzrt7e3z7FdX18f9evXx9mzZ+WnLMhkMpw9exajR+d/kGepVIr79++jY8eOCu3//vuvyoGtKsEPUWqan58f5s6dq9Z19qxnjP1IhMekfRxurNhYu3YtmjZtCg8PD8ybNw+1atVCWloaTp8+jfXr1+PRo0f5Wo+bmxt27dqFU6dOwcXFBbt378aNGzfg4uKS71qcnZ3h6+uLb775BqtWrULt2rXx4sULvHnzBr1798aoUaOwefNm9OnTBz/88AMsLS3x/Plz+Pv7Y8uWLUqHfHMya9YsfPnllyhfvjx69eoFHR0d3L17F//++y8WLFggn69v377YsGEDnj59inPnzsnbTUxMMGnSJIwfPx4ymQzNmjVDXFwcLl++DFNTU4XQyYu3tzd27twpf/z27VscO3YMR48eRY0aNRTmHThwILp37453797B0tISEyZMwJAhQ+Du7o62bdsiMTERq1evxvv37+UBJxKJsH37dnh5eaF58+aYPn063N3dkZCQgGPHjuGvv/7C+fPnc6ytsIcoJ0yYAF9fXzRo0AAeHh5YuXIlEhMT5V8pZbwmBwcH+Pn5AQDmzZuHL774ApUqVUJsbCyWLl2KFy9eyF9PhosXL6Jdu3YFri1f8vyGTsMK0kvHycmJfv75Z4W2WbNmUa1atXKc/+PHjxQXFye/ZXyRXahOJkyr5fXldnH36tUrGjVqFFWoUIH09fXJwcGBunTpQufOnZPPgxw6NpiZmdH27duJKP1vZtCgQWRmZkbm5uY0cuRImjJlCtWuXVs+f9ZOEBnGjRun0IEmOTmZxo8fT3Z2dqSvr0+VKlWibdu2yac/ffqUunfvTubm5mRoaEju7u70/fffk0wmy/G1Ze9kQkQUEBBATZo0IUNDQzI1NSUPDw+FnpxERA8fPiQAVKFCBaV1y2QyWrlyJVWpUoX09PSoXLly5O3tTefPnyei/HUyyegh+fjxYyIiWrZsGZmbm1NqaqrSvCkpKWRubk6//PKLvG3Pnj1Uv359MjExIRsbG+rYsSPdvXtXadknT57QwIEDyd7envT19alChQrUp0+fAnU+UcXq1aupfPnypK+vTx4eHvTPP/8oTG/ZsiX5+vrKH3///ffy+TNeT/Ya//vvP9LT01PqeJKVOjqZiIiEPXGrUaNG8PDwwOrVqwGk7wKXL18eo0ePzrGTiY+PD5KSknDs2DF5W5MmTVCrVq18dTKJj4+HmZkZ4uLiYGpqqr4XwrTGx48fERoaChcXlxzPbWIsu8mTJyM+Ph4bN24UupQS4ccff8T79++xadOmXOfJ6+8wv5/jgp/oPWHCBGzevBk7d+7Eo0ePMHLkSIVd4IEDByp0Qhk3bhwCAgKwfPlyPH78GHPmzMHNmzdVOibMGGPqNH36dFSoUIHHe8wna2trhR6VmiL4d3A+Pj54+/YtZs2ahcjISNSpUwcBAQHyjiTh4eEKX6o2adIEe/fuxYwZMzBt2jS4ubnh8OHDSse6GWOsqJibm2PatGlCl1FiaPLyYlkJfoiyqPEhSvY5fIiSMeFpxSFKxhhjTBM44BjLRSk7uMFYsaKOvz8OOMayyTgHKzU1VeBKGCu9kpKSAChfMUcVgncyYay40dXVhZGREd6+fQs9PT2VrhvIGCscIkJSUhLevHkDc3PzfJ30nxsOOMayEYlEsLOzQ2hoqNJAjYyxomFubq7SNS9zwgHHWA709fXh5ubGhykZE4Cenl6h9twycMAxlgsdHR0+TYCxEoy/XGCMMaaVOOAYY4xpJQ44xhhjWqnUfQeXcfKgOgY+ZYwxVvQyPr8/dzJ4qQu4Dx8+AAAPVMoYYyXchw8fYGZmluv0UnexZZlMhlevXsHExAQikahA64iPj4eTkxMiIiJK/QWbeVtk4m2hiLdHJt4WmdSxLYgIHz58gL29fZ4XYih1e3A6OjpwdHRUy7pMTU1L/Zs1A2+LTLwtFPH2yMTbIlNht0Vee24ZuJMJY4wxrcQBxxhjTCtxwBWARCLB7NmzIZFIhC5FcLwtMvG2UMTbIxNvi0xFuS1KXScTxhhjpQPvwTHGGNNKHHCMMca0EgccY4wxrcQBl4u1a9fC2dkZBgYGaNSoEa5fv57n/Pv374e7uzsMDAxQs2ZNnDhxoogq1TxVtsXmzZvRvHlzWFhYwMLCAl5eXp/ddiWJqu+LDP7+/hCJROjWrZtmCyxiqm6P2NhYjBo1CnZ2dpBIJKhcubLW/K2oui1WrlyJKlWqwNDQEE5OThg/fjw+fvxYRNVqzoULF9C5c2fY29tDJBLh8OHDn10mMDAQ9erVg0QiQaVKlbBjxw71FENMib+/P+nr69O2bdvowYMHNGzYMDI3N6eoqKgc5798+TKJxWJasmQJPXz4kGbMmEF6enp0//79Iq5c/VTdFn379qW1a9fS7du36dGjRzRo0CAyMzOj//77r4grVz9Vt0WG0NBQcnBwoObNm1PXrl2LptgioOr2SElJoQYNGlDHjh3p0qVLFBoaSoGBgXTnzp0irlz9VN0We/bsIYlEQnv27KHQ0FA6deoU2dnZ0fjx44u4cvU7ceIETZ8+nQ4ePEgA6NChQ3nOHxISQkZGRjRhwgR6+PAhrV69msRiMQUEBBS6Fg64HHh4eNCoUaPkj6VSKdnb25Ofn1+O8/fu3Zs6deqk0NaoUSMaPny4RussCqpui+zS0tLIxMSEdu7cqakSi0xBtkVaWho1adKEtmzZQr6+vloVcKpuj/Xr15OrqyulpqYWVYlFRtVtMWrUKGrdurVC24QJE6hp06YarbOo5SfgfvjhB6pevbpCm4+PD3l7exf6+fkQZTapqam4desWvLy85G06Ojrw8vLC1atXc1zm6tWrCvMDgLe3d67zlxQF2RbZJSUl4dOnT7C0tNRUmUWioNti3rx5sLa2xpAhQ4qizCJTkO1x9OhRNG7cGKNGjYKNjQ1q1KiBRYsWQSqVFlXZGlGQbdGkSRPcunVLfhgzJCQEJ06cQMeOHYuk5uJEk5+fpe5alJ8THR0NqVQKGxsbhXYbGxs8fvw4x2UiIyNznD8yMlJjdRaFgmyL7H788UfY29srvYFLmoJsi0uXLmHr1q24c+dOEVRYtAqyPUJCQvD333+jX79+OHHiBJ4/f47vvvsOnz59wuzZs4uibI0oyLbo27cvoqOj0axZMxAR0tLSMGLECEybNq0oSi5Wcvv8jI+PR3JyMgwNDQu8bt6DYxqzePFi+Pv749ChQzAwMBC6nCL14cMHDBgwAJs3b4aVlZXQ5RQLMpkM1tbW2LRpE+rXrw8fHx9Mnz4dGzZsELq0IhcYGIhFixZh3bp1CAoKwsGDB3H8+HHMnz9f6NK0Cu/BZWNlZQWxWIyoqCiF9qioKNja2ua4jK2trUrzlxQF2RYZli1bhsWLF+PMmTOoVauWJsssEqpui+DgYISFhaFz587yNplMBgDQ1dXFkydPULFiRc0WrUEFeW/Y2dlBT08PYrFY3la1alVERkYiNTUV+vr6Gq1ZUwqyLWbOnIkBAwZg6NChAICaNWsiMTER3377LaZPn57nEDDaJrfPT1NT00LtvQG8B6dEX18f9evXx9mzZ+VtMpkMZ8+eRePGjXNcpnHjxgrzA8Dp06dznb+kKMi2AIAlS5Zg/vz5CAgIQIMGDYqiVI1TdVu4u7vj/v37uHPnjvzWpUsXeHp64s6dOyV+wN2CvDeaNm2K58+fy4MeAJ4+fQo7O7sSG25AwbZFUlKSUohlBD+VsqsnavTzs9DdVLSQv78/SSQS2rFjBz18+JC+/fZbMjc3p8jISCIiGjBgAE2ZMkU+/+XLl0lXV5eWLVtGjx49otmzZ2vVaQKqbIvFixeTvr4+HThwgF6/fi2/ffjwQaiXoDaqbovstK0XparbIzw8nExMTGj06NH05MkT+vPPP8na2poWLFgg1EtQG1W3xezZs8nExIR+++03CgkJob/++osqVqxIvXv3FuolqM2HDx/o9u3bdPv2bQJAK1asoNu3b9OLFy+IiGjKlCk0YMAA+fwZpwlMnjyZHj16RGvXruXTBDRt9erVVL58edLX1ycPDw/6559/5NNatmxJvr6+CvP//vvvVLlyZdLX16fq1avT8ePHi7hizVFlW1SoUIEAKN1mz55d9IVrgKrvi6y0LeCIVN8eV65coUaNGpFEIiFXV1dauHAhpaWlFXHVmqHKtvj06RPNmTOHKlasSAYGBuTk5ETfffcdvX//vugLV7Nz587l+BmQ8fp9fX2pZcuWSsvUqVOH9PX1ydXVlbZv366WWng0AcYYY1qJv4NjjDGmlTjgGGOMaSUOOMYYY1qJA44xxphW4oBjjDGmlTjgGGOMaSUOOMYYY1qJA44xxphW4oBjLAc7duyAubm50GUUmEgkwuHDh/OcZ9CgQejWrVuR1MOYEDjgmNYaNGgQRCKR0u358+dCl4YdO3bI69HR0YGjoyMGDx6MN2/eqGX9r1+/RocOHQAAYWFhEIlESuPS/fLLL9ixY4dani83c+bMkb9OsVgMJycnfPvtt3j37p1K6+EwZgXBw+Uwrda+fXts375doa1cuXICVaPI1NQUT548gUwmw927dzF48GC8evUKp06dKvS68zNUk5mZWaGfJz+qV6+OM2fOQCqV4tGjR/jmm28QFxeHffv2Fcnzs9KL9+CYVpNIJLC1tVW4icVirFixAjVr1oSxsTGcnJzw3XffISEhIdf13L17F56enjAxMYGpqSnq16+PmzdvyqdfunQJzZs3h6GhIZycnDB27FgkJibmWZtIJIKtrS3s7e3RoUMHjB07FmfOnEFycjJkMhnmzZsHR0dHSCQS1KlTBwEBAfJlU1NTMXr0aNjZ2cHAwAAVKlSAn5+fwrozDlG6uLgAAOrWrQuRSIRWrVoBUNwr2rRpE+zt7RWGsgGArl274ptvvpE/PnLkCOrVqwcDAwO4urpi7ty5SEtLy/N16urqwtbWFg4ODvDy8sJXX32F06dPy6dLpVIMGTIELi4uMDQ0RJUqVfDLL7/Ip8+ZMwc7d+7EkSNH5HuDgYGBAICIiAj07t0b5ubmsLS0RNeuXREWFpZnPaz04IBjpZKOjg5WrVqFBw8eYOfOnfj777/xww8/5Dp/v3794OjoiBs3buDWrVuYMmUK9PT0AKQPbtq+fXv07NkT9+7dw759+3Dp0iWMHj1apZoMDQ0hk8mQlpaGX375BcuXL8eyZctw7949eHt7o0uXLnj27BkAYNWqVTh69Ch+//13PHnyBHv27IGzs3OO671+/ToA4MyZM3j9+jUOHjyoNM9XX32FmJgYnDt3Tt727t07BAQEoF+/fgCAixcvYuDAgRg3bhwePnyIjRs3YseOHVi4cGG+X2NYWBhOnTqlMP6bTCaDo6Mj9u/fj4cPH2LWrFmYNm0afv/9dwDApEmT0Lt3b7Rv3x6vX7/G69ev0aRJE3z69Ane3t4wMTHBxYsXcfnyZZQpUwbt27dHampqvmtiWkwtYxIwVgz5+vqSWCwmY2Nj+a1Xr145zrt//34qW7as/PH27dvJzMxM/tjExIR27NiR47JDhgyhb7/9VqHt4sWLpKOjQ8nJyTkuk339T58+pcqVK1ODBg2IiMje3p4WLlyosEzDhg3pu+++IyKiMWPGUOvWrUkmk+W4fgB06NAhIiIKDQ0lAHT79m2FebIP39O1a1f65ptv5I83btxI9vb2JJVKiYioTZs2tGjRIoV17N69m+zs7HKsgSh93DMdHR0yNjYmAwMD+dApK1asyHUZIqJRo0ZRz549c60147mrVKmisA1SUlLI0NCQTp06lef6WenA38Exrebp6Yn169fLHxsbGwNI35vx8/PD48ePER8fj7S0NHz8+BFJSUkwMjJSWs+ECRMwdOhQ7N69W36YrWLFigDSD1/eu3cPe/bskc9PRJDJZAgNDUXVqlVzrC0uLg5lypSBTCbDx48f0axZM2zZsgXx8fF49eoVmjZtqjB/06ZNcffuXQDphxfbtm2LKlWqoH379vjyyy/Rrl27Qm2rfv36YdiwYVi3bh0kEgn27NmDr7/+Wj7y9N27d3H58mWFPTapVJrndgOAKlWq4OjRo/j48SN+/fVX3LlzB2PGjFGYZ+3atdi2bRvCw8ORnJyM1NRU1KlTJ8967969i+fPn8PExESh/ePHjwgODi7AFmDahgOOaTVjY2NUqlRJoS0sLAxffvklRo4ciYULF8LS0hKXLl3CkCFDkJqamuMH9Zw5c9C3b18cP34cJ0+exOzZs+Hv74/u3bsjISEBw4cPx9ixY5WWK1++fK61mZiYICgoCDo6OrCzs4OhoSEAID4+/rOvq169eggNDcXJkydx5swZ9O7dG15eXjhw4MBnl81N586dQUQ4fvw4GjZsiIsXL+Lnn3+WT09ISMDcuXPRo0cPpWUNDAxyXa++vr78d7B48WJ06tQJc+fOxfz58wEA/v7+mDRpEpYvX47GjRvDxMQES5cuxbVr1/KsNyEhAfXr11f4xyJDcelIxITFAcdKnVu3bkEmk2H58uXyvZOM73vyUrlyZVSuXBnjx49Hnz59sH37dnTv3h316tXDw4cPlYL0c3R0dHJcxtTUFPb29rh8+TJatmwpb798+TI8PDwU5vPx8YGPjw969eqF9u3b4927d7C0tFRYX8b3XVKpNM96DAwM0KNHD+zZswfPnz9HlSpVUK9ePfn0evXq4cmTJyq/zuxmzJiB1q1bY+TIkfLX2aRJE3z33XfyebLvgenr6yvVX69ePezbtw/W1tYwNTUtVE1MO3EnE1bqVKpUCZ8+fcLq1asREhKC3bt3Y8OGDbnOn5ycjNGjRyMwMBAvXrzA5cuXcePGDfmhxx9//BFXrlzB6NGjcefOHTx79gxHjhxRuZNJVpMnT8ZPP/2Effv24cmTJ5gyZQru3LmDcePGAQBWrFiB3377DY8fP8bTp0+xf/9+2Nra5nhyurW1NQwNDREQEICoqCjExcXl+rz9+vXD8ePHsW3bNnnnkgyzZs3Crl27MHfuXDx48ACPHj2Cv78/ZsyYodJra9y4MWrVqoVFixYBANzc3HDz5k2cOnUKT58+xcyZM3Hjxg2FZZydnXHv3j08efIE0dHR+PTpE/r16wcrKyt07doVFy9eRGhoKAIDAzF27Fj8999/KtXEtJTQXwIypik5dUzIsGLFCrKzsyNDQ0Py9vamXbt2EQB6//49ESl2AklJSaGvv/6anJycSF9fn+zt7Wn06NEKHUiuX79Obdu2pTJlypCxsTHVqlVLqZNIVtk7mWQnlUppzpw55ODgQHp6elS7dm06efKkfPqmTZuoTp06ZGxsTKamptSmTRsKCgqST0eWTiZERJs3byYnJyfS0dGhli1b5rp9pFIp2dnZEQAKDg5WqisgIICaNGlChoaGZGpqSh4eHrRp06ZcX8fs2bOpdu3aSu2//fYbSSQSCg8Pp48fP9KgQYPIzMyMzM3NaeTIkTRlyhSF5d68eSPfvgDo3LlzRET0+vVrGjhwIFlZWZFEIiFXV1caNmwYxcXF5VoTKz1ERETCRixjjDGmfnyIkjHGmFbigGOMMaaVOOAYY4xpJQ44xhhjWokDjjHGmFbigGOMMaaVOOAYY4xpJQ44xhhjWokDjjHGmFbigGOMMaaVOOAYY4xpJQ44xhhjWul/TRXgeulz1UMAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "RocCurveDisplay.from_predictions(\n",
    "    test_df[\"y_true\"],\n",
    "    test_df[\"pred_prob\"],\n",
    "    name=f\"xxx\",\n",
    "    color=\"darkorange\",\n",
    "    plot_chance_level=True,\n",
    ")\n",
    "plt.axis(\"square\")\n",
    "plt.xlabel(\"False Positive Rate\")\n",
    "plt.ylabel(\"True Positive Rate\")\n",
    "plt.title(\"One-vs-Rest ROC curves:\\nVirginica vs (Setosa & Versicolor)\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "469be12b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "dd1751cc",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-15T00:19:36.722209Z",
     "start_time": "2023-12-15T00:19:36.443863Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score_cut 0\n",
      "[[932 128]\n",
      " [393 582]]\n",
      "f1 0.6908011869436201\n",
      "score_cut 1\n",
      "[[927 133]\n",
      " [388 587]]\n",
      "f1 0.6926253687315633\n",
      "score_cut 2\n",
      "[[924 136]\n",
      " [380 595]]\n",
      "f1 0.6975381008206331\n",
      "score_cut 3\n",
      "[[921 139]\n",
      " [363 612]]\n",
      "f1 0.709154113557358\n",
      "score_cut 4\n",
      "[[911 149]\n",
      " [342 633]]\n",
      "f1 0.7205463858850314\n",
      "score_cut 5\n",
      "[[889 171]\n",
      " [318 657]]\n",
      "f1 0.7287853577371047\n",
      "score_cut 6\n",
      "[[856 204]\n",
      " [285 690]]\n",
      "f1 0.738362760834671\n",
      "score_cut 7\n",
      "[[792 268]\n",
      " [235 740]]\n",
      "f1 0.7463439233484619\n",
      "score_cut 8\n",
      "[[729 331]\n",
      " [192 783]]\n",
      "f1 0.7496409765438009\n",
      "score_cut 9\n",
      "[[625 435]\n",
      " [132 843]]\n",
      "f1 0.748335552596538\n",
      "score_cut 10\n",
      "[[468 592]\n",
      " [ 73 902]]\n",
      "f1 0.7306601863102471\n",
      "score_cut 11\n",
      "[[276 784]\n",
      " [ 40 935]]\n",
      "f1 0.694135115070527\n",
      "score_cut 12\n",
      "[[ 80 980]\n",
      " [ 13 962]]\n",
      "f1 0.6595817620843332\n",
      "score_cut 13\n",
      "[[  16 1044]\n",
      " [   4  971]]\n",
      "f1 0.6494983277591974\n",
      "score_cut 14\n",
      "[[   1 1059]\n",
      " [   4  971]]\n",
      "f1 0.6462562396006656\n",
      "score_cut 15\n",
      "[[   0 1060]\n",
      " [   4  971]]\n",
      "f1 0.64604125083167\n",
      "score_cut 16\n",
      "[[   0 1060]\n",
      " [   0  975]]\n",
      "f1 0.6478405315614618\n",
      "score_cut 17\n",
      "[[   0 1060]\n",
      " [   0  975]]\n",
      "f1 0.6478405315614618\n"
     ]
    }
   ],
   "source": [
    "for score_cut in range(18):\n",
    "    df[\"y_pred\"] = df.apply(\n",
    "        lambda x: x[\"max_label\"] in [\"good\", \"cheerful\", \"ok\", \"cheeful\"]\n",
    "        or x[\"total_score\"] < score_cut,\n",
    "        axis=1,\n",
    "    )\n",
    "    print(\"score_cut\", score_cut)\n",
    "    print(metrics.confusion_matrix(df[\"y_true\"], df[\"y_pred\"]))\n",
    "    print(\"f1\", metrics.f1_score(df[\"y_true\"], df[\"y_pred\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6f9d6d86",
   "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.10.12"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
