{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Training: Classical case" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In this section, we present a complete use case of ``lambeq``'s :py:mod:`.training` module, implementing a classical pipeline on the meaning classification dataset introduced in [Lea2021]_. The goal is to classify simple sentences (such as \"skillful programmer creates software\" and \"chef prepares delicious meal\") into two categories, food or IT. The dataset consists of 130 sentences created using a simple context-free grammar.\n", "\n", "We will use a :py:class:`.SpiderAnsatz` to split large tensors into chains of smaller ones. The pipeline uses PyTorch as a backend.\n", "\n", ":download:`Download code <../_code/trainer-classical.ipynb>`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparation\n", "\n", "We start with importing PyTorch and specifying some training hyperparameters." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import torch\n", "\n", "BATCH_SIZE = 30\n", "EPOCHS = 30\n", "LEARNING_RATE = 3e-2\n", "SEED = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Input data\n", "\n", "Let's read the data and print some example sentences." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def read_data(filename):\n", " labels, sentences = [], []\n", " with open(filename) as f:\n", " for line in f:\n", " t = float(line[0])\n", " labels.append([t, 1-t])\n", " sentences.append(line[1:].strip())\n", " return labels, sentences\n", "\n", "\n", "train_labels, train_data = read_data('../examples/datasets/mc_train_data.txt')\n", "val_labels, val_data = read_data('../examples/datasets/mc_dev_data.txt')\n", "test_labels, test_data = read_data('../examples/datasets/mc_test_data.txt')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "nbsphinx": "hidden" }, "outputs": [], "source": [ "import os\n", "\n", "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", "\n", "if TESTING:\n", " train_labels, train_data = train_labels[:2], train_data[:2]\n", " val_labels, val_data = val_labels[:2], val_data[:2]\n", " test_labels, test_data = test_labels[:2], test_data[:2]\n", " EPOCHS = 1" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['skillful man prepares sauce .',\n", " 'skillful man bakes dinner .',\n", " 'woman cooks tasty meal .',\n", " 'man prepares meal .',\n", " 'skillful woman debugs program .']" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_data[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Targets are represented as 2-dimensional arrays:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_labels[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating and parameterising diagrams" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The first step is to convert sentences into :term:`string diagrams `." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Tagging sentences.\n", "Parsing tagged sentences.\n", "Turning parse trees to diagrams.\n", "Tagging sentences.\n", "Parsing tagged sentences.\n", "Turning parse trees to diagrams.\n", "Tagging sentences.\n", "Parsing tagged sentences.\n", "Turning parse trees to diagrams.\n" ] } ], "source": [ "from lambeq import BobcatParser\n", "\n", "parser = BobcatParser(verbose='text')\n", "\n", "train_diagrams = parser.sentences2diagrams(train_data)\n", "val_diagrams = parser.sentences2diagrams(val_data)\n", "test_diagrams = parser.sentences2diagrams(test_data)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The produced diagrams need to be parameterised by a specific :term:`ansatz `. For this experiment we will use a :py:class:`.SpiderAnsatz`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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k8lk/ryrqys6duwIT09P6HS6Wrv6hrm4uCj4bYnut/ni4mIUFhY2uisoKEBhYSHy8vIsikUA8PDwqPXHV2BgIPr378/isY1iQUnUtrTaaygbS61Wo1evXujVq1etww0GA27cuGFRaObm5pp3sIWFhbh27ZrFzresrKzO+bm4uDRYgLq6usLJyQnOzs5wdnZu8uvahjk4OPDIqp0xmUyorKxEZWUlKioqUFFRIft1eXk5ioqK6i0Oi4qK6rxJzcHBodYfQoGBgdDpdNDr9ejSpYu5aOzcuTM8PDxsnDkiIrI3bb6gbIijo6N5xzlkyJBGjVNZWdngTv3B7urVq+bX9+7dsygSrEGlUkkqThvz2tHRESqVqtZOrVZbpX/VMGdnZ1RUVEAIYdGZTKYa/err39hxqoo+KQVeQ58zGAxWWbZVeanq3N3dLYrBgICAOo+YP/ijxtXVlT88iIioyVhQNgMnJyfo9Xro9XrZ0xJCwGAwSD5qJXec8vJylJSU1Pu5ysrKOou2xhZ3tQ2vTd++fXHq1Klah9VViDamWK1reFWx1lBh7erqCk9PT8lHkKWOU3X0mYiISEksKO2cSqWCk5MTnJycoNVqlQ7H5h4sOE0mU52FIRERESmDBSXZterFIo/EERER2adW+59yiIiIiMg2WFASERERkSwsKImIiIhIFhaURERERCQLC0oiIiIikoUFJRERERHJwoKSiIiIiGRhQUlEREREsrCgJCIiIiJZWFASERERkSwsKImIiIhIFhaURERERCQLC0oiIiIikoUFJRERERHJwoKSiIiIiGRhQUlEREREsrCgJCIiIiJZWFASERERkSwsKImIiIhIFhaURERERCQLC0oiIiIikoUFJRERERHJwoKSiIiIiGRhQUlEREREsrCgJCIiIiJZWFASERERkSwsKImIiIhIFhaURERERCQLC0oiIrI6R0dHDBkyBO3bt1c6FCKyAZUQQigdBBERERG1XDxCSURERESysKAkIiIiIllYUBIRERGRLCwoiYiIiEgWFpREREREJAsLSiIiIiKShQUlEREREcnCgpKIiIiIZGFBSURERESysKAkIiIiIllYUBIRERGRLCwoiYiIiEgWFpREREREJAsLSiIiIiKShQUlEREREcnCgpKIiIiIZGFBSURERESysKAkIiIiIllYUBIRERGRLP8H2Kk/zzRzGw0AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq.backend.tensor import Dim\n", "\n", "from lambeq import AtomicType, SpiderAnsatz\n", "\n", "ansatz = SpiderAnsatz({AtomicType.NOUN: Dim(2),\n", " AtomicType.SENTENCE: Dim(2)})\n", "\n", "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", "val_circuits = [ansatz(diagram) for diagram in val_diagrams]\n", "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", "\n", "train_circuits[0].draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training\n", "\n", "### Instantiate model" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We can now initialise the model by importing the :py:class:`.PytorchModel` class, and passing all diagrams to the class method :py:meth:`.PytorchModel.from_diagrams`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from lambeq import PytorchModel\n", "\n", "all_circuits = train_circuits + val_circuits + test_circuits\n", "model = PytorchModel.from_diagrams(all_circuits)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " The model can also be instantiated by using the :py:meth:`.PytorchModel.from_checkpoint` method, if an existing checkpoint is available.\n", "\n", " Additionally, the parameters can be initialised by invoking the :py:meth:`.PytorchModel.initialise_weights` method. Since Release :ref:`rel-0.3.0`, we initialise the parameters using a symmetric uniform distribution where the range is determined by the output dimension (`flow codomain`) of a box:\n", "\n", " .. math::\n", "\n", " U\\left(-\\sqrt{3/\\operatorname{dim}_{\\text{flow_cod}}}, \\sqrt{3/\\operatorname{dim}_{\\text{flow_cod}}}\\right)\n", "\n", " This ensures that the expected value of the L2 norm of the output of a box is approximately 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define evaluation metric\n", "\n", "Optionally, we can provide a dictionary of callable evaluation metrics with the signature ``metric(y_hat, y)``." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "sig = torch.sigmoid\n", "\n", "def accuracy(y_hat, y):\n", " return torch.sum(torch.eq(torch.round(sig(y_hat)), y))/len(y)/2 # half due to double-counting\n", "\n", "eval_metrics = {\"acc\": accuracy}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialise trainer" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Next step is to initialise a :py:class:`.PytorchTrainer` object. Because this is a binary classification task, we will use binary cross-entropy as the loss. As an optimizer, we choose Adam with weight decay.\n", "\n", ".. note::\n", "\n", " :py:class:`.PytorchTrainer` uses :term:`PyTorch`'s native classes for optimisers and losses, instead of the ``lambeq`` equivalents." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from lambeq import PytorchTrainer\n", "\n", "trainer = PytorchTrainer(\n", " model=model,\n", " loss_function=torch.nn.BCEWithLogitsLoss(),\n", " optimizer=torch.optim.AdamW,\n", " learning_rate=LEARNING_RATE,\n", " epochs=EPOCHS,\n", " evaluate_functions=eval_metrics,\n", " evaluate_on_train=True,\n", " verbose='text',\n", " seed=SEED)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create datasets" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "To facilitate batching and data shuffling, lambeq provides a :py:class:`.Dataset` interface. Shuffling is enabled by default, and if not specified, the batch size is set to the length of the dataset. In our example we will use the :py:attr:`BATCH_SIZE` we have set above." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from lambeq import Dataset\n", "\n", "train_dataset = Dataset(\n", " train_circuits,\n", " train_labels,\n", " batch_size=BATCH_SIZE)\n", "\n", "val_dataset = Dataset(val_circuits, val_labels, shuffle=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Now we can pass the datasets to the :py:meth:`~lambeq.Trainer.fit` method of the :term:`trainer` to start the training." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Epoch 5: train/loss: 0.6518 valid/loss: 0.7119 train/time: 0.53s valid/time: 0.13s train/acc: 0.5643 valid/acc: 0.5500\n", "Epoch 10: train/loss: 0.5804 valid/loss: 0.6197 train/time: 0.39s valid/time: 0.12s train/acc: 0.5714 valid/acc: 0.6167\n", "Epoch 15: train/loss: 0.3311 valid/loss: 0.4577 train/time: 0.31s valid/time: 0.19s train/acc: 0.8643 valid/acc: 0.7667\n", "Epoch 20: train/loss: 0.1054 valid/loss: 0.2346 train/time: 0.47s valid/time: 0.13s train/acc: 0.9500 valid/acc: 0.9333\n", "Epoch 25: train/loss: 0.1346 valid/loss: 0.0438 train/time: 0.32s valid/time: 0.22s train/acc: 0.9857 valid/acc: 1.0000\n", "Epoch 30: train/loss: 0.0005 valid/loss: 0.0283 train/time: 0.56s valid/time: 0.14s train/acc: 0.9929 valid/acc: 1.0000\n", "\n", "Training completed!\n", "train/time: 2.59s train/time_per_epoch: 0.09s train/time_per_step: 0.03s valid/time: 0.93s valid/time_per_eval: 0.03s\n" ] } ], "source": [ "trainer.fit(train_dataset, val_dataset, eval_interval=1, log_interval=5)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " The :py:attr:`eval_interval` controls the interval in which the model is evaluated on the validation dataset. Default is 1. If evaluation on the validation dataset is expensive, we recommend setting it to a higher value." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Results\n", "\n", "Finally, we visualise the results and evaluate the model on the test data." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test accuracy: 1.0\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjqUlEQVR4nOzdeVwU9R/H8dcuN8ghoiCKgveteaF5ZHlXll1ql2dZpl3Wr9JMyw5L0w61rKwsu+zOysz7zDTv+74QBUUF5Ibd+f1BUiQiKDDs8n72mAfLd2d23zOb8+WzM/Mdi2EYBiIiIiIiInJRVrMDiIiIiIiIlHYqnERERERERC5BhZOIiIiIiMglqHASERERERG5BBVOIiIiIiIil6DCSURERERE5BJUOImIiIiIiFyCCicREREREZFLUOEkIiIiIiJyCSqcRIrJwIEDCQ8Pv6xln3/+eSwWS9EGEhGRMuXw4cNYLBZmzZpldhQRp6DCScoci8VSoGnZsmVmR3V4X3zxBW+++abZMUREisysWbNy9RWenp6EhobSvXt33n77bc6dO2d2RAFeeeUVfvzxxxJ/3+PHj/P888+zefPmEn9vKX4WwzAMs0OIlKTPPvss1++ffvopCxcuZPbs2bnau3btSnBw8GW/T2ZmJna7HQ8Pj0Ivm5WVRVZWFp6enpf9/qXBjTfeyPbt2zl8+LDZUUREisSsWbMYNGgQ48ePJyIigszMTGJiYli2bBkLFy6kWrVqzJ07lyZNmpgdlcOHDxMREcHHH3/MwIEDzY5TosqVK8ftt99e4kfb1q9fT6tWrcrkNi8LXM0OIFLS7rnnnly///nnnyxcuPCC9v9KSUnB29u7wO/j5uZ2WfkAXF1dcXXVP08RkdKqZ8+etGzZMuf3UaNGsWTJEm688UZuuukmdu3ahZeXl4kJRaSo6VQ9kTx06tSJRo0asWHDBjp27Ii3tzejR48G4KeffuKGG24gNDQUDw8PatasyYsvvojNZsv1Gv+9xun8ueavv/4677//PjVr1sTDw4NWrVrx119/5Vo2r2ucLBYLI0aM4Mcff6RRo0Z4eHjQsGFD5s+ff0H+ZcuW0bJlSzw9PalZsybvvfdega+b2rdvH7fddhshISF4enpStWpV+vXrR0JCQq75PvvsM1q0aIGXlxeBgYH069ePqKioXNvw119/5ciRIzmntFzuNV8iIo7guuuu47nnnuPIkSMXnN2we/dubr/9dgIDA/H09KRly5bMnTs35/n169djsVj45JNPLnjd33//HYvFwi+//JLTFh0dzeDBgwkODs7pDz766KMC5VyyZAkdOnTAx8eHgIAAbr75Znbt2pVrnvN9xu7du+nTpw9+fn5UqFCBRx99lLS0tFzznu+fvvnmGxo0aICXlxdt27Zl27ZtALz33nvUqlULT09POnXqlOdZCGvXrqVHjx74+/vj7e3NNddcw+rVq/PMtH//fgYOHEhAQAD+/v4MGjSIlJSUXHmSk5P55JNPcvqfSx39mTp1Kg0bNsTb25vy5cvTsmVLvvjii1zzXGqbL1u2jFatWgEwaNCgnPfWNWbOQ19pi1zE6dOn6dmzJ/369eOee+7JOW1v1qxZlCtXjpEjR1KuXDmWLFnC2LFjSUxMZNKkSZd83S+++IJz587xwAMPYLFYmDhxIrfeeisHDx685FGqVatW8f333/PQQw/h6+vL22+/zW233cbRo0epUKECAJs2baJHjx5UrlyZF154AZvNxvjx46lYseIls2VkZNC9e3fS09N5+OGHCQkJITo6ml9++YX4+Hj8/f0BePnll3nuuefo06cP9913H6dOnWLq1Kl07NiRTZs2ERAQwLPPPktCQgLHjh3jjTfeALJPnRARcWb33nsvo0ePZsGCBdx///0A7Nixg3bt2lGlShWeeeYZfHx8+Prrr+nduzffffcdt9xyCy1btqRGjRp8/fXXDBgwINdrzpkzh/Lly9O9e3cAYmNjadOmTU7BUrFiRX777TeGDBlCYmIijz322EXzLVq0iJ49e1KjRg2ef/55UlNTmTp1Ku3atWPjxo0XfMHVp08fwsPDmTBhAn/++Sdvv/02Z8+e5dNPP80138qVK5k7dy7Dhw8HYMKECdx444089dRTvPPOOzz00EOcPXuWiRMnMnjwYJYsWZKz7JIlS+jZsyctWrRg3LhxWK1WPv74Y6677jpWrlxJ69atL8gUERHBhAkT2LhxIzNnzqRSpUq89tprAMyePZv77ruP1q1bM3ToUABq1qx50W3ywQcf8Mgjj3D77bfnFIZbt25l7dq13HXXXQXe5vXr12f8+PGMHTuWoUOH0qFDBwCuvvrqi763OBhDpIwbPny48d9/Ctdcc40BGDNmzLhg/pSUlAvaHnjgAcPb29tIS0vLaRswYIBRvXr1nN8PHTpkAEaFChWMM2fO5LT/9NNPBmD8/PPPOW3jxo27IBNguLu7G/v3789p27JliwEYU6dOzWnr1auX4e3tbURHR+e07du3z3B1db3gNf9r06ZNBmB88803F53n8OHDhouLi/Hyyy/nat+2bZvh6uqaq/2GG27ItQ1ERBzdxx9/bADGX3/9ddF5/P39jauuuirn986dOxuNGzfO1UfY7Xbj6quvNmrXrp3TNmrUKMPNzS1XH5Genm4EBAQYgwcPzmkbMmSIUblyZSMuLi7X+/br18/w9/fP6afO9zsff/xxzjzNmjUzKlWqZJw+fTqnbcuWLYbVajX69++f03a+H7rppptyvcdDDz1kAMaWLVty2gDDw8PDOHToUE7be++9ZwBGSEiIkZiYmGsdgZx57Xa7Ubt2baN79+6G3W7PmS8lJcWIiIgwunbtekGmf28LwzCMW265xahQoUKuNh8fH2PAgAFGQdx8881Gw4YN852noNv8r7/+umCbi/PQqXoiF+Hh4cGgQYMuaP/3Oevnzp0jLi6ODh06kJKSwu7duy/5un379qV8+fI5v5//RurgwYOXXLZLly65vjVr0qQJfn5+OcvabDYWLVpE7969CQ0NzZmvVq1a9OzZ85Kvf/6I0u+//57rtId/+/7777Hb7fTp04e4uLicKSQkhNq1a7N06dJLvo+IiDMrV65czuh6Z86cYcmSJfTp0yenz4iLi+P06dN0796dffv2ER0dDWT3D5mZmXz//fc5r7VgwQLi4+Pp27cvAIZh8N1339GrVy8Mw8i1H+7evTsJCQls3Lgxz1wnTpxg8+bNDBw4kMDAwJz2Jk2a0LVrV+bNm3fBMuePIJ338MMPA1wwb+fOnXMdrYqMjATgtttuw9fX94L28/3W5s2b2bdvH3fddRenT5/OWZfk5GQ6d+7MihUrsNvtud7rwQcfzPV7hw4dOH36NImJiXmu96UEBARw7NixC06bP+9Ktrk4F52qJ3IRVapUwd3d/YL2HTt2MGbMGJYsWXLBTvq/1wHlpVq1arl+P19EnT17ttDLnl/+/LInT54kNTWVWrVqXTBfXm3/FRERwciRI5kyZQqff/45HTp04KabbuKee+7JKar27duHYRjUrl07z9e4kkExREScQVJSEpUqVQJg//79GIbBc889x3PPPZfn/CdPnqRKlSo0bdqUevXqMWfOHIYMGQJkn6YXFBTEddddB8CpU6eIj4/n/fff5/3337/o6+XlyJEjANStW/eC5+rXr8/vv/9OcnIyPj4+Oe3/3dfXrFkTq9V6wXVK/+2fzvcZYWFhebaf77f27dsHcMHpif+WkJCQ6wvH/PpRPz+/i77OxTz99NMsWrSI1q1bU6tWLbp168Zdd91Fu3btgCvb5uJcVDiJXEReoyHFx8dzzTXX4Ofnx/jx46lZsyaenp5s3LiRp59++oJvxfLi4uKSZ7tRgDsDXMmyBTV58mQGDhzITz/9xIIFC3jkkUdyzm2vWrUqdrsdi8XCb7/9lmceXcckImXZsWPHSEhIyPmy6ny/8OSTT+Zco/Rf//5iq2/fvrz88svExcXh6+vL3LlzufPOO3NGWj3/evfcc89Fi43iHAr9YoMMXax/ulS/dX59Jk2aRLNmzfKc97/9SlH3hfXr12fPnj388ssvzJ8/n++++4533nmHsWPH8sILL5i+zaX0UOEkUgjLli3j9OnTfP/993Ts2DGn/dChQyam+kelSpXw9PRk//79FzyXV9vFNG7cmMaNGzNmzBj++OMP2rVrx4wZM3jppZeoWbMmhmEQERFBnTp18n2dgoziJyLiTM7fE/B8kVSjRg0g+2h8ly5dLrl83759eeGFF/juu+8IDg4mMTGRfv365TxfsWJFfH19sdlsBXq9f6tevToAe/bsueC53bt3ExQUlOtoE2QfEYqIiMj5ff/+/djt9iIbJfX86ed+fn6FXp/8FLb/8fHxoW/fvvTt25eMjAxuvfVWXn75ZUaNGlWoba5+z7npGieRQjj/Lde/v9XKyMjgnXfeMStSLi4uLnTp0oUff/yR48eP57Tv37+f33777ZLLJyYmkpWVlautcePGWK1W0tPTAbj11ltxcXHhhRdeuODbPcMwOH36dM7vPj4+BTp9UUTEGSxZsoQXX3yRiIgI7r77biD7C61OnTrx3nvvceLEiQuWOXXqVK7f69evT+PGjZkzZw5z5syhcuXKub6oc3Fx4bbbbuO7775j+/btl3y9f6tcuTLNmjXjk08+IT4+Pqd9+/btLFiwgOuvv/6CZaZPn57r96lTpwIU6LrZgmjRogU1a9bk9ddfJykp6YLn81uf/Pj4+ORax/z8u98CcHd3p0GDBhiGQWZmZqG2+fnCs6DvLY5FR5xECuHqq6+mfPnyDBgwgEceeQSLxcLs2bOL9FS5K/X888+zYMEC2rVrx7Bhw7DZbEybNo1GjRqxefPmfJddsmQJI0aM4I477qBOnTpkZWUxe/bsnE4Dsr8dfOmllxg1ahSHDx+md+/e+Pr6cujQIX744QeGDh3Kk08+CWR3iHPmzGHkyJG0atWKcuXK0atXr+LeBCIixe63335j9+7dZGVlERsby5IlS1i4cCHVq1dn7ty5eHp65sw7ffp02rdvT+PGjbn//vupUaMGsbGxrFmzhmPHjrFly5Zcr923b1/Gjh2Lp6cnQ4YMwWrN/T33q6++ytKlS4mMjOT++++nQYMGnDlzho0bN7Jo0SLOnDlz0dyTJk2iZ8+etG3bliFDhuQMR+7v78/zzz9/wfyHDh3ipptuokePHqxZs4bPPvuMu+66i6ZNm17ZBvyb1Wpl5syZ9OzZk4YNGzJo0CCqVKlCdHQ0S5cuxc/Pj59//rnQr9uiRQsWLVrElClTCA0NJSIiImdgiv/q1q0bISEhtGvXjuDgYHbt2sW0adO44YYbcga2KOg2r1mzJgEBAcyYMQNfX198fHyIjIzMddROHFjJD+QnUrpcbDjyiw1Nunr1aqNNmzaGl5eXERoaajz11FPG77//bgDG0qVLc+a72HDkkyZNuuA1AWPcuHE5v19sOPLhw4dfsGz16tUvGHJ18eLFxlVXXWW4u7sbNWvWNGbOnGk88cQThqen50W2QraDBw8agwcPNmrWrGl4enoagYGBxrXXXmssWrTognm/++47o3379oaPj4/h4+Nj1KtXzxg+fLixZ8+enHmSkpKMu+66ywgICDAADU0uIg7v/HDk5yd3d3cjJCTE6Nq1q/HWW2/lGnr73w4cOGD079/fCAkJMdzc3IwqVaoYN954o/Htt99eMO++fftyXn/VqlV5vl5sbKwxfPhwIywszHBzczNCQkKMzp07G++//37OPHkNR24YhrFo0SKjXbt2hpeXl+Hn52f06tXL2LlzZ655zvdDO3fuNG6//XbD19fXKF++vDFixAgjNTU117x59U8X6/OWLl2a520vNm3aZNx6661GhQoVDA8PD6N69epGnz59jMWLF1+Q6dSpU7mWPf+Z/Hs49N27dxsdO3Y0vLy8DCDfocnfe+89o2PHjjnvXbNmTeN///ufkZCQkGu+gmxzw8i+zUiDBg1ybgOiocmdh8UwStFX5SJSbHr37s2OHTtyRjASERG5mOeff54XXniBU6dOERQUZHYckVJB1ziJOKHU1NRcv+/bt4958+bRqVMncwKJiIiIODhd4yTihGrUqMHAgQOpUaMGR44c4d1338Xd3Z2nnnrK7GgiIiIiDkmFk4gT6tGjB19++SUxMTF4eHjQtm1bXnnllYvetFZERERE8qdrnERERERERC5B1ziJiIiIiIhcggonERERERGRSyhz1zjZ7XaOHz+Or68vFovF7DgiImWKYRicO3eO0NDQC27qWZapbxIRMUdh+qUyVzgdP36csLAws2OIiJRpUVFRVK1a1ewYpYb6JhERcxWkXypzhZOvry+QvXH8/PxMTiMiUrYkJiYSFhaWsy+WbOqbRETMUZh+qcwVTudPgfDz81PnJCJiEp2Olpv6JhERcxWkX9IJ5iIiIiIiIpegwklEREREROQSVDiJiIiIiIhcggonERERERGRS1DhdBlSMrLMjiAiIiIiIiVIhVMhffLHYbpOWcGxsylmRxERERERkRKiwqkQ0jJtfLLmMNHxqdz1wVpiEtLMjiQiIsLRxKPY7DazY4iIODUVToXg6ebCF/e1oVqgN0fPpHDXzD85dS7d7FgiIlKG2ew27v3tXjp93YlnVz3LoiOLSMnUWREiIkVNhVMhhfh78sX9kVQJ8OLgqWTumbmWM8kZZscSEZEy6njScbLsWcSnxzP3wFweX/Y47b9qz7BFw/h6z9fEJseaHVFExClYDMMwzA5RkhITE/H39ychIeGK7s5+OC6ZPu+t4eS5dBqG+vHFfW3w93YrwqQiIs6nqPbBzuZKt0uWPYtNJzexLGoZS6OWEnUuKtfzDSs0pFNYJ64Nu5Y65etgsViKKLmIiGMrzP5XhdMV2H8yiX7vryEuKYNmYQHMHtIaX08VTyIiF6PCKW9FuV0Mw+BQwiGWRC1hWdQytp7aisE/XX1ln8pcHXo1DSo0oEGFBtQuXxsPF48rXAMREcekwikfRd1p745JpN/7fxKfkkmr8PJ8Mrg13u6uRZBURMT5qHDKW3Ful7jUOFYeW8nSqKWsOb6GNFvugY1cLC7UCKhB/cD62VOF+tQLrIePm0+R5hARKY1UOOWjODqn7dEJ3PnBn5xLy+LqmhX4aGArPN1ciuS1RUSciQqnvJXUdknLSuPPE3+y+eRmdp3Zxa7TuzibfjbPeav7Vad+YH3qlK9DuH841f2qU823Gp6unsWWT0SkpKlwykdxdU4bj57l3plrSc6w0aluRd67twUeriqeRET+TYVT3szaLoZhEJsSy+4zu9l1eld2MXVmFzHJMRddprJPZar5VSPcL7uYqu5XnXC/cELLheJq1RkXIuJYVDjlozg7p3WHzjDgo3WkZtro2iCYd+5ujpuLBi4UETlPhVPeStt2OZt2NueI1MGEgxxOPMzhhMMkZiRedBlXiytVfatSw78GNQJqZP/0r0GEfwTebt4lmF5EpOBUOOWjuDun1fvjGDTrLzKy7NzQpDJv9W2Gq4onERGg9BUIpYWjbJf4tHgOJx7mSOIRjiQeyXl8NPHoBddO/VuIT0hOIXW+qKoVUAt/D/8STC8iciEVTvkoic5p6e6TDJ29nkybwa1XVeG125voyJOICI5TIJQ0R98udsNObHIshxIPcSjhEAfjD3IwIXs6k3bmosuF+4XTtGJTmlVqRrOKzagRUAOrRf2liJQcFU75KKnO6fcdMTz0+UZsdoOaFX149ob6XFu3ku6dISJlmqMXCMXFmbdLfFo8hxIPcSD+QE4xdSj+EMeTj18wr6+bL00qNqFppaY0q9iMxkGNKedezoTUIlJWqHDKR0l2Tr/viGHU99s4k5wBQPtaQTx7Q33qV3auTlFEpKCcuUC4EmVxu8SnxbM1biubT25my6ktbIvbRmpWaq55LFioXb42V1W6ig5VOtC6cmu8XL1MSiwizkiFUz5KunNKTMtk+tL9fLzqMBk2OxYL9G0ZxshudajkqyFdRaRsKYsFQkFou0CWPYu9Z/ey5dSWnGIqOik61zweLh60CmlFx6od6Vi1I1XKVTEprYg4CxVO+TCrc4o6k8Kr83fz69YTAHi7u/BQp5rc16GG7vkkImWGCoS8abvk7VTKKTaf2szaE2tZcWwFJ5JP5Hq+pn9NOlbtSIeqHWhWqRluVjeTkoqIo1LhlA+zO6cNR87w4i+72BwVD0CovydP9ajHTU1DsVp1/ZOIODez98GllbbLpRmGwf74/aw4toIVx1aw5dQWbIYt53lfd1/ahbajU1gnulbviruLu4lpRcRRqHDKR2nonAzD4OetJ3jtt91Ex2efz920qj9jbmxAq/BAUzKJiJSE0rAPLo20XQovIT2B1dGrWRG9glXRq0hIT8h5rqJXRe6ufzd31L0DP3dtTxG5OBVO+ShNnVNapo2PVh/inaUHSErPAqBhqB+3Nq/Kzc1CCSrnYWo+EZGiVpr2waWJtsuVsdltbIvbxvJjy5l7YC4nU04C4OPmwx117uDu+ncT4hNickoRKY1UOOWjNHZOp86l88aivXyzPopMW/bH4WK10KlORW5tXpXO9SvpOigRcQqlcR9cGmi7FJ1MWybzDs1j1o5Z7I/fD4CrxZXra1zPwIYDqV2+tskJRaQ0UeGUj9LcOZ1JzuCXrcf5bmM0W/6+BgrAz9OVG5uGclvzKjSvVl73ghIRh1Wa98Fm0nYpenbDzqroVXy8/WPWx67Pae9YtSMDGw6kZXBL9aciosIpP47SOe0/mcT3G4/xw6ZoTiSk5bSHV/Dm1uZVueWqKoQFepuYUESk8BxlH1zStF2K19ZTW5m1YxaLjizCIPvPnsZBjRnUaBCdq3XGarGanFBEzKLCKR+O1jnZ7QZ/HjzNtxuPMX97DCkZ/4wg1KJ6eW5qGsr1jStT0VfXQ4lI6edo++CSou1SMo4kHuHTHZ/y4/4fybBn35y+acWmjGo9ioZBDU1OJyJmUOGUD0funJLTs/h9Rwzfb4xm9YE4zn9yVgu0qxVEr6ahdG8Ygr+X7mMhIqWTI++Di5O2S8k6nXqaL3Z/weyds0nNSsWChVtq38IjVz1CBa8KZscTkRKkwikfztI5xSSk8cvW4/y89USu66HcXax0qluRm5qF0rleMF7uGlRCREoPZ9kHFzVtF3OcTDnJGxve4JeDvwDg6+bLsGbD6Fevn26mK1JGqHDKhzN2TkdOJ/PzluPM3XKcvbFJOe3e7i50bRDMTU1D6VC7Iu6uOodbRMzljPvgoqDtYq5NJzcxYe0Edp3ZBUAN/xo83fpprg692uRkIlLcVDjlw9k7p90xiczdfJyftx4n6kxqTru/lxs9GoZwY9PKtK1RAVcXFVEiUvKcfR98ubRdzGez2/hx/4+8tfEtzqafBeC6sOt4stWThPmGmZxORIqLCqd8lJXOyTAMNkXF8/OW4/yy9QSnzqXnPFfBx52ejUPo1SSUVuGBWK0ajlVESkZZ2QcXlrZL6ZGYkci7m9/ly91fYjNsuFvdGdhoIEMaDcHbTaPZijgbFU75KIudk81usO7QGX7eepz522M4k5yR81ywnwc3NA7lxqaVuSosQPe0EJFiVRb3wQWh7VL6HIg/wIR1E1h7Yi0Awd7BPNP6GTpX66y+UsSJqHDKR1nvnDJtdv44cJpfthxn/o4YzqVl5TxXJcCLG5tUpkejEJpWDdCRKBEpcmV9H3wx2i6lk2EYLDm6hEnrJxGdFA1Ap6qdGBU5itByoSanE5GioMIpH+qc/pGeZWPl3jh+2XqchTtjSf7XPaIq+XrQpUEw3RoE07ZmBTxcNTqfiFw57YPzpu1SuqVlpfHBtg/4aPtHZNmz8HL1Yniz4dxd/25cra5mxxORK6DCKR/qnPKWlmlj6e6T/LrtBMv2nCIp/Z8jUeU8XOlUtyJdGwRzbb1K+HlqiFYRuTzaB+dN28UxHIw/yAtrXmDjyY0A1Ausx9g2Y2lcsbHJyUTkcqlwyoc6p0tLz7Kx5sBpFu6MZeHOWE7+a2AJNxcLbWpUoFuDYLo0CKayv5eJSUXE0WgfnDdtF8dhN+z8tP8nXl//OokZiViw0LduXx5p/gi+7r5mxxORQlLhlA91ToVjtxtsORbPgr+LqP0nk3I936F2EAPahnNtvUq46JooEbkE7YPzpu3ieE6nnmby+sn8fPBnACp6VeSZ1s/QtXpXDR4h4kBUOOVDndOVOXAqiYU7Y1mwI4ZNUfGc/78nLNCLe9tUp0/LMAK83c0NKSKllvbBedN2cVxrT6zlxT9f5EjiEQA6VOnAs22epUq5KiYnE5GCUOGUD3VORSfqTAqf/XmEr/6KIiE1EwAPVyu9m1VhwNXhNAjV9hWR3LQPzpu2i2NLt6Uzc9tMZm6bSZY9C08XT55q/RS3175dR59ESjkVTvlQ51T0UjNszN0Szaw/jrDrRGJOe6vw8vRvG06PRiG4uVhNTCgipYX2wXnTdnEOBxMO8uKaF1kfux6A7uHdGdd2nK59EinFCrP/Nf2v2enTpxMeHo6npyeRkZGsW7cu3/nj4+MZPnw4lStXxsPDgzp16jBv3rwSSit58XJ3oW+rasx7pD3fPNiWG5tUxtVq4a/DZ3n4y020e3UJby3ax+mk9Eu/mIiIiIOq4V+DD7t/yMgWI3G1uPL74d/p83MfdsTtMDuaiBQBU484zZkzh/79+zNjxgwiIyN58803+eabb9izZw+VKlW6YP6MjAzatWtHpUqVGD16NFWqVOHIkSMEBATQtGnTAr2nvtUrGbGJaXy+9ihfrD1K3N8Fk5ebC/e0qcb9HWtQydfT5IQiYgbtg/Om7eJ8tpzawlPLn+J48nFcra483vxx7m1wr07dEyllHOZUvcjISFq1asW0adMAsNvthIWF8fDDD/PMM89cMP+MGTOYNGkSu3fvxs3t8u4lpM6pZGVk2flt+wlmrjzEtugEIPs6qLsiq/HgNTUJ9lMBJVKWaB+cN20X55SQnsDzfzzPoqOLAOhUtRMvtnuRAM8Ac4OJSA6HKJwyMjLw9vbm22+/pXfv3jntAwYMID4+np9++umCZa6//noCAwPx9vbmp59+omLFitx11108/fTTuLi45Pk+6enppKf/c4pYYmIiYWFh6pxKmGEYLNt7ircW7WNzVDwA7q5W+rYM48FONakSoPtBiZQFKhCyqW8qOwzDYM6eOUz8ayKZ9kyCvYOZ2HEizYObmx1NRHCQa5zi4uKw2WwEBwfnag8ODiYmJibPZQ4ePMi3336LzWZj3rx5PPfcc0yePJmXXnrpou8zYcIE/P39c6awsLAiXQ8pGIvFwrV1K/HDQ1cze0hrWoWXJyPLzuw/j9Bp0lJGfb+NqDMpZscUESkR6pvKDovFQr96/fjihi8I9wsnNiWWwb8P5oOtH2A37GbHE5FCMO2I0/Hjx6lSpQp//PEHbdu2zWl/6qmnWL58OWvXrr1gmTp16pCWlsahQ4dyjjBNmTKFSZMmceLEiTzfR9/qlU6GYfDnwTO8vXgfaw6eBsDVauHW5lV4qFMtwoN8TE4oIsVBR5yyqW8qm5Izk3npz5f45eAvALSp3IYJHSYQ5BVkcjKRssshjjgFBQXh4uJCbGxsrvbY2FhCQkLyXKZy5crUqVMn12l59evXJyYmhoyMjDyX8fDwwM/PL9ck5rNYLLStWYEvh7bh6wfa0qF2EFl2g6/XH+O6yct4+tutxCSkmR1TRKRYqG8qm3zcfHil/Su82O5FvFy9+PPEn9w+93b+iP7D7GgiUgCmFU7u7u60aNGCxYsX57TZ7XYWL16c6wjUv7Vr1479+/djt/9zaHvv3r1UrlwZd3f3Ys8sxaN1RCCzh0Ty/UNXc23ditgNmLM+ik6vL2XS77tJTMs0O6KIiEiRsFgs9K7Vm69u+IpaAbU4nXaaBxY9wMS/JpJhy/tLYBEpHUy9j9PIkSP54IMP+OSTT9i1axfDhg0jOTmZQYMGAdC/f39GjRqVM/+wYcM4c+YMjz76KHv37uXXX3/llVdeYfjw4WatghSh5tXK8/Gg1nw37GpaVi9PWqad6UsP0GnSMmatPkRGls4FFxER51AjoAZf3vAld9a7E4DZO2dz5693ciD+gMnJRORiTC2c+vbty+uvv87YsWNp1qwZmzdvZv78+TkDRhw9ejTXtUthYWH8/vvv/PXXXzRp0oRHHnmERx99NM+hy8Vxtahenm8ebMv797agRkUfziRn8PzPO+n6xnJ+2XocE0fQFxERKTKerp6MjhzN9M7TCfQMZO/ZvfT9pS9f7f5KfZ1IKWTqfZzMoAuTHUuWzc6c9VG8sXBfzo10m4YFMKpnPdrUqGByOhEpLO2D86btInGpcYxZPYbV0auB7Hs+vdDuBQI9A01OJuLcHGJwCJGCcHWxcndkdZb/rxOPd6mDt7sLW6Li6ff+nwyZ9Rd7Y8+ZHVFEROSKBXkF8U7nd3i61dO4Wd1YdmwZt/50a04hJSLmU+EkDsHHw5VHu9Rm+f+u5d421XGxWli8+yQ93lzBS7/s1PVPIiLi8KwWK/c0uIcvb/gyZ+CIBxc9yGvrXiPdln7pFxCRYqXCSRxKRV8PXuzdiAWPd6RHwxDsBsxcdYjbZ/zB0dO6ga6IiDi+uoF1cw0c8dmuz7jr17vYf3a/yclEyjYVTuKQalYsx4x7WzCzf0sCvN3YeiyBG95eyS9bj5sdTURE5IrlNXBEv1/7aeAIEROpcBKH1qVBMPMe6UDL6uU5l57FiC82MfqHbaRl2syOJiIicsU6Vu3Idzd9R/sq7Um3pfPy2pd5ZOkjnE07a3Y0kTJHhZM4vNAAL74a2oYR19bCYoEv1h6l9/TV7D+ZZHY0ERGRK3bBwBFRy7h97u2sPbHW7GgiZYoKJ3EKri5Wnuxel08HtyaonDu7Y87Ra+oqvt1wzOxoIiIiV8xiseQMHBHhH8HJ1JPcv+B+3tjwBpn2TLPjiZQJKpzEqXSoXZF5j3agXa0KpGbaePKbLYycs5nk9Cyzo4mIiFyxuoF1mXPjHG6vczsGBh9t/4j+8/oTlRhldjQRp6fCSZxOJV9PPh0cyZPd6mC1wPebouk1bRU7jyeaHU1EROSKebl6Ma7tON7o9AZ+7n5sP72d23++nZ8P/Gx2NBGnpsJJnJKL1cKI62oz54G2VPb35OCpZHq/s5qv1h01O5qIiEiR6FK9C9/d9B0tgluQkpXC6FWjeWblMyRl6BpfkeKgwkmcWqvwQOY90oHO9SqRkWXnme+38cq8XdjsGspVREQcX4hPCB92+5ARzUbgYnHh14O/cvvPt7Pl1Bazo4k4HRVO4vTK+7gzc0BLRnatA8D7Kw7y4GcbSMnQdU8iIuL4XKwuPND0AWb1mEWVclWITopmwG8D+Hj7x7rnk0gRUuEkZYLFYuGRzrV5+86rcHe1snBnLH3eW0NMQprZ0URERIpEs0rN+KbXN/SM6InNsDFlwxRGLhupU/dEiogKJylTbmoaypf3t6GCjzvboxPpPX0126MTzI4lIiJSJHzdfXmtw2s81+Y5XK2uLDq6iDt/vZMD8QfMjibi8FQ4SZnTonp5fhzejlqVyhGTmMYdM9awcGes2bFERESKhMVioU/dPnzS4xOCvYM5nHiYO3+9k/mH55sdTcShqXCSMiks0Jvvhl1Nh9pBpGbaGDp7PTNXHtS54CIi4jSaVGzC172+JjIkktSsVP63/H9M/GuibpgrcplUOEmZ5e/lxkcDW3FXZDUMA176dRfP/ridTJvd7GgiIiJFItAzkBldZzCk0RAAZu+czf0L7icuNc7kZCKOR4WTlGluLlZe7t2IMTfUx2KBL9YeZfCsv0hI1bdxIiLiHFytrjzW4jHe7PQmPm4+bIjdQJ+f+7Dp5Cazo4k4FBVOUuZZLBbu61CD9+9tiZebCyv3xXHbu38QdSbF7GgiIiJFpnP1znx5w5fU9K/JqdRTDJ4/mM93fa7T1EUKSIWTyN+6NgjmmwfbEuznwf6TSfR9bw3R8almxxIRESkyEf4RfHHDF/QI70GWkcWr617l6ZVPk5KpLwtFLkWFk8i/NKriz0/D21Ozog/HE9K4d+ZaTp1LNzuWiIhIkfF282Zix4k81eopXCwu/HboNwb9PkjXPYlcggonkf8I8fdk9pBIqgR4cTAumf4frdM1TyIi4lQsFgv3NriXmd1mUt6jPDtP7+SeefdwKOGQ2dFESi0VTiJ5CA3w4rP7Igkq586uE4kMmfUXqRk2s2OJiIgUqZYhLZl9/WzCfMOITorm3t/uZfPJzWbHEimVVDiJXEREkA+fDo7E19OV9UfO8uBnG8jI0lDlIiLiXKr7VWd2z9k0qtCIhPQE7ltwH4uOLDI7lkipo8JJJB8NQv34eGArvNxcWL73FI/P2YzNrtGHRETEuVTwqsCH3T+kU9VOpNvSGblsJJ/v+tzsWCKligonkUtoGR7IjHtb4OZi4ddtJ3j2h20aulVERJyOt5s3b1z7Bn3q9MHA4NV1rzJ5/WTshs62EAEVTiIFck2dirzV7yqsFvjqryhe/W23iicREXE6rlZXxrQZw6PNHwVg1o5ZPL3iaTJsGSYnEzGfCieRArq+cWUm3NoYgPdWHOSdZQdMTiQiIlL0LBYL9zW+j1fav4Kr1ZX5h+fzwMIHSEhPMDuaiKlUOIkUQt9W1Xj2+voATPp9D7P/PGJyIhERkeLRq2Yv3u3yLuXcyrE+dj0DfhvAiaQTZscSMY0KJ5FCur9jDUZcWwuAsT9t56fN0SYnEhERKR5tKrdhVo9ZVPKuxIGEA9w97252n9ltdiwRU6hwErkMT3SrQ/+21TEMGPn1FhbvijU7koiISLGoG1iXz6//nFoBtTiVeor+v/VnedRys2OJlDgVTiKXwWKx8HyvhvRuForNbvDwl5vYG3vO7FgiIiLFIsQnhE96fkJk5UhSs1J5ZOkjfLbzMw2UJGWKCieRy2S1Wph0R1OurlmBlAwbQz9dT0JqptmxREREioWfux/vdnmX22rfht2w89pfr/Hy2pfJsmeZHU2kRKhwErkCbi5Wpt55FVUCvDh8OoXHvtqEXTfIFRERJ+VmdWNc23E82fJJLFiYs2cOIxaPICkjyexoIsVOhZPIFapQzoP37m2Bh6uVpXtO8eaivWZHEhERKTYWi4UBDQfwxrVv4OXqxerjq7n3t3s5nnTc7GgixUqFk0gRaFTFP+ceT28v2c+CHTEmJxIRESlenat15uMeH1PRqyL74/dz5693svXUVrNjiRQbFU4iReTW5lUZeHU4kD3S3v6TOm1BREScW8MKDfnihi+oW74uZ9LOMPj3wcw/PN/sWCLF4rIKp6ioKI4dO5bz+7p163jsscd4//33iyyYiCN69ob6tI4IJCk9i6Gz13MuTYNFiIiIcwvxCeHTnp9yTdVrSLel87/l/+ODrR9oxD1xOpdVON11110sXboUgJiYGLp27cq6det49tlnGT9+fJEGFHEkbi5Wpt/VnMr+nhw8lczIr7dosAgREXF63m7evHXtW9xT/x4A3t70NmNWjyHTpi8QxXlcVuG0fft2WrduDcDXX39No0aN+OOPP/j888+ZNWtWUeYTcTgVfT14954WuLtYWbgzlmlL95sdSUREpNi5WF14uvXTjIkcg4vFhbkH5vLYssc0XLk4jcsqnDIzM/Hw8ABg0aJF3HTTTQDUq1ePEydOFF06EQfVLCyAl3o3AuCNRXtZsjvW5EQiIiIlo2+9vkzrPA0PFw9WHFvBi3++qNP2xClcVuHUsGFDZsyYwcqVK1m4cCE9evQA4Pjx41SoUKFIA4o4qj6twrinTTUMAx79ajOH4pLNjiQiIlIi2ldpz6SOk7BarHy/73ve3fKu2ZFErthlFU6vvfYa7733Hp06deLOO++kadOmAMydOzfnFL7CmD59OuHh4Xh6ehIZGcm6desKtNxXX32FxWKhd+/ehX5PkZIw9saGtKhennNpWQz9dD1J6TpdQUREyoZrq13Ls5HPAvDulnf5Zu83JicSuTKXVTh16tSJuLg44uLi+Oijj3Lahw4dyowZMwr1WnPmzGHkyJGMGzeOjRs30rRpU7p3787JkyfzXe7w4cM8+eSTdOjQ4XJWQaREuLtaeffu5lTy9WDfySSe+naLTlcQEZEyo0/dPjzQ5AEAXvrzJZZFLTM1j8iVuKzCKTU1lfT0dMqXLw/AkSNHePPNN9mzZw+VKlUq1GtNmTKF+++/n0GDBtGgQQNmzJiBt7d3roLsv2w2G3fffTcvvPACNWrUuJxVECkxlfw8efeeFri5WJi3LYYZyw+aHUlERKTEDG82nN61emM37Pxv+f/YcmqL2ZFELstlFU4333wzn376KQDx8fFERkYyefJkevfuzbvvFvwc1oyMDDZs2ECXLl3+CWS10qVLF9asWXPR5caPH0+lSpUYMmTIJd8jPT2dxMTEXJNISWtRvTwv3JQ9WMTrC/aw4cgZkxOJiJnUN0lZYrFYGNt2LO2rtCfNlsaIxSM4nHDY7FgihXZZhdPGjRtzTpH79ttvCQ4O5siRI3z66ae8/fbbBX6duLg4bDYbwcHBudqDg4OJiYnJc5lVq1bx4Ycf8sEHHxToPSZMmIC/v3/OFBYWVuB8IkXprshq9G4Wis1u8OhXm0nUzXFFyiz1TVLWuFndmHzNZBpVaER8ejwPLnqQuNQ4s2OJFMplFU4pKSn4+voCsGDBAm699VasVitt2rThyJEjRRrw386dO8e9997LBx98QFBQUIGWGTVqFAkJCTlTVFRUseUTuZTxvRsRFujFsbOpjPlhu653Eimj1DdJWeTt5s20ztMI8w0jOimahxY9RHKmRpwVx3FZhVOtWrX48ccfiYqK4vfff6dbt24AnDx5Ej8/vwK/TlBQEC4uLsTG5r7HTWxsLCEhIRfMf+DAAQ4fPkyvXr1wdXXF1dWVTz/9lLlz5+Lq6sqBAwcuWMbDwwM/P79ck4hZ/DzdeKvfVbhYLczdcpzvN0abHUlETKC+ScqqCl4VmNFlBoGegew6s4uRy0aSadMZGOIYLqtwGjt2LE8++STh4eG0bt2atm3bAtlHn6666qoCv467uzstWrRg8eLFOW12u53FixfnvOa/1atXj23btrF58+ac6aabbuLaa69l8+bNOtVBHELzauV5vEttAMb+tJ3Dur+TiIiUIdX8qjG983S8XL344/gfjPtjnM7AEIdwWYXT7bffztGjR1m/fj2///57Tnvnzp154403CvVaI0eO5IMPPuCTTz5h165dDBs2jOTkZAYNGgRA//79GTVqFACenp40atQo1xQQEICvry+NGjXC3d39clZHpMQN61SL1hGBJGfYePSrTWTa7GZHEhERKTGNghox+ZrJuFhc+Pngz7y9qeDXyIuY5bIKJ4CQkBCuuuoqjh8/zrFjxwBo3bo19erVK9Tr9O3bl9dff52xY8fSrFkzNm/ezPz583MGjDh69CgnTpy43JgipZKL1cKbfZvh5+nKlmMJvLFwr9mRRERESlSHqh0Y13YcADO3zeSLXV+YnEgkfxbjMo6N2u12XnrpJSZPnkxSUhIAvr6+PPHEEzz77LNYrZddjxW7xMRE/P39SUhI0DnlYrp5207w0OcbsVjg8/siubpmwQY9EXFU2gfnTdtFyrL3trzHtM3TAJjQYQI31rjR5ERSlhRm/3tZFc6zzz7LtGnTePXVV9m0aRObNm3ilVdeYerUqTz33HOXFVqkLLq+cWX6tQrDMGDknC2cTc4wO5KIiEiJGtpkKHfVuwuAMavGsDxqucmJRPJ2WUecQkNDmTFjBjfddFOu9p9++omHHnqI6OjSO1KYvtWT0iYlI4sb317FwbhkujUI5r17W2CxWMyOJVIstA/Om7aLlHV2w86zq57ll4O/4OHiwYwuM2gZ0tLsWFIGFPsRpzNnzuR5LVO9evU4c+bM5bykSJnl7e7K23dehZuLhQU7Y/li3VGzI4mIiJQoq8XK+Hbj6VS1E+m2dB5e8jA7T+80O5ZILpdVODVt2pRp06Zd0D5t2jSaNGlyxaFEyppGVfx5ukf2lxEv/rKTfbHnTE4kIiJSstysbky6ZhItg1uSlJnEsEXDOJRwyOxYIjkuq3CaOHEiH330EQ0aNGDIkCEMGTKEBg0aMGvWLF5//fWizihSJgxuF0GH2kGkZdp55KvNpGXazI4kIiJSojxdPZl63VTqB9bnTNoZhi4cSkxyjNmxRIDLLJyuueYa9u7dyy233EJ8fDzx8fHceuut7Nixg9mzZxd1RpEywWq1MLlPUyr4uLPrRCKvzd9tdiQREZESV869HDO6ziDcL5yY5BjuX3A/Z9J0KYiY77IGh7iYLVu20Lx5c2y20vtNuS7AldJuye5YBs9aD8DHA1txbb1KJicSKTraB+dN20XkQjHJMdz7273EJMdQP7A+H3X/iHLu5cyOJU6m2AeHEJHic129YAZeHQ7A/77dwumkdHMDiYiImCDEJ4T3u75PoGcgu87s4uElD5OWlWZ2LCnDVDiJlELP9KxHneByxCVlMPqHbRThgWERERGHEeEfwbtd3qWcWznWx67nyeVPkmnPNDuWlFEqnERKIU83F6b0aYar1cLvO2L5YVPpvTeaiIhIcWpQoQFTr5uKh4sHy48t57nVz2E37GbHkjLItTAz33rrrfk+Hx8ffyVZRORfGlXx59HOtZm8cC/j5u6gTY0KhAZ4mR1LRESkxLUMacmUTlN4dMmj/HrwV8p7lOfp1k+bHUvKmEIdcfL39893ql69Ov379y+urCJlzrBONWkaFsC5tCz+9+0W7HadsiciImVTx6odean9SwB8tusz5uyeY3IiKWsKdcTp448/Lq4cIpIHVxcrU/o05Ya3V7J6/2lm/3mEAX8PHCEiIlLW3FDjBk4kn+CtjW8xYd0EwvzCuDr0arNjSRmha5xESrmaFcvxTI96AEz4bRcHTyWZnEhERMQ8QxoN4aaaN2EzbDy57EkOJhw0O5KUESqcRBxA/7bhtKtVgbRMOyO/3kKWTRfFiohI2WSxWBjXdhxXVbqKc5nnGLF4BPFp8WbHkjJAhZOIA7BaLUy6vSm+nq5sjopnxvIDZkcSERExjbuLO290eoMq5aoQdS6Kx5c9TqZNw5RL8VLhJOIgQgO8eOGmhgC8uWgf26MTTE4kIiJingpeFZh63VR83HxYH7uel9a+pPseSrFS4STiQG65qgrdGwaTZTd44ustpGXazI4kIiJimtrlazOx40SsFivf7/ueT3d+anYkcWIqnEQciMVi4ZVbGhNUzp09sed4Y+FesyOJiIiYqmPVjjzZ8kkAJq+fzLKoZabmEeelwknEwVQo58ErtzQG4P2VB1l36IzJiURERMx1T/17uL3O7RgYPL3iafac2WN2JHFCKpxEHFC3hiHc3qIqhgFPfLOZpPQssyOJiIiYxmKxMDpyNJEhkaRkpfDwkoeJS40zO5Y4GRVOIg5qbK8GVAnwIupMKi//usvsOCIiIqZys7oxudNkqvtV50TyCR5d+ijptnSzY4kTUeEk4qD8PN2YdEcTAL5cd5Slu0+anEhERMRc/h7+TLtuGn7ufmw9tZXnVj+nkfakyKhwEnFgV9cMYnC7CAD+9+0WjsenmpxIRETEXOH+4UzpNAVXiyu/HfqNd7e8a3YkcRIqnEQc3FM96lIvxJe4pAyGzl5PaoaGKBcRkbItsnIko9uMBuDdLe/y2c7PTE4kzkCFk4iD83Rz4YP+LQn0cWd7dCJPfrtFpyWIiEiZd0edOxjWdBgAr/31Gt/v+97kROLoVDiJOIGwQG/evbs5rlYLv249wdQl+82OJCIiYrphTYcxoMEAAJ7/43nmHZxnciJxZCqcRJxEZI0KvNi7EQBTFu5l/vYTJicSERExl8Vi4YmWT9CnTh8MDEavGs2So0vMjiUOSoWTiBO5s3U1Bl4dDsDjc7aw43iCuYFERERMZrFYeLbNs/Sq0QubYePJ5U/yx/E/zI4lDkiFk4iTGXNDfdrXCiI108bQTzcQl6R7WIiISNlmtVgZ3248Xap1IdOeyaNLHmVD7AazY4mDUeEk4mRcXaxMv6s5EUE+RMen8uDsDaRnaaQ9EREp21ytrkzsOJH2VdqTZktj+OLh7IjbYXYscSAqnESckL+3Gx/0b4mvpyvrj5zluR+3a6Q9EREp89xc3Hij0xu0CmlFcmYyDyx6gL1n95odSxyECicRJ1WrUjmm3nkVVgt8vf4YH60+bHYkERER03m6ejL1uqk0CWpCQnoCQxcM5XDCYbNjiQNQ4STixDrVrcTo6+sD8PKvO1m+95TJiURERMzn4+bDO13eoW75upxOO819C+4jOina7FhSyqlwEnFyQ9pHcHuLqtgNGPHFRg6cSjI7koiIiOn8Pfx5r+t7hPuFE5sSy/0L7udUir5glItT4STi5CwWCy/f0ogW1ctzLi2L+z5ZT0JKptmxRERETFfBqwIzu82kSrkqRJ2LYtiiYaTbNBqt5E2Fk0gZ4OHqwox7WhDq78mhuGRGfLmRTJvd7FgiIiKmC/YJZma3mQR6BrLn7B4mr59sdiQppVQ4iZQRFX09+GBAS7zcXFi5L46nv9uqkfZERESAqr5Vebn9ywB8uftLFh9dbHIiKY1UOImUIQ1D/Zl+91W4WC18vzGaSb/vMTuSiIhIqdC+SnsGNhwIwNjVY4lJjjE3kJQ6KpxEypjr6gUz4ZbGALyz7ACf/HHY3EAiIiKlxCNXPUKjCo1IzEjk6RVPk2XPMjuSlCIqnETKoD6twhjZtQ4Az/+8g9+2nTA5kYiIiPncXNyY2HEiPm4+bDy5kfe2vmd2JClFSkXhNH36dMLDw/H09CQyMpJ169ZddN4PPviADh06UL58ecqXL0+XLl3ynV9E8vbwdbW4K7IahgGPztnMukNnzI4kIiJiujC/MMa2GQvA+1vf56+Yv0xOJKWF6YXTnDlzGDlyJOPGjWPjxo00bdqU7t27c/LkyTznX7ZsGXfeeSdLly5lzZo1hIWF0a1bN6KjddMykcKwWCy8eHMjujYIJiPLzn2f/MXe2HNmxxIRETHd9TWu55Zat2A37Dyz4hnOpp01O5KUAhbD5GG1IiMjadWqFdOmTQPAbrcTFhbGww8/zDPPPHPJ5W02G+XLl2fatGn079//kvMnJibi7+9PQkICfn5+V5xfxNGlZdq4e+ZaNhw5S2V/T74bdjWhAV5mxxInpX1w3rRdREqflMwU+v3aj0MJh7im6jVMvW4qFovF7FhSxAqz/zX1iFNGRgYbNmygS5cuOW1Wq5UuXbqwZs2aAr1GSkoKmZmZBAYG5vl8eno6iYmJuSYR+YenmwsfDmhJrUrlOJGQxsCP1+kGuSLFTH2TSOnn7ebNpI6TcLe6s/zYcj7f9bnZkcRkphZOcXFx2Gw2goODc7UHBwcTE1OwISCffvppQkNDcxVf/zZhwgT8/f1zprCwsCvOLeJsArzd+WRwa4L9PNgbm8T9s9eTlmkzO5aI01LfJOIY6gbW5clWTwIwZcMUdp7eaXIiMZPp1zhdiVdffZWvvvqKH374AU9PzzznGTVqFAkJCTlTVFRUCacUcQxVArz4ZHBrfD1cWXfoDI/P2YzNrhvkihQH9U0ijqNf3X5cF3YdmfZMnlrxFMmZyWZHEpOYWjgFBQXh4uJCbGxsrvbY2FhCQkLyXfb111/n1VdfZcGCBTRp0uSi83l4eODn55drEpG81Qvx4/3+LXF3sfLb9hjG/7wDky+DFHFK6ptEHIfFYmF8u/GE+IRwJPEIr6x9xexIYhJTCyd3d3datGjB4sWLc9rsdjuLFy+mbdu2F11u4sSJvPjii8yfP5+WLVuWRFSRMqNtzQpM6dsUiwU+WXOEd5YdMDuSiIiIqfw9/Hm1w6tYLVbmHpjLzwd+NjuSmMD0U/VGjhzJBx98wCeffMKuXbsYNmwYycnJDBo0CID+/fszatSonPlfe+01nnvuOT766CPCw8OJiYkhJiaGpKQks1ZBxOnc2CSU525oAMCk3/fw0i87ddqeiIiUaS2CWzCs6TAAXvzzRY4kHjE5kZQ00wunvn378vrrrzN27FiaNWvG5s2bmT9/fs6AEUePHuXEiRM587/77rtkZGRw++23U7ly5Zzp9ddfN2sVRJzS4PYR/K97XQBmrjrEA7M3kJyeZXIqERER89zf+H5ahbQiNSuV/y3/H5k2jUJblph+H6eSpntliBTOz1uO88Q3W8jIstOgsh8fDmxJZX/d50kuj/bBedN2EXEcscmx3P7z7cSnxzOo0SBGthhpdiS5Ag5zHycRKf16NQ3lq6FtCCrnzs4TifSevpptxxLMjiUiImKKYJ9gnr/6eQBmbZ/F2hNrzQ0kJUaFk4hcUvNq5fnhoXbUCS5HbGI6fd5bw+87CnavNREREWfTuVpnbq9zOwYGo1eNJiFdXyiWBSqcRKRAwgK9+XbY1XSsU5HUTBsPfraB95Yf0HDlIiJSJv2v5f8I9wvnZMpJXljzgvrDMkCFk4gUmJ+nGx8NaEn/ttUxDJjw225Gfb+NTJvd7GgiIiIlytvNm9c6voar1ZWFRxby4/4fzY4kxUyFk4gUiquLlfE3N+L5Xg2wWuCrv6IY8NE6ElI0spCIiJQtDSo04OGrHgZgwroJGqLcyalwEpHLMrBdBDMHtMTH3YU/DpzmlndXczgu2exYIiIiJWpgw4G0DmlNalYqz6x4hky7vkh0ViqcROSyXVcvmG+HXU2ovycHTyXT+53VLNwZa3YsERGREmO1WHm5/cv4ufux/fR23t38rtmRpJiocBKRK1K/sh8/Dm9H07AA4lMyuf/T9Tw/dwfpWTazo4mIiJSIEJ+QnCHKZ26byV8xf5kbSIqFCicRuWKV/Dz55oG23Nc+AoBZfxzm1nf+4JBO3RMRkTKia/Wu3FLrFg1R7sRUOIlIkXB3tTLmxgZ8NLAlgT7u7DieyI1vr+SHTcfMjiYiIlIinmn9DNV8qxGTHMOLf76oIcqdjAonESlS19ULZt4jHWhTI5DkDBuPz9nCE19vITk9y+xoIiIixSpniHKLK78f/p25B+aaHUmKkAonESlyIf6efH5fG0Z2rYPVAt9tPEavqavYcVynLYiIiHNrFNSIh5o9BMAra18hKjHK5ERSVFQ4iUixcLFaeKRzbb68vw0hfp4cjEvmlnf+4JM/DuvUBRERcWqDGw2mRXALUrJSeGalhih3FiqcRKRYRdaowG+PdqBL/UpkZNkZN3cHD8zeQHxKhtnRREREioWL1YUJ7Sfg6+7L1ritGqLcSahwEpFiV97HnQ/6t2Rcrwa4u1hZsDOWHm+uZP72Ezr6JCIiTqlyucqMbTsWgA+2fcCH2z40OZFcKRVOIlIiLBYLg9pF8P1DVxMR5ENMYhoPfraRQbP+4shpDVsuIiLOp0d4Dx5s+iAAb258k7c3vq0vDB2YCicRKVGNqvgz75EOjLi2Fm4uFpbtOUW3N1bw9uJ9pGXqprkiIuJchjcbzuMtHgeyjzxN/GuiiicHpcJJREqcl7sLT3avy/zHOtKuVgXSs+xMWbiXnm+tZMXeU2bHExERKVKDGw3m2chnAfhs12c8v+Z5bHZ9WehoVDiJiGlqVizHZ0MimXrnVVTy9eBQXDL9P1rH8C82EpOQZnY8ERGRItOvXj9eavcSVouV7/d9z6iVozTanoNR4SQiprJYLPRqGsriJ65hcLsIrBb4desJOk9exsyVB8my2c2OKCIiUiRurnUzkzpOwtXqym+Hf2Pk0pGk29LNjiUFpMJJREoFX083xvZqwM8Pt6d5tQCSM2y89Osubpy6inWHzpgdT0REpEh0C+/GW9e+hYeLB8uOLWP44uGkZKaYHUsKQIWTiJQqDUP9+fbBq3nttsYEeLuxO+Ycfd5bQ5/31rBoZyx2uy6oFRERx9axakfe6fwOXq5erD2xlgcXPci5jHNmx5JLUOEkIqWO1Wqhb6tqLHmiE3e2roar1cK6Q2e479P1dHljOZ+vPaIR+ERExKG1rtyaD7p9gK+7L5tObmLI70M4m3bW7FiSD4tRxsZDTExMxN/fn4SEBPz8/MyOIyIFEJOQxqw/DvP52iOcS8sCINDHnXvbVOfettUJKudhckIpKO2D86btIlJ27T6zmwcWPsCZtDPU9K/J+93ep5J3JbNjlRmF2f+qcBIRh5GUnsXXf0Xx4apDRMenAuDuauW25lUY0r4GtSqVMzmhXIr2wXnTdhEp2w4mHOT+BfdzMuUkQV5BPNDkAW6tfSvuLu5mR3N6Kpzyoc5JxPFl2ezM3xHDBysOsuVYQk5753qVGNIhgrY1KmCxWExMKBejfXDetF1E5Ni5Yzy46EGOJB4BoLJPZR5o8gA31boJN6ubyemclwqnfKhzEnEehmHw1+GzfLDyIIt2xXJ+b1azog93tq7Grc2rEuijb+tKE+2D86btIiIAGbYMvtv3HR9s/YBTqdk3hA/zDePBpg9yQ8QNuFhdTE7ofFQ45UOdk4hzOngqiQ9XHeKHTdGkZGQPHOHuYqVHoxDubF2NNjUCdRSqFNA+OG/aLiLyb2lZaXy952s+3P4hZ9Kyb8kR7hfO8GbD6RbeDatF47sVFRVO+VDnJOLczqVlMnfLcb5cd5Tt0Yk57TWCso9C3dZCR6HMpH1w3rRdRCQvKZkpfLn7Sz7e8TEJ6dmnptcuX5vhTYdzXbXr9IVgEVDhlA91TiJlx7ZjCXyx7ihzN0eT/K+jUN0bhXBn6zBdC2UC7YPzpu0iIvlJykhi9q7ZfLrjU5IykwCoH1ifIY2H0L5Ke3zcfExO6LhUOOVDnZNI2ZOUnsXPfx+F2vqvwSTCAr3oVKcS7WoF0bZmBfy9dPFtcdM+OG/aLiJSEAnpCXyy4xM+3/U5KVkpALhaXWkZ3JKOVTvSsWpHqvtVNzmlY1HhlA91TiJl2/boBL5cd5SfNh8nKT0rp91qgSZVA+hQO4h2tYK4qloAHq66CLeoaR+cN20XESmMs2ln+XTnpyw4vICj547meq66X3U6VOlAx6odaRncEjcXfSmYHxVO+VDnJCIAyelZrN4fx+r9cazcH8fBU8m5nvdycyGyRiDta2UXUvVCfHVaXxHQPjhv2i4icrkOJxxmxbEVrIhewYbYDWTZ//lS0NvVm7ahbelQpQOtQ1pTuVxlXK2uJqYtfVQ45UOdk4jk5Xh8Kqv3x7Hq72IqLikj1/OBPu40DPWjYag/DUL9aFDZj4ggH1ysKqYKQ/vgvGm7iEhRSMpI4s8Tf7Li2ApWRq8kLjUu1/OuVleqlqtKmG8Y1fyqZf/0rUY1v2qElgstk/eLUuGUD3VOInIphmGwJ/Ycq/ZlF1JrD54hNdN2wXxebi7Uq+xLw1A/GlTOLqjqhfji6aZT/C5G++C8abuISFGzG3Z2ndnFimMrWHVsFbvP7CbDnnHR+V0sLlT2qZxTRAV5BVHRqyIVvCoQ5BVEkFcQFTwr4OnqWYJrUfxUOOVDnZOIFFZGlp2dJxLZeTyRHccT2Hkikd0nzuVZTFktEF7Bh4q+HgSV86BCOXcq+GT/DCrnToVyHlTwyf7p5+la5k7/0z44b9ouIlLc7IadkyknOZp4lKPnsqeoxKjsn+eiSM1KLdDr+Lr55iqmynuWp5xbObzdvCnnVg4fN5+c6b/tXq5epa7fU+GUD3VOIlIUbHaDQ3HJOYXUzuPZ0+nki3+b919uLhYCfdwp7+2Ov5cbAd5uBHi5E+Dthv+/Hgd4Zf/u7+WGt7sr3u4ueLhaS13nUxDaB+dN20VEzGQYBnGpcdkFVeJRYpJjiEuNu2DK74hVQViw4OnqiZerV67p322eLp652j1cPHL99HT5z2NXDzxdPKnoXREvV69CZyrM/ldXh4mIXAYXq4ValcpRq1I5bm5WBcjueE6eS+fAySROJ2dwOimd08kZxCX98/h0UjqnkzI4l55Fps0gNjGd2MT0Qr+/1ZJ9qqDX34WUt7sLnm4uOY+93F3xdnPB6+/27HmtOcuc//38cx6uLni4WfFwteZ67O7imAWaiIgUnMVioaJ3RSp6V6RFcIs85zEMg3OZ54hLjeN06umcYups2llSslJIykjK+ZmclUxyRjJJmUmkZKaQlJmE8fd/qVmpBT66VRhvdHqDLtW7FPnr/psKJxGRImKxWAj28yTY79Lnf6dl2jiTnMHppAwSUjM5m5JBfGomCSkZxKdkEp+aSXxKJgmp//yekJJJhs0OgN2A5Axbzo19i5OHa3aB5eFqxcPNyi3NqjCyW91if18RESk9LBYLfu5++Ln7UcO/RqGWNYzsgiklKyWncErNSiUtKy3X7/99Lt2WTlpWGmm2NNKz0rN/5tGWlpV2WUebCkuFk4iICTzdXAgN8CI0oHA7+iybndRMG6kZNlL+nlIzs7J/ZthIzfynPS3zn7bUTBtp/3r83+fTs+ykn/+ZZc/1nv9tS0zL+m8sERGRi7JYLHi7eePt5m12lCuiwklExIG4uljxdbHi61l8Q8YahkGGzf53MWUnPcuW63EFH49ie28REZHSymp2AIDp06cTHh6Op6cnkZGRrFu3Lt/5v/nmG+rVq4enpyeNGzdm3rx5JZRURMT5WSwWPFxd8PN0o6KvB1XLe1OzYjkahPpxVbXyVKvg2N8YioiIXA7TC6c5c+YwcuRIxo0bx8aNG2natCndu3fn5MmTec7/xx9/cOeddzJkyBA2bdpE79696d27N9u3by/h5CIiIiIiUlaYPhx5ZGQkrVq1Ytq0aQDY7XbCwsJ4+OGHeeaZZy6Yv2/fviQnJ/PLL7/ktLVp04ZmzZoxY8aMS76fhnwVETGP9sF503YRETFHYfa/ph5xysjIYMOGDXTp8s/QgVarlS5durBmzZo8l1mzZk2u+QG6d+9+0fnT09NJTEzMNYmIiJhJfZOIiOMxtXCKi4vDZrMRHBycqz04OJiYmJg8l4mJiSnU/BMmTMDf3z9nCgsLK5rwIiIil0l9k4iI4zH9GqfiNmrUKBISEnKmqKgosyOJiEgZp75JRMTxmDoceVBQEC4uLsTGxuZqj42NJSQkJM9lQkJCCjW/h4cHHh4aOldEREoP9U0iIo7H1MLJ3d2dFi1asHjxYnr37g1kDw6xePFiRowYkecybdu2ZfHixTz22GM5bQsXLqRt27YFes/zY2HofHIRkZJ3ft9r8rhEpY76JhERcxSqXzJM9tVXXxkeHh7GrFmzjJ07dxpDhw41AgICjJiYGMMwDOPee+81nnnmmZz5V69ebbi6uhqvv/66sWvXLmPcuHGGm5ubsW3btgK9X1RUlAFo0qRJkyYTp6ioqGLpUxyV+iZNmjRpMncqSL9k6hEnyB5e/NSpU4wdO5aYmBiaNWvG/PnzcwaAOHr0KFbrP5diXX311XzxxReMGTOG0aNHU7t2bX788UcaNWpUoPcLDQ0lKioKX19fLBYLkF1phoWFERUV5XTDwDrzuoFzr5/WzTE587rBla+fYRicO3eO0NDQYkjnuNQ3OQ9nXjdw7vXTujmmkuyXTL+PU2ngzPfPcOZ1A+deP62bY3LmdQPnX7/SxJm3tdbNcTnz+mndHFNJrpvTj6onIiIiIiJypVQ4iYiIiIiIXIIKJ7KHhR03bpxTDg3rzOsGzr1+WjfH5MzrBs6/fqWJM29rrZvjcub107o5ppJcN13jJCIiIiIicgk64iQiIiIiInIJKpxEREREREQuQYWTiIiIiIjIJahwEhERERERuQQVTsD06dMJDw/H09OTyMhI1q1bZ3akK/b8889jsVhyTfXq1TM71mVZsWIFvXr1IjQ0FIvFwo8//pjrecMwGDt2LJUrV8bLy4suXbqwb98+c8Jehkut38CBAy/4LHv06GFO2EKYMGECrVq1wtfXl0qVKtG7d2/27NmTa560tDSGDx9OhQoVKFeuHLfddhuxsbEmJS6cgqxfp06dLvjsHnzwQZMSF9y7775LkyZN8PPzw8/Pj7Zt2/Lbb7/lPO/In5ujcMZ+CdQ3OUrf5Kz9Ejh33+TM/RKUjr6pzBdOc+bMYeTIkYwbN46NGzfStGlTunfvzsmTJ82OdsUaNmzIiRMncqZVq1aZHemyJCcn07RpU6ZPn57n8xMnTuTtt99mxowZrF27Fh8fH7p3705aWloJJ708l1o/gB49euT6LL/88ssSTHh5li9fzvDhw/nzzz9ZuHAhmZmZdOvWjeTk5Jx5Hn/8cX7++We++eYbli9fzvHjx7n11ltNTF1wBVk/gPvvvz/XZzdx4kSTEhdc1apVefXVV9mwYQPr16/nuuuu4+abb2bHjh2AY39ujsCZ+yVQ3+QIfZOz9kvg3H2TM/dLUEr6JqOMa926tTF8+PCc3202mxEaGmpMmDDBxFRXbty4cUbTpk3NjlHkAOOHH37I+d1utxshISHGpEmTctri4+MNDw8P48svvzQh4ZX57/oZhmEMGDDAuPnmm03JU5ROnjxpAMby5csNw8j+nNzc3IxvvvkmZ55du3YZgLFmzRqzYl62/66fYRjGNddcYzz66KPmhSpC5cuXN2bOnOl0n1tp5Kz9kmGob3LEvsmZ+yXDcO6+ydn7JcMo+b6pTB9xysjIYMOGDXTp0iWnzWq10qVLF9asWWNisqKxb98+QkNDqVGjBnfffTdHjx41O1KRO3ToEDExMbk+Q39/fyIjI53iMzxv2bJlVKpUibp16zJs2DBOnz5tdqRCS0hIACAwMBCADRs2kJmZmeuzq1evHtWqVXPIz+6/63fe559/TlBQEI0aNWLUqFGkpKSYEe+y2Ww2vvrqK5KTk2nbtq3TfW6ljbP3S6C+yVk+R2fol8C5+yZn7ZfAvL7JtcheyQHFxcVhs9kIDg7O1R4cHMzu3btNSlU0IiMjmTVrFnXr1uXEiRO88MILdOjQge3bt+Pr62t2vCITExMDkOdneP45R9ejRw9uvfVWIiIiOHDgAKNHj6Znz56sWbMGFxcXs+MViN1u57HHHqNdu3Y0atQIyP7s3N3dCQgIyDWvI352ea0fwF133UX16tUJDQ1l69atPP300+zZs4fvv//exLQFs23bNtq2bUtaWhrlypXjhx9+oEGDBmzevNlpPrfSyJn7JVDf5Cz/TpyhXwLn7pucsV8C8/umMl04ObOePXvmPG7SpAmRkZFUr16dr7/+miFDhpiYTAqrX79+OY8bN25MkyZNqFmzJsuWLaNz584mJiu44cOHs337doe9luFSLrZ+Q4cOzXncuHFjKleuTOfOnTlw4AA1a9Ys6ZiFUrduXTZv3kxCQgLffvstAwYMYPny5WbHEgenvsk5OEO/BM7dNzljvwTm901l+lS9oKAgXFxcLhhxIzY2lpCQEJNSFY+AgADq1KnD/v37zY5SpM5/TmXhMzyvRo0aBAUFOcxnOWLECH755ReWLl1K1apVc9pDQkLIyMggPj4+1/yO9tldbP3yEhkZCeAQn527uzu1atWiRYsWTJgwgaZNm/LWW285zedWWpWlfgnUNzkLR+uXwLn7Jmftl8D8vqlMF07u7u60aNGCxYsX57TZ7XYWL15M27ZtTUxW9JKSkjhw4ACVK1c2O0qRioiIICQkJNdnmJiYyNq1a53uMzzv2LFjnD59utR/loZhMGLECH744QeWLFlCRERErudbtGiBm5tbrs9uz549HD161CE+u0utX142b94MUOo/u7zY7XbS09Md/nMr7cpSvwTqm5yFo/RL4Nx9U1nrl8CEvqnIhplwUF999ZXh4eFhzJo1y9i5c6cxdOhQIyAgwIiJiTE72hV54oknjGXLlhmHDh0yVq9ebXTp0sUICgoyTp48aXa0Qjt37pyxadMmY9OmTQZgTJkyxdi0aZNx5MgRwzAM49VXXzUCAgKMn376ydi6datx8803GxEREUZqaqrJyQsmv/U7d+6c8eSTTxpr1qwxDh06ZCxatMho3ry5Ubt2bSMtLc3s6PkaNmyY4e/vbyxbtsw4ceJEzpSSkpIzz4MPPmhUq1bNWLJkibF+/Xqjbdu2Rtu2bU1MXXCXWr/9+/cb48ePN9avX28cOnTI+Omnn4waNWoYHTt2NDn5pT3zzDPG8uXLjUOHDhlbt241nnnmGcNisRgLFiwwDMOxPzdH4Kz9kmGob3KUvslZ+yXDcO6+yZn7JcMoHX1TmS+cDMMwpk6dalSrVs1wd3c3Wrdubfz5559mR7piffv2NSpXrmy4u7sbVapUMfr27Wvs37/f7FiXZenSpQZwwTRgwADDMLKHfX3uueeM4OBgw8PDw+jcubOxZ88ec0MXQn7rl5KSYnTr1s2oWLGi4ebmZlSvXt24//77HeIPqLzWCTA+/vjjnHlSU1ONhx56yChfvrzh7e1t3HLLLcaJEyfMC10Il1q/o0ePGh07djQCAwMNDw8Po1atWsb//vc/IyEhwdzgBTB48GCjevXqhru7u1GxYkWjc+fOOR2TYTj25+YonLFfMgz1TY7SNzlrv2QYzt03OXO/ZBilo2+yGIZhFN3xKxEREREREedTpq9xEhERERERKQgVTiIiIiIiIpegwklEREREROQSVDiJiIiIiIhcggonERERERGRS1DhJCIiIiIicgkqnERERERERC5BhZOIiIiIiMglqHASERERERG5BBVOIiIiIiIil6DCSURERERE5BJUOImIiIiIiFyCCicREREREZFLUOEkIiIiIiJyCSqcRERERERELkGFk4iIiIiIyCWocBIREREREbkEFU4iIiIiIiKXoMJJRERERETkElzNDlDS7HY7x48fx9fXF4vFYnYcEZEyxTAMzp07R2hoKFarvrs7T32TiIg5CtMvlbnC6fjx44SFhZkdQ0SkTIuKiqJq1apmxyg11DeJiJirIP1SmSucfH19geyN4+fnZ3IaEZGyJTExkbCwsJx9sWRT3yQiYo7C9EtlrnA6fwqEn5+fOicREZPodLTc1DeJiJirIP2STjAXERERERG5BBVOIiIiIiIil2Bq4bRixQp69epFaGgoFouFH3/88ZLLLFu2jObNm+Ph4UGtWrWYNWtWsecUEREREZGyzdTCKTk5maZNmzJ9+vQCzX/o0CFuuOEGrr32WjZv3sxjjz3Gfffdx++//17MSUVEREREpCwzdXCInj170rNnzwLPP2PGDCIiIpg8eTIA9evXZ9WqVbzxxht07969uGKKiIiIiEgZ51Cj6q1Zs4YuXbrkauvevTuPPfbYRZdJT08nPT095/fExMTiiiciIlIg6ptE5L+MzExOTnmD1E2bzI7ikCo9MRLvVq2K9T0cqnCKiYkhODg4V1twcDCJiYmkpqbi5eV1wTITJkzghRdeKKmIIiIil6S+SUT+zTAMYl58ifivvzY7isOylcAXUA5VOF2OUaNGMXLkyJzfz9/kSkRExCzqm0Tk385++ml20WSxEDxqFG5VQs2O5HA8Gzcu9vdwqMIpJCSE2NjYXG2xsbH4+fnlebQJwMPDAw8Pj5KIJyJStDJSIGotHF4Jh1ZC7HYw7GangpaDoccEs1M4NPVNInLeuaVLiX31NQAqPfUUgf3vNTmRXIxDFU5t27Zl3rx5udoWLlxI27ZtTUokIlKEstLh2F/ZRdLhldmPbRlmp7qQLdPsBCIiTiFtzx6OP/EkGAYBd9xB4MABZkeSfJhaOCUlJbF///6c3w8dOsTmzZsJDAykWrVqjBo1iujoaD799FMAHnzwQaZNm8ZTTz3F4MGDWbJkCV9//TW//vqrWasgIpJbVgacPQwYBZs/5TQcXg2HV0DUOshKy/28byhEdIDwDhAWCW55H10vUe4+ZicQEXF4WXFxRA0bhj0lBe82bQgZ+xwWi8XsWJIPUwun9evXc+211+b8fv587wEDBjBr1ixOnDjB0aNHc56PiIjg119/5fHHH+ett96iatWqzJw5U0ORi4h5bJlwfBMcWpF9lOjoWshKvfzX86n0T6EU0RECa4A6UhERp2JPS+PY8BFkHT+Be3g4Vd96E4ubm9mx5BIshmEU8GtR55CYmIi/vz8JCQn4+fmZHUdEHI0tC2K2/HM63dE/ISMp9zzu5cClgB2gqxeEtfqnUAqq49SFkvbBedN2ESk7DMPg+BNPkjhvHlZ/fyLmfIV7eLjZscqswux/HeoaJxGRfJ05BNEboDi+D0qKzS6UjvwB6f8Z8tSrPIS3h/CO2UeLKtZz6uJHREQuX9z0d0icNw9cXan69tsqmhyICicRcXxnDsGKSbDlKzBsxf9+Hv4Q3u7vo0QdoFJDsFqL/31FRMShJfz6K3HTpgEQMm4sPpGtTU4khaHCSUQcV/xRWPE6bP4c7FnZbVVagke5on8vNx+o1ia7UAppAlaXon8PERFxWqmbN3Ni1GgAAgcPpvwdd5icSApLhZOIOJ6EaFg5GTZ+Cva/h8au1QU6jYaqLczNJiIi8h+Z0dFEDR+BkZFBueuuo9ITIy+9kJQ6KpxExHGci4GVU2DDx//c3yjiGrh2dPbRIBERkVLGlpRM1LCHsJ0+jUe9elSZNBGLi85acEQqnESk9Es6CavehPUf/nOfo+rtsgum8PamRhMRkbLFyMwk7v33Sd+zt0DzZxw9SvrevbhUDCLs3Xew+uheeI5KhZOIlF7Jp+GPt2DdB5CZkt0WFgnXPps9dLdGrhMRkRJkGAYxL75E/NdfF2o5i4cHYdOn41a5cjElk5KgwklESp+UM7BmGqx97597JFVpkX2EqWZnFUwiImKKs59+ml00WSwEPTwC1/LlC7Scd5s2eEREFHM6KW4qnESk9EiNhz/fgTXvQMa57LbKTbMHfajTXQWTiIiY5tzSpcS++hoAlZ5+igoDB5obSEqcCicRMV9aYvbRpTVTIS0huy24UfYRprrXq2ASERFTpe3Zw/EnngTDIOCOOwgcMMDsSGICFU4iYp70JFj3PvzxNqSezW6rWA86jYL6N+mmsiIiYrqsuDiihg3DnpKCd5s2hIx9Dou+0CuTVDiJSMnLSIa/PoTVb0LK6ey2CrWh0zPQ8BbdXFZEREoFe1oax4aPIOv4CdzDw6n61ptY3NzMjiUmUeEkIsUvKx2OrYfDK+HQSji27p/7MAXWgGuegca3q2ASEZFSwzAMTox+ltQtW7D6+xM2411c/P3NjiUmUuEkIkXPlgnHN8Gh5dmFUtQ6yErNPU/5COj4P2jSF1y0KxIRkdIlbvo7JM6bB66uVH37bdzDw82OJCbTXysiUjTi9sHuX7OPKh1ZA5nJuZ/3qQjhHSCiA4R3hAo1NeiDiIiUSgm//krctGkAhIwbi09ka5MTSWmgwklErkzcPlj2Kmz/DjD+afcKhPD22TeqDe8AFeuqUBIRkVIvdfNmTowaDUDg4MGUv+MOkxNJaaHCSUQuz+kDsGISbJ0Dhj27rVaX7BvURnSESg00Kp6IiDiUzOhoooaPwMjIoNx111HpiZFmR5JSRIWTiBTO2cPZBdPmL8GwZbfVvSF7RLzKTUyNJiIicrlsSclEDXsI2+nTeNSrR5VJE7G4aNAi+YcKJxEpmPgoWDkZNs0Ge1Z2W+3ucO0oCL3K3GwiIiL/YWRmcvarOWQcOVKg+dO2byd9715cKgYR9u47WH18ijmhOBoVTiKSv8TjsHIKbPzknyHEa3aGa0dD1ZbmZhMREcmDYRjEvPgS8V9/XajlLB4ehE2fjlvlysWUTByZCicRudC52OzR8Q4shW3fgC09uz2iI3QaDdXbmptPREQkH2c//TS7aLJYCOx/LxZv70suY7FY8O3SBc8GDUogoTgiFU4iAslx/9yc9vBKiNub+/lqV2cfYYroYE4+ERGRAjq3dCmxr74GQKWnn6LCwIHmBhKnocJJpCxKOQNHVv9TKJ3c+Z8ZLBDSOPsIU92eUL2dhhIXEZFSL23PHo4/8SQYBgF33EHggAFmRxInosJJpCzJyoBvB2XfqPbf91wCqNTw75vTdoDqV4N3oCkRRURELkfWqVNEDRuGPSUF7zZtCBn7HBZ96SdFSIWTSFmyagrs/iX7cVDdfwql8PbgE2RuNhERkctkT0sjasQIso6fwD08nKpvvYnFzc3sWOJkVDiJlBUx27PvvwRw24fQ+HZz84iIiBQBwzA4MfpZ0rZsxervT9iMd3Hx9zc7ljghq9kBRKQE2LLgp+HZ91+qdyM0us3sRCIiIkUibvo7JM6bB66uVH37bdzDw82OJE5KhZNIWbBmKpzYDJ7+cMNkDfQgIiJOIeGXX4mbNg2Ays+PwyeytcmJxJmpcBJxdqf2wtIJ2Y97vAq+IebmERERKQKpmzdzYvRoAAIHDybgdp2CLsXL9MJp+vTphIeH4+npSWRkJOvWrbvovJmZmYwfP56aNWvi6elJ06ZNmT9/fgmmFXEwdlv2KXq2dKjVBZreaXYiERGRK5YZHU3U8BEYGRmUu+46Kj0x0uxIUgaYWjjNmTOHkSNHMm7cODZu3EjTpk3p3r07J0+ezHP+MWPG8N577zF16lR27tzJgw8+yC233MKmTZtKOLmIg1j3PhxbB+7l4MY3dYqeiIg4PFtSMlHDHsJ2+jQe9epRZdJELC4uZseSMsDUwmnKlCncf//9DBo0iAYNGjBjxgy8vb356KOP8px/9uzZjB49muuvv54aNWowbNgwrr/+eiZPnlzCyUUcwJlDsHh89uOu4yEgzNw8IiIiV8ielsbxJ54gfe9eXCoGEfbuO1h9fMyOJWWEacORZ2RksGHDBkaNGpXTZrVa6dKlC2vWrMlzmfT0dDw9PXO1eXl5sWrVqou+T3p6Ounp6Tm/JyYmXmFyEQdgGDD3YchMyb5PU4tBZicSkX9R3yRSOIZhkLRkCbGvTCAzOhqLhwdh06fjVrmy2dGkDDHtiFNcXBw2m43g4OBc7cHBwcTExOS5TPfu3ZkyZQr79u3DbrezcOFCvv/+e06cOHHR95kwYQL+/v45U1iYvnWXMmDDLDi8Ely94Ka3wWr65Ywi8i/qm0QKLv3QIaKGPsCx4SPIjI7GNSSEqtOm4dWkidnRpIxxqL+m3nrrLWrXrk29evVwd3dnxIgRDBo0CGs+fxSOGjWKhISEnCkqKqoEE4uYIOEYLHgu+3HnsRBYw9w8InIB9U0il2ZPTubk5CkcvOlmkleuBDc3KgwdSs1ff6Fch/Zmx5MyyLRT9YKCgnBxcSE2NjZXe2xsLCEheQ+XXLFiRX788UfS0tI4ffo0oaGhPPPMM9SocfE/DD08PPDw8CjS7CKllmHAz49Bxjmo2hoiHzA7kYjkQX2TyMUZhsG5334j9rWJZP39d6JPxw4EjxqFR0SEyemkLDPtiJO7uzstWrRg8eLFOW12u53FixfTtm3bfJf19PSkSpUqZGVl8d1333HzzTcXd1wRx7DlK9i/EFzc4eZpYNUoQyIi4jjS9u7l6ICBRI98gqzYWNyqVqXqO+8Q9t57KprEdKYdcQIYOXIkAwYMoGXLlrRu3Zo333yT5ORkBg3KvpC9f//+VKlShQkTsm/euXbtWqKjo2nWrBnR0dE8//zz2O12nnrqKTNXQ6R0OBcD85/OftzpGahY19w8IiIiBWRLTOTUtGmc/fwLsNmweHhQ4YGhVBg8GOt/BgYTMYuphVPfvn05deoUY8eOJSYmhmbNmjF//vycASOOHj2a6/qltLQ0xowZw8GDBylXrhzXX389s2fPJiAgwKQ1ECklDAN+fQLSEqByU7j6EbMTiYhIGZZx5AhRDw7DFh9foPntqakYaWkA+HbtSqWnn8a9apViTChSeBbDMAyzQ5SkxMRE/P39SUhIwM/Pz+w4IkVjxw/wzUCwusLQZRDS2OxEInnSPjhv2i7ibE69PZW4d94p1DLuEREEj3mWcu3aFVMqkQsVZv9r6hEnEblCGSmw/kNYPin79/YjVTSJiIjpUtavB6Dio4/g27XrpRewuuBeLQyLq/40ldJL/3eKOKLMNNjwMaycAskns9uqtISOT5qbS0REyjwjI4PULVsA8O3WDY+aNU1OJFI0VDiJOJKsdNj4KaycDOf+vvFzQDW45mlo0g9c9E9aRETMlbp9B0Z6Oi7ly+Oezy1jRByN/soScQRZGbD5c1jxOiQey27zq5p9hKnZ3eDqbm4+ERGRv6VsyD5Nz7tlCywWi8lpRIqOCieR0syWBVu/guWvQfzR7DbfytDhCWjeH1x1A00RESldzl/f5N2ypclJRIqWCieR0mr7d7DkJThzMPt3n0rQYSS0GARuuqeFiIiUPobNRuqGjQB4tVDhJM5FhZNIabRyCix+IfuxdwVo/zi0HALu3ubmEhERyUf63r3Yk5Kw+vjgWU83YhfnosJJpLT5Y+o/RVO7R6HjU+BRztxMIiIiBZDyV/Zpel7Nm2tocXE6+j9apDT5811YMCb7cafR0Olpc/OIiIgUQs71TS1amJxEpOhZzQ4gIn9b9wHMfyb7ccenVDSJiIhDMQyDlA0bAPBupeubxPmocBIpDf76EOb9ffPa9o/DtaPNzSMiIlJIGYcOYzt9Gou7O56NG5sdR6TIqXASMduGT+DXkdmPr34YOo8D3fdCREQcTMr6vwDwatIEq7vuLyjOR4WTiJk2fQ4/P5r9uM1D0PVFFU0iIuKQUv8+Tc9Lp+mJk1LhJGKWLXPgp+GAAa2HQvdXVDSJiIjDOj+inm58K85KhZOIGbZ9Cz8+CBjQcjD0nKiiSUREHFbm8eNkHj8OLi54N2tmdhyRYqHCSaSk7fgBvr8fDDs07w/XT1bRJCIiDu38aHqeDRpg9fExOY1I8VDhJFKSds6Fb4dkF03N7oYb3wKr/hmKiIhjyzlNT/dvEiemv9hESsrxzfDtYDBs0KQf3DRVRZOIiDgF3b9JygL91SZSErIysgeCsGdC3euh9ztgdTE7lYiIyBXLOn2ajAMHAPBq3tzkNCLFR4WTSElY/SbEbgevQOj1toomERFxGuePNnnUroVr+fImpxEpPoUunMLDwxk/fjxHjx4tjjwizid2JyyfmP34+klQrqK5eURERIpQzv2bNAy5OLlCF06PPfYY33//PTVq1KBr16589dVXpKenF0c2Ecdny/rnFL06PaHRbWYnEhERKVK6f5OUFZdVOG3evJl169ZRv359Hn74YSpXrsyIESPYuHFjcWQUcVx/vgPHN4KHP9w4RcOOi4iIU7ElJZG2ezegwkmc32Vf49S8eXPefvttjh8/zrhx45g5cyatWrWiWbNmfPTRRxiGUZQ5RRxP3H5Y+nL24+4vg1+ouXlERESKWOqmTWC34xYWhltwsNlxRIqV6+UumJmZyQ8//MDHH3/MwoULadOmDUOGDOHYsWOMHj2aRYsW8cUXXxRlVhHHYbfD3BGQlQY1roWr7jE7kYiISJHTaXpSlhS6cNq4cSMff/wxX375JVarlf79+/PGG29Qr169nHluueUWWrVqVaRBRRzKXzPh6BpwLwc3va1T9ERExCnl3L+ppW58K86v0IVTq1at6Nq1K++++y69e/fGzc3tgnkiIiLo169fkQQUcThnD8Oi57Mfd3keAqqZGEZERKR42NPSSNu6FdARJykbCl04HTx4kOrVq+c7j4+PDx9//PFlhxJxWIYBPz8KmclQ7WpoOcTsRCIiIsUidetWjMxMXCtWxK2aviQU51fowSFOnjzJ2rVrL2hfu3Yt69evL3SA6dOnEx4ejqenJ5GRkaxbty7f+d98803q1q2Ll5cXYWFhPP7446SlpRX6fUWKxabZcHAZuHrCzdPAqntMi4iIc/rn/k0tsOiUdCkDCv1X3fDhw4mKirqgPTo6muHDhxfqtebMmcPIkSMZN24cGzdupGnTpnTv3p2TJ0/mOf8XX3zBM888w7hx49i1axcffvghc+bMYfTo0YVdDZGil3gcfn82+/F1Y6BCTXPziIiIFCMNDCFlTaELp507d9K8efML2q+66ip27txZqNeaMmUK999/P4MGDaJBgwbMmDEDb29vPvroozzn/+OPP2jXrh133XUX4eHhdOvWjTvvvPOSR6lEip1hwC+PQ3oiVGkBbR4yO5GIiEixMbKySNm8GQDvlhoQTMqGQhdOHh4exMbGXtB+4sQJXF0LfslURkYGGzZsoEuXLv+EsVrp0qULa9asyXOZq6++mg0bNuQUSgcPHmTevHlcf/31F32f9PR0EhMTc00iRW7bN7B3Pri4w83TwepidiIRKcXUN4mjS9u1CyMlBau/Px61a5kdR6REFLpw6tatG6NGjSIhISGnLT4+ntGjR9O1a9cCv05cXBw2m43g/9wsLTg4mJiYmDyXueuuuxg/fjzt27fHzc2NmjVr0qlTp3xP1ZswYQL+/v45U1hYWIEzihRI0kn47ansxx2fgkr1zc0jIqWe+iZxdDmn6TVvjkXX80oZUej/019//XWioqKoXr061157Lddeey0RERHExMQwefLk4siYY9myZbzyyiu88847bNy4ke+//55ff/2VF1988aLLnC/yzk95XZ8lckXmPQmpZyGkMbR/zOw0IuIA1DeJo0tZr+ubpOwp9HDkVapUYevWrXz++eds2bIFLy8vBg0axJ133pnnPZ0uJigoCBcXlwtO+4uNjSUkJCTPZZ577jnuvfde7rvvPgAaN25McnIyQ4cO5dlnn8WaxzceHh4eeHh4FGINRQrh6FrY+RNYXLJP0XMp+L8BESm71DeJIzPs9pwR9XTjWylLCl04QfZ9moYOHXpFb+zu7k6LFi1YvHgxvXv3BsBut7N48WJGjBiR5zIpKSkXFEcuLtnXkhiGcUV5RC7Lli+zfzbpC5WbmptFRESkBKTv348tIQGLlxeeDRqYHUekxFxW4QTZo+sdPXqUjIyMXO033XRTgV9j5MiRDBgwgJYtW9K6dWvefPNNkpOTGTRoEAD9+/enSpUqTJgwAYBevXoxZcoUrrrqKiIjI9m/fz/PPfccvXr1yimgREpMVgbs+CH7cdO+5mYREREpITlHm65qhqUQZxuJOLpCF04HDx7klltuYdu2bVgslpwjPedvfGaz2Qr8Wn379uXUqVOMHTuWmJgYmjVrxvz583MGjDh69GiuI0xjxozBYrEwZswYoqOjqVixIr169eLll18u7GqIXLn9CyEtHsqFQHgHs9OIiIiUiPMDQ3i10Gl6UrZYjEKe43b+6M7MmTOJiIhg3bp1nD59mieeeILXX3+dDh1K9x+QiYmJ+Pv7k5CQgJ+fn9lxxJF93T/7+qa2I6C7ineRgtA+OG/aLuIoDMNg/zWdyDp5kmqffIJPZGuzI4lckcLsfwt9xGnNmjUsWbKEoKAgrFYrVquV9u3bM2HCBB555BE2bdp02cFFHEZaAuyZn/24SR9zs4iIiJSQzGPHyDp5Etzc8GraxOw4IiWq0MOR22w2fH19geyR8Y4fPw5A9erV2bNnT9GmEymtds4FWzpUrAch6jhERKRsyDlNr1EjrJ6eJqcRKVmFPuLUqFEjtmzZQkREBJGRkUycOBF3d3fef/99atSoURwZRUqfbV9n/2x8B/x9fZ+IiIiz0/2bpCwrdOE0ZswYkpOTARg/fjw33ngjHTp0oEKFCsyZM6fIA4qUOgnRcGhl9uPGd5ibRUREpASlbDhfOGlgCCl7Cl04de/ePedxrVq12L17N2fOnKF8+fI5I+uJOLXt3wIGVGsL5aubnUZERKREZJ48SeaRo2Cx4NW8udlxREpcoa5xyszMxNXVle3bt+dqDwwMVNEkZcfWb7J/alAIEREpI2yJiZx6400APOrXw+Xv691FypJCHXFyc3OjWrVqhbpXk4hTid0JsdvA6gYNepudRkREpFgZdjsJP/zAyclTsJ05A0D5O3SaupRNhR5V79lnn2X06NGc+fsfj0iZcn5QiNrdwDvQ3CwiIiLFKHXbNg73u5MTz47BduYM7jVrUu3jjyh/551mRxMxRaGvcZo2bRr79+8nNDSU6tWr4+Pjk+v5jRs3Flk4kVLFbv/XaXr6tk1ERJxT1pkznHrjDeK//Q4MA6uPD0EjRhB4z91Y3NzMjidimkIXTr179y6GGCIO4OgaSDwGHn5Qp4fZaURERIqUkZXF2TlzOPXW29gTEwHwv/kmKj7xBG6VKpmcTsR8hS6cxo0bVxw5REq/rX8Pt9/gJnDzMjeLiIhIEUrZsIGYF18iffduADzq1yfkuTF4a/Q8kRyFLpxEyqSsdNj5Y/bjxhpNT0REnEPmyZOcfP11Euf+DIDV359Kjz1KQJ8+WFxcTE4nUroUunCyWq35Dj2uEffEKe1bAGkJ4BsK4e3NTiMiInJFjIwMzsz+jLjp07GnpIDFQsAdd1Dx8cdwLV/e7HgipVKhC6cffvgh1++ZmZls2rSJTz75hBdeeKHIgomUKlv/Hk2v8W1g1TdwIiLiuJJWryb25VfIOHgQAM+mTQgZ8xxejRuZnEykdCt04XTzzTdf0Hb77bfTsGFD5syZw5AhQ4okmEipkRoPe+dnP27S19QoIiIilyszOprY1yZybsECAFwCA6n0xBP439Ibi7XQd6gRKXOK7BqnNm3aMHTo0KJ6OZHSY9dcsGVAxfoQrG/jRETEsdjT0zn94Yecfv8DjLQ0cHGh/N13UXHECFz8/MyOJ+IwiqRwSk1N5e2336ZKlSpF8XIipcv50/Sa9IF8ru8TEREpTQzDIGnpMmInTCAzKgoA71atCB4zBs+6dUxOJ+J4Cl04lS9fPtfgEIZhcO7cOby9vfnss8+KNJyI6RKOweGV2Y8b325uFhERkQLKOHyYmAkTSF6+AgDXSpWo9PRT+F1/fb6DfInIxRW6cHrjjTdy/YOzWq1UrFiRyMhIymsUFnE2277N/lm9HQRUMzeLiIhIASTOn8/x/z2FkZkJbm5UGDiQoAcfwOrjY3Y0EYdW6MJp4MCBxRBDpJTKGU3vDnNziIiIFEDq5s0cf+ppjMxMfNq1I3jMs3hERJgdS8QpFHoIlY8//phvvvnmgvZvvvmGTz75pEhCiZQKMdvh5A5wcYeGvc1OIyIikq/M6Giiho/AyMigXOfOhL3/noomkSJU6MJpwoQJBAUFXdBeqVIlXnnllSIJJVIqbPv7aFPtbuCl01BFRKT0siUlEzXsIWynT+NRrx5VJr6GxUX3HRQpSoUunI4ePUpEHt9eVK9enaNHjxZJKBHT2e3/XN/UpI+5WURERPJh2Gwcf+IJ0vfuxaViEGHvvqPrmUSKQaELp0qVKrF169YL2rds2UKFChWKJJSI6Y6shsRo8PCH2t3NTiMiInJRJydOImn5ciweHoS98w5ulSubHUnEKRW6cLrzzjt55JFHWLp0KTabDZvNxpIlS3j00Ufp169fcWQUKXnnT9NrcBO4eZqbRURE5CLOzvmaM39fYx762qt4NW5sciIR51XoUfVefPFFDh8+TOfOnXF1zV7cbrfTv39/XeMkziEzDXb8lP1Yp+mJiEgplbxmDTEvvghAxUcfwa9HD5MTiTi3QhdO7u7uzJkzh5deeonNmzfj5eVF48aNqV69enHkEyl5W76E9ATwDYXq7c1OIyIicoH0g4c49uhjkJWFX69eVHjwQbMjiTi9QhdO59WuXZvatWsXZRYR86Wfg6UvZz+++mGwFvpsVhERkWKVdfYsUcMexJ6YiNdVV1H5pRexWCxmxxJxeoX+q/C2227jtddeu6B94sSJ3HHH5d0kdPr06YSHh+Pp6UlkZCTr1q276LydOnXCYrFcMN1www2X9d4iuax6A5JPQWBNaHWf2WlERERyMTIyiH7kUTKPHMWtShWqTpuK1cPD7FgiZUKhC6cVK1Zw/fXXX9Des2dPVqxYUegAc+bMYeTIkYwbN46NGzfStGlTunfvzsmTJ/Oc//vvv+fEiRM50/bt23Fxcbnsok0kR/xR+GNa9uNuL4Kru7l5RERE/sUwDE688AIpf/2F1ceHsBnv4qoRjUVKTKELp6SkJNzdL/yD0s3NjcTExEIHmDJlCvfffz+DBg2iQYMGzJgxA29vbz766KM85w8MDCQkJCRnWrhwId7e3iqc5MotHg+2dAjvAHUv/HJARETETGc++piE774Hq5Uqb0zBQ5dMiJSoQhdOjRs3Zs6cORe0f/XVVzRo0KBQr5WRkcGGDRvo0qXLP4GsVrp06cKaNWsK9Boffvgh/fr1w+ciN3pLT08nMTEx1yRygWMbYNs3gAW6vQQ6V1xEipH6JimspNWrOfn66wAEjxpFuY4dTU4kUvYUenCI5557jltvvZUDBw5w3XXXAbB48WK++OILvv3220K9VlxcHDabjeDg4FztwcHB7N69+5LLr1u3ju3bt/Phhx9edJ4JEybwwgsvFCqXlDGGAb+Pzn7c7C4IbWZqHBFxfuqbpLDOfvklGAb+t91K+XvuNjuOSJlU6CNOvXr14scff2T//v089NBDPPHEE0RHR7NkyRJq1apVHBkv6sMPP6Rx48a0bt36ovOMGjWKhISEnCkqKqoEE4pD2PkTRP0Jbt5w3Riz04hIGaC+SQrDyMggZc2fAJTvd6dG0BMxyWUNR37DDTfkjGKXmJjIl19+yZNPPsmGDRuw2WwFfp2goCBcXFyIjY3N1R4bG0tISEi+yyYnJ/PVV18xfvz4fOfz8PDAQ6PNyMVkpcPCsdmPr34E/ELNzSMiZYL6JimMlM2bsScn41K+PJ4NC3dZhIgUncu+Sc2KFSsYMGAAoaGhTJ48meuuu44///yzUK/h7u5OixYtWLx4cU6b3W5n8eLFtG3bNt9lv/nmG9LT07nnnnsuK78IAGvfg/gjUC4E2j1idhoREZELJK9cBYBP+/ZYdH9BEdMU6ohTTEwMs2bN4sMPPyQxMZE+ffqQnp7Ojz/+WOiBIc4bOXIkAwYMoGXLlrRu3Zo333yT5ORkBg0aBED//v2pUqUKEyZMyLXchx9+SO/evamgYTjlciXHwYpJ2Y87jwX3vAcYERERMVPS6uzCqVyH9iYnESnbClw49erVixUrVnDDDTfw5ptv0qNHD1xcXJgxY8YVBejbty+nTp1i7NixxMTE0KxZM+bPn58zYMTRo0ex/ufblT179rBq1SoWLFhwRe8tZdyyVyE9EUKaQNM7zU4jIiJygaxTp0jfuQsAn3btTE4jUrYVuHD67bffeOSRRxg2bBi1i/i+ASNGjGDEiBF5Prds2bIL2urWrYthGEWaQcqYU3th/d/3Cuv+MujUBxERKYWSVq8GwLNhQ93sVsRkBf5rcdWqVZw7d44WLVoQGRnJtGnTiIuLK85sIsVn4XNg2KDuDRChe2GIiEjplHN9k07TEzFdgQunNm3a8MEHH3DixAkeeOABvvrqK0JDQ7Hb7SxcuJBz584VZ06RonNgKeydD1ZX6Jr/qIwiIiJmMWw2kv8+4lSuQweT04hIoc9P8vHxYfDgwaxatYpt27bxxBNP8Oqrr1KpUiVuuumm4sgoUnTsNljw972aWt0HQSV77zEREZGCStuxA1t8PFZfX7yaNjU7jkiZd0UXdtStW5eJEydy7Ngxvvzyy6LKJFJ8Nn8OsdvB0x+uedrsNCIiIheVtHIlAD5t22Jxvaxbb4pIESqSK+JdXFzo3bs3c+fOLYqXEyke6Umw5KXsx9c8Dd6B5uYRERHJh65vEildNJSYlB2r34KkWAisAa3uNzuNiIjIRdni40nduhWAcu1VOImUBiqcpGxIPA5/TM1+3HU8uLqbm0dERCQfyWvWgN2OR+1auFWubHYcEUGFk5QV276BrFSo2hrq3Wh2GhERkXwlnT9Nr71G0xMpLVQ4SdmwZ372zyZ9wGIxN4uIiEg+DMMg+e+BIcrp+iaRUkOFkzi/lDMQ9Wf24zrdzc0iIiJyCel795J16hQWLy+8WrQwO46I/E2Fkzi/fQvAsENwYwioZnYaERGRfCWvyj5Nz7t1K6weHianEZHzVDiJ89szL/tn3R7m5hARESmA89c3ldP1TSKligoncW5Z6bB/SfbjOj3NzSIiInIJ9uRkUjZsAHR9k0hpo8JJnNvhVZBxDsoFQ+hVZqcRERHJV/LadZCZiVtYGG7Vq5sdR0T+RYWTOLe9f4+mV6c7WPW/u4iIlG7Jq/4ZTc+iUWBFShX9JSnOyzBgz2/Zj+teb24WERGRSzAMg6QV2YWT7t8kUvqocBLnFbsDEqLA1RMirjE7jYiISL4yjxwh89gxcHPDJ7K12XFE5D9UOInzOn+0qca14O5tbhYREZFLOD+anneLFlh9fExOIyL/pcJJnNfe86fpaRhyEREp/ZL+dX2TiJQ+KpzEOZ2Lhejs4Vypo8JJRERKN3t6Oilr1wG6vkmktFLhJM7p/Gh6oc3BN8TcLCIiIpeQsn49RloarpUq4VGnttlxRCQPKpzEOZ0vnOrqprciIlL6Jf99fZOPhiEXKbVUOInzyUyFA0uzH6twEhERB/DP9U06TU+ktFLhJM7n4HLISgW/qhDcyOw0IiIi+co8cYKM/QfAasWnbVuz44jIRahwEuezZ172z7o9Qac7iIhIHgzDwMjKKpbXtqekFGr+pFXZp+l5NW2Ki79/cUQSkf+3d+fxUVV3H8c/k5AJWcgC2SEsEUQWAY0SIgJqUrZqQVHxKS0RFQoES6UuICLqo2DFIlYpVC3qUxUoyGJVtBgBEVmURRAhLLIpJGHJDiQhc54/BoKRJQuT3Mzwfb9e98XM3HvP/Z05ml9+ufee6wIqnMSzOByw41Pna01DLiIiF5D14ots79iJjGf+l9LcXJe0WbRzJ/vuHUL6tfEcfGwspw4frtR+P7+/SUTqLhVO4lkObYSCDLAHQnNdJy4iIuc6dewY2f/3LygtJfu999jduw/Z8+ZhHI5qtVean0/m5Of5of/tHF+zBoDcxYvZ3bsPR996C1NScsF9TUkJhV99BUDgjSqcROoyFU7iWdJPz6Z3xS1Qz9faWEREpE7KmTcfU1KCvUUL7C2voDQ7m4wJT7J34D2c2Ly50u0Yh4OcRYvY3acvx95+G0pLCUxOosnfp1O/fXschYVkPf8Xfrj9dgpPF1S/dGLzZhwFBXiHhFC/XTtXdVFEakA9qwMQN2QMZO+Fgxug9MJ/RSvH2w4tk6B+DV+7nb7E+a9m0xMRkfMwp06RPWcOAI3+MIzgX/+a7Pfe4/Arr3Jyyxb23j2Q4DsHEDFmDPUaNrxgOye//56M/32WExs3AmBv3pzI8eMJPH25XeBNN5Hz/vscnvoSxbt2s//eITTo05vIRx/FJzq6rJ2Clc7Z9AK6dsXm7V1T3RYRF7C8cJo+fTpTpkwhIyODjh078sorr9C5c+cLbp+Tk8P48eNZsGABx44do1mzZkybNo2+ffvWYtSXoZwDsHcl7Fnp/Df3QNXbCGkKd70Nja91fXzgjDFzC9i8oFXPmjmGiIi4tfxlyzh16BDeoaEE9emDzceHhikpBPXtS9Zfp5K7aBG5898n/79LCf/jHwm9ZyC2emd/XSrNySHr5ZfJmTMXjMHm70/4yBE0HDwYm91etp3Ny4vQu+4iqGdPDv/tFbJnzyZ/yScULF9B2B/+QMP7huBlt+v+JhE3YmnhNHfuXMaMGcPMmTNJSEhg2rRp9OrVi/T0dCIiIs7Zvri4mF/96ldEREQwf/58GjduzL59+wgJCan94D1d3qHThdIXzn+z95Zf71UPojtB/aDKtXc4HXL2w6xe0GsSXP+A62e8O/PQ2yadISDMtW2LiIhHyH73PQBC7roLL9+zl3TXCw8n5vnJhNx9NxnP/i9F328j89lnyZk3j6gJT+B3zTXkzJvP4WnTKM3JASDo178m4tFH8ImMvODxvIODiZrwBCF33ek8Q7V+PYenTSNn4QLCR47k5NatAAR27VpznRYRl7AZY4xVB09ISOD666/n1VdfBcDhcBAbG8uDDz7I2LFjz9l+5syZTJkyhe3bt+Pj41OpYxQVFVFUVFT2Pi8vj9jYWHJzcwkKquQv/ZeL/Ez4Ygr8sByO7iy/zuYFMdc4J1xo0Q1iu4BvYOXbPpEDi1Nh+4fO9+0HwG0vg28DV0UP/7oDdqdB8tNw459c166IuExeXh7BwcGX/c9g5SZrFO3axQ+33gZeXrT8bCk+MTHn3c6UlpIzbx6HX5pWNuOeT0wMJQcPAuDbqhWRE54g4CJXyJy3XWPI+/BDsl6YUm7GPd+2bYhbsKCavRKRS1GVvGTZ5BDFxcWsX7+e5OTks8F4eZGcnMzq1avPu88HH3xAYmIiqampREZG0r59eyZNmkRpaekFjzN58mSCg4PLltjYWJf3xSOUnID37oKvXz9dNNkguiMkjoLf/hse2wdDP4dfPQ0tk6tWNAH4hcDAd6Dns2Dzhu/eh9duhqxtrom/KN95Zgx0f5OI1HnKTdbIfm82AIG33HzBognA5u1N6D33EPfJEkIGDgSbjZKDB/Fq0IDI8eNpsXBBlYsmAJvNRvBttxG3ZAkN77sPTl8CGNijR/U6JCK1yrIzTgcPHqRx48Z89dVXJP7sKdmPPvooK1asYO3atefsc9VVV7F3714GDRrEyJEj2bVrFyNHjuSPf/wjEydOPO9x9Fe9SjDGeTZo07vg38h5Jqj5jeAXWjPH278G5g2B/IPg4w+3vgQd77m0Nr9fDP8eDA3j4MENevCtSB2lM05Oyk21r7SggF3de+A4fpymb84i4Ge/e1TkxNatHF+zluD+/ajXqJHLYir64QcK16wh5I478Kpf32XtikjlVSUvWT45RFU4HA4iIiJ47bXX8Pb2Jj4+np9++okpU6ZcsHDy9fXF11fTUl/UN7OcRZPNC+6cBXE31ezxmnaB4Svh/Qfgh2Ww8A+w7yvo8wL4VDNxnJlN78o+KppEpM5Tbqp9uYsW4zh+HHtcHP5dulRpX7927fCrganCfePi8I2Lc3m7IlIzLLtULywsDG9vbzIzM8t9npmZSVRU1Hn3iY6O5sorr8T7Z9N1tmnThoyMDIqLi2s0Xo914GtY8pjzddLEmi+azggIg9+9DzeNA2yw4W34ZzIc+6HqbTlKYed/na9b93ZpmCIi4v6MMWS/+y4AoYN+i01/YBORarCscLLb7cTHx5OWllb2mcPhIC0trdylez/XtWtXdu3aheNnT/besWMH0dHR2H82BahUUkEW/Pv34CiBNr+BrqNr9/he3nDTWPj9Auclghlb4B89YNt/qtbOj1/D8aPOZ0Q1rfylFyIicnk4vno1xXv24BUQQHC//laHIyJuyrLCCWDMmDG8/vrrvP3222zbto0RI0ZQWFjIkCFDABg8eDDjxo0r237EiBEcO3aM0aNHs2PHDj766CMmTZpEamqqVV1wX6Ulp+8zOgRhraH/3627xO2KW+APKyE2AYryYO7vYMEwOLq7cvunf+z8t+WvwLtysy2KiMjl49jpKciD+/fHOzDA4mhExF1Zeo/TwIEDOXz4ME8++SQZGRl06tSJTz75hMjTz0PYv38/Xl5na7vY2Fg+/fRTHnroITp06EDjxo0ZPXo0jz32mFVdcF9LJ8K+L8HewDnbnSunBa+O4MZw70fw2VOw+lXYPBe2zIdO/wPdH4HQ5hfeN/3085s0m56IiPxC8Y8/UbBsGeC8TE9EpLosfY6TFTSjE86C5P37na8HvgNtbrM2nl/6aT0smwy7ljrfe9WDa34P3f4MIb+YsvfobnjlWuc2j+x2TnsuInWWfgafn76XmpP1179y9PU3CLghkaazZlkdjojUMW7xHCexSOb38MGDztc3PlT3iiaAxvHwu/lw/1KIuxkcp2D9m84C6aOHIe/g2W13nD7b1OwGFU0iIlKOo6iInHnzAQgdNMjiaETE3alwupycyIG5g6DkuHP2vFsmWB3RxcV2hsGLYMgSaN4NSoudD+h9uRMsGQv5meWnIRcREfmZvI+XUJqTQ72YaAJvusnqcETEzalwckfZe2HXZ85Z8SrL4YCFw53TfQfHwoBZzlnt3EGzG+DeDyHlP85Z80qLYO0MeLmj8/lPoGnIRUSkHGMM2e+8A0Do//wPNm83yXkiUme51QNwL1u5P8HelbDnC9izEnL3n10XfpXzbEyLbs5//Ruev42VL8KOJeDtCwP/BQGue/J5rWnR3dnHH5bBsknOacjB+R001AMERUTkrJObN3Ny61Zsdjshd95pdTgi4gFUONVF+ZlnC6W9K899KKxXPedZo+w9cHi7c/n6dee6yPanC6nuZ+/72bnUWWgA3DoVYq6p1e64lM3mnL487mbnWbfNc6GTrlsXEZHyjp1+4G1Q377UCw21OBoR8QQqnOqK3B/hy5ecxdKRHeXX2bwgutPps0rdoWkX8A2EwqPOKcX3rHQWWIe3Q+Z3zmXtDOd+UR2cBRYG4ofANb+zoneuZ7NBq185FxERkZ85deQI+UuckwdpUggRcRUVTnXBqSJ4Z4Cz8AHABlFXn700rVki1A8+d7+ARtC2n3MB5z1Pe1eeLaSO7oJDm5zrGl8Hff5SG70RERGxVM78+ZiSEup37IDf1e2tDkdEPIQKp7rgiynOoikgHG6d5rzE7kL3Kl1MYAS0H+BcwDlt994vnQXU9Q9APV+Xhi0iIlLXmFOnyJ49B4CGOtskIi6kwslqh76FlVOdr3/9V2hzq+vaDoqBDne7rj0REZE6Lj/tc05lZuLdsCENemvGVRFxHU1HbqXSElicCqa0/CV3IiIiUi3ZpyeFCLn7LrzsdoujERFPosLJSqumQcYW8AuFvi9aHY2IiIhbO7ljB8fXrQNvb0IHDrQ6HBHxMLpUzypZ22HFC87XfV5w3p8kIiJSRaa4mJ1JSTXWvr1xE8IfeoiAhM4uaa/k4EGy/jqV4r17CRuVSoObb3ZJu6eOHiXrhSkANEhKwic62iXtioicocLJCo5S5yV6pcVwZW+4+i6rIxIRETdWevhIjbV94vAR9qekENS3LxGPPoJPVFS12nEUFXHszTc5MvMfmJMnAfhxxEgCe/Qg8vFx2Js1q1a75tQpst+bzeFXXsGRnw/e3jQccm+12hIRuRgVTlZYMwN++gZ8g+DWl5zPJBIREamOevVosXhRzbRdWkr2vHnkzJlL3scfk798OWEjhtMwJaVK9w/lL19O5qTJlOzfD4BffDx+7dtx7L3ZFKxYQeFXX9Hw/vsIGzYML3//SrdbuG4dmc8+R9EO5/MP67dtS+SEJ/C/xo0f9C4idZbNGGOsDqI25eXlERwcTG5uLkFBQbUfwNHdMOMGOHUSbvsbxKfUfgwiIhax/GdwHVXXv5cTW7eS+exznNi4EQB78+ZEjn+cwG7dLrpf8f79ZE6aTMHy5QDUCw8n4tFHCbr119hsNop++IHM5yZRuGqVc310NJGPPUqDXr2wXeSPiiWZmWS9MIW8jz4CwDs4mPCHHiLkrjuxeXu7oMcicrmoys9fFU61yeGAt2+FfaugRQ8YvFhnm0TkslLXCwSruMP3Yowh74MPyJzyIqVHnJcGBiYlETluLPYmTcpt6zhxgiOvvcaxN/6JKSmBevVomDKYsBEj8Q4MOKfdgrQ05xmpgwcB8O/ShagnxuPbsmX5bYuLOfZ//8fhv8/AHD8ONhshA+8mfPRo6oWG1mDvRcRTqXC6CEuT09dvwEd/Bp8AGPkVhDav3eOLiFjMHQoEK7jT91Kan8+R6X/n2L/+BaWl2Hx9afTAAzQa+gA2X1/y/7uUzL88z6mDhwAIuOEGIp8Yj29c3EXbdZw4wdE3/snR11/HFBc7i63f/Y6wUal4BwZS8OUqMp99luK9ewHw69SJyAlP4NeuXU13WUQ8mAqni7AsOeXsh78nQnEB9JkCCcNq79giInWEOxUItckdv5einTvJeG4Sx9esAcCncWN8mjTh+Nq1zvcxMUSMG0uD5OSLXnb3S8UHDpD5/F8oSEsDwDs8jPpXtaFw5Urn+7AwIh7+M8G/+Q02Lz1VRUQuTVV+/mpyiNpgDPxntLNoapoI1z9gdUQiIiKXxLdVK5q+OYv8Tz8l8/m/UPLTT5T89BM2u73sDJSXn1+V27XHxhI7/VUKvviCzOcmUbxvH4WHVzpnyztzBqpBgxrokYjIxalwqg2b3oXdn0O9+vCbV0F/IRMREQ9gs9kI6t2bwO7dOTrrTUoOHSRs+HDssbGX3HZg9+74d+lC9r/e4WT6dsKGDsW3VSsXRC0iUj0qnGpa3iH45HHn65sfh7CWF99eRETEzXj5+xM+KtX17drtNLr/Ppe3KyJSHTr1UZOMgY/GQFEuxFwLXVyfVEREREREpObpjFNNOFUEP34D2z+E9I/Bywf6TQdvfd0iIiIiIu5Iv8m7QmkJ/LQB9n4Be1bCgXVw6sTZ9d0fgci21sUnIiIiIiKXRIVTdZSegoxvnUXS3pWwbzWUFJbfJiAcmneDK3vB1XdbE6eIiIiIiLiECqeqev8B2PEpFOWV/9yvITS/EVp0dxZM4a2hCs+tEBERERGRukuFU1WdzHMWTfWDodmN0KKbs1CKaKtpxkVEREREPJQKp6q6aaxzWvGoq8HL2+poRERERESkFtSJUyTTp0+nefPm1K9fn4SEBNatW3fBbd966y1sNlu5pX79+rUXbONrIaaTiiYRERERkcuI5YXT3LlzGTNmDBMnTmTDhg107NiRXr16kZWVdcF9goKCOHToUNmyb9++WoxYREREREQuN5YXTlOnTmXo0KEMGTKEtm3bMnPmTPz9/Zk1a9YF97HZbERFRZUtkZGRtRixiIiIiIhcbiwtnIqLi1m/fj3Jyclln3l5eZGcnMzq1asvuF9BQQHNmjUjNjaWfv36sXXr1gtuW1RURF5eXrlFRETESspNIiLux9LC6ciRI5SWlp5zxigyMpKMjIzz7tO6dWtmzZrF4sWLeeedd3A4HNxwww38+OOP591+8uTJBAcHly2xsbEu74eIiEhVKDeJiLgfyy/Vq6rExEQGDx5Mp06d6NGjBwsWLCA8PJx//OMf591+3Lhx5Obmli0HDhyo5YhFRETKU24SEXE/lk5HHhYWhre3N5mZmeU+z8zMJCoqqlJt+Pj4cM0117Br167zrvf19cXX1/eSYxUREXEV5SYREfdjaeFkt9uJj48nLS2N/v37A+BwOEhLS2PUqFGVaqO0tJQtW7bQt2/fSm1vjAHQ9eQiIhY487P3zM9icVJuEhGxRlXykuUPwB0zZgwpKSlcd911dO7cmWnTplFYWMiQIUMAGDx4MI0bN2by5MkAPPPMM3Tp0oWWLVuSk5PDlClT2LdvHw888ECljpefnw+g68lFRCyUn59PcHCw1WHUGcpNIiLWqkxesrxwGjhwIIcPH+bJJ58kIyODTp068cknn5RNGLF//368vM7eipWdnc3QoUPJyMggNDSU+Ph4vvrqK9q2bVup48XExHDgwAEaNGiAzWYDnJVmbGwsBw4cICgoyPWdtJAn9w08u3/qm3vy5L7BpffPGEN+fj4xMTE1EJ37Um7yHJ7cN/Ds/qlv7qk285LN6HoJ8vLyCA4OJjc31yP/Y/LUvoFn9099c0+e3Dfw/P7VJZ78Xatv7suT+6e+uafa7JvbzaonIiIiIiJS21Q4iYiIiIiIVECFE85pYSdOnOiRU8N6ct/As/unvrknT+4beH7/6hJP/q7VN/flyf1T39xTbfZN9ziJiIiIiIhUQGecREREREREKqDCSUREREREpAIqnERERERERCqgwklERERERKQCKpyA6dOn07x5c+rXr09CQgLr1q2zOqRL9tRTT2Gz2cotV111ldVhVcsXX3zBbbfdRkxMDDabjUWLFpVbb4zhySefJDo6Gj8/P5KTk9m5c6c1wVZDRf279957zxnL3r17WxNsFUyePJnrr7+eBg0aEBERQf/+/UlPTy+3zcmTJ0lNTaVRo0YEBgYyYMAAMjMzLYq4airTv5tuuumcsRs+fLhFEVfejBkz6NChA0FBQQQFBZGYmMiSJUvK1rvzuLkLT8xLoNzkLrnJU/MSeHZu8uS8BHUjN132hdPcuXMZM2YMEydOZMOGDXTs2JFevXqRlZVldWiXrF27dhw6dKhs+fLLL60OqVoKCwvp2LEj06dPP+/6F154gb/97W/MnDmTtWvXEhAQQK9evTh58mQtR1o9FfUPoHfv3uXGcvbs2bUYYfWsWLGC1NRU1qxZw9KlSykpKaFnz54UFhaWbfPQQw/xn//8h3nz5rFixQoOHjzIHXfcYWHUlVeZ/gEMHTq03Ni98MILFkVceU2aNOH5559n/fr1fPPNN9xyyy3069ePrVu3Au49bu7Ak/MSKDe5Q27y1LwEnp2bPDkvQR3JTeYy17lzZ5Oamlr2vrS01MTExJjJkydbGNWlmzhxounYsaPVYbgcYBYuXFj23uFwmKioKDNlypSyz3Jycoyvr6+ZPXu2BRFeml/2zxhjUlJSTL9+/SyJx5WysrIMYFasWGGMcY6Tj4+PmTdvXtk227ZtM4BZvXq1VWFW2y/7Z4wxPXr0MKNHj7YuKBcKDQ01b7zxhseNW13kqXnJGOUmd8xNnpyXjPHs3OTpecmY2s9Nl/UZp+LiYtavX09ycnLZZ15eXiQnJ7N69WoLI3ONnTt3EhMTQ1xcHIMGDWL//v1Wh+Rye/bsISMjo9wYBgcHk5CQ4BFjeMby5cuJiIigdevWjBgxgqNHj1odUpXl5uYC0LBhQwDWr19PSUlJubG76qqraNq0qVuO3S/7d8a7775LWFgY7du3Z9y4cRw/ftyK8KqttLSUOXPmUFhYSGJioseNW13j6XkJlJs8ZRw9IS+BZ+cmT81LYF1uqueyltzQkSNHKC0tJTIystznkZGRbN++3aKoXCMhIYG33nqL1q1bc+jQIZ5++mm6devGd999R4MGDawOz2UyMjIAzjuGZ9a5u969e3PHHXfQokULdu/ezeOPP06fPn1YvXo13t7eVodXKQ6Hgz/96U907dqV9u3bA86xs9vthISElNvWHcfufP0D+O1vf0uzZs2IiYlh8+bNPPbYY6Snp7NgwQILo62cLVu2kJiYyMmTJwkMDGThwoW0bduWTZs2ecy41UWenJdAuclT/j/xhLwEnp2bPDEvgfW56bIunDxZnz59yl536NCBhIQEmjVrxr///W/uv/9+CyOTqrrnnnvKXl999dV06NCBK664guXLl5OUlGRhZJWXmprKd99957b3MlTkQv0bNmxY2eurr76a6OhokpKS2L17N1dccUVth1klrVu3ZtOmTeTm5jJ//nxSUlJYsWKF1WGJm1Nu8gyekJfAs3OTJ+YlsD43XdaX6oWFheHt7X3OjBuZmZlERUVZFFXNCAkJ4corr2TXrl1Wh+JSZ8bpchjDM+Li4ggLC3ObsRw1ahQffvghy5Yto0mTJmWfR0VFUVxcTE5OTrnt3W3sLtS/80lISABwi7Gz2+20bNmS+Ph4Jk+eTMeOHXn55Zc9ZtzqqsspL4Fyk6dwt7wEnp2bPDUvgfW56bIunOx2O/Hx8aSlpZV95nA4SEtLIzEx0cLIXK+goIDdu3cTHR1tdSgu1aJFC6KiosqNYV5eHmvXrvW4MTzjxx9/5OjRo3V+LI0xjBo1ioULF/L555/TokWLcuvj4+Px8fEpN3bp6ens37/fLcauov6dz6ZNmwDq/Nidj8PhoKioyO3Hra67nPISKDd5CnfJS+DZuelyy0tgQW5y2TQTbmrOnDnG19fXvPXWW+b77783w4YNMyEhISYjI8Pq0C7Jn//8Z7N8+XKzZ88es2rVKpOcnGzCwsJMVlaW1aFVWX5+vtm4caPZuHGjAczUqVPNxo0bzb59+4wxxjz//PMmJCTELF682GzevNn069fPtGjRwpw4ccLiyCvnYv3Lz883Dz/8sFm9erXZs2eP+eyzz8y1115rWrVqZU6ePGl16Bc1YsQIExwcbJYvX24OHTpUthw/frxsm+HDh5umTZuazz//3HzzzTcmMTHRJCYmWhh15VXUv127dplnnnnGfPPNN2bPnj1m8eLFJi4uznTv3t3iyCs2duxYs2LFCrNnzx6zefNmM3bsWGOz2cx///tfY4x7j5s78NS8ZIxyk7vkJk/NS8Z4dm7y5LxkTN3ITZd94WSMMa+88opp2rSpsdvtpnPnzmbNmjVWh3TJBg4caKKjo43dbjeNGzc2AwcONLt27bI6rGpZtmyZAc5ZUlJSjDHOaV8nTJhgIiMjja+vr0lKSjLp6enWBl0FF+vf8ePHTc+ePU14eLjx8fExzZo1M0OHDnWLX6DO1yfAvPnmm2XbnDhxwowcOdKEhoYaf39/c/vtt5tDhw5ZF3QVVNS//fv3m+7du5uGDRsaX19f07JlS/PII4+Y3NxcawOvhPvuu880a9bM2O12Ex4ebpKSksoSkzHuPW7uwhPzkjHKTe6Smzw1Lxnj2bnJk/OSMXUjN9mMMcZ1569EREREREQ8z2V9j5OIiIiIiEhlqHASERERERGpgAonERERERGRCqhwEhERERERqYAKJxERERERkQqocBIREREREamACicREREREZEKqHASERERERGpgAonEQ9ls9lYtGiR1WGIiIiUUW4Sd6bCSaQG3HvvvdhstnOW3r17Wx2aiIhcppSbRC5NPasDEPFUvXv35s033yz3ma+vr0XRiIiIKDeJXAqdcRKpIb6+vkRFRZVbQkNDAeelCjNmzKBPnz74+fkRFxfH/Pnzy+2/ZcsWbrnlFvz8/GjUqBHDhg2joKCg3DazZs2iXbt2+Pr6Eh0dzahRo8qtP3LkCLfffjv+/v60atWKDz74oGxddnY2gwYNIjw8HD8/P1q1anVOMhUREc+i3CRSfSqcRCwyYcIEBgwYwLfffsugQYO455572LZtGwCFhYX06tWL0NBQvv76a+bNm8dnn31WLvnMmDGD1NRUhg0bxpYtW/jggw9o2bJluWM8/fTT3H333WzevJm+ffsyaNAgjh07Vnb877//niVLlrBt2zZmzJhBWFhY7X0BIiJS5yg3iVyEERGXS0lJMd7e3iYgIKDc8txzzxljjAHM8OHDy+2TkJBgRowYYYwx5rXXXjOhoaGmoKCgbP1HH31kvLy8TEZGhjHGmJiYGDN+/PgLxgCYJ554oux9QUGBAcySJUuMMcbcdtttZsiQIa7psIiI1HnKTSKXRvc4idSQm2++mRkzZpT7rGHDhmWvExMTy61LTExk06ZNAGzbto2OHTsSEBBQtr5r1644HA7S09Ox2WwcPHiQpKSki8bQoUOHstcBAQEEBQWRlZUFwIgRIxgwYAAbNmygZ8+e9O/fnxtuuKFafRUREfeg3CRSfSqcRGpIQEDAOZcnuIqfn1+ltvPx8Sn33maz4XA4AOjTpw/79u3j448/ZunSpSQlJZGamsqLL77o8nhFRKRuUG4SqT7d4yRikTVr1pzzvk2bNgC0adOGb7/9lsLCwrL1q1atwsvLi9atW9OgQQOaN29OWlraJcUQHh5OSkoK77zzDtOmTeO11167pPZERMS9KTeJXJjOOInUkKKiIjIyMsp9Vq9evbKbXOfNm8d1113HjTfeyLvvvsu6dev45z//CcCgQYOYOHEiKSkpPPXUUxw+fJgHH3yQ3//+90RGRgLw1FNPMXz4cCIiIujTpw/5+fmsWrWKBx98sFLxPfnkk8THx9OuXTuKior48MMPy5KjiIh4JuUmkepT4SRSQz755BOio6PLfda6dWu2b98OOGcVmjNnDiNHjiQ6OprZs2fTtm1bAPz9/fn0008ZPXo0119/Pf7+/gwYMICpU6eWtZWSksLJkyd56aWXePjhhwkLC+POO++sdHx2u51x48axd+9e/Pz86NatG3PmzHFBz0VEpK5SbhKpPpsxxlgdhMjlxmazsXDhQvr37291KCIiIoByk0hFdI+TiIiIiIhIBVQ4iYiIiIiIVECX6omIiIiIiFRAZ5xEREREREQqoMJJRERERESkAiqcREREREREKqDCSUREREREpAIqnERERERERCqgwklERERERKQCKpxEREREREQqoMJJRERERESkAv8P7Rhdn3tW3HcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", "\n", "ax_tl.set_title('Training set')\n", "ax_tr.set_title('Development set')\n", "ax_bl.set_xlabel('Epochs')\n", "ax_br.set_xlabel('Epochs')\n", "ax_bl.set_ylabel('Accuracy')\n", "ax_tl.set_ylabel('Loss')\n", "\n", "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", "range_ = np.arange(1, trainer.epochs+1)\n", "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", "\n", "# print test accuracy\n", "test_acc = accuracy(model(test_circuits), torch.tensor(test_labels))\n", "print('Test accuracy:', test_acc.item())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding custom layers to the model" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In the default setting, the forward pass of a :py:class:`.PytorchModel` performs a simple tensor contraction of the tensorised diagrams. However, if one likes to add additional custom layers, one can create a custom model that inherits from :py:class:`.PytorchModel` and overwrite the :py:meth:`.PytorchModel.forward` method." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "class MyCustomModel(PytorchModel):\n", " def __init__(self):\n", " super().__init__()\n", " self.net = torch.nn.Linear(2, 2)\n", "\n", " def forward(self, input):\n", " \"\"\"define a custom forward pass here\"\"\"\n", " preds = self.get_diagram_output(input)\n", " preds = self.net(preds.float())\n", " return preds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The rest follows the same procedure as explained above, i.e. initialise a trainer, fit the model and visualise the results." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Epoch 5: train/loss: 0.6729 valid/loss: 0.7965 train/time: 0.53s valid/time: 0.13s train/acc: 0.6429 valid/acc: 0.3833\n", "Epoch 10: train/loss: 0.4602 valid/loss: 1.0563 train/time: 0.40s valid/time: 0.13s train/acc: 0.7500 valid/acc: 0.4333\n", "Epoch 15: train/loss: 0.4580 valid/loss: 1.0329 train/time: 0.39s valid/time: 0.19s train/acc: 0.8286 valid/acc: 0.4667\n", "Epoch 20: train/loss: 0.1645 valid/loss: 1.0594 train/time: 0.39s valid/time: 0.13s train/acc: 0.9429 valid/acc: 0.7667\n", "Epoch 25: train/loss: 0.1098 valid/loss: 1.2642 train/time: 0.38s valid/time: 0.12s train/acc: 0.9429 valid/acc: 0.7333\n", "Epoch 30: train/loss: 0.1957 valid/loss: 1.3476 train/time: 0.32s valid/time: 0.19s train/acc: 0.9429 valid/acc: 0.7333\n", "\n", "Training completed!\n", "train/time: 2.40s train/time_per_epoch: 0.08s train/time_per_step: 0.03s valid/time: 0.89s valid/time_per_eval: 0.03s\n" ] } ], "source": [ "custom_model = MyCustomModel.from_diagrams(all_circuits)\n", "custom_model_trainer = PytorchTrainer(\n", " model=custom_model,\n", " loss_function=torch.nn.BCEWithLogitsLoss(),\n", " optimizer=torch.optim.AdamW,\n", " learning_rate=LEARNING_RATE,\n", " epochs=EPOCHS,\n", " evaluate_functions=eval_metrics,\n", " evaluate_on_train=True,\n", " verbose='text',\n", " seed=SEED)\n", "\n", "custom_model_trainer.fit(train_dataset, val_dataset, log_interval=5)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test accuracy: 1.0\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACleElEQVR4nOzdd3gU1dvG8e9ueg8hJCEhhNB76BEpIkVERbGiqCAgWLCir4IFxIYVsaCoPxW7WBBULEBooghKVQQkEAiEVEIKCak77x8rq5EACSSZbHJ/rmsvd89OuWdW9uTZmTljMQzDQERERERERE7IanYAERERERGR2k6Fk4iIiIiIyCmocBIRERERETkFFU4iIiIiIiKnoMJJRERERETkFFQ4iYiIiIiInIIKJxERERERkVNQ4SQiIiIiInIKKpxEREREREROQYWTSDW54YYbaNas2WnN+8gjj2CxWKo2kIiI1Ct79+7FYrEwb948s6OI1AkqnKTesVgsFXqsXLnS7KhO76OPPmL27NlmxxARqTLz5s0r01d4enoSHh7O0KFDeemll8jNzTU7ogBPPvkkCxcurPH1Hjx4kEceeYTNmzfX+Lql+lkMwzDMDiFSkz744IMyr9977z2WLl3K+++/X6Z9yJAhhIaGnvZ6iouLsdlseHh4VHrekpISSkpK8PT0PO311wYXXXQRf/zxB3v37jU7iohIlZg3bx5jx47l0UcfJTo6muLiYlJSUli5ciVLly6ladOmfPXVV3Tu3NnsqOzdu5fo6GjeeecdbrjhBrPj1ChfX1+uuOKKGj/a9ttvv9GzZ896uc/rA1ezA4jUtOuuu67M619++YWlS5ce1/5f+fn5eHt7V3g9bm5up5UPwNXVFVdX/fMUEamthg0bRo8ePRyvp06dyvLly7nooou4+OKL2b59O15eXiYmFJGqplP1RMoxYMAAOnbsyIYNG+jfvz/e3t488MADACxatIgLL7yQ8PBwPDw8aNGiBY899hilpaVllvHfa5yOnWv+3HPP8cYbb9CiRQs8PDzo2bMnv/76a5l5y7vGyWKxcNttt7Fw4UI6duyIh4cHHTp04Pvvvz8u/8qVK+nRoweenp60aNGC119/vcLXTe3atYvLL7+csLAwPD09adKkCVdffTXZ2dllpvvggw/o3r07Xl5eBAUFcfXVV7N///4y+3Dx4sXs27fPcUrL6V7zJSLiDAYOHMjDDz/Mvn37jju7YceOHVxxxRUEBQXh6elJjx49+Oqrrxzv//bbb1gsFt59993jlvvDDz9gsVj45ptvHG1JSUmMGzeO0NBQR3/w9ttvVyjn8uXL6devHz4+PgQGBnLJJZewffv2MtMc6zN27NjBVVddhb+/Pw0bNuTOO++koKCgzLTH+qfPPvuM9u3b4+XlRe/evfn9998BeP3112nZsiWenp4MGDCg3LMQ1q1bx/nnn09AQADe3t6cc845/PTTT+Vmio+P54YbbiAwMJCAgADGjh1Lfn5+mTx5eXm8++67jv7nVEd/Xn75ZTp06IC3tzcNGjSgR48efPTRR2WmOdU+X7lyJT179gRg7NixjnXrGrO6Qz9pi5zAoUOHGDZsGFdffTXXXXed47S9efPm4evry+TJk/H19WX58uVMmzaNnJwcnn322VMu96OPPiI3N5ebbroJi8XCM888w2WXXcaePXtOeZRqzZo1LFiwgFtvvRU/Pz9eeuklLr/8chITE2nYsCEAmzZt4vzzz6dx48bMmDGD0tJSHn30URo1anTKbEVFRQwdOpTCwkJuv/12wsLCSEpK4ptvviErK4uAgAAAnnjiCR5++GGuuuoqbrzxRtLT03n55Zfp378/mzZtIjAwkAcffJDs7GwOHDjACy+8ANhPnRARqcuuv/56HnjgAZYsWcKECRMA2LZtG3369CEiIoIpU6bg4+PDp59+yogRI/jiiy+49NJL6dGjB82bN+fTTz9lzJgxZZY5f/58GjRowNChQwFITU3lrLPOchQsjRo14rvvvmP8+PHk5ORw1113nTDfsmXLGDZsGM2bN+eRRx7h6NGjvPzyy/Tp04eNGzce9wPXVVddRbNmzZg5cya//PILL730EocPH+a9994rM92PP/7IV199xaRJkwCYOXMmF110Effddx+vvvoqt956K4cPH+aZZ55h3LhxLF++3DHv8uXLGTZsGN27d2f69OlYrVbeeecdBg4cyI8//kivXr2OyxQdHc3MmTPZuHEj//vf/wgJCeHpp58G4P333+fGG2+kV69eTJw4EYAWLVqccJ+8+eab3HHHHVxxxRWOwnDr1q2sW7eOUaNGVXift2vXjkcffZRp06YxceJE+vXrB8DZZ599wnWLkzFE6rlJkyYZ//2ncM455xiAMXfu3OOm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k5Mdj/z8fMc0N998s9G0aVNj+fLlxm+//Wb07t3b6N27t4mpK+5U2xcfH288+uijxm+//WYkJCQYixYtMpo3b27079/f5OSnNmXKFGPVqlVGQkKCsXXrVmPKlCmGxWIxlixZYhiGc39uzqCu9kuGob7JWfqmutovGUbd7pvqcr9kGLWjb6r3hZNhGMbLL79sNG3a1HB3dzd69epl/PLLL2ZHOmMjR440GjdubLi7uxsRERHGyJEjjfj4eLNjnZYVK1YYwHGPMWPGGIZhH/b14YcfNkJDQw0PDw9j0KBBxs6dO80NXQkn2778/HzjvPPOMxo1amS4ubkZUVFRxoQJE5ziD6jytgkw3nnnHcc0R48eNW699VajQYMGhre3t3HppZcaycnJ5oWuhFNtX2JiotG/f38jKCjI8PDwMFq2bGn83//9n5GdnW1u8AoYN26cERUVZbi7uxuNGjUyBg0a5OiYDMO5PzdnURf7JcNQ3+QsfVNd7ZcMo273TXW5XzKM2tE3WQzDMKru+JWIiIiIiEjdU6+vcRIREREREakIFU4iIiIiIiKnoMJJRERERETkFFQ4iYiIiIiInIIKJxERERERkVNQ4SQiIiIiInIKKpxEREREREROQYWTiIiIiIjIKahwEhEREREROQUVTiIiIiIiIqegwklEREREROQUVDiJiIiIiIicggonERERERGRU1DhJCIiIiIicgoqnERERERERE5BhZOIiIiIiMgpqHASERERERE5BRVOIiIiIiIip6DCSURERERE5BRczQ5Q02w2GwcPHsTPzw+LxWJ2HBGResUwDHJzcwkPD8dq1W93x6hvEhExR2X6pXpXOB08eJDIyEizY4iI1Gv79++nSZMmZseoNdQ3iYiYqyL9Ur0rnPz8/AD7zvH39zc5jYhI/ZKTk0NkZKTju1js1DeJiJijMv1SvSucjp0C4e/vr85JRMQkOh2tLPVNIiLmqki/pBPMRURERERETkGFk4iIiIiIyCmocBIRERERETkFFU4iIiIiIiKnoMJJREQqzjDAVmp2ChERkRpX70bVExGTGQb89CLsWGx2Eufj5gltL4LOV4FXg5pdd94h2PIxbHwP+t9rzyAiIlKPqHASkZr180uwbLrZKZxXwmpYOg3aXwLdxkDU2VBdQ3vbbLB3NWx4F3Z8A6VF9vYtn6hwEhGRekeFk4jU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+1v+GJQchaa9of3xA3SIiIjzqDN9k0gVKtq/n8MffwJAyD33YLFW2aX4IlWi0v9HvvPOO3z22WfHtX/22We8++67VRLqRGw2GyEhIbzxxht0796dkSNH8uCDDzJ37twTzjN16lSys7Mdj/3791drxmqRtBG2fGx/PvQJOMl9tEREpParE32TSBVLn/0iFBfjc/bZ+PbpY3YckeNUunCaOXMmwcHBx7WHhITw5JNPVng5wcHBuLi4kJqaWqY9NTWVsBOM1d+4cWNat25d5rS8du3akZKSQlFRUbnzeHh44O/vX+bhVAwDfnjQ/rzzSIjobm4eERE5Y07fN4lUsaN/bCNn8WIAQu69x+Q0IuWrdOGUmJhIdHT0ce1RUVEkJiZWeDnu7u507969zBDmNpuNuLg4evfuXe48ffr0IT4+HpvN5mj766+/aNy4Me519eLB7V9D4s/g6gmDppmdRkRERKRKGYZB2vPPAeA/fDie7XWrFamdKl04hYSEsHXr1uPat2zZQsOGDSu1rMmTJ/Pmm2/y7rvvsn37dm655Rby8vIco+yNHj26zOARt9xyC5mZmdx555389ddfLF68mCeffJJJkyZVdjOcQ0khLP27WDr7dghoYm4eERERkSqWu3Qp+Wt/weLmRqM77zQ7jsgJVXpwiGuuuYY77rgDPz8/+vfvD8CqVau48847ufrqqyu1rJEjR5Kens60adNISUmhS5cufP/9944BIxITE7H+68LAyMhIfvjhB+6++246d+5MREQEd955J/fff39lN8M5rH8DDieAbyj0ucvsNCIiIiJVqjglhZSH7T8SB91wA+5NKndPUJGaZDEMw6jMDEVFRVx//fV89tlnuLra6y6bzcbo0aOZO3durT9lLicnh4CAALKzs2v3OeV5h+ClrlCYDRe/At2uNzuRiMgZc5rv4Bqm/SL1kVFaSuINY8n/9Vc8O3Sg2ccfYanlf0dK3VOZ799KH3Fyd3dn/vz5PP7442zevBkvLy86depEVFTUaQeWcqx6yl40hXaCLrprtoiIiNQth954g/xff8Xi7U3E88+paJJar9KF0zGtWrWiVatWVZlFjkn/C359y/586BNgLf/mviIiIiLOKH/TJtJfmQNA2LSHcW/WzNxAIhVQ6cEhLr/8cp5++unj2p955hmuvPLKKglV7y15CIxSaHMBND/H7DQi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tyw+sbG0W7IY365dqTp2DKqqCLz6avx79qy3fYiI1JUaJxEREcFmtxM8eBAABav+++V6pV9/436eUnR6+ilTjdcH77Awzlu0iMC+ffGOiSHqD5PrfR8iInWhxklERESAf8+uV/LJBk4cOXLadaqKS/hp4gSorCSoXz9Cb264Ge68AgNoO3cO8R9m4uzQocH2IyJSG2qcREREBABnh/Px7doVqqoofOfd066T/ac/UblvP96xscQ+8nCj3HNks+ufKyJiPf0mEhEREbeQwT8/0+k0l+sVrH6LghUrwG6n9eMz8QoJaeR0IiLWUeMkIiIibsHXXwfe3pR9/TXle/a4l1ccOEDW9OkARI4di3+PHhYlFBGxhhonERERcfMODyfw8suBfz/TyVRW8tOkSbhKSvC75BIix46xMqKIiCXUOImIiEg1IT/Prle4ejXG5SL32TmUfbUNe3AwrR+fic3b2+KEIiKNT42TiIiIVBPYpw/2wEAqDx3iyF/nkTd/PgCxDz+MT+vWFqcTEbGGGicRERGpxu7rS1D/fgAcmTMHjCH0ppsIHtDf4mQiItZR4yQiIiKnCBk8xP21o0MHotOnWJhGRMR6apxERETkFP49e+DsFI/N35/Ws2dh9/e3OpKIiKWaROM0d+5c2rdvj6+vL71792bTpk1nXPeNN96gR48ehIaGEhAQQPfu3XnllVcaMa2IiIjns9nttFu6jPgP3se3Sxer44iIWM7yxmn58uVMmDCBadOmsWXLFhISEujfvz85OTmnXT88PJwHHniAjRs3sm3bNtLS0khLS+O9995r5OQiIiKezSswAO+ICKtjiIg0CTZjjLEyQO/evenZsydz5swBwOVy0bZtW+655x6mTKnd9dSXXHIJ119/PY888kiN6xYWFhISEkJBQQHBwcHnlF1EROpGv4NPTz8XERFr1OX3r6VnnCoqKti8eTPJycnuZXa7neTkZDZu3Fjj540xZGZmsnPnTq688srTrlNeXk5hYWG1l4iIiJVUm0REmh9LG6cjR45QVVVFdHR0teXR0dFkZWWd8XMFBQUEBgbicDi4/vrrefbZZ7n22mtPu25GRgYhISHuV9u2bet1DCIiInWl2iQi0vxYfo/T2QgKCmLr1q18/vnnPProo0yYMIF169addt309HQKCgrcrwMHDjRuWBERkf+g2iQi0vx4W7nzyMhIvLy8yM7OrrY8OzubmJiYM37ObrcTHx8PQPfu3dmxYwcZGRlcffXVp6zrdDpxOp31mltERORcqDaJiDQ/lp5xcjgcJCYmkpmZ6V7mcrnIzMwkKSmp1ttxuVyUl5c3REQRERERERFrzzgBTJgwgdTUVHr06EGvXr146qmnKCkpIS0tDYCRI0fSunVrMjIygJPXhffo0YOOHTtSXl7OO++8wyuvvMK8efNqtb9fJhHUjbgiIo3vl9+9Fk/o2uSoNomIWKMudcnyxmn48OHk5uYydepUsrKy6N69O2vWrHFPGLF//37s9n+fGCspKeHuu+/m4MGD+Pn50aVLFxYvXszw4cNrtb+ioiIA3YgrImKhoqIiQkJCrI7RZKg2iYhYqzZ1yfLnODU2l8vFoUOHCAoKwmazASc7zbZt23LgwAGPe36GJ48NPHt8Glvz5Mljg3MfnzGGoqIi4uLiqv1RrKVTbfIcnjw28OzxaWzNU2PWJcvPODU2u91OmzZtTvtecHCwx/3H9AtPHht49vg0tubJk8cG5zY+nWk6lWqT5/HksYFnj09ja54aoy7pz30iIiIiIiI1UOMkIiIiIiJSAzVOnHyexrRp0zzymRqePDbw7PFpbM2TJ48NPH98TYkn/6w1tubLk8ensTVPjTm2Fjc5hIiIiIiISF3pjJOIiIiIiEgN1DiJiIiIiIjUQI2TiIiIiIhIDdQ4iYiIiIiI1ECNEzB37lzat2+Pr68vvXv3ZtOmTVZHOmfTp0/HZrNVe3Xp0sXqWGfln//8J4MGDSIuLg6bzcaKFSuqvW+MYerUqcTGxuLn50dycjI//PCDNWHPQk3ju/322085lgMGDLAmbB1kZGTQs2dPgoKCiIqKYujQoezcubPaOmVlZYwbN46IiAgCAwMZNmwY2dnZFiWum9qM7+qrrz7l2I0ZM8aixLU3b948unXr5n6YYFJSEu+++677/eZ83JoLT6xLoNrUXGqTp9Yl8Oza5Ml1CZpGbWrxjdPy5cuZMGEC06ZNY8uWLSQkJNC/f39ycnKsjnbOLrroIg4fPux+ffLJJ1ZHOislJSUkJCQwd+7c074/c+ZMnnnmGZ577jk+++wzAgIC6N+/P2VlZY2c9OzUND6AAQMGVDuWS5cubcSEZ2f9+vWMGzeOTz/9lA8++IDKykr69etHSUmJe5377ruP1atX89prr7F+/XoOHTrEjTfeaGHq2qvN+ABGjRpV7djNnDnTosS116ZNGx577DE2b97MF198QZ8+fRgyZAjffPMN0LyPW3PgyXUJVJuaQ23y1LoEnl2bPLkuQROpTaaF69Wrlxk3bpz7+6qqKhMXF2cyMjIsTHXupk2bZhISEqyOUe8A8+abb7q/d7lcJiYmxjz++OPuZceOHTNOp9MsXbrUgoTn5j/HZ4wxqampZsiQIZbkqU85OTkGMOvXrzfGnDxOPj4+5rXXXnOvs2PHDgOYjRs3WhXzrP3n+Iwx5qqrrjL33nuvdaHqUVhYmHnhhRc87rg1RZ5al4xRbWqOtcmT65Ixnl2bPL0uGdP4talFn3GqqKhg8+bNJCcnu5fZ7XaSk5PZuHGjhcnqxw8//EBcXBwdOnQgJSWF/fv3Wx2p3u3du5esrKxqxzAkJITevXt7xDH8xbp164iKiqJz586MHTuWvLw8qyPVWUFBAQDh4eEAbN68mcrKymrHrkuXLpx33nnN8tj95/h+sWTJEiIjI7n44otJT0/n+PHjVsQ7a1VVVSxbtoySkhKSkpI87rg1NZ5el0C1yVOOoyfUJfDs2uSpdQmsq03e9balZujIkSNUVVURHR1dbXl0dDTfffedRanqR+/evXnxxRfp3Lkzhw8fZsaMGVxxxRV8/fXXBAUFWR2v3mRlZQGc9hj+8l5zN2DAAG688UbOP/98du/ezf3338/AgQPZuHEjXl5eVserFZfLxe9//3suu+wyLr74YuDksXM4HISGhlZbtzkeu9OND+DWW2+lXbt2xMXFsW3bNv74xz+yc+dO3njjDQvT1s727dtJSkqirKyMwMBA3nzzTS688EK2bt3qMcetKfLkugSqTZ7y/4kn1CXw7NrkiXUJrK9NLbpx8mQDBw50f92tWzd69+5Nu3bt+Pvf/86dd95pYTKpq1tuucX9ddeuXenWrRsdO3Zk3bp19O3b18JktTdu3Di+/vrrZnsvQ03ONL7Ro0e7v+7atSuxsbH07duX3bt307Fjx8aOWSedO3dm69atFBQU8Prrr5Oamsr69eutjiXNnGqTZ/CEugSeXZs8sS6B9bWpRV+qFxkZiZeX1ykzbmRnZxMTE2NRqoYRGhrKr371K3bt2mV1lHr1y3FqCcfwFx06dCAyMrLZHMvx48fz1ltv8dFHH9GmTRv38piYGCoqKjh27Fi19ZvbsTvT+E6nd+/eAM3i2DkcDuLj40lMTCQjI4OEhASefvppjzluTVVLqkug2uQpmltdAs+uTZ5al8D62tSiGyeHw0FiYiKZmZnuZS6Xi8zMTJKSkixMVv+Ki4vZvXs3sbGxVkepV+effz4xMTHVjmFhYSGfffaZxx3DXxw8eJC8vLwmfyyNMYwfP54333yTDz/8kPPPP7/a+4mJifj4+FQ7djt37mT//v3N4tjVNL7T2bp1K0CTP3an43K5KC8vb/bHralrSXUJVJs8RXOpS+DZtaml1SWwoDbV2zQTzdSyZcuM0+k0L774ovn222/N6NGjTWhoqMnKyrI62jmZOHGiWbdundm7d6/ZsGGDSU5ONpGRkSYnJ8fqaHVWVFRkvvzyS/Pll18awMyePdt8+eWXZt++fcYYYx577DETGhpqVq5cabZt22aGDBlizj//fFNaWmpx8tr5b+MrKioykyZNMhs3bjR79+41a9euNZdcconp1KmTKSsrszr6fzV27FgTEhJi1q1bZw4fPux+HT9+3L3OmDFjzHnnnWc+/PBD88UXX5ikpCSTlJRkYeraq2l8u3btMg8//LD54osvzN69e83KlStNhw4dzJVXXmlx8ppNmTLFrF+/3uzdu9ds27bNTJkyxdhsNvP+++8bY5r3cWsOPLUuGaPa1Fxqk6fWJWM8uzZ5cl0ypmnUphbfOBljzLPPPmvOO+8843A4TK9evcynn35qdaRzNnz4cBMbG2scDodp3bq1GT58uNm1a5fVsc7KRx99ZIBTXqmpqcaYk9O+PvTQQyY6Oto4nU7Tt29fs3PnTmtD18F/G9/x48dNv379TKtWrYyPj49p166dGTVqVLP4B9TpxgSYRYsWudcpLS01d999twkLCzP+/v7mhhtuMIcPH7YudB3UNL79+/ebK6+80oSHhxun02ni4+PN5MmTTUFBgbXBa+GOO+4w7dq1Mw6Hw7Rq1cr07dvXXZiMad7HrbnwxLpkjGpTc6lNnlqXjPHs2uTJdcmYplGbbMYYU3/nr0RERERERDxPi77HSUREREREpDbUOImIiIiIiNRAjZOIiIiIiEgN1DiJiIiIiIjUQI2TiIiIiIhIDdQ4iYiIiIiI1ECNk4iIiIiISA3UOImIiIiIiNRAjZOIh7LZbKxYscLqGCIiIm6qTdKcqXESaQC33347NpvtlNeAAQOsjiYiIi2UapPIufG2OoCIpxowYACLFi2qtszpdFqURkRERLVJ5FzojJNIA3E6ncTExFR7hYWFAScvVZg3bx4DBw7Ez8+PDh068Prrr1f7/Pbt2+nTpw9+fn5EREQwevRoiouLq62zcOFCLrroIpxOJ7GxsYwfP77a+0eOHOGGG27A39+fTp06sWrVKvd7R48eJSUlhVatWuHn50enTp1OKaYiIuJZVJtEzp4aJxGLPPTQQwwbNoyvvvqKlJQUbrnlFnbs2AFASUkJ/fv3JywsjM8//5zXXnuNtWvXVis+8+bNY9y4cYwePZrt27ezatUq4uPjq+1jxowZ3HzzzWzbto3rrruOlJQU8vPz3fv/9ttveffdd9mxYwfz5s0jMjKy8X4AIiLS5Kg2ifwXRkTqXWpqqvHy8jIBAQHVXo8++qgxxhjAjBkzptpnevfubcaOHWuMMeb55583YWFhpri42P3+22+/bex2u8nKyjLGGBMXF2ceeOCBM2YAzIMPPuj+vri42ADm3XffNcYYM2jQIJOWllY/AxYRkSZPtUnk3OgeJ5EGcs011zBv3rxqy8LDw91fJyUlVXsvKSmJrVu3ArBjxw4SEhIICAhwv3/ZZZfhcrnYuXMnNpuNQ4cO0bdv3/+aoVu3bu6vAwICCA4OJicnB4CxY8cybNgwtmzZQr9+/Rg6dCiXXnrpWY1VRESaB9UmkbOnxkmkgQQEBJxyeUJ98fPzq9V6Pj4+1b632Wy4XC4ABg4cyL59+3jnnXf44IMP6Nu3L+PGjeOJJ56o97wiItI0qDaJnD3d4yRikU8//fSU7y+44AIALrjgAr766itKSkrc72/YsAG73U7nzp0JCgqiffv2ZGZmnlOGVq1akZqayuLFi3nqqad4/vnnz2l7IiLSvKk2iZyZzjiJNJDy8nKysrKqLfP29nbf5Praa6/Ro0cPLr/8cpYsWcKmTZtYsGABACkpKUybNo3U1FSmT59Obm4u99xzDyNGjCA6OhqA6dOnM2bMGKKiohg4cCBFRUVs2LCBe+65p1b5pk6dSmJiIhdddBHl5eW89dZb7uIoIiKeSbVJ5OypcRJpIGvWrCE2Nrbass6dO/Pdd98BJ2cVWrZsGXfffTexsbEsXbqUCy+8EAB/f3/ee+897r33Xnr27Im/vz/Dhg1j9uzZ7m2lpqZSVlbGk08+yaRJk4iMjOQ3v/lNrfM5HA7S09P58ccf8fPz44orrmDZsmX1MHIREWmqVJtEzp7NGGOsDiHS0thsNt58802GDh1qdRQRERFAtUmkJrrHSUREREREpAZqnERERERERGqgS/VERERERERqoDNOIiIiIiIiNVDjJCIiIiIiUgM1TiIiIiIiIjVQ4yQiIiIiIlIDNU4iIiIiIiI1UOMkIiIiIiJSAzVOIiIiIiIiNVDjJCIiIiIiUoP/D6JGajZsyXhaAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", "\n", "ax_tl.set_title('Training set')\n", "ax_tr.set_title('Development set')\n", "ax_bl.set_xlabel('Epochs')\n", "ax_br.set_xlabel('Epochs')\n", "ax_bl.set_ylabel('Accuracy')\n", "ax_tl.set_ylabel('Loss')\n", "\n", "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", "range_ = np.arange(1, trainer.epochs+1)\n", "ax_tl.plot(range_, custom_model_trainer.train_epoch_costs, color=next(colours))\n", "ax_bl.plot(range_, custom_model_trainer.train_eval_results['acc'], color=next(colours))\n", "ax_tr.plot(range_, custom_model_trainer.val_costs, color=next(colours))\n", "ax_br.plot(range_, custom_model_trainer.val_eval_results['acc'], color=next(colours))\n", "\n", "# print test accuracy\n", "test_acc = accuracy(model(test_circuits), torch.tensor(test_labels))\n", "print('Test accuracy:', test_acc.item())" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. rubric:: See also:\n", "\n", "- `Training: Hybrid case <./trainer-hybrid.ipynb>`_\n", "- `Training: Quantum case <./trainer-quantum.ipynb>`_\n", "- `Advanced: Manual training <../manual-training.rst>`_" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 4 }