From b6495374fdd35d44011aca66905c12297598e3d0 Mon Sep 17 00:00:00 2001 From: Bdarne <basile.darne@ecl20.ec-lyon.fr> Date: Fri, 17 Nov 2023 17:51:52 +0100 Subject: [PATCH] session 17/11/23 work performed the 17/11/23 --- TD2 Deep Learning.ipynb | 553 ++++++++++++++++++++++++++++++++++-- results/model1_accuracy.PNG | Bin 0 -> 22286 bytes results/model1_overfit2.PNG | Bin 0 -> 39735 bytes 3 files changed, 536 insertions(+), 17 deletions(-) create mode 100644 results/model1_accuracy.PNG create mode 100644 results/model1_overfit2.PNG diff --git a/TD2 Deep Learning.ipynb b/TD2 Deep Learning.ipynb index 2ecfce9..6c833bc 100644 --- a/TD2 Deep Learning.ipynb +++ b/TD2 Deep Learning.ipynb @@ -52,10 +52,72 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "b1950f0a", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([[-2.0332e-01, 6.5762e-01, -1.2718e+00, -1.0667e+00, 6.3339e-01,\n", + " 3.0044e-01, -9.4605e-02, -4.8752e-01, 2.5361e+00, -9.0793e-01],\n", + " [ 1.8772e+00, 8.5481e-01, -8.4488e-01, 1.5698e+00, -1.6336e+00,\n", + " -1.9409e+00, -4.7927e-01, -9.8437e-01, 8.8057e-01, 1.0159e+00],\n", + " [-2.2458e-01, -1.5407e-01, 9.7949e-01, -1.3478e+00, -8.4752e-01,\n", + " 2.2291e+00, 2.0097e-02, -3.6921e-02, -1.5207e+00, 2.2080e+00],\n", + " [ 1.8335e+00, -1.1116e-01, 1.7158e+00, 4.3745e-01, -1.5080e-02,\n", + " 2.2063e-02, 9.2092e-03, -1.8087e-01, -7.6077e-01, 3.4914e-01],\n", + " [-1.5280e-03, -1.7249e+00, 3.9487e-01, 4.8410e-01, -1.2762e+00,\n", + " 4.3278e-01, 3.5852e-01, -7.2127e-01, 9.7572e-01, -4.2663e-01],\n", + " [-9.6790e-01, 3.1904e-01, 1.9527e+00, 1.5507e-01, -2.6549e-02,\n", + " 3.3455e-02, -1.3134e+00, 1.4105e-01, 1.2060e+00, 4.3760e-01],\n", + " [ 1.3415e-01, 7.1450e-01, -5.9799e-02, -4.5007e-01, -7.7680e-02,\n", + " 4.0893e-01, -1.9673e+00, 8.9624e-01, 6.0989e-01, 3.0245e+00],\n", + " [ 9.0126e-01, 1.1798e+00, -1.6314e-01, 9.8894e-01, -5.0119e-01,\n", + " -1.9976e-01, -7.0183e-01, -8.8300e-01, -1.1321e+00, -8.8728e-01],\n", + " [-3.1896e-01, 5.0318e-02, 1.0354e+00, -3.3261e-01, -8.8974e-01,\n", + " -7.7209e-01, -1.6692e-01, -6.9670e-01, -1.7232e-01, -6.2842e-01],\n", + " [-6.6295e-01, 2.0141e+00, 3.3106e-01, 2.9839e-01, -1.1237e+00,\n", + " -7.8125e-01, -3.0903e-01, 3.5664e-01, -1.9195e-01, -3.4968e-02],\n", + " [-7.5442e-01, 6.8441e-01, -1.6399e+00, -1.5894e+00, 3.3328e-01,\n", + " -5.4040e-01, -2.0520e-01, 1.1902e+00, -4.0546e-01, 5.4631e-01],\n", + " [ 3.5297e-01, 1.8425e-01, -2.6629e-01, 2.6103e-01, -1.6353e-01,\n", + " -1.5099e+00, -2.3602e+00, 1.8305e+00, -6.0727e-01, 7.7936e-01],\n", + " [ 3.3149e-01, -1.0999e+00, -4.7988e-01, -1.2186e+00, 1.6860e+00,\n", + " 3.1453e-01, -1.3638e-01, -3.7778e-01, 1.0254e-01, -9.3037e-02],\n", + " [-8.2793e-01, 1.0470e+00, -1.3539e+00, -6.7968e-01, -1.0165e+00,\n", + " -5.5619e-02, 1.8310e+00, 3.9036e-01, 9.2613e-01, -1.7741e-01]])\n", + "AlexNet(\n", + " (features): Sequential(\n", + " (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))\n", + " (1): ReLU(inplace=True)\n", + " (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n", + " (4): ReLU(inplace=True)\n", + " (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (7): ReLU(inplace=True)\n", + " (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (9): ReLU(inplace=True)\n", + " (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (11): ReLU(inplace=True)\n", + " (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))\n", + " (classifier): Sequential(\n", + " (0): Dropout(p=0.5, inplace=False)\n", + " (1): Linear(in_features=9216, out_features=4096, bias=True)\n", + " (2): ReLU(inplace=True)\n", + " (3): Dropout(p=0.5, inplace=False)\n", + " (4): Linear(in_features=4096, out_features=4096, bias=True)\n", + " (5): ReLU(inplace=True)\n", + " (6): Linear(in_features=4096, out_features=1000, bias=True)\n", + " )\n", + ")\n" + ] + } + ], "source": [ "import torch\n", "\n", @@ -95,10 +157,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "6e18f2fd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CUDA is not available. Training on CPU ...\n" + ] + } + ], "source": [ "import torch\n", "\n", @@ -121,10 +191,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "462666a2", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to data\\cifar-10-python.tar.gz\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100.0%\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting data\\cifar-10-python.tar.gz to data\n", + "Files already downloaded and verified\n" + ] + } + ], "source": [ "import numpy as np\n", "from torchvision import datasets, transforms\n", @@ -193,10 +286,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "317bf070", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Net(\n", + " (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))\n", + " (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n", + " (fc1): Linear(in_features=400, out_features=120, bias=True)\n", + " (fc2): Linear(in_features=120, out_features=84, bias=True)\n", + " (fc3): Linear(in_features=84, out_features=10, bias=True)\n", + ")\n" + ] + } + ], "source": [ "import torch.nn as nn\n", "import torch.nn.functional as F\n", @@ -242,10 +350,67 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "4b53f229", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch: 0 \tTraining Loss: 44.456879 \tValidation Loss: 40.405201\n", + "Validation loss decreased (inf --> 40.405201). Saving model ...\n", + "Epoch: 1 \tTraining Loss: 37.539734 \tValidation Loss: 34.893430\n", + "Validation loss decreased (40.405201 --> 34.893430). Saving model ...\n", + "Epoch: 2 \tTraining Loss: 32.288289 \tValidation Loss: 30.938065\n", + "Validation loss decreased (34.893430 --> 30.938065). Saving model ...\n", + "Epoch: 3 \tTraining Loss: 29.366940 \tValidation Loss: 27.821222\n", + "Validation loss decreased (30.938065 --> 27.821222). Saving model ...\n", + "Epoch: 4 \tTraining Loss: 27.163584 \tValidation Loss: 26.858292\n", + "Validation loss decreased (27.821222 --> 26.858292). Saving model ...\n", + "Epoch: 5 \tTraining Loss: 25.464075 \tValidation Loss: 24.828610\n", + "Validation loss decreased (26.858292 --> 24.828610). Saving model ...\n", + "Epoch: 6 \tTraining Loss: 24.102266 \tValidation Loss: 24.066201\n", + "Validation loss decreased (24.828610 --> 24.066201). Saving model ...\n", + "Epoch: 7 \tTraining Loss: 22.977551 \tValidation Loss: 23.100200\n", + "Validation loss decreased (24.066201 --> 23.100200). Saving model ...\n", + "Epoch: 8 \tTraining Loss: 22.004219 \tValidation Loss: 25.045447\n", + "Epoch: 9 \tTraining Loss: 21.150548 \tValidation Loss: 22.796602\n", + "Validation loss decreased (23.100200 --> 22.796602). Saving model ...\n", + "Epoch: 10 \tTraining Loss: 20.331048 \tValidation Loss: 22.531555\n", + "Validation loss decreased (22.796602 --> 22.531555). Saving model ...\n", + "Epoch: 11 \tTraining Loss: 19.613238 \tValidation Loss: 22.437164\n", + "Validation loss decreased (22.531555 --> 22.437164). Saving model ...\n", + "Epoch: 12 \tTraining Loss: 18.859432 \tValidation Loss: 21.191249\n", + "Validation loss decreased (22.437164 --> 21.191249). Saving model ...\n", + "Epoch: 13 \tTraining Loss: 18.185451 \tValidation Loss: 20.865803\n", + "Validation loss decreased (21.191249 --> 20.865803). Saving model ...\n", + "Epoch: 14 \tTraining Loss: 17.615607 \tValidation Loss: 20.782799\n", + "Validation loss decreased (20.865803 --> 20.782799). Saving model ...\n", + "Epoch: 15 \tTraining Loss: 16.942239 \tValidation Loss: 21.159325\n", + "Epoch: 16 \tTraining Loss: 16.310783 \tValidation Loss: 21.481381\n", + "Epoch: 17 \tTraining Loss: 15.756336 \tValidation Loss: 20.873583\n", + "Epoch: 18 \tTraining Loss: 15.156594 \tValidation Loss: 21.744170\n", + "Epoch: 19 \tTraining Loss: 14.669365 \tValidation Loss: 21.543261\n", + "Epoch: 20 \tTraining Loss: 14.132257 \tValidation Loss: 21.448154\n", + "Epoch: 21 \tTraining Loss: 13.608869 \tValidation Loss: 22.079492\n", + "Epoch: 22 \tTraining Loss: 13.124700 \tValidation Loss: 22.396737\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32md:\\ECL\\3A\\MOD\\IA\\TD1\\gitlab_repo\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 15\u001b[0m line \u001b[0;36m2\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=25'>26</a>\u001b[0m loss \u001b[39m=\u001b[39m criterion(output, target)\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=26'>27</a>\u001b[0m \u001b[39m# Backward pass: compute gradient of the loss with respect to model parameters\u001b[39;00m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=27'>28</a>\u001b[0m loss\u001b[39m.\u001b[39;49mbackward()\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=28'>29</a>\u001b[0m \u001b[39m# Perform a single optimization step (parameter update)\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=29'>30</a>\u001b[0m optimizer\u001b[39m.\u001b[39mstep()\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\_tensor.py:488\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m 478\u001b[0m \u001b[39mif\u001b[39;00m has_torch_function_unary(\u001b[39mself\u001b[39m):\n\u001b[0;32m 479\u001b[0m \u001b[39mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m 480\u001b[0m Tensor\u001b[39m.\u001b[39mbackward,\n\u001b[0;32m 481\u001b[0m (\u001b[39mself\u001b[39m,),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 486\u001b[0m inputs\u001b[39m=\u001b[39minputs,\n\u001b[0;32m 487\u001b[0m )\n\u001b[1;32m--> 488\u001b[0m torch\u001b[39m.\u001b[39;49mautograd\u001b[39m.\u001b[39;49mbackward(\n\u001b[0;32m 489\u001b[0m \u001b[39mself\u001b[39;49m, gradient, retain_graph, create_graph, inputs\u001b[39m=\u001b[39;49minputs\n\u001b[0;32m 490\u001b[0m )\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\autograd\\__init__.py:197\u001b[0m, in \u001b[0;36mbackward\u001b[1;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[0;32m 192\u001b[0m retain_graph \u001b[39m=\u001b[39m create_graph\n\u001b[0;32m 194\u001b[0m \u001b[39m# The reason we repeat same the comment below is that\u001b[39;00m\n\u001b[0;32m 195\u001b[0m \u001b[39m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m 196\u001b[0m \u001b[39m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 197\u001b[0m Variable\u001b[39m.\u001b[39;49m_execution_engine\u001b[39m.\u001b[39;49mrun_backward( \u001b[39m# Calls into the C++ engine to run the backward pass\u001b[39;49;00m\n\u001b[0;32m 198\u001b[0m tensors, grad_tensors_, retain_graph, create_graph, inputs,\n\u001b[0;32m 199\u001b[0m allow_unreachable\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, accumulate_grad\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], "source": [ "import torch.optim as optim\n", "\n", @@ -324,18 +489,44 @@ "Does overfit occur? If so, do an early stopping." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Overfit occurs starting from epoch 15 :\n", + "\n", + "\n", + "\n", + "The training loss decreases but not the validation loss, which means the model is trying to hard to get the right results for the training data only. That means that the model will be very efficient on the training data, but not so much with new data it has never been confronted to. We thus perform an early stopping of the training.\n" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "id": "d39df818", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", - "plt.plot(range(n_epochs), train_loss_list)\n", + "# we stopped the training at epoch 22, so train_loss_list has a length of 23\n", + "last_epoch = 22\n", + "\n", + "plt.plot(range(last_epoch+1), train_loss_list)\n", "plt.xlabel(\"Epoch\")\n", - "plt.ylabel(\"Loss\")\n", + "plt.xticks(range(last_epoch+1))\n", + "plt.ylabel(\"Train Loss\")\n", "plt.title(\"Performance of Model 1\")\n", "plt.show()" ] @@ -350,10 +541,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "id": "e93efdfc", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Loss: 21.040502\n", + "\n", + "Test Accuracy of airplane: 69% (696/1000)\n", + "Test Accuracy of automobile: 79% (798/1000)\n", + "Test Accuracy of bird: 48% (482/1000)\n", + "Test Accuracy of cat: 39% (390/1000)\n", + "Test Accuracy of deer: 54% (545/1000)\n", + "Test Accuracy of dog: 63% (636/1000)\n", + "Test Accuracy of frog: 75% (758/1000)\n", + "Test Accuracy of horse: 63% (630/1000)\n", + "Test Accuracy of ship: 73% (736/1000)\n", + "Test Accuracy of truck: 72% (724/1000)\n", + "\n", + "Test Accuracy (Overall): 63% (6395/10000)\n" + ] + } + ], "source": [ "model.load_state_dict(torch.load(\"./model_cifar.pt\"))\n", "\n", @@ -417,6 +629,14 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the example model, we get an overall test accuracy of 63%.\n", + "***" + ] + }, { "cell_type": "markdown", "id": "944991a2", @@ -434,6 +654,305 @@ "Compare the results obtained with this new network to those obtained previously." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***\n", + "- After a convolution taking an input of $channels_{in}*size_{input}*size_{input}$, the output has $channels_{out}$ channels of size : $size_{ConvOutput} = (size_{input} + 2*padding - size_{kernel}) + 1$ \n", + "- The ReLU activation doesn't change the size of the output\n", + "- The Maxpool with kernel size of 2 returns an output of : $channels_{out}$ of size $size_{output} = size_{ConvOutput}/2$\n", + "- The input is an image consisting of 3 channels of size $32*32$, so the size of the input is $3*32*32$\n", + "- After first convolutional layer : $size_{output} = \\frac{(32 + 2*1 - 3) + 1}{2} = 16$ so the size is $16*16*16$\n", + "- After second convolutional layer : $size_{output} = \\frac{(16 + 2*1 - 3) + 1}{2} = 8$ so the size is $32*8*8$\n", + "- After third convolutional layer : $size_{output} = \\frac{(8 + 2*1 - 3) + 1}{2} = 4$ so the size is $64*4*4$\n", + "***\n", + "We apply a dropout function, which parameter represents the probability to not correct a parameter during the error backpropagation. It seems that a dropout of 0.5 gives the best results :\n", + "- [source1](https://medium.com/@upendravijay2/how-does-dropout-help-to-avoid-overfitting-in-neural-networks-91b90fd86b20#:~:text=A%20good%20value%20for%20dropout,new%20network%20that%20uses%20dropout.) recommends a dropout comprised between 0.5 and 0.8\n", + "- [source3](https://arxiv.org/pdf/1207.0580.pdf) seems to recommend a dropout of 0.5\n", + "***" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. New model definition" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NewNet(\n", + " (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (fc1): Linear(in_features=1024, out_features=512, bias=True)\n", + " (fc2): Linear(in_features=512, out_features=64, bias=True)\n", + " (fc3): Linear(in_features=64, out_features=10, bias=True)\n", + " (dropout): Dropout(p=0.5, inplace=False)\n", + ")\n" + ] + } + ], + "source": [ + "class NewNet(nn.Module):\n", + " def __init__(self):\n", + " super(NewNet, self).__init__()\n", + " # input : 3 channels, dim = 32*32\n", + " self.conv1 = nn.Conv2d(3, 16, 3, padding=1) # first conv : 3 input channels and 16 output channels ; kernel size : 3 ; padding of 1\n", + " # output dim = (32 + 2*padding - kernelsize) + 1 = (32 + 2 - 3) + 1 = 32 -> pool = 16*16\n", + " self.pool = nn.MaxPool2d(2, 2) # Maxpool with kernel size of 2\n", + " self.conv2 = nn.Conv2d(16, 32, 3, padding=1) # 16 in channels and 32 out channels\n", + " # output dim = (16 + 2 - 3) + 1 = 16 -> pool = 8*8 \n", + " self.conv3 = nn.Conv2d(32, 64, 3, padding=1) # 64 out channels\n", + " # output dim = (8 + 2 - 3) + 1 = 8 -> pool = 4*4\n", + " # Output of conv3 : 64 channels of size 4*4 so 64*4*4\n", + " self.fc1 = nn.Linear(64 * 4 * 4, 512) # output size of 512\n", + " self.fc2 = nn.Linear(512, 64) # output size of 64\n", + " self.fc3 = nn.Linear(64, 10) # we must classify images from the CIFAR10 dataset into 10 classes, so 10 final output classes\n", + " self.dropout = nn.Dropout(p=0.5)\n", + "\n", + " def forward(self, x):\n", + " x = self.pool(F.relu(self.conv1(x))) \n", + " x = self.pool(F.relu(self.conv2(x))) \n", + " x = self.pool(F.relu(self.conv3(x))) \n", + " x = x.view(-1, 64 * 4 * 4) # reshape the output of third convolutional layer into a vector\n", + " x = self.dropout(F.relu(self.fc1(x)))\n", + " x = self.dropout(F.relu(self.fc2(x)))\n", + " x = self.fc3(x)\n", + " return x\n", + "\n", + "\n", + "# create a complete CNN\n", + "model = NewNet()\n", + "print(model)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. New model training" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch: 0 \tTraining Loss: 45.826931 \tValidation Loss: 44.174282\n", + "Validation loss decreased (inf --> 44.174282). Saving model ...\n", + "Epoch: 1 \tTraining Loss: 40.520748 \tValidation Loss: 36.159333\n", + "Validation loss decreased (44.174282 --> 36.159333). Saving model ...\n", + "Epoch: 2 \tTraining Loss: 35.712979 \tValidation Loss: 32.427382\n", + "Validation loss decreased (36.159333 --> 32.427382). Saving model ...\n", + "Epoch: 3 \tTraining Loss: 32.764083 \tValidation Loss: 29.844782\n", + "Validation loss decreased (32.427382 --> 29.844782). Saving model ...\n", + "Epoch: 4 \tTraining Loss: 30.879695 \tValidation Loss: 27.948342\n", + "Validation loss decreased (29.844782 --> 27.948342). Saving model ...\n", + "Epoch: 5 \tTraining Loss: 29.150523 \tValidation Loss: 27.071934\n", + "Validation loss decreased (27.948342 --> 27.071934). Saving model ...\n", + "Epoch: 6 \tTraining Loss: 27.658205 \tValidation Loss: 25.440916\n", + "Validation loss decreased (27.071934 --> 25.440916). Saving model ...\n", + "Epoch: 7 \tTraining Loss: 26.286160 \tValidation Loss: 24.876248\n", + "Validation loss decreased (25.440916 --> 24.876248). Saving model ...\n", + "Epoch: 8 \tTraining Loss: 24.907383 \tValidation Loss: 22.678210\n", + "Validation loss decreased (24.876248 --> 22.678210). Saving model ...\n", + "Epoch: 9 \tTraining Loss: 23.764845 \tValidation Loss: 21.806124\n", + "Validation loss decreased (22.678210 --> 21.806124). Saving model ...\n", + "Epoch: 10 \tTraining Loss: 22.622246 \tValidation Loss: 20.644137\n", + "Validation loss decreased (21.806124 --> 20.644137). Saving model ...\n", + "Epoch: 11 \tTraining Loss: 21.655865 \tValidation Loss: 19.787687\n", + "Validation loss decreased (20.644137 --> 19.787687). Saving model ...\n", + "Epoch: 12 \tTraining Loss: 20.642668 \tValidation Loss: 19.097233\n", + "Validation loss decreased (19.787687 --> 19.097233). Saving model ...\n", + "Epoch: 13 \tTraining Loss: 19.765453 \tValidation Loss: 18.346761\n", + "Validation loss decreased (19.097233 --> 18.346761). Saving model ...\n", + "Epoch: 14 \tTraining Loss: 18.887776 \tValidation Loss: 17.968003\n", + "Validation loss decreased (18.346761 --> 17.968003). Saving model ...\n", + "Epoch: 15 \tTraining Loss: 18.183972 \tValidation Loss: 17.411004\n", + "Validation loss decreased (17.968003 --> 17.411004). Saving model ...\n", + "Epoch: 16 \tTraining Loss: 17.510276 \tValidation Loss: 17.365755\n", + "Validation loss decreased (17.411004 --> 17.365755). Saving model ...\n", + "Epoch: 17 \tTraining Loss: 16.788606 \tValidation Loss: 16.609059\n", + "Validation loss decreased (17.365755 --> 16.609059). Saving model ...\n", + "Epoch: 18 \tTraining Loss: 16.158192 \tValidation Loss: 16.423296\n", + "Validation loss decreased (16.609059 --> 16.423296). Saving model ...\n", + "Epoch: 19 \tTraining Loss: 15.521866 \tValidation Loss: 16.143898\n", + "Validation loss decreased (16.423296 --> 16.143898). Saving model ...\n", + "Epoch: 20 \tTraining Loss: 14.844376 \tValidation Loss: 16.076946\n", + "Validation loss decreased (16.143898 --> 16.076946). Saving model ...\n", + "Epoch: 21 \tTraining Loss: 14.292540 \tValidation Loss: 16.009578\n", + "Validation loss decreased (16.076946 --> 16.009578). Saving model ...\n", + "Epoch: 22 \tTraining Loss: 13.765445 \tValidation Loss: 16.065225\n", + "Epoch: 23 \tTraining Loss: 13.127047 \tValidation Loss: 15.611544\n", + "Validation loss decreased (16.009578 --> 15.611544). Saving model ...\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32md:\\ECL\\3A\\MOD\\IA\\TD1\\gitlab_repo\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 27\u001b[0m line \u001b[0;36m2\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=25'>26</a>\u001b[0m loss \u001b[39m=\u001b[39m criterion(output, target)\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=26'>27</a>\u001b[0m \u001b[39m# Backward pass: compute gradient of the loss with respect to model parameters\u001b[39;00m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=27'>28</a>\u001b[0m loss\u001b[39m.\u001b[39;49mbackward()\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=28'>29</a>\u001b[0m \u001b[39m# Perform a single optimization step (parameter update)\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=29'>30</a>\u001b[0m optimizer\u001b[39m.\u001b[39mstep()\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\_tensor.py:488\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m 478\u001b[0m \u001b[39mif\u001b[39;00m has_torch_function_unary(\u001b[39mself\u001b[39m):\n\u001b[0;32m 479\u001b[0m \u001b[39mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m 480\u001b[0m Tensor\u001b[39m.\u001b[39mbackward,\n\u001b[0;32m 481\u001b[0m (\u001b[39mself\u001b[39m,),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 486\u001b[0m inputs\u001b[39m=\u001b[39minputs,\n\u001b[0;32m 487\u001b[0m )\n\u001b[1;32m--> 488\u001b[0m torch\u001b[39m.\u001b[39;49mautograd\u001b[39m.\u001b[39;49mbackward(\n\u001b[0;32m 489\u001b[0m \u001b[39mself\u001b[39;49m, gradient, retain_graph, create_graph, inputs\u001b[39m=\u001b[39;49minputs\n\u001b[0;32m 490\u001b[0m )\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\autograd\\__init__.py:197\u001b[0m, in \u001b[0;36mbackward\u001b[1;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[0;32m 192\u001b[0m retain_graph \u001b[39m=\u001b[39m create_graph\n\u001b[0;32m 194\u001b[0m \u001b[39m# The reason we repeat same the comment below is that\u001b[39;00m\n\u001b[0;32m 195\u001b[0m \u001b[39m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m 196\u001b[0m \u001b[39m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 197\u001b[0m Variable\u001b[39m.\u001b[39;49m_execution_engine\u001b[39m.\u001b[39;49mrun_backward( \u001b[39m# Calls into the C++ engine to run the backward pass\u001b[39;49;00m\n\u001b[0;32m 198\u001b[0m tensors, grad_tensors_, retain_graph, create_graph, inputs,\n\u001b[0;32m 199\u001b[0m allow_unreachable\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, accumulate_grad\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "model = NewNet()\n", + "\n", + "criterion = nn.CrossEntropyLoss() # specify loss function\n", + "optimizer = optim.SGD(model.parameters(), lr=0.01) # specify optimizer\n", + "\n", + "n_epochs = 30 # number of epochs to train the model\n", + "train_loss_list = [] # list to store loss to visualize\n", + "valid_loss_min = np.Inf # track change in validation loss\n", + "\n", + "for epoch in range(n_epochs):\n", + " # Keep track of training and validation loss\n", + " train_loss = 0.0\n", + " valid_loss = 0.0\n", + "\n", + " # Train the model\n", + " model.train()\n", + " for data, target in train_loader:\n", + " # Move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # Clear the gradients of all optimized variables\n", + " optimizer.zero_grad()\n", + " # Forward pass: compute predicted outputs by passing inputs to the model\n", + " output = model(data)\n", + " # Calculate the batch loss\n", + " loss = criterion(output, target)\n", + " # Backward pass: compute gradient of the loss with respect to model parameters\n", + " loss.backward()\n", + " # Perform a single optimization step (parameter update)\n", + " optimizer.step()\n", + " # Update training loss\n", + " train_loss += loss.item() * data.size(0)\n", + "\n", + " # Validate the model\n", + " model.eval()\n", + " for data, target in valid_loader:\n", + " # Move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # Forward pass: compute predicted outputs by passing inputs to the model\n", + " output = model(data)\n", + " # Calculate the batch loss\n", + " loss = criterion(output, target)\n", + " # Update average validation loss\n", + " valid_loss += loss.item() * data.size(0)\n", + "\n", + " # Calculate average losses\n", + " train_loss = train_loss / len(train_loader)\n", + " valid_loss = valid_loss / len(valid_loader)\n", + " train_loss_list.append(train_loss)\n", + "\n", + " # Print training/validation statistics\n", + " print(\n", + " \"Epoch: {} \\tTraining Loss: {:.6f} \\tValidation Loss: {:.6f}\".format(\n", + " epoch, train_loss, valid_loss\n", + " )\n", + " )\n", + "\n", + " # Save model if validation loss has decreased\n", + " if valid_loss <= valid_loss_min:\n", + " print(\n", + " \"Validation loss decreased ({:.6f} --> {:.6f}). Saving model ...\".format(\n", + " valid_loss_min, valid_loss\n", + " )\n", + " )\n", + " torch.save(model.state_dict(), \"new_model_cifar.pt\")\n", + " valid_loss_min = valid_loss" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.load_state_dict(torch.load(\"./new_model_cifar.pt\"))\n", + "\n", + "# track test loss\n", + "test_loss = 0.0\n", + "class_correct = list(0.0 for i in range(10))\n", + "class_total = list(0.0 for i in range(10))\n", + "\n", + "model.eval()\n", + "# iterate over test data\n", + "for data, target in test_loader:\n", + " # move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # forward pass: compute predicted outputs by passing inputs to the model\n", + " output = model(data)\n", + " # calculate the batch loss\n", + " loss = criterion(output, target)\n", + " # update test loss\n", + " test_loss += loss.item() * data.size(0)\n", + " # convert output probabilities to predicted class\n", + " _, pred = torch.max(output, 1)\n", + " # compare predictions to true label\n", + " correct_tensor = pred.eq(target.data.view_as(pred))\n", + " correct = (\n", + " np.squeeze(correct_tensor.numpy())\n", + " if not train_on_gpu\n", + " else np.squeeze(correct_tensor.cpu().numpy())\n", + " )\n", + " # calculate test accuracy for each object class\n", + " for i in range(batch_size):\n", + " label = target.data[i]\n", + " class_correct[label] += correct[i].item()\n", + " class_total[label] += 1\n", + "\n", + "# average test loss\n", + "test_loss = test_loss / len(test_loader)\n", + "print(\"Test Loss: {:.6f}\\n\".format(test_loss))\n", + "\n", + "for i in range(10):\n", + " if class_total[i] > 0:\n", + " print(\n", + " \"Test Accuracy of %5s: %2d%% (%2d/%2d)\"\n", + " % (\n", + " classes[i],\n", + " 100 * class_correct[i] / class_total[i],\n", + " np.sum(class_correct[i]),\n", + " np.sum(class_total[i]),\n", + " )\n", + " )\n", + " else:\n", + " print(\"Test Accuracy of %5s: N/A (no training examples)\" % (classes[i]))\n", + "\n", + "print(\n", + " \"\\nTest Accuracy (Overall): %2d%% (%2d/%2d)\"\n", + " % (\n", + " 100.0 * np.sum(class_correct) / np.sum(class_total),\n", + " np.sum(class_correct),\n", + " np.sum(class_total),\n", + " )\n", + ")" + ] + }, { "cell_type": "markdown", "id": "bc381cf4", @@ -940,7 +1459,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.9.13" }, "vscode": { "interpreter": { diff --git a/results/model1_accuracy.PNG b/results/model1_accuracy.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4f276f5f7f37b8f41ce3599bd024b8adbe375ac9 GIT binary patch literal 22286 zcmeAS@N?(olHy`uVBq!ia0y~yVBEyOz!<^7#=yW}wx;q20|NtNage(c!@6@aFBupZ zSkfJR9T^xl_H+M9WMyDr;4JWnEM{O3Dgj}}duj3&3=Cn5JzX3_D&pSGwVkGN^iuA9 zk9PqQEY2BkFR$x6Cn0b#FMH|2tt}x!LR^y{uD!d4x&87pIk|~}k&;u@-b|JJmt6Kn z{g5&Ds$c*AKDYn>b93gbWtr=|<Wqbvo19(xvUyGBtYte*YA2ZbUN)J&jDORz%vsMa zeQ~^I;(Iw}R=eGaf4}el|M&Cv`~ClaKJK@l_SyHciSOph356YhJ|35Mw#cw3ShaV1 z(KW|!f4|@V|MPbK{=Yv@>+hfPS)McL%day@*KS3BUSxGreW%*<t5Fl~$JhV;dj9>s z-|ym!S53`Ht=~AWc2;@azn{<RZ#JDderi_q=Zhw1Yj1w-_2HjbefLG}gtyH<Y}}se zKfcyJd4Aomm(TW`n8wHP^~4K<&-`wc6GE#h-?!h);t#V5(oQ&@+go(a<m}_3UyjfC zwItT2-nstt@X_Z&H9OYoev?V5nsD;^i$<Hv`cJ~M|1{3oFyFK~`8LyBIp%-y@$viP z-k<b7x<Wq1y!g@U#_v6u`=q?(mFII-uKCovEYO#A+xBZFzMn1TR89Ce;Y0iJ7mks( z8gX%P`zl`)^zMz8f2S<#Svq5bx_pQBFYWm~g>U(@0^&aIU0SF=HEiRo>4J-YY4lfW z{8Vi6pFdsfT83?cbo8z5SDTgIHrM3TCd_!cCUe&D$6K0nzA1caPWbA`^4;cy+ppsH ztN!i1_4UJk(=hj_&y9LvpNy2Vxo;f0|NQ*?{kM*>Kc30IcJex{c&i^j1XujgP%C;` zad(x}$$fQmW|fLXTV~IC_R-?4!fLs!0NVvO&L3XB>2XMP|AtQoj<L_uihuK&{dQN~ zPnny0*sWyT`QIAz8{M3wAGh<GW7yLR>-S!}nf|W*bxY-X_jl#GD~%Itrfpu9Dc66Q z&&Za+?a5)A>*4%;)$%Ee+f{%6S;(XPYpVX*nYKOW-F~GRu78r+R<tbNCr<s3c6w;u z$4J?ftLDohb6c*T_-*o6<Jqb>ZLr%aKIf-I|2S+XuUEC>C-Wx`ZT>ei|J6uX8UO7| zvYfPduK;(I+pME&*>CEoJ$>{4-~0cknw5*SbYGmS+C1Iz+K(NFrLH&reHAe2*_Vy8 zppM&gkvXY#;@z9epWCjn+2Fn}%;e0cM`wy!{=QP&H{F*1$<#d_#;+sZ7i*VJo+o*! zYwnf3lcLvt-23Bev+n}U<eQVB#uz2+sj9HBafo=%&tt3edBcSLuM~H&+eW1GJ0GZj zmEQk5{_6R|hL2aiX@2x1ao5tqWB1rUdBt5=!_5BMQh)xeV4Y~G4>Pk@*`)o`j+k7z zwq!||{OwD(K`HZ<Bip|R!i(9bt^e5Gy}14Dsat|mc_(gM^6wSn_Eq+|XXQ>r?KU@C zcx#8fd*Qhv#+UIM&u!U!Ja>%@*Ne!Lxxdza>HiaI`SC|s@imjP$(vs*WY1cbIm>-9 zTCTM_0TTAU%pQ5!#J4!}7g(8|FL7CZ=xM$)6;z;{2Nx~&|9(8q2bCv9ZzXr^m#_b` zF{W7T|KIoZ|Nnr>r#|leKh|F}yZ^1}`g2f`_IdmLy4^d?Z~R|Tsu1_9b>GTo@|;&+ z>At@jUGbvXhrexm9fRq2M{{O=4Y`o3vo?Qhe`@>t#q{{P${Xx27C&hBk+VpD(qDCd z_q%EZw-wLiCc2+{{>)MBqw>8^!bfki&rI5RYWafxwpTw_%zt(6i6o!V)!_3@T5+Ei zRDP(wDgUJBH8bD){JrksRlfIsEm`}k!SwR{H<8-4i%mBz{iCw7c8dO^>$7I=y<&Gt z`tkN_&vb8m?d?%p8tH!0V)ojk_pEp0_tpHAI&5s?Bj3CE_0JO*vgLm&DDS(;?0cT; zeB-P2)&1dTU;kb1KYyRyg8aSq+duW!%H3ET7jseHWZ(0h9lfs}xbW|)`}K19`p;9( zo{A6cms$Ny)9<<xZz%7oJvL0s<x{+xz@=#Ar6N7cPYPGmCB8k%4&!)sH$L>jAD1b< zC+Eprmb>}6X4OeIyRBiLuSy-P*y?8%B!1%miDx}m;%<H~b$>NIr9WkU>b?)%_3_L{ zy5r;)?3?%f75`P=y^Bp3TQJ(@DWCkUlDlxKVVv!?Q_r&2DE!@irD3nJ{DM7cbsesc zPp!^QyRVb4osfPlJ^J&8Mf0<t+WpRNdvvV5fAQ<DU%$rhT=~Xmnx&WQVu{UVi=+A; zv46XB%Q?OHm808-c~b%ncbrq%yJt_$<THVWeGR-nkLbO>Jpa+@L!VxrSRd-q&%OIU zsB+u4PRj9T0Q2d1yP8#QC;w#h-sjQ&rG0zC*67yS%>F$mrX{8Mx<1Qbt=VP&=Ry9J z>1$+<s{LIM<F)xsCC`)THrm&BmCZhI@1l&=iskE4PZuwok+#b%dCmGqQ{{8|ing}q z<h+$XYQMTQ>D;|L+#jp;CQmd=5B;w*Pf)vh)vjMVs+<xg@6vjw#U5AxcKxF%{MSOa zN@Q01`&pkz<NUVhY>rC0so4X6yYQ`HYhJCF()@es+O=I=Z&~jdZ(9_<E%yJsSr*E3 zr}A5Dp2xY*s6T0%_?B>Uoo`d3k3QbnHZ%7A{9@4?MY5+tpBcOjt2JBwT;pEol<xEM z?d!ib>OM5nj-620HS?Km&draN1%K}yU;S%qAAffqxBRL=rTbUs1k5XrE#=?I_Eq_J zjPteLpIYIY*30Ks`OVq#|K6Ok2@`L;TDDH;d|g-U&B9fC-2()JoyC%tTCAS6O4`xt zip;6!7u!7cYX531UH3L)UgUf8t-+a=tLKS^?qmJ;q5J=w<og+ZDR+<P%)1)ZvBh-L z+p@;*JwIo~OfTN95IfVj=<(hKrR#hv*HpE=4*dJgU{&b3<!twim({NRHS_tdsPL!t zA=h2Z?&$sax5hqs6?gKd_mB6fe;2m4`>6YWvCXerS^q#z6qI0<o!EN%Yv`e{?tQJ| zmyX9=*D+hZDKt>jYPPdo<M*iWg)tT99IC^=IzJP&)s~tRsdr)G$L04IYxK|TzSwJe z+4Id}%Za7Jn=3l%rv*O?wm)(0#J1bAPaS1ez7)GOb?1s-{@F{}*Zy1U_}XUwzULkP z0@oJZEA3iyv#ai#L0{~4(^r-yYmb;-()7J*uJ(Op#1FP-zxMe3i+jB^Tf4s}yl}sG z{=eQF?wd;jjWV^O?wzT2TtCb3W5lKzqN``Ea!N1O_!c^U=JzYR7s)@F{<X?J>xSg! zS>aLVRxB@?u`S*FnveQ#w_>H&YH1(OWF3t8<rA%ZJ1=}|@|o*<R2Rpr$y)hp$&4@c zIzpS@ES<0G_Unkx^5<sHU0$t!)VS*Twk?)Xv#m_eZPu<ny!FF8Q%V1<19f)niPvr$ zbp76I@mAqBSIw~#d1`+-jHQ2kPTHV0TYutSEq1@qj3VdD9^H@Pc2;V|W_;MI{fjl~ z!t(1=ZBJ@!U;Ht;%0;6+lR187{=r*;abZPfUFpw^vz1e{f2$W8p9;Mt`%|*<nO6Pk z2kiAL>!&EYSJ(DlXWOta>Vfj#9K%b`LoB0jZeM!;de~mWsA$7i!Vwqy`&ZQm9hUp+ zxAdW{<y!^jW81l0lOmpT23-2AHer9H)Akvr{Ka*_t1B<b$3L#MxBBbAbnW;5tuwZj zzWpt7Kg>BJ|6TH#@9SQD-+DvhYB8%xYTd@^QVykIetink>t=pG68MwlPjA(NOY=3t z<MLmAFl6@)jSaQF{%Y^SJ3U2H%U0L)eApKmY421OEB(#wXS>((FB<KqjLTNfS$}Ar zsBYfu?>&akvyW<=?^?L3^Y-;!SNCZD%c@P?f2zLkY{|}ltM;Aqxm{iO%8^aQ(|qX% zl}4dg+1n;<+q8{o?aTNO*1(>3=ehMmawht+%;SFcb+^|h^?2o4zh|QVLvvRDYW%w? z^z8acx7<Fic(?u6={t|*_ppWbb6!7gcWvXnT8mJAr(+W<3uZ{)bUx2-|L4Q{J3U3A zS8GD$J(5kgvwz#YUe`CYuk&a&Ti*5er)}4KiTvjND&nI4s%pL3^%+uE1ApAp{p<97 z#|JwR?O(Fb(tcL(m&vA_J-(=Fg30|w>^@%wGUO(^zs{{v=l`v}$oc(?_MYvF_&2F9 zl|T2oWZk;<eH(2KF@IP7%5P|MYrEl#<~N)dm#^yo!1+<`i({GZ55XHRj%S{&n{xhU zzwG^PyA$&`Y$s$MvpaI_W%HX|0h`}_y?wF$zWZKwa@!`w;a`4h{F<HjmwUCTcKz)0 z7pv;-_uj8Q{qxW4>i!?zYqvYeYwr8gEf;hD*YA`kIaBU`Ps`uG$Nb9UGy8Xay1;(( zYS-m67Ztx{@He}^*}R$G=wsk}%|}XQaer-#k9eKgWye&#@#6~lUF*Je-%o#D{8?c! z=by<jMcK_~0yd=IE$MoyYigb>_cgJgZ2sJX(V10CBEE_Tf10WE>EN2*;Xl-?o|SZ* z)=RFc_db8p?JIAS;q@m^iqn?e_nh6eI*L2m@YKB%@=MO2npWkW?Y8U2>uqjzQ~Bdo z|FnJc%WawemCY@4PTn+^-L=2w=O@!P_v#sT%>7>kO63BtM`u=Dk+QhjJoEbtH~Z^V zVlOu&&#~R}tNPtf8-edl?=L!6yZpL)X}_u2XMf$h+xm+GKD-y)w7)7Z{M**^pXVnl z$NnhL-BT3%lkM2|XWJfqY4&04j%3((Zt}EZPP;qTxKz4YHj2mJ)8YL5?)+BHo0n(l zuvHiNRHvN(yt1jkCTs1p)uv4!v+l0=>G03pEPcthQ~TCi2klp>R{5Rtq`P$0-+Oka z_w4fjBWPY-anwBd)5O2qrW#*=Z?*l+lbT0mt1BhG`YT1xYd1b1U$*i5R}bUsFD~zR z&MEyydHts1mObg=6XM=RUbT;Y{<EOOKb<$?_pe{SLiZ=FcxAGwx9sba6YkHRb=1AR zIr)B9Fu&1}9S;JTc7{zd`S$74C*K8&kH|1ef9j0Ax7_~dbkFnkiIUMK3y!zO{uf`g zSFnaRS!>px#M8B>_8p)5^P*IKgXrI>xhHO|J+yC&dt8dQ;pSyZ#ao!{?#kDFc>eW5 z#Ici7MK0^MUE_Lsb*q-%%|mS0ZESwH8%aL5{kP%u&by~1uWw@S^0u?}Ti&I6vrAO^ zN5Gt@_qA#w?d$hX)jD=2e%;zFE7KOotTp;%t6aQeRsEFgb?%ne<^|d=Jhd`Gr`qlH z)y2y4tM-2jw+dyymKtL>U+P=YEyroDf{{mN_NFZLSPif4yJpp;W@pE?eq(ws8GTXz z_PTn1-#HV{onoI8d7dSH-tme0*DBAYWgpd8-}C%z-`_Q>*GHe7dHZweo7Gz!M5B$m zOHJDS&##rp+|#PHZ{oT$GmS6pnLc%n)umTo?=GHS`=#qxN$gec&(Xi!Dud?#+Og%; z@rgH%mtS+K{Q2kS=lhk{W^6g3pM9ynng8aBXW^i(WK-*^jyK<vdL>K`#7((y<$<Ss zuj=Yqs~&l<7sqJNkG6APa!>T{0juj}Cg<14-%Xi1ZS$+hi9h9jS}oH4th#4j9`o%V z6XcIgQLlf$?ZDPvleO>8TN-wkesM_Dt-kU4ar)vKq4s|5`73)%uNJ$Mt&;ezus^e& zEj##m+}~A##hdqN``P-tWyJnE`D4$&yxXtm+tu=yU8&!fuHB#h<$5N&B;&*%f;U5U z#&s5kT!@z5<Ry~4E?fKNqD`R>S+7NyHP)>9fv>*j{%-!MbzM)XclcKJCC!!F7e;09 zC%<?s8dhX>$>g%trI$Hx&(G<a_{?}AzkA)3;OkHBOVzCX<RG{8c}LyPBXOqlHMXy0 z5BvIgo@MV!wW(}bFKq1({l0SC*6zXHD);IO3+K7&ufJz~#=AM^$M!8>7T5N@xqm4h zT>a~B5Er>3F>i<Rg7CAGD|ED4x*|8OI?27pFrROo=<ikM&s4vPy~zLRbk*MTch(!M zu3Y-Gr%J0m)B3aRr&5>e8tdcyw=bNN#h?5|YW;>un<p;2`qxrDZDW{iwf+?Eq!rJ! zS4G&^-<V{Zbo-R=BCB;-Nq6V{Sy~tOa`GPWonikoa{9ML=1HD@uCT*wZ+Kj-?C&Yz zFVEQgu6<P9dVS5T_=j7Xb-FjTPrSR9WsSk+M*Do5YdNYV*F^ZX-7!m9to2T(#^};h zUz6zYMzJq1zj_Gw7FkQ}U+UgcG{fw})1T{VJj0(=F9}ard}?+7?)_`DlP~R=wK;Iz zru5>x)zjU|8aHa46Wp}5RDX@bo$4CqYMZ$83$qr~2;J7mHx4V}I@S7T?Sx-D*Hz8V zuFpHLrmyo;(ACV4;u_8PQ>pL1*A&}cGWn!<C){-Zp-gs313O`!j?}s4Z9)%PnSSn8 zJrOB1^YgL5#7p!4$JaNU%h5r!4Cb2`w|;wOcdX|9s=D~@-ay-Mhu~-8)hii8(w{!z z*z|B#rN7L(;E$PekI()YW~Y7DF8*oMH`{G7>wjs!n>r_Sr<XOSSxoZLHEfq`PdPiu z%>1sLqPJb*rAz<ue%qTdCw*BfPep|$)SL1v|6SGl`pT_U@nMf=J`MkNH|%P<W!T&1 zGtEhtHfu}Xym@*hyX1<Ub46A@sOeQd8z>ldE$j?eoM?pMuKlYxwAP$h#&VwZ^L)G7 zUs=)Lo@6gMe{#>G{av}C_8a22t@;@nbX!C2>ff;Xnbm)suPOZQsa>=BOYYa3VR5!* zYp2S;EUk{VT>U3e-aab$X5o_cUA`f;tM?WBkrV9NIqP<F(uY4PD^C{lhxXaN(>f=b zqWsrVyYj{*{Y~kLTi0iNx}k03AG$ttYe1jtw>1&HqJQ?Sd=`GQbb_fox752Ay!TAb zGx0xq<$R?2p!5I5cedL!yRko#`=wAF6lQnT)c5oGy+y~EzlVK!oB8eSd#xAJ_txG& zwt#<=x{LW?<vTNci&@Y8GR*oce(HIo{F2`a)k=S!KdbF9J!@xossGD8X*+>AKNl|G zM;(l`BX(G$+;xA?-e22q^lkc{zvJb4o;iPim!|*K-C6A*8#4Kito*wCvuBn6%UzrL ziY5KO+_kHfFPh(EoxOVIqGDNpd!&5IZwK|#hga_#x0fYd_$qj#yVw2i<ct?qyT9e1 zT>Sj=y&SoeT?gIo+<IUfvSza!6QnWluJZHTyVmYIm-GEUtsC0+ljZ&Qb@dAz=C4a_ zH{82_Y1*cZUwNHgyZtKtZ#6UgY4m69@4v!&PTlsYf3|JY)LS1q-^Uz}+iv=4bxjK2 zyos^*PkiaDTCI5g(VKP#XgeS}@60oa?=>s#U%uW`{pv&e%J19XMgKpx(9qWB;>qf` zzqV$z_XRH)Rb^N!|2<$@=`y+hXY-xXY+keC_(T7)cpu+*e*g1fy=^seM*aKFC!g4u zCBGytZs)oh=EvGQ|Gt=0H(_N$QW!)0bJz1bS>*GwS-E@<-t1m~^Xy7#mmOw`)lrkr z9)WfD6W!t6{k)RT4S)J`&Uw6@S{q-!q^`O!{+@s2_o;PvgVnFz$aNCkoD*vIT`9Wi z#jbUM_jabusa$94|0Z1~dX~M@w?7>->(1|gAGuL?_hM7!+i$9CYyZA-u3Kf5%E$We z#^HORe=qF{RZrL6m;Ufdb5BauA$Q&bTf5e5oIZVeK9{N18^H~V^KU$@{S{nu)8wbV zPIC9`yN?g8`_Fyx-idu}hNg3o>-+~;>iiP1AIHpA_+6Uxmt*t2xV6HM&s6)GO#8|9 z^xZX?9pBy<t|(!=u6%!U&6~y@w&|kLzfAe}T>qi7JxQec-1(d{zuGolS^D)=??ir+ zjc&hJS80@83pMO1`kXVTY(gk6$ITPQ(kHzpuWhpb8FMvi<Es5xr@m-MN59tEB3^O+ zMpxa<vcJ_?k9tbN>>iw{%2SMA$+$MOFU>Myt#I{TIfL%XC58Gwrf&=M-SI3@BYv0M z)kC>qpI3)idWL<`4v*SC%lgsnu43=`CQH|^N?&q%f8?XthR?S6L27Qp)OAm$o4!15 zxjHQT*_P%tT4F0U-1B(zeRh`1*6$oy9akRs8cTVHnTDQKmEGkz^}OzU<)HUnbqRB` zt!JfQ>z5M(Ropudow)9?Ijb>G{`=0zyv^GltxfjZuPm#ed*r<K^_^@fkHgMxp3`Of zE0zCmz}mtT?h5-^@mnVsrqtY+sK4D;ZtD9lFRTB|`)C_o`DN?XKgI>O9NiqRB#2f9 zKdBPEcCokoHE*csEW_(tuj+s*Xx>#DbCQ0Be9nq(EqZ9l{5JL~|IF|&Ycf32b~?Bp zn_qW-(!})_f9TZDn*CHGTl=0>+LvAHCi1O&Dc-xe|Fu@!%_Cy#*GONjJf^ceDRlp* z6<ePO$KFhKDofk7(eT#$6Jf_5emwi=0Ke6bY18%|*kf{{t=`+){?_vo|L*;&QMva= z`li^Xm*z7AK36^LZ-{#nUZInvVw!w(m0Es4Z)I`u+8g1uY4?KPchyaZzxKNJSzT-7 zS#90)tHrGo*H274-`W2==Gfzu+@sOQVvYvAOpx6>@79jAJ6m`97A>sVP$pJ?RA>2y zRq@F$<9GW0{xo}IXtvuenV;*g8BIGc_+i)U+GAXAf@4;>AG3U=8~F6&O^de*pAS8~ zBc{ANnl&adjk*5J#<uKhIi^R}tdz~!nX6#_&mr*6%^fE_rr&4TTq>I3I6toc4$I;@ zeaG@&PTbp5lX~{(n(g7QOm3b3`l3;*cj|f3lxj9phI`A|)@^OeUO)TMMVai?dvY6( z1>Ot$+W$#qZ(jVao6%2W-n?}Ex$@PKx;F{uk6&C{(_3};^VzQ+mrt}8#6#kbt>?TD zpUUjgdpEQeaA`exKTYZEtOm>c3e&J(r~hXQ&fRs=<XF}J{bHB5t*f2?i21zxqP;u& z4e#$>b^m%&a>#kn3sZg`jmu)V8fjVStrdSN`Dwi6+M<n7%g?Z0f08I-{Q1SoqEeBo zp?jH5wZ0DbS$X~X1n#HJ*Vq2g?zml>6ZmrdmZne3w?>(-+PGO=E;H(F@2c}fYi_as z_)r({)<*u^iF2Dl9qlYV^~q}<{g@T_cx5N3GL_nv6>#*$zg22M$z1t%4|gW~yS&^# zKKFUA`K9M6aUbK4Zd)aPLqGcJAFY+SBK@!GR__;GWfQ_5@^pcdRcf}#^vB;S*2}F< z3bTutUhF<`|C-9u^Offp^&4K-jNVzsuWYOA_Ih>IvbduG54Xl&e6lfo$9=Ea=ew_% zzgqt0<jix`_k#P+tZQELGos+IOs#|ISuLB6)%=3*S^59=U;2LMu(tdLJFD6Wwwl`W zy=Fh-xsu)g;lS1H%Z>N5?ic^n_Wcd4&MdB<l>P2#^dE_@GXw2@H@}Gg;`q(w$N9g% z1+w3rb^kT-UiD%2rhfq+_;JkR5v)3QYX3@ob9KM!^*j8p7R-9`UZb$~^?NzHPwywj zzRef=_I~2u+3j{Ge(@*O>6CQTK8f$Tsy{dWZNalRXY=*{=2^bmAN@Z}sapQ0e&B-F zUiB&uE`F}eH{&;&b;I6PeY@EY9?{opnte9zS^6yPjPaeC?{+6v{Vx9E@Jx8m`p>_+ zzW-`iC?R33EO&FoKF2o~=V!a$_b@uA`xeqsUh^a5e|GPuxvvo&<@BWM=0>%P=81ms zIcIm`!r!N-r>{4>Q<Q9W++z2<{u7e?|Dq?<+w+v%{}oZU;=!z1P#0P9emP4`kK8TK zrScmZ<4g);k1jF%zO?=C8o4!vx9!fw{j;^t2|K?xbiQTSTjrV_VsSg=Y>OrRrO%&u z$v%@yEsga<Y224N-X9)r3%kI3D6Zxw?*xPQ|6*oOuw8pHEy=$xv;R${-PH}s^P^V( z%<4_p6J@@u5~ZKKJ#C7y`tM8C*5B2q?p@n{CGf*j(-YZ^@$%n)+-SCYR{6EI`hc0) zsvqu4?gid|5xKZ9E^>O6`^UpCX14WSzkYpvwTN@*a?$z9@|#xQIrC^uO~bc0C*Qk2 zf!B<sX4g)iK5gDACHjry#svR2pX~l>?#r3=M||4Gqr6WF6R-boeevp9pxu>{Pwl$j zHGj*MKXcFC(-{6Ge4AqScCO!-<SHlX9z8Rw>&(Tyk!vjrt9s6CRIj$qwsGERZOwk8 zbasY{ThiCkBgU(Cewy_0ZR)dRmsj#PPsD^5X7N^j`^9;6<1FD#flrf;K0nd^YW-hH z^A&t+g6H%-3qHKL@Rs8=U)4>V>1LCrsztNbf7-cfYf@<a)hRE-w{5!?nxX$;-bT^C zo8JEVe&vYd%QZCzW`4Elo;s&jVW09=;Zw)&?KwZe_xt(ZS2&N@RUPR6_NMj59{24l zzV!b(_Iu5%#J89G*;dao*tYci-yc6#onLi)%JlQ|?f=hB@Ad5dvq|l*Mf%lOr{<JR z=#}FL72Y&oIwM3P@U3l=l#*%1<(^}cLVZJvJ=^m%o)({e-T@kFjd*^m@7c_+i`f&G zK3!8a?_}0Ft+1>b{wd*Efp^1aeJ^~u=GF3@(XU<nPUgPy-1g<P-?LezQS<lhF<U&V z=a}$X>6f=YdCGP6TU=iL{$O9##qT*!FJ2G(eEvWtyCiF%a@Z5!iLXN=+<EIrtN~}+ zS_Z#0`X6mt$KRp;deYx!w|%A|Uz6=C6~*Er?N@#7vHe-9^>>r%-v{@r?o9u(dcM2q zLjKKlqPON3uK9JPc2Q0Be`9^#O%Ly1y43&8a`W#Gk>DBF6KcIPd)wCP{1LqH+PvZM z#uXE<^oXvWwa3x)+1ayOlj6V5tn}Zj{mZc~a{c$2zeUqb*Ke5<dfqtl<jhyoUWaA< zkz13s;!CyfN#2aNVe^E(PRm)dX_ftNPWwv#@Yf0bW-nJ>TleEi_0y}@H~Lqq#^t2W z+y3dH>FQ_m8!z*1S``^4c{4Wmg`~0ckK{hnn9XUc71Mm*CY;V?-nlSvscT{SV>RX2 zI^i?dLKm>sR@oK__dt4=_qwLeS(&$T_TI?HH*F_r$ZKbRH#oIldG5Yr-=FUJbtE}f zvAU#H^zVT^x80IMy{|3(X1iCzHgs-SO<$GLW0_2;p8}yZ=Z}H=jNTR#a;{Y-uWry< zF=2mnmq|9$vp<YWk9pPq@i_2(@nwFMguVacyECJ&@ALoo^K8UIoOK#YSdrS@dFuBj z@7D5r=4ShRMZcD`d*sgaRTT`j_x#Uf^RADsjdENYUZfcIrT<#SozhqLPR_e6%y0K$ z>dz)<u~QMVYU;bcDJjoyT6|StzB|WHE%N9`)0-JizFRhJOS-lpv{}pTd${RDso*ER ztn;{^+1LL1a&_CAlh-}wPp&*#FM4}bUBdpH(9f%vYzwqm^?U8Vb7`vSk@?RSuKJzD z>&AXc&glEp^?TY^HM@SS%&mzRea^Kh@F>6bFUP%B(afRmHs9Z7;`mIbaJIIcqovs5 z-zlbH6<4ZX-FstoVpcz^`I(FCA(z)2YTjXGbDvx8m;BQAJKNpa9~oa{zd3o+r<GeW z&pGV<#=##`TfOUP^oPX@@+;2&%jNl{Q0-J={9S$Lv$#1Qldn9JpK|`6!Y}dK3ATd& zivQaknN|IHV%?JO_dYZ(uowB`OzJFkarhVOoYnPB&wcDJ=^x(5dd1Q7q)cJ$>-9M{ zpZ?d?Z?*q=<^S)$`zv2Gule71<G2(1$!gm(zZ9eo?{$l<`1<`!;s3k8)R*1(ePaKC z?sd`puc|-2__@b?HoK(noB8u5M@!eVb(LOoTo!RJsMz?~-u!+26%%^joxj=6TKoBv z>5Yq~ALc>&cY#m;cGP_pe0^hm;ZM)#oq9LB1n=IM@wN9_$Ej(r+X8!5^-KH=eV4Y; zmV5WUiFbcH7JPGTd#4}2ucr6mH0jNj$8LVTbK2eZ#0kxvYo7_%&-m3mrEp#4*Y8hW zUCY<HlfAh8TioAO3*|oD^Nwb})G?9m*vEzSox5I1zx?=P%lXnL5nK5`JdCP%T6JY} zPk+&GAI$!osb%#?)7_Rc%j?(qo|tzn#dxFo@h$G(Z02X(nCQRuYRy(RgSfTQcWo5@ zE6+9#s!qLsU3TUDz*TXl=7q$X*k9Uz_4XNI`NCcI*VZhVYrEromfb;d+X?^Y?0dFk zrriOx?6BN$jqQu~-C7<0+A^l%X;g9aJ}tNNCSUgK+gG<$b9d-mw_g_*{OPM%5|@+W zV{m%nw>O<Xm5W|Ex*6F%T+H?$%Jtd}thHCW=EkY~MsI%EuX)+~CR-x-@=5t^cb31Y zzB5yP?MJq_i}5$x*4)*4<6Zs4b(@HBww955`ob87_qAtUx4CVpl3V@n%pVQC?Mv@8 z9n+R|+PPbm{YT8&+3SyfKa)RowQ|nO+l%8Z-K}5WJpM21-uJUB-l&AGWlfHZUb}qT z4cVUof4A;m)%ohcE-k&Y%iGdH3v{ly++0CQzb^3UqOQr`=Q*F);a0eef8A<!zUyy} z_w{SbSATwYVtMe-Qxa~oj$Her6<Rkp^zVahtKx!sGS6REIbwO4ebemHRlhuUeR=Hh z=COTs;Km>3kIzg+uFpb`Hm!Pi!@s$gOBpo%>b!(4f7Zo_O{-RB>Ag(o%f_tFTtW5O zx`3b0ZIjOw&iyK})>(ho#rLm`=0)1QYu&Q^-kak$5Bpc{H0?X{m`nNZ%-4J59Oqn7 z$>v%7OFe3OVM@)s;O)I`M<;`ZT{pDH-rqdcJwE!ZJ@aze6p@xT$%(wvUx!AdZ;jl( zg6r&z*SE670&lMRz;-plY-7!;%B}01c7B-C_-);*_A}a5VJ0e@V-_es_TQh+`OkRS znTs0BonCJW7e0D;b^LzuF7Mi~r+Z)dFT7)TT-&hsl})n0ztzh9n}UyqEZqBGFT)$z zrw1<9&Mw@c_teL3OS{B}=4-F^zpj)`QU3osRdm1d@9Ni|CqgSX^KPl|HD<5HUR-rn z{}^$_BkNdKsPEP0L$haRAKmxL`18D~@Gs4OHpRU+{;qu{D=yP=^*rs6f3|t+Hp?l8 zRnIQ{a>e%1?1ek_?CXjQ`O7J%UA?9M>&)}IZu_<u{EZ2Z`u;_ztmwa7?#kndI`fqu z{Q9!*mEt$e^+!6_p4t4T|JRl5Fh~GZOKD5qysPzq3pAU`mVP$O`OK_a2dCX;D{@}! z)&1z)F<-Y`f7E8IUG2dA>r2%WHHoKXCUxHZZ&>dy{<FGlb6r_j>FIx2HJf%nt=C`Y zY_~&hp-tu8DbiO3qGz5L-Q*r#@b}WhS;E)CwuuBktMJ$F%VGGvvDsGs`#<TgGoR0X zJ#pDY{=l!lKn*eMy}13HS0Y~O|6lJ~vg!QSP51t<Ke}aY_Wk8Q4t$=7a|-pI(9fWA zJHqm8?wxttG4<ZGwO4<9IQdH}+&%D4wCU0EU#Vw)b4qVI{5ouY*o5x2dn{M~+L|{l z`>uLu-S;DltCwC<k<VNGs##|BH%7ad^^at}K8JSUc3IB#+0^wo+l_anT2y4TVfKwx zj-rcyub$=6tGR0S(c*)DKx<lVO|$(e^|IJ#{g3rY(O3E3OkbN-H}#5HSNhY3#cFZN zSKDXoy%+FR`FhXqT|L4!VLzjL{p*6y%W3&)|GW9zHahcr_4-%uMN^WmG`oKd-y3pu z<EgjP)IQwMzLQ^iKGe|QS+?8v&UfC1mm{A(l!Od>=FM2lzhYTrD|_MBgAevTSolBi z*SzYA5(PV9%pP3yK301!%pRPiy<6@-$DeQb7u8>6zbX9C{`-69H9O7aU%FSl=auL9 z<$TZ{w)B!<mkn**=CgG#rf&@YKkZKSf%n$7m*$7;5(ia<_X8jOx^~~T=E;5K-M8-R zyt%LZ+nm34LhRa|vn;KS$o-w3H2<T5a@eawtM{kB>#5lwF5UlYy2gdlrS?J}kSoIN zdme_a+018j^wYFivkk*{{#;iv;b(j<<Npl-wcKp`*H^5!-E?%uz57ANH)qr~Uy#b2 zEOz$s{jG=3$QAFqmh8JNY06sLe_GM6>err>a6M-A$=m15`J`&GvRdWKyoTB@X3nXd zu<-Zk>H6`>JDwiP=_@R=z0dU}_NBt*=6wISV*ZVv5}sbYUwr<~FJIR9#qHakeShUH zZF(yGVn)re7591;ch{fi|2y^UtK~emo}ZrqNmHl8Y<kWY{no*(3lU?R-Xx4|=6k+k zUnlv!bmsL{+qI(uZeG51(RNc)&YQED-;{pT9=F&QIeFLjfS-kZuh_r*s(tf4c%7`_ zt>$&0zS}QR=Tz~#p}C#m-w&Q}f0j0-dm{gZd4YBFTZ8$HCcWg8H)Xi4wdq(~T--j* zD=Rj*A84ydn*RNz|HstJPxf!<(akIC=idEK-=$jlx74vKC7-7ATiyJ=!`MFRG4Gy5 z`#14M?hd^%{o9G|9L=<AAt`<De5dl?tJa$metp#riS&7f*EZ|Fw(bf9Rew)znXXa# zd(Xaa%k#avr=LkJ3bB83Pd8q4)y(Vmf$LVqg#6kXS8Mud;je7_>o>VqF~43Fm1$>c zBfVTUWwEsK?Cdn<$jnWlAJpfsj?xbM8tyw2_Y9@6#L>BxGEb)#+Ow>l^<2vR=Z)Fr z4}US*Ctb5X@axK}kc~2o_V*T_)BUx2kC(Chojcb~?EiM=S>l!R>*AAFt*n#jtTjpd zuc1HRzW$%}d8x@_KT~~w6`oslb*klCh1FfGT5HT@erIk7OvD`2JX5%~Chw=r#H#Qw z%&%i^U$oh5C$F~XQc;-g`J^T7*~ex+xB9HQY2MXcTT0bF%{P5un|w+2!f}f;CMWZr zrRu-R{}cAP`fGMf&!gh{Pl0#EXL(z9UQ3mclrM`oUbVe9@2Pd|FS$1!%irHTwRrtn za975N>yhuY32$yziC$Z1Afoa8-BK-+<aODrBVAHgACeA9zIo)+%4b)1aXmd$%yw({ zDtV*zFCs5aI8)Tv*JJ;8pSiNFr1-{=pMkbhi*H&7-B(^xpS~p0<8_Yyx5}mGZRA&L z{5!>dXHopNy~l4%wq;*zm%1lveoskN&C2lV7py;@M@y~0m;Z0h1m6GCrqyjZFM0I4 z&z_&=n{-nq&vxZ!SUCGEcRkCOUx)9*E5LgTq&`1;7PWExuQPj=-xK|-uz$_<-)H`E zfmau;dLG&HB_(F@o;2H=)BkP_>R((TTb#F4e3jhS8ygjGuemFI+UNeYKVARU#EbH$ z*d}_<UToE0@~oI8X7;`1Y#%Hx#((ws78!K(J7^@l@?lY4_r$wvnbv_P4{MMIGEG)( z(Ri10CuPa${HB|`xV9|tU+<pR6qx7!c>9+V(E%?*d~Nz)to`)r@nX4o3v1rooSedc zV3pV-wYsk>o;#aOk^b6wZC%jI+q2@Y&i`w&D)<=Z&hoZTK`$deT6P_Wj$N*JRBh&G zeWKxG<e|ot&F7@USwkFK|J)5)5-DtO{NSQvfyqnv|Jg5g@g=*^21u><TA6(&&Z$8` zkF~qlj)q+I{Q3FL$GX+i`hKlAbye%s%I`^`lU1s@D&GI<bpQCa*Y`pCvZpKRp58b8 zcxr2Z=(j|Fo6xncPlI=UwL8BtOa8&(--%1&d*0YcFPBSkIHWmavS(OfO|SUfK;gA( z*3K}^xw@e1;@?o;CC5bW)f^&F-?^9Wzj}XW%DxWPxmUWcU$k0V8Xda6ODpYZa+&?w z3EzXiB`wvyzG8mt^7p5|u0C;W1$&~m{fh9pTFXP{7TxVq>)(4Qcij(`V>M@A*qw|B zFAD!ztp;8Q)Fl1v1@o$(=2ag;`PDz2Ied)&Sb7utN9CjEo&PWXV!PMWN??Ac-HCZq zrur{EYxOH7=IQ5)a!<aem7TaRU0eN#Va2ocE&CqY{)R3NI(ujSlXJ;mHe6%;{$^*G zoZTVDPaJ3LENqoQ{lKal=j!b4%N+mw`pe;G`mia$FYQhBFYxbAz*$M2jlHO!eE;+J zHTMob7gbb0<^Qiw==%15?;a}umz!C4@P}5t>f-wTH}`G6IF@aFmi6p~!_Mc2-`Li~ z3BEHeI<k6ydf)H<-vQU%6W%NTSLG_XTNQABvitexdvDsD$VmFHG8;Pk2dfX?7k;jN zB3<`ox=V}P8LKm^O;2%uZ{w@Jnd<XC|K$9fC*~cYf7cxSe@$vd(pl4!VLdO7oqHoa z0n|0D3d{yg{!QQ5_vck**|pCfPk|Nzsm;VXw5h$P{rq<|`7_$zbt{wj*Z-Sm8_j-D z?1hBw7VTBdsYlzsRnC!`ebgcUg7T5sk7Y#uRM%yOYiwWV`#Yw-FZ4Hq{JPfgb?#e} zZE|gtm&>PU&6pv2;Cki7V!eayx1$_+&&Ji9m6~1o{rRnyH<`X>!mzbJZL&YFM4b)K zW_f&d*Tu8UpX@hTDsK({R(p5iFWJ=7>K_+{{|}p!wBncY=cun`&zua7#cVAr>6c-h z`|kX2o$FS0_Y<4{K2a-uuUK8zdS(5_z<AEAn5UK7%BM)@fO>~_7fY=Av-XF~&k3<l z*`#lrij)1x@OENv`ctAtHqX988QCOIF`i54_kYR$H0XC|{L`!7GkG7MF?QQ?MA!PN zo%=rb&+Z;?6=dzU9i3<^`sL`neXG7O@4R*D@`~*npOzMdY`*ij$HXx;`t{P(C(d85 z|I>22dhqw<i+?osr9a%#>~r*VO0Z4-6VL*llVJzv*R0E08*w$>H1*fiwQEa7Z*lKQ z&vD(Kv-_W|X`!2ywtPXFZTQVko!{2B-`7~*^ZVYaXFHEg+_txJeq-B}RlgP;p7}Lg z^t7N&|J9nHm)9#^t$*|AeDdR6o75w=FU`Ml{?zLJ)ysYrs(f4hFEGxo{@<VSd8TT* zpH9#E^7z5yo~YQFps}@x1&4n1o~fIai*>lu2)%oFW#g@IQ17Su#wSnR8R@a6{4@0@ zeqD3zVfpEQkskb3t18{MuD*8a+}hHh`t>gwZGUYw`^?+LyQ)%Ade!}oiR*gKzpvc> z)^-A@cUW@%$Go*RphdWn7H<_6D`d^<+M`*tm+N(a1lN@6??K>+zpBfj+qCvLnojf8 znV%K6c6ETBP5OeptA8ne?wTjcds0XI#fcx6-`n2!<oRZ?1Piow{Am?*-#DW4=*p}m zg(k-5v}?B=Uw7m3<PG8WrmnNEi^WS#u3r}_+-@5B$MafbMa`+1uh!W9ILcr6QMWhz z`sqE`X8ty(9S#%w$MNE5UF-2hZb8OjYqCDEU7cZWe!Z*qYWg$Vuj^j0|4iL`Fa2Hk zjH`P<jfn3Xo=)E3ZrBkRw|U-=6aS)C9+&jsj#~Y*ORH?X=C+jnt<}ka`D-(*7R7H3 z{a2~_JTf~cZBBY-GS7TV_1uh$zppU7365K8|9MXBw2HH<ex^Uz(tL({dU15mn>^8i z)|tG243A5#i`;xwVDqxF4Ntc<-np>i(xM%k3nx$1+s~QyTI)iS-Cnt!oNha1d+%RT zcE9;)=Op8AVc9h`W%)f5w%Jy@y;*4+viEuE<vm#|>^|1TDOQ&piTgXD`a|f=gjl(P zQ-4?J%RF7W>hcQn4=ZbWtCZhQ2K5gg?t?gm$F29t1oR=%JqNEs`iFNV)=mHVuU>aq zZtQQnquWatXX9F7`|jYh^Ir8q@Vb(3-^u!^t8GJ~wk6~q>y^8HUh3u@>DdbJqkq~i zvVYGhUu?Z;uH`-9^FH#wH$L9B<Z!j#@l~}A{MT3g`)V<F;@tGdSDJZBimhg*h#tRQ zaZ%Rv;;CC*k%z;0S4rHBzv`0ZGtr!@LT|?P_gW|C)%1R`oEiQneB;_z?B7m@neO+> zl0Le4*Zo)d{Lyw7_kCT^I(1LjUM;Qvm&|t04-5F`ZWy*}liM3#>3y(1;fAI1S5_y5 z7$1F@vPOH>syUYHw!Z4sns&u(m%q`qndiRmSS~j)mOb+G#s_VdzZ$as^~%*;J=|%t zUS^uSsN9i$5qt0i-<NAI9BR}ci(;mly?!ydaO!#Y>IwH}-&Cy6|MIqzdBLpxLTJ52 z>;8*}quB3kejZi%gM<Bqvcc~MUwS~(eJ>KNfB&p0mN~!vGXL!TKRoO&Rp<Y3xFFB< zZy_ZMWoo~CU-M;m)Zg8a&z=23C;yREU6=p&?qT<Twnl%OK8F7Da{DiL6EuAK2D(J% z^x-x9o3=Mr_wM=h>ix{e{~p_2`6_th_lf#Wrr7Xb%8dQ<&R1`)oN)2Tzn7Lfw;oJi z5s@yN0$C(;ZpY7G3abO-O5#7o$&0PZKltFg==-hi+a#=&?{6~v&9>0=lA7+U<NLGQ zC)ysXy*usOT8Y&BW%Wmw|BBBxa+?UQBcGMlgkkA5-pG3QtmfQ`=hvK{OJ0QZ8Mi8~ z2TlCVjNZTULH3sm*Z#!)eWhA27JC23#?H5q`!}#f-#AnF?bG|8iJPn5t^IWd+%nr5 zQfNh>*LZTz@8VpiZ(G!6ciLJmv)%OkXUO3`#PZk|&lrEo-<&h?miF&`?>zptJiqW* z=I5NRk_Bhu{zex@g@0}T-Mni1X1^oecXskk=|6Q&%e{EkUXFR%$2OjwHSwRQmi@WF zzYTHgh0RvgtUeZ6zalP@8D3FZfhx)qcY2BpKQZ1iKJ|Wc0elG6O8WKFr%z`)^>S6S z<eX41tDOH&B;L&TANT1Sr`RRS{>FE#%aeQR?5ke?^T6cVe(TSRP46ARw$X)qyZf3W zF<+Nn%j8Xd;W&N$<hlU8t>)KL>m)w!2><@`&O{lDAD<+`Cx#uJ6Jlx0^mFFdtAT$f zRBK0fO}0rt-(0n5mT+k7(XR6o`LD+R-gz!AVNT_HfA`NTAA*)PNZ*wpVP#BD)v0aA zd1t=Y`Y-ierZCp_$%S`zpLQ+!WO;h+r;X<C59Kl!a%>5yW_i8(Pe<UtZ%y+9@8w<e z-y5-fS7>Ee-PgqjPpKs<*EY#)xSxA?)%jQZQuwRwQL4*1p{uovZ#jmEa)(6J2W*(H zCL`(=Qr*9x&4c%z$>NPEp}|*UE-jSy`g!M*r4pznxVCfK;>xtW_C9mGPD_40Bg1w6 zyUzNRjkPhx?_LXC6MU_)|C8q(%k5Fq_iBhoGGA3KZs9wYD7N{{y&&}&Pg%aby1wJX z&o4*k{Bo?jbT7l^;;x?LtLnSJi)A(}wnJSlv*)DHB-`lqhpa@}n4aF-8`7F~rZm^I zdqqxYMRS(U><GK7dvL91RZih+eO^6{JM%(aoV%gQi*I*!*S`Ez`P`#!`-Jmae#g@6 zrncXVd-J*L-&GmQXxqx}x|{2==2bscuWqZ#+TX9PJa@HS>HH76z2Wcc-$&p4ke~U| z{kP1``_c3JkIb%DzU^eTGjh|#lFgN%^)mG<EabYSJkLgKTy;`9B>CQ*80~M!+g9f9 zj86>v3=6L9$Dd~_m~O}yIn0w&{r^nOK2hWOJ*oeM&(A!zXW5Mjx!3Y;dT%Q#TK#X0 zYW1gi>#iM~X69~dere~^;P+F*<B!`N_3Ya?wXnY`4pw!p$(k1GR<@mM$DuQ9|Ngk8 z5j(cpF)??YWca?%Ron7R(><TruiqYEx2-DE?djz2J-Ii}##H2`Hh({}(%)!)bk5T! zVt;S??+M#_#v;*QUrT@LJkj}!D{St^^qch7bZG4Z%?<EK%vY81FnhhHFw{Xb<ivel z*IA~F#WFfsGOz_Qbqb8H|Nf8ixxLG-XhJ5gdb3aA?!4*;w`#NI9#{LnZ~LYB6XM@g z*cks_{qu<V&-F!HPhFg`X?er<d;UijMpWE=b(!nWnJqF`*Z<kA7Ps@8;nA74+tuf- zx|Vb`9o*!<#~)fZ2U>f2Sg;lwoz&`Ef6`4jYthuLqMO^+N`-)yns#29acH(bq3ZLI zzv<~2JI+b1`NH>mo7}8`o2x!Wt!>tVbu}-0$rbVbk|>|MPyhOQCF#(0N2b*UthWmF zTmA2RsrD?JZ(Q4VJ`$GrY`XZjN^<PU*r)Gj-T<#Bg$}Hyem#7M(6H)$R(mG23N!oN z(MZs+suOjGRm)xXAKvy$z2e@iz4elfU*E6&xmH2#s>=WC@Ag)%s(AAM@4u}2SDjTU zz4K;*R>r*VsMRUyu)TCR=RNbRuks%i9>*=#+w-gX*^d8te}#kJ)IN!S;Cg*6`&Zk_ zFE#gOpKb0@yS98wS2XJUqG0|$<9(TX#Q$->6YcVrS17voUi;o_=C(IR%f4^F;$!wn z`pBxfYme-or{DMZ(&&6<o?^7&scUleQ+2=YzxF`*{!YDQ*`HTG=ZM|jyy3O<%)E|B z$Ma9#H1j~Wit3uD758j@UCH*P#ooZ4NxQvYZrUo=t%>~W|NZOv1F9s~MO<7T2Od^s zvrOQxE}kRv@w~#q<(pQfFFL-wcAY(>Nw!Ip|8aHE??B7H3c&}DtYO%9u6rJ23&}3a z8{O+~o+Yh{>@#|8e0K6=`MMtu;|-S_+Y)@VAvfpa`L7e0*UCOEd97F~@+VRJ_f?w| z{ifq5EPh8CZ{F<sG`(B&?}A$|?Y{liyxu4A_Tcx|uV07%?OM3WTRtSJv(fgA?9UT- z5}2cJMk~uNu&w^|ThQ{W!f7@cJR`04KAq5!R{rcN=twJ}r7|<ue38t)@Ni@JR^c^? zxzG5ga9{YNaev>xGcp?Y@68sCYH!P`dmR_wy5swotE=h~c%?3$`WhE+uzLB7OfTLA zUswGGFO~_tzmjjw>a3+duY3Rvn)T-O<g6p1E4e+QxAW(jn?BET`fQ#oG`*}CUH#dP znOD-E)o$~9nKx&ig&*wy{z7c^uakw(qGtVkaBR+upXukP?F+OI-x})s^|8mB#fHg2 z(4M4mIJhH;Tr=ide7l^m_)tgId%-ILD-X_2Gnuv~Yt<}os~L}@&}zn7J0BPDG-FfS zTD#k;i_Ofd7KGT{WBPhsBkn14M`OgQ(oMzLb33N*NdH;B?aN~KUyk1=2Gs0}H(UKD zTkoxka;)V1>-TdPNB{JjzmMJe(#z^?pI&6I26vKrnkpu%R)QCh&a^f8769%>61RTz z{lT#L3yqWKznpV6)U^H7@#u#Cfwn?N1HX2E5n^BeB=_pN&CAsj`|ECgt9iWq)c+O! zlIyRjpV_SU_`{DW##bY%J3RmWoOW#W_rC8v(Cr)NH1?%GI=g>juHx*g&TP?<Ka>|- zmrv^>vJ2V2z+&aj<GaG2=d4?0x#rqau`AI(Rz1_!+8Y;~b5bt*`>_Rc)@N8Pvd=a= zwg32%jhnX^PCGAHkXtohs-gCj_OFdoE2q^zt6dKr-rQ4Qx&7#gcVUd-Gj1N3Z*G^p zO)BZy70?ci3DWfwv~Z5GN`}-<vuv4p?xxJgw6pFz8E)QswN&)mmAEBw*H^`OZvS;8 zIeOu#{G)<@Be~<Wr6tv$+><=z4O)a2dcP4is|Xq9WqiE3h52M!?AHeYSjSgq&VLj6 z{{Qu)Ti3o$Z1$-xmQUVS9=d=1(PJy-X)n<H+`ab-!>Y|ipQb&iUV1)a@=s7aC7M5$ zd&(5y|IhvN>J8%3)vspQvhMjFli+W*+GcIT{5SniI_lmQ`tB)un;d#J(ci|ncB=o= zYt<^?BI<qn#5%)GpL6C^O=!&X11|}c(%-chV?J@u&z9#+m38|$ZsXW{d4{iXd&1K5 zt7Mj)TgBdb-S#uX=3A%wzuy;pQa<InSN%8b>dS4YBdb}pSO4$KbDexV?x9(D4O8;I zv@6n*uYI2HeZSH@^}6G=8l4@9eRd0G<v(n^{PU04r$dLQwda}E=U2R_pJEj%e`MZ7 z*r=)<sI#=*_7HRU{dswR#r|--kiNIMUb@-t#5{q!Xa0J=i}|G>U3{%SaQ6NH_^Qws zlRv(B{`qX-FNN6@t*e0@9r3QKPO|!I{>fO*I{#M_|A}0VThW{~Y5(FQU)S!h{&8Zz zd)e0gkvI0cf6JHqrLa4y*tEE$W9~<T>Lc-X`#w3grF}XHo>|-h-bQhuX`S}pi4E@X zk<>49_B`!foiw*}g66dCSMKy!et!14Ip??jmfy`gqh5a(eLvNIEocyR<xJ2Zs@LSn z?A*U=>t0KDUdxvah&DWR?o52v>YSDTx3bOuajx`DX|(eGs(F>N^QS_#P=sADw*0N& z{C&E9{Jvuar+aV8JU&wuwEtrBgS`sts^wCYKOJ0?eSWvxG%07}?2517?-+vyRI9V6 z{$iB<cgInBr<`qfhd2AdY5xN6rZm@|=eM1zZ!2tT_qO;iWSQu+wHA{1C*STr^^$$2 zxxg8&2d_6})<VWp&DpCznr7!cyE{Kyc++yzn?7$&8or%qdw#i8*^}UG)A+T5J>jq2 z%=wW|OJF}W|M;^V@#jmwE%~kf{U*2a+(_nY8^S)XId6D1Y1-$DwnZW}%lce?7TyPs zs;-%N^X8$~0cXS4ykP$lR{8Ze*QR}ox7zi+zkdDt`faOYI#)e&;JIY>Y2wa<Y}+=y zce8V-{`TZMXxYs)UW+V-b(<OEiJx(F#W&*^w(`^K9r5wg3l~kDGtv5OYM-gx<YP6u z>p_!uzh`~Ti{AM#v`pr#{8`7=N9U^bZbmJSyR~Vv>$8;Z(7y*}X_eoTUUTx7Rp{Eu zGnbv(cP%*jO<&E5f4AQ6+Uiy+@pa;}bVEDl<+3SSacb7ml_X3-YVGecsi;#hT~L^P zHY4`Y&*y*N2r&P=Is3chkI8LWaVNfe+z+b@k32bh^Qw5;>LvU5{%!lx`zunaCgvZg zR;-TCm|ODE(WBCDEn1zpX=B6RJ5PwK68GAbK8pd>iHEM8T^+M{@hov|tIc`J5$EmX zY@*w5L~oEX-Y8@o)oJ=X_4zfcljo<&ZCoXPB6sTJHR+-88>6mIT-U>Iy(W3@?XdU> zufM#kj#-T|@#vJ?dt$cI_0=2v>;n2AL#xEqiTMjptzR6I|FrpMk8SC?S84aMi{0i_ zE2uB7;`n;fXMT|r-`29zc}M5XYXNQQG+7$^=;YtfTGrR;wkmFWpL|>@|JHGJ320#T z{O<1?p|zr)==aSZpWQ#PZGx}V<VC+^wr%?0?x6oo+eXZE(yWb1p_9#59NV*VXV{z7 zcE;~lmb==Y(0~2au6X~UHP1ksPB=sBWS?3UPh0ci%&y)KH3`%ISt(x={dS~#U7(I+ z^P7!zOSj9s-<)+X@@l``m*vv}dpCr?wDXou{wc%wUJ<l=aqes9-}7#?TwgP*p3Tqt z1WLsyU%ckwEYoOS!|W{f=sf8XVLS_ORBp^Tx+`k=8N~&&tvsJ+&5fD-?Tm?*e6&<} z#7f(`J^zK)&;F9V_Scc$m91L)MYVrj46uDso7eU}_+98@$<1+}X8pGKsDZXg@juU; zvI&fjqtAM5ihSO?f@#$Pr+;~xm)3C3SbXrRMb?@x)Bj&rvby=a3R+WceIHy?*Bpv- z{Y{?ZHn&@%_rr2l&d<JjvUC+&UjLr+|JEN3v~8*BeHI?sIn}aeWxLjl&vi-tIiGf2 zT`oFva+m1eQ~%?5mG4$Rn)x!>zU<DlEuU7Eg3GcB`xWQiOQmmCn)%tDI3UlWG<nUV zA5u6g&7c1B?P|B`R(~?Zv5~^waJ6ITZNXE`TY}ZUEj#z-c8$YkyW?BbkJsk8KIVB^ zKPCL<#CI*Vr<UISP<_65H~USAuL?OY*H_(|`LuuMo8zLsa@DQbYrlkU)Ht40GQYz9 zkk9fg>r;0(Z+NYcZ6|iez+FDTcQY6NqgM*``k=aV-+I1R=}Y)Gsi!^-&b&OQvFfd$ z+>T%0On!@%i+<sKe{+AYqkM{gN8Yo4D%bCHZ?5aP^{4gIO?j99pkoaV)xW#n9#Nc6 zjk!l+4pzfCaXE0B&#tWb|Mz?Szi+qm>;L_D-2e1X=+CFq<Ny76+;9JHS=amh|Np+9 zzyJTg-}kfY{(ik~zyJ5U-TBuHkKH+M|Nqa~JBt_p5|ZC2wE3CHf8DM7i}G5M7NoEG zsr~6iDQJ6TkM!c5@>yjMYPUXnwdR`&|HeqU8}?QL@{*4(G2gmB|Lcb|dv;a!G}C(4 z7lKJ2oc}3*IAOcHa)Rfdjz1w~YU%Re0c3mQXnw_Kd&}4TSXsSQy|eVSgZjVf?@D&= zrXTX74}E>P;gVdOsPg-K+lCDrr}96I|7CML`d9edhNRNyL&af+tM|@x+#Hj5|8JuH z^^`S>Ey8mSzS_GpXz}-i>*hwH<x_e#2X3BQ3R{MBBkNe2{N|{a%RbMJe*ONcclyR# zlaH8I&EUN2AN~5=f>j5(jy&YoTNi4)*Z#5H)O|N=XGVps`1Zn}aPOMWhh4WO#$<;{ z99>xWW~sjVSFP>q7E7J3y&AFAzi^k_)8(s<+E$nGFGoFKsp#;Ei8s2}M=H)JuMc%h z_0Qg9cyn^{E#>NY{-!riEWehuFG^Wr{k4;Bub6(y-@MZ#;bwU>?P>7dL$A-+C)YV2 z3Y%ZKu2}c_KC|cAYn`kvyBVEsSH5ptedE-R@0(VspR6c-TY0GLS-t*ZIl&+HlbWx* zuMJ##dB?k{dkaGgPfRmO*xY5hwX0|Es?=ApTc=)63giEl^YzVM%dZN`75-hb)UJoO z)>KyhRGYat3F)kb*1s>8&;M7t)~PDy#^3w@|9$^ndX?jp`#qf-r=FbxAEuOZu<PF` zvy`{rCKQGiho1j2XAATDt!|I^*>4TAGjUt9rzrOA)2Vl|=KuLA*Z%d*`9G=|CnL19 z-d?S_R>i-1miD%9M(=*wIE6m8{cIfcUt`{v!XwXL$vs>BZ_z$Wz1gew|5B`Otk`os zJjbw2?AVOURzDMBL(9*;KY2E~_?DxY_XhJ{SsN2ytKDM$_oO&9`{=5Ft0rDrpOd?G z^@X?xw#nMRQg45KztZ#QnfGhjUQVyL?DtOoshVlV+~@3RRV>AeXIG@!3k3g?+qiYw z&oigxrbyde_~4cE@51VD4X=zZZM(EwJLhRg9cTtNwEIhcmWtM2<+D4(uD|0>+bG1o zZTl-1+tqi{<x}pQ3E$}?{5mB5+L{|dJ$t6>-aIb$+Wq6Qzu%v2Y4$Pq7Tf4$^E<Qa zRA2C0+orA=Qkw*{k49cy^6XRER6f)8PnBB~q5Cs;o1PC{layxt`1~J-TgUjmZCGtO zp)RF6qV_JA@!8coqt>#X`Bct!<9S`N?Wx*dS9i$WF^;_v+go^S#WE+$^QK*=vo|i9 zf2$|w?4yJH*>1L5ql&NfmSpaK?qX=TKE~kv<2T=JwYL@R|E~C9p5b+knq1TRd_U_G zS2&bCp5@d|HPDYb_x2$7%j9+0VzYy9u3Eu0_pIXl1J&qrx5}#`j;?8&nszVU=brSQ z^D-8n7RRiA(rjuReNIR2_~RAN=0^TI$M8G!{JJBDWOja#YIuKDD&l1Mp?_ZUC#=5` z@YUbw(tOkJ`C9w*68Ei|`ir;TF3xb%K?|u1k3P#SFAA(p{$#W6#;5O5>+3>oW||+Y z5ItNCX>*)ibu(nk)Mqmq<MN}9C!b6TTa&elYwp>FDEl}6u1E}@Vfyt=+lps<`Wq_a zR#*0ho+x{!lW6z$V_nGOn{zftanE@Ap2yA7TB`dyzgdX#)0)$9MwisxY@b-w*hH>8 zdcyrs&C*hT-iyI&kFuR#a^=;nFY`)greEKX)SbQMNwL7Ts>8LRpFwe(qy0frdH2jO z%4c#?oHwSGIXAuuwJccWG+BC<Ta-w-S+vomR<`@Q7sZ3Nx5VBwW|B7EKQle>ZLnVl ztC9JdRQ_tyu#G{>FV33TANoIXwq$hn%=u5tyC*)=`Y*b&f7gn6H!f7KkG(Zx<J91r zXRTJ&MgI%SdRQ3pSwS{4dr3aaYpwXzrK=u!@~+<YDXOBkHfGI}FY~~SkkB9*p~F`G z4U^{aYSu^dnk9#5oc*aTUGqTu@6Z2V*<XBN=8VA6UtfJ9?3(|IeecpkiWA;^{rXk= z)cno2(lcfq4f{I%`pQqbcdyQAzQ1<Yp=o~WFKg`APPqR#<|O}v%f$<8cd5z8eBL!{ zwoB=Z%!6syRFYSD{1v@%^Od^9+QZ*Y)frx%TYPHe^?g#SbJpDmdbc-xb&U0m!+PIV z|NQ>oN;A(D3%`38yjHBg>2>SWEv_xg>H|ex40qY<?+MuGY9?5rH{<`8mzTq_^yA+r zPD{TL?Eck#YVgFL4Bz9gZc{2veB3Ty_v2OkFRizSOv7d!S;6+>fVg4!X9u3>?682n z?z2|?zEr&G-YKi<JBuy0C){6i&taY0tpxA=1$zU&dW3#HC6@EmF6G_aFZ)B)Pei!y zjNaIq_vQDlo5qPt)8C&3@A$m%B$~fJv?N)!c7m;PRl}3!H<A|*7H*C4`2ObL|A`e> z=Dlrx<9U&{;@LsxV*6X_Tix64l<)i3Sd&vLU14&e=34tf?GGz#Z?oSNUgRGdZO?bJ z`;Fb@-dd5rGu}knom_uOzD;hr`@5T<vz2PO7fYVEJ91?6-xW_etUjFoWA-QT#T^^9 m{<!J1Z)h0&|M~epbGKv6d!9Y1j~Eyj7(8A5T-G@yGywoMJ!Yl= literal 0 HcmV?d00001 diff --git a/results/model1_overfit2.PNG b/results/model1_overfit2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..393665b7558753088a2475b66720b7197fc37ad5 GIT binary patch literal 39735 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 Cp_HBg literal 0 HcmV?d00001 -- GitLab