{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0bbb4f53",
   "metadata": {},
   "source": [
    "# Treatment response in a cohort that can actually support it\n",
    "\n",
    "**Level:** intermediate &nbsp;·&nbsp; **Language:** Python &nbsp;·&nbsp; **Runtime:** about a minute\n",
    "&nbsp;·&nbsp; **Access:** none required for the clinical layer\n",
    "\n",
    "Most treatment-response analyses on public cancer cohorts are built on sand: the\n",
    "response field is sparse, the therapy is unrecorded, or the field labeled \"response\"\n",
    "actually holds disease status. This workbook does the checking first and the analysis\n",
    "second, on `CGCI-HTMCP-CC` - 212 cervical carcinomas from Ugandan women, 98% Black\n",
    "African, with ECOG performance status on essentially every case.\n",
    "\n",
    "A distinction that matters and is easy to miss: GDC's response-bearing fields carry\n",
    "both genuine response categories (`complete response`, `progressive disease`) and\n",
    "disease-status codes (`tf-tumor free`, `wt-with tumor`, `pdm-persistent distant\n",
    "metastasis`). The second group describes the state of the disease, not how it responded\n",
    "to treatment. Counting them as response is how a cohort with no treatment data at all\n",
    "ends up flagged as usable for resistance research."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "645969d2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:05.998413Z",
     "iopub.status.busy": "2026-09-21T00:41:05.998354Z",
     "iopub.status.idle": "2026-09-21T00:41:06.961777Z",
     "shell.execute_reply": "2026-09-21T00:41:06.961015Z"
    }
   },
   "outputs": [],
   "source": [
    "import json\n",
    "from collections import Counter\n",
    "from urllib.parse import urlencode\n",
    "from urllib.request import urlopen\n",
    "\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from scipy import stats\n",
    "\n",
    "GDC = \"https://api.gdc.cancer.gov\"\n",
    "PROJECT_ID = \"CGCI-HTMCP-CC\"\n",
    "\n",
    "\n",
    "def gdc_get(endpoint: str, params: dict) -> dict:\n",
    "    url = f\"{GDC}/{endpoint}?{urlencode(params)}\"\n",
    "    with urlopen(url, timeout=180) as r:  # noqa: S310 - fixed, trusted host\n",
    "        return json.loads(r.read().decode())\n",
    "\n",
    "\n",
    "filters = json.dumps(\n",
    "    {\"op\": \"in\", \"content\": {\"field\": \"project.project_id\", \"value\": [PROJECT_ID]}},\n",
    "    sort_keys=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53bd00c6",
   "metadata": {},
   "source": [
    "## 1. Separate genuine response from disease status"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b381d01a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:06.963354Z",
     "iopub.status.busy": "2026-09-21T00:41:06.963228Z",
     "iopub.status.idle": "2026-09-21T00:41:07.164431Z",
     "shell.execute_reply": "2026-09-21T00:41:07.163994Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "diagnoses.treatments.treatment_outcome\n",
      "  genuine response values : {'complete response': 41, 'progressive disease': 24, 'partial response': 11, 'stable disease': 7}\n",
      "  disease-status values   : {}\n",
      "\n",
      "follow_ups.disease_response\n",
      "  genuine response values : {}\n",
      "  disease-status values   : {'wt-with tumor': 212, 'tf-tumor free': 36}\n"
     ]
    }
   ],
   "source": [
    "RESPONSE_VOCABULARY = {\n",
    "    \"complete response\", \"partial response\", \"progressive disease\", \"stable disease\",\n",
    "    \"cr-complete response\", \"pr-partial response\", \"pd-progressive disease\",\n",
    "    \"sd-stable disease\", \"complete remission\", \"partial remission\",\n",
    "    \"no measurable disease\", \"persistent disease\", \"treatment ongoing\",\n",
    "}\n",
    "NON_ANSWERS = {\"not reported\", \"unknown\", \"unspecified\", \"not applicable\"}\n",
    "\n",
    "agg = gdc_get(\n",
    "    \"cases\",\n",
    "    {\n",
    "        \"filters\": filters,\n",
    "        \"facets\": \"diagnoses.treatments.treatment_outcome,follow_ups.disease_response\",\n",
    "        \"size\": \"0\",\n",
    "        \"format\": \"json\",\n",
    "    },\n",
    ")[\"data\"][\"aggregations\"]\n",
    "\n",
    "for field, node in agg.items():\n",
    "    buckets = {b[\"key\"]: b[\"doc_count\"] for b in node.get(\"buckets\", []) if b[\"key\"] != \"_missing\"}\n",
    "    genuine = {k: v for k, v in buckets.items() if k.lower() in RESPONSE_VOCABULARY}\n",
    "    status = {\n",
    "        k: v for k, v in buckets.items()\n",
    "        if k.lower() not in RESPONSE_VOCABULARY and k.lower() not in NON_ANSWERS\n",
    "    }\n",
    "    print(f\"\\n{field}\")\n",
    "    print(f\"  genuine response values : {genuine}\")\n",
    "    print(f\"  disease-status values   : {status}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "46d997f3",
   "metadata": {},
   "source": [
    "`follow_ups.disease_response` is dominated by `tf-tumor free` and `wt-with tumor`,\n",
    "which are tumor-status codes. `diagnoses.treatments.treatment_outcome` carries the\n",
    "real response categories. Only the second is used below."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d274d818",
   "metadata": {},
   "source": [
    "## 2. Assemble a per-case response table\n",
    "\n",
    "Treatment records are one-to-many, so a case can have several outcomes. We collapse to\n",
    "one label per case with an explicit, pre-stated rule: a patient counts as a responder\n",
    "only if a complete or partial response is recorded and no progression is."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "781bc299",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:07.165502Z",
     "iopub.status.busy": "2026-09-21T00:41:07.165434Z",
     "iopub.status.idle": "2026-09-21T00:41:08.121349Z",
     "shell.execute_reply": "2026-09-21T00:41:08.120954Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "retrieved 212 cases\n",
      "\n",
      "cases with a usable response label: 72 of 212\n",
      "response\n",
      "NaN           140\n",
      "responder      48\n",
      "progressor     24\n"
     ]
    }
   ],
   "source": [
    "FIELDS = [\n",
    "    \"submitter_id\",\n",
    "    \"demographic.vital_status\",\n",
    "    \"demographic.days_to_death\",\n",
    "    \"follow_ups.days_to_follow_up\",\n",
    "    \"follow_ups.ecog_performance_status\",\n",
    "    \"diagnoses.treatments.treatment_outcome\",\n",
    "    \"diagnoses.treatments.therapeutic_agents\",\n",
    "    \"diagnoses.treatments.treatment_type\",\n",
    "]\n",
    "hits = gdc_get(\n",
    "    \"cases\",\n",
    "    {\"filters\": filters, \"fields\": \",\".join(FIELDS), \"size\": \"1000\", \"format\": \"json\"},\n",
    ")[\"data\"][\"hits\"]\n",
    "print(f\"retrieved {len(hits)} cases\")\n",
    "\n",
    "RESPONDER = {\"complete response\", \"partial response\", \"cr-complete response\", \"pr-partial response\"}\n",
    "PROGRESSOR = {\"progressive disease\", \"pd-progressive disease\"}\n",
    "\n",
    "\n",
    "def as_number(x):\n",
    "    try:\n",
    "        v = float(x)\n",
    "    except (TypeError, ValueError):\n",
    "        return np.nan\n",
    "    return v if v > -35000 else np.nan\n",
    "\n",
    "\n",
    "rows = []\n",
    "for h in hits:\n",
    "    demo = h.get(\"demographic\") or {}\n",
    "    outcomes, agents = [], []\n",
    "    for d in h.get(\"diagnoses\") or []:\n",
    "        for tx in d.get(\"treatments\") or []:\n",
    "            o = (tx.get(\"treatment_outcome\") or \"\").lower().strip()\n",
    "            if o and o not in NON_ANSWERS:\n",
    "                outcomes.append(o)\n",
    "            a = (tx.get(\"therapeutic_agents\") or \"\").lower().strip()\n",
    "            if a:\n",
    "                agents.append(a)\n",
    "\n",
    "    if any(o in RESPONDER for o in outcomes) and not any(o in PROGRESSOR for o in outcomes):\n",
    "        label = \"responder\"\n",
    "    elif any(o in PROGRESSOR for o in outcomes):\n",
    "        label = \"progressor\"\n",
    "    else:\n",
    "        label = None\n",
    "\n",
    "    ecogs = [\n",
    "        as_number(f.get(\"ecog_performance_status\"))\n",
    "        for f in (h.get(\"follow_ups\") or [])\n",
    "    ]\n",
    "    ecogs = [e for e in ecogs if not np.isnan(e)]\n",
    "\n",
    "    times = [as_number(f.get(\"days_to_follow_up\")) for f in (h.get(\"follow_ups\") or [])]\n",
    "    times = [t for t in times if not np.isnan(t) and t >= 0]\n",
    "    dd = as_number(demo.get(\"days_to_death\"))\n",
    "    if not np.isnan(dd) and dd >= 0:\n",
    "        times.append(dd)\n",
    "\n",
    "    rows.append(\n",
    "        {\n",
    "            \"case\": h.get(\"submitter_id\"),\n",
    "            \"response\": label,\n",
    "            \"n_outcome_records\": len(outcomes),\n",
    "            \"agents\": \"; \".join(sorted(set(agents))) or None,\n",
    "            \"ecog\": min(ecogs) if ecogs else np.nan,\n",
    "            \"vital_status\": str(demo.get(\"vital_status\", \"\")).lower(),\n",
    "            \"time_months\": (max(times) / 30.44) if times else np.nan,\n",
    "        }\n",
    "    )\n",
    "\n",
    "df = pd.DataFrame(rows)\n",
    "print(f\"\\ncases with a usable response label: {df['response'].notna().sum()} of {len(df)}\")\n",
    "print(df[\"response\"].value_counts(dropna=False).to_string())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4845660",
   "metadata": {},
   "source": [
    "## 3. Is performance status associated with response?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "62b24328",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:08.122559Z",
     "iopub.status.busy": "2026-09-21T00:41:08.122489Z",
     "iopub.status.idle": "2026-09-21T00:41:08.132246Z",
     "shell.execute_reply": "2026-09-21T00:41:08.131847Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cases with both response and ECOG: 71\n",
      "\n",
      "ECOG distribution by response group:\n",
      "response  progressor  responder\n",
      "ecog                           \n",
      "0.0                0          2\n",
      "1.0               20         40\n",
      "2.0                3          4\n",
      "3.0                1          1\n",
      "\n",
      "Mann-Whitney U: p = 0.2967\n",
      "  median ECOG, responders  : 1.0 (n=47)\n",
      "  median ECOG, progressors : 1.0 (n=24)\n"
     ]
    }
   ],
   "source": [
    "sub = df[df[\"response\"].notna() & df[\"ecog\"].notna()]\n",
    "print(f\"cases with both response and ECOG: {len(sub)}\")\n",
    "\n",
    "if len(sub) >= 20:\n",
    "    print(\"\\nECOG distribution by response group:\")\n",
    "    print(pd.crosstab(sub[\"ecog\"], sub[\"response\"]).to_string())\n",
    "    r = sub.loc[sub[\"response\"] == \"responder\", \"ecog\"]\n",
    "    p = sub.loc[sub[\"response\"] == \"progressor\", \"ecog\"]\n",
    "    if len(r) >= 5 and len(p) >= 5:\n",
    "        u = stats.mannwhitneyu(r, p, alternative=\"two-sided\")\n",
    "        print(f\"\\nMann-Whitney U: p = {u.pvalue:.4g}\")\n",
    "        print(f\"  median ECOG, responders  : {r.median()} (n={len(r)})\")\n",
    "        print(f\"  median ECOG, progressors : {p.median()} (n={len(p)})\")\n",
    "    else:\n",
    "        print(\"\\ntoo few in one group for a comparison\")\n",
    "else:\n",
    "    print(\"too few cases with both fields\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0d4f63a2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:08.133122Z",
     "iopub.status.busy": "2026-09-21T00:41:08.133073Z",
     "iopub.status.idle": "2026-09-21T00:41:08.135201Z",
     "shell.execute_reply": "2026-09-21T00:41:08.134905Z"
    }
   },
   "outputs": [],
   "source": [
    "# One house style for every figure below: a single accent, one contrast colour for the\n",
    "# thing the reader must not miss, and nothing else. Defined here rather than imported so\n",
    "# the downloaded notebook runs on its own.\n",
    "INK, ACCENT, WARN, MUTED = \"#1f2430\", \"#2f6f6b\", \"#b4762a\", \"#9aa3b2\"\n",
    "mpl.rcParams.update(\n",
    "    {\n",
    "        \"figure.dpi\": 120,\n",
    "        \"savefig.dpi\": 120,\n",
    "        \"font.size\": 9.5,\n",
    "        \"axes.titlesize\": 11,\n",
    "        \"axes.titleweight\": \"semibold\",\n",
    "        \"axes.labelcolor\": INK,\n",
    "        \"axes.titlecolor\": INK,\n",
    "        \"text.color\": INK,\n",
    "        \"axes.edgecolor\": MUTED,\n",
    "        \"xtick.color\": MUTED,\n",
    "        \"ytick.color\": MUTED,\n",
    "        \"axes.grid\": True,\n",
    "        \"grid.color\": \"#e6e9ef\",\n",
    "        \"grid.linewidth\": 0.8,\n",
    "        \"axes.axisbelow\": True,\n",
    "    }\n",
    ")\n",
    "\n",
    "\n",
    "def finish(ax, title):\n",
    "    ax.set_title(title, loc=\"left\")\n",
    "    for side in (\"top\", \"right\"):\n",
    "        ax.spines[side].set_visible(False)\n",
    "    ax.figure.tight_layout()\n",
    "    return ax"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fa1dbd2",
   "metadata": {},
   "source": [
    "### What the outcome field actually contains\n",
    "\n",
    "The left panel is the reason this workbook exists: most cases carry no usable response\n",
    "label at all, and a bar chart makes that impossible to overlook in a way a printed\n",
    "count is not."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "527f57e8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:08.136064Z",
     "iopub.status.busy": "2026-09-21T00:41:08.136020Z",
     "iopub.status.idle": "2026-09-21T00:41:08.254947Z",
     "shell.execute_reply": "2026-09-21T00:41:08.254601Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Failed to find font weight semibold for DejaVu Sans, now using 700.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABI0AAAHtCAYAAACUBI7JAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAASdAAAEnQB3mYfeAAAl/BJREFUeJzs3QWYXNXZwPF33V2S1Xg27u5CSHAtFFqgpdBSKBSHYi1W4ENbWqwUL+6EICEhAnH3jbusu8v3vGczk5md2c3KbHZn9/97ntnZuffOzL13rr7nnPd4VFdXVwsAAAAAAABgw9P2BQAAAAAAAEDQCAAAAAAAAE5R0wgAAAAAAAAOCBoBAAAAAADAAUEjAAAAAAAAOCBoBAAAAAAAAAcEjQAAAAAAAOCAoBEAAAAAAAAcEDQCAAAAAACAA4JGAAAAAAAAcODtOAhwb8uWr5JHH3/G/N+lS5L867knWvVzWvs7TmbR4qXy2Rdfy8FDh6WkpMQMe/FfT0liQrx0JHX9Fk35jZ57/mWZN3+h+f+C886Wq39z+SmfbwDoCObOWyBfzf5ODh85KqWlpWbYW6+9IBER4a09a4CdefMXyXPPv2T+79c3RZ74+19ZQwDcAkGjJti374D86ea7HIb7+PhIZGSEDBrQTy6+6FyJj+vsit8IjZSbly8bN201/5eWlrX657T2d9Tnk8++ktvufMBheElJqZSVlctFl15lHfbfl/8hsbEx0l7V9Vs05Tc6cOCQ9T1jRo9o8jw15Ddo7W0IQMeyZWuq3HXPgw7Dvby8JSI8TAYN6i+/uOjcU1Lw8Pqb78qDjzzpMLy8oqLFvxvNl52dI1defb319fvvvCpBQYFt7jNdJSs7x3q+9vPza+3ZAYAGI2jUBCWlpdaDvjM/zFsoL77yuinpGjliaFO+Ajgl3v7fR9b/L//lRXLJxeeLp6eHJCbGS1V1ld12XlpWzq9yivEbAGhrCguL6r0G+nHhT/Lyf96UZ/7vITnzjBktOi9vv3viHHbt766Qs8443ZzDIqll5BY0uGe7LVVUVrbJzwSAjo6gkQs88+TD0r1bV9mzd588+tgzkpGZJcXFJfL3J56Vzz56yxVfAbQIbZJmcdEFZ8uQwQPsgqOoqSn05afvmFXh7+/f5lZJW58/AO3byy88I3GdYyU9PVOeevbfsnXbdtPU+dY7H5ARw4e0aA3VgwdPnMMuueg86dWrR4t9FwAAHRVBIxfo2aObDBrY39xwHzp0xFw0qS1btzudflvqDvn0s9nmwqqwqEiio6NkwrjRcsnF5znc9K1es04+//Ib2blrj5SVlZkmb3369JJZp0+XHt271pnX5PlnH5f3P/xMvvlunmnjP3L4ULn2mislLDTEYX42bd4mn30xW1JTd0pRcbFEhIfLsKGD5BcXnyexMdH15k75/Is58vlXc6SivEIGDOgr1193tYSGhDRpGZqyfhpj95598udb/2J97eHhIf5+fhIX11nGjxst5597pvj6+tT5/urq6gav05ZaBlct34cffS5vv/uh5OTkWqe/8y8PSWCgv4SGhsi4saPkm2/n2X3+tdfdLD4+NYeMW2++XqZOntDo5a29Df3zmcfknXc/kh/mL5K8vHz5/GPnQdZvvv1BXnj5NfP/kMED5eG/nVhO9X9PPy+Lf1pq/r/i8kvkkl+c3+zf22Lr1tQ6cwZVVFTIu+9/YuZft20N4Pzhmivr/KzGzNO/X/pvg36D+ubvVOzfADq2lN49pGuXZOux47RZF5r/NXD03dwf5YpfXWKdduOmLfLZF3Nk+/aa41Gn2BiZPGmcXHj+OXbH49q5Xx558B554633ZOGiJVIt1TJ96mRzXNPjrsUNf75L/Px8zfH0lRdqjmVqzdoN8uXsb2XHzl2mQC8qKlJGDBtizk+2eY9O9p3/e/Nl+f6HH+X5f//HOs3Df7tHXv7PG/LTkuUSHhYmV11xqTl/VlZWytv/+9DUPNfUBSNGDJFrfnuFmT/bdXHP/Y/Ynw/8/SUxIU4mTRgn55w9U7y8vOqcv8cffUA++OgzmXP8PKHXoNdd+xsJDAxw+I2279hlchdq08KCgkJJSkyQGadNkTNnnWa+11ZDf6P6LFm20uSZ0sJUPU8mxMdJ/359ZNbp0yQ5OdFM8+Qz/5L5Py62e99lv75WvLxq+uh54N47TG39xqynhn6m5RpI6Xn73rtvtU5//98ek3XrN5r/b7judzJr5vRGLVdjWLYT/W21htS4MSPld7/9tbU53f/e+1je//BT8//0aZPl5hv/YPf+v9z3sGzaXFOr6tY//1GmTplY53c1ZPtuyjbQ0HVS+/v//vB99S67rabuww3dRxr7u7piH9H0A7r8Cxb+ZGrDTZwwxhwjnnzmeXM9Zns929jfr6Hrqyn7QXN+R7g3gkYupjfcFiHBQQ7j//mvV0yS3KqqKrvh38/9Ud54+31567V/W/MAfPr5bJNvRoMVFqtlvXz19Xfy5NP/kheff1LOmHWa07wmd9/7kHzw0efW9y1fsVq+/uZ7+fj9183Bw+LpZ/8t/3rxv3bfoeb9uEheeuUN+edzj1mDA7W/428PPWHm2UIvmvQC6ZuvPjAXSY1dhsaun8bSA2ddVeq/+Oobc/P/3tsvS0CA4wWXaug6bcllcNXyHUtLd5h21+495llPKF2Sk6wXIraBIQvbYFNjlrf2NnTrHffL51/OMa9rX7jaGjVymNx061+kvLzCzIdeHFlOfFoj6u13PpT8ggLzGaNGDWv0+qhPXTmD9GLvmutulgULf7YO0xO9vk5KdP77NmaeNADdkN+gvpxGLb1/A0DtQrSAAH9zrFMHDx2xjvv748/KK/91LBjQgpg33/5A3nr9BYmJjnLI/eLr6yt//NPtJjivwsJCzc1K7WOpBkZUXl6BdVjt45jF3B8WyEv/eUNe+tdTMnrU8AZ9p5kmK9tumutuuE3mL1hsl5RbO5LQfIF6DrRtsrdi5Rp58781hYqqoI5mfitW6rXT1/LhJ1/IG6/+y3oTWjsfzm13PWAKaywWLV5ibiC18MX2fOrsPLB6zXpz7v3Dtb+Rv9z55yb9RnV58+335a8P2RderFq9zpzjHvu/5+Tt11+QCePHyL79B0xBky0NalloQVJj11NDP9P2GkiDjLZ279lrHactBxq7XA2lv8eNN98tc779we4aYs53P8hH774mISHBMnH8GHPzrtdX+/YflOuuvcpaEKfXAB998qUJcuj2MGzYkHq/ryHbd2O3gcask9rff7Jlb+4+3NB9pLG/qyv2kfLycpN3yxIcUkuXrZSflywXP18/6zLodtrY368x66sp+0FTf0e4P4JGLqRRY90pLaZPm2Q3fvac7+WZf7xoDS7deduN5gJLT9xag2X37r1yw013yucfv20OZq+98a45qWgJyoMP3CV9+/SStLQM2Zq6Q7748htzInVm1+694u3tLa+98k8TAdcmc0eOHpM9e/ebmgTPPFlTYqOf8fwLr1p3/DtuvcFciGn0/ONPvzQ34dffeIfM/+5ziYvr5FBjQuft1Zeek4zMTPnbw0+aUkWtTaQHznPPnmWma8wyNHb9NFaP7l2szXhURUWlaZ71rxdeNRebGlF/7c13TUS9qeu0pZfBVct36S/ON6Uiv7rqOsnPr7nAfvLxB02JsS6nnoC0udpFl/7W+nn6W8fG1tRMSU5KbPby6jrV79bv1fd4e58oUa1Ng3KnTZtsti0NHH39zVz59eW/MOPmz19ktlWlJ0JLiXdzfu+G0ACPJWCkFyd33X6T9O7V3ZQM6nw605h5uuGPv2vQb1CXU7F/A4Ct4uJi05GCRfDx0mY9XlputKIiI8zxMik5Ud57/xNTIq43+rfcdq+882ZNCbatdes3mYKH5556VLp2Ta7pdCQiXM45a6Zc8IurTABfaSFUQkKcNcGwln5bbp40kPWXO2+W7t26yHsffGrOIZow+ffX3yoL5n7h0NOas+90Nl8Txo+Wd9540Xyefq7e3OtNlBYaPv/c4+bm8I67/2bmUW9WN2zcbGqmq4H9+9qdD3RaDQz84/lXTPBjydIVppaEbU0t2+/WGs+v/+efsv/AIXnksafNuXH9hk2ycPESmTJpvJlOa6lYzgPqsksvlJmnTzM1tJYsXSlVVSfy/TTnN7L139f/Z571d9BawXreO3I0zQRvvvhyjhQWFZvxd956o/ziovPkqqtvsL73vXf+I0HHa4Hoem/semroZ9rybOC1WEOXq6H0N9SaL6+/+rwJAD3y96clMytbtm3bYQJ9f3vgLlPLZfLEcSboqAEv3c4uuuAc8/7v5s43ASM147TJTmu91/fdzrbvxm4DTV0nDVl2V+zDDdlHGrMMrtpHXn3tHWvASJfrnrtuMYW1//nvW7LoeK35pvx+zVlfDd0PmvI7on0gaOQCWltCDzaHDh+xlv5PmzJR7vvLbXbT/ee/b1v/v+PWP1lvevVGd+myVebkt37DZlm5aq2pWWGpdq3VmcePGyXdunYxr7Vmzi03XSdFdRyM9aLl3/98wjq9vv/a624x/2sNn0cfutfUZPjvGydOwr+98jK59nc1zWq0mYweVHfs3G1KC9/74BPTFMaWnqhe+Of/WfMHaLftlkjzzp27rdM1Zhkau34aS0tnLBdrFtpMR3+7P1xfUyVTgwDOgggNXactvQyuWj7NMaEPDRBZaFNB2/fb1p5SKSm9HGrQNGd59SL65ReedpjnumgVXUswRkuALN/1xVffWqfRYFhT1kdTaODF4jdX/FKu/s3l5v9RI4fLuMlnSEZGpsN7GjNPWj26Ib9BXU7F/g0AtjRAYVujxVKi/eprJ84V2kTovHPPMP+PGDbY3PRrSbbWZtTalH1Sejms1Nf+80+H5uy1g916vNICCOsx8PUTx8A//fEaufLXl1qbYaxdt1EOHzkqubl5plbQNVdf0aDvtKWFYf94+u8SHh5mOo/QGzPLdc9tt9xpglrqrXc+tDbz0OOu5RwQHBzkcD4YPmyIVFZWyR13/9V6PnAWNFIv/ftpc55QWmCp689yjLbcEL9ic47Wzi60KYnF6adNtaud2tzfqPZ1nwYMx40daa1pfPaZp8vtt9xgDSpqQMQ/wL65vhZs1A5+NGY9NfQzbXl61jRdO5mGLldDacJ2DXRacn7pdaalN9tPPpst9997u9nGrrziUhM0Uh98+Jk1aPT1Nydqd1x84bnSWM6278ZuA01dJw1d9ubuww3ZRxqzDK7aRz765Avr/9pczrKPDxkyQMZOnGUNBjb292vO+mroftCU3xHtA0EjF9DSd1udO8Wag7xttTy9iNq8ZZv19RtvvS8ffnyiqVOmTdU/LYnSG2xt36q1DzSwMnXG+SYq3K1rsgzo39e0LdV2o87ExERZgxtK27FaaJRda3hoW13bnEtjRtdc2Fno9+vFjSUniuN3RNslnNSLJouc3Dzr/w1dhqasn6bQg6Y2KdNly83Nl8rKCtMTjIUeUJuzTk/FMrTE8jVFc3+z6KjIBgeMlJa2xXXuZGp4adVhraGjtZssF1O6v51hk3ugpdfHttSd1v81X4WFVpEfPLC/aQLWWr+R/janYv8GgD9cf5s57mVkZJnjs8XMGdPMsUZz6GjtRQvNT/fq6yduvjQPnsWGDZsdbra6JCfWG7xxRr9z774DTo+BWlgyfNhgOfz10TqPgQ35zq5dkqzHRs1nVLswwCIs7ETAIifH/vipzdy1MMRS81bPB3peONn5QGslWG6GzfdHhDl8h55XtLavxdnHg1i2LDmWmvsb2Zo4Yay5KdYaBxOmnGVqZHTv3tVc95191ukyfOhgaaymrqeG8Dye7+hkXL1c+hvaJom3va7UmsDaRF2DYBrc0G1Nt+cVq9aadaDfvXTZCjNtp04xphlb477bcftuyjbQ1HXSkGWPjIxo5j588n1ENXQZXLWPaEoF28+xBNaV5ozs26e3ucZtyu/XnPXV0P2gKdsw2geCRi7qPU0PTFrKpM1yjh5Lk2v+cLO89/YrJuGe0qixbeTYkj/GGY0CW2puaIHd5198bdqQZh9/aIKzt975QO68/Ua5/g9XO7w/wN8+R0tArYRvpWVlDvPjXyuvi1ZrPDG9Y0lBhM1NpLKtsWKrocvQlPXTWK+/+a48+MiT9U5TOydMc9ZpSyxDSy1fUzR3efWCoDG0FOTiC8+xlmRrbSMNPFlKic475wy7pNstvT60irxFQK3k5gGB/q36G52q/RsAUrefCKArPS5fftnF1lqc2kSkvult5eY1/1zh7Dv9/es5BjrpKbQh32mbw9KjVil9WOiJHCO1UsrZ5QO0NO+ui15bOBNhcwOsvL0cj9G1l8vSVNDp9zTzN7L11/vuMEFErYWtTar0ZlwfWuNYz4HaBKiu2lOuXk8NUfv3qesc7Orlst0GnV1XWq5ttGm/1qx+5LFnrLWNtEadFliq8889q9G1OZxt303ZBpq6Thqy7M3dhxuyjzRmGVy1j5SXnbh2VLWTcp8sz2ZDf7/Grq+G7gd1fWZ92zDaB+4EXNh7mpaoHTh4yCQY1Bu2ex94VL6d/aG52dX2ploacOxYTVKzh/56t1335rY0C7/SG+AH7r1d7r/nNpNMct++/SbD/wsv1fQi9drr/3MaNNKgleYfsdxA77OJPCutrVF7fvbu3S9jR4+wTqOvLWwj9Y3V0GVoyvppLE3WbKHVey+68BxzEaUlN9oOtz5NWactsQwttXzOeEj97ZtbY3kvufh8a0JPzdmjvbRZ/PKSC1p0fdSmNQotpZtaumObKLH29tHUeTrZb1CXU7V/A8DLLzwjcZ1jxdPTS8LDQx06etAaxsFBQVJQWGheP/1/D0mvnt2drrjayVibqvZ37t23X/r3S3F+DEw49cdAvSH79/HrIKU3pWedMcPcQP644Cd59p/150RpCK0FZbsONHltXbV7XfkbaXMybbKvN9sHDx4250etEaw34EqfLYGEk+V2bMp6aki+SNscVcU2aRK02bztttHU5WoIvSbW77MEfGyvG3QZYjuduG76xcXny9PPvWCalGsHMykpPa3jLr7gbHGFpmwDTV0nDVl2nZdTsQ83dBlctY/o92nNeEs+Uc3PZbtf1rX9tcQxryn7QVO3Ybi/xtdFQ510B7n91j9ZX2uzLE08ZnHGzBO9hOlwvVnTA4U+tGmTJoXW2kqWLPjarat276oBKM1jojel2v2ipd1pdk6uQ69Ilgjyi6+8Yf7Xnfn5F2q6h1UpvXuaLu9rz48eFLUGkFq9dr0sWLTEOu7MM2Y0+VdvzDI0dv00hq4H2wPixReda5rG6QF/6dKVJ31/U9Zpc5fh/IuvlHMuuNw86gpCuGr5nNGSF9vSq2PH0hymacnfzJmkpATT5tyyf2lvE5acBVqVuCXXR22Tj7eHV1przlKbSrv7ddbTS1PmqSG/QV1Oxf4NANqBgh7zB/Tv47RnUD3fn376VOvr2V9/b5o1WM4V2hxDm4u88+5HJ+11qKFqf+crr75pvUlb/NMyWWnT/MO2B9dTpXZNil9ecqHJO6LN4LVgzVXr4MwzbHqn/fcrsnnLiZ7EduzYJZ9/Mcflv9FTz/xbFiz62eQ30aYpkyaOlcsvvdA6XmtxWPgfT1pe1zmuKevpZJ9ZO8iwcfNW0yue5Vxp21NUU5erIfScrM36a5az3FqYqkYMH2KaKlloTiatTa10/n5eUtM0bfCg/nZNyZujKdtAU9dJQ5b9VO3DDV0GV+0jeq9o6bXWkojbkqLgw48+N5UPmqIp66sp+0FTt2G4P2oauZiW5uuOYmmPqr0iaTI1PUjcfOMfTFZ8bWOu7bM12VlSUqJpHnL0aJq1OYklgbYmU9OSBb1p7KxR9+Bg01uXpWtzbefsrEQlIb6zSdKrBx892WqzMKXT3n3HTdbpdH4WLvrZfKbegGvyXq09oVFvy3ecf+6Z1mRxTdGYZWjs+mkM/f6xY0ea3kvUVb+9Xrp162JqitTXNr8p69RVy7Bx0xZrrzDaBroll88ZXTa9CdBE1uYzf3eD6ZlME9+99doLplSjJX+z+mobWS6YLAFH2wTYLbU+arvhj1fL7DnfmZOy7j9jJ82S2JhoSUvPMBdylvXWnHlqyG9Ql1OxfwNAQ9x9+02yfPkqOXT4qCnFHzX+dElOSpCioiI5eizdWlr9f4/9zWUr9K7bbpRly1aZY6weQ8dMnGlu5vQYaDl3aA2CpuTYaS6taTB0yECT405deMlVJm+N5urTQhBXuUPXwfLVsv/AQVPz9OzzLzM3itq8Wl9rotzzzzvTpb+R5vP714uvmmbNnTvHSlBgoOm+20I7irFdD5rnUs9T6qJLf2N6BtVz3CcfvNmk9XSyz9TCmAnjRltre6SnZ8jk6edKaFiIqdnUu1cPc85sznI1hPZq9eIrr8trb9YEDSwd6eg61p5oa9PfSnultWVJiu0qjd0GmrpOGrrsp2IfbswyuGofueXP18kP8xeafK+aJH/MhJnmei47J8cEn7QXtqZo7Ppqyn7QnG0Y7o2aRi3gT9dfY9fm9dvjPT5pVeHPPnpLfnPlZabmRVl5uckDo9UhtatDTcb2xN8fsLYRvfmm68xNneZL0QOUfpaWuuh4PVFoLiVngoKC5O3XXzQ9L1mCG5pj4J/PPiZTbQ5+lvnRHjW0SqNWe7UEdLTmzL1331LndzRUY5ahseunsZ587G/mM5R+9p49+0zXrLa/V10au05dvQwNqW7dnOWry9/uv8sEzJSeEDTxtdaiKT8eDGrp38yZWadPt6u5pN3J6zZ2KtaHLS1Rf+eNl8yJVenJX0+0r7zwjPTs4bzKclPm6WS/QV1Oxf4NAA2hyVK//PR/ctmlF0lIcLApfNFk/HpdoDdremP25OOuCxipTp1i5fNP3pYLLzjbnIP0+KlNT/TmSYMI2hxFH63ln88+bu0gQteHztvVV11uzqeuojeM2l293ihqDiZddj0/a8Bo7JiR8ouLznX5b3T3nX82Tch8fLzNd+l1n+bf0fOQno8eefAeu+kfffg+iY2NNv/rzavlHFdVXdXk9XSyz9Qb9Oefe9w04zbTFBSYWhHvvfWy6fjEFcvVkLw0b7/+ggQGBFhvtrVg5+V/P23Nh2pLg2S2w319fOTcs2eJKzV2G2jqOmnosp+Kfbgxy+CqfURryunya8Jty/an3nj1ebvr28ZeOzd2fTVlP2jONgz35lHtrH0T6qW1PrbbJEDT5iW1E5dpLRHLqo2IiHDoJtucuA8dkYKCAomMCDe9FdXX3aHWXtAuvLUdtzYBsm2Hqr6b+6O1y269if1+zsfm/wMHD0tpSYl07ZpcbzJbjY5rlUi98Y0ID3foylbl5uWbnERKc/tYbpbVocNHrL1laWDFWZ6Uky1Dc9ZPQ+fTUp1S50VvnDXCXtMjQk2pgq4jS+lVXZ/T0HXakGWo6zv27N1neptT2uPBR++91uDlb+jyqS1bU621gTTQUTshn2U5Dhw4ZBL7WbZp/Yzay96c5W0sXT+Ward6supZR7vyxqyPuuatIfO8f/9BEwTSElD9TN1GsrNrqvnGREc77E+N+Y1O9hs0ZP5Oxf4NoGPQGxHbjg9Sevey9sLVEBq41psz7W1Ijyca2KhdMKLHSEszDS20qasnM9trrd69ezo0TbLQmjVaO0WD59o7kt5c1daQ79TmG/o5tafRY6xtb6JaW8ByjWN7voqPjzMFTrb02KpNYPS4GhQUaJo679t/wOFYXN/86flBaylYcgg6Wz7LObqwsNAUemhuleb8Riej35eWlm6WTW/A4+M713nNpN+ntaF0PVl+z4ED+tl9Z0PXU2M+07JOqo83TVLas5Vexyj9Ll3+pi5Xbc5+Q/08vYaoqKw0NaTqu9b74KPP5K57HjL/nznrNHnh+fo71jjZd9enMdtAQ9bJR598KXfc/Vfzv7bI+Pj91xu17M3dh0+2jzT2d3XFPmLJPVRVVW2uHysqKmXcpFnWpmH/eelZmTF9ykmXranrqyn7QXN/R7gvgkbtRF1BI7int//3odz/t8fEz89P5nz5fqO7GwYAAED78aeb7zK5dNQ7b7xo1wFHW+cs2NCRaS6l886ZZc1JpTXVH338GZMjU2nh608L5jgtzG1N/I4dFzmNgDZo8c/LzPMtN11HwAgAAKAD0homV159vWRmZlt7bNWmP+4UMIKjz7782uRS0lQCWvtQa3RrrSBLTqC/P3xfmwsYoWMjaAS0QbfdfL386Y+/Mz2QAQAAoOPR/IW2PbJqyoJ//+OJVp0nNN/dd/xZ/vPft2TDxi3WfECaV2nM6JGmwHjY0EGsZrQpNE9rJ1yVKwYAAABA69O8k5p/UvPEaN6c+nLTtGWNzcnTUWiuSc09pPmTNI9SXXnZ2gp+x46LoBEAAAAAAAAckN4cAAAAAAAADggaAQAAAAAAwAFBIwAAAAAAADggaNQIFZWVkpWTb54BAAA6Cq6BAADomAgaNUJefpF8MnuBeQYAAOgouAYCAKBjImgEAAAAAAAABwSNAAAAAAAA4ICgEQAAAAAAABwQNAIAAAAAAIADb8dBQMPl5ubJz0uWS+fOnWTY0EH1Tvv9Dz9KZUWlnDHrNIdxhw4fkc1btkl4WJj5HG9vNk0AAAAAAFoTd+ZokpycXHnksWdk0U9LpKK8QiZNHFdv0Oh/730sDz78f+Lt4+0QNHrplTfkuedfNu/ft/+ABAcFydtvvCixMdH8OgAAAAAAtBKap6FJioqLZdTIYbJo3lcyYEC/eqfdvmOXPP/v/8jvrv61w7hNm7fKE0/9U/79jyfk3bdelnnffmpqGT386FP8MgAAAAAAtCKCRmiS+LjOcsnF54m/v3+905WUlMif/nyX/PW+O6Rzp1iH8V989Y10SU6U6dMmmdf6eb++/Bfy3ffzpbi4mF8HAAAAAIBWQtAILerBR56UwYMGOM1jpLal7pSU3r3shqX07ill5eWye89+fh0AAAAAAFoJOY3QYr7+Zq4sWbpS5nz5fp3T5OcXSHxcJ7thERFh5jkvP59fBwAAAACAVkLQCC2ioqJC7r73IdOEbd6Pi8ywTZu3SUVFpXw5+1sZPLC/dOmSJL6+PlJYVGT33sLCmmZpfr6+/DoAAAAAALQSgkZoEdXV1TJ50jg5lpYu3//woxm2d+8BqaqqMq8jI8JN0KhLcpLs2r3H7r2HDh8xz8nJifw6AIAOray8QrbvOiDH0rOkpLRMQoICpVePRImLjWrQ+zOzcmVT6h7Jzy+SoEB/6du7i3Ru4HsBAADaXNCovLxC9h44Ijv2HDIXOt27xsv4kQPrfU92br58PXepVFVXyYVnTpbgoAC78QcOp8n6zTslL79QAvz9pG+vLtKnV5cWXpKOzcfHR/713BN2w958+33TU5rt8KmTx8snn31lAkUJ8XFm2Oyvv5NBA/tJdFTkKZ9vAADaki++XSzJ8Z2ke5d48fH2Mtc0s79fIiOG9JGhA+xzAtZ2JC1T5vywzFz3DBvUWw4fzZDZc5fK9InDpVtyzTkXAADArYJGC5asFW9vLxnYt7vMW7zaBJFOVqNl0dL1pgZLaVm5eW3rwKFj8t2CFTJiSF/p2TXBlNQtXLrOTDu4f88WXpr2bfac7816T0/PMD2dabOzgAB/mTF9SoM/Y9bM6TJ61HC56uob5IpfXWISY2vPaW+/8WKLzjsAAO7g/DMmio/3icu1xPhYKSwqkXUbd8jgfj3E07PuPk1+XrFR4jtHybiRA8zr+M7Rkl9QJEtWbpIuiZ3qfS86tty8AknddUAKCookODhQUnokSVhocGvPFgAXY1+HWwaNTps0Qjw8PMz/NX/rt2nbHikoLJJ+KV1l7cYdDuOXrdkiSfGdZMjxAFFwUIJkZefJmg3bpU/PZPHzI29OU839YYFUVlVKjx5dzWttdhYRHl5n0Khb1y5yxkz7XtT0gvWNV/8l73/4qWzYuEXCw0Pli0/fkb59ejd5vgAAaC9sA0YW2kRNz7+1C8psZeXkSXZOvgzuZ19A1rN7ouzce0iOHMuUhLiYFplnuLfUXftl8bINdtvXhi27ZOKYQZLSI7lV5w2A67Cvw22DRpaAUUPkFRTJqvXbZOLowVJUXOK02VpOboHDBZNWyV63eaccPJIuPbomuGS+O6J/PPP3Rk0/aeJY86hNA3dXXfFLF84ZAADtkxaU7d5/WLonx4uXl1ed02kTfxUZHmI3PDI8tGZ8dh5BIzitdaABI81/NWnsEOkcEylH07Nk0dJ1ZrjmwwoLCWLNAW6OfR1uHTRqjMXL1ktsdIT07JZgSkBqy8qp6bK9dnXa8LBgaylcDyFoBAAA2i6tFbRi7RYpL6+U3PxCU1N67Ij+9b6nuKTMPNeuUe1//HVxSWk97y21vt9C80KqispKKa+obPKyoG3bumOfqWE0ftRAc41dVV1tnseNHCjfL1ghW7fvleGD+7T2bAJoJvZ1+HjXXfDUboJG23bul6NpWXLRWZPrnKbUcsHka7+Y3t7epllUSWl5ne/lggkAgPatMRdMrUlrC40ZPkDKysvl4OE02bJ9r6kJMqSeRNiac9BZDW5PTw+78c5sSd0razZudzouJ7dQKokZtVuZ2TUFrl5ePpKRVfO/8vb2sY63HQ7APbGvIy42vH0HjYqKSmT5mi0yqF93a60hZ6rF0hbbscmbuYaqJxdAa1wwzf5+ses/FC3m7NMnsnYBoINcMLUmrS3UKaamhlBSfKxplqbN87t1ia+zqZCvT81NfkWFfYcilg5GLOOd0TyR+tm1axrNXbhSwsOCJCLMvskb2o+oiBA5fDRdKivLJTY62jpce96zjI+O5PcH3B37OhrDLYNGK9dtE18fbxk6oP5kyX6+NRdEtXtgq6yslMrKKvE9Pt4ZLphwMlw0AQBag/aCtn7zTsnKzq0zaBQaWjNce0uzbaavr834kMA6Pz/A3888nPH28nKbGlpovL69uphOZrTnvUljBpscRkfTMmXJyo2m1lrf3l35/YF2gH0d7T5opEmvtfnYu5/NtQ6rrKipZv3ZnEUSExUuZ0wfI+HHL5LyCgolJvpEaWJefs0FU321lLhgwslw0QwAaA2FhcXmua7AjuoUEyFeXp5y+FimJMbHWocfOpphalvHd6bnNDjSAKP2kqZJr+fMW2YdrgEjDSKRBBtoH9jX0e6DRtMnDndoi79l+z5ZvSFVzjxtrIQG15SeRUWGSWCAnxw4nGbXS5q+1pNfYtyJiygAAIC25Fh6luQXFEuPrvHW3ETa65le70RFhEpsdKR12vk/rTHTTB0/1Lz28faW/indTOLi3t0TJTwsRAoKi2Xj1l3Ss1uiyYkEOJPSI9nUMErduV8KCookODhQUnomEzAC2hn2dbTroJGzZmXex6tKa5M0y3i9eBo+KEV+WrFRuibFSdekzpKRlSvrNu8wVfK4YAIAAG1VSHCgpO46ID+v3GiuWbS5fXFxqfTqnigjhvSxJrVWWdl54mHzWo0c0kdKy8rl0zmLTKmy5iXSnEjaMxZQH61RNGpoX1YS0M6xr8Mtg0brNu2QDVt3mf/Lyitk997Dsv/QMfP6rNPGSlREWKM+r0+vLqZ72J+Wb5Aff64phUvpkSSjhvZrkfkHAABwhcAAf9MkaPzIgSbgo83NgoMCTA+wtU2dMMyh2w+dTt+vN/9ay0g/T2tgAwAAuG3QaECfbtKnZ7LTcfUmru7d1VS/1h5GHD+zu3loEErz0NTufhYAAKCt0mBRRHj9PVZpc7W6+Pv5mgcAAIDbB428vb3No/Hv87I2UauL9rgGAAAAAACAk3Os3wwAAAAAAIAOj6ARAAAAAAAAHBA0AgAAAAAAgAOCRgAAAAAAAHBA0AgAAAAAAAAOCBoBAAAAAADAAUEjAAAAAAAAOCBoBAAAAAAAAAcEjQAAAAAAAOCAoBEAAAAAAAAcEDQCAAAAAACAA4JGAAAAAAAAcEDQCAAAAAAAAA4IGgEAAAAAAMABQSMAAAAAAAA4IGgEAAAAAAAABwSNAAAAAAAA4ICgEQAAAAAAABwQNAIAAAAAAIADgkYAAAAAAABwQNAIAAAAAAAADggaAQAAAAAAwAFBIwAAAAAAADggaAQAAAAAAAAHBI0AAAAAAADggKARAAAAAAAAHBA0AgAAAAAAgAOCRgAAAAAAAHBA0AgAAAAAAAAOCBoBAAAAAADAAUEjAAAAAAAAOCBoBAAAAAAAAAcEjQAAAAAAAOCAoBEAAAAAAAAcEDQCAAAAAACAA4JGAAAAAAAAcEDQCAAAAAAAAA4IGgEAAAAAAMABQSMAAAAAAAC4V9CosrJSqqqqTjpddXV1gz6vodMBAAAAAAB0dN7SxhQUFsnOPYdkx56DkpNbIL26J8qUcUPtptFA0p79R2Tbzv2SkZVrXoeHBsuQAb2kW3Kcw2em7tov6zbtlPyCIvH385W+vbrI0IG9xdPT4xQuGQAAAAAAgPtoc0Gj1Ru2S4C/n0yfOEK++u4np9McTcuSH39eK0P695TpE4aJl7eXbN2+T35YtErGjxoo/Xp3tU67c89BWbxsvQk89eiaIMfSs+S7H1dIRWWljB7W7xQuGQAAAAAAgPtoc0GjyWOHnHQab28vmTl1lCTFx1qHDerXQw4eSZf1m3dag0baHG3lum3SvUuC9OyWaIZ1jo2Swf17yuoNqTKwbw8JDPBrwaUBAAAAAABwT206p1FdYqMj7AJGFsFBAVJYVGx9nZWTJwWFxZKcYD9tckInqaqqloNH0k7J/AIAAAAAALgbtwwaOaN5jQ4dSZfQ4CDrsOycAvMcFhJsN21oaM00mjMJAAAAAAAAbtA8ranWbtxhahVNGDXQOqysrNw8+/jYL6a3l5d4eXpKaWlZnZ9XXFIqxSX24/PyC82z5kMqr6h08RLA3bANAIB78/H2krZOr2227z4gmVm5ptl9RHioDOjTzeR/PJmFS9ZJbr5jAdnQAb0kKaFTC80xAABoT9pF0GjfwaOydtMO0+ysT68uDXpP9UnGb0ndK2s2bnc6Lie3UCqJGXV4GVn5HX4dAIA7i4sNl7bsyLFM+fqHpdI5NtLka9ReX/X65IMv9shZp42VmKj65z8jO1eCAvxlyICedsPDQu1rYAMAALTboJH2hjZ/8Rpz4TR94jDx8PCwjvPz8zHPZeU1NY4sKioqTXM2fz/fOj+3X0pX6dYl3qGm0dyFKyU8LEgiwkJcvixwL9GRbAMAgJZTXl4hwwb1NjWDLNc3SfGd5OPZC2T56i1y9unjTvoZ/v6+phMQAACADhc0ys7Nl+9+XCGhIYEya+oo8fa2X5yI8Jqb+py8ApM82yI3r8BuvDNa7buuqt/avM0dqrSjZbENAABaUkJctCQn2jcj8/LyNAVlBw4dY+UDAIAW57ZBI23j/828ZeLn5ytnTB9jnmuLDA+V0OBA2X/wmPTunmQdvvfAUZPTKDEu5hTPNQAAQMN4eTkvoMrKznN63ePMsbQsmTNvmWmYr9dFfXt3lbCQE52GAAAAuFXQSJuNVVWfyDikSR818bTSQI9Wz9YE1t/MXyZVVdVy5vSR4uvrY53GUhPIYtSwvvLDotWyOXWP9OyWKEfTsmTD1l0yuH9P8W9AEkkAAIC2YsfuA6am9bCBvU86rTbD75TYSWKjIqS0rEw2bdsjW7fvk9OnjJSEegrO6AwEAID2zacRLafaXNBIE1qv37TT+nrPviPmoc6dOV6io8Ll8LFMyc8vMsM+/XqRw2dcftEMa76ibsnxMn2iyPrNO2Xlum0S6O8nwwelyMC+3U/ZMgEAADRXdk6+/Lxyk8mrqIVfJzNzyki7pvvduyTIZ3MWyaJl6+WX50+3ywNpi85AAABo3+Ia0RlImwsaaUBHH/Xplhwn3S4/q8Gf2b1LvHkAAAC4o8KiYvn2x+Xi6+MtM00ex5OXENbO9aj5kHp1T5QVa7ea/I7hdXTqQWcgAACgzQaNAAAAcIJplj9vuZRXVMg5M8ZLSHBgk1ePn29Nz7LlFSea9ddGZyAAAMDC0/ofAAAA2pSKikr5bsEKKSgqljOmjqm359eGSMvIMc3StKMQAACAkyFoBAAA0AZphx/zFq+WjKxcOX3ySImJrjv/wI8/r5WFS9ZZX6dlZMuuvYdMhyIWu/Ydlu27D0hKj6QG974GAAA6NpqnAQAAtEG79x2W/YeOmc49Vq3fJrLefvxZp40zeYpUZlaueHieSGwdHBRgekr7ecVGCQoKME3cSkrLpH9KVxk1tO+pXhQAAOCmCBoBAAC0QQlx0XLO6ePqHO9pEySaMn6o2PaFFhjgL5PHDTHN23LzC8ywsNBg8fZqeBe7AAAABI0AAADaoPoSUtcWHRnmdLj2shYV4XwcAADAyZDTCAAAAAAAAA4IGgEAAAAAAMABQSMAAAAAAAA4IGgEAAAAAAAABwSNAAAAAAAA4ICgEQAAAAAAABwQNAIAAAAAAIADgkYAAAAAAABwQNAIAADABSorKyV1+07r6+rqann3/U/kL/c9LHO+mcs6BgAAboegEQAAgAtogOjd9z+2vn7z7fflnvsfkYWLlsiNt/xFvvjqG9YzAABwKwSNAAAAXODt/30oV/zqUuvr9z74VC679EJZsugb+b/H/iqvv/ke6xkAALgVgkYAAAAusHfvfunaJcn8n5aeYZqqXXTBOeb1jNOmyJ69+1jPAADArRA0AgAAcIGQkGA5cPCQ+X/e/EUSGBgggwf1N68LC4okMCCA9QwAANyKd2vPAAAAQHswZfIEufm2e+X0GVNNPqMZ06eIj4+PGbd+42YZOmRga88iAABAo1DTCAAAwAXuuetmiYmJlldfe0d69uhuXlv89/V35Orf/Ir1DAAA3Ao1jQAAAFwgKipSXn3pOafj3nnjJfHz82U9AwAAt0JNIwAAgBZGwAgAALgjahoBAAA0U2VlpVx06W/rv+jy9pKP33+ddQ0AANwGQSMAAIBm8vDwkMTEOLth1dUi6WnpsnHzVhkyeKDExkSzngEAgFshaAQAANBMnp6e8q/nnnA6LjMzS+7/22Py+2uuYj0DAAC3Qk4jAACAFk6QfctN18kDDz7GegYAAG6FoBEAAEALCwsPk63btrOeAQCAW6F5GgAAQAs6cuSYPPz3p6Rrl2TWMwAAcCsEjQAAAFzQe9r4yWc6DC8sKpL8/AIJCwuVl/79NOsZAAC4FYJGAAAALug97ZyzZzoMDwkOlqSkBJkxfYoEBwexngEAgFshaAQAAOCC3tPuvftW1iMAAGhXSIQNAADgguZpvfuPbvJ4AACAtoigEQAAQDNVV1ebwFBdKioqpbq6ivUMAADcCs3TAAAAmqGktFSqKqus/9dWXlYu8+YvksjICNYzAABwKwSNAAAAmqiiokL6DBhjfW37f21//MNvWc8AAMCtEDQCAABoIi8vL3nwgbukqqpKHv770/LX++5wmCYgIEB69ewuQ4cMZD0DAAC3QtAIAACgiTw8POSqK35pchqVlpaZ/wEAANoLEmEDAAC4IHh03e9/w3oEAADtCjWNAAAAXKSgoFCWLl8pBw4cNvmObHl6esg1V1/BugYAAG6jzQaNNDdAYVGJ+Hh7ib+/Xz3TVZueSvx8fUxegeZOBwAA0BQ7d+6WK6++QQ4fOWqtfaTN1pRee+iDoBEAAHAnbS5olJmVK6m7Dsie/UekqLhEenVPlCnjhjqddt2mHbJ+yy7x8vSQ8vJK6dktQcaOHCDetYJCDZ0OAACgqZ54+nkZOWKoSYw9fMx02bZxqRw5cky++OobSd2xUx5/5AFWLgAAcCttLqfRzj2HJDQkUC44c5L4+tQd09qcukdWb0iV0yYOl19fPNNMv+/gMVm6clOTpgMAAGiOtWs3yB23/UmCg4NMDSMfHx9JTk6UG2+4VmadPl0efORJVjAAAHArbS5oNHp4PxnQp7sEBtTdJE0vxNZu3CG9uiVJQlyMGRYeFixDBvSU1F37paCwuFHTAQAANLdZfVZ2jiTEx4m3t7f4+fma/EYWUyaNlx/mL2QlAwAAt9LmgkYNkZGVK8UlpZIQXxMIskiMixFNHXDwcFqjpgMAAGhu0EhzGOlDJSUmyE9LllvHb9i0RXzqqUENAADQFrnl1UtOboF5Dg0OtBseEhxknnPzChs1HQAAgCtdcvF5cusd98mixWeaYNFnX8yRc8+exUoGAABuxS2DRmXl5ea5domdl5eneZQeH9/Q6ZzRGkrFJWV2w/Lya4JMFZWVUl5R6aKlgbtiGwAA96Y9tLqK9oz26kvPWl9f/ZtfSVFRsXz19XdSUlIqF553ltx5+00u+z4AAIBTwS2DRpaq36aNWS2ax8gyvqHTObMlda+s2bjd6bic3EKpJGbU4WVk5Xf4dQAA7iwuNtxln6XXFFOnTLS+9vT0lJv+9HvzAAAAcFduGTTy9/M1z6Vl9jWFyisqpKqqWgKOj2/odM70S+kq3brEO9Q0mrtwpYSHBUlEWIjLlgfuKTqSbQAAUKOyslL6Dhon2zefyGPUmPEAAABtkVsGjSIjQs1zdm6BdIqJtA7PySmwG9/Q6ZwJ8PczD2e8vbxcWqUd7oltAABgW4NZA0N1qaiolOrqKlYYAABwK27Ze1p4aLBEhIfInn2H7Ybv2nfI3Mhr72iNmQ4AAKCpSkpLpex4rWb9v/YjP79Avvn2B4mMjGAlAwAAt9LmahppUzLLhVf18ZK5/IIi8zowwN8ksFZjh/eXb+Yvl1XrtknPbglyNC1LNqfulVFD+4qvr4/18xo6HQAAQGNVVFRInwFjrK9t/6/tj3/4LSsYAAC4lTYXNErduV82p+4x//v5+kh6Zo7MnrvEvJ45ZZS1SVlCXIycddpYWb9lp+zed1gCAvxk8tjB0rNbot3nNXQ6AACApvSa9uADd0lVVZU8/Pen5a/33eEwTUBAgPTq2V2GDhnY6M8vKi6VnXsOSkZWrmkCpzWo+/Xuas3beDI5uQWyZfteySsolKDAAOnbM1mio1yXABwAALRvbS5oNKhfD/NoiLhOUebhqukAAAAa22vaVVf80gR0SkvLzP+ucjQtU77+YZnERIVJ315dTI9sGgDatHW3KRCLigyr9/1pGdny9dyl0r1rvHn/4aMZ8vm3P8nMKSMlKaGTy+YTAAC0X20uaAQAAOCOwaNrf3eFpG7fKSm9e5phGkh674NPZeOmLTJx/Bg584wZjfrMsrIKU5A2YnCK+XzVNamzfPTVAlm2ZosJHNXnp+UbJDYmQiaPHWJed0nsbGou/bRio1x6Xqx4etZ8JlDbuo07ZO3mHVJZWWVSQwzt30uGDOzFigLaGW3ls2r9NnO+8fX1lhGD+0hKz+TWni20MW6ZCBsAAKCteff9T+Td9z+2vn7z7fflnvsfkYWLlsiNt/xFvvjqm0Z9XnznaBk5pI81YGRpDhcbHSEZmTn1vjcnN18ys/OkV63m+L26J0pBYbGpxQQ488EX82Tl+m3He/yrNs/6WocDaD++/O4nWbRsvSlMqKisNM/6WocDtggaAQAAuMDb//tQrvjVpdbXWsvosksvlCWLvpH/e+yv8vqb7zXq87y9vZwOz87JF7+T5DTSHEgqMjzEbnjU8dyQlvFA7RpGefk1HdAkJcTKZRfMMM9Kh6/btJMVBrSTGkbH0rPN/316dZFfXzTTPCsdnrrrQCvPIdoSmqcBAAC4wN69+6VrlyTzf1p6hmmq9uhD95rXM06bIg89+lSzv2PX3kOSlZMnQwbUNIGri5YYK39/P7vh/n41r4tLasY7o+OKS8rshuXlF5pnLY0ur6hs8vyjbVu7aYd5ToyLkekTR5j/9XnuwhVy6EiGrN24Xfr36dbKcwmguVau22aee/dIkjHD+5v/9bmyslJ27D4oK9dule5d4lnR7ZhPHQVTzhA0AgAAcIGQkGA5cPCQdOvaRebNXySBgQEyeFDNxXhhQZEEBgQ06/Nz8gpMPqKw0CAZMqD+/DLam5uybdqmLHmMLOOd2ZK6V9Zs3O58HnILpZKYUbulN4yqT6+ukpGVbx3et1c3EzTS8bbDAbinsrJy89w1Kd5un+6WnGCCRjqefb19i4tteE+qBI0AAABcYMrkCXLzbffK6TOmmnxGM6ZPER8fHzNu/cbNMnTIwCZ/dlFxiXw7f7l4eXrKrKmjxce7/ks4Hx9va80gW+XlFXbjnemX0lW61Sph1ppGcxeulPCwIIkIs2/yhvZDc2bpNrNtx145bfJI6/C5C7dax0dH8vsD7s7X18fUKt174LCMG3ni3PTzig3W8ezrsCBoBAAA4AL33HWz3HXvQ/Lqa+9I3z69zWuL/77+jtx1+01N+lwt8dWAUWlZuZw9Y6yEhgSd9D2WaQoKiiTMZnpNgm3GB9f9GQH+fubhjLeXV6OqtMO9DB3QyyS9PngkXX5YtEomjh4si5evN7WMzPiBvfn9gXZAO1nQpNfbdx0wNVJHDu4rK9dvNbWMzPihfdnXYUXQCAAAwAWioiLl1ZeeczrunTdeOmnyame0OdD3C1dKbl6hnHnaGImKCGvQ+zrFRJpaSUeOZUpCXIx1+OFjGdae2YDahgzsJam795uk1wcPp8l7n821C0SeLJcWAPeQ0jNZUnfVJMPWpNj6sOgcEykpPWry8wGK3tMAAABaWFMCRtrd+Y8/rzUX9TMmjzCBoLpoifHi5TXNCpSvj7fpCWfLjr2SV1BkTY69cetuk9w0OKh5+ZXQfl163nQZOaSv6b1PayDos76+9LxprT1rAFzo3JkTZNLYIRIY4Gdqkeqzvj5n5njWM+xQ0wgAAKAN2r3vsOzZf8Q0FVu/ZZd52Dpj2mjx9Kwp/0tLzxaP40muLUYP6yslJaXyyewFEhURKtk5+RIbHSETRw86pcsB96M1iqhVBLR/WqOIWkU4GYJGAAAAbVBcbJScOX1MneNte0abOGaw1OoozSQtnjZxuMljlF9YJEEB/g3KhwQAAGBB0AgAAKANCgz0N4+G6BQTUec4bYpGczQAANAU5DQCAAAAAACAA4JGAAAALlZaWiYZmVmsVwAA4NYIGgEAALjIvPmL5LyLfi19B42V0eNPtw6/7c4H5NDhI6xnAADgVggaAQAAuMC3382TP9xwmyQnJcpf77vDbtyQwQPkv6//j/UMAADcCkEjAAAAF3j2ny/J3+6/U55/7nH51WUX240bO2akzP1hAesZAAC4FYJGAAAALrBz1x658PyznY7rFBsj6RmZrGcAAOBWCBoBAAC4QGBAgKSnZzgdt3vPPomKDGc9AwAAt0LQCAAAwAUmjB8tDz/2tBQXF9sN19dPPv28TJo4nvUMAADcindrzwAAAEB7cMdtN8qFl1wlU2acJ+PGjJLq6mq594FHZcGin6W8vFye/r+HWnsWAQAAGoWaRgAAAC7QvVsX+erT/8n4saNk8U9LTdBozrc/yOiRw+Tzj9+WTp1iWc8AAMCtUNMIAADARZKSEuSZJx9hfQIAgHaBmkYAAAAAAABwQNAIAADABX5eslxuuf0+p+Ouv/EOWbV6HesZAAC4FYJGAAAALvDUs/+WK399qdNxOvzZf77IegYAAG6FoBEAAIALbN6SKn379nY6rm/fFNm4aSvrGQAAuBWCRgAAAC4QEOAv+/cfdDpu37794ufnx3oGAABuhaARAACAC0wYN1oefvQpKSoqthteUFAojzz2jIwfO4r1DAAA3Ip3a88AAABAe3DbLTfI+RdfIZOmnS2TJ42XmJgoSUvPkAULfjLjn37iodaeRQAAgEYhaAQAAOAC3bt1kS8+eVueee5Fmb9gseTk5EpkRLgJIN168/WSlBjPegYAAG6FoBEAAICLdOvaRZ5/7nHWJwAAaBfIaQQAAAAAAAAH1DQCAABwgerqavn2u3nyyeez5eChw5KfX2B/0eXlLQvnfcm6BgAAboOgEQAAgAs8/ewL8q8XX5XhwwbL4IH9JTAw0G68lxcVvAEAgHshaAQAAOACb7/7oTz31KNy/nlnsj4BAEC7QJEXAACAC5SWlsnM06eyLgEAQLtB0AgAAMAFZkyfLKvXrGddAgCAdoOgEQAAgAs89sj98vU3P8jHn34paekZJjE2AACAOyOnEQAAQDNVVFTIgKETzP/vffCJ02m8vLxk17ZVrGsAAOA23D5oVFRcIoVFJRLg7ytBgQHi4eHhdLqS0jLJLyiSAH8/CQ4KOOXzCQAA2i8NCN1z1y31TuPp6fwaBQAAoK1y26BRTm6BLFq2TrKy8yQ0JEgKiorF389XJo4eJHGdoq3TadXwJSs3Sequ/RIRFiK5+YXSOSZSpk4YJn6+Pq26DAAAoH3QQqvfX3Nla88GAABA28lpVF5eLnPnLbB7/eQz/5LLrvi9PPf8y1JVVSUt5YdFq6S0rFx+ecFpcuFZk+XyC2dIWEiwfL+wZrjF2o07ZPvuA3L+rIlywZmT5NLzpklOXoEsWrquxeYNAAAAAACgQ9c0evPt9yU9PVNmTJ9iXr/+5nvywkuvyehRw+X1N98Vby8v+dP114irFZeUSnZuvgwflGJqFyn9rj49k2X/oWOSmZUr8Z2jTdBq47bdktIjWSIjQs102jxtSP+esnj5BsnNK5Cw0GCXzx8AAOiYCgoKZenylXLgwGGT56h287Rrrr6i1eYNAADglAaNPv38a3nmyYdPvP5itlx1xS/lb/ffKStWrpHb7/priwSNfH18xMfHWwqLiu2GaxM1FRTob57TM3OkrKxc4jpF2U2nASV16GgGQSMAAOASO3fuliuvvkEOHzlqbbJm6UFNcx7pg6ARAADoMM3TDh46LPHxnc3/GZlZsm3bDjlz1mnm9fBhg+Xo0WMt0t2sl5enyV20a99hWbNhuxw8ki6bU/eY/7X2kaX2UG5eoXkOCQ60e78lEXZefs14AACA5nri6edl5Iihsm7lAhMg2r55uSya95XcdvP1csas6bJm+XxWMgAA6Dg1jaKjo0ygaNTIYfLd9/MlMDBABg8aYMZl5+RKaGhInb2ZNZfWFuqS2EnWb9kpYZoIu7DYNEHr1iXOOk358Wrh3t5edu/19PQ0gaeycvtq47WbwBWXlNkNswSZKiorpbyi0sVLBHfDNgAA7s2n1vVBc61du0E+/+RtCQ4OMoVmPj4+kpycKDfecK3MnvO9PPjIk/Lk439z6XcCAAC02aDRWbNOkxtvuVumTBovc779Qc6YeZr4Hc8xtGr1OpPbqCVUVlbJ7LlLxMfbWy674DST16iyslIWLFknX377k1x09hRTm8gSsHJW20mH1df17ZbUvbJm43an43JyC6WSmFGHl5GV3+HXAQC4s7jYcJd9luZRzMrOkYT4OHP9oddDmt9IA0hKr5Xu/9tjLvs+AACANh80uvGG35taN8uWr5JZp0+Xe+++xTruiy/nyB+u/Y20hENH0iUnt0BOnzLKmghbq4GPHtZPdu87LDt2H5ChA3ubpNeqpNS+xpDmOaqqqraOd6ZfSlfp1iXeoabR3IUrJTwsSCLCQlpk2eA+oiPZBgAAJ4JGGiyyFFglJSbIT0uWy6zTp5nXGzZtMfkYAQAA3Emzrl58fX3krttvcjruxX89JS2luLTUPAf41wSMLPyPv7YEiaIjw8xzdna+xMWeSIadlZNXMz6iZrwzGlCqK6ikPbW5uko73A/bAACgLpdcfJ7cesd9smjxmSZY9NkXc+Tcs2exwgAAgFvxdlXp2p69+yUnJ0eGDR3cYnmMLCLDQ83z4WOZEhsdYR1++EiG3XhNgK3jd+49aGoOWezYfVD8/HwkIa6mFzUAAIDm0BrPr770rPX11b/5lRQVFctXX38nJSWlcuF5Z8mddRS0AQAAtNug0bvvfyLP/ONFycjINK+3bVom/n5+cv2Nd8jvr7lKhgyuSYztSjFR4dKja4Ks2ZAqVZVVEhsdLrn5hab3NK1d1KNbgnXacSMHyOzvl8jCpeukZ9cEOZqWJam7DsjksUPE25tq4gAAoPm0wGzqlIl2nW7c9KffmwcAAIC78mzOmz/+9Et56NGn5OILz5E3X/u3+Pr4WMedd+6Z8p//viUtZdqEYTJ1/DDJLyySDVt2ybH0bBk+OEXOmzXBNB+zDTCdf+ZEc/G2bvNOE1w6c/oY6dU9scXmDQAAAAAAwN01q6rNq6+/I39/+F658PyzawbYNEsbNnSQ3H7nA9KSuiXHmcfJaNLqiaMHtei8AAAAqN179snBg4eloKDAboVoAdasmdNZSQAAoGMEjQ4eOGy6kHUmPCxUCouKpLKy0rTzBwAAaM+279glt9/1gGzYuMXpeL0e2rVt1SmfLwAAgFYJGoVHhMmevfskMvJEMmqLrdu2S3R0JAEjAADQIdxy+33i4+MjL/37aenWNVkCAwPtxrdwPyEAAABtK2h02rTJcv/fHpeXX3hGkhLjrcMzMrPkrw89IaefNtUV8wgAANDmpW7fKUsWfSOxMfTOCgAA2odmJcK++cY/SHl5uUw//Xy54BdXSkVFhVzz+z/LlOnnSm5untx28/Wum1MAAIA2rGfPblJZUdnaswEAANBGmqeFh8nnH78tb7z1nixY9LMkJyVIfkGB/Paqy+Sa310pYaEhrptTAACANuxv990pf3/iWXn04XslNMR110BZ2XmyY89B89wlsbP0S+naoPf9vGKj5OUXOgwf2K+HJMbFuGz+AABA+9WsoJEKCgqUG/74O/MAAADoqMaMHmE6AJl2+gXSs0c3iYqKtMtj5OXpJf945u+N+swfFq2S3LwC6dEtUQ4dTZfQkKAGv/doepYE+PmaIJGtiLDgRs0DAADouJoVNNKmaVrDaMb0KdbXzz3/sqxZu0FGjxouN91wreleFgAAoL379rt5ctOt94ivj49kZWVLSUmp3Xhv78b3JjtmeH8JDgow/69at63R7w8M9Jek+NhGvw8AAKDZQaM3335f0tMzrUGj1998T1546TUTMHr9zXfF28tL/nT9NaxpAADQ7j306FNy/XVXy/V/uFp8fX1c8pmWgBEAAEBraFY1oE8//1ouOP+sE6+/mC1XXfFLef+d/8h/XnxWPvz4C1fMIwAAQJuXmZUtv//dlS4LGLlCekaOzF240jxWr0+VgsLi1p4lAADQUWoaHTx0WOLjO5v/MzKzZNu2HfLQA3eb18OHDZajR49JdXW1eNg26AcAAGiHpk2ZIJs2b5VRI4dJW+Dr4y3RncIlNjpcSsvKZUvqXtm4bbfMmjpKOsdG1fm+4pJSKS4psxtmSahdUVkp5fQQBwCAW/NpRJP5ZgWNoqOjTKBIL46++36+BAYGyOBBA8y47JxcCQ0NIWAEAAA6hMf//ld54sl/yJEjx2TcuFESbRJht17B2cwpo+xqPfXuniSffL1QFi5dL5ecO7XOedPg0pqN252Oy8ktlMrKFptlAABwCsTFhp+aoNFZs06TG2+5W6ZMGi9zvv1Bzph5mvj5+Zpxq1avM7mNAAAA2ruKigoZPHyS+f/d9z9xOo2Xl5fs2rbqlM1T7WZymog7pUeSrFy3TXLzCyU81Hkvav1Sukq3LvEONY20iVt4WJBEhIW06HwDAIC2o1lBoxtv+L2pprxs+SqZdfp0uffuW6zjvvhyjvzh2t+4Yh4BAADaNA0I3XPXiesgZzw9W7+5vv/xwr3ysoo6pwnw9zMPZ7STk8ZUaQcAAB04aKQlWHfdfpPTcS/+66nmfDQAAIDb0KZev7/mSmnrMrJyRVulhYQEtvasAACA9t57GgAAAEQqKytl4LCJrbYqFi/fID+v2Gh9nZGZI/sOHrObZv/BY5K6a7/06JporXEEAADQYjWNlCZ71HxG+w8ckPJyx6rOD/31bvH2bvbXAAAAtOnmaX5+fpKfXyAhIc5zBTXF1u17Ze+Bo+Z/7ZF2/6FjkjevpieziWMGS3BQgPn/WFqWeNg0f/P395N1m3fK4mXrJTQkUEpKyyS/oEh6dUuScSP7u2z+AABA+9asaM6mzdvksl9fKz4+3qa3tPj4zpKeliFl5eWSlJggPr4+UlVV7bq5BQAAaKN+ddnF8tEnX8rVv7ncZZ8Z1ylKgoNrmpIN6Nvdbpyf34lE1xNGDzLNziw0mHTapBFSWlom2bkFZlhkeIhDcmwAAIAWCxo9988X5bxzz5BHHrxHevcfLfO++0x8fXzk2+/myXsffCp/f+R+Lk4AAEC7p7WAhgweIG+/86GsWLlaJk8aLzHRUeLtc+JSy9PDUyZNHNuozw0PCzGPk+kcG+l0uPZqW9c4AACAFg0abdm6XR649w5rAsjqqirx9PSUM8+YIXFxneXuex+U/735cnO+AgAAwC1yGv32mhutr7/9fr7TJmy7tq06xXMGAADQSkGjzKxsiY2NNv+Hh4dKVnaOJATUtK0fNLCfrFy1zpS8aUAJAACgvdL8jd99/VG903A9BAAAOlTQSANClgb0Xbskyzff/iDXXH2Feb3op6USFBTIBRIAAOgQUnr3bO1ZAAAAcCmXdWv22ysvkz/eeIf8MH+RBPj7y09LlslVV/zSVR8PAADgFjT59LbUHZKTmyuREeGS0rsXOR4BAEDHCxp9O/tD8fP1Nf/PmjldXnz+SfnsizlSWFgod9x6o0t7DwEAAGjrXn39Hfnnv16RvLx867CIiHC57ebr5deX/6JV5w0AAOCUBo26d+ti91oDR/oAAADoaN59/xN57Inn5OwzT5dpUydKdFSkZGRkyffzFsgDDz4uwUFBcv55Z7b2bAIAAJy65mlFRcUSGBjQ4OEAAADttZbRA/fe7tA8/7xzz5BXXn1LXvnvWwSNAACAW/FszpvnzV8kN91yt9Nx9/31Ufn8iznN+XgAAAC3sW/fAbnognOcjrvogrNl7779p3yeAAAAWi1o9MLLr8n11/3O6bjr/3C1vPjK6835eAAAALehvcYeOHjI6biDh45IcHDQKZ8nAACAVgsa7di5W7p2SXI6Ljk5SXbv2StVVVXN+QoAAAC3MG3KRLnl9vtk85ZUu+GbNm+T2+96QKZPndRq8wYAAHDKcxpFhIfL1m3bZfy40Q7jtqVul6CgIPH0bFZcCgAAwC3cc9fN8stfXytnnfdL6dQpRqIiIyUzK0uOHUuXlN495Y5b/9TaswgAAHDqgkbTp02SBx58Ql575R/SxabG0aHDR+Se+x81PYcAAAB0BLGxMTL78/fk089ny4qVayQnN0969ewuY0aPkAvOP0v8/fxaexYBAABOXdDophuulYWLlsj0WRfKoIH9pFNsjGRkZsn6DZslNjZa7r79puZ8PAAAQJtVXV0tP8xfKDOmT7EO055jf335L8wDAADA3TWr7Vh4eJh8/vFbcuP115jX2lStvLxC/nDNlTL7s3dNiRsAAEB7VFlZKdfdcLv1/6Gjprb2LAEAALSdmkYqJCRY/nzjH8wDAACgo/D29hYfHx8pLCwSPz9fycvLb+1ZAgAAaFtBIwAAgI5q4IC+8ptr/iT9+6aYHmMffOTJOqf18vKU+/5y2ymdPwAAgOYgaAQAANBEjz18nzz6+LMyf8FPJsfR9z/8WPdFl5c3QSMAAOBWCBoBAAA0Uc+e3eX1V5+XiooKSRkwRn5eMId1CQAA2o1mJcIGAACANj3zkv+9+RKrAgAAtCsEjQAAAJpJ8xld+8dbWI8AAKBdIWgEAADggppGfn5+kp9fwLoEAADtBkEjAAAAF/jVZRfLR598yboEAADthnd7qA6enpkjJaVlEhURJsFBAU6ny8rJl7z8Agnw95fY6HDx8PA45fMKAADaJ+05bcjgAfL2Ox/KipWrZfKk8RITHSXePicutTw9PGXSxLGtOp8AAAAdJmh08Ei6LFq6Tvz8fCU0OFCyc7dIYlysjBs5wDpNRWWlzF+8Wo6mZUnn2EjJzM4TP18fmTl1tAQF+rfq/AMAgPahsrJSfnvNjdbX334/32kTtl3bVp3iOQMAAOiAQaP0jBz5/scVMmHMIOndPclayrd732G76Vau3WYCRheeNdnUQiqvqJAvv/1ZFixZK2edRmkfAABoPm9vb/nu64/qnYZazgAAwN24bdBo6erNkhgfYw0YWS7GenRNsL6uqKiUbTv2Sf8+3azN1ny8vWVQvx4maKS1jqIiQltl/gEAQPuS0rtna88CAACAS7llIuzComI5lp4lXZPjpLikVPYdOCoHDqdJaVm53XTpmdmmeVqnmEi74XGdal4fOZZxSucbAAC0f+kZmfLDvIXy6eezrcNKS8tadZ4AAAA6TE2jzKw883zgUJosXblJYqLDpai4VPILikw+o5QeyWZ8XkGReQ4Oss9dFBQYIJoHW6cHAABwVV6jhx99St5572OpqKgwOYwuPP9sM+6K31wnd91xkwwfNoSVDQAA3IZbBo0sNYr2Hjgq582aINGRYeb1Tys2yOJlGyQmMlwiI0KlvLzSDPf28rJ7vzZj8/T0tI53RmswFZfYlwrm5ReaZ629VF5R93vRMbANAIB78/G2vz5orn88/7LM+e4HefzR+2X4sMFy2qyLrON+d/UV8upr7xA0AgAAbsUtg0aeXjWt6romdbYGjNTwQSmydfs+2bn3kIyKCBUvTw8zvKqq2uEzdJjX8c9xZkvqXlmzcbvTcTm5hVJJzKjDy8jK7/DrAADcWVxsuEs/74OPP5fnn31cRo8abmoa2Ro4oK/cc9/DLv0+AACAluaWQaOggJrmZqEhQXbDA/z9xMfHWwoKi83rwMAAa62hCAmxTldSWmZ6WgsM8KvzO/qldJVuXeIdahrNXbhSwsOCJCLsxOehY4qOZBsAAJyQnp4pgwcPcLpKAvz9pbikhNUFAADcilsGjbTHMy9PT4ekkpWVVaZkz8/Xx7yOOV4LKTM7V+I7R1uny8zKNc/RUXWXMGoASh/OaHM3V1dph/thGwAA2IqNiZYNGzbLqJHDHFbMytVrJSnxRA+vAAAA7sAte0/T2kTdkuNk38GjdtW/d+87JNXVIknxseZ1YKC/JMRFy/ZdB+2aqG3buV+CAv0lvtOJQBIAAEBznHP2TLnrngdlzdoNdsM3btoiDz36lJx7zixWMAAAcCtuWdNIjR7WT778/mf56vslktIzWYqKS2TDll3Su0eSJCd2sk43buRA+eq7n+W7BculR5cEOZqWZRJonz5lZL05jQAAABrjlpv+KOvWb5ILL7lKoiIjTG9qE6aeJQcPHpZJE8fJ7393JSsUAAC4FbcNGmktogvPnCSpu/ZLWka2eHt7yfSJw6VLYme76cJDg+Wisyeb2kWHj2WYJmcXnjWJnEQAAMDF1yYB8t7br8jXc+bKwp+WSGZmlkSEh8sdt/xJzj7rdPGq1ZsrAABAW+e2QSPl6+sjA/v2OOl0gQH+Mmxg71MyTwAAoOPy9vaW8849wzwAAADcnVsHjQAAANqaefMXyZp1GyQtLUM6d4qR4cOHyJRJ41t7tgAAABqNoBEAAIALpKVnyLXX3SLrN2ySkJBgk9coMzNbnn/hVRk1Yqi8/MIzEhFRd8+tAAAAbQ2ZoAEAAFzg/r8+JsXFxfLJh2/IxjWLZcEPX8rGtYvlg/+9KukZmfLgI0+yngEAgFuhphEAAIALLFj0s3zxydvSJ6WX3fDRo4bLs089KldefT3rGQAAuBVqGgEAALiAv7+fJCbEOx2XmBgvAQH+rGcAAOBWCBoBAAC4wK8v/4V89MkXTsd98NFncuWvLmU9AwAAt0LzNAAAgGaqrq6WEcOHyFtvfyArVq6RKZPHS6RJhJ0l835cbMZrUEmbsClPD0+ZNHEs6x0AALRpBI0AAACaqbKyUn57zY3W1998N89hmh/mLbT+7+XlJbu2rWK9AwCANo2gEQAAQHMvqLy95buvP2rw9B4eHqxzAADQ5hE0AgAAcIGU3j1ZjwAAoF0haAQAANCGZefmy849ByUzO0+SEzpJv95dG/zevPxC2bpjn+QXFElQoL+k9EyWyPDQFp1fAADQftB7GgAcN//HxfLm2+9LVla2wzrZsjVVPv18tnz+xRzZsWMX6wzAKTFv8Wr5YdEq8fbykoOH0yQ7J7/B783IzJFPv14ohUUl0r1LvFRWVslncxbLoSPpLTrPAACg/aCmEQCIyMpVa+XPt94j+QUFMmL4UNPrkdIej2676wGZO3eBTJ82SSoqK+Qv9z8sl1x8njz4wN2sOwAtatTQvhISHGj+X71he6Pe+9OKjRIVGSbTJgwzrzVwVFxSKouXb5BLzp0mnp7kVQIAAPWjphGADi8nJ1duveN+ufP2Ez0fWWzesk0+/Wy2/OelZ+W5px+Vfz33hDz71KPy5tsfyIEDhzr8ugPQsiwBo8bKyS2Q9Mwc6d09yW547x5JpqnasfQsF80hAABoz6hpBKDDu/OeB+WC88+SYUMHO6wL7RZbhYaGWIeFhYWano88KKUH0EZlZOWY58gI+/xFURFh1vFxnaJaZd7ak6z8fMkqKGjt2UAzRAYHS2TIiXM8UBv7uftjP28egkYAOjTNYZSWliEv/PP/JHW7Y66ivn16y803XSe33fmAnHXGDKmsrJSvv5kr999zuyQmxLfKPANoO7QJ667de8Xb20u6dkm2DnvxldftpvMQD/ndb38tvr4+p2S+iopLzXOAv6/dcMtry3hntAlbcUmZQ0JtVVFZKeUVlS0wx+7njffnyIpDO2XlEfLcubOR8T3khVtvau3ZQBvFft4+sJ878vGuKRhvCIJGADosTW79j+dflk8/elO8ves+HAYHBZpcR9t37DJBo+LiEgkM9D+l8wqgbVr001K56uob5NmnHrEGjfQ48X9PPe8wbdcuSXLGrNNOyXxVVVWZZw8P+0wEnp6eduOd2ZK6V9ZsdJ4/KSe3UCqJGaGdychqeIJ5AO6J/dxeXGy4NBRBIwAd1sN/f1r69+sjCxctkYWyRI4eSzPDZ8/5zvSgNnHCGFm0eKk8+vizMvvz96R/vxQzftnyVfLLX18rffukyOBB/Vt5KQC0pg8//kIuuuAcueC8sxyati5d/K1drcbPv/zmlAWNfHy8rTWDbFlqCfnUEyjvl9JVunWJd6hpNHfhSgkPC5KIMJryqN/88kwp++4bahq5uSH9e0l0JNs0nGM/bx/Yz5uHoBGADmvKpPFy6PAR07REZWVnm+cDBw9JWnpNl9Tr1m+UmJgoa8BIjRk9Qvz9/WXtug0EjYAObvPmrfKvfzzhdFxsTLT1/wvOPVOu+t0Np2y+Qo8n0C4oLJawkCDr8ILCoprxNsNqC/D3Mw9nvL28GlWlvb27bNJkmTlseGvPBpqZ64RtGvVhP3d/7OfNQ9AIQIf1h2uvsnu9eUuqzP76e/nj76+2BomSkhIkMzNbDh85KvFxnc2wHTt2SUlJiSQnJbbKfANoO44eS5fevXo6NAGbNXO63bC4uM6SeTw59anQKSbSzMfRY5mS0PlE8OrIscya+SEJtktoAmWSKAPtG/s5OjqCRgBQj7POOF3eeOt9ueTy38kvLjxXKquq5IOPPpNxY0fJ5EnjWHdAB6e5gSoqKuwSXGuw5t+1ah+Vlpa2aBLsn1dsNL06jhs5wLzW7+rTM1m2bN8rKT2TJTgoQEpKy2Tj1t3SLTlOQo7XRAIAAKgPQSMAOC4qMkKu/PWl5tlCb7w++eB1+ea7eZKaulM8PT3kwfvvktNnTLUmlAXQcSUnJciq1etk0sSx9U63as06kwi7sbbt2Cd7Dx619sq2/9Axyf+xponZhFGDTDDIUoPIw9PD7r2jh/WTwuIS+Xj2AomJCpfM7FyJDA+ViaMHNXo+AABAx0TQCACO69w5Vh76692OB0pvbznnrJnmAQC2Zpw2RZ5+7gUZNWqY+Ps5zwNUWFgkz/zjRTlr1owmNTMLCKjprbFvr6524/z8TtRcGj9qoIh9zEi8vb3k9MkjJTe/UPILiiQowF8iwkn4CwAAGo6gEQAAQBNd89tfyyeffSUXXHyl3Hj9NTJ+3GgJCws147Kzc+SnJcvlH8+/LGVl5fKbKy9r9OdrkKchgZ76chRpImzbZNgAAAANRdAIAACgiaKiIuWdN16S6/50u1x/051mmPauqE3JNI+R6tOnl/z35X9ISEgw6xkAALgVgkYAmmXIzX9iDbqJdc/9q7VnAWiXevfqId9//ZH8MG+hLFm2Uo4eSzPD4zt3kvHjR8v0qZPIgQYAANwSQSMAAIDmXlB5e8usmdPNAwAAoL2g6x8AAAAXKi4uNg8AAAB3R00jAACAZlq9dr28+t+3TfO03Nw8MywiIlzGjR0lf7jmShk0sD/rGAAAuB2CRgAAAM3w8n/elCee+qf4+flK3z69JSE+TqqlWg4dOmLyHH373Tz52/13yhW/uoT1DAAA3ApBIwAAgCZa/NMyEzC69ndXmhpFkZERduPTMzLlpVdel78+9IQJKI0YPoR1DQAA3AZBIwAAgCZ65b9vyQ3XXS233XKD0/Ex0VFy/z23i5enl5mWoBEAAHAnJMIGAABoonXrNsoVv770pNP9+vJfyJq1G1jPAADArRA0AgAAaKKi4mKJqtUkzZno6CgpLCxkPQMAALdC0AgAAKCJOsXGyJatqSedbvOWbdK5UyzrGQAAuBWCRgAAAE00bepEefjvT0tJSUmd0xQVFcujjz9rpgUAAHAnBI0AAACa6E9/vEZ27doj5174a/ly9reSnZ1jHZeZmSWffzFHzr7gcjl85Ij88Q9Xs54BAIBbofc0AACAJurcOVbeefMlueHPd8lNt/zFDPP395fq6mopLS01r3v17C7/e+MliY6KZD0DAAC3QtAIAACgGfr26S3ff/2R/DB/kSxdtkKOHE0zw+M7d5Jx40bJ9KmTxMvLi3UMAADcDkEjAACA5l5QeXvLrNOnmQcAAEB70S5yGlVVVcnGrbtlw5ZdUlZW7mR8tRw4nCabU/fI7n2HpbyiolXmEwAAtC+HjxyVa/94i7z59vt1TvPqa2/L76+/VdIzMk/pvAEAADRXuwgard+8U5at3izL12yR0lpBIw0iffndT/Lzio2Sk1tgpv34qwXmfwAAgOZ4650P5MCBQ3LpJRfUOc3lv7xYdu3aK+++9zErGwAAuBW3Dxrl5ObL2k07JDmhk9PxS1dvlqLiErngzEkyftRAOW/WBAkK9Jcff15jklQCAAA01YKFP8tdt98o/n5+dU4TGBggd9x6g8xf8BMrGgAAuBW3Dhpp0GfRsvXSLTle4jpFOYzXWkY79xySlB7J4ufrY4Z5enrKwL7dJSMrV9IzT3SLCwAA0FgHDx6WMaNHnHQ6nebgwUOsYAAA4FbcOmikOYqycwtkzPB+TsdrUEjzHcXGRNgNj42u6fL2aFrWKZlPAADQPpWVlYmH58kvpzw8PJzmXQQAAGjL3DZolF9QJCvXbZORg/tIgL/zKuH5hcXmOSjA3254YICfeHiIFBwfDwAA0BSJifGyZu2Gk063es16My0AAIA78RY3tXj5egkPDZa+vbvUOU1FRaV59vLydCjt02ZqlvHOFJeUSnFJmd2wvPzCms+trJTyet6LjoFtAO6GbRaw5+Pt1exVMmP6FPm/p56X9995Rfz97QupLAoLi+TJZ/4lM06bwk8AAADcilsGjVJ37pfDRzPkvJkTTQCoLt7Hg0WVVY4Jr6uqqsXLu+6KVltS98qajdudjsvJLZRKYkYdXkZWfodfB3AvbLOAvbjY8Gavkt9fc6V8/tUcOe+iK+TGG66V8WNHSUREzedmZWXL4p+WyT/+/YqUlpbK737zK34CAADgVtwyaLR7/2EJDQ6SI2mZ5qGOHKt53rZzn0SEhUjPbokSFBRghhUXl4iEh9jVItIk2kGBNeOd6ZfSVbp1iXeoaTR34UoJDwsy34GOLTqSbQDuhW0WcL2oqEj53xsvyR9vvEP+9Oe7zDCtcaTXGRooUn369JL/vvychIWF8hMAAAC34pZBo25JcZKTVyBFGgw6rry8wjyXlJRJiX9NosmYqHBTE0kTYifExVinTcuo6TWtU3TdJYyaJ6muXEneXl4uqdIO98Y2AHfDNgu0jJ49u8u3sz+UH+YvkiVLl8uRo2lmeHxcZ5kwbrRMmzrRNIsHAABwN24ZNOrTyzGP0YYtu0ytoyEDeklIcKAZ5u/nK10SO0nqrgMyoE938T4e6NmyfY+EhQRJp5ioUz7vAACg/fHy8pKZM6aaBwAAQHvR7ou9xo0caJ6/+v5nk6Pom/nLTE2jKeOHiqdn3fmQAAAA6qNN0L79bp7D8OzsHKfTvvTKG6xQAADgVtpN0CgmKkwG9u0uvj72laeCAv3lwrMmSf+UblJZWSlJ8Z3kF+dMldjoiFabVwAA4P70uuKG43mMLCoqKmTE2NOcTqs9qAEAALgTt2ye5kxcp2jzcMbH21t690g65fMEAAAAAADgrtpNTSMAAAAAAAC4DkEjAAAAAAAAOCBoBAAAAAAAgPab0wgAAOBUq6qqksef/If1dXW14zDLcAAAAHdD0AgAAKCJqqur5aVX3nAY7myYl5cX6xkAALgVgkYAAABNuYjy9pbN635u8PQeHh6sZwAA4FYIGgEAADRRUFAg6w4AALRbJMIGAAAAAACAA4JGAAAAAAAAcEDQCAAAAAAAAA4IGgEAAAAAAMABQSMAAAAAAAA4IGgEAAAAAAAABwSNAAAAAAAA4ICgEQAAAAAAABwQNAIAAAAAAIADb8dBAAAAaCvyC4pk2459kldQJEGB/pLSM1kiwkJO+r6lqzaZ99bWv093Segc3UJzCwAA2hOCRgAAAG1UZlaufDV3iSTFx0qXxM5y+FiGfPb1Ipk1bbTEnyTwc/hYpvj5+siAPt3shoeFBLbwXAMAgPaCoBEAAEAb9dOKDRIZHirTJw43r3t2S5CSklJZvGy9XHLeNPHw8Kj3/cFBAdI1Ke4UzS0AAGhvyGkEAADQBuXmFUhaRo707pFkNzylR7JpqnY0PavV5g0AAHQM1DQCAABog9Izc81zVESo3fCoyDDznJGZK3GxUfV+hk4z/6c15v/I8BDp3SNZAgP8WmyeAQBA+0LQCAAAoA0qKi4xzwH+vnbDLa8t4+vi4+0lkRGhEhsVIaVlZbJl+z7ZsGWXyYcUGx1R5/uKS0qluKTMblhefqF5rqislPKKyiYvEwAAaH16jdBQBI0AAHAj1dXV8v0PC2Te/IWSmZktPbp3lSuvuFQSE+KdTp+WniG33XG/BAYGyssvPH3K5xdNV1VVZZ49POyzCXh6etqNr8vpU0aJv9+JgFOfXl3kk9kLZcGStXLJudPqfN+W1L2yZuN2p+NycgulkpgRAABuLS42vMHTEjQCAMCN3HP/o5KdnS3TpkyUyMgI+fyrOTLrrEvk80/elp497HvJ0qDCLbffK0ePpktuXl6rzTOaxtu75jKtslaUxlLTx+f4+LrYBows0/fpmSwr120z+ZLCQoOdvq9fSlfp1iXeoabR3IUrJTwsSCLCQpq0PAAAwP0QNAIAwI3cfeefJSz0xE37tKkTZcYZF8v/3vtY/nrfHXbTvvDSa+Lv5y8XXXi2vPbGu60wt2iO0JBA85xfWCyhIUHW4QWFReY55Pj4xrAEksrKKuqcJsDfzzyc8fbyalSVdgAA4N7oPQ0AADdiGzCyNFUKDg6SkhL7/Dar16yTd979SP7vsb+e4jmEq3SOiRRPTw85mpZpN/zosZpe0+I6RTf6MzOza2qchQQHuGguAQBAe0bQCAAAN7Z0+SrZsHGznDZtsnVYbl6+/Pm2e+WxR++XqKjIVp0/NJ2vr4/p7Wzr9r1SWFQTFCwtLZMNW3dJl6TOEhp8oqbRkpWbZOmqTdbXmVm5cuhIut3n6ettO/dLjy7x4l9HTSIAAABbNE8DAMBN7d23X278811yycXnyfRpk6zD7/rL32T61IkydfKEVp0/NN/Y4f2kqKhEPp69QGKjwiUzO1dCQ4Jl0pjBdtMdPpohHp4edgGnVetTZdGy9aZpW0lpmWTn5JuA0YTRg/hpAABAgxA0AgDADe3ff1Auv+IPMnbMSPn7w/dZh2dn58i338+XIYMHyqW/usYMO3z4qOTm5prXf/rjNTJxwphWnHM0Nhn2zKmjJCe3QPILCiUwMECiIkIdphs7coCcCBlp87NA876i4hITLFKREaF15ioCAABwhqARAABu5sCBQ3LZFdfK0KGD5LmnHxUvrxOJiTW/0Xvv/Mdu+i+/+kbmfPuD3HzTdQ49rME9hIcFm0ddEjo7z28UGOBvHgAAAE1B0AgAADdy8NBh+eUV18qQIYPkH7UCRsrHx0fGjh5hN2ztug1OhwMAAAD1IWgEAIAbeeBvj8uhQ0ckPq6z/Oqq66zDBw7oK/f95bZWnTcAAAC0LwSNAABwI7ffeoNce82VDsPDQkPqfM9555who0cOa+E5AwAAQHtD0AgAADfSr29Ko9+TEB9nHgAAAEBjeDZqagAAAAAAAHQIBI0AAAAAAADggOZpAIAO5eu7+rf2LKARznpiM+sLAACglVDTCAAAAAAAAA4IGgEAAAAAAMABQSMAAAAAAAC0n5xG1dXVcuRYpmRk5UplVZVEhIVIckIn8fT0cJi2oqJCdu87Irn5hRIY4CfdkuPNMwAAAAAAANpRTaOcvAL58MsfZd7i1VJYVCwV5RWydNUm+XTOQskvKLKbtqi4RD79epFs2rZbvDw9Zf+hY/LxVz9KekZOq80/AAAAAABAW+eWQaOiohIJDQ6UX5w7VcaOGCAjh/aVC8+aLGVl5fLzio120y5ZucnUSjp35gQZNqi3nDFtjMREh8uCJWvNcAAAAAAAALSToFFEeIicPmWU+Pv5Wof5+fpIQlyMHD6aYR1WUlomew8clZSeyeLt7WUd3q93N1Nb6Wha1imfdwAAAAAAAHfglkGjAH8/8fJynPXi4lK7nEbpmTmmNlFMVLjddLHRNa/TMrJPwdwCAAAAAAC4H7dNhF1bZlauHDySJt2T463DCguLzXNAgL9D0MnDw0MKimrGO1NcUirFJWV2w/LyC81zRWWllFdUungJ4G7YBuBu2Gbhjlpyu/WxqYUMAACAdho0KiuvkPk/rxFvb2+T38iiorLKPHs56VFNayRVVtSMd2ZL6l5Zs3G703E5uYVSScyow8vIyu/w6wDuhW0W7qglt9u4WPuayAAAAGhnQaOqqir5YdEqUwtI8xyFBAdax1nyGFUeDx5ZaJM1fZ9tnqPa+qV0lW5dTtRaUvodcxeulPCwIIkIC3H5ssC9REeyDcC9sM3CHbHdAgAAtB63Dhpp8GfhknVy+Gi6TBk3TJLiY+3GhwQFmOfC4hKJjAi1Di8qLhXtOC34+HhntAmbPpzx9vKiSjvYBuB2aIoDd8R2CwAA0HrcMhG2xbLVm2Xn3kMybuRA6dktwWG8JsDWZmhp6fYJr9MyanpN6xQTecrmFQAAAAAAwJ24bdBo3aYdsmnbHhk5pI/0693V6TS+vj7So2uCpO7aL6Vl5WaYNkvbuHW3REWEWntRAwAAAAAAQDtonnYkLVNWrttmmo+VlJaZGke2RgxOMUmx1djh/WXOvGXy2ZxFpvlaWka26RntjOljTA9qAAAAAAAAaCdBIw0WjR7Wr54pTgSD/Px85bxZE+TQ0QzJzSuUuE5RkpQQKz7Hg0oAAAAAAABw5JaRk/DQYAnvF9zg6T09PU0toyT7ztAAAAAAAADQ3nIaAQAAAAAAoOUQNAIAAAAAAIADgkYAAAAAAABwQNAIAAAAAAAADggaAQAAAAAAwAFBIwAAAAAAADggaAQAAAAAAAAHBI0AAAAAAADggKARAAAAAAAAHBA0AgAAAAAAgAOCRgAAAAAAAHBA0AgAAAAAAAAOCBoBAAAAAADAAUEjAAAAAAAAOCBoBAAAAAAAAAcEjQAAAAAAAOCAoBEAAAAAAAAcEDQCAAAAAACAA4JGAAAAAAAAcEDQCAAAAAAAAA4IGgEAAAAAAMABQSMAAAAAAAA48HYcBAAAgLaisKhYUncekLyCQgkKDJDePZIkLCSoxd8LAABATSMAAIA2KisnTz6ZvVAysnIkrlOUFBQWyaezF8rRtMwWfS8AAICiphEAAEAb9dPyDRIWGiwzJo8UDw8PSemRLN+WLZdFS9fLL86daoa1xHvRsR08nCarN6RKUVGpBAb6yfBBKZIYH9vaswUAaAXUNAIAAGiD8vIL5Vh6tqT0SLIL8PTpmSy5+YWSlpHdIu9Fx7Zw6Tr5Zv5yScvIkYKiYvOsr3U4AKDjIWgEAADQBqVn5pjnqIgwu+HRkWF24139XnTsGkbbdx0wgcZRw/rJVZecYZ71tQ4/eCS9tWcRAHCK0TwNAACgDSosKjHPAQG+dsMD/P3sxrv6vcUlpVJcUuZQc0lVVFZKeUVlI5cE7mLV+lTzPHxwivTr3dX8r8+VlZWyen2qrFq3TTrFRLbyXAIAmsvH26vB0xI0AgAAaIOqqqrMs6eHfcVwT09Pu/Gufu+W1L2yZuN2p+NycgulkphRu1VQWGyeoyMjJCMr3zo8JirSOt52OADAPcXFhjd4WoJGAAAAbZC3t7e1do+tiuM1fSzjXf3efildpVuXeIeaRnMXrpTwsCCJCAtp9LLAPQQHBZiaZhlZ2TKgT3fr8I1bd1nHR0fy+wNAR0LQCAAAoA0KDQ601u4IDQlyqA1iGe/q92oTNkszttq8vbwaVaUd7mXE4BST9Fqbonl6eEjfXl1l6469smZDTc2zEUP68PsDQAdD0AgAAKAN6hQbaRIQH03PkvjO0dbhR9IyzXNcp6gWeS86rsT4WOndI8kkvV6xdqt5WGhPfIlxMa06fwCAU4/e0wAAANogP18f6d09SbZu3ytFxaVmWFlZuWzculuSEzrZ1SBavnqL3Q1+Y94L2Jo8doicMX2MxEaHS3BggHnW15PGDmFFAUAHRE0jAACANmrsiP5SsLBIPpm9QDrFaHLiXAkM8JdJYwfbTXfgcJp4eHrIqKF9G/1eoDatUUStIgCAImgEAADQRvn4eMuZp42VzKxcySsokiEDeklMVLhpemZr9PB+TX4vAABAXQgaAQAAtHFRkWHmUZek+NgmvxcAAKAu5DQCAAAAAACAA4JGAAAAAAAAcEDQCAAAAAAAAA4IGgEAAAAAAKBjJsIuKi6V1J37JDe/0HQ127t7ooSHhbT2bAEAAAAAALRZ7b6mkQaKPv16gRxNz5K4TlFSUlImn369SA4eTmvtWQMAAAAAAGiz2n3QaMmKjRLg7y8zp4yWlB7JMmnsYOmS1FkWL98gVVVVrT17AAAAAAAAbVK7DhoVFZfIwSPp0rtHonh6eliH9+mZLAWFxXL4aEarzh8AAAAAAEBb1a6DRumZueY5KiLMbnhUZM3r9MycVpkvAAAAAACAts67vdc0UgH+fnbD/f18xcPDwyTIrktxSakUl5TZDcvOzTfPWTl5UlFZ2SLzDPeRRtDRiPQPau2fAg3ENluj3C+WbcaNtOR26+3lJaEhgeYZ9as8ft2Tl1/IqgIAoB1o6DWQR3V1dbW0U5u27ZGlqzbJJedOlbDQYLtxr733tfTsmmhyHDmzen2qrNm4/RTNKQAAaA0XnT1FIsPpUfVk9h44KnMXrjwlvwkAAGg710DtuqaRj09N1Kx2rSCNk2kSbMt4Z/qldJVuXeLthpWVlZsStoiIEPHypFSyIXR96UXmjMkjJTSEGilwD2y3cDdss80rZcPJde4Uac7lQUH+XAN1EBxXgI6Bfb3jCm3gNVC7DhqFBteshILCEru8RoVFxaL1q0KOj3dGm7TVbtamOsdGttDctm8aMKIkF+6G7Rbuhm0WLcXf11e6JnVmBXdAHFeAjoF9HR0yEXZMVLh4eXnKsfQsu+FHjtW8jusU1UpzBgAAAAAA0La166CRt7e39O3VRbbt3CcFhcVmWHlFhWzYskviYqMcelUDAAAAAABAB2iepkYO7St5+UXy6dcLTdOyzOw88fXxkakThrb2rAEAAAAAALRZ7T5opF3IzZw6SrJy8iQ3r1AGB/hJbHSEeHh4tPasdQgB/r4ybGBv8wy4C7ZbuBu2WQAcVwBwDYGW4FGtXYkBAAAAAAAAHSWnEQAAAAAAAJqGoBEAAAAAAAAcEDQCAAAAAACAA4JGAAAAAAAAcEDQCC7z9Q9L5YdFq0463dyFK+Xb+ctd8p1N/ayGzmtLzwc6ju27Dshr734t5RUVrT0rAAAAANAgBI3gMpWVlVJVVXXy6aqqzMMl39nEz2rovLb0fKDjqLJsI/RXCQDowI4cy5Q9+4+09mwAABqIoBEAAACAUyJ1135Zs3E7axsA3IR3a89AR6XNo/x8fWT4oBT5eeVGyczOk5CgABkzvL/Ed462m3b77gOyedseyc0vNO/pkthZRgxOEV9fn3q/46OvfpTEuBgZO2KA3fA3P/hGhg7sLYP69TCvMzJzZNWGVMnMyhURD4mJCpNhg1IkOjLMjP9p+QbTtEZ5enma+eyWHG/e7+3t5fC96Zk5snTVJsnOyZfQkCAZNbSvJMTF1Duvh46ky7rNO808eHh4mHUwelhfCQ4KlMZoiXl11bzBcfvUddm9S7ysWLNVsnPy5PQpo8ywiopKWbdph+zef1iKikslKNBf+vbqIgP6dLe+v7q6WjZu3W32j6KiEjNN16Q4Gdxff2tvs11/+d3Pcsb0MXIkLVO27dgnlZVVZv8ZM7yf3f5TXFIqq9ZtkwOH06S8vELCw4JlUL+e0i05zjqN7edlZOXIpm17TFOzLgmdZdyoAeLjfeJwWlBYJEtXbTalqX5+vjKkf0+nP39DltP2e9MysmXrjn2m1tLlF85gkzpFNmzZJas3pMqvLpwhP63YKAePpImvj4/5rQbb/LbW6S46XZau3CQHDh+ThLhYmTp+qBmvv92W7Xslv6BI/P18pWtSZxk+OMVu29Hteu2mHZK6c7/ZPhLjY2T8yIHyzsffy+jh/aR/Sjcz3effLJaI8BAzD8tWb5GsnDzzPbp963a+fvNO2bXvkBQWlUigv5+k9Ew2x0E9hllsTt0j23bul8LCYgkM8JfkxE4yZEAv8fXxbtD40tIyWbU+VfYfOialZeUSFhIkA/t2l57dEq3fkZNXIJ/OXigzJo8w5zA9l5WUlctVl8w6Bb8cAAAAmougUSvR5lHFJVWyav02GTu8v7mxXLZ6s8xdtEouO3+69YZ249ZdsnzNVhOk6NE1QXLzCmTBknWSnpkt55w+Xjw9664sVlVZJVVVjm1h9IbC0jSrrKxc5sxfJt2S4mTCrIHi5eUl6Rk55kb2tEkjzDTjRg6QMSP617y3otIEWhYv3yCFRcUyccxgu88uKS2X1etTZfyogSbApcGWb39cLuefMUmiIkKdzueuvYfkx5/XyJD+vWTSmMFSVV0ty1dvlq++XyIXnTX5pMExW66eV1fOGxy3z7y8Qtm0dbdZtyEhgeLl6Wm2Tc0PVVBUbH6bmMgwOZaeLQuXrjM3phpoVXrzrSWV0yYMk07RESbwo9Xdd+45JH16dTGtwLQ52KZtuyUmOkLOnzXR3LQuWLJW5i1ebYIwqqKiQmbPXWL+120+KDDABJg059XkcUOkd/ckM87yeXrjr9vHeTMnSHZegcxbtMpsB2OPb3c6/1//sMzcWJ912lizb2swQQNJdsvfwOW0fK/ewMdEhcu5M8eb7RWnuGlhZZX8vHKT9OgSb4L7GhD6eflGE4SxBOAt0y1ZudEEMHWbsASr12zYLms3bTdBfA0WZeXky8IlayUjK9dsJ5ZgztqNO0zAZ+KYQSaArYFCDQrpNmB7PNfXBYXF5lg9YdRACQ0NMvuPBp2+X7jCBMLHjxoknaLDzXFQt6uSkjITeFIaXF++ZovZf+Jio6S4tEz2HThqhg/o0+2k43U5tfCjvKLSBKtCg4Nk+56D8uPPa6WsvEL69e5aM6PV1WZeNfgUGREqZ58+Xvz92H4BCw0O79xz0BSYaGHUkWMZZt/u1T1JPD1rjgslpWVyNC1LysvLJTwsxJwLatPruWMZ2VJaWi5hoUGm4M9yXNHjTVp6lgke67lSCzS0cCWhc7TTAjUNbOuxR+l3aaGaLdvP0/PVoaMZ4u3pKQlx+nmOtxZa+JGdW2DmKzY6os4f/2TLWft7Dx/NMOfDkxVMAq15v7dj90GJ6xQlIcGBZl/RApfOsVESHBTgdDrd33TbrjkOJFrv9Sz7ZXW1SGy0435Z1/52NC1TikvKrAWhen1wLD1LevdIlrLymv1Ir1kT42Otn5GTmy8ZWXni4ekhnWMiTaFmbXn5habSg9LjjS5fY8br9Youj07n6+srcbGRDvdV+w4eE28vPbbEmP0/MytHOsVE1rnsaDkEjVpRWkaO/PL8aeYmVenNxLufzpW9B45K7x5J5mZ29Ybt5oAxsG/NTYmW9uoN9px5y2T3vsN2JbpNoTugXmBo6bCl5oyWJuvDQg9WltCUt5eXOajoDa0GY/SmxHJRU7NM2XLpedOsBwYtIdeLEy19P33ySIfv15ssrZHRvUuCjBjSxzp8yvhh8v5nP5gbdNuS/JNx5by6et7gSE9aWmPG9iSxY89BUzPovFkTrBeXXbRGRlGKuYkd2Ke7mV5/Kw0WJSfUbKsanBk6MMThO/Si2VLTJzDQXyaMHmSCNXphHtcpWlJ3HZCc3AK58KzJ1mCh1v5Iz8qRlWu3Ss+uiXbbjf432Obz9OJVb4gtQSO9qc4vKJRLzp1mPalpMPPTrxfazdfOvYcatJy22N5aj17cdI6JML+RSumRbC68NGijtX18jte+0en0gkYDQxZ6c7Nus07X1RpM0WO5BgvnLlwl+w8eM5+rN30btu6Sgf1O1NbRmkNaC02bc9R2LC1LLrvwNAnw97MO08DpwcPpcuZpY80NoUpK6CSjhvaTxcvXy8B+PSQwwM/sP3oRp8Ety/4TbnM8O9l4DajrxaAGMXV5le5nWiNTa+2l9EgyhRAWGmSyBEIBnKA3bXqNoucJ3X/15s3fz89c++kZRws+VqzdavZHPW5oELlTTIRMmzjcXOdYakT/sHi1hIcGS2hwoGxO1UKKapkxeZTZ33W8FkzqTeqyNVvMdHoNpNdMZ04fY3cDptc9WigT10n3aw9TUKnHOD3HWYJQls8LCws2tSr1/fp5GrjWc5r/8WOSHg8XLV1vjhemFnFlpamR6ExDl1O/V6/bdHxkRIg5fxI0Qlultdd1/9b9Z+/+o+Lr620COFqQo/cdWshZe7qaQImXObf37JZgxi9fvUU2pe4xgRXdD/X9fXomm+OGZb+svb9pgY3u8x7iYfZPS9Do8LEMWbJykwQHB5rPjQwPMYWrifE186GFqwePpEt8p2hzL6QFXKOHnajpbOZnzRZznNBpvLw8zb6bnBBrbd1ysvFFxSWmE6G8/CITKNNKEQVFJTJl7BDrdZZav3mHqZmtwTYNfoXpMS5EHwSNTjWCRq1Ib1AtASOlUVwtMdFIstISaN15uyae2HmUnhz1BuXwscxmB4304kJP8nqRMHRgL3PyrV17qaSk1NTC0RsRrbGjF//VUm1KvfW1beRYl8n2tR7I9Kbe0mSsNl1GLfXqlmy/jHrRpBcOWuI0uOZevEFcOa+unjc46uSkVOHgoTSzL9QujdQAj/6eWmtC9wFtQrZh8y5Ti0ebuNmW2NjqYhMAVdpkU7d5/f30M/XmWLeD2jXh9Gb5wKE007xGT6gWSQknSmKUNhHSm30NDOj+ezQ9S8JDQxxOaBqItZS4NGY5re8/HhxD69EATu3X2kQyOzff7nfUCyNberFmmkbaXAjVTNfZHHf0Ak7HZebkmWN+Urz9b51kU/pnKzoq3C5gpLSJpW6H8Z2i7IbrRZkeB3VeNKCl+48GaDXopbVYa5cAnmy8zrNeyFkCRhb62Vqgodu67Tqpvd8AsKdNN0+bPNLufKO1+/T6TAsLtYBCaZPTz+YsMrUXtUm90gCK1hifNPZEjWo9h9Tu8GP77oNy/hkTzQ2pnre+mrvENLnVwJHSAhAN3syYPNIa+N538Kh8v2ClOSZYaxBaPm/nATl31gTzeXq99MEX803TbUtB2669h00Tcq1NaUm9oAVuazduN4Hoxi6n9Xt3HZDzzqj5XsCd9m/Ltaa2NNHAjRZu216/bk7dKzMmjTA1c223dy1QOm3ScJNyQ2mz8O9+XGH2S0swR8+9tfc3rb20ct1W06S+NrMf6f5rU9tQjwd6faytKSzXsbv2HZYff1otsVEREhMdbgI8eu09a9po6/WJBqy0AEydbLzSoJcWiOn3aAGsjtdh839aI784d4pdChC9H9OaWefOnOCiXwNNQdCoFWnpT20aDNJSJ0vzKRXgZDq9UdBqvE1h22BNd1RtkrNy3TbT5Eq/X0unhw7oZW5Iapo6rDTNDcaPHigRYSHm4KIneN2xtbmWLX9/3zrnVate2pY8Kz1gqPk/rRUPWWs3rqq6SmKiIhq+XC6eV1fOG5zT0sTaikpKzcWidk/vjOZDsdRqKCurMPlftERDq+Hqze1gk7/qxKHNUuJpoTfp+tsXFpfUfF5pmcONt5m348NKS3U7CKlzni35XfQCXG/WNb9SXdtWU5bT+r1Oqgbj1Kq9LVl+U/0d7Yfb/1ZaFd12egutwaaBF8uxXLedmunst5/ary2cVRcvLi41AczX35vj9D2WedEmZnqTpxeievzXAoTuXeNlcP+anEUnG681VJ2dmyznNW0KZz+c7Rc4WSGKbcBIaVBaC6ksgRTLft+nV7Js3b7PGkzRY4htjVjlrAmb1gC0BFq0wEbPo3p9pIUjWvtIm2ZrsNe2pqQGxzU4rMGe2kGj3jafp8c3LZTRAk2LLdv3mCZrtrk6tXaENsFtynJa9LL5XsBd9m/bwknd9zTAum3nPhkx+ERrBq1dZxswUrrv6f5sCRhZChK1MEj3D0vQyNTs6Wy/v2mNRW0a70yvbgl2ASO979m196CZH9uCT22Wv2ZDqqnxrEEjyzWLp02ORL22thSMnWy8pmvQwn2tvWS5ttXxo4b0NUEuDW4PG9jb+l4tdNNrErQugkZtmJ+vt9OL75phpeLna1/CW5sGgLStfO0bhtolT5bmaFoTR6v/bdyy25Q+XXLuVLOjap6VmVNGmbwWFpaAiuN8OZnX0jJzM107YFSzjDWRb42qx8fZJwBXWqWyobSGlivn1ZXzBuec5eTS9a4lJxecOcnpe7SWkNLAkMlhNbyfKYXQ4OD6TTuloKDY5CKqfZNc+3cOPH5jrxfO2szI2TQ18+P8hr0ueiNtW6Ooru2toctpYXvyResw241NoKTEBBTtCwD0wqf2zZulhK92AFID3aVlZdZtzBpwKS2zu2Crq4DA2Tah27PebF1y3rQ63lOzXekxTnMzabO1zOxcUwKoJYO5eYWmIOFk47WKfUmm43xptXvlVytvUX359wDU1H6uTTtdiIwIM8EcWxqo1uOCPjTwrIEYzfGn5x6tXau1VG1zGlnUvhmNDK95nZtbEzTSc6EGgmqLigw1N6e11f48DQ7r+dhCjxc1zexO0HnSQj3N59fY5aw934C77t96DauFMZoewZazbVtrM2vgxtlnar5LvZbQ/Ur3tx5dHafT/U3HnWz/1XO9lq9rgVHtfVGvHTS4rKIjw813a00nDQRpsFg77bC0njnZeMs1t6XDJQsNIGnwufY1uTZJ4xqi9RE0asN0p9OSFG1uYJtjSKsNam0a28CIM9pW1bKDW2hQqC66M2vSXz24aM88evFhKcmunShRq0DWlSNJS8tta0UcPJxWZ+JDjZzrzXPtZWwK7cnKlfPqynlDw+nFrlaH1+CPBlVORk8k+pvpQy9CtXmYrQOH0+2acWouIw2GahJBpQn+NOBkKWm10Kq/euPbkHmwpfOhVfI1gaFtlWNtH96c5UTr017TLInRzevD6eLj7WWOmfXRbU0DSbotavPDE5+XbpqMdY6tKQCICA81bf/1OG17zDx0pO7jdm16caZJdfUmMKrWBZkzOl96rNOHXijqNtmQ8VpVXJPOaw4j2+/RJp1aYBEVcfLvBnCCswKKyqpq02RVc2DWLrTSvGqWkJDm4dPjiF7vaJ4+rR2oN2RaiGZ7jVO7MEKPNzXfU1OYqDWyawe9T7yv2npzaqHHP1v6XtuCSf3c2t9p+72NXU4LkunD3TgLemjhTO2CfNvgqEV1VbXpEdrZ+zXIY9kv9bOcfk8dhTa2TUSVZV60EL683L7SQU1C/EDr/qtNxfRaQ++RtLb/omXlpsaTFuaebLyl5YfzdVLToYf9OqHzjLaAoFEbphfeg/r3MLUntDpg9+R40/uTJjPVmxRtKlCfXt0STQ9QutNqlUbtcU13XtuDh94AaNZ8PSlrJFebZen0eiEQHRFmbpo1cKRJXDV3ix6UdH7q6r0pOjJUfl650SRy09L19Vt2mq6gNfmwMxrg0eqJmvxNv0erJutnayZ9vSHR0nZnpV7O6A2/K+fVlfOGhtPq89rOeu6ilaZXKL151hpzmp9hw9bd1twLi5atN4FTbU6ptXu0ZEIDqgmd7XtR0ZpGWmKigSP97bS9tlb/tfQSoSW0WlKz4Oe1MmX8UPNbp+48IHsPHDEJ+xpbuqH7kla910SCk8cOMdvMxm27xcfHq0nLibZBjyeHDqebkkG9eNIAkOb+0E4KTtaLojZrG5DS3eQ00ACL1gTQ7fXnFRuPJ5vubL1Y1IuqDZt3SnREqKlinp6Za/JuNZSWMmp1d02Kq9uVNivRC8H0rFzTG+f0icPFx9u75rujwkyQSWsHaA4CPRdoMEidbLxWa9+4ZZcsWLpOpo0fJiHBAea4qHmQRgxOcdojE4DG0aTR2rOoba6iumhBhCUPnuYu015B12/ZZe2kQek1pG2zNX2t9LimdD/WxLS16blTCxZr11w6Gc2FZvmO2p/X1OUE3FHtbV4DI9ppSn29CdruR7Xfr/S8rNesluvUuqbLO54r92QsSeo1T+jJcubqOV6TeOtDC7+0CZzmH9NrEL3uqG+8JUeizqul0ExpB1CaIDvEJp8R2g6CRm2c9jaj+SN0R1u0dJ2pztgloZOMHt7/pO259UZkyIBe5uJ/4dL1khQfI5PGDpFdew5Zp9Eb7PyCYvlxyVpz8NEDj15QaHfkltIp7UlMb7S1Zze9Ae7fp7v07d3VBKBq02qFetPzzbzlkptfYHZ8vUmp76CowRh9nwZ7tLc4vSbRA4oesGzb1Z+MRtxdPa+umjdIo35HTeKn27x2360nEC2B1RtYS9fmSnsX00DfirVbTJMYbdqjJzrbtuFmur7dTa2hdz753tQw0iTF2pOehd7wn3P6OJNIVJNuauBUuw+fMGqQtVeLxtATpQZ8flq+0SQF1e1Q51uDvrY1Rhq6nGg79LirvYhozg79nfuldJOhNu3u6zNqWF8ThF+xZovMX7zabHd6DNHAtG1gcuSQPuZiUvOMVFRWmaCN9rKmyS1rl847o591xrQx5gJNA6va7FiD4hqcGtCnuwkYqf59upmgz+r1qaYJr+ZN6pocJyOH9G3QeD0XnT1jnOmJ6YvvfjIXe5q4Um9QbXtYAdB0KT2TTK9D2oW25pm0pc1atJaqHi+06YltjVW9jtMgdO0Sey2osASNdNyW1L3mfZbagnoOXbdpp13NW/1fr6Esvfg2huYZ1FwotjVvtXBHA0m2TXAbspyAO9OesYcNSrEWZGutQL127dm1pne0+uh+qc1PtZmapWazBlz2H0qTATbnW93ftPdS2/1N96mc3Hy7xNJ1CQ8LMYWqGmzW873tfab2fKg5E/UeSJuNasUGS05PrWGYGBdrrmdrOh6qf7wug+7TW3fsNb3DWa6BNAm4jj9ZpQi0Do/q2mcUnBJ686oBiNq1GPSGtSYnhuPNge5IzqoNN4RtleKa7/B0+Kza1Y7r+wz931Lt+MTn2i9TXZ9nqf5YVw2Ok81HQz7LVfPa0Hk72TKh4ftAQ9f5yabRGjvazNK2F4mmflZd21F9w2t/lu6/mkC9rmBvY78Xp472ILZqfapc86uzT3Ic0OYbVU7ztzXlWG75nmPpWfLldz+bYKSlJkFL7z+u+gy2X6B+WmDwv0/mypRxQx3y/1h6FNIbzJoa4UEmiKvNrLU5q/Y2ptN8PHuBKezQWul6o6ZBnvSMHDln5nhzg6aJprWreg3qatBGC8e05qA2hdUejrTGrtLg75x5y0xto77HC000Ca/WQDrztLHWoLPl8353+Vl2xyAdpvN6+YUzrJ/3xXc/m44itBBOrz/13Bzg5ydZufmm56SGLmd93wu0VZqD9u2Pvzc9VOs+pwmsNUeXBmy1tYKldYNlOq2hXrsVgwZsvpm3zARQ+/buYs61WoNea//pfmkJzmht9S+/+8l0hqH7W9Xxnni1trPmK7r47ClmOq1drz23/fayMx2uSbVp2rfzl5v7mh7dEkzwWYPSekzRHKLas/DRtExT2KmFWhpo0vlL3bnfBJTOmDba1HSsb7zuu3p8+mb+MhM80s/UiguaaHvogN6mua2FLo/Ow+lTRp2CXwv1IWgEoF1yFjQCXBE0akl6YaYXaN27xJkLJW2epk2S9abqorOmNLngAEDbpAEVremqN3layu+MBo41h5rebAYFBZggj20zMz0+6LFDOwPRQI3W4tEaDJacJbbBFg0Uaf5GrS2paQz0ps6W3izu2X/E3PhpsbLmZNOaDrZBmkNH0k3uvoljBtkFizXoo+derUFpoTeyejOoN7w6X9okfPf+w1JYWCLDBvVu1HLW9b1AW2UbDNLezrS2nwZ19P9uyXHW6TSn19JVm02tO23e5aywac+BI5KWnmX2S90vtKlX7eCp7m/6HVorybK/ac1l7Zn7nNPHm2k0eKXNySeMHug0+KqFUpqiQfdlPbZo+hKdV9seYPW4pfu7fo8GnrSGoPa0aLlGOdl4pXkStbe0vIJC8fPxkWTTU6P9MXDd5p0mZQo1mFsfQSMA7RJBI7hj0EgvHPW79uw/bGogaNMyLa0bPbyftecRAGgMaugAraO+GkQtQZuk214raIc/H371o/Tv3VVGDq1pXg40BTmNALRLmsNFq97W1WsE0FCD+vU0ubFOBc0DoE1I9NGYproAAKBj0w6QtElnZHiIqcmjHbsEBfjLQHJlopkIGgFol/Rm+2TJ4oGGqKlOfeq3JQJGAFxBbyBN1/UEoYFTSnMcWvJ0nQqakmH3viOSmZ2nDVdNJxzdNan18XxkQFPRPA0AAAAAAAAOaLcBAAAAAAAABwSNAAAAAAAA4IAGjgAAAIAbOpKWKdVV1RLfOfqUf/fBw2lSUFgsnWMjJTwsxDp8556DputvZ3Q6nV5pL5HhoSESEX7ivQAcFRaVyKEj6dKre+IpyU2mHXFoXqTcvALx9/OVqMgw81yf3PxCOXI0QwID/CU5sZN1eEZWrpn/LjbD4H4IGgEAAABu2J339wtWyrQJw075d+sN5XcLVkhVVbWMHzXQLmikN4llZRV20+fpDWVapgwb2NsaNMrJK5S1G3fIBWdOIkk3UI+lqzaJt7eX9O6R1OLrSYO5K9Zuk/LyConrFCWFRcWSlZMvI4f0kf4p3Zy+R48D8xevNvt+XGyUXdBI53veolVy/hkTJTIitMXnHy2DoBEAAADgZtZu2iGhwYGSFB97Sr9XbxAXLV1nbg4PHc1wGD9meH+HYQuXrDNBo57dEqzDBvTpJus375Sdew6ZGhQAHB1Lz5Y9+4/IJedNOyWrZ9/BY5IQFy1jhvU3AR+1YcsuWbJykwkOJzip1bhh6y4pLSuXkOBAh3HhocHSNTlOVqzbKrOmjj4Vi4AWQE4jAAAAwI1oLYDUXQckpWeyww2fNmNRWTl5pqnYsfQsl373xq27pKi4RIYPTmnQ9NpUbc+BI9IpJkLCQoOtw328vaVbcpxsTt3j0vkD2hPdP7R2XlhIkHVYdk6+bNuxzwRwS0rLZPe+w7L3wFEpr7Cv4dcUA/p0lwmjBlkDRkprGGmzuL0HjjhMn5NXIGs2pMq4EQPE2+vEe2xpDakDh9JMjUO4J2oaAQAAAG5Eg0MaOOqS2Nlu+PrNO0zuEa2dcPBIuvj7+cjBw+nSs1uiTBo7uNnfqzlOVm9Ilcljh4iPT8NuI/YdPGrmtXd3x6Y1XRM7y/ZdB8zn2gaUANQEXPfuPyIjhvSxWx2Hj2WYmj+6z2jTtdCQIEnLyBZPT085b9YECfD3a/Lqi44McxhWWVWlmY6kqlKf7XMfLV62XhLjYkyTtBVrtzr9zPhO0eLj7WVqFQ4b1Juf1g0RNAIAAADcyJFjGRIU6G8etZm8Ip2i5NyZ483rHbsPyoIla6V/SleT0FalZ+ZIZlZug24go6PCrTeIi5atl84xkdKja4KpydQQ+v1eXp7SvUu8w7jYmAjzfPhoBkEjoJZjGdkmYBMbXbOf1LZt5345d+YEUytIc5x98OWPsnHrbhk1tK8ZX1paZpq2nYyvr4/T/dNi6/a9Ul0tDgn3t2zfKxmZuXLxOVPq/XxPTw+JiY4wwa5hQtDIHRE0AgAAANxIbl6hBAcFOB2nwZ3+Kd2tr3t0jZdFy2pyClmCRprcNi0j56TfozUWoqNq/t+6Y595z0VnTW7wfBaXlJoaT3pDqjemzj5fm7RoExcA9rQGnqprX9dmX5ZmZP7+fpIUFyNHjmVax1dUVjVoPw8M8KszaJSVnWdqF8ZEhUu35BPTFBQWycp122TowF5OcxnVpsugTdTgnggaAQAAAG6ktKxMguq4kdRktVqyb6FNVvz9/Ey31xZdk+LMo6EKCotN05NB/XpIeFjDm5Ht2nvIBLHq6/VJg0maRBeAPct+4eck4Kqiwk/0WqgCA/3lqE0OM62J2JxmqXrM0F4S9funTxxud1xZvHyD+Xw9JjSEfgb7ufsiaAQAAAC4Ec0nVFFe6XycTQJbC73ZqzJ5SaRJzdM0AW5lZaWpGaQJeFVRcal51kTbnh4e0qt7kmmGVrtpmt5YOutxyUKT92pSbAC192XvE/uIkxxi3rWGaYBYk2NbNKd5WllZuXw7f7nJR3b2jHF2tYl039dcaRoM1pxk1u8rKzfHGT1GaPJuDWBb9/NyXQbnibLR9nGEBgAAANxIcFCgCfw0VWObp0WEhUivbkmmqYptbSeVX1AkXp5eJtm2rZzcfJNfaciAnqbnJWf0ZlhvJhvSvAXoaEKO1yYsKiqRwADH/GUn09TmaRWVlaaGUV5BoZw5fYxERoTaTe/t5SkpPWp6brT9fA0sa81CHRYWGmQXNNJAU0gQ+7m7ImgEAAAAuBEtxdemX1qTwM/Pt9Hvb2zztIS4GPOwpYmwtZtvDRb1693V4T079hw0z1oDqS7px28442KPJ04CYNUpNtI8p2XmWBPSN0ZTmqdpTaX5i1ebwM/MqaOkU0zNPNSumeTsc7UHN+290dk4DXL37JbQyCVAW2FfhxQAAABAm9YlsZOpvaNJptsirW2g3Wtrr0/hoXXnQNL51wS50VGO3XwDHZ0GYLQnxFO5n69ct1X2HTwmSfExUlBQZJqaWR4HDzctkXVmdq5Jit+YQDXaFmoaAQAAAG4kKDBAuiZ1NjmDenQ9UXqfnNjZaU4jnSaqVhOT5vLz9TVNVCKcJMbWpigJnWOkW3LnkwSWDppaSnU1XwM6uv4p3WT+T6ulpKTU9JCmtLmo7nuaS8yW9nBmm7usqccWZ03PLM3dEp13smZ0S46z9uZmS49T2sRNa0jCPXlU6xEbAAAAgNvIzs2XT79eJOefMdHlAaFTQW8kV6zdIpecO81pkl8ANcHVL779SRLiomXkkL5ut0pKSsvk/c/nybQJwyQ5oVNrzw6aiOZpAAAAgJvR2gZjR/S3S07tTjQZ98TRgwkYAfXQWnjjRw2UioqaJNPuRntpHNinOwEjN0dNIwAAAAAAADigphEAAAAAAAAcEDQCAAAAAACAA4JGAAAAAAAAcEDQCAAAAAAAAA4IGgEAAAAAAMABQSMAAPD/7dgxAQAADMOg+Vfdf7EAMgAAgJBGAAAAAIQ0AgAAACCkEQAAAAAhjQAAAAAIaQQAAABASCMAAAAAQhoBAAAAENIIAAAAgPsGYF+qj3NOdPoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1176x504 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 2, figsize=(9.8, 4.2))\n",
    "\n",
    "vc = df[\"response\"].value_counts(dropna=False)\n",
    "labels = [\"no usable label\" if pd.isna(k) else str(k) for k in vc.index]\n",
    "colors = [ACCENT if lab == \"responder\" else WARN if lab == \"progressor\" else MUTED\n",
    "          for lab in labels]\n",
    "axes[0].bar(labels, vc.values, color=colors, width=0.62)\n",
    "for x, v in enumerate(vc.values):\n",
    "    axes[0].text(x, v, f\" {v}\", ha=\"center\", va=\"bottom\", fontsize=8.5, color=INK)\n",
    "axes[0].set_ylabel(\"cases\")\n",
    "axes[0].grid(axis=\"x\", visible=False)\n",
    "finish(axes[0], \"Response label, after validation\")\n",
    "\n",
    "if len(sub) >= 20:\n",
    "    order = [g for g in (\"responder\", \"progressor\") if (sub[\"response\"] == g).any()]\n",
    "    axes[1].boxplot(\n",
    "        [sub.loc[sub[\"response\"] == g, \"ecog\"].values for g in order],\n",
    "        tick_labels=[f\"{g}\\n(n={(sub['response'] == g).sum()})\" for g in order],\n",
    "        widths=0.45,\n",
    "        medianprops={\"color\": ACCENT, \"linewidth\": 2},\n",
    "        boxprops={\"color\": MUTED},\n",
    "        whiskerprops={\"color\": MUTED},\n",
    "        capprops={\"color\": MUTED},\n",
    "        flierprops={\"markeredgecolor\": MUTED, \"markersize\": 4},\n",
    "    )\n",
    "    axes[1].set_ylabel(\"ECOG performance status\")\n",
    "    axes[1].grid(axis=\"x\", visible=False)\n",
    "    finish(axes[1], \"Performance status by response group\")\n",
    "else:\n",
    "    axes[1].axis(\"off\")\n",
    "    axes[1].text(0.5, 0.5, \"too few cases carry both response and ECOG\",\n",
    "                 ha=\"center\", va=\"center\", color=MUTED)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a10b26b3",
   "metadata": {},
   "source": [
    "## 4. Which agents were actually given?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "fb11cdf2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:41:08.256053Z",
     "iopub.status.busy": "2026-09-21T00:41:08.255999Z",
     "iopub.status.idle": "2026-09-21T00:41:08.258796Z",
     "shell.execute_reply": "2026-09-21T00:41:08.258495Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Therapeutic agents recorded (case counts):\n",
      "  cisplatin                    60\n",
      "  paclitaxel                   35\n",
      "  carboplatin                  3\n",
      "  docetaxel                    3\n",
      "  not otherwise specified      2\n",
      "\n",
      "cases with any agent recorded: 63 of 212\n"
     ]
    }
   ],
   "source": [
    "agent_counts = Counter()\n",
    "for a in df[\"agents\"].dropna():\n",
    "    for part in a.split(\";\"):\n",
    "        part = part.strip()\n",
    "        if part:\n",
    "            agent_counts[part] += 1\n",
    "print(\"Therapeutic agents recorded (case counts):\")\n",
    "for agent, n in agent_counts.most_common(12):\n",
    "    print(f\"  {agent:<28} {n}\")\n",
    "print(f\"\\ncases with any agent recorded: {df['agents'].notna().sum()} of {len(df)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13500000",
   "metadata": {},
   "source": [
    "## 5. Honest limits of this analysis\n",
    "\n",
    "The analysis above is real and runs on open data, but three things bound what it can\n",
    "conclude, and all three are properties of the data rather than of the method:\n",
    "\n",
    "- **Stage is absent for all 212 cases.** Stage is the dominant prognostic factor in\n",
    "  cervical cancer, so no result here is stage-adjusted, and it cannot be made so from\n",
    "  the harmonized records.\n",
    "- **Therapeutic agents are recorded for under a third of patients**, so agent-specific\n",
    "  claims apply to a minority and possibly a non-random one.\n",
    "- **Treatment is not randomized.** Patients who received different therapy differ in\n",
    "  ways that are not recorded, so everything here is associative.\n",
    "\n",
    "What makes this cohort worth the effort anyway is what it uniquely offers: 207 of 212\n",
    "patients are Black African women, ECOG is informative for 98.6% of them, and no other\n",
    "public cervical cancer cohort of this size describes this population."
   ]
  }
 ],
 "metadata": {
  "cds": {
   "built_at": "2026-09-21T00:41:05.602810+00:00",
   "source": "workbooks/python/03_treatment_response_cervical.py"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
