[480cb7]: / 7_ligandbased_screening.ipynb

Download this file

2083 lines (2083 with data), 249.0 kB

{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "authorship_tag": "ABX9TyNmOGC0GGNjIbcmUUTxZoYs",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/francescopatane96/Computer_aided_drug_discovery_kit/blob/main/7_ligandbased_screening.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# 7. Ligand-based screening with ML"
      ],
      "metadata": {
        "id": "mnDnpeJiHC7z"
      }
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "Rr8OrkQkGzf7"
      },
      "outputs": [],
      "source": [
        "pip install rdkit"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from pathlib import Path\n",
        "from warnings import filterwarnings\n",
        "import time\n",
        "\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "from sklearn import svm, metrics, clone\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.neural_network import MLPClassifier\n",
        "from sklearn.model_selection import KFold, train_test_split\n",
        "from sklearn.metrics import auc, accuracy_score, recall_score\n",
        "from sklearn.metrics import roc_curve, roc_auc_score\n",
        "import matplotlib.pyplot as plt\n",
        "from rdkit import Chem\n",
        "from rdkit.Chem import MACCSkeys, rdFingerprintGenerator\n",
        "\n",
        "\n",
        "\n",
        "# Silence some expected warnings\n",
        "filterwarnings(\"ignore\")\n",
        "# Fix seed for reproducible results\n",
        "\n"
      ],
      "metadata": {
        "id": "Hy_noqtzIfZv"
      },
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Read data from previous talktorials\n",
        "chembl_df = pd.read_csv(\n",
        "    \"compounds_lipinski.csv\",\n",
        "    index_col=0,\n",
        ")\n",
        "\n",
        "# Look at head\n",
        "print(\"Shape of dataframe : \", chembl_df.shape)\n",
        "chembl_df.head()\n",
        "# NBVAL_CHECK_OUTPUT"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 461
        },
        "id": "jyV1NfgZIlrX",
        "outputId": "921fc759-7f54-41e5-8679-27fc822422a7"
      },
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Shape of dataframe :  (5431, 15)\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  molecule_chembl_id   IC50 units                               smiles  \\\n",
              "0        CHEMBL63786  0.003    nM    Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1   \n",
              "1        CHEMBL53711  0.006    nM   CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1   \n",
              "2        CHEMBL35820  0.006    nM  CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC   \n",
              "3        CHEMBL53753  0.008    nM      CNc1cc2c(Nc3cccc(Br)c3)ncnc2cn1   \n",
              "4        CHEMBL66031  0.008    nM  Brc1cccc(Nc2ncnc3cc4[nH]cnc4cc23)c1   \n",
              "\n",
              "       pIC50                                             ROMol  \\\n",
              "0  11.522879  <rdkit.Chem.rdchem.Mol object at 0x7c4034736490>   \n",
              "1  11.221849  <rdkit.Chem.rdchem.Mol object at 0x7c4034736500>   \n",
              "2  11.221849  <rdkit.Chem.rdchem.Mol object at 0x7c4034736570>   \n",
              "3  11.096910  <rdkit.Chem.rdchem.Mol object at 0x7c4034736420>   \n",
              "4  11.096910  <rdkit.Chem.rdchem.Mol object at 0x7c40347365e0>   \n",
              "\n",
              "   molecular_weight  n_hba  n_hbd    logp  molecular_weight.1  n_hba.1  \\\n",
              "0        349.021459      3      1  5.2891          349.021459        3   \n",
              "1        343.043258      5      1  3.5969          343.043258        5   \n",
              "2        387.058239      5      1  4.9333          387.058239        5   \n",
              "3        329.027607      5      2  3.5726          329.027607        5   \n",
              "4        339.011957      4      2  4.0122          339.011957        4   \n",
              "\n",
              "   n_hbd.1  logp.1  ro5_fulfilled  \n",
              "0        1  5.2891           True  \n",
              "1        1  3.5969           True  \n",
              "2        1  4.9333           True  \n",
              "3        2  3.5726           True  \n",
              "4        2  4.0122           True  "
            ],
            "text/html": [
              "\n",
              "\n",
              "  <div id=\"df-d47f121f-d018-4045-824b-2343c672fa24\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>molecule_chembl_id</th>\n",
              "      <th>IC50</th>\n",
              "      <th>units</th>\n",
              "      <th>smiles</th>\n",
              "      <th>pIC50</th>\n",
              "      <th>ROMol</th>\n",
              "      <th>molecular_weight</th>\n",
              "      <th>n_hba</th>\n",
              "      <th>n_hbd</th>\n",
              "      <th>logp</th>\n",
              "      <th>molecular_weight.1</th>\n",
              "      <th>n_hba.1</th>\n",
              "      <th>n_hbd.1</th>\n",
              "      <th>logp.1</th>\n",
              "      <th>ro5_fulfilled</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>CHEMBL63786</td>\n",
              "      <td>0.003</td>\n",
              "      <td>nM</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1</td>\n",
              "      <td>11.522879</td>\n",
              "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x7c4034736490&gt;</td>\n",
              "      <td>349.021459</td>\n",
              "      <td>3</td>\n",
              "      <td>1</td>\n",
              "      <td>5.2891</td>\n",
              "      <td>349.021459</td>\n",
              "      <td>3</td>\n",
              "      <td>1</td>\n",
              "      <td>5.2891</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>CHEMBL53711</td>\n",
              "      <td>0.006</td>\n",
              "      <td>nM</td>\n",
              "      <td>CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x7c4034736500&gt;</td>\n",
              "      <td>343.043258</td>\n",
              "      <td>5</td>\n",
              "      <td>1</td>\n",
              "      <td>3.5969</td>\n",
              "      <td>343.043258</td>\n",
              "      <td>5</td>\n",
              "      <td>1</td>\n",
              "      <td>3.5969</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>CHEMBL35820</td>\n",
              "      <td>0.006</td>\n",
              "      <td>nM</td>\n",
              "      <td>CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x7c4034736570&gt;</td>\n",
              "      <td>387.058239</td>\n",
              "      <td>5</td>\n",
              "      <td>1</td>\n",
              "      <td>4.9333</td>\n",
              "      <td>387.058239</td>\n",
              "      <td>5</td>\n",
              "      <td>1</td>\n",
              "      <td>4.9333</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>CHEMBL53753</td>\n",
              "      <td>0.008</td>\n",
              "      <td>nM</td>\n",
              "      <td>CNc1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.096910</td>\n",
              "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x7c4034736420&gt;</td>\n",
              "      <td>329.027607</td>\n",
              "      <td>5</td>\n",
              "      <td>2</td>\n",
              "      <td>3.5726</td>\n",
              "      <td>329.027607</td>\n",
              "      <td>5</td>\n",
              "      <td>2</td>\n",
              "      <td>3.5726</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>CHEMBL66031</td>\n",
              "      <td>0.008</td>\n",
              "      <td>nM</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4[nH]cnc4cc23)c1</td>\n",
              "      <td>11.096910</td>\n",
              "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x7c40347365e0&gt;</td>\n",
              "      <td>339.011957</td>\n",
              "      <td>4</td>\n",
              "      <td>2</td>\n",
              "      <td>4.0122</td>\n",
              "      <td>339.011957</td>\n",
              "      <td>4</td>\n",
              "      <td>2</td>\n",
              "      <td>4.0122</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d47f121f-d018-4045-824b-2343c672fa24')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "\n",
              "\n",
              "\n",
              "    <div id=\"df-4aec8cf4-9618-4e6c-b824-da39057a0374\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-4aec8cf4-9618-4e6c-b824-da39057a0374')\"\n",
              "              title=\"Suggest charts.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "    </div>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "    background-color: #E8F0FE;\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: #1967D2;\n",
              "    height: 32px;\n",
              "    padding: 0 0 0 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: #E2EBFA;\n",
              "    box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: #174EA6;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "    background-color: #3B4455;\n",
              "    fill: #D2E3FC;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart:hover {\n",
              "    background-color: #434B5C;\n",
              "    box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "    filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "    fill: #FFFFFF;\n",
              "  }\n",
              "</style>\n",
              "\n",
              "    <script>\n",
              "      async function quickchart(key) {\n",
              "        const containerElement = document.querySelector('#' + key);\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      }\n",
              "    </script>\n",
              "\n",
              "      <script>\n",
              "\n",
              "function displayQuickchartButton(domScope) {\n",
              "  let quickchartButtonEl =\n",
              "    domScope.querySelector('#df-4aec8cf4-9618-4e6c-b824-da39057a0374 button.colab-df-quickchart');\n",
              "  quickchartButtonEl.style.display =\n",
              "    google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "}\n",
              "\n",
              "        displayQuickchartButton(document);\n",
              "      </script>\n",
              "      <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-d47f121f-d018-4045-824b-2343c672fa24 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-d47f121f-d018-4045-824b-2343c672fa24');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Keep only the columns we want\n",
        "chembl_df = chembl_df[[\"molecule_chembl_id\", \"smiles\", \"pIC50\"]]\n",
        "chembl_df.head()\n",
        "# NBVAL_CHECK_OUTPUT"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "nk9OT7qRIxq_",
        "outputId": "3eefa62d-3dc0-409f-b5c4-5a079cf91b30"
      },
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  molecule_chembl_id                               smiles      pIC50\n",
              "0        CHEMBL63786    Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1  11.522879\n",
              "1        CHEMBL53711   CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1  11.221849\n",
              "2        CHEMBL35820  CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC  11.221849\n",
              "3        CHEMBL53753      CNc1cc2c(Nc3cccc(Br)c3)ncnc2cn1  11.096910\n",
              "4        CHEMBL66031  Brc1cccc(Nc2ncnc3cc4[nH]cnc4cc23)c1  11.096910"
            ],
            "text/html": [
              "\n",
              "\n",
              "  <div id=\"df-34b5d525-b689-46c5-83f2-67d925a1f297\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>molecule_chembl_id</th>\n",
              "      <th>smiles</th>\n",
              "      <th>pIC50</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>CHEMBL63786</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1</td>\n",
              "      <td>11.522879</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>CHEMBL53711</td>\n",
              "      <td>CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.221849</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>CHEMBL35820</td>\n",
              "      <td>CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC</td>\n",
              "      <td>11.221849</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>CHEMBL53753</td>\n",
              "      <td>CNc1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.096910</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>CHEMBL66031</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4[nH]cnc4cc23)c1</td>\n",
              "      <td>11.096910</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-34b5d525-b689-46c5-83f2-67d925a1f297')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "\n",
              "\n",
              "\n",
              "    <div id=\"df-e34d1f7b-7c73-46e2-accf-8745d8a3545d\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-e34d1f7b-7c73-46e2-accf-8745d8a3545d')\"\n",
              "              title=\"Suggest charts.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "    </div>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "    background-color: #E8F0FE;\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: #1967D2;\n",
              "    height: 32px;\n",
              "    padding: 0 0 0 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: #E2EBFA;\n",
              "    box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: #174EA6;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "    background-color: #3B4455;\n",
              "    fill: #D2E3FC;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart:hover {\n",
              "    background-color: #434B5C;\n",
              "    box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "    filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "    fill: #FFFFFF;\n",
              "  }\n",
              "</style>\n",
              "\n",
              "    <script>\n",
              "      async function quickchart(key) {\n",
              "        const containerElement = document.querySelector('#' + key);\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      }\n",
              "    </script>\n",
              "\n",
              "      <script>\n",
              "\n",
              "function displayQuickchartButton(domScope) {\n",
              "  let quickchartButtonEl =\n",
              "    domScope.querySelector('#df-e34d1f7b-7c73-46e2-accf-8745d8a3545d button.colab-df-quickchart');\n",
              "  quickchartButtonEl.style.display =\n",
              "    google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "}\n",
              "\n",
              "        displayQuickchartButton(document);\n",
              "      </script>\n",
              "      <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-34b5d525-b689-46c5-83f2-67d925a1f297 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-34b5d525-b689-46c5-83f2-67d925a1f297');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Add column for activity\n",
        "chembl_df[\"active\"] = np.zeros(len(chembl_df))\n",
        "\n",
        "# Mark every molecule as active with an pIC50 of >= 6.3, 0 otherwise\n",
        "chembl_df.loc[chembl_df[chembl_df.pIC50 >= 6.3].index, \"active\"] = 1.0\n",
        "\n",
        "# NBVAL_CHECK_OUTPUT\n",
        "print(\"Number of active compounds:\", int(chembl_df.active.sum()))\n",
        "print(\"Number of inactive compounds:\", len(chembl_df) - int(chembl_df.active.sum()))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "eESQTyr-I2XI",
        "outputId": "142c6dae-95a0-4b06-ffa3-1ce277670dc1"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Number of active compounds: 3240\n",
            "Number of inactive compounds: 2191\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "chembl_df.head()\n",
        "# NBVAL_CHECK_OUTPUT"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "MhlIbYWUI5bG",
        "outputId": "12ff3941-fec5-40b2-8cd0-d2fb2ace6e98"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  molecule_chembl_id                               smiles      pIC50  active\n",
              "0        CHEMBL63786    Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1  11.522879     1.0\n",
              "1        CHEMBL53711   CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1  11.221849     1.0\n",
              "2        CHEMBL35820  CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC  11.221849     1.0\n",
              "3        CHEMBL53753      CNc1cc2c(Nc3cccc(Br)c3)ncnc2cn1  11.096910     1.0\n",
              "4        CHEMBL66031  Brc1cccc(Nc2ncnc3cc4[nH]cnc4cc23)c1  11.096910     1.0"
            ],
            "text/html": [
              "\n",
              "\n",
              "  <div id=\"df-a0bae0f2-6ab1-4f7e-802d-b1887138244d\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>molecule_chembl_id</th>\n",
              "      <th>smiles</th>\n",
              "      <th>pIC50</th>\n",
              "      <th>active</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>CHEMBL63786</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1</td>\n",
              "      <td>11.522879</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>CHEMBL53711</td>\n",
              "      <td>CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>CHEMBL35820</td>\n",
              "      <td>CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>CHEMBL53753</td>\n",
              "      <td>CNc1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.096910</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>CHEMBL66031</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4[nH]cnc4cc23)c1</td>\n",
              "      <td>11.096910</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a0bae0f2-6ab1-4f7e-802d-b1887138244d')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "\n",
              "\n",
              "\n",
              "    <div id=\"df-509b0650-3274-4e9c-96df-6e5dd98c2d5e\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-509b0650-3274-4e9c-96df-6e5dd98c2d5e')\"\n",
              "              title=\"Suggest charts.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "    </div>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "    background-color: #E8F0FE;\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: #1967D2;\n",
              "    height: 32px;\n",
              "    padding: 0 0 0 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: #E2EBFA;\n",
              "    box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: #174EA6;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "    background-color: #3B4455;\n",
              "    fill: #D2E3FC;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart:hover {\n",
              "    background-color: #434B5C;\n",
              "    box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "    filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "    fill: #FFFFFF;\n",
              "  }\n",
              "</style>\n",
              "\n",
              "    <script>\n",
              "      async function quickchart(key) {\n",
              "        const containerElement = document.querySelector('#' + key);\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      }\n",
              "    </script>\n",
              "\n",
              "      <script>\n",
              "\n",
              "function displayQuickchartButton(domScope) {\n",
              "  let quickchartButtonEl =\n",
              "    domScope.querySelector('#df-509b0650-3274-4e9c-96df-6e5dd98c2d5e button.colab-df-quickchart');\n",
              "  quickchartButtonEl.style.display =\n",
              "    google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "}\n",
              "\n",
              "        displayQuickchartButton(document);\n",
              "      </script>\n",
              "      <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-a0bae0f2-6ab1-4f7e-802d-b1887138244d button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-a0bae0f2-6ab1-4f7e-802d-b1887138244d');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def smiles_to_fp(smiles, method=\"maccs\", n_bits=2048):\n",
        "    \"\"\"\n",
        "    Encode a molecule from a SMILES string into a fingerprint.\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    smiles : str\n",
        "        The SMILES string defining the molecule.\n",
        "\n",
        "    method : str\n",
        "        The type of fingerprint to use. Default is MACCS keys.\n",
        "\n",
        "    n_bits : int\n",
        "        The length of the fingerprint.\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    array\n",
        "        The fingerprint array.\n",
        "\n",
        "    \"\"\"\n",
        "\n",
        "    # convert smiles to RDKit mol object\n",
        "    mol = Chem.MolFromSmiles(smiles)\n",
        "\n",
        "    if method == \"maccs\":\n",
        "        return np.array(MACCSkeys.GenMACCSKeys(mol))\n",
        "    if method == \"morgan2\":\n",
        "        fpg = rdFingerprintGenerator.GetMorganGenerator(radius=2, fpSize=n_bits)\n",
        "        return np.array(fpg.GetFingerprint(mol))\n",
        "    if method == \"morgan3\":\n",
        "        fpg = rdFingerprintGenerator.GetMorganGenerator(radius=3, fpSize=n_bits)\n",
        "        return np.array(fpg.GetFingerprint(mol))\n",
        "    else:\n",
        "        # NBVAL_CHECK_OUTPUT\n",
        "        print(f\"Warning: Wrong method specified: {method}. Default will be used instead.\")\n",
        "        return np.array(MACCSkeys.GenMACCSKeys(mol))"
      ],
      "metadata": {
        "id": "lWZbQUPrI8vu"
      },
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "compound_df = chembl_df.copy()"
      ],
      "metadata": {
        "id": "mGWfhNA_I_Ly"
      },
      "execution_count": 8,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Add column for fingerprint\n",
        "compound_df[\"fp\"] = compound_df[\"smiles\"].apply(smiles_to_fp)\n",
        "compound_df.head(3)\n",
        "# NBVAL_CHECK_OUTPUT"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 344
        },
        "id": "oa1OCn5tJBbe",
        "outputId": "4f366685-12e3-487f-8d24-a3f1fe586b6c"
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  molecule_chembl_id                               smiles      pIC50  active  \\\n",
              "0        CHEMBL63786    Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1  11.522879     1.0   \n",
              "1        CHEMBL53711   CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1  11.221849     1.0   \n",
              "2        CHEMBL35820  CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC  11.221849     1.0   \n",
              "\n",
              "                                                  fp  \n",
              "0  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
              "1  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
              "2  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  "
            ],
            "text/html": [
              "\n",
              "\n",
              "  <div id=\"df-8ee2aeb8-05ee-4a9f-b912-997e4dbc2503\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>molecule_chembl_id</th>\n",
              "      <th>smiles</th>\n",
              "      <th>pIC50</th>\n",
              "      <th>active</th>\n",
              "      <th>fp</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>CHEMBL63786</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1</td>\n",
              "      <td>11.522879</td>\n",
              "      <td>1.0</td>\n",
              "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>CHEMBL53711</td>\n",
              "      <td>CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>1.0</td>\n",
              "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>CHEMBL35820</td>\n",
              "      <td>CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>1.0</td>\n",
              "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-8ee2aeb8-05ee-4a9f-b912-997e4dbc2503')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "\n",
              "\n",
              "\n",
              "    <div id=\"df-854687ac-5f96-4ba0-a9ca-779519efa4b2\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-854687ac-5f96-4ba0-a9ca-779519efa4b2')\"\n",
              "              title=\"Suggest charts.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "    </div>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "    background-color: #E8F0FE;\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: #1967D2;\n",
              "    height: 32px;\n",
              "    padding: 0 0 0 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: #E2EBFA;\n",
              "    box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: #174EA6;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "    background-color: #3B4455;\n",
              "    fill: #D2E3FC;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart:hover {\n",
              "    background-color: #434B5C;\n",
              "    box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "    filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "    fill: #FFFFFF;\n",
              "  }\n",
              "</style>\n",
              "\n",
              "    <script>\n",
              "      async function quickchart(key) {\n",
              "        const containerElement = document.querySelector('#' + key);\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      }\n",
              "    </script>\n",
              "\n",
              "      <script>\n",
              "\n",
              "function displayQuickchartButton(domScope) {\n",
              "  let quickchartButtonEl =\n",
              "    domScope.querySelector('#df-854687ac-5f96-4ba0-a9ca-779519efa4b2 button.colab-df-quickchart');\n",
              "  quickchartButtonEl.style.display =\n",
              "    google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "}\n",
              "\n",
              "        displayQuickchartButton(document);\n",
              "      </script>\n",
              "      <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-8ee2aeb8-05ee-4a9f-b912-997e4dbc2503 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-8ee2aeb8-05ee-4a9f-b912-997e4dbc2503');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def plot_roc_curves_for_models(models, test_x, test_y, save_png=False):\n",
        "    \"\"\"\n",
        "    Helper function to plot customized roc curve.\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    models: dict\n",
        "        Dictionary of pretrained machine learning models.\n",
        "    test_x: list\n",
        "        Molecular fingerprints for test set.\n",
        "    test_y: list\n",
        "        Associated activity labels for test set.\n",
        "    save_png: bool\n",
        "        Save image to disk (default = False)\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    fig:\n",
        "        Figure.\n",
        "    \"\"\"\n",
        "\n",
        "    fig, ax = plt.subplots()\n",
        "\n",
        "    # Below for loop iterates through your models list\n",
        "    for model in models:\n",
        "        # Select the model\n",
        "        ml_model = model[\"model\"]\n",
        "        # Prediction probability on test set\n",
        "        test_prob = ml_model.predict_proba(test_x)[:, 1]\n",
        "        # Prediction class on test set\n",
        "        test_pred = ml_model.predict(test_x)\n",
        "        # Compute False postive rate and True positive rate\n",
        "        fpr, tpr, thresholds = metrics.roc_curve(test_y, test_prob)\n",
        "        # Calculate Area under the curve to display on the plot\n",
        "        auc = roc_auc_score(test_y, test_prob)\n",
        "        # Plot the computed values\n",
        "        ax.plot(fpr, tpr, label=(f\"{model['label']} AUC area = {auc:.2f}\"))\n",
        "\n",
        "    # Custom settings for the plot\n",
        "    ax.plot([0, 1], [0, 1], \"r--\")\n",
        "    ax.set_xlabel(\"False Positive Rate\")\n",
        "    ax.set_ylabel(\"True Positive Rate\")\n",
        "    ax.set_title(\"Receiver Operating Characteristic\")\n",
        "    ax.legend(loc=\"lower right\")\n",
        "    # Save plot\n",
        "    if save_png:\n",
        "        fig.savefig(f\"roc_auc\", dpi=300, bbox_inches=\"tight\", transparent=True)\n",
        "    return fig"
      ],
      "metadata": {
        "id": "qfmwZX0GJM9n"
      },
      "execution_count": 23,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def model_performance(ml_model, test_x, test_y, verbose=True):\n",
        "    \"\"\"\n",
        "    Helper function to calculate model performance\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    ml_model: sklearn model object\n",
        "        The machine learning model to train.\n",
        "    test_x: list\n",
        "        Molecular fingerprints for test set.\n",
        "    test_y: list\n",
        "        Associated activity labels for test set.\n",
        "    verbose: bool\n",
        "        Print performance measure (default = True)\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    tuple:\n",
        "        Accuracy, sensitivity, specificity, auc on test set.\n",
        "    \"\"\"\n",
        "\n",
        "    # Prediction probability on test set\n",
        "    test_prob = ml_model.predict_proba(test_x)[:, 1]\n",
        "\n",
        "    # Prediction class on test set\n",
        "    test_pred = ml_model.predict(test_x)\n",
        "\n",
        "    # Performance of model on test set\n",
        "    accuracy = accuracy_score(test_y, test_pred)\n",
        "    sens = recall_score(test_y, test_pred)\n",
        "    spec = recall_score(test_y, test_pred, pos_label=0)\n",
        "    auc = roc_auc_score(test_y, test_prob)\n",
        "\n",
        "    if verbose:\n",
        "        # Print performance results\n",
        "        # NBVAL_CHECK_OUTPUT        print(f\"Accuracy: {accuracy:.2}\")\n",
        "        print(f\"Sensitivity: {sens:.2f}\")\n",
        "        print(f\"Specificity: {spec:.2f}\")\n",
        "        print(f\"AUC: {auc:.2f}\")\n",
        "\n",
        "    return accuracy, sens, spec, auc"
      ],
      "metadata": {
        "id": "W5Dg1n1kJPo-"
      },
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def model_training_and_validation(ml_model, name, splits, verbose=True):\n",
        "    \"\"\"\n",
        "    Fit a machine learning model on a random train-test split of the data\n",
        "    and return the performance measures.\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    ml_model: sklearn model object\n",
        "        The machine learning model to train.\n",
        "    name: str\n",
        "        Name of machine learning algorithm: RF, SVM, ANN\n",
        "    splits: list\n",
        "        List of desciptor and label data: train_x, test_x, train_y, test_y.\n",
        "    verbose: bool\n",
        "        Print performance info (default = True)\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    tuple:\n",
        "        Accuracy, sensitivity, specificity, auc on test set.\n",
        "\n",
        "    \"\"\"\n",
        "    train_x, test_x, train_y, test_y = splits\n",
        "\n",
        "    # Fit the model\n",
        "    ml_model.fit(train_x, train_y)\n",
        "\n",
        "    # Calculate model performance results\n",
        "    accuracy, sens, spec, auc = model_performance(ml_model, test_x, test_y, verbose)\n",
        "\n",
        "    return accuracy, sens, spec, auc"
      ],
      "metadata": {
        "id": "Wk2Io_jBJR_1"
      },
      "execution_count": 12,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "fingerprint_to_model = compound_df.fp.tolist()\n",
        "label_to_model = compound_df.active.tolist()\n",
        "\n",
        "# Split data randomly in train and test set\n",
        "# note that we use test/train_x for the respective fingerprint splits\n",
        "# and test/train_y for the respective label splits\n",
        "(\n",
        "    static_train_x,\n",
        "    static_test_x,\n",
        "    static_train_y,\n",
        "    static_test_y,\n",
        ") = train_test_split(fingerprint_to_model, label_to_model, test_size=0.2)\n",
        "splits = [static_train_x, static_test_x, static_train_y, static_test_y]\n",
        "# NBVAL_CHECK_OUTPUT\n",
        "print(\"Training data size:\", len(static_train_x))\n",
        "print(\"Test data size:\", len(static_test_x))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "88Y4pIPqJUSy",
        "outputId": "52e0cbad-fcb2-4e99-9457-8bef8cd1f95f"
      },
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training data size: 4344\n",
            "Test data size: 1087\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Set model parameter for random forest\n",
        "param = {\n",
        "    \"n_estimators\": 100,  # number of trees to grows\n",
        "    \"criterion\": \"entropy\",  # cost function to be optimized for a split\n",
        "}\n",
        "model_RF = RandomForestClassifier(**param)"
      ],
      "metadata": {
        "id": "uiXhKkQQJbug"
      },
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Fit model on single split\n",
        "performance_measures = model_training_and_validation(model_RF, \"RF\", splits)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "srnZbkH4JeDk",
        "outputId": "267637b5-31f6-449f-932f-67bc58cd2930"
      },
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Sensitivity: 0.86\n",
            "Specificity: 0.72\n",
            "AUC: 0.86\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Initialize the list that stores all models. First one is RF.\n",
        "models = [{\"label\": \"Model_RF\", \"model\": model_RF}]\n",
        "# Plot roc curve\n",
        "plot_roc_curves_for_models(models, static_test_x, static_test_y);"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "zhK5ki29JhVI",
        "outputId": "bfc92be5-e28a-4320-8872-f29ab083686e"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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2b9/v7nO/PnzGTJkCC1atOCtt94iNDSULl26UKxYsYd2Jf3yyy+kpKTQq1evB9a7X9euXSlfvjxTp04lODiYxYsX4+XlxbRp09LEVbNmTZ577jlsbGz48ccfGTRoECaTicGDB6e53smTJ+nevTuvv/46AwYMoGrVqhZdY9myZfTr14+aNWvyzjvv4OHhwaFDh9i8eTM9evTg3XffJTIyksuXL5tbolxcXAAs/v347bffWLNmDUOGDMHT0zNdF2OqN954g3Xr1jFkyBBq1KjBrVu32L17N8ePH6d+/foPjCkj//zzDy1atMDW1pbXXnsNf39/zp49y48//sjkyZOz9oMTBYve2ZUQWZH61/u2bdvUzZs31aVLl9S6detUyZIllb29vbp06ZK5brt27VStWrXS/OVoMplU06ZNVeXKlc1l48ePV4DasGFDuvczmUxKKaW+/vprZWVlpf744480ry9YsEABas+ePeaye1tulFLqnXfeUba2tioiIsJclpiYqDw8PNK0pvTv31/5+Pio8PDwNO/RrVs35e7ubm5VSW2RqFChgrnsQbp06aKATFt2lFJqw4YNClCffvqpUuruX72Ojo7q8uXL5nr79+9XgHrrrbfMZVm9z6k/u+bNm6uUlJQ075/R50htcVq+fLm5bO3atWlaa+6VWctN9erVVWJiorl8zpw5CjC3QCUmJqoSJUqohg0bquTkZHO9ZcuWKeChLTdvvfWWAtShQ4ceWC9VasvN/S1pzz//vCpRokSasozuS4cOHVSFChXSlJUrV04BavPmzenqZ+Uad+7cUa6urqpx48YqPj4+Td3U3wGllHrmmWfStNaksuT3A1BWVlbq6NGj6a7DfS037u7uavDgwenq3SuzmDJquWnZsqVydXVVFy5cyPQzisIlf41+FOIh2rdvT8mSJfHz8+Oll17C2dmZjRs3mv/KjoiI4LfffqNr165ER0cTHh5OeHg4t27dokOHDpw+fdo8u2r9+vXUqVMnXQsDaP32AGvXrqV69epUq1bNfK3w8HDatm0LwI4dOzKNNTAwkOTkZDZs2GAu+/XXX7lz5w6BgYGANkZi/fr1dOrUCaVUmvfo0KEDkZGRBAcHp7luUFBQlsZUREdHA+Dq6pppndTXoqKi0pR36dIFX19f83GjRo1o3LgxmzZtAiy7z6kGDBiQbuDyvZ8jOTmZ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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Specify model\n",
        "model_SVM = svm.SVC(kernel=\"rbf\", C=1, gamma=0.1, probability=True)\n",
        "\n",
        "# Fit model on single split\n",
        "performance_measures = model_training_and_validation(model_SVM, \"SVM\", splits)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "agNe2fMbJkvR",
        "outputId": "a657a622-4cf3-4f29-c80f-f470689011ac"
      },
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Sensitivity: 0.90\n",
            "Specificity: 0.72\n",
            "AUC: 0.87\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Append SVM model\n",
        "models.append({\"label\": \"Model_SVM\", \"model\": model_SVM})\n",
        "# Plot roc curve\n",
        "plot_roc_curves_for_models(models, static_test_x, static_test_y);"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "nL1eKszjJnVn",
        "outputId": "21626e12-9690-454c-f7a5-84faac6c63d5"
      },
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZcElEQVR4nOzdd1xV9f/A8ddlgywVEEUU994r986Wo6U5cWSZI9OfmlpplmZ+zVmOcmZp7krLLDO1NFei5jZR3KCIsue9n98fRy5eAQUEDuP9fDxunfM5477vRbjv+5kGpZRCCCGEEKKAsNI7ACGEEEKI7CTJjRBCCCEKFEluhBBCCFGgSHIjhBBCiAJFkhshhBBCFCiS3AghhBCiQJHkRgghhBAFiiQ3QgghhChQJLkRQgghRIEiyY0Q2cTPz4/+/fvrHUah06ZNG9q0aaN3GI/14YcfYjAYCA0N1TuUPMdgMPDhhx9my72CgoIwGAysXLkyW+4n8idJbkS+sHLlSgwGg/lhY2ODj48P/fv35/r163qHl6dFR0fz8ccfU7t2bZycnHBzc6Nly5asWrWK/LL6yunTp/nwww8JCgrSO5RUjEYjK1asoE2bNhQrVgx7e3v8/PwYMGAA//zzj97hZYs1a9Ywd+5cvcOwkBdjEnmHjd4BCJEZH330EeXKlSMuLo4DBw6wcuVK9u7dy8mTJ3FwcNA1tnPnzmFllbe+L4SEhNC+fXvOnDnDa6+9xvDhw4mLi2PTpk34+/uzbds2Vq9ejbW1td6hPtLp06eZMmUKbdq0wc/Pz+LYb7/9pk9QQGxsLC+99BLbt2+nVatWTJw4kWLFihEUFMT69ev5+uuvuXLlCqVLl9YtxuywZs0aTp48yTvvvJMj94+NjcXGJnMfR+nFVLZsWWJjY7G1tc3GCEV+I8mNyFeeffZZGjZsCMDrr7+Oh4cHM2bMYMuWLXTv3l3X2Ozt7XP9OePi4rCzs0s3qfL39+fMmTN8//33dOnSxVz+9ttvM3bsWD777DPq1avHu+++m1shA1ptUpEiRbLlXnZ2dtlyn6wYO3Ys27dvZ86cOak+ZCdPnsycOXNyNR6lFHFxcTg6Oubq82aFyWQiISEBBweHbP1iYjAYdP+iI/IAJUQ+sGLFCgWow4cPW5T/9NNPClCffPKJRfmZM2fUyy+/rIoWLars7e1VgwYN1I8//pjqvnfv3lXvvPOOKlu2rLKzs1M+Pj6qb9++6vbt2+Zz4uLi1KRJk1SFChWUnZ2dKl26tBo7dqyKi4uzuFfZsmWVv7+/Ukqpw4cPK0CtXLky1XNu375dAWrr1q3msmvXrqkBAwYoLy8vZWdnp6pXr66WLVtmcd2uXbsUoL777jv13nvvqVKlSimDwaDu3r2b5nu2f/9+BaiBAwemeTwxMVFVqlRJFS1aVMXExCillLp06ZIC1MyZM9Xs2bNVmTJllIODg2rVqpU6ceJEqntk5H1O/tnt3r1bvfXWW8rT01O5u7srpZQKCgpSb731lqpcubJycHBQxYoVU6+88oq6dOlSqusffuzatUsppVTr1q1V69atU71P69atU1OnTlU+Pj7K3t5etWvXTv3333+pXsMXX3yhypUrpxwcHFSjRo3Un3/+meqeabl69aqysbFRHTt2fOR5ySZPnqwA9d9//yl/f3/l5uamXF1dVf/+/VV0dLTFucuXL1dt27ZVnp6eys7OTlWrVk0tXLgw1T3Lli2rnn/+ebV9+3bVoEEDZW9vr+bMmZOpeyil1LZt21SrVq2Us7OzcnFxUQ0bNlSrV69WSmnv78PvfdmyZc3XZvT3A1DDhg1T3377rapevbqysbFR33//vfnY5MmTzedGRESokSNHmn8vPT09VYcOHdSRI0ceG1Pyv+EVK1ZYPP+ZM2fUq6++qjw8PJSDg4OqXLmymjhx4qN+ZCIfk5obka8l98EoWrSouezUqVM0b94cHx8fxo8fT5EiRVi/fj3dunVj06ZNvPjiiwBERUXRsmVLzpw5w8CBA6lfvz6hoaFs2bKFa9eu4eHhgclkokuXLuzdu5c33niDatWqceLECebMmcP58+f54Ycf0oyrYcOGlC9fnvXr1+Pv729xbN26dRQtWpROnToBWtPRU089hcFgYPjw4Xh6evLLL78waNAgIiIiUtUIfPzxx9jZ2TFmzBji4+PTrbnYunUrAP369UvzuI2NDb169WLKlCns27ePDh06mI+tWrWKyMhIhg0bRlxcHPPmzaNdu3acOHGCEiVKZOp9TjZ06FA8PT2ZNGkS0dHRABw+fJi///6b1157jdKlSxMUFMSiRYto06YNp0+fxsnJiVatWvH2228zf/58Jk6cSLVq1QDM/0/Pp59+ipWVFWPGjCE8PJz//e9/9O7dm4MHD5rPWbRoEcOHD6dly5aMGjWKoKAgunXrRtGiRR/blPTLL7+QlJRE3759H3new7p37065cuWYPn06AQEBLF26FC8vL2bMmGERV40aNejSpQs2NjZs3bqVoUOHYjKZGDZsmMX9zp07R8+ePXnzzTcZPHgwVapUydQ9Vq5cycCBA6lRowYTJkzA3d2do0ePsn37dnr16sV7771HeHg4165dM9dEOTs7A2T69+OPP/5g/fr1DB8+HA8Pj1RNjMmGDBnCxo0bGT58ONWrV+fOnTvs3buXM2fOUL9+/UfGlJZ///2Xli1bYmtryxtvvIGfnx+BgYFs3bqVadOmZewHJ/IXvbMrITIi+dv777//rm7fvq2uXr2qNm7cqDw9PZW9vb26evWq+dz27durWrVqWXxzNJlMqlmzZqpSpUrmskmTJilAbd68OdXzmUwmpZRS33zzjbKyslJ//fWXxfHFixcrQO3bt89c9mDNjVJKTZgwQdna2qqwsDBzWXx8vHJ3d7eoTRk0aJAqWbKkCg0NtXiO1157Tbm5uZlrVZJrJMqXL28ue5Ru3bopIN2aHaWU2rx5swLU/PnzlVIp33odHR3VtWvXzOcdPHhQAWrUqFHmsoy+z8k/uxYtWqikpCSL50/rdSTXOK1atcpctmHDBovamgelV3NTrVo1FR8fby6fN2+eAsw1UPHx8ap48eKqUaNGKjEx0XzeypUrFfDYmptRo0YpQB09evSR5yVLrrl5uCbtxRdfVMWLF7coS+t96dSpkypfvrxFWdmyZRWgtm/fnur8jNzj3r17ysXFRTVp0kTFxsZanJv8O6CUUs8//7xFbU2yzPx+AMrKykqdOnUq1X14qObGzc1NDRs2LNV5D0ovprRqblq1aqVcXFzU5cuX032NomDJW70fhXiMDh064Onpia+vL6+88gpFihRhy5Yt5m/ZYWFh/PHHH3Tv3p3IyEhCQ0MJDQ3lzp07dOrUif/++888umrTpk3UqVMnVQ0DaO32ABs2bKBatWpUrVrVfK/Q0FDatWsHwK5du9KNtUePHiQmJrJ582Zz2W+//ca9e/fo0aMHoPWR2LRpE507d0YpZfEcnTp1Ijw8nICAAIv7+vv7Z6hPRWRkJAAuLi7pnpN8LCIiwqK8W7du+Pj4mPcbN25MkyZN2LZtG5C59znZ4MGDU3VcfvB1JCYmcufOHSpWrIi7u3uq151ZAwYMsKjVatmyJQAXL14E4J9//uHOnTsMHjzYojNr7969LWoC05P8nj3q/U3LkCFDLPZbtmzJnTt3LH4GD74v4eHhhIaG0rp1ay5evEh4eLjF9eXKlTPXAj4oI/fYsWMHkZGRjB8/PlU/leTfgUfJ7O9H69atqV69+mPv6+7uzsGDB7lx48Zjz32c27dv8+effzJw4EDKlCljcSwjr1HkT9IsJfKVBQsWULlyZcLDw1m+fDl//vmnRUfeCxcuoJTigw8+4IMPPkjzHrdu3cLHx4fAwEBefvnlRz7ff//9x5kzZ/D09Ez3XumpU6cOVatWZd26dQwaNAjQmqQ8PDzMf/xv377NvXv3+Oqrr/jqq68y9BzlypV7ZMzJkj90IyMjcXd3T/Oc9BKgSpUqpTq3cuXKrF+/Hsjc+/youGNjY5k+fTorVqzg+vXrFkPTH/4Qz6yHP8iSE5a7d+8CcPnyZQAqVqxocZ6NjU26zSUPcnV1BVLew+yIK/me+/btY/Lkyezfv5+YmBiL88PDw3FzczPvp/fvISP3CAwMBKBmzZqZeg3JMvv7kdF/u//73//w9/fH19eXBg0a8Nxzz9GvXz/Kly+f6RiTk9msvkaRP0lyI/KVxo0bm0dLdevWjRYtWtCrVy/OnTuHs7MzJpMJgDFjxqT5bRZSf5g9islkolatWsyePTvN476+vo+8vkePHkybNo3Q0FBcXFzYsmULPXv2NNcUJMfbp0+fVH1zktWuXdtiP6MjYapVq8YPP/zAv//+S6tWrdI8599//wXI0LfpB2XlfU4r7hEjRrBixQreeecdmjZtipubGwaDgddee838HFmV3vB2lU1z+1StWhWAEydOULdu3Qxf97i4AgMDad++PVWrVmX27Nn4+vpiZ2fHtm3bmDNnTqr3Ja33NbP3yKrM/n5k9N9u9+7dadmyJd9//z2//fYbM2fOZMaMGWzevJlnn332ieMWBZ8kNyLfsra2Zvr06bRt25YvvviC8ePHm7/Z2draWnSQTUuFChU4efLkY885fvw47du3z1IVdo8ePZgyZQqbNm2iRIkSRERE8Nprr5mPe3p64uLigtFofGy8mfXCCy8wffp0Vq1alWZyYzQaWbNmDUWLFqV58+YWx/77779U558/f95co5GZ9/lRNm7ciL+/P7NmzTKXxcXFce/ePYvzcqL5oGzZsoBWC9W2bVtzeVJSEkFBQamSyoc9++yzWFtb8+2332a6U/GjbN26lfj4eLZs2WJRy/OoJtCs3qNChQoAnDx58pFJf3rv/5P+fjxKyZIlGTp0KEOHDuXWrVvUr1+fadOmmZObjD5f8r/Vx/2ui4JF+tyIfK1NmzY0btyYuXPnEhcXh5eXF23atOHLL7/k5s2bqc6/ffu2efvll1/m+PHjfP/996nOS/4W3b17d65fv86SJUtSnRMbG2se9ZOeatWqUatWLdatW8e6desoWbKkRaJhbW3Nyy+/zKZNm9L84/tgvJnVrFkzOnTowIoVK/jpp59SHX/vvfc4f/4848aNS/WN+ocffrDoM3Po0CEOHjxo/mDJzPv8KNbW1qlqUj7//HOMRqNFWfKcOA8nPU+iYcOGFC9enCVLlpCUlGQuX716tbnp6lF8fX0ZPHgwv/32G59//nmq4yaTiVmzZnHt2rVMxZVcs/NwE92KFSuy/R5PP/00Li4uTJ8+nbi4OItjD15bpEiRNJsJn/T3Iy1GozHVc3l5eVGqVCni4+MfG9PDPD09adWqFcuXL+fKlSsWx7KrFk/kPVJzI/K9sWPH8uqrr7Jy5UqGDBnCggULaNGiBbVq1WLw4MGUL1+ekJAQ9u/fz7Vr1zh+/Lj5uo0bN/Lqq68ycOBAGjRoQFhYGFu2bGHx4sXUqVOHvn37sn79eoYMGcKuXbto3rw5RqORs2fPsn79en799VdzM1l6evTowaRJk3BwcGDQoEGpJtz79NNP2bVrF02aNGHw4MFUr16dsLAwAgIC+P333wkLC8vye7Nq1Srat29P165d6dWrFy1btiQ+Pp7Nmzeze/duevTowdixY1NdV7FiRVq0aMFbb71FfHw8c+fOpXjx4owbN858Tkbf50d54YUX+Oabb3Bzc6N69ers37+f33//neLFi1ucV7duXaytrZkxYwbh4eHY29vTrl07vLy8svze2NnZ8eGHHzJixAjatWtH9+7dCQoKYuXKlVSoUCFDNQOzZs0iMDCQt99+m82bN/PCCy9QtGhRrly5woYNGzh79qxFTV1GPP3009jZ2dG5c2fefPNNoqKiWLJkCV5eXmkmkk9yD1dXV+bMmcPrr79Oo0aN6NWrF0WLFuX48ePExMTw9ddfA9CgQQPWrVvH6NGjadSoEc7OznTu3Dlbfj8eFhkZSenSpXnllVeoU6cOzs7O/P777xw+fNiihi+9mNIyf/58WrRoQf369XnjjTcoV64cQUFB/Pzzzxw7dixT8Yl8QpcxWkJkUnqT+CmllNFoVBUqVFAVKlQwDzUODAxU/fr1U97e3srW1lb5+PioF154QW3cuNHi2jt37qjhw4crHx8f8wRk/v7+FsOyExIS1IwZM1SNGjWUvb29Klq0qGrQoIGaMmWKCg8PN5/38FDwZP/99595orG9e/em+fpCQkLUsGHDlK+vr7K1tVXe3t6qffv26quvvjKfkzzEecOGDZl67yIjI9WHH36oatSooRwdHZWLi4tq3ry5WrlyZaqhsA9O4jdr1izl6+ur7O3tVcuWLdXx48dT3Tsj7/OjfnZ3795VAwYMUB4eHsrZ2Vl16tRJnT17Ns33csmSJap8+fLK2to6Q5P4Pfw+pTe52/z581XZsmWVvb29aty4sdq3b59q0KCBeuaZZzLw7iqVlJSkli5dqlq2bKnc3NyUra2tKlu2rBowYIDFMPHkoeAPThD54Pvz4MSFW7ZsUbVr11YODg7Kz89PzZgxQy1fvjzVecmT+KUlo/dIPrdZs2bK0dFRubq6qsaNG6vvvvvOfDwqKkr16tVLubu7p5rEL6O/H9yfxC8tPDAUPD4+Xo0dO1bVqVNHubi4qCJFiqg6deqkmoAwvZjS+zmfPHlSvfjii8rd3V05ODioKlWqqA8++CDNeET+Z1BK6uWEEJqgoCDKlSvHzJkzGTNmjN7h6MJkMuHp6clLL72UZnOLECLvkz43QohCKy4uLlW/i1WrVhEWFkabNm30CUoI8cSkz40QotA6cOAAo0aN4tVXX6V48eIEBASwbNkyatasyauvvqp3eEKILJLkRghRaPn5+eHr68v8+fMJCwujWLFi9OvXj08//VTX1caFEE9G+twIIYQQokCRPjdCCCGEKFAkuRFCCCFEgVLo+tyYTCZu3LiBi4uLrAgrhBBC5BNKKSIjIylVqlSqyVAfVuiSmxs3bjx2sUMhhBBC5E1Xr16ldOnSjzyn0CU3Li4ugPbmuLq66hyNEEIIITIiIiICX19f8+f4oxS65Ca5KcrV1VWSGyGEECKfyUiXEulQLIQQQogCRZIbIYQQQhQoktwIIYQQokCR5EYIIYQQBYokN0IIIYQoUCS5EUIIIUSBIsmNEEIIIQoUSW6EEEIIUaBIciOEEEKIAkWSGyGEEEIUKLomN3/++SedO3emVKlSGAwGfvjhh8des3v3burXr4+9vT0VK1Zk5cqVOR6nEEIIIfIPXZOb6Oho6tSpw4IFCzJ0/qVLl3j++edp27Ytx44d45133uH111/n119/zeFIhRBCCJFf6Lpw5rPPPsuzzz6b4fMXL15MuXLlmDVrFgDVqlVj7969zJkzh06dOuVUmEIIIYR4WHwUKuYOSSZFkkmRmKRIMBlJMiqsbBzwKlVGt9Dy1arg+/fvp0OHDhZlnTp14p133kn3mvj4eOLj4837ERERORWeEEIIka2SjCbik0wkJJlIvL+daDSRaFQkGk0kGFOOJRpNJCTdL3+wzGhZlmA0kZiURtn9+yYkmTAmJWCVFEuS0UjnmB9wMd7DpJT2MClKqFBaGY5iAGzvPxwfiPucbTW83jugz5tGPktugoODKVGihEVZiRIliIiIIDY2FkdHx1TXTJ8+nSlTpuRWiEIIIQq4hCQTsQlGohOSiEkwmrdjE4zEPLQdm5BEbKKR+CQT8Ykm4pPubyfd3058YDuNc4wmla2xv2z1JxWtrj/yHHei6Gmz69E3MqRsxilbiDGBAopovV2MBn3Ti3yV3GTFhAkTGD16tHk/IiICX19fHSMSQgihF5NJEZNoJOZ+AhIdbyQ2UUtStEdKwpJgNFlc9/OJYM7czJ3a/+ZWJ6htuATWKWUGA1hbGVIeBu3/VvfLbawMWFlZmcutrVLOdyCBjre/znI8CgPB9Ufdv7d2XytrG5KqdMHufAhF+vdFVa2G4dftGGxsqJ4N78GTyFfJjbe3NyEhIRZlISEhuLq6pllrA2Bvb4+9vX1uhCeEECK33LsKF3aAMqV7itozk4SYcBJMaLUKKf/D4f6jaCaesh/AAx8nhvv/MdyvxjAYUio0DAbDQ+ckX5Oyk3LuA8cA68TIxweT/LKNmXgBD3pq2KOPGwxQrTOUqg8GAwZrW0qmisEE06fDpElgMmFwdYXbt6FkqjNzXb5Kbpo2bcq2bdssynbs2EHTpk11ikgIIUS2iQmDi7u0D02AIyvhzgWwtk19bvjVx97OgJaL2Cfv5DSVzvaTqNcnm24EKAXl20KtV1IyqqwKCYG+fWHHDm2/Xz9YsACcnZ88zmyga3ITFRXFhQsXzPuXLl3i2LFjFCtWjDJlyjBhwgSuX7/OqlWrABgyZAhffPEF48aNY+DAgfzxxx+sX7+en3/+Wa+XIIQQIiMSY+Hy32B6RFXDut5gTMjUbVWp+iS5+Jg7z164FcXtyHiSu6okGBz4p8xABrcqj52NNfa21jjZWmNvY2WuXcmz3Mukndjp7Y8/oHdvCA4GJydYuBD8/fWOyoKuyc0///xD27ZtzfvJfWP8/f1ZuXIlN2/e5MqVK+bj5cqV4+eff2bUqFHMmzeP0qVLs3TpUhkGLoQQuc1khJvHwJiYUnZxD5zfDjZpdAW4sj9z9y/XmtCoBELCo1jr3I8Eg535UJJRERWfxMV4Ny4GOafZ6dbF3oZxz1Shaz0fujnkwQQhv0pKguHDtcSmRg1Yvx6q693DJjWDUip7u2LncREREbi5uREeHo6rq6ve4QghRPa6exkSYyzLbp+FgFVgbZf2NVlxfnvWry1Vz7xpNCnzqKAkkyLCzoufKkzmVpwNX++/nOFb2lobcHO0xdXRlvIezizqUx9ba1lhKEccPw6LF8OsWVrNTS7JzOe3JDdCCJEf3bsKe2dDfFRK2Yn1+sRSrELKdmwYtJkALt7movDYRExKEWnryXFVibMhkZwLjuTMzUiu34t97O2HtqlALR838761lZbIuDnZav93tMXR1jrvNzPlV7/9Bpcvw+DBuoaRmc/vfNWhWAghCryk+NT9TqJvw+Fl2rFkh5c8+j5OHpb7sWHQcCCUrJvpkBKNJk7fjCAoNAbTAz1lo22K8p/rUyiDteUFwfcfwKr9l0n5qIkGjqW6v4ezHR7O9rg72VKsiB3uTnYUc7LD3cmWyiVcaFnJQxIXPSQlweTJ2ogoGxto0ADq19c7qgyR5EYIIfRy7wr8u07rbAtan5Xr/2TuHg7u0Gpsyr69izYaxq5IlkIKDo9j/T9XiU/SOv7evBfHr6eCiU7wSOeKaxm+t4u9DZVKOFPF25Wq3i73H664OUmfmDzn2jXo2RP27tX2Bw3Kk31r0iPJjRBC5LTEOC2Jib0LNwLg9I9gsHrkHC1p8qoB1V5I2bdz1oYKOxXLdEh3oxP48dh1IuOSCImMIzg8npCIOE5cD0/zfB93RzrV8MbZIfMfG14u9vRo5Ct9YPKLbdu0od137oCLCyxdCt276x1VpkhyI4QQT8KYBOd/gehQy/Lb5+DgIq1mJe5e6uuSE5uyLcC7Vkq5tS006A+upSxPN1gRbbQmNDKe0Kh4QqMSuBeTgOlEFBBFZn2y7QxR8UnpHq9e0pUm5YvhYGtN+6peNChbVJqGCoP33oNPPtG269fXRkNVqPDoa/IgSW6EEIWTUnDlAETesCyPug07P4IixTN2n3tXHn38ocTmapluAFwp+zLhLhUIMzkTHptIRGwi92ISCY9NJHzTbcJjbxAVn4RJKYwmRVh0AvFJmazpyaAR7SpSwtUBb1cHvN0c8C3qJE1FhVWx+7WAI0bAzJmQT2f4l9FSQoj8JykeNr0Ody9l/R7BJ7Ivnvv+tn0K0PKmuCQjGJP4wdicU8qPeGXLdTyf+Dmc7Kwpfr8DbjEnO6ytsl6b4uZoy9hOVfBydXjiuEQ+Fh0NRe730VIK9u2DFi30jSkNMlpKCJH/RAbDxkEZO/fqATCl36SSWcayLYlNNJL8Xc9gTOSeTyvOOjbkclgMQXeiuXInmvDYtJ8zARvOqDKouNR9Srxc7Cld1BF7G2vKPHTMYABnexvzcOYHhze7Otri6mCDlcGAlcFAUSc7PFzscLKTP9simyQkwLhx8OuvcPiwtnSCwZAnE5vMkt8SIYR+4iIg4gb8OgEC/8jSLW51/Y7vDl3BmIUWmyRlYGd0Of47n0iqSW7NrU1O9x+eGAxQtpgTNtZWtK7sSevKadfEGAzg7epA6aJOONpZp3mOELq6eBF69IB/7o/O27pVGx1VQEhyI4TQR3QozEyjo6JPQ2g2PPXp8UZu3IvlRngs1+/Fcu1uHFvCy3NtnQJ8nyAQbfmAok62uDwwTb/BAKWLOlKlxP1hyyVdqOTlIsmKyP82bYKBAyEiAooWha+/hs6d9Y4qW0lyI4R4ciYTJMVl/PyDi2HnlJR9B3dtWPOAn/nmnIHAQG30j0kprobFcDY4kpvhcYBjqlvZWhtwsLXGy8We11uWz1TYBsCnqCNVvF3wdLaX0UCiYIuLgzFjtNW7AZo1g+++gzIPN5jmf5LcCCEsXfhdG0WUUaYk2Dsn68/XcBC8MBuAi7ej+OCHPeme6uPuSFVvF6p4u1C1pFajUs6jiMyfIkRGjB2bkti8+y58/DHYFsxRcZLcCFGQ3DgGQX+l7P/2PhistTaWjMjGTroZ8vpOKN2QS6HRvPXtEf67pdXYFLGzZmCLcgB4uTpQzduFyt4uuMrqzkJk3Xvvwe7d2hDvZ57RO5ocJcmNEPnZnUBY9jQoI2DQ1g96mDJCViZ8aPS6NotuRigFfs2h0tOPPC3g8l2OXbvHnagEbsZaEfpbAqGRf3ElLMZiQrnWVTz5v6erZCFoIYRZbCx8/z306qXte3trK3pbFfyaTkluhMiPIm5qw6E39E/7ePVuYHN/7pKiZaHBgMzdv4gnWD/5nweTSRF4O4qjV+/xx5lbbD8VnO65Fb2c+bJvA1zsbfB0yZ8ThwmRZ5w9qy2ZcOKEtuhl8vIJhSCxAUluhMh//v5ca256kF9LeO4zbdutNNg7535c952+EcHnf/zH5TsxqWpkkg1qUQ4PZ3vzatAezvZULekifWeEyA6rVsFbb0FMDHh5pcw6XIhIciNEfvPX7JTtEjWhXCvo9EnG+9U8woJdF9j7X+jjT0xHVHxSqoUXHW2tqVXajXq+7tTxdadFJQ/pOyNEToiO1pZNWLFC22/XDr79FkqW1DcuHUhyI0ReZ0zSlhk4uQlu/gvxEVp5n81QsX22PMU3+4PYefYWu8/dzpb7ASzp15DSRR2p5OWMjdTICJGzTp3Smp5On9aaniZP1joQWxfOeZkkuRFCT0rdX006jR6///0GQXvh+HepjxmsoWSdJ376hCQTS/de5H/bz1mUz+5e54kSkgZli+LjnnpOGiFEDgkM1BKbkiVhzRpo00bviHQlyY0QuS0pXktqADa/Dme2Zu765z4D71pQxCPTT62UIjbRSMDle/xw7Do//3uT2ESj+fjkztVpXK4YNUq5ZfreQohcplRKc3SXLrB0qTbTsJeXvnHlAZLcCJEbQk5pSczu6Y84Ka0+MwraTIRSdaFypycOw3/FYf48n3bT07o3nqJJ+eJP/BxCiFxw/DgMHQpr14Lv/eVHBmVw4dlCQJIbIXLaH1Phz5npH3cpBcMOgEPO1pacuhFuTmxsrAx0b+RL1zqlaORXDCsrWXZAiHxBKfjqKxg5EuLj4f/+D9av1zuqPEeSGyGy2+4Z8M8yUPeXqY5+oKakeletSanxmynVybZOYJVznf7e+/4Ev54KJjpea35qXdmT5f0bYS0JjRD5S0QEvPEGrFun7T//PCxcqG9MeZQkN0JkhyMr4e8vtNmAwy6mfc6IACiexirYOey7Q1cw3e/iU9TJlv+9UlsSGyHym4AA6NEDLlzQJuWbPh1Gjy40k/JlliQ3QmTVyU2wf6GW0Nw4anmsVD14fhbY3B8x5OINTjkzkdai3YH8cvJmuseTE5vvBj9F9VKuuDnKHDNC5Cu7dmlrQSUkaCt4r1sHTz2ld1R5miQ3QmSEyQghJ+Hcdrj0p7Y0wcXdqc/rPB/KNgePijkeUlh0Al/8cYHl+y499lxnexvqlXHHwbZwznkhRL721FNQpQqULw/LlxfKGYczS5IbIR5HKVjV1XK17Qe1fR9K1gY3XyhRPVdC+vHYdUauPWbed3O05bNX65De1DSVS7hIYiNEfnLqFFStqk3C5+io1d4UK5YtM5EXBpLcCPE4mwdbJjbW9tBpGji4a+s4lW2ao0+vlCIsOkHbBi7fibFIbOa9VpcudUphkD96QuR/SsHcufDuuzBpErx/fx254jJNQ2ZIciNEem6dgYUPtWuP+Q+cc3eCrMGr/uH3M7fSPLawd32eq1X41o0RokAKC4P+/WHr/Yk9T560nKhPZJgkN0I8LOz+Ok5/fGxZPup0ric2/7f+eKrEpqiTLU0rFKdz7VI8K4mNEAXD33/Da6/B1atgZwdz5mgre0tikyWS3IjCKTIEVr8MwSfBxsHyWFKs5X6lp+G177ROxLnkwq0ovjt0hU0B1wCwMsCpKc/gaCf9ZoQoUEwm+OwzmDgRjEaoWFGblK9ePb0jy9ckuRGF02/vQfAJbfvhZCZZ2eZQvi00H5njic2Ne7HsD7zD5bAY9l0I5cjlu+Zj7ap68VXfBrKythAFUWCg1rfGaISePeHLL8HFRe+o8j1JbkThFBOWsj30ANgVsTzu4A4Orjny1NfuxvD5zgscvpwSw8Xb0WmeO6hFOd59pqokNkIUVJUqwRdfaH1rXn9dmqGyiSQ3ovAwJmlrPJ39Ge5d1sq6LQavajn+1DfuxbLy7yAOXLzDmZsRJBpVmue1qOhB5zolqVHKDd+iTrg5yYR7QhQoJhN8+il06ACNG2tlr7+ub0wFkCQ3ouAzJsLtc/Dz/8HVA5bH3Hxy7Gm3nwzmu0NXuHY3hsCHamaali/O4FblKGKX8itYprgTJd0ccyweIYTOQkKgb1/YsQOWLNFGQxUp8vjrRKZJciMKtquHtHlq7gZZlr8wV5t4r1T9HHna+CQjI74LMNfQWBmgQdmi9GhUhkpeztQu7Sbz0ghRmPzxB/TuDcHB2qR8kydLYpODJLkRBdvfn6ckNi6lwNkTeqwGd98ceTqjSbHl+HVm/XbenNiMbF+Jgc3LSROTEIWR0QgffwwffaT1q6lRQxsNVT13ZjMvrCS5EQWbMVH7f6fp0HRojj3NiWvh/HTiBl/uSVkR3NPFnjFPV6Z7Q1+ppRGiMIqIgK5dYfdubX/gQPj8c3By0jWswkCSG1Fw/bMczv+ibdtl/x+TS6HR/HLyJnEJRr788yLxSSbzsZfq+TDtxVoyL40QhZmzs9b0VKQILF4MffroHVGhIcmNKJii78BPo1L2S9bNltsqpQi4co8v9wTy2+kQi2ON/YpRt4w7pYs60vepslJbI0RhlJQEiYlavxorK/j6awgN1Vb1FrlGkhtR8MRFwPwHZvd8YQ6UqvtEtwyNiufrv4P48dgNroTFWBxrUdGDphWKM6hFOVl5W4jC7No16NULypXTkhrQFryURS9znSQ3ouBIioffp8CBBSlltk5Q46Us3/JudAJTtp7ih2M3zGVOdtY8U9ObPk+VpZKXMy4O0lFYiEJv2zbo1w/u3IFjx2DKFPDz0zuqQkuSG1FwPJzYFPGEoQfB0T3Tt4qKT2LpXxdZ8udFohOM5vK32lRgRLuKONnJr44QAq0J6r33YOZMbb9+fVi3ThIbnclfaJG/KQX/rodj38Ktsynlfb+HCu2ydMudZ0IYt/Ff7kQnAFC6qCNF7GyY1b0ONX3csiNqIURBcOWKtpL3/v3a/ogRWpJjb69vXEKSG5HP/TkTdk2zLHv16ywnNkaT4t1NWmJjbWVg/mv1eLamN1ZW0jlYCPEAkwmeeQbOnAE3N1i+HF7KehO4yF6yGp/IvxKiIfjflP2W/we91kO1zlm63b4LoXScs4fQKK3G5ss+DXi+dklJbIQQqVlZwbx58NRTcPSoJDZ5jNTciPwn/Bos7QiRKZ18eWYGPDUky7ecv/M/Zu84b95/77lqtKvq9SRRCiEKmosXITAQOnbU9jt2hPbttURH5CmS3Ij85d/12lpRD7J3gzJNMn2rJKOJHadDWPl3EAcvhZnLfxrRQvrWCCEsbdqkzTAMEBAAFSpo25LY5EmS3Ij8I/aeZWJTvi28shwc3MAq4/PL3ImKZ+3hq3x74DI3w+PM5fY2Vmwd0YLKJVyyMWghRL4WFwdjxsCC+yMxmzYFW5n+Ia+T5EbkDwkx8GWrlP0OH0KLUemenp6lf13kf7+eI+H+UgnFi9jRs3EZXqrvQyl3R5mETwiR4r//oEcPrU8NwLhxMHWqJDf5gCQ3Iu8L2gcrn7Msq5u5NVp2ngnho59Oc/mONrtw7dJu+Df14/naJSWhEUKktnYtvPEGREZqMwyvWgXPPff460SeIMmNyPuOr0nZtrKBd06As2eGLo1LNHL6ZgSL9wSaE5u321diVIdKsvaTECJ9Bw9qiU3LlrBmDZQurXdEIhMkuRF5352L2v9rvKT1sclAUpJkNLEp4Bpzf//Pol/N4JblGN2xck5FKoTIz5RK+fsyYwZUrAhvvgk28lGZ38hPTORd0aHw1yy48re2X7L2YxMbpRTbTwYz87dzXLwdDUBRJ1vcnewoXsSOgS3K5XTUQoj86NtvtRqaLVu0ZMbODoYN0zsqkUWS3Ii86cAi2D7esqxix0decj4kkrEbjnP8WjigJTXD2lakz1NlpV+NECJt0dHasgkrVmj7K1bA4MGPvkbkeZLciLwlMgS+fgFCUybUw7kE9PwOvGs+8tKFuy5w/Fo4TnbWvN6iHINblZcVu4UQ6Tt1Crp3h9OntVrhyZNT5rIR+Zrusw8tWLAAPz8/HBwcaNKkCYcOHXrk+XPnzqVKlSo4Ojri6+vLqFGjiIuLe+Q1Ih/Z/7llYtN/G4w5Dz4N0r0kJCKOYasD+OGYNmPxuE5VGP10FUlshBBpU0qroWnUSEtsvL1h504tubGWWt6CQNfkZt26dYwePZrJkycTEBBAnTp16NSpE7du3Urz/DVr1jB+/HgmT57MmTNnWLZsGevWrWPixIm5HLnIMfGRKdtjA8Gv+WMvmf3beX4+cRPQJuKr7eueQ8EJIQqEKVO0GprYWG0JhePHoW1bvaMS2UjXZqnZs2czePBgBgwYAMDixYv5+eefWb58OePHj091/t9//03z5s3p1asXAH5+fvTs2ZODBw/matwiByTGQeAfEHZ/ZFTb96CIR5qnKqVYsS+Ibw9cJj7JRFi0ttBl94almdy5BkXspbVVCPEIPXrAnDnw7rswfrwsoVAA6fYpkJCQwJEjR5gwYYK5zMrKig4dOrB///40r2nWrBnffvsthw4donHjxly8eJFt27bRt2/fdJ8nPj6e+Ph4835ERET2vQiRff6eD7umpeynsZxCktHEgYthfHvgMttPBac6/nztUpLYCCFSU0qrnalbV9uvVg0uXYJixXQNS+Qc3T4JQkNDMRqNlChRwqK8RIkSnD17Ns1revXqRWhoKC1atEApRVJSEkOGDHlks9T06dOZMmVKtsYuckDk/WTFvQyUrAM1X7E4nGg0MXjVP+w+dxsAGysD45+tSkM/7Y9TUSdbyhYvkqshCyHygYgIba6a9eth925tUj6QxKaAy1d1cbt37+aTTz5h4cKFBAQEsHnzZn7++Wc+/vjjdK+ZMGEC4eHh5sfVq1dzMWKRIRd+h3+Wadt1e0OPb6FoWfPhE9fC6TB7jzmxAVgz+Cleb1meur7u1PV1l8RGCJHa0aPQoIG2lILBAGfO6B2RyCW61dx4eHhgbW1NSEiIRXlISAje3t5pXvPBBx/Qt29fXn/9dQBq1apFdHQ0b7zxBu+99x5WabSb2tvbY29vn/0vQDy5G8fgq9aWZWn0s1l98LJ56YQ6pd2Y3aMuFTydcyFAIUS+pBQsXAijR0NCApQpoyU4TZvqHZnIJbrV3NjZ2dGgQQN27txpLjOZTOzcuZOm6fwDjImJSZXAWN8ftqeUyrlgRfYL+CZ1YtN8JNRL3X/qYqg20/Db7Sry4/AWktgIIdJ37x68+ioMH64lNl26aDU4ktgUKrr2vhw9ejT+/v40bNiQxo0bM3fuXKKjo82jp/r164ePjw/Tp08HoHPnzsyePZt69erRpEkTLly4wAcffEDnzp3NSY7IB05vgS3DU/ZrvwYvzAa71E1L3x26wqFLYQAUK2KXWxEKIfKrH36ATZvA1hb+9z8YOTJD69GJgkXX5KZHjx7cvn2bSZMmERwcTN26ddm+fbu5k/GVK1csamref/99DAYD77//PtevX8fT05POnTszbdq09J5C5DVx4bBpUMp+n01QsUO6pwdcvgtACVd7Xmnom9PRCSHyO39/+Pdf6NlTm6RPFEoGVcjacyIiInBzcyM8PBxXV1e9wyl89vwvZch3q3HQ7r10T113+ArvbjoBwLhnqjC0TcXciFAIkZ+EhcH778P06eDmpnc0Igdl5vNbJgURuSv2bsp2w9RruETGJbLkr0tsOnKN6/dizeVVSrjkRnRCiPxk/3547TW4cgXCw2H1ar0jEnmEJDdCHy1Gg2tJi6KDF+8w5Nsj3I1JNJe92qA0YzpVoYSrQ25HKITIq0wmmDULJk6EpCSoUAH+7//0jkrkIZLciJynFNw+C1cPwYGFqQ6fuRnBzF/P8cfZlDXFZr1ah7pl3GVklBDCUmio1q9m2zZtv0cP+OorkG4G4gGS3Iicd2Ql/PSOZZmLVmtjNCkmfn+Co1fumQ9N7VaTlxuUzrXwhBD5xLFj8MILcP062NvD/PkweLCMhhKpSHIjct6dCynbrd+F0o2gfBtAm6AvObF5o1V5mlf0oHmF4rkfoxAi7yt9/0tPlSracgq1a+sbj8izJLkRuafZ29BWWwcsIcnEmav3mLzlFACvNfJl4nPV9IxOCJEXRUSkNDl5eMCvv0LZsuAsTdYifflqbSmRz8TehX3z4epBi+Lvj16j+qTtdF2wD6XA1trAC7VL6RSkECLP2rVLq6X5+uuUsho1JLERjyU1NyL7xUfByY3w+xSIDUsptyuCUorFuy+SZNKmV3qxng+jOlSmTHEnnYIVQuQ5RiNMnQoffaSNjFqwAPr2hTTWDxQiLZLciOz3zzLYMcmyrMUoaDiQk9cjOBcSicEABye2x8tFhngLIR5w8yb06QN//KHtDxgAn38uiY3IFEluRPZLnqiveCUo11Kb08ZdWzrh133nAHiuVklJbIQQlnbs0BKbW7egSBFYtEirsREikyS5ETmn0tPwzCfmXZNJsS8wFICyxaQZSgjxgIsX4dlntSapWrW00VBVq+odlcinJLkR2edOoNYcdfNfc1Hg7SjCohP4LySKj386TWyiEQArmZdCCPGg8uXh3Xfhzh2YMwccHfWOSORjktyI7PPvOjj7k3n3SJgdL8/ak+apz9cumWa5EKIQ+eUXbTRU+fLa/tSpMiGfyBaS3IgndycQ/p4P1/7R9iu0J7hKH97YZmc+pVVlT6p5u1DTx41nanpjay2dA4UotBIT4b33YOZMaNQI9u4FOztJbES2keRGPJmz22BtT4uiKM96vLTTjTtxcVQv6cp3bzyFm6OtTgEKIfKUK1e0lbz379f2GzfW1p8TIhtJciOyJi4CNr8B539JKSvdGGq9yup7DbkRfpNyHkVYNaixJDZCCM2WLdC/P9y9C25usGwZvPyy3lGJAkiSG5E1R7+1TGxeWQ41tT9S1344CUC7ql54ONvrEZ0QIi9JSIDx47WOwqA1Ra1dm9LXRohsJsmNyJr4iJTt4UfAoyIA207cZPXBywBU9XbRIzIhRF6jFPz5p7b9zjswY4bWx0aIHCLJjXgyDQdiLFaBFX9dZMGuC9yNSQSgZ2NfXmlQWufghBC6UkrrJGxvr81bc+IEdO2qd1SiEJDkRjyxtYevMPXnM+b9znVKMbVbLQwy8kGIwik+HsaMAXd3+Phjrax8eWmGErlGkhvxxELC48zbn71ah5fr+0hiI0RhdeEC9OgBAQHaelD+/lCxot5RiUJGJhsRWRN927x56obW/8a/aVleaVBaEhshCqv166F+fS2xKV5cGx0liY3QgSQ3IvPOboPDSwEIuhPNzrO3AHB2kIpAIQql2FgYMkSrsYmMhBYt4NgxeP55vSMThZR8GonMCz5h3lx9rwYApdwcGNK6gl4RCSH0ohR06AB//611Hp4wAaZMARv5eBH6kX99Issu+XVnydmK2NtY8d0bT+HiIJP1CVHoGAwweDD89x98+y08/bTeEQkhzVIi645cvgvA2+0rUbZ4EZ2jEULkmpgYOJMyQpL+/eHcOUlsRJ4hyY3IsvhEE+U9ijC4pQzvFKLQOH1aWw/q6afhzp2U8qJF9YtJiIdIciMy7W5Mgnm7RyNf7Gzkn5EQhcLKldCwIZw6BUlJEBSkd0RCpEk+lUSmRMUn8ePxGwB4uNjTv7mfvgEJIXJeVJQ2X82AAdrIqA4dtNFQDRroHZkQaZLkRmSYyaQYve4YYVFazU2rSh7Y21jrHJUQIkedOKEtdLlqlTYp39Sp8OuvUKKE3pEJkS4ZLSUy7KcTNzl6+ixfOWwEwNFWEhshCrwZM+DsWShVCr77Dlq10jsiIR5LkhuRYVfuRPOi9d6UAqfi+gUjhMgdCxaAoyN88gl4euodjRAZIs1SIlPs0Vb9xmANzd/WNxghRPY7ehTGjtUm5wNwc4MlSySxEfnKE9XcxMXF4eDgkF2xiDyuZPgxXrbVmqSo3xcc3PQNSAiRfZSCRYtg1ChISIDq1bUOxELkQ5muuTGZTHz88cf4+Pjg7OzMxYsXAfjggw9YtmxZtgco8oa4RCMRZ3enFPg+pVssQohsFh4O3bvDsGFaYtO5M3TtqndUQmRZppObqVOnsnLlSv73v/9hZ2dnLq9ZsyZLly7N1uBE3rE54Dqh90dJnXDvAHV76hyRECJbHD4M9erBxo1gawuzZ8OPP0KxYnpHJkSWZTq5WbVqFV999RW9e/fG2jpltEydOnU4e/ZstgYn8g4Veo6xtusBKFNKhoAKUSAsXw7Nm8OlS+DnB3v3as1SBoPekQnxRDKd3Fy/fp2KFSumKjeZTCQmJmZLUCLvKR+627ztVlJW/xaiQKhYEYxGeOklrSNx48Z6RyREtsh0clO9enX++uuvVOUbN26kXr162RKUyHsM90dOBNuXh+ajdI5GCJFl9+6lbLdqBQcPak1S7u56RSREtsv0aKlJkybh7+/P9evXMZlMbN68mXPnzrFq1Sp++umnnIhR5AGxiUkAXHGqjreVzCAgRL5jMmn9aaZNg/37oWpVrbxhQ33jEiIHZPpTqmvXrmzdupXff/+dIkWKMGnSJM6cOcPWrVvp2LFjTsQodPbjsescDrqrdxhCiKwKDYUuXbT5a+7dg2++0TsiIXJUlua5admyJTt27MjuWEQe9P3Ra4xad5yh9/uOl3J31DcgIUTm7N0LPXvCtWtgbw/z5sEbb+gdlRA5KtM1N+XLl+fOnTupyu/du0f58uWzJSihv9gEIyPXHmXUuuPUN5xn3P2RUqWLSnIjRL5gMsH06dCmjZbYVK6s9a95800ZDSUKvEwnN0FBQRiNxlTl8fHxXL9+PVuCEvrbcOQqPx67gbWVgTFVbqccKC2jKYTIF1auhIkTtdFQffrAkSNQp47eUQmRKzLcLLVlyxbz9q+//oqbW8rU+0ajkZ07d+Ln55etwQl9GE2Kn/69iTVGxlW4SbMiN7UD1btqyy4IIfK+fv1g7Vp47TVtGQWprRGFSIaTm27dugFgMBjw9/e3OGZra4ufnx+zZs3K1uCEPpb8dZFDl8J4yWofb15dnHJAVgEXIu8yGmHZMujfH+zswMYGfv1VkhpRKGU4uTGZTACUK1eOw4cP4+HhkWNBCf3EJRpZ+pe2Xlh5hygwAc4loGRdaNBfz9CEEOkJDobeveGPP+DsWW3IN0hiIwqtTI+WunTpUk7EIfKIDf9cJTQqAR93R95qVgH+ACp2gG4L9Q5NCJGW33/X+tSEhICTk7ZOlBCFXJaGgkdHR7Nnzx6uXLlCQkKCxbG33347WwITuS/JaOLLP7Vamzdbl8faeFzniIQQ6UpKgilTtEn5lIJatWD9+pTJ+YQoxDKd3Bw9epTnnnuOmJgYoqOjKVasGKGhoTg5OeHl5SXJTT72+5kQrt2NpXgRO15t4Av7Za0wIfKk69ehVy/4809tf/Bgbf4aR5mqQQjIwlDwUaNG0blzZ+7evYujoyMHDhzg8uXLNGjQgM8++ywnYhS55MzNSABal3PCcXM/2DVN54iEEGmKjdUWunR2hjVr4KuvJLER4gGZTm6OHTvG//3f/2FlZYW1tTXx8fH4+vryv//9j4kTJ+ZEjCIXRMQl8t2hKwB0td4HZx9YJ6xcK52iEkKY3V+8FtBW816/HgICtNmHhRAWMp3c2NraYnV/4UQvLy+uXNE+EN3c3Lh69Wr2RidyzWe/nuNWZDx+xZ1oVtou5cCIAKjzmn6BCSHg6lVo3VrrPJzsmWegUiX9YhIiD8t0n5t69epx+PBhKlWqROvWrZk0aRKhoaF888031KxZMydiFDns5PVwvjlwGYBpL9bCNuSEdqBOTyheQcfIhBBs3arNXRMWBsOGwenTYG2td1RC5GmZrrn55JNPKFmyJADTpk2jaNGivPXWW9y+fZsvv/wy2wMUOe9wUBhKQavKnjSvKPMXCZEnJCTA//2ftpp3WBg0bAi//CKJjRAZkOmam4YNG5q3vby82L59e7YGJHJfclO+u6OttnHngn7BCCEgKAh69IBDh7T9kSNhxgxtVW8hxGNluuYmPQEBAbzwwguZvm7BggX4+fnh4OBAkyZNOJT8y5yOe/fuMWzYMEqWLIm9vT2VK1dm27ZtWQ1bABdDowDwto6A/1WAgK/vH5HZTYXIdVevahPxHToE7u7w/fcwd64kNkJkQqaSm19//ZUxY8YwceJELl7UJns7e/Ys3bp1o1GjRuYlGjJq3bp1jB49msmTJxMQEECdOnXo1KkTt27dSvP8hIQEOnbsSFBQEBs3buTcuXMsWbIEHx+fTD2vSHEnKp41B7VO4T2cjkBMaMrB2q/qFJUQhVjp0tC5Mzz1FBw7BvfX9RNCZJxBqQfHF6Zv2bJlDB48mGLFinH37l2KFy/O7NmzGTFiBD169GDkyJFUq1YtU0/epEkTGjVqxBdffAFo61f5+voyYsQIxo8fn+r8xYsXM3PmTM6ePYutrW2mnitZREQEbm5uhIeH4+rqmqV7FBT/BIXxyuL9AJRyc2Bvq9NY7XhfOzj+KjgU7vdHiFwTGKjV0hS/vzhtTAzY2moPIQSQuc/vDNfczJs3jxkzZhAaGsr69esJDQ1l4cKFnDhxgsWLF2c6sUlISODIkSN06NAhJRgrKzp06MD+/fvTvGbLli00bdqUYcOGUaJECWrWrMknn3yC0WhM93ni4+OJiIiweAjNievh5u1h7SpilbzIXq3uktgIkVvWr9eaoQYMSOkA5+QkiY0QTyDDyU1gYCCvvqo1U7z00kvY2Ngwc+ZMSpcunaUnDg0NxWg0UqJECYvyEiVKEBwcnOY1Fy9eZOPGjRiNRrZt28YHH3zArFmzmDp1arrPM336dNzc3MwPX1/fLMVbEIVGxQPQq0kZejcpq3M0QhQycXHw1ltax+HISG1ElHz5EiJbZDi5iY2NxcnJCQCDwYC9vb15SHhuMZlMeHl58dVXX9GgQQN69OjBe++9x+LFi9O9ZsKECYSHh5sfMtFgisBb0QBU9HTWORIhCpnz57U+Ncl/uyZMgN27wc1N17CEKCgyNRR86dKlODtrH4RJSUmsXLkSDw/LeVEyunCmh4cH1tbWhISEWJSHhITg7e2d5jUlS5bE1tYW6wfmeahWrRrBwcEkJCRgZ2eX6hp7e3vsZZRBmgJva6OkKnhJciNErlm9Gt58E6KjwdMTvvkGOnXSOyohCpQMJzdlypRhyZIl5n1vb2+++eYbi3MMBkOGkxs7OzsaNGjAzp076XZ/NIDJZGLnzp0MHz48zWuaN2/OmjVrMJlM5iUgzp8/T8mSJdNMbET6kowmgu5oNTcVPIvoHI0QhURMDLz/vpbYtGmjJTqlSukdlRAFToaTm6CgoGx/8tGjR+Pv70/Dhg1p3Lgxc+fOJTo6mgEDBgDQr18/fHx8mD59OgBvvfUWX3zxBSNHjmTEiBH8999/fPLJJxlOqESKq3djSTQqHG2tKeUmqwkLkSucnGDdOti2DT74QGYbFiKHZHqG4uzUo0cPbt++zaRJkwgODqZu3bps377d3Mn4ypUr5hoaAF9fX3799VdGjRpF7dq18fHxYeTIkbz77rt6vYR8K/CW1iRV3rMIVlYyWZ8QOebrr8FohIEDtf3GjbWHECLH6JrcAAwfPjzdZqjdu3enKmvatCkHDhzI4agKvhvhsQD4FnXSORIhCqioKG2hy1WrtNmFW7SAypX1jkqIQkH35EboI3k6DWtrqbURItudOAHdu8PZs2BlpfWzqVBB76iEKDQkuRFCiOyiFCxbBiNGaPPYlCoFa9ZA69Z6RyZEoSLJTSF1NlibLMze+n6fpqR4OL5Wx4iEyOeUAn9/bWg3wDPPaE1Snp76xiVEIZSlVcEDAwN5//336dmzp3mRy19++YVTp05la3AiZxy5fJe1h7XJDF9peH+G6ZObIeSEtm0j8wIJkWkGA1SqpI2A+vRT+PlnSWyE0Emmk5s9e/ZQq1YtDh48yObNm4mK0kbdHD9+nMmTJ2d7gCJ7JRpNvPf9CZSCl+uXplmF+5MwxoalnNRshD7BCZHfKAV376bsT5wIR47Au+9qfW2EELrI9G/f+PHjmTp1Kjt27LCYOK9du3YyiikfWLb3EmeDIynqZMt7z99f7FQpCD6pbdd6FTyr6BegEPlFeLi2LlSbNhCrjT7E2hrq1NE1LCFEFvrcnDhxgjVr1qQq9/LyIjQ0NFuCEjnj2t0Y5v5+HoD3nq9OsSJ2EBkCn9eHBK0GDoN82xTisf75R0tsLl4EGxvYtw86dNA7KiHEfZn+JHN3d+fmzZupyo8ePYqPj0+2BCWyV3hMIu//cIIWM3YRl2iiqrcLL9e//7M6uzUlsQGo21ufIIXID5SC+fOhWTMtsSlbFvbulcRGiDwm08nNa6+9xrvvvktwcDAGgwGTycS+ffsYM2YM/fr1y4kYxRPacSaEbw9cMe/XK1MUg+H+/DbGJO3/VrYw8QaUlyGrQqTp7l146SUYORISE6FbNzh6FJo00TsyIcRDMt0s9cknnzBs2DB8fX0xGo1Ur14do9FIr169eP/993MiRvGEEpJMAFT1dmFAcz+erp7GquvVu4CdLKApRLqGDoUffgA7O/jsMxg+XBshJYTIczKd3NjZ2bFkyRI++OADTp48SVRUFPXq1aNSpUo5EZ/IRmWKOdGjURm9wxAif5oxAwIDYdEiaNBA72iEEI+Q6eRm7969tGjRgjJlylCmjHxQCiEKqDt3YOtW6N9f2y9TBg4elNoaIfKBTPe5adeuHeXKlWPixImcPn06J2ISuSX0AmyXFdWFSGXfPqhbFwYM0BKcZJLYCJEvZDq5uXHjBv/3f//Hnj17qFmzJnXr1mXmzJlcu3YtJ+ITOSnwj5Rtz6r6xSFEXmEyabMLt24N165pMw77+uodlRAikzKd3Hh4eDB8+HD27dtHYGAgr776Kl9//TV+fn60a9cuJ2IUTygkIg4AZ4eHWyHvLw3uXQtajc3doITIa27dgueegwkTwGiEXr202Ybr1tU7MiFEJj3RjG3lypVj/PjxfPrpp9SqVYs9e/ZkV1wiG/1zWVtaoX6ZommfULySVLeLwm3PHi2J+fVXcHCApUvh22/BxUXvyIQQWZDl5Gbfvn0MHTqUkiVL0qtXL2rWrMnPP/+cnbGJbJBoNHH0yj0AGvkV0zcYIfKqmze1R7VqcPgwDBokCb8Q+VimR0tNmDCBtWvXcuPGDTp27Mi8efPo2rUrTk5OORGfeEJnbkYQk2DE1cGGSl7OeocjRN6hVEoC89prkJAAL78MRWS+JyHyu0wnN3/++Sdjx46le/fueHh45ERMIhudvRkJQO3S7lhZyTdRIQDYuRPGjIFffgHv+5NaygzrQhQYmU5u9u3blxNxiBxiVFqnYQdba50jESIPMBphyhSYOlWruZkyRZuUTwhRoGQoudmyZQvPPvsstra2bNmy5ZHndunSJVsCE0KIbHXjhjYCKnngw+uvw6xZ+sYkhMgRGUpuunXrRnBwMF5eXnTr1i3d8wwGA0ajMbtiE9ngfsWNpTuBsN4f7l1J46AQBdCvv0KfPhAaCs7O8OWXWqIjhCiQMpTcmEymNLdF3pc8DNzTxV4rUAr2zICQEykneVbRITIhcsmGDdC9u7Zdpw6sXw+VK+sbkxAiR2V6KPiqVauIj49PVZ6QkMCqVauyJSiRPcKiE/jp35sAdG9YWis8vx3+XadtV2gPQw9Aa1mCQRRgzzyjJTNDh8KBA5LYCFEIZDq5GTBgAOHh4anKIyMjGTBgQLYEJbLHusNXSUgyUcvHjbq+7lph+APLZLQYBV7VZD4PUfAcOJDSJuvios1ds2CBNkGfEKLAy3Ryo5TCkMaH4bVr13Bzc8uWoMSTM5oU3x64DEDfpmVT/8yqdYFyLXWITIgclJCgDfFu2hTmzk0pd3XVLSQhRO7L8FDwevXqYTAYMBgMtG/fHhublEuNRiOXLl3imWeeyZEgRebEJCTRZ+lBrt+Lxd3Jli51SukdkhA5LyhIm4zv4EFt//p1XcMRQugnw8lN8iipY8eO0alTJ5ydU2a7tbOzw8/Pj5dffjnbAxSZt/PMLQLuL7nQqpKnzHEjCr4ffoABA+DePXB3hxUr4BEjO4UQBVuGk5vJkycD4OfnR48ePXCQtus86fSNCEZ8d9S8P/7ZqjpGI0QOi4+HceNg/nxtv0kTWLsW/Px0DUsIoa9M97nx9/eXxCYPW77vknl73DNVKOXuqGM0QuSw06dh4UJt+//+D/78UxIbIUTGam6KFSvG+fPn8fDwoGjRoml2KE4WFhaWbcGJzImOT2LbCW3o9/L+DWlXtYTlCWGXYNsYHSITIofUqweffw6lS8MLL+gdjRAij8hQcjNnzhxcXFzM249KboR+fjkZTEyCEb/iTrSt4pVyQCm4EQDH16aUeVTK/QCFeFJxcfDuuzBoENSurZUNGaJvTEKIPCdDyY2/v795u3///jkVi3hCG/65CsArDUpbJqAXfofVr6Tse1SGdh/kcnRCPKHz57WZho8fh99+gxMnwCbTa/8KIQqBTPe5CQgI4MSJlKn7f/zxR7p168bEiRNJSEjI1uBExl0Ni+HgpTAMBnixfmnLg9cDtP/bu4HvU/DcTJm4T+Qva9ZAgwZaYuPpqc1hI4mNECIdmU5u3nzzTc6fPw/AxYsX6dGjB05OTmzYsIFx48Zle4AiY5LXkKrn647Pg52IrxyA3Z9o2+VawqBfoXyb3A9QiKyIiYHBg6F3b4iKgtat4dgx6NRJ78iEEHlYppOb8+fPU7duXQA2bNhA69atWbNmDStXrmTTpk3ZHZ/IoGthsQA4O9imFCYlwM3jKfs1X8rlqIR4AsHB2tDupUu1msZJk+D336GUTEophHi0TNfrKqXMK4P//vvvvHB/hIKvry+hoaHZG53IkDM3I5i1Q6tNc7S9n6+GnIJlnSAhUtuv8hzUlEkWRT7i6QleXlCiBKxeDe3b6x2RECKfyHRy07BhQ6ZOnUqHDh3Ys2cPixYtAuDSpUuUKFHiMVeLnHDmZoR5+91nqkLof7CoWcoJBiso31aHyITIpOhosLbWFri0ttaSGgBvb33jEkLkK5lulpo7dy4BAQEMHz6c9957j4oVKwKwceNGmjVr9pirRU5qWcmD8sUdYcfklMJW4+C9YGjyhn6BCZERJ09Co0YwalRKmbe3JDZCiEzLdM1N7dq1LUZLJZs5cybW1rKGka6Ugt8/hHM/a/tlW0C793QNSYjHUgqWL4fhw7V5bMLDYepUKF5c78iEEPlUlsdSHjlyhDNnzgBQvXp16tevn21BicxJMikAasYfhb/npxzoOEWniITIoMhIeOutlOanTp3gm28ksRFCPJFMJze3bt2iR48e7NmzB3d3dwDu3btH27ZtWbt2LZ6entkdo3iMwNtRAFR0jEwp9P8JSjfUKSIhMuD4cW1SvvPntf41U6dqi2BaZbq1XAghLGT6r8iIESOIiori1KlThIWFERYWxsmTJ4mIiODtt9/OiRjFY5y+oXUoLuV2f36bih21OW2EyKvi4+G557TEpnRp2LMHxo+XxEYIkS0yXXOzfft2fv/9d6pVq2Yuq169OgsWLODpp5/O1uDE4ymlzMmNr7NJ52iEyCB7e1i0CJYsgZUrpRlKCJGtMp3cmEwmbG1tU5Xb2tqa578Rued2ZDxR0VF8bruY0vsP6B2OEOk7cgTu3oUOHbT9Ll2gc2dZCkQIke0yXQfcrl07Ro4cyY0bN8xl169fZ9SoUbSXSbZy3ambEbSxOkZn6wcSmyrP6heQEA9TCj7/HJo1gx494OrVlGOS2AghckCma26++OILunTpgp+fH76+vgBcvXqVmjVr8u2332Z7gCJ9V0Mj+P7ruTxvHZBSOPI4FPXTLSYhLNy9C4MGwfffa/utWoGzs74xCSEKvEwnN76+vgQEBLBz507zUPBq1arRIbmqWeSaa0e2Md9uQUpBleclsRF5x8GD8NprEBQEdnbw2WfaXDZSWyOEyGGZSm7WrVvHli1bSEhIoH379owYMSKn4hKPE3WLpvvfBCDMUJRidZ+HRoN1DkoItGaoOXPg3XchKQnKl4f166FBA70jE0IUEhlObhYtWsSwYcOoVKkSjo6ObN68mcDAQGbOnJmT8Ym0xITBZ5XMuwFOzenQdcEjLhAiFxkMcPaslti8+qo2IsrNTe+ohBCFSIY7FH/xxRdMnjyZc+fOcezYMb7++msWLlyYk7GJ9FzaY948Y/Llh1Lv6BeLEMkeHC05bx58+y2sWyeJjRAi12U4ubl48SL+/v7m/V69epGUlMTNmzdzJDDxCCajebNbwsd4uDjpGIwo9EwmmDEDXnghJcFxdITevaV/jRBCFxluloqPj6dIkSLmfSsrK+zs7IiNjc2RwMTjXShSj/g4Ozxd7PUORRRWt29Dv36wfbu2/+OP8OKL+sYkhCj0MtWh+IMPPsDJKaWWICEhgWnTpuH2QLXz7Nmzsy868UgJSdqCmZLcCF38+Sf07Ak3boCDA3zxBXTrpndUQgiR8eSmVatWnDt3zqKsWbNmXLx40bxvkCroXJVo1JoAJLkRucpohOnTYfJkrRmqWjVtNFTNmnpHJoQQQCaSm927d+dgGCIrEpKTG2dJbkQuGjoUvvpK2+7fX6uxeaDJWggh9JYnluBdsGABfn5+ODg40KRJEw4dOpSh69auXYvBYKBbYaoKN5ngwk4gpebGy1WSG5GL3noLihWDr7+GFSsksRFC5Dm6Jzfr1q1j9OjRTJ48mYCAAOrUqUOnTp24devWI68LCgpizJgxtGzZMpcizSMu74XjawBIVDZYGaB4EUluRA4yGmH//pT9unXh8mWtI7EQQuRBuic3s2fPZvDgwQwYMIDq1auzePFinJycWL58ebrXGI1GevfuzZQpUyhfvnwuRpsHRN82by5M6kqxIvZYW0lfJ5FDbtyA9u2hdWs4fDilXNaHEkLkYbomNwkJCRw5csRiXSorKys6dOjA/ge/KT7ko48+wsvLi0GDBuVGmHnSPa8mHFTVpDOxyDm//qrV0uzZA/b2WqIjhBD5QKYXzsxOoaGhGI1GSpQoYVFeokQJzp49m+Y1e/fuZdmyZRw7dixDzxEfH098fLx5PyIiIsvx6i4hBn55F4BEkzYM3N3RVs+IREGUlAQffACffqrt16mjjYaqXFnfuIQQIoOyVHPz119/0adPH5o2bcr169cB+Oabb9i7d2+2BvewyMhI+vbty5IlS/Dw8MjQNdOnT8fNzc388PX1zdEYc9TF3eZmqQS7ogBY6d6wKAqUq1ehTZuUxGboUDhwQBIbIUS+kumPxk2bNtGpUyccHR05evSouVYkPDycTz75JFP38vDwwNrampCQEIvykJAQvL29U50fGBhIUFAQnTt3xsbGBhsbG1atWsWWLVuwsbEhMDAw1TUTJkwgPDzc/Lh69WqmYsxTjCk1UCdqv6djIKLA2rwZ9u0DV1ettmbBAm2CPiGEyEcyndxMnTqVxYsXs2TJEmxtU5pEmjdvTkBAQKbuZWdnR4MGDdi5c6e5zGQysXPnTpo2bZrq/KpVq3LixAmOHTtmfnTp0oW2bdty7NixNGtl7O3tcXV1tXjke2VbEO+QsZorITJlxAgYNw4CArQVvYUQIh/KdJ+bc+fO0apVq1Tlbm5u3Lt3L9MBjB49Gn9/fxo2bEjjxo2ZO3cu0dHRDBgwAIB+/frh4+PD9OnTcXBwoOZDs6C6u7sDpCov6EKjEgCwkXYp8SQuX9b61yxcqI2AsrLSFsEUQoh8LNPJjbe3NxcuXMDPz8+ifO/evVkalt2jRw9u377NpEmTCA4Opm7dumzfvt3cyfjKlStYyQe4BYViwz9a81rryp46RyPyrR9/1GYYvndPS2wWLtQ7IiGEyBaZTm4GDx7MyJEjWb58OQaDgRs3brB//37GjBnDBx98kKUghg8fzvDhw9M89rhlH1auXJml58x3YsJgQ38AouKTOBscib2NFS/XL61vXCL/SUjQmp7mzdP2GzfW9oUQooDIdHIzfvx4TCYT7du3JyYmhlatWmFvb8+YMWMYMWJETsQoAIJSRqKdiSsOwPO1S+LmJEPBRSZcvAg9esA//2j7//d/8MknYGenb1xCCJGNMp3cGAwG3nvvPcaOHcuFCxeIioqievXqOMuMpTlLaetIKSsbBt7pBUDvJmX0jEjkN7t3Q9euEBGRsjbUCy/oHZUQQmS7LE/iZ2dnR/Xq1bMzFpEBIa51iAq2okoJF+qXKap3OCI/qVJFG9ZdqxZ89x3k5zmfhBDiETKd3LRt2xaDIf21jP74448nCkg82q3IOAB6NSnzyJ+DEACEhkLyhJclS2pLKVSoALbSnCmEKLgyPQypbt261KlTx/yoXr06CQkJBAQEUKtWrZyIUTwgNtGIg60V3er56B2KyOu++w7Kl4eNG1PKqlaVxEYIUeBluuZmzpw5aZZ/+OGHREVFPXFA4vFq+7jjJmtKifTExsLIkbBkiba/ahW88oq+MQkhRC7Ktglk+vTpw/Lly7PrduIRpDVKpOvsWWjSREtsDAZtgr7Nm/WOSgghclW2rQq+f/9+HGQNmuynFFz6Ey7v0zsSkdetWgVvvQUxMVCiBHz7LXTooHdUQgiR6zKd3Lz00ksW+0opbt68yT///JPlSfxEOpSCQ0vgl7HmokRlrWNAIs8KCAB/f227XTtYvRrSWHxWCCEKg0wnN25ubhb7VlZWVKlShY8++oinn3462wITwI0Ai8TmVonWLLraTMeARJ5Vv742IZ+bG0ycCNaSBAshCq9MJTdGo5EBAwZQq1YtihaVOVZyXMSNlO3X1vBndB32XT5OSxtZa6vQU0prhmrfHkrfX4Ljs8/0jUkIIfKITH1KWltb8/TTT2dp9W/xBHybQNXnuXkvFoBSbo46ByR0FRkJfftqi1727AlJSXpHJIQQeUqmqwBq1qzJxYsXcyIW8Rg3wu8nN+6S3BRax49Dw4Zanxpra3j+ebCSmjwhhHhQpv8qTp06lTFjxvDTTz9x8+ZNIiIiLB4i51y/p81OXMpdRqUVOkrBl19qw7zPn9eaovbsgfHjJbkRQoiHZLjPzUcffcT//d//8dxzzwHQpUsXi+n/lVIYDAaMRmP2RykAuHG/WcpHam4Kl8hIeP11WL9e23/hBVi5EooX1zUsIYTIqzKc3EyZMoUhQ4awa9eunIxHJFMKzv3ywK7i+l1pliqUrK3h9GmwsYFPP4XRo2UmRyGEeIQMJzdKKQBat26dY8GIB1w9CMdWa9vWdtyLSSQ2UasV83aTZqkCTyntYWUFTk5arU14ODz1lN6RCSFEnpepxnpZhToXRYembLeZwPX7TVIezvY42MocJgXavXvaWlAzZqSUVasmiY0QQmRQpua5qVy58mMTnLCwsCcKSDykdGPwa07w6RBAOhMXeIcOQY8eEBQEv/wCAwdqSykIIYTIsEwlN1OmTEk1Q7HIHQlGE4DU2hRUSsHcufDuu5CYCOXLw7p1ktgIIUQWZCq5ee211/Dy8sqpWIQonMLCtAn5tm7V9l95BZYu1ZZSEEIIkWkZTm6kv40QOSAhQetL899/YG8Pc+bAkCEyGkoIIZ5AhjsUJ4+WEvqIjtem2Le1lg+9AsXODt55BypVggMH4K23JLERQognlOGaG5PJlJNxiMc4dUOb/blKCVedIxFPLDQUbt2C6tW1/bfe0pqlnJx0DUsIIQoKmbc9nzh29R4AdXylH0a+9tdfUKcOdO6szVsDWk2NJDZCCJFtJLnJi2LCYF1v825CkonTN7Wamzql3XUKSjwRkwmmTYM2beDGDa056vZtvaMSQogCKVOjpUQuuXowZbt4Rc6HRJKQZMLN0ZayxeUbfr4TEgJ9+8KOHdq+vz8sWABFiugblxBCFFBSc5MXJXfetrKFrl+Ym6Rql3aTUWv5zR9/QN26WmLj5KQteLlypSQ2QgiRg6TmJi8rVResrPn32j0A6vq66xmNyIo5cyA4GGrU0NaHSu5ELIQQIsdIzU0+cPyq1vG0tvS3yX9WrIAxY7RlFSSxEUKIXCHJTR4XHZ/Ef7ciAahTWkZK5Xm//aYlM8k8PGDmTBkNJYQQuUiapfK4UzciMCko6eaAl6ssmplnJSXB5MkwfbrWZ6pZM3jpJb2jEkKIQkmSmzwuLDoeAB93R50jEem6dg169dLmsAFt+YRnn9U3JiGEKMSkWSqPuRURx/s/ngDg+LV7jF5/HJAZ+fOsbdu00VB//QUuLtpK3osWgaMko0IIoRdJbvKQ0Kh4Ws3cRXC4VltjNCliEowAVPWWZRfynE8+geefhzt3oEEDOHoUunfXOyohhCj0pFkqD/n32j2sE6NZ6jALgOolXfn95VZYW1nhJ5P35T0NGmhVasOHa52G7e31jkgIIQSS3OQpJhM0tjpr3nfw8KOil4uOEYlUbt0CLy9tu1MnOHUKqlXTNyYhhBAWpFkqD7kXm0gxIlMKui3ULxhhKSEBRo2CKlXg4sWUcklshBAiz5HkJq+Ii6DxvteZZbdY2/dpCLbSKTVPuHQJWrSAuXPh3j345Re9IxJCCPEI0iyVF9y7CnNrUubBstrSMTVP2LQJBg2C8HAoVkxbF6pzZ72jEkII8QhSc5MX3DqTsqncWfPUVmjypo4BCeLitI7Cr7yiJTbNmmmjoSSxEUKIPE9qbvQSEwZLO0D4VTBpw70v2laiXeQUZnmW1zk4wfz5sGCBtv3uu/Dxx2Brq29MQgghMkSSG73cOAphgRZFpwyVAPBwkSHFuhs5EnbtgrffltmGhRAin5HkRm+eVaHPZrCyZsrcE0ACHs52ekdV+MTGajU177wDNjbanDXScVgIIfIlSW70cud+rY21Lbj5YDQpwmKOAODhLDU3uersWW1m4RMntNFQU6fqHZEQQognIB2K9RD6H/wyVts2aD+CuzEJmJRWVKyI1Nzkmm++gYYNtcSmRAlo00bviIQQQjwhSW70EH41ZbvJW4C2rhRAUSdbbK3lx5LjoqNh4EDo10/bbtcOjh2DDh30jkwIIcQTkk9RPZWoBXV7AnAnKgGQJqlcceYMNG4MK1aAlRVMmQK//Qbe3npHJoQQIhtIn5s8Ij5JGw7uaGetcySFgMmkzTpcsiSsWSNNUUIIUcBIciMKB6MRrO8njjVqwPffQ716KYtgCiGEKDCkWSq3KQVnt1kU3YmKZ+DKf3QKqBA4fhxq14a9e1PKOnWSxEYIIQooSW5yW/C/cHiJtm2j9a/591q4+XCd0u46BFVAKQVffglNmsDp0zB2rFYmhBCiQJPkJrfFhKVsd5hsccjTxZ6PutbI5YAKqIgI6NkThgyB+Hh47jnYuhUMBr0jE0IIkcMkucltdy9p//eqAeVaWRzydnXAIB++Ty4gABo0gHXrtNmGZ87UEhsPD70jE0IIkQukQ3FuuhMIP43Stg2SV+aIkyehaVNISIAyZWDtWm1fCCFEoSHJTW6ymLzvTf3iKMhq1IAXXoCkJG0em2LF9I5ICCFELssT1QcLFizAz88PBwcHmjRpwqFDh9I9d8mSJbRs2ZKiRYtStGhROnTo8Mjz8ySv6lC/r95RFBz//APh9ztlGwzw7bfwww+S2AghRCGle3Kzbt06Ro8ezeTJkwkICKBOnTp06tSJW7dupXn+7t276dmzJ7t27WL//v34+vry9NNPc/369VyOXOhOKZgzB5o1gzfeSBkJ5egoHYeFEKIQ0z25mT17NoMHD2bAgAFUr16dxYsX4+TkxPLly9M8f/Xq1QwdOpS6detStWpVli5dislkYufOnbkcudBVWBh06wajR0NiojbrcEKC3lEJIYTIA3RNbhISEjhy5AgdHlis0MrKig4dOrB///4M3SMmJobExESKSRNE4bF/P9StC1u2gJ0dLFgA69eDvazLJYQQQucOxaGhoRiNRkqUKGFRXqJECc6ePZuhe7z77ruUKlXKIkF6UHx8PPHx8eb9iIiIrAecQ6ITkgCwkpaURzOZ4LPPYOJEbTmFihW1pKZePb0jE0IIkYfo3iz1JD799FPWrl3L999/j4ODQ5rnTJ8+HTc3N/PD19c3l6N8vD3nbgNQr0xRnSPJ4+7dg3nztMSmZ09tPhtJbIQQQjxE1+TGw8MDa2trQkJCLMpDQkLw9vZ+5LWfffYZn376Kb/99hu1a9dO97wJEyYQHh5ufly9ejXdc/WQZDTx+xnt9T9do8Rjzi7kihWD776Dr76C1avBxUXviIQQQuRBuiY3dnZ2NGjQwKIzcHLn4KaPmHjtf//7Hx9//DHbt2+nYcOGj3wOe3t7XF1dLR55yZHLd7kbk4iboy2N/aTfkAWTCaZN04Z2J2vVCgYPltFQQggh0qX7JH6jR4/G39+fhg0b0rhxY+bOnUt0dDQDBgwAoF+/fvj4+DB9+nQAZsyYwaRJk1izZg1+fn4EBwcD4OzsjLOzs26vI0MSolMV/XZaq7VpX80LG+t83UqYvUJCoG9f2LEDnJygbVvw8dE7KiGEEPmA7slNjx49uH37NpMmTSI4OJi6deuyfft2cyfjK1euYGWV8qG/aNEiEhISeOWVVyzuM3nyZD788MPcDD1zIm7C2l4WRUopfj2lJWdPV390M1yhsmsX9OoFwcHanDVffAGlSukdlRBCiHxC9+QGYPjw4QwfPjzNY7t377bYDwoKyvmAcsKd/1K2a74EwJmbkVy7G4u9jRWtKsuijhiNMHUqfPSR1iRVo4Y2Gqp6db0jE0IIkY/kieSmUPGsBq3GAvDbaa3WpmUlT5zsCvmPIikJnnkGkvtfDRoE8+drTVJCCCFEJkgnDx39dkrrb9NJRkmBjQ00agRFimgdiJculcRGCCFElkhyo4PIuESenrOH0zcjsDJA+2qFNLlJSoLbt1P2P/oIjh+H3r31i0kIIUS+J8mNDg4HhXE+JAqAdlW9KFbETueIdHDtmjYC6vnnU9aEsrWFChX0jUsIIUS+J8mNDg4H3QWgSgkXFvZuoHM0Oti2TVsbau9eOHsWTp7UOyIhhBAFiCQ3Otj7XygAb7Yuj51NIfoRJCbCuHFabc2dO1C/vraEQv36ekcmhBCiACnkQ3Ryn1EpTt4IB6BFxUI0/PvyZXjtNThwQNsfMQJmzpSVvIUQQmQ7SW5yg8kE++YDEJNgRCmoXMIZL9e0F/sskF5/XUts3Nxg+XJ46SW9IxJCCFFAFaI2ER3dOAoXdgBwJ0mrqWhR0VPPiHLfokXQoQMcPSqJjRBCiBwlyU1uSIwxb35gegOAlpUKeJPUpUvaXDXJKlbU1okqV06/mIQQQhQK0iyVixKKVeavGx7YWhtoXK4ArwC+aZM2w3BEBPj5aTU2QgghRC6RmpuclhADq7oAWn8bgHplilLEvgDmlXFxMHw4vPIKhIfDU09BpUp6RyWEEKKQkeQmJyXGwZwaoEwAXFIlAWhZEEdJXbgAzZrBggXa/rhxsGcPlC2rb1xCCCEKnQJYfZCH3DgKsWEAqCKevB49DFA0L2j9bTZs0JqhIiOheHFYtQqee07vqIQQQhRSUnOTk+7X2AD0dVnCnTiFi4MNtX3cdAwqB0RFaYlNy5Zw7JgkNkIIIXQlNTe5IM6tPHuDtBFTNUu5YWNdAHLKpCRtJW+A/v3B2RlefDGlTAghhNBJAfiUzfuUStme+1pd3eLINt98A7Vra0soABgM8OqrktgIIYTIEyS5yUWVvJwpkZ9nJY6OhoEDoV8/OHMG5s/XOyIhhBAiFfmqnQuSa26srQz6BvIkTp2C7t3h9GmtpmbyZHj/fb2jEkIIIVKR5CYXJBi1jsV+xYvoHEkWKAUrV8KwYRAbC97esGYNtG2rd2RCCCFEmqRZKhckJGnJTRVvF50jyYKFC7WmqNhY6NhRGw0liY0QQog8TJKbXJBcc1M1PyY3vXtr60JNmwbbt0OJEnpHJIQQQjySNEvlgnxVc6MU/P67th6UwQDu7nDiBDjk447QQgghChVJbnKBUgoHWyvK5vU+NxER8OabsHYtfPklvKGtYC6JjciLjEYjiYmJeochhMhGdnZ2WFk9eaOSJDe5pJKXS94eLXX0qDYa6sIFbb6a2Fi9IxIiTUopgoODuXfvnt6hCCGymZWVFeXKlcPOzu6J7iPJTS7Js01SSmmdhkePhoQEKFNGq7lp2lTvyIRIU3Ji4+XlhZOTEwZDHv7SIITIMJPJxI0bN7h58yZlypR5ot9tSW5ySZ7sTHzvHrz+OmzapO136QIrVkCxYrqGJUR6jEajObEpXry43uEIIbKZp6cnN27cICkpCVtb2yzfR0ZL5ZI8WXNz4gR8/z3Y2sKcOfDDD5LYiDwtuY+Nk5OTzpEIIXJCcnOU0Wh8ovtIzU0Oik8yYX9/O08mNy1bwhdfQMOG0KiR3tEIkWHSFCVEwZRdv9tSc5ODrt3VVgK3sjLg6Wz/mLNzQVgY9OoF586llL31liQ2QgghChRJbnLQ5TAtubGzsdL/m+b+/VCvHnz3HfTta7lUuRAi39u9ezcGgyFTo8j8/PyYO3dujsUkhF4kuclBV+8nN/bWOr7NJhPMnAmtWsGVK1ChAixerE3QJ4TIFf3798dgMDBkyJBUx4YNG4bBYKB///65H1gm+Pn5YTAYMBgMODk5UatWLZYuXWpxTnKC9fDj/Qwssjt9+nSsra2ZOXNmqmMffvghdevWTVUeFBSEwWDg2LFj5jKlFF999RVNmjTB2dkZd3d3GjZsyNy5c4mJicn0686vNmzYQNWqVXFwcKBWrVps27btsdesXr2aOnXq4OTkRMmSJRk4cCB37tyxOOfevXsMGzaMkiVLYm9vT+XKlTN079wmyU1OMRlpfnEeoNXc6CI0FDp3hnHjICkJevSAgACoX1+feIQoxHx9fVm7di2xD8whFRcXx5o1ayhTpoyOkWXcRx99xM2bNzl58iR9+vRh8ODB/PLLL6nOO3fuHDdv3jQ/xo8f/9h7L1++nHHjxrF8+fInirFv37688847dO3alV27dnHs2DE++OADfvzxR3777bcnuveDEhISsu1e2e3vv/+mZ8+eDBo0iKNHj9KtWze6devGyZMn071m37599OvXj0GDBnHq1Ck2bNjAoUOHGDx4sPmchIQEOnbsSFBQEBs3buTcuXMsWbIEHx+f3HhZmSLJTU65cZSKiVrfFitnz9x//gsXoG5d2LZNm2H4yy+1JilX19yPRQhB/fr18fX1ZfPmzeayzZs3U6ZMGerVq2dxbnx8PG+//TZeXl44ODjQokULDh8+bHHOtm3bqFy5Mo6OjrRt25agoKBUz7l3715atmyJo6Mjvr6+vP3220RHR2f5Nbi4uODt7U358uV59913KVasGDt27Eh1npeXF97e3uaHs7PzI++7Z88eYmNj+eijj4iIiODvv//OUnzr169n9erVfPfdd0ycOJFGjRrh5+dH165d+eOPP2ibzqK/RqORQYMGUa5cORwdHalSpQrz5s2zOKd///5069aNadOmUapUKapUqQLA1atX6d69O+7u7hQrVoyuXbta/CwOHz5Mx44d8fDwwM3NjdatWxMQEJCl15dR8+bN45lnnmHs2LFUq1aNjz/+mPr16/PFF1+ke83+/fvx8/Pj7bffply5crRo0YI333yTQ4cOmc9Zvnw5YWFh/PDDDzRv3hw/Pz9at25NnTp1cvT1ZIUkNznkbmSUedv6laWPODOHlC2rPapUgYMHtaUUpClKFDBKKWISknR5qCz0Wxs4cCArVqww7y9fvpwBAwakOm/cuHFs2rSJr7/+moCAACpWrEinTp0ICwsDtA/Ul156ic6dO3Ps2DFef/31VLUjgYGBPPPMM7z88sv8+++/rFu3jr179zJ8+PBMx/0wk8nEpk2buHv37hPPJAuwbNkyevbsia2tLT179mTZsmVZus/q1aupUqUKXbt2TXXMYDDg5uaW5nUmk4nSpUuzYcMGTp8+zaRJk5g4cSLr16+3OG/nzp2cO3eOHTt28NNPP5GYmEinTp1wcXHhr7/+Yt++fTg7O/PMM8+Ya3YiIyPx9/dn7969HDhwgEqVKvHcc88RGRn5yNfh7Oz8yMdff/2V7vX79++nQ4cOFmWdOnVi//796V7TtGlTrl69yrZt21BKERISwsaNG3nuuefM52zZsoWmTZsybNgwSpQoQc2aNfnkk0+eeNh2TpCh4DkgLDqBN1cdYYM9XDGUooynX+488e3b4OYGdnba3DUbN4KLCzzmW5MQ+VVsopHqk37V5blPf9QJJ7vM/Qnt06cPEyZM4PLly4DWFLB27Vp2795tPic6OppFixaxcuVKnn32WQCWLFnCjh07WLZsGWPHjmXRokVUqFCBWbNmAVClShVOnDjBjBkzzPeZPn06vXv35p133gGgUqVKzJ8/n9atW7No0SIcsrBm3Lvvvsv7779PfHw8SUlJFCtWjNdffz3VeaVLl7bYv3z5crqTLkZERLBx40bzB2+fPn1o2bIl8+bNe2yNz8P+++8/c41KZtja2jJlyhTzfrly5di/fz/r16+ne/fu5vIiRYqwdOlSc0L37bffYjKZWLp0qXnQyIoVK3B3d2f37t08/fTTtGvXzuK5vvrqK9zd3dmzZw8vvPBCmvF06dKFJk2aPDLmRzUFBQcHU6JECYuyEiVKEBwcnO41zZs3Z/Xq1fTo0YO4uDiSkpLo3LkzCxYsMJ9z8eJF/vjjD3r37s22bdu4cOECQ4cOJTExkcmTJz8y3twmyU0OOHL5rnnb0c46d5501y5tmHfv3vDZZ1pZyZK589xCiAzx9PTk+eefZ+XKlSileP755/Hw8LA4JzAwkMTERJo3b24us7W1pXHjxpw5cwaAM2fOpPrwa/rQkinHjx/n33//ZfXq1eYypRQmk4lLly5RrVq1TMc/duxY+vfvz82bNxk7dixDhw6lYsWKqc7766+/cHFJmduraNGi6d7zu+++o0KFCuamjbp161K2bFnWrVvHoEGDMhVfVmrTki1YsIDly5dz5coVYmNjSUhISNWJuVatWhY1VcePH+fChQsWrxW0vlSBgYEAhISE8P7777N7925u3bqF0WgkJiaGK1eupBuLi4tLqnvmtNOnTzNy5EgmTZpEp06dzD/jIUOGmGvSTCYTXl5efPXVV1hbW9OgQQOuX7/OzJkzJbkpDG7cS+kwmOPz2xiNMHUqfPSRNjJq+3ZtW2ZwFYWAo601pz/qpNtzZ8XAgQPNTUMPfivOblFRUbz55pu8/fbbqY5ltQOzh4cHFStWpGLFimzYsIFatWrRsGFDqlevbnFeuXLlcHd3z9A9ly1bxqlTp7CxSfk4MplMLF++3JzcuLq6Eh4enura5GHvyc1NlStX5uzZs5l+XWvXrmXMmDHMmjWLpk2b4uLiwsyZMzl48KDFeUWKFLHYj4qKokGDBhYJZDJPT62vpb+/P3fu3GHevHmULVsWe3t7mjZt+sgOyatXr+bNN998ZMy//PILLVu2TPOYt7c3ISEhFmUhISF4e3une7/p06fTvHlzxo4dC0Dt2rUpUqQILVu2ZOrUqZQsWZKSJUtia2uLtXXKv/1q1aoRHBxMQkJCtjRRZhdJbnLA9Xu5tKL2zZvQpw/88Ye2P3AgfP65JDai0DAYDJluGtJbcn8Mg8FAp06pE7MKFSpgZ2fHvn37KFu2LKAtO3H48GFzE1O1atXYsmWLxXUHDhyw2K9fvz6nT59Os2YlO/j6+tKjRw8mTJjAjz/+mKV7nDhxgn/++Yfdu3dT7IGlX8LCwmjTpg1nz56latWqVKlShWvXrhESEmLR3BIQEICDg4M5WevVqxevvfYaP/74Y6p+N0opIiIi0ux3s2/fPpo1a8bQoUPNZck1L49Sv3591q1bh5eXF67pDNbYt28fCxcuNPdduXr1KqGhoY+875M2SzVt2pSdO3ea/70A7NixI1Xt3oNiYmIsEkzAnMQk14g1b96cNWvWYDKZsLLSuuyeP3+ekiVL5qnEBgBVyISHhytAhYeH59hzDP32iHpl/GdKTXZVan79nHmS335TystLKVCqSBGlVq3KmecRIg+JjY1Vp0+fVrGxsXqHkin+/v6qa9eu5v3w8HCLv0Fdu3ZV/v7+5v2RI0eqUqVKqV9++UWdOnVK+fv7q6JFi6qwsDCllFKXL19WdnZ2asyYMers2bNq9erVytvbWwHq7t27Simljh8/rhwdHdWwYcPU0aNH1fnz59UPP/yghg0bZn6esmXLqjlz5mToNaR17qlTp5TBYFCHDx9WSim1a9cuixgeZ+TIkapJkyZpHmvcuLEaM2aMUkqpxMREVaNGDdW2bVu1b98+FRgYqDZs2KBKliyp3n33XfM1JpNJ9ejRQzk6Oqpp06apw4cPq6CgILV161bVrl079f3336f5XPPmzVOurq5q+/bt6ty5c+r9999Xrq6uqk6dOuZzHv4ZKqVUdHS0qlSpkmrTpo36888/1cWLF9WuXbvUiBEj1NWrV5VSStWrV0917NhRnT59Wh04cEC1bNlSOTo6Zvh9z4p9+/YpGxsb9dlnn6kzZ86oyZMnK1tbW3XixAnzOePHj1d9+/Y1769YsULZ2NiohQsXqsDAQLV3717VsGFD1bhxY/M5V65cUS4uLmr48OHq3Llz6qefflJeXl5q6tSp2Rb7o37HM/P5LclNDuj6xd6cTW7u3lXKzU1LbGrVUurMmex/DiHyoIKS3Dzs4eQmNjZWjRgxQnl4eCh7e3vVvHlzdejQIYtrtm7dqipWrKjs7e1Vy5Yt1fLly1MlFocOHVIdO3ZUzs7OqkiRIqp27dpq2rRp5uNPmtwopVSnTp3Us88+q5TKXHITHx+vihcvrv73v/+leXzGjBnKy8tLJSQkKKWUun79uvL391dlypRRjo6Oqnr16urTTz81H09mNBrVokWLVKNGjZSTk5NydXVVDRo0UPPmzVMxMTFpPldcXJzq37+/cnNzU+7u7uqtt95S48ePf2xyo5RSN2/eVP369TP/rMqXL68GDx5s/owJCAhQDRs2VA4ODqpSpUpqw4YNmXrfs2r9+vWqcuXKys7OTtWoUUP9/PPPFsf9/f1V69atLcrmz5+vqlevrhwdHVXJkiVV79691bVr1yzO+fvvv1WTJk3Mr3XatGkqKSkp2+LOruTGoFThmoc/uVoyPDw83WrEJ9Vo2u/4RR1ng/1HULwijDiS/U+ydq3WiXjuXHB0zP77C5EHxcXFcenSJcqVK5el0T5CiLztUb/jmfn8lnlusllcopHbkfHZf+NfftGSmWSvvaZNzCeJjRBCCGFBkptsFhweB4CdTTZNmJeYCO++C889Bz17wkM94IUQ4kk9atK4GjVq6B2eEJmWv4YZ5APJI6U8ne3hSQdNXbmi1dAkzyr5yivaJH1CCJGNHjU6x9bWNpejEeLJSXKTza7f1TKa4i5PmNxs2QL9+8Pdu1pCs2wZvPxytsQohBAP0mPSOCFykjRLZbPkmpsSzln8tmM0wujR0LWrltg0aqSt5C2JjRBCCJEhUnOTzYLDwllqO5MOF49qBYZMzmJqZQW3bmnb77wDM2Zoa0UJIYQQIkMkuclmdrdP0sH6fmJj7wotRmXswqQksLHRVu5etEhbI+r+onlCCCGEyDhJbrLZnai4lJ13ToCj+6MviI+HMWO0zsM//KAlNy4uktgIIYQQWSTJTTYymRR3ouLBBhLdymH7uMTmwgXo0UPrUwOwdy+ksxCaEEIIITJGOhRno9tR8SQatQmfbawfM8/NunVQv76W2BQvDj/9JImNECLLdu/ejcFgMK+UnRF+fn7MnTs3x2ISQi+S3GSj63dj6GmtrdCdbmoTGwtDhmjz10RGQosWcOwYPP98boUphMhl/fv3x2AwMGTIkFTHhg0bhsFgoH///rkfWCYcP36cLl264OXlhYODA35+fvTo0YNbt25x5MgRDAZDqpXJk7Vv356XXnoJyN73omrVqtjb2xMcHJzqWHqJ24cffkjdunUtyoKDgxkxYgTly5fH3t4eX19fOnfuzM6dOzMUR0EQFxfHsGHDKF68OM7Ozrz88suEPGbS2KioKIYPH07p0qVxdHSkevXqLF682Hw8KCgIg8GQ5mPDhg05+nokuclGEVf+5VWbP7UdO+e0T0peNsFggIkTtSUVSpfOvSCFELrw9fVl7dq1xMamTIAVFxfHmjVrKFOmjI6RPd7t27dp3749xYoV49dff+XMmTOsWLGCUqVKER0dTYMGDahTpw7Lly9PdW1QUBC7du1i0KBB5rLseC/27t1LbGwsr7zyCl9//XWWX1tQUBANGjTgjz/+YObMmZw4cYLt27fTtm1bhg0bluX7piUxMTFb75edRo0axdatW9mwYQN79uzhxo0b5oQ0PaNHj2b79u18++23nDlzhnfeeYfhw4ezZcsWQPs537x50+IxZcoUnJ2deTaH+5VKcpON7t4NS9npPDftkyZOBB8f2L4dpk3TRkgJIQq8+vXr4+vry+bNm81lmzdvpkyZMtSrV8/i3Pj4eN5++21zLUmLFi04fPiwxTnbtm2jcuXKODo60rZtW4KCglI95969e2nZsiWOjo74+vry9ttvEx0dnenY9+3bR3h4OEuXLqVevXqUK1eOtm3bMmfOHMqVKwfAoEGDWLduHTExMRbXrly5kpIlS/LMM89k6b1Iz7Jly+jVqxd9+/ZNM6nKqKFDh2IwGDh06BAvv/wylStXpkaNGowePTrdmiiAw4cP07FjRzw8PHBzc6N169YEJPefvM9gMLBo0SK6dOlCkSJFmDZtGgA//vgj9evXx8HBgfLlyzNlyhSSkpLM182ePZtatWpRpEgRfH19GTp0KFFRUVl+jY8THh7OsmXLmD17Nu3ataNBgwasWLGCv//++5Hvwd9//42/vz9t2rTBz8+PN954gzp16nDo0CEArK2t8fb2tnh8//33dO/eHWfndCoAsokkN9klMY4Xjr4JwF370uDTQCuPiYE9e1LOa9IEAgPh6ad1CFKIAkYpSIjW56FUpsMdOHAgK1asMO8vX76cAQMG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DH9/f3Wf92dehEJhnfjt7e0RFxcHCwsLmJqa/quYGDNEvKCYsTakV69eqK6uxq5du1BUVISjR49i7969DfavqKhAYGAgUlJScP/+faSnp+P69evq202rVq3ClStXEBgYiKysLNy7dw9nzpzRekHxP61YsQLfffcd4uLikJeXh+DgYGRlZWHJkiUAgIiICBw7dgx3795Ffn4+4uPjYWlpWe8fHrSwsIBEIkFiYiKePn2KV69eNXheb29vJCQk4ODBg+qFxLXWr1+PI0eOYMOGDbhz5w5yc3MRGxuLtWvXanVtTk5O6N+/P8LCwgAAn3/+OW7cuIGkpCTk5+dj3bp1uH79usaYHj16IDs7G3l5eXj+/Dmqq6vh7e2NLl26wMPDA6mpqSguLkZKSgqCgoLw6NEjrWJizCC19qIfxtjHV98i1FoREREkk8lIIpGQm5sbHTlyhADQy5cviUhzwe+7d+9oxowZpFAoSCgUklwup8DAQI3FwteuXaPRo0dTx44dycTEhPr3719nQfA/vb+g+H1KpZJCQ0OpW7du1L59exowYACdP39evT8qKooGDhxIJiYmZGpqSqNGjaKbN2+q9+MfC4qJiPbv308KhYIEAgENHz68wfwolUqSyWQEgAoLC+vElZiYSM7OziSRSMjU1JQcHR0pKiqqwesICQmhAQMG1Gk/duwYiUQievDgAVVWVpKPjw+ZmZmRubk5LVq0iIKDgzXGPXv2TJ1fAHT58mUiIiotLaXZs2dTly5dSCQSkbW1NS1YsIBevXrVYEyMtRVGREStW14xxhhjjH08fFuKMcYYYwaFixvGGGOMGRQubhhjjDFmULi4YYwxxphB4eKGMcYYYwaFixvGGGOMGRQubhhjjDFmULi4YYwxxphB4eKGMcYYYwaFixvGGGOMGRQubhhjjDFmULi4YYwxxphB+T9VdC3roespfAAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Specify model\n",
        "model_ANN = MLPClassifier(hidden_layer_sizes=(5, 3))\n",
        "\n",
        "# Fit model on single split\n",
        "performance_measures = model_training_and_validation(model_ANN, \"ANN\", splits)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "1m3rVarmJpx0",
        "outputId": "3904f620-b442-4e5d-9f16-e05d1d8b99df"
      },
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Sensitivity: 0.88\n",
            "Specificity: 0.70\n",
            "AUC: 0.86\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Append ANN model\n",
        "models.append({\"label\": \"Model_ANN\", \"model\": model_ANN})\n",
        "# Plot roc curve\n",
        "plot_roc_curves_for_models(models, static_test_x, static_test_y, True);"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "OKL5ro69Jtoc",
        "outputId": "1f691403-b522-4124-df46-69086615288f"
      },
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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zT4shDBhdnJja2uL1YNRMF5eXly9qn0hurm5ce3ateyNTjw1X205z53IeHyKONGktF3KgeEBULuXSd1Te36l3NqDAAS2KE/Vf4/QvM+YpxmuEAXLtWvQsqXWeThZx45QqZLlYhIiFzM7ualbty6HDx8GoGXLlnz88ccsX76cd999lxo1amR7gCLnnboRzk8HrgAw+X81sU0ewl37FShSIVX9q3/9atx2qFYNO0enpxGmEAXTxo1Qpw7s2QNDh2rz2QghMmR2cvP5559TooR262Hy5Ml4eHjw1ltvcffuXb7//vtsD1DkvMNBoSgFLSp70rRi5ucvCqpWmHbvTsvByIQowBIS4L33tNW8Q0Ohfn3480+wtrZ0ZELkemaPlqpfv75x28vLi82bN2drQOLpS76V7+5oq23c+y9T5+m9CudQREIUcEFB0LMnHDqk7b/zDkydqq3qLYR4rGybQjYgIIAuXbqYfd7s2bPx8fHBwcGBRo0acSj5w5yOsLAwhg4dSokSJbC3t6dy5cps2rQpq2EL4FJIFADFrSPgywoQ8OODI2nPbmq4m3pVeCFENrl2TZuI79AhcHeHX36BGTMksRHCDGYlN1u2bGHUqFGMHz+eS5e0yd7OnTtH9+7dadCggXGJhsxatWoVI0eOZMKECQQEBFC7dm06dOjAnTt30qyfkJBA+/btCQoKYu3atZw/f5758+dTqlQps55XpLgXFc+Kg1qn8J5ORyAmJOVgrZdN6t698R97G9egwq7MtewIIbKgdGno2hWeeQaOHYMH6/oJITIv07elFi5cyKBBgyhcuDD3799nwYIFfPPNNwwfPpyePXty6tQpfH19zXryb775hkGDBtG/vzZN/7x58/jjjz9YtGgR48aNS1V/0aJFhIaG8s8//2Brq91CkZXIs+7foFBemrcfgJJuDpTzsE05OO4aOBQyqR+w9BvK3E/pzOjV0fyWOiFEGgIDtVaaIkW09aDmzQNbW+0hhDBbpltuZs6cydSpUwkJCWH16tWEhIQwZ84cTp48ybx588xObBISEjhy5Ajt2rVLCcbKinbt2rF///40z9mwYQONGzdm6NChFCtWjBo1avD555+jz2D0QHx8PBERESYPoTl5I9y4PbRNRaySF9mr2SNVYgNgiI83bhf/ewsNu7+Z4zEKke+tXq3dhurfP6UDnJOTJDZCPIFM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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def crossvalidation(ml_model, df, n_folds=5, verbose=False):\n",
        "    \"\"\"\n",
        "    Machine learning model training and validation in a cross-validation loop.\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    ml_model: sklearn model object\n",
        "        The machine learning model to train.\n",
        "    df: pd.DataFrame\n",
        "        Data set with SMILES and their associated activity labels.\n",
        "    n_folds: int, optional\n",
        "        Number of folds for cross-validation.\n",
        "    verbose: bool, optional\n",
        "        Performance measures are printed.\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    None\n",
        "\n",
        "    \"\"\"\n",
        "    t0 = time.time()\n",
        "    # Shuffle the indices for the k-fold cross-validation\n",
        "    kf = KFold(n_splits=n_folds, shuffle=True)\n",
        "\n",
        "    # Results for each of the cross-validation folds\n",
        "    acc_per_fold = []\n",
        "    sens_per_fold = []\n",
        "    spec_per_fold = []\n",
        "    auc_per_fold = []\n",
        "\n",
        "    # Loop over the folds\n",
        "    for train_index, test_index in kf.split(df):\n",
        "        # clone model -- we want a fresh copy per fold!\n",
        "        fold_model = clone(ml_model)\n",
        "        # Training\n",
        "\n",
        "        # Convert the fingerprint and the label to a list\n",
        "        train_x = df.iloc[train_index].fp.tolist()\n",
        "        train_y = df.iloc[train_index].active.tolist()\n",
        "\n",
        "        # Fit the model\n",
        "        fold_model.fit(train_x, train_y)\n",
        "\n",
        "        # Testing\n",
        "\n",
        "        # Convert the fingerprint and the label to a list\n",
        "        test_x = df.iloc[test_index].fp.tolist()\n",
        "        test_y = df.iloc[test_index].active.tolist()\n",
        "\n",
        "        # Performance for each fold\n",
        "        accuracy, sens, spec, auc = model_performance(fold_model, test_x, test_y, verbose)\n",
        "\n",
        "        # Save results\n",
        "        acc_per_fold.append(accuracy)\n",
        "        sens_per_fold.append(sens)\n",
        "        spec_per_fold.append(spec)\n",
        "        auc_per_fold.append(auc)\n",
        "\n",
        "    # Print statistics of results\n",
        "    print(\n",
        "        f\"Mean accuracy: {np.mean(acc_per_fold):.2f} \\t\"\n",
        "        f\"and std : {np.std(acc_per_fold):.2f} \\n\"\n",
        "        f\"Mean sensitivity: {np.mean(sens_per_fold):.2f} \\t\"\n",
        "        f\"and std : {np.std(sens_per_fold):.2f} \\n\"\n",
        "        f\"Mean specificity: {np.mean(spec_per_fold):.2f} \\t\"\n",
        "        f\"and std : {np.std(spec_per_fold):.2f} \\n\"\n",
        "        f\"Mean AUC: {np.mean(auc_per_fold):.2f} \\t\"\n",
        "        f\"and std : {np.std(auc_per_fold):.2f} \\n\"\n",
        "        f\"Time taken : {time.time() - t0:.2f}s\\n\"\n",
        "    )\n",
        "\n",
        "    return acc_per_fold, sens_per_fold, spec_per_fold, auc_per_fold"
      ],
      "metadata": {
        "id": "yxrtPIX2KVPz"
      },
      "execution_count": 25,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "N_FOLDS = 3"
      ],
      "metadata": {
        "id": "0E_3bvsuKdu6"
      },
      "execution_count": 26,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "for model in models:\n",
        "    print(\"\\n======= \")\n",
        "    print(f\"{model['label']}\")\n",
        "    crossvalidation(model[\"model\"], compound_df, n_folds=N_FOLDS)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "S7enDvcdKfu5",
        "outputId": "ad18ee89-bd3f-4e2c-bb52-07cbc589508c"
      },
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "======= \n",
            "Model_RF\n",
            "Mean accuracy: 0.82 \tand std : 0.01 \n",
            "Mean sensitivity: 0.88 \tand std : 0.01 \n",
            "Mean specificity: 0.72 \tand std : 0.00 \n",
            "Mean AUC: 0.88 \tand std : 0.00 \n",
            "Time taken : 1.56s\n",
            "\n",
            "\n",
            "======= \n",
            "Model_SVM\n",
            "Mean accuracy: 0.83 \tand std : 0.01 \n",
            "Mean sensitivity: 0.91 \tand std : 0.01 \n",
            "Mean specificity: 0.71 \tand std : 0.00 \n",
            "Mean AUC: 0.89 \tand std : 0.01 \n",
            "Time taken : 15.20s\n",
            "\n",
            "\n",
            "======= \n",
            "Model_ANN\n",
            "Mean accuracy: 0.78 \tand std : 0.00 \n",
            "Mean sensitivity: 0.85 \tand std : 0.03 \n",
            "Mean specificity: 0.67 \tand std : 0.05 \n",
            "Mean AUC: 0.83 \tand std : 0.00 \n",
            "Time taken : 5.18s\n",
            "\n",
            "\n",
            "======= \n",
            "Model_ANN\n",
            "Mean accuracy: 0.78 \tand std : 0.00 \n",
            "Mean sensitivity: 0.86 \tand std : 0.02 \n",
            "Mean specificity: 0.68 \tand std : 0.02 \n",
            "Mean AUC: 0.84 \tand std : 0.01 \n",
            "Time taken : 4.72s\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Reset data frame\n",
        "compound_df = chembl_df.copy()"
      ],
      "metadata": {
        "id": "eUSUe5glKxIp"
      },
      "execution_count": 28,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Use Morgan fingerprint with radius 3\n",
        "compound_df[\"fp\"] = compound_df[\"smiles\"].apply(smiles_to_fp, args=(\"morgan3\",))\n",
        "compound_df.head(3)\n",
        "# NBVAL_CHECK_OUTPUT"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 344
        },
        "id": "mhU26x6CKyuh",
        "outputId": "cffb681d-42c1-4a39-d2b1-bd85ac260eff"
      },
      "execution_count": 29,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  molecule_chembl_id                               smiles      pIC50  active  \\\n",
              "0        CHEMBL63786    Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1  11.522879     1.0   \n",
              "1        CHEMBL53711   CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1  11.221849     1.0   \n",
              "2        CHEMBL35820  CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC  11.221849     1.0   \n",
              "\n",
              "                                                  fp  \n",
              "0  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
              "1  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
              "2  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  "
            ],
            "text/html": [
              "\n",
              "\n",
              "  <div id=\"df-d3f93327-1742-4b26-af2d-c2872008da5d\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>molecule_chembl_id</th>\n",
              "      <th>smiles</th>\n",
              "      <th>pIC50</th>\n",
              "      <th>active</th>\n",
              "      <th>fp</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>CHEMBL63786</td>\n",
              "      <td>Brc1cccc(Nc2ncnc3cc4ccccc4cc23)c1</td>\n",
              "      <td>11.522879</td>\n",
              "      <td>1.0</td>\n",
              "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>CHEMBL53711</td>\n",
              "      <td>CN(C)c1cc2c(Nc3cccc(Br)c3)ncnc2cn1</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>1.0</td>\n",
              "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>CHEMBL35820</td>\n",
              "      <td>CCOc1cc2ncnc(Nc3cccc(Br)c3)c2cc1OCC</td>\n",
              "      <td>11.221849</td>\n",
              "      <td>1.0</td>\n",
              "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d3f93327-1742-4b26-af2d-c2872008da5d')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "\n",
              "\n",
              "\n",
              "    <div id=\"df-0084d01f-898f-4898-a059-1c6bc886ae3c\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-0084d01f-898f-4898-a059-1c6bc886ae3c')\"\n",
              "              title=\"Suggest charts.\"\n",
              "              style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "    </div>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "    background-color: #E8F0FE;\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: #1967D2;\n",
              "    height: 32px;\n",
              "    padding: 0 0 0 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: #E2EBFA;\n",
              "    box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: #174EA6;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "    background-color: #3B4455;\n",
              "    fill: #D2E3FC;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart:hover {\n",
              "    background-color: #434B5C;\n",
              "    box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "    filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "    fill: #FFFFFF;\n",
              "  }\n",
              "</style>\n",
              "\n",
              "    <script>\n",
              "      async function quickchart(key) {\n",
              "        const containerElement = document.querySelector('#' + key);\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      }\n",
              "    </script>\n",
              "\n",
              "      <script>\n",
              "\n",
              "function displayQuickchartButton(domScope) {\n",
              "  let quickchartButtonEl =\n",
              "    domScope.querySelector('#df-0084d01f-898f-4898-a059-1c6bc886ae3c button.colab-df-quickchart');\n",
              "  quickchartButtonEl.style.display =\n",
              "    google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "}\n",
              "\n",
              "        displayQuickchartButton(document);\n",
              "      </script>\n",
              "      <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-d3f93327-1742-4b26-af2d-c2872008da5d button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-d3f93327-1742-4b26-af2d-c2872008da5d');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 29
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "for model in models:\n",
        "    if model[\"label\"] == \"Model_SVM\":\n",
        "        # SVM is super slow with long fingerprints\n",
        "        # and will have a performance similar to RF\n",
        "        # We can skip it in this test, but if you want\n",
        "        # to run it, feel free to replace `continue` with `pass`\n",
        "        continue\n",
        "    print(\"\\n=======\")\n",
        "    print(model[\"label\"])\n",
        "    crossvalidation(model[\"model\"], compound_df, n_folds=N_FOLDS)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "G4khVL1KK1v4",
        "outputId": "71e60815-32d8-4966-cd3f-9c28e8dcdcea"
      },
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "=======\n",
            "Model_RF\n",
            "Mean accuracy: 0.85 \tand std : 0.00 \n",
            "Mean sensitivity: 0.90 \tand std : 0.00 \n",
            "Mean specificity: 0.78 \tand std : 0.01 \n",
            "Mean AUC: 0.91 \tand std : 0.00 \n",
            "Time taken : 7.14s\n",
            "\n",
            "\n",
            "=======\n",
            "Model_ANN\n",
            "Mean accuracy: 0.80 \tand std : 0.02 \n",
            "Mean sensitivity: 0.85 \tand std : 0.02 \n",
            "Mean specificity: 0.74 \tand std : 0.04 \n",
            "Mean AUC: 0.85 \tand std : 0.01 \n",
            "Time taken : 25.79s\n",
            "\n",
            "\n",
            "=======\n",
            "Model_ANN\n",
            "Mean accuracy: 0.82 \tand std : 0.01 \n",
            "Mean sensitivity: 0.87 \tand std : 0.00 \n",
            "Mean specificity: 0.75 \tand std : 0.02 \n",
            "Mean AUC: 0.88 \tand std : 0.01 \n",
            "Time taken : 25.99s\n",
            "\n"
          ]
        }
      ]
    }
  ]
}