diff --git "a/training/development.ipynb" "b/training/development.ipynb"
new file mode 100644--- /dev/null
+++ "b/training/development.ipynb"
@@ -0,0 +1,1330 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import torch\n",
+ "\n",
+ "import torch.nn as nn\n",
+ "import torch.nn.functional as F\n",
+ "import torch.optim as optim\n",
+ "\n",
+ "from torch.utils.data import Dataset, DataLoader\n",
+ "\n",
+ "from datasets import load_dataset\n",
+ "from transformers import DistilBertForSequenceClassification, DistilBertTokenizer\n",
+ "\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "from sklearn.metrics import accuracy_score, f1_score\n",
+ "\n",
+ "import os\n",
+ "import pickle"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Since we are operating on a Mac with M2 chip, CUDA is not available. However, we can get GPU acceleration like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CUDA? False\n",
+ "MPS available? True\n",
+ "MPS built? True\n",
+ "Device: mps\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"CUDA? \", torch.cuda.is_available())\n",
+ "\n",
+ "print(\"MPS available? \", torch.backends.mps.is_available()) #the MacOS is higher than 12.3+\n",
+ "print(\"MPS built? \", torch.backends.mps.is_built()) #MPS is activated\n",
+ "\n",
+ "device = torch.device(\"mps\")\n",
+ "print(\"Device: \", device)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# EDA"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "First, we will load the dataset: https://huggingface.co/datasets/dair-ai/emotion"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "No config specified, defaulting to: emotion/split\n",
+ "Found cached dataset emotion (/Users/david/.cache/huggingface/datasets/emotion/split/1.0.0/cca5efe2dfeb58c1d098e0f9eeb200e9927d889b5a03c67097275dfb5fe463bd)\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "861120cd48de4646996c7bc8e7daf92a",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ " 0%| | 0/3 [00:00, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "emotions = load_dataset(\"emotion\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "DatasetDict({\n",
+ " train: Dataset({\n",
+ " features: ['text', 'label'],\n",
+ " num_rows: 16000\n",
+ " })\n",
+ " validation: Dataset({\n",
+ " features: ['text', 'label'],\n",
+ " num_rows: 2000\n",
+ " })\n",
+ " test: Dataset({\n",
+ " features: ['text', 'label'],\n",
+ " num_rows: 2000\n",
+ " })\n",
+ "})"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "emotions"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'text': Value(dtype='string', id=None), 'label': ClassLabel(names=['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'], id=None)}\n",
+ "\n",
+ "{'text': ['i didnt feel humiliated', 'i can go from feeling so hopeless to so damned hopeful just from being around someone who cares and is awake', 'im grabbing a minute to post i feel greedy wrong', 'i am ever feeling nostalgic about the fireplace i will know that it is still on the property', 'i am feeling grouchy'], 'label': [0, 0, 3, 2, 3]}\n"
+ ]
+ }
+ ],
+ "source": [
+ "train_ds = emotions[\"train\"]\n",
+ "val_ds = emotions[\"validation\"]\n",
+ "test_ds = emotions[\"test\"]\n",
+ "\n",
+ "print(train_ds.features)\n",
+ "print()\n",
+ "print(train_ds[:5])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next, we will buid a DataFrame to use for further data analysis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " text | \n",
+ " label | \n",
+ " label_names | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " i didnt feel humiliated | \n",
+ " 0 | \n",
+ " sadness | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " i can go from feeling so hopeless to so damned... | \n",
+ " 0 | \n",
+ " sadness | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " im grabbing a minute to post i feel greedy wrong | \n",
+ " 3 | \n",
+ " anger | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " i am ever feeling nostalgic about the fireplac... | \n",
+ " 2 | \n",
+ " love | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " i am feeling grouchy | \n",
+ " 3 | \n",
+ " anger | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 15995 | \n",
+ " i just had a very brief time in the beanbag an... | \n",
+ " 0 | \n",
+ " sadness | \n",
+ "
\n",
+ " \n",
+ " 15996 | \n",
+ " i am now turning and i feel pathetic that i am... | \n",
+ " 0 | \n",
+ " sadness | \n",
+ "
\n",
+ " \n",
+ " 15997 | \n",
+ " i feel strong and good overall | \n",
+ " 1 | \n",
+ " joy | \n",
+ "
\n",
+ " \n",
+ " 15998 | \n",
+ " i feel like this was such a rude comment and i... | \n",
+ " 3 | \n",
+ " anger | \n",
+ "
\n",
+ " \n",
+ " 15999 | \n",
+ " i know a lot but i feel so stupid because i ca... | \n",
+ " 0 | \n",
+ " sadness | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
16000 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " text label label_names\n",
+ "0 i didnt feel humiliated 0 sadness\n",
+ "1 i can go from feeling so hopeless to so damned... 0 sadness\n",
+ "2 im grabbing a minute to post i feel greedy wrong 3 anger\n",
+ "3 i am ever feeling nostalgic about the fireplac... 2 love\n",
+ "4 i am feeling grouchy 3 anger\n",
+ "... ... ... ...\n",
+ "15995 i just had a very brief time in the beanbag an... 0 sadness\n",
+ "15996 i am now turning and i feel pathetic that i am... 0 sadness\n",
+ "15997 i feel strong and good overall 1 joy\n",
+ "15998 i feel like this was such a rude comment and i... 3 anger\n",
+ "15999 i know a lot but i feel so stupid because i ca... 0 sadness\n",
+ "\n",
+ "[16000 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "emotions.set_format(\"pandas\")\n",
+ "df = emotions[\"train\"][:]\n",
+ "\n",
+ "label_dict = {\n",
+ " id:label for id, label in enumerate(['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'])\n",
+ " }\n",
+ "\n",
+ "df[\"label_names\"] = df[\"label\"].map(lambda x: label_dict[x])\n",
+ "\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now, we can check class imbalances (and resample if necessary) and also text lengths."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "joy 5362\n",
+ "sadness 4666\n",
+ "anger 2159\n",
+ "fear 1937\n",
+ "love 1304\n",
+ "surprise 572\n",
+ "Name: label_names, dtype: int64\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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lxkCkZvl5OSobdtYlZT85O5W6gVf30b65pssQhEA4KIiELlZQUGBSkp+UtydTyqwaUt3t1OnFefu04ZXJ6mgoIBABAC4qAhEdURg05YKah7j7jYAALAlJlUDAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbqzOBaMqUKXI4HEpOTra2GWOUkpKiiIgI+fr6qmfPntq+fbvLcaWlpRo7dqxCQkLk5+enAQMG6ODBgy41hYWFSkpKktPplNPpVFJSko4cOVILowIAAPVBnQhEmzZt0pw5c9SpUyeX7VOnTtW0adM0e/Zsbdq0SeHh4erTp4+OHj1q1SQnJ2vp0qVasmSJ1qxZo2PHjqlfv36qqKiwahITE5WZmam0tDSlpaUpMzNTSUlJtTY+AABQt7k9EB07dkxDhw7V3Llz1bhxY2u7MUYzZszQxIkTNXjwYHXo0EGvvfaafvrpJy1evFiSVFRUpHnz5umFF15Q79691blzZy1cuFBbt27Vxx9/LEnKyspSWlqa/v3vfys+Pl7x8fGaO3eu3n//fe3cudMtYwYAAHWL2wPRvffeq1tuuUW9e/d22Z6dna28vDz17dvX2ubt7a0ePXpo7dq1kqSMjAyVl5e71ERERKhDhw5Wzbp16+R0OhUXF2fVdOvWTU6n06o5ndLSUhUXF7ssAADg8uThzhdfsmSJvvrqK23atKnKvry8PElSWFiYy/awsDDt37/fqvHy8nK5s3Sq5tTxeXl5Cg0NrXL+0NBQq+Z0pkyZokmTJp3fgAAAQL3ktjtEBw4c0P3336+FCxfKx8fnjHUOh8Nl3RhTZduv/brmdPXnOs+ECRNUVFRkLQcOHDjrawIAgPrLbYEoIyND+fn56tKlizw8POTh4aFVq1bpn//8pzw8PKw7Q7++i5Ofn2/tCw8PV1lZmQoLC89ac+jQoSqv/8MP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JSUlGjNmjAoLCxUXF6cVK1ZY30EkSdOnT5eHh4eGDBmikpIS9erVS6mpqdZ3EEnSokWLNG7cOOtptAEDBmj27Nk1GToAALgM1SgQbdmyRb/73e8kSdu2bXPZdz4TrOfNm3fW/Q6HQykpKUpJSTljjY+Pj2bNmqVZs2adsSYoKEgLFy6sdl8AAMBeahSIPvvss4vdBwAAgNvUaFI1AADA5aRGd4huuOGGs3409umnn9a4IQAAgNpWo0B0av7QKeXl5crMzNS2bduq/NJXAACAuq5GgWj69Omn3Z6SkqJjx45dUEMAAAC17aLOIbr99tvP6/eYAQAA1AUXNRCtW7dOPj4+F/OUAAAAl1yNPjIbPHiwy7oxRrm5ufryyy8v+NurAQAAaluNApHT6XRZb9CggWJiYvTUU09Z3wYNAABQX9QoEM2fP/9i9wEAAOA2NQpEp2RkZCgrK0sOh0Pt2rVT586dL1ZfAAAAtaZGgSg/P19//vOftXLlSl1xxRUyxqioqEg33HCDlixZoiZNmlzsPgEAAC6ZGj1lNnbsWBUXF2v79u368ccfVVhYqG3btqm4uFjjxo272D0CAABcUjW6Q5SWlqaPP/5YsbGx1rZ27drpxRdfZFI1AACod2p0h6iyslKenp5Vtnt6eqqysvKCmwIAAKhNNQpE//M//6P7779f33//vbXtu+++0wMPPKBevXpdtOYAAABqQ40C0ezZs3X06FG1bNlSv/3tb9W6dWtFRUXp6NGjmjVr1sXuEQAA4JKq0RyiyMhIffXVV0pPT9c333wjY4zatWun3r17X+z+AAAALrnzukP06aefql27diouLpYk9enTR2PHjtW4ceP0+9//Xu3bt9fq1asvSaMAAACXynkFohkzZmjkyJEKDAysss/pdGr06NGaNm3aRWsOAACgNpxXIPr666914403nnF/3759lZGRccFNAQAA1KbzCkSHDh067eP2p3h4eOiHH3644KYAAABq03kFot/85jfaunXrGfdv2bJFTZs2veCmAAAAatN5BaKbb75ZTzzxhE6cOFFlX0lJiZ588kn169fvojUHAABQG87rsfvHHntM77zzjtq0aaP77rtPMTExcjgcysrK0osvvqiKigpNnDjxUvUKAABwSZxXIAoLC9PatWt1zz33aMKECTLGSJIcDocSEhL0r3/9S2FhYZekUQAAgEvlvL+YsUWLFvrwww9VWFioPXv2yBij6OhoNW7c+FL0BwAAcMnV6JuqJalx48b6/e9/fzF7AQAAcIsa/S4zAACAywmBCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2J6HuxsAzldWVpa7W6g3QkJC1Lx5c3e3AQB1HoEI9UZJ0WFJDt1+++3ubqXe8PVtpG++ySIUAcA5EIhQb5T/dFSS0e8SH1WTqLbubqfOK87dpw2vTlJBQQGBCADOgUCEesc/tLmCmse4uw0AwGWESdUAAMD2CEQAAMD2CEQAAMD23BqIpkyZot///vcKCAhQaGioBg0apJ07d7rUGGOUkpKiiIgI+fr6qmfPntq+fbtLTWlpqcaOHauQkBD5+flpwIABOnjwoEtNYWGhkpKS5HQ65XQ6lZSUpCNHjlzqIQIAgHrArYFo1apVuvfee7V+/Xqlp6fr5MmT6tu3r44fP27VTJ06VdOmTdPs2bO1adMmhYeHq0+fPjp69KhVk5ycrKVLl2rJkiVas2aNjh07pn79+qmiosKqSUxMVGZmptLS0pSWlqbMzEwlJSXV6ngBAEDd5NanzNLS0lzW58+fr9DQUGVkZOj666+XMUYzZszQxIkTNXjwYEnSa6+9prCwMC1evFijR49WUVGR5s2bpwULFqh3796SpIULFyoyMlIff/yxEhISlJWVpbS0NK1fv15xcXGSpLlz5yo+Pl47d+5UTAxPLAEAYGd1ag5RUVGRJCkoKEiSlJ2drby8PPXt29eq8fb2Vo8ePbR27VpJUkZGhsrLy11qIiIi1KFDB6tm3bp1cjqdVhiSpG7dusnpdFo1v1ZaWqri4mKXBQAAXJ7qTCAyxujBBx/Utddeqw4dOkiS8vLyJElhYWEutWFhYda+vLw8eXl5qXHjxmetCQ0NrfKaoaGhVs2vTZkyxZpv5HQ6FRkZeWEDBAAAdVadCUT33XeftmzZotdff73KPofD4bJujKmy7dd+XXO6+rOdZ8KECSoqKrKWAwcOVGcYAACgHqoTgWjs2LFatmyZPvvsMzVr1szaHh4eLklV7uLk5+dbd43Cw8NVVlamwsLCs9YcOnSoyuv+8MMPVe4+neLt7a3AwECXBQAAXJ7cOqnaGKOxY8dq6dKlWrlypaKiolz2R0VFKTw8XOnp6ercubMkqaysTKtWrdI//vEPSVKXLl3k6emp9PR0DRkyRJKUm5urbdu2aerUqZKk+Ph4FRUVaePGjbr66qslSRs2bFBRUZG6d+9eW8MFgMtCTk6OCgoK3N1GnZeVleXuFnAe3BqI7r33Xi1evFj/7//9PwUEBFh3gpxOp3x9feVwOJScnKzJkycrOjpa0dHRmjx5sho1aqTExESrdsSIEXrooYcUHBysoKAgjR8/Xh07drSeOouNjdWNN96okSNH6pVXXpEkjRo1Sv369eMJMwA4Dzk5OWrbNlYlJT+5u5V6o7y0zN0toBrcGoheeuklSVLPnj1dts+fP1/Dhw+XJD3yyCMqKSnRmDFjVFhYqLi4OK1YsUIBAQFW/fTp0+Xh4aEhQ4aopKREvXr1Umpqqho2bGjVLFq0SOPGjbOeRhswYIBmz559aQcIAJeZgoIClZT8pLg7n1Rg05bubqdOy926TtuWzdHJkyfd3Qqqwe0fmZ2Lw+FQSkqKUlJSzljj4+OjWbNmadasWWesCQoK0sKFC2vSJgDgVwKbtlRQc+6wn01x7j53t4DzUCcmVQMAALgTgQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANgegQgAANieh7sbAHBpZWVlubuFeiEkJETNmzd3dxsA3IRABFymSooOS3Lo9ttvd3cr9YKvbyN9800WoQiwKQIRcJkq/+moJKPfJT6qJlFt3d1OnVacu08bXp2kgoICAhFgUwQi4DLnH9pcQc1j3N0GANRpTKoGAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC2RyACAAC259ZA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OnToYHr27Gk2b95sVq1aZTp37mwkmaVLlxpjjMnOzjaSTNu2bc37779vdu7caf74xz+aFi1amPLycmOMMVu2bDH+/v5m+vTpZteuXeaLL74wnTt3NsOHDzfGGLNp0ybTsGFDs3jxYrNv3z7z1VdfmZkzZ56zf3d46623zNtvv2127dplNm/ebPr37286duxoKioqqnUt1qxZYxo0aGCee+45s3PnTvPiiy+aoKAg43Q6rddIS0szgYGBJjU11ezdu9esWLHCtGzZ0qSkpFg1kkxoaKiZN2+e2bt3r9m3b19tX4oa6dGjh7n//vuNMcYMGDDAxMbGms8//9xkZmaahIQE07p1a1NWVmaMMebWW281t99+u8vxt956q/nLX/5ijDHm+PHjJjo62tx5551my5YtZseOHSYxMdHExMSY0tLSWh3X2ZztPfzL63HKwIEDzbBhw6z1Fi1amMDAQPPcc8+Z3bt3m927d1vvtWbNmpm33nrL7Nixw9x1110mICDAFBQUGGOM+eyzz4wk06lTJ7NixQqzZ88eU1BQYJ588klz5ZVXGmOMKS8vN06n04wfP97s2bPH7Nixw6Smppr9+/cbY6r3XqwLjhw5Yp566inTrFkzk5uba/Lz883f/vY307ZtW5OWlmb27t1r5s+fb7y9vc3KlSuNMcaUlZWZJ554wmzcuNF8++23ZuHChaZRo0bmjTfesM47bNgw4+/vb5KSksy2bdvM1q1b3TXES2rYsGFm4MCBxhhjxo0bZyIiIsyHH35otm/fboYNG2YaN25sDh8+bIwx5plnnjHt2rVzOf6BBx4w119/fW237XYEonomIyPDSKrWX5gnT540AQEB5r333jPGGLN8+XLTsGFDl9/4+9FHH502EP373/+2arZv324kmaysLGOMMUlJSWbUqFEur7V69WrToEEDU1JSYt5++20TGBhoBbGa9u8O+fn5RpLZunVrta7FbbfdZm655RaXcwwdOtQlEF133XVm8uTJLjULFiwwTZs2tdYlmeTk5EswokvrVADYtWuXkWS++OILa19BQYHx9fU1b775pjHGmHfeecf4+/ub48ePG2OMKSoqMj4+PuaDDz4wxhgzb948ExMTYyorK61zlJaWGl9fX7N8+fJaHNXZne09XN1ANGjQIJeaU++1Z5991tpWXl5umjVrZv7xj38YY/4vEL377rsux/4yEB0+fNhIskLCr1XnvVhXTJ8+3bRo0cIYY8yxY8eMj4+PWbt2rUvNiBEjrEB9OmPGjDG33nqrtT5s2DATFhZWpwL2pXAqEB07dsx4enqaRYsWWfvKyspMRESEmTp1qjHm54DfsGFDs2HDBmt/kyZNTGpqqlt6dyc+MqtnrrzySvXq1UsdO3bUn/70J82dO1eFhYWSpPz8fN19991q06aNnE6nnE6njh07ppycHElSVlaWmjdvrmbNmlnni4+PP+3rdOrUyfr3pk2bWueXpIyMDKWmplpzF/z9/ZWQkKDKykplZ2erT58+atGihVq1aqWkpCQtWrRIP/300zn7d4e9e/cqMTFRrVq1UmBgoKKioiTJumbS2a/Fzp07dfXVV7uc89frGRkZeuqpp1yu18iRI5Wbm2tdF0nq2rXrxR1cLcrKypKHh4fi4uKsbcHBwYqJiVFWVpYk6ZZbbpGHh4eWLVsmSXr77bcVEBCgvn37Svr5Ou3Zs0cBAQHWdQoKCtKJEyfq1K37i/EePtN/61/+PHp4eKhr167W9TvXsZIUFBSk4cOHKyEhQf3799fMmTOVm5tr7a/ue7Gu2bFjh06cOKE+ffq49P6f//zH5b3x8ssvq2vXrmrSpIn8/f01d+5cl59lSerYseNlOW/odPbu3avy8nJdc8011jZPT09dffXV1vuqadOmuuWWW/Tqq69Kkt5//32dOHFCf/rTn9zSszsRiOqZhg0bKj09XR999JHatWunWbNmKSYmRtnZ2Ro+fLgyMjI0Y8YMrV27VpmZmQoODlZZWZkknfapA4fDcdrX+eWE3lM1lZWV1j9Hjx6tzMxMa/n666+1e/du/fa3v1VAQIC++uorvf7662ratKmeeOIJXXnllTpy5MhZ+3eH/v376/Dhw5o7d642bNigDRs2SJJ1zaSzXwtjTJVr+OvrXFlZqUmTJrlcr61bt2r37t3y8fGx6vz8/C7u4GrR6d5bp7afuj5eXl764x//qMWLF0uSFi9erNtuu00eHj8/21FZWakuXbq4XKfMzEzt2rVLiYmJtTOQajjbe7hBgwZVrkV5eXmVc5zPf+tfv7/Odez8+fO1bt06de/eXW+88YbatGmj9evXS6r+e7GuOfXz9sEHH7j0vmPHDmse0ZtvvqkHHnhAd955p1asWKHMzEz97//+r8vPslS/f87O16n34un+jPrltrvuuktLlixRSUmJ5s+fr9tuu02NGjWq1V7rAgJRPeRwOHTNNddo0qRJ2rx5s7y8vLR06VKtXr1a48aN080336z27dvL29tbBQUF1nHt2rVTTk6Ovv/+e2vbrycIV8dVV12l7du3q3Xr1lWWU//n5eHhod69e2vq1KnasmWL9u3bp08//fSs/de2w4cPKysrS4899ph69eql2NjY8/4//bZt22rjxo0u27788kuX9auuuko7d+487fVq0ODy+BFs166dTp48aQVK6efru2vXLsXGxlrbhg4dqrS0NG3fvl2fffaZhg4dau276qqrtHv3boWGhla5TnXtqZkzvYebNGnickemoqJC27Ztq/Z5TwUXSTp58qQyMjLUtm3b8+6vc+fOmjBhgtauXasOHTpYIbS+vhfbtWsnb29v5eTkVOk7MjJSkrR69Wp1795dY8aMUefOndW6des6dWfRHU79mbxmzRprW3l5ub788kuXn8ubb75Zfn5+eumll/TRRx/pzjvvdEe7bsdj9/XMhg0b9Mknn6hv374KDQ3Vhg0b9MMPPyg2NlatW7fWggUL1LVrVxUXF+vhhx+Wr6+vdWzv3r0VExOjO+64Qy+88IKKi4s1ceLE8+7h0UcfVbdu3XTvvfdq5MiR8vPzU1ZWltLT0zVr1iy9//77+vbbb3X99dercePG+vDDD1VZWamYmJiz9l/bTj3JNGfOHDVt2lQ5OTn661//el7nGDt2rK6//npNmzZN/fv316effqqPPvrI5f++nnjiCfXr10+RkZH605/+pAYNGmjLli3aunVrvXya7HSio6M1cOBAjRw5Uq+88ooCAgL017/+Vb/5zW80cOBAq65Hjx4KCwvT0KFD1bJlS3Xr1s3aN3ToUD333HMaOHCgnnrqKTVr1kw5OTl655139PDDD7t81OtOZ3sP+/n56cEHH9QHH3yg3/72t5o+fbqOHDlS7XO/+OKLio6OVmxsrKZPn67CwsLz+sspOztbc+bM0YABAxQREaGdO3dq165duuOOOyTV3/diQECAxo8frwceeECVlZW69tprVVxcrLVr18rf31/Dhg1T69at9Z///EfLly9XVFSUFixYoE2bNlkfg9uRn5+f7rnnHj388MMKCgpS8+bNNXXqVP30008aMWKEVdewYUMNHz5cEyZMUOvWrc84leKy577pS6iJHTt2mISEBNOkSRPj7e1t2rRpY2bNmmWMMearr74yXbt2Nd7e3iY6Otr897//NS1atDDTp0+3jt+5c6e59tprjZeXl2nTpo1JS0s77aTqzZs3W8cUFhYaSeazzz6ztm3cuNH06dPH+Pv7Gz8/P9OpUyfzzDPPGGN+nmDdo0cP07hxY+Pr62s6depkPelxtv7dIT093cTGxhpvb2/TqVMns3LlSut6VPdazJkzx/zmN78xvr6+ZtCgQebpp5824eHhLq+TlpZmunfvbnx9fU1gYKC5+uqrzZw5c6z9v/xvUJ/8chLxjz/+aJKSkozT6TS+vr4mISHB7Nq1q8oxDz/8sJFknnjiiSr7cnNzzR133GFCQkKMt7e3adWqlRk5cqQpKiq61EOptrO9h8vKysw999xjgoKCTGhoqJkyZcppJ1X/8mfSmP/7uVu8eLGJi4szXl5eJjY21nzyySdWzalJ1YWFhS7H/nJSdV5enhk0aJBp2rSp8fLyMi1atDBPPPGEqaiosOrP9V6sK345qdoYYyorK83MmTNNTEyM8fT0NE2aNDEJCQlm1apVxhhjTpw4YYYPH26cTqe54oorzD333GP++te/WtfGGNenry5nvxxnSUmJGTt2rPUzdc0115iNGzdWOWbv3r1GkjXZ2o74bffARTZy5Eh98803Wr16tbtbQT2xb98+RUVFafPmzZflr+FA7frLX/6ihg0bauHChdU+5osvvlDPnj118OBBhYWFXcLu6q66+6ExUE88//zz+vrrr7Vnzx7NmjVLr732moYNG+butgDYzMmTJ7Vjxw6tW7dO7du3r9YxpaWl2rNnjx5//HENGTLEtmFIIhABF2zjxo3q06ePOnbsqJdffln//Oc/ddddd7m7LQA2s23bNnXt2lXt27fX3XffXa1jXn/9dcXExKioqEhTp069xB3WbXxkBgAAbI87RAAAwPYIRAAAwPYIRAAAwPYIRAAAwPYIRAAAwPYIRAAumZ49eyo5OblatStXrpTD4TivX3VxOi1bttSMGTMu6BwA7IdABAAAbI9ABAAAbI9ABKBWLFy4UF27dlVAQIDCw8OVmJio/Pz8KnVffPGFrrzySvn4+CguLk5bt2512b927Vpdf/318vX1VWRkpMaNG6fjx4/XqCeHw6F///vf+sMf/qBGjRopOjpay5Yts/ZXVFRoxIgRioqKkq+vr2JiYjRz5kyXcwwfPlyDBg3S5MmTFRYWpiuuuEKTJk3SyZMnrd8y3qxZM7366qsux3333Xe67bbb1LhxYwUHB2vgwIHat2+ftX/lypW6+uqr5efnpyuuuELXXHON9u/fX6NxAjg3AhGAWlFWVqa///3v+vrrr/Xuu+8qOztbw4cPr1L38MMP6/nnn9emTZsUGhqqAQMGqLy8XJK0detWJSQkaPDgwdqyZYveeOMNrVmzRvfdd1+N+5o0aZKGDBmiLVu26Oabb9bQoUP1448/SpIqKyvVrFkzvfnmm9qxY4eeeOIJ/e1vf9Obb77pco5PP/1U33//vT7//HNNmzZNKSkp6tevnxo3bqwNGzbo7rvv1t13360DBw5Ikn766SfdcMMN8vf31+eff641a9bI399fN954o8rKynTy5EkNGjRIPXr00JYtW7Ru3TqNGjVKDoejxuMEcA4GAC6RHj16mPvvv/+0+zZu3GgkmaNHjxpjjPnss8+MJLNkyRKr5vDhw8bX19e88cYbxhhjkpKSzKhRo1zOs3r1atOgQQNTUlJijDGmRYsWZvr06dXqT5J57LHHrPVjx44Zh8NhPvroozMeM2bMGHPrrbda68OGDTMtWrQwFRUV1raYmBhz3XXXWesnT540fn5+5vXXXzfGGDNv3jwTExNjKisrrZrS0lLj6+trli9fbg4fPmwkmZUrV1ZrHAAuHHeIANSKzZs3a+DAgWrRooUCAgLUs2dPSVJOTo5LXXx8vPXvQUFBiomJUVZWliQpIyNDqamp8vf3t5aEhARVVlYqOzu7Rn116tTJ+nc/Pz8FBAS4fJT38ssvq2vXrmrSpIn8/f01d+7cKj23b99eDRr83x+nYWFh6tixo7XesGFDBQcHW+fNyMjQnj17FBAQYI0jKChIJ06c0N69exUUFKThw4crISFB/fv318yZM5Wbm1uj8QGoHg93NwDg8nf8+HH17dtXffv21cKFC9WkSRPl5OQoISFBZWVl5zz+1EdFlZWVGj16tMaNG1elpnnz5jXqzdPTs8prVVZWSpLefPNNPfDAA3rhhRcUHx+vgIAAPffcc9qwYcM5z3G281ZWVqpLly5atGhRlX6aNGkiSZo/f77GjRuntLQ0vfHGG3rssceUnp6ubt261WicAM6OQATgkvvmm29UUFCgZ599VpGRkZKkL7/88rS169evt8JNYWGhdu3apbZt20qSrrrqKm3fvl2tW7eulb5Xr16t7t27a8yYMda2vXv3XvB5r7rqKr3xxhsKDQ1VYGDgGes6d+6szp07a8KECYqPj9fixYsJRMAlwkdmAC655s2by8vLS7NmzdK3336rZcuW6e9///tpa5966il98skn2rZtm4YPH66QkBANGjRIkvToo49q3bp1uvfee5WZmandu3dr2bJlGjt27CXpu3Xr1vryyy+1fPly7dq1S48//rg2bdp0wecdOnSoQkJCNHDgQK1evVrZ2dlatWqV7r//fh08eFDZ2dmaMGGC1q1bp/3792vFihXatWuXYmNjL8KoAJwOgQjAJdekSROlpqbqv//9r9q1a6dnn31Wzz///Glrn332Wd1///3q0qWLcnNztWzZMnl5eUn6eb7PqlWrtHv3bl133XXq3LmzHn/8cTVt2vSS9H333Xdr8ODBuu222xQXF6fDhw+73C2qqUaNGunzzz9X8+bNNXjwYMXGxurOO+9USUmJAgMD1ahRI33zzTe69dZb1aZNG40aNUr33XefRo8efRFGBeB0HMYY4+4mAAAA3Ik7RAAAwPYIRAAuS4sWLXJ5PP+XS/v27d3dHoA6ho/MAFyWjh49qkOHDp12n6enp1q0aFHLHQGoywhEAADA9vjIDAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2B6BCAAA2N7/B4Y7qDECf5WoAAAAAElFTkSuQmCC",
+ "text/plain": [
+ "