From 1dfffa4acfdd442c4490853bdb7f9da9ec3a8093 Mon Sep 17 00:00:00 2001 From: Sasza Stanczew Date: Tue, 20 May 2025 11:27:59 +0200 Subject: [PATCH] 123:x --- PythonAI/JupyterLab/.gitignore | 3 + PythonAI/JupyterLab/Pipfile | 10 +- PythonAI/JupyterLab/PythonAI_4.ipynb | 184 +- PythonAI/JupyterLab/PythonAI_5.ipynb | 2717 ++++++++++++++++++++++++++ 4 files changed, 2828 insertions(+), 86 deletions(-) create mode 100644 PythonAI/JupyterLab/.gitignore create mode 100644 PythonAI/JupyterLab/PythonAI_5.ipynb diff --git a/PythonAI/JupyterLab/.gitignore b/PythonAI/JupyterLab/.gitignore new file mode 100644 index 0000000..dfd8903 --- /dev/null +++ b/PythonAI/JupyterLab/.gitignore @@ -0,0 +1,3 @@ +data +model_checkpoints +logs diff --git a/PythonAI/JupyterLab/Pipfile b/PythonAI/JupyterLab/Pipfile index ad83f58..9f45347 100644 --- a/PythonAI/JupyterLab/Pipfile +++ b/PythonAI/JupyterLab/Pipfile @@ -10,10 +10,18 @@ numpy = "*" scikit-learn = "*" sklearn-pandas = "*" matplotlib = "*" +<<<<<<< HEAD notebook-intelligence = "*" jupyterlab-vim = "*" +======= +tensorflow = "*" +torch = "*" +torchvision = "*" +ultralytics = "*" +>>>>>>> a6f27a9 (123:x) [dev-packages] [requires] -python_version = "3.13" +python_version = "3.12" +# python_version = "3.13" diff --git a/PythonAI/JupyterLab/PythonAI_4.ipynb b/PythonAI/JupyterLab/PythonAI_4.ipynb index 973407e..b722c48 100644 --- a/PythonAI/JupyterLab/PythonAI_4.ipynb +++ b/PythonAI/JupyterLab/PythonAI_4.ipynb @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 15, "id": "5987fc03-1a75-45bb-b154-7fb1d8c5c1e9", "metadata": {}, "outputs": [], @@ -144,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 17, "id": "00d65b25-a305-4409-8daf-8bd4e3cd8005", "metadata": {}, "outputs": [], @@ -167,7 +167,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 18, "id": "5cecc1db-c8b7-4153-897e-9a4a216e936e", "metadata": { "scrolled": true @@ -178,81 +178,93 @@ "output_type": "stream", "text": [ "-- Epoch 1\n", - "Norm: 0.16, NNZs: 2, Bias: -0.100000, T: 105, Avg. loss: 0.000000\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 105, Avg. loss: 0.001261\n", "Total training time: 0.00 seconds.\n", "-- Epoch 2\n", - "Norm: 0.16, NNZs: 2, Bias: -0.100000, T: 210, Avg. loss: 0.000000\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 210, Avg. loss: 0.000000\n", "Total training time: 0.00 seconds.\n", "-- Epoch 3\n", - "Norm: 0.16, NNZs: 2, Bias: -0.100000, T: 315, Avg. loss: 0.000000\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 315, Avg. loss: 0.000000\n", "Total training time: 0.00 seconds.\n", "-- Epoch 4\n", - "Norm: 0.16, NNZs: 2, Bias: -0.100000, T: 420, Avg. loss: 0.000000\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 420, Avg. loss: 0.000000\n", "Total training time: 0.00 seconds.\n", "-- Epoch 5\n", - "Norm: 0.16, NNZs: 2, Bias: -0.100000, T: 525, Avg. loss: 0.000000\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 525, Avg. loss: 0.000000\n", "Total training time: 0.00 seconds.\n", "-- Epoch 6\n", - "Norm: 0.16, NNZs: 2, Bias: -0.100000, T: 630, Avg. loss: 0.000000\n", - "Total training time: 0.00 seconds.\n", - "Convergence after 6 epochs took 0.00 seconds\n", - "-- Epoch 1\n", - "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 105, Avg. loss: 0.048942\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 2\n", - "Norm: 0.21, NNZs: 2, Bias: -0.100000, T: 210, Avg. loss: 0.058720\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 3\n", - "Norm: 0.34, NNZs: 2, Bias: -0.000000, T: 315, Avg. loss: 0.046657\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 4\n", - "Norm: 0.26, NNZs: 2, Bias: -0.100000, T: 420, Avg. loss: 0.061848\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 5\n", - "Norm: 0.34, NNZs: 2, Bias: -0.100000, T: 525, Avg. loss: 0.058669\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 6\n", - "Norm: 0.27, NNZs: 2, Bias: -0.100000, T: 630, Avg. loss: 0.043728\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 630, Avg. loss: 0.000000\n", "Total training time: 0.00 seconds.\n", "-- Epoch 7\n", - "Norm: 0.36, NNZs: 2, Bias: -0.000000, T: 735, Avg. loss: 0.050942\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 8\n", - "Norm: 0.29, NNZs: 2, Bias: -0.100000, T: 840, Avg. loss: 0.054400\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 9\n", - "Norm: 0.38, NNZs: 2, Bias: -0.100000, T: 945, Avg. loss: 0.051706\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 10\n", - "Norm: 0.51, NNZs: 2, Bias: -0.000000, T: 1050, Avg. loss: 0.055821\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 11\n", - "Norm: 0.49, NNZs: 2, Bias: -0.000000, T: 1155, Avg. loss: 0.059026\n", - "Total training time: 0.00 seconds.\n", - "Convergence after 11 epochs took 0.00 seconds\n", - "-- Epoch 1\n", - "Norm: 0.25, NNZs: 2, Bias: -0.200000, T: 105, Avg. loss: 0.004733\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 2\n", - "Norm: 0.40, NNZs: 2, Bias: -0.200000, T: 210, Avg. loss: 0.003316\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 3\n", - "Norm: 0.41, NNZs: 2, Bias: -0.300000, T: 315, Avg. loss: 0.002422\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 4\n", - "Norm: 0.43, NNZs: 2, Bias: -0.300000, T: 420, Avg. loss: 0.003032\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 5\n", - "Norm: 0.42, NNZs: 2, Bias: -0.400000, T: 525, Avg. loss: 0.005206\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 6\n", - "Norm: 0.46, NNZs: 2, Bias: -0.400000, T: 630, Avg. loss: 0.005538\n", - "Total training time: 0.00 seconds.\n", - "-- Epoch 7\n", - "Norm: 0.47, NNZs: 2, Bias: -0.400000, T: 735, Avg. loss: 0.004637\n", + "Norm: 0.18, NNZs: 2, Bias: -0.100000, T: 735, Avg. loss: 0.000000\n", "Total training time: 0.00 seconds.\n", "Convergence after 7 epochs took 0.00 seconds\n", - "Scoring: 0.98\n" + "-- Epoch 1\n", + "Norm: 0.28, NNZs: 2, Bias: -0.100000, T: 105, Avg. loss: 0.054884\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 2\n", + "Norm: 0.28, NNZs: 2, Bias: -0.000000, T: 210, Avg. loss: 0.050780\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 3\n", + "Norm: 0.26, NNZs: 2, Bias: -0.000000, T: 315, Avg. loss: 0.051955\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 4\n", + "Norm: 0.35, NNZs: 2, Bias: -0.000000, T: 420, Avg. loss: 0.051103\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 5\n", + "Norm: 0.38, NNZs: 2, Bias: 0.100000, T: 525, Avg. loss: 0.046239\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 6\n", + "Norm: 0.46, NNZs: 2, Bias: -0.000000, T: 630, Avg. loss: 0.054860\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 7\n", + "Norm: 0.47, NNZs: 2, Bias: -0.100000, T: 735, Avg. loss: 0.058374\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 8\n", + "Norm: 0.57, NNZs: 2, Bias: -0.100000, T: 840, Avg. loss: 0.054651\n", + "Total training time: 0.01 seconds.\n", + "-- Epoch 9\n", + "Norm: 0.41, NNZs: 2, Bias: -0.200000, T: 945, Avg. loss: 0.054692\n", + "Total training time: 0.01 seconds.\n", + "-- Epoch 10\n", + "Norm: 0.45, NNZs: 2, Bias: -0.100000, T: 1050, Avg. loss: 0.047006\n", + "Total training time: 0.01 seconds.\n", + "Convergence after 10 epochs took 0.01 seconds\n", + "-- Epoch 1\n", + "Norm: 0.29, NNZs: 2, Bias: -0.200000, T: 105, Avg. loss: 0.006627\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 2\n", + "Norm: 0.42, NNZs: 2, Bias: -0.200000, T: 210, Avg. loss: 0.002795\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 3\n", + "Norm: 0.45, NNZs: 2, Bias: -0.300000, T: 315, Avg. loss: 0.002319\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 4\n", + "Norm: 0.46, NNZs: 2, Bias: -0.300000, T: 420, Avg. loss: 0.002920\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 5\n", + "Norm: 0.47, NNZs: 2, Bias: -0.300000, T: 525, Avg. loss: 0.004747\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 6\n", + "Norm: 0.55, NNZs: 2, Bias: -0.300000, T: 630, Avg. loss: 0.000482\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 7\n", + "Norm: 0.53, NNZs: 2, Bias: -0.400000, T: 735, Avg. loss: 0.002328\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 8\n", + "Norm: 0.56, NNZs: 2, Bias: -0.400000, T: 840, Avg. loss: 0.002328\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 9\n", + "Norm: 0.57, NNZs: 2, Bias: -0.400000, T: 945, Avg. loss: 0.002868\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 10\n", + "Norm: 0.58, NNZs: 2, Bias: -0.400000, T: 1050, Avg. loss: 0.005004\n", + "Total training time: 0.00 seconds.\n", + "-- Epoch 11\n", + "Norm: 0.49, NNZs: 2, Bias: -0.500000, T: 1155, Avg. loss: 0.004755\n", + "Total training time: 0.00 seconds.\n", + "Convergence after 11 epochs took 0.01 seconds\n", + "Scoring: 0.87\n" ] } ], @@ -262,23 +274,23 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 19, "id": "129fcd15-b8c9-4455-9f25-d164ab5cf81c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 57, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAjctJREFUeJzs3Xd8zdf/wPHX596be7MHMoQYCbFX1SyKFq2iik6qSxd+RltUW1X1VaW0OtBhttrSGq1Re1Ma1B61RSQhZK87P78/bnKJJCRkyvv5eOTR5vM553POJ2mTd854H0VVVRUhhBBCiGKgKe4OCCGEEKLskkBECCGEEMVGAhEhhBBCFBsJRIQQQghRbCQQEUIIIUSxkUBECCGEEMVGAhEhhBBCFBsJRIQQQghRbHTF3YFbsdlsREZG4uHhgaIoxd0dIYQQQuSBqqokJSURGBiIRnPrMY8SHYhERkYSFBRU3N0QQgghxB24ePEilStXvmWZEh2IeHh4AHBxzhw8XV2LuTcl2KJFTL2/I9rqWlp1qIGfzq+4eySEEKIMS05Kpk1wG8fv8Vsp0YFI5nSMp6urBCK38tJLjAsLY/ymUPbrzlKukZmO1WoXd6+EEEKUcXlZViGLVe8VzZszpoc3SWPLE3vwIov3nSjuHgkhhBC3JYHIPWb8JAMjF2/CuiuKxVvCiLZEF3eXhBBCiFxJIHIv6teP0XHnMf5uZseqw5wwyuiIEEKIkqlErxHJCxWwaDRYFQVki+91rVszAvhyiomzTjGc9dfSpV5w4bapgKJV7B/yvRBCCJEHpToQMWk0RHl6kuriIkFILnpMhtREf8xOGq6dTsDZoEOraAutPRUVjYsGZz9nNE4y4CaEEOLWSm0gYgPOVaiA1t2dQB8f9DodEorcQloaVyx6FA9wdtNhUAwF3oSqqpjNZq7FXCM1PBW36m4oGvmuCCGEyF2pDURMWi02nY6gChVwNRT8L9V7jl5PFeBShA1roBWjq4qn3rnAm3F2cUan0xEeHo7NbENrKLzRFyGEEKVf6R07z5iK0ciUTL5UqqzB+YoFa6qJuKSUQmlDo9GgoNgX8AghhBC3UHoDEXHHvANcCIhLRDWqpKvpxd0dIYQQZZgEImWVszNqKpjMxd0RIYQQZZkEIiWY4uPDH6tWFc7D3dxwTTcV6hSNEEIIcTsSiBST6MuX+b+RIwlu3BiDvz9B9erR/Zln2Lh1a5H1wTvAhYA0E2qalbjEpCzTNKqqMm7sOKpVqoa3mzePdn6U06dOF1nfhBBClA0SiAA2m419Bw6wduNG9h04gM1mK9T2zoeH07RDBzZt385nH3/M4Z07WbN4MR3atmXQiBGF2nY2bm5UdHbCGqEhLcFEoskejEz9bCozvp7B1zO+Zvuu7bi5utHt0W6kp8uaEiGEEAWnzAcim7Zto2efPrz+/PO8P3Agrz//PD379GHTtm2F1ubAt99GURTCNmygd48ehNaoQb06dXhr0CB2r1+fa71RY8cSev/9uAYGEty4MWMmTMBsvr7I4+Dhw3To3h2PoCA8q1Shafv27N2/H4AL4eF0f+YZfKpVw61SJeq1asVf69Y56t64myY2JY1vvvyGd99/l+6Pd6dBwwbMnj+bqMgolv+xvNC+LkIIIcqeUptHpCBs2raNUcOH0zY5mQk+PoSUK8cZo5G5R48yavhwJn3xBR3btSvQNmPj4lizcSMTPvgANze3bPe9vbxyrevh4cG86dMJrFiRw0eP8uqwYXi4uzNy6FAA+r72Gk0aNmTm1KlotVoOHD6Mk87+LR40YgQms5ltq1bh5ubGsRMncL+pfe8AF7h2jd1XY4mOjqZdx+vv7uXlRbMWzfhn9z889cxTBfGlEEIIIcpuIGKz2Zg2bRptk5OZUrGiIx9JAxcXpjg7805UFNOmTaN9mzZoNAU3cHT67FlUVaV2aGi+637wzjuOf69WpQrvnD7NwqVLHYFI+KVLjBgyxPHsmiEhjvLhERH07tGDBvXqARBcrVrOjZQvj+20fS2Im4sniaZ0R+Izfz9/Lkdfzne/hRBCiNyU2amZ/YcOEXnqFC/5+GRLiqZRFF708SHy1Cn2HzpUoO2q6p1n+Vq0dCkPdOlCQK1auFeuzAcTJhAeEeG4/9bAgQwYMoSHe/bk0y++4My5c457Q15/nf9NmcIDXbowduJEDh05ctv2DFczEp+lyroQIYQQhaPMBiJXr10Dk4mQXNLD1zAYwGy2lytANUNCUBSFEydP5qverrAw+r72Gl07dWLlwoXs37qV999+G5PJ5Cjz0bvvcnTXLh7r3JlN27dTt2VLlq1cCcCA/v05u38/zz/9NIePHeP+jh35+vvvc2wrwN8fgHQlyZ74LNm+xTf6cjT+Af53+OZCCCFEdmU2EKlQvjzo9ZwxGnO8f9poBCcne7kCVM7Hhy4dOzJ99mxSUrLn74hPSMix3t9hYVQNCuL9d97h/iZNqBkSwoWLF7OVC61Rg+EDB7Ju6VJ6devG3J9/dtwLqlyZN15+maU//cTbgwbxw/z5ObZVvWpVAvz97VuJy5enotVEQngie8P2cl/L++7wzYUQQojsymwg0qRhQwJr1mRuXBy2m6ZLbKrKvLg4AmvWpEnDhgXe9vQpU7BarTR/+GGWLF/OqTNnOP7ff3z13Xe06tw5xzo1g4MJj4hg4ZIlnDl3jq+++84x2gGQlpbG4BEj2LJjBxfCw9m5ezd79u+nTsZ6kWGjR7N240bOXbjAvwcPsnnHDurUqpVjW4qiMOyNN/jflCks/+svDp8/z6h3B+FfIYCO7TvJVI0QQogCU2YXq2o0GoYNG8ao4cN5JyqKF318qGEwcNpoZF5cHNvd3Zk0bFiBLlTNFFytGv9u2cKEqVN5+4MPiLp8Gd8KFWjaqBEzp07NsU6Prl0Z/uabDB45EqPJxGOdOjFmxAg++vRTALRaLddiY+n/xhtcjomhQvny9OrWjXGjRwNgtVoZNGIEEZGReHp48MhDD/HFJ5/k2seRQ4eSkprKa8OHE5+QQJuWLVn/x2KqpZmIdjYRZ7Xi7q7HSXEq8K+PEEKIskNR72b1ZCFLTEzEy8uLhIUL8XR1zXIvXafjnJ8f1YOCcNbr77iNTdu2MW3aNCJPnQKzGZycCKxZk2HDhhX41t17RkoKkTY33AIVnBXnbLeN6UYunL+Ac2VntM7aYuigEEKI4pSUmERj38YkJCTg6el5y7JldkQkU8d27Wjfpg37Dx3i6rVrVChfniYNGxbKSMg9xWolLU2Hs+vtiwohhBC5KfOBCNinaZo2blzc3Sg93NwIvHaNaJOnTNEIIYS4K/Jnv7gz5csTkGbCFqeSnJSe5cA8IYQQIq8kEBF3zs2NQG+t48A82U0jhBAivyQQEXct88A8TPbEZ2bVfPtKQgghBBKIiALiHeBCQJoJNc1KaopJghEhhBB5IoGIKDhublR0dsIWrWBKs7D70tni7pEQQogSTgIRUeD8AzQ4JdlI+C+axftOFHd3hBBClGASiJRgio8Pf6xaVdzduCOunk4MWLsb664oFq/exgmjBCRCCCGyk0CkmERfvsz/jRxJcOPGGPz9CapXj+7PPGM/aK4EWLpiBZ179aJ8cDCKjw8HDh/O/0N69GB0TT+MK7UcWXORTeclGBFCCJFVmU5oFn7xIqlpabned3VxoUpQUIG3ez48nAceeQRvLy8++/hjGtSti9lsZu2mTQwaMYITYWEF3mZ+paSk0KZlS57q2ZNXhw69q2eN6eHNismRHB8Ci69Bn6a1C6iXQgghSrsyG4iEX7zII31eICU19zJurrBm8fwCD0YGvv02iqIQtmEDbm5ujuv16tTh5X79cq03auxYlq1aRURkJAF+fvR98kk+HDkSJyd7VtODhw8z7L332HvgAIqiUDM4mO+++IL7mzThQng4g0eOZMfu3ZjMZqpVqcJn48bRNZfTfp9/5hnAHjQVhO4j69J9wQImtujM4qRE2rSpQoAuoECeLYQQovQqs4FIaloaKamg13+MQV8t232j6TwpqR/ecsTkTsTGxbFm40YmfPBBliAkk7eXV651PTw8mDd9OoEVK3L46FFeHTYMD3d3RmaMWPR97TWaNGzIzKlT0Wq1HDh8GCed/Vs8aMQITGYz21atws3NjWMnTuCeQ/uFql8/RoeFMf73UHYkHKb+I/HUNsjoiBBClGVlNhDJZNBXw9k551+GJlPBt3f67FlUVaV2aGi+637wzjuOf69WpQrvnD7NwqVLHYFI+KVLjBgyxPHsmiEhjvLhERH07tGDBvXqARBcrdpdvMVdaN6cMcCYUS4c0V/Bu5O3jIwIIUQZJotVi5iqqndcd9HSpTzQpQsBtWrhXrkyH0yYQHhEhOP+WwMHMmDIEB7u2ZNPv/iCM+fOOe4Nef11/jdlCg906cLYiRM5dOTIXb3H3Rrf+yDGrT7F2gchhBDFTwKRIlYzJARFUThx8mS+6u0KC6Pva6/RtVMnVi5cyP6tW3n/7bcx3TBs89G773J01y4e69yZTdu3U7dlS5atXAnAgP79Obt/P88//TSHjx3j/o4d+fr77wv03fItKZEdqw7LbhohhCjDJBApYuV8fOjSsSPTZ88mJSUl2/34hIQc6/0dFkbVoCDef+cd7m/ShJohIVy4eDFbudAaNRg+cCDrli6lV7duzP35Z8e9oMqVeePll1n600+8PWgQP8yfX3Avll/NmzOmhzd1voon9uBFSXwmhBBllAQixWD6lClYrVaaP/wwS5Yv59SZMxz/7z+++u47WuWyi6VmcDDhEREsXLKEM+fO8dV33zlGOwDS0tIYPGIEW3bs4EJ4ODt372bP/v3UyVgvMmz0aNZu3Mi5Cxf49+BBNu/YQZ1atXLtY2xcHAcOH+bYCXuA8N+pUxw4fJjoy5cL8Cth300zcvEme+KzLWFEW6IL9PlCCCFKtjK/WNVoOp+v6wUhuFo1/t2yhQlTp/L2Bx8QdfkyvhUq0LRRI2ZOnZpjnR5duzL8zTcZPHIkRpOJxzp1YsyIEXz06acAaLVarsXG0v+NN7gcE0OF8uXp1a0b40aPBsBqtTJoxAgiIiPx9PDgkYce4otPPsm1j8tXr+alQYMcnz/zyisAjB01io/efbegvhR2sptGCCHKLEW9m9WThSwxMREvLy8SFi7E09U1y710nY5zfn5UDwrCWa/P97OLM4/IvS7dZOLcxYtUv3IFZ4slX3XHjDLiMe4aVA6SxGdCCFFKJSUm0di3MQkJCXh6et6ybJkdEakSFMSaxfOLJbOqyN34SQZWTI63Z2GVxGdCCHHPK9RAZOLEiSxdupQTJ07g4uJC69atmTRpErVusTahKEmQUTJ1H1mX7mFhjI92ZUfaSep3lKkaIYS4VxXqYtWtW7cyaNAgdu/ezfr16zGbzXTu3DnH3SJCZJGxqyZptLscmCeEEPewQh0RWbNmTZbP582bh5+fH/v27aNdu3aF2bS4R2SZqjmfSJ/2zYu7S0IIIQpQkW7fTcjIkVGuXLkc7xuNRhITE7N8COHY4nskhcWrt3HCKKMjQghxryiyQMRmszFs2DAeeOAB6tevn2OZiRMn4uXl5fgIkjUcIlO/foyu6YdxpVamaoQQ4h5SZIHIoEGDOHLkCAsXLsy1zOjRo0lISHB8XMwhc6go2yQbqxBC3FuKJBAZPHgwK1euZPPmzVSuXDnXcgaDAU9PzywfQtxMsrEKIcS9o1ADEVVVGTx4MMuWLWPTpk1Ur169MJsTZUm/foz+Zx3WK27F3RMhhBB3oVADkUGDBrFgwQJ++eUXPDw8iI6OJjo6mrRbJBET1yk+PvyxalVxd6Nku3KFHQfji7sXQggh7lChBiIzZ84kISGB9u3bU7FiRcfHokWLCrPZUiH68mX+b+RIghs3xuDvT1C9enR/5hk2bt1a3F3DbDYzauxYGrRujVulSgTWqUP/N94gMiqquLuWVeaoyK4oFq/eJlM0QghRChVqHpESfIxNNqqqcvy//6hTqxaKohRqW+fDw3ngkUfw9vLis48/pkHdupjNZtZu2sSgESM4ERZWqO3fTmpqKv8eOsSYESNoVL8+cfHxDB09mh7PPcfezZuLtW/Z9OvHaGD88nh2mA5TrlE8HatJFlYhhCgtijSPSEm2ev16nnvzVVavX1/obQ18+20URSFswwZ69+hBaI0a1KtTh7cGDWL3LdofNXYsofffj2tgIMGNGzNmwgTMZrPj/sHDh+nQvTseQUF4VqlC0/bt2bt/PwAXwsPp/swz+FSrhlulStRr1Yq/1q3LsR0vLy/WL1vGU088Qa2aNWnZrBnfTJ7MvgMHCC+hO5lkN40QQpROZfbQuxtZrVa++2keSaTw3U/z6PLQQ2i12kJpKzYujjUbNzLhgw9wc8u+0NLbyyvXuh4eHsybPp3AihU5fPQorw4bhoe7OyOHDgWg72uv0aRhQ2ZOnYpWq+XA4cM46ezf4kEjRmAym9m2ahVubm4cO3EC9xzaz01CYiKKotyyf8Wt+8i6dF+wgIktOsuBeUIIUUpIIAKs3biRkxFnefytHqz5fA1rN26ka+fOhdLW6bNnUVWV2qGh+a77wTvvOP69WpUqvHP6NAuXLnUEIuGXLjFiyBDHs2uGhDjKh0dE0LtHDxrUqwdAcLVqeW43PT2dUR99xLO9e5f8LdX9+jE6LIzxv4eyI+Ew9R+RA/OEEKIkK/NTM5mjIcGtgmnW7X6CWwXz3U/zsFqthdLe3aybWbR0KQ906UJArVq4V67MBxMmEB4R4bj/1sCBDBgyhId79uTTL77gzLlzjntDXn+d/02ZwgNdujB24kQOHTmSpzbNZjNPvfQSqqoyc+rUO+57kco8MG9seY6skakaIYQoycp8IJI5GtLhhfYAtO//IKcizrJ248ZCaa9mSAiKonDi5Ml81dsVFkbf116ja6dOrFy4kP1bt/L+229jMpkcZT56912O7trFY507s2n7duq2bMmylSsBGNC/P2f37+f5p5/m8LFj3N+xI19///0t28wMQi5cvMj6ZctK/mjITcZPMjBy8SaIuCiJz4QQooQq04HIjaMhlUIDAahUq1KhjoqU8/GhS8eOTJ89m5SUlGz34zMOBrzZ32FhVA0K4v133uH+Jk2oGRLChRwWjobWqMHwgQNZt3Qpvbp1Y+7PPzvuBVWuzBsvv8zSn37i7UGD+GH+/Fz7mRmEnDpzhg1//EH5XA4qLPH69WPkoQiMv5vZsf6kHJgnhBAlTJkORG4eDclU2KMi06dMwWq10vzhh1myfDmnzpzh+H//8dV339Eql7UpNYODCY+IYOGSJZw5d46vvvvOMdoBkJaWxuARI9iyYwcXwsPZuXs3e/bvp07GepFho0ezduNGzl24wL8HD7J5xw7q1KqVY1tms5k+L7zA3v37+fn777FarURfvkz05ctZRmBKjcypmtHucmCeKHNsNhs7N+3kuynf8cW4L5j1xSyOHTxW3N0SwqHMLlbNHA2p1rwq/tX8sJgsjnv+1f2p2rxqoe2gCa5WjX+3bGHC1Km8/cEHRF2+jG+FCjRt1CjXdRg9unZl+JtvMnjkSIwmE4916sSYESP46NNPAdBqtVyLjaX/G29wOSaGCuXL06tbN8aNHu1430EjRhARGYmnhwePPPQQX3zySY5tXYqKYvnq1QA0btcuy73NK1bQvk2bgvpSFKnxkwysmBzP8SGw+Hwifdo3L+4uCVFoLBYLC75dwIJvF3Du1DncPd1x93AnIS6Bie9OpEnLJrw85GW69u5a3F0VZZyiluCsY4mJiXh5eZGwcCGerq5Z7qXrdJzz86N6UBDOen2+n73vwAFeGj4YE+Zcy+hxYu4X39C0ceN8P78sSzeZOHfxItWvXMHZYrl9haIWFsZEn2po67vJFl9xT0pPS2fws4PZtm4bj/Z+lH6v9+P+B+5HURQsFgsbV21kwcwF/L35b14Z+gqjJ40u9ESOomxJSkyisW9jEhISbru+sMyOiDSoW5fPx/7vllMNer2eBnXrFmGvRJFo3pzRCxYw0a9fcfdEiAKnqirDXxjO7q27mf3nbNp2auu4fur4KWrUrkGXx7vQ5fEu/DjjR8YNH4eHlwf/9/7/3fa5p0+cpkbtGo6gJadrQuRXmQ1E9Ho9D7dvX9zdEMUlNNR+YN6OFNq0QUZFxD1j58adrPtzHdMXTncEIQBb1mxh6sdTefvDt+nwaAcA+g/sz9UrV/nmk2946qWn8A/0z/W5OdXP6ZoQ+VWmF6uKMqx5c0bHncd6JEV204h7yoLvFlCrfi269OziuGa1Wlk4dyFptjQWzl2YZUfgq8NfxUnvxG9zf8v1mTnVv9UzhcgPCURE2dW8OaNr+sluGnHPuBZzjY0rN9L3tb5Zpkq2rdvGhfALdHu7GxfCL7Bt3TbHPQ8vDx5/9nF+m5d7IJJT/Vs9U4j8kEBElHnjJxnkwDxxT4iKiMJms9GwWUPHtcyRi+BWwTTt3pTgVsHZRjAa3t+QyPDIHEc1cqr/65xf+XXOr7d8phB5JYGIENgPzBu5eBPWXVEsXr1NpmpEqWS12AMBne768r/MkYsHX3wQgHYvtMs2gqHV2VMU5BRI5FT/1KlTHD9y/JbPFCKvJBARIlO/foyu6YdxpVamakSpVMGvAgDnT58Hso5mVAytCEBgrcBsIxgXzlzA09sT/U2pEHKqXzG0IhUbV8SmteEf4p/rM4XIKwlEhLjJmB7eMlUjSqVKVSvRqFkjFs1ZBGQfzch04wiG2WxmyY9L6PZkt2zPy6l+cmIyjXo0QmvQcnjj4RyfKUR+lPlAxGg0snf/fjZu3cruPXtyPetFlC1ZpmrkwDxRivR9vS/b12/n2MFjLJy7kGrNquFbzReLyeL48KvuR7Vm1Vg4dyErFq3gcuRl+r7eN8tzMkdDbqxvNpq5EnUFv1A/QlqFsHXeVkxppmzPlFERkR9lNrNq+MWLfDt3LrN++omYq1cd111cXHi2d28GDRjAfY0a3fU7lEUlPrNqfoSFMT46FEPnVMo1CqJjtdrF3SMhbsmYbuTxlo+TmJCIu487ij73RGPmFDOXL16m/SPtmb5wepZ7h/89zLsD38XC9f+HzWYzyYnJqNh/bZhSTXiX98bZ1dlRRoeOT2d8SoP7GhTwm4nSJD+ZVctkILL8r794ZsAAnHQ6Xnj2WZ7t3Rs/X1+Sk5NZtW4d386dy8VLl/j4vff44J13CjRjoOLjc8v7Y0eN4qN3373jZy9bsICejz12R/Xz4qNPP+WPVas4sH17rmXuqUAkw5hRRjzGXYPKQfRpKsGIuDNFlYn04rmL9G7XG4vZwmNPPkar9q1wcXVx3I+PjWfr2q2sWbaGhvc3ZN7Kebi6Zf0ZazKZ2LN9T5bs0xaLhVNHT2E224/G0DnpCK0bis7p+uJYvV5Ps7bNsq03EWWLpHi/hTUbNtCrf396PvYY86ZPx93dPcv9Rg0aMHLoUCZ+8QUffvIJGkXh/XfeKbD2o05cX3OwaNkyPvzkE/7bs8dxzd3NrcDaEgVn/CQDLNjE5D4dWZyUKGfUiDtSVJlIly5YSlp6GoGVAlk0exF//PwHLdq1wM3DjdiYWP7Z9g8GZwPPvfocoz4ZhcHZkO0Zer2eBx56INv1Tt07FVq/RdlUptaIpKam0ve113j04YdZNGdOtiAkk06nY8yIEYwbPZoPJkzg4OHDOZa7EwH+/o4PL09PFEXJcm3h0qXUadEC54AAajdvzoxZsxx1TSYTg0eMoGLt2jgHBFC1QQMmfv45ANUa2vMGPNGvH4qPj+Pzm93qGQDxCQkMGDIE3xo18KxShY49ejjef94vvzBu0iQOHjmC4uOD4uPDvF9+KbCvTYnXrx8jD0Vg/N0s2VhFvhVVJlKTycSi+YvwCPAgKTmJjcc2MmD4ABRFIeZyDG4ebrz/2fv8fe5vPvz8wxyDECGKUpkaEVm0bBmxcXFMmzgRrVZ72/Kjhw/nu3nzmDF7Nt9Nm1bo/fv5t9/4cOJEvpk8mSYNG7L/0CFeHToUNzc3Xnj2Wb767juWr17Nb3PmUKVyZS5eusTFS5cA2LNpE341azJ3+nQeeeihXN/vVs8AePLFF3Fxdmb177/j5enJd/Pm8VDPnpzcu5enn3iCI8ePs2bDBjb88QcAXrcZcrvnNG/OGOxTNUfGXSSyEbJuROTJjZlI136+lm3rthXKqMjMSTMx2Uw8NvwxVv1vFUt/WsrQMUMLvB0hCkqZGhH5du5cHnnoIUKqV89TeScnJ1574QUW/P47SUlJhdw7GPvpp0wdP55e3btTvWpVenXvzvCBA/lu7lwAwiMiqBkSQptWrahapQptWrXi2T59APCtYM8f4O3lRYC/v+Pzm93qGTt27SJs3z5+nzeP+5s0oWZICFPGj8fby4vFf/6Ji4sL7m5u6HQ6xwiOi4tLju3c6xzZWM8nyo4acVt5yW5aEDJHQ2p1qEWLp1tQq0MtFs1fdMtTxoUobmUmEFFVlQOHD9O1c+d81evaqROpqamcPneukHpml5KSwplz53hlyBDcK1d2fPxvyhTOnD8PwIvPPceBw4ep1awZQ0aNYt2mTflu51bPOHjkCMkpKZQPCcnSh3MXLnCmkN+/NOoe+C/WIynEW+OLuyuihMtLdtOCkDka0u7VdvZ2Xm2HyWZi5qSZBdqOEAWpzEzNWK1WTCYTbjftvrmdzMWjKSkphdEth+SM5/8wbRot7r8/y73MaZb7GjXi3IEDrN6wgQ1bt/LUSy/xcPv2LJ4/P8/t3OoZySkpVAwIYMuKFdnqeXt53cXb3aP69SN1lJEjQRc5UhnZTSNyZLVa+WHaD5gxs3zKchQUylUuh19tPxbOXUi7zu1uOVVstVrZtnYbm1dvJiE+AWcXZ2rVq0Wv53vhXc7bUe7G0ZCgBkEABDUIokabGsydPpdL4Zcwphvx8PSgdcfWdOrRCScnp8J+fSFuq8wEIjqdDjc3Ny5fuZKvepdjYoDC/0Xs7+dHYMWKnL1wgb5PPZVrOU9PT57u1Yune/WiT48ePNKnD7FxcZTz8cHJySlPQ725PeO+Ro2IvnwZnU5HtSpVcqyrz2MbZYXsphG3snvrbsYOHcvp46dxL+eO3tm+pfXwxsMkX0vGxd2Fed/M45Whr2Srq6oqC75dwKwvZhFxIYLg0GB8K/piTDOy/NflTPlwCt2e6sbICSOp4Fch22hIWmIaKyes5MDyA5jTzGxfv53gWsGcPHqSX2f9il9FP55/83lef+f1PK2ZE6KwlJlABKBzhw78sngx7w4fnuc9/D///juVAwOpHRpayL2Dce++y5B338XL05NHHnrInvX1wAHi4uN5a9AgPp8+nYr+/jRp2BCNRsPvf/5JgL+/I0iqVqUKG7du5YEWLTAYDPh4e2dr41bPeLh9e1o1a0bPvn2ZPG4coTVqEBkVxap163iiWzfub9KEalWqcC48nAOHD1M5MBAPd3cMhjK+6r5fP0aGhTE+2pUdaSep3zGe2gYZHSnrli9czohXRuDm4UbDhxvy5vw3Hfk2zEYz/676l0XvL+LTdz8lqFoQnR+/Pm1ss9l4f+D7/Db3N3r27cnXv3xNw/uv74S7FnONxfMXM2vaLPZs38OcFXNYNH8RNdvWJCA0gLhLcXz7zLfEhsfS4c0OXDl9haj9UcxdMRe9Xs9/R//j529/Ztq4aRzae4ivf/laRkdEsSlTCc02bNlCpyeeYMvKlTz4QPb98TeLi4+nUt26vPfWW3xQgLlEMs375ReGjR5N/IULjmu//P47n339Ncf++w83V1ca1K3LsDff5Ilu3fhh/nxmzJ7NqbNn0Wo0NLvvPj77+GOaZGzVXbF6NW998AHnw8OpVLEi5w8dytbm7Z6RlJTE+//7H0tWrCDm6lUC/Pxo17o1Ez/8kKDKlTEajfR97TU2bt1KfEICc6dP58XnnsvSxr2Y0CyvMhOfSRbWsm331t280PUF2nZuS2RkJFbFPoqoqirmdDNOzk4oioJqU7l8/jLGVCO/bfnNEWx8PvZzZkyaweQfJtPr+V6O596cEC3ifATPP/I86enppJpS0bvpUVWVxMuJ2Cw2PPw80OntwY8pxcQbw9/gjXfecPwhtvmvzbz51Js88fwTTJw5Mdd2clNUCdruVmnp571EMqvmwmazcd+DD5KUnMzfa9fi7+eXa1mTycQT/fqxffduTu7ZQ4C//129S1lSlgMRgBWTj3F8iDd4edGnffPi7o4oBk91eAqb1caPa35k/679jl0rh/Ye4o9Ff9Dz6Z6OoOPw3sN8O+VbatWvxbKdy4i9Gkurqq3wruDNp99+mmWL7+bVm7MlRDv731keafIIHR7tQN3GdTl17BSrl67myReepGJQRUfdS+GXOHLwCCPGjcjyzAXfLmDs0LFsOLKB6jWr59pOTvJarriVln7eS/ITiJSZXTMAGo2GP37+mbT0dFp36cLGrVvJKQ47evw4jz75JBu2bmXJ/PkShIh8cRyYdySFxau3SeKzMub4oePs+3sfA4YPwNXVlQceeoAOj3agXed2HDt8DI2bhmOHj9GuczvadW7H0cNHcfd159DeQ5w/c57f5v6GzWbDpYJLli2+uSVEC64VTOfHO3P+9HmGfDCE2GuxNGvTjE+//5ShY4YydMxQBr83mISEBIyKMdu24SdffBKf8j78+sOvt2znZkWVoO1ulZZ+lmVlKhAB+zqKXWvX4uXpycM9e1K3ZUs+njyZb+fMYcrXX9O+Wzfqt27Nsf/+Y93SpXTqINGzuAP9+jG6ph9Jo905suYim85LMFJW/Pnrn1Twr8BD3R7Kcv3GhGaZW3czr/UZ2weNRsM3E77hlx9+wc3LjcdHPZ5li29O9TM9O+BZTp84zbZ12/hn6z88O+DZ27adyeBsoNfzvVj2y7Lbls3rM0uS0tLPsqzMBSIAVatUYd+WLWxesYIGdesybeZMBo0YwceffQbAwtmzuXDoUJ7WkQhxK47EZwcvsnifBCNlwZWoKwSHBmdZ/JlTQrNf5/zKr3N+JbhVMC37tMTVx5WwnWFcjrxMQGhAlsRnJpPplgnRatatCcDp46ezfJ5b2zePDNSsU5PYmFjS09PzlHitqBK03a3S0s+yrkwGIgCKotC+TRt+mzuX2HPnsFy9SmJ4OFtWruTpXr3k5EhRYBxTNbuiWLx6m2RivcfltBgyp4Rmp06d4viR445rbj5uJCQkYLPaqN60uqPchfALzJw085YJ0TKnmDUaTZbPc2s7t5GBHRt25KlsUSVou1ulpZ9lXZkNRG4mK6lFoerXj9Fx5zGu1LJj1WGZqrmHVaxckdPHTzsWqN74V3nFUPvi0YqhFanYuCI2rQ3/EH/SktKIj4rHp4oPGicNcVFxAATWCqR6i+osmr8oS/3AWoFZ/ro/fug4AKH17WkGMj/Pqe2b62aW9wvw4/cff79t2bw+s7iVln6K0hyIZET8JXjTT5nl+J7I9yar5s0Z08ObpLHlZarmHtbzuZ7EXo1lzbI1QPa/ygGSE5Np1KMRWoOWwxsPs+u3XZjTzbR9tS1uPm7sW76PhCsJAASEBmCymbi/d9aMyzf+df/rD79Sp2EdWndoTduH2zoWnubU9s11U1NSWbpgKU0faHrbsnl9ZklQWvopSnEg4mSzgc1GqhzmVOKkmkxgs9m/RyKb8ZMM16dqtoTJVM09pkadGrRs35JZX8wiLdW+U6Nas2r4VvPFYrJgNpq5EnUFv1A/QlqFsGnWJtZNX0fNNjUJbhVM3c51UVWVVV+swpRm4vCGw9RsWxPFTcFsNGMxWbCYLPhV96Nas2r8MO0HNv21ib6v90VRFPq+3pcDYQfYvmF7trZvrrtw7kIWfLeA5MRkEhMTb1s2c63K7coV92hD5mhISe+nsCu1eUQAotzdiff2xq9CBVz1epleKWaqqpJqMnHl6lW84+OpmJxc3F0q2cLCGB8diuFJJ8k3co/Z/89+nuv0HE1bN+Va7DVsmutBudlsJjkxGRUV1XY9+ZinvydavT3VevLVZEypJrz9vLHYLOhd9SgouHu6Z1kEa0o3EXk6kqBqQawIW4GLqwtWq5X+j/bn0N5D+Fbyxckt94ypqXGpRIdH065zO6IvR2Mh97w/OnQMGDKAWV/Num25T2d8SoP7GuTnS3ZHcktUdvjfw7w78N0S08+yKD95REp1iveAjF90VywW0JTawZ17i82Gd3Ky43sjbqF5c8YsWMBknijunogC1qRFE75a8BVD+g3Bv6I/D3V7iGZtm2EwGLBYLBz99yhH9h/hQNgBNIqGN0e/icFgwGw2A6DVaTm05xAbV20kpHYIDe5rQHDNYEIbhKLT6bh6+Srb1tkPwvOv6M+8VfNwcXWx19Vqee7V5ziw5wCXzl2ifZf2tH+0PQGV7GcgqarKmf/OsPmvzZzef5oWbVsQFRXFY70eo26jurm+k16vp1GLRvj5+znWv+RWrlb9WgX41czdljVbckxUVqt+Ld6b8F6J6ae4tVI9IpLJqiiYNRqQEZHipao42WxoS+5/UiXPggVMbNEZbX03OTDvHnRwz0G++t9XbF27FTcPN4KqBaGqKuFnw0lPS+ehbg8x7MNh1G6Q83EASxcs5fup33Pq2Cn8A/2p4F8BY5qRM/+dwd3Tnd7P92bomKF4el//i9NqtTLw2YGcPHcSTZqGhLgE4q7GUb1mddw83Ii9GktkeCRVgqvwwqAX+Hvr35wJP0ONqjWY8euMUnMAXuZ7nr5wutT1vSwoEynehbhnZE7RdE6l/iNBcmDePSj8bDgrflvBlcgrKIpCQOUAejzTg8CgwNvWVVWVvTv3snn1ZhLjE3F2cSa0XijdnuqGq1v2n4ubV29m0rhJdHmrC2s/X8tb771FWkoaR/cfJSU5BQ8vD1q1b0XbTm3ZunZrlrKjxo4qNSnQb37P0tT3skACESFKocwD86gcRJ+mEoyI/MscJdBW0vLMJ8+w8L2FWC9ZcxwtyE/ZkqY0972skLNmhCiFMnfTEHFRdtOIO5KfBF6lOdlXae67yE4CESFKkn79GHkoAuPvZnasPykH5ok8y08Cr9Kc7Ks0913kTAIRIUqazMRncmCeyIXJZGLFbyt4vffr9GrTiz7t+tC3c1+OHTlG2/5ts5TNabQgp2Rf5nQznn6e7Nq8i86NOtPnwT4M6z+MnRt3lqjEkZKo7N4jgYgQJVSWA/O2hBV3d0QJ8cv3v9C2RluGPT+MuNg4atWvRXBoMMcPHSfyTCRfPv0le5fvzTWB183JvsxGM2u+XsNb9d7i949+R++mx2QyUb1GdU4cPkH/rv3p1KBTifgFL4nK7k2lOo+IEPe67iPr0j0sjIk+OhanbaN+Rz/ZVVOGTflwCjMnzaTPC30YMHwANevYT9k9/O9hjhw+QnJqMnHRcUzvPx2/Kn54lr++SFCHjmMHjwEQER6BJdzCp50/5eqlqyTEJOBZ3pMqdaqgd9ajQ0f/Qf2p36Q+e3bs4esJXzOg5wCmzptK96e6F8u7Axw7eMzR90ldJuVYJvM9JVFZ6SG7ZoQoJTJ31ZRrFETHahKMlDWLf1zMqFdHMWD4AN6d+K4jk6iqqhw/fJzYK7GYzWZsNhs/f/cz29dv5+2P33Yk7XJycqKcXzlCaoWwd8deTCYTm/7axC/f/0Lf1/tm2fqaWbZOgzooioLFYmHUa6NY9dsqFm1eRKNmjYr8/W9+z9zo9XqatW0mJ6gXM9m+K8Q9asXkYxwf4i1bfMsYm83GQ3Ufwq+iHynpKVkyiW5evTlbdtGNKzcy5PkhhNQKYfnu5TmWM5vNtKvZjrad2jL5h8lZ2svpmWazme7NuhNcK5gZi2YU4dvn3idRcsn2XSHuUd1H1r1+YN7qbbLFt4zYvn474efCQQtptrRs6z1uvvbbj7/hXsGdo/uPcvbk2RzLbVy5kStRV3h5yMtZ2sqpLNhHSfq90Y8NKzYQFRFVpO+fW5/EvUECESFKm379GF3TD+NKLTt2hEswUgasWbaGwKBA4pPi6fZ2N8fukMwdJDld6zO2D4pG4dvPvs2x3Oqlq2l4f8Ns6eVzKpvp8eceR6PRsH75+iJ9/1v1SZR+EogIUUqNSVyJ9YpbcXdDFIFrV65hMpkIaR1C0+5NCW4VzK9zfuXXOb8S3Co4x2sterfAxcOFPTv3ZCu3cO5CrsVco3K1ylnauTFHx41lM0cgPDw9KOdbjtirsUX27rfrkyj9JBARojS7ckUSn5UB8bHxpKamZskkevzIcU6dOpXl2qlTpzh+5LjjmsHVQHx8fJZrmfk2khKSsJgtWdrJS8ZSs9mMk96p0N85P30SpZts3xWitOrXj9HA+OXxHDFdJLIRspumiEVFRHFo7yGSk5Jx93CncfPGuHm4EbYtjPi4eAzOBmrUqUGtetmPm1dVlWMHj3Hu1DnMJjM+5X1o0a4FLq4uWcpZrVauxlzFbDZToUoFAAJqBGDT2ghsHEhATfuJzRVDK1KxcUUu7L2Af4g/1yKuEX85nmr3VyMtLg3/EH/gehbSo6uPciXqChaLBZ1Od9uMpe06tyP8TDixMbFUDalamF/WLO9+uz7J2TKlnwQiQpRyY3p4s2JyJMeHwOJryG6aIrBryy5+nPEjG1duzDJFoCgKGq0GqyXrtEGTlk3o93o/uj/dHZvNxh8//8GC7xZw5N8jWcp5envS+/nevDDoBYKqBwH2EQGc7JlP9/yxh9bPtObwxsNoDVoa9mhIcmIyHl4eJCcm06hHIyIOR3B442HOhJ1B76rnwTceZP3n6zm88TCNOtu33bZ7oR3HNx7nyrkrbFy5kS49uzhGHl56/6UsfWr3QjvmvTGPbeu28femvylXoRyduncqjC9rNnnpk+ygKf1kakaIe4Dspikaqqryxbgv6NelHxfOXOCjaR/xz8V/+ObXbzA4G3DzcMPL2wuAwe8NZv/l/cz4bQaurq68/dLbvNbrNfo/2p/Rb4zG19+XWctmcfDqQY4lHGP9ofU8O+BZ/vz1T7o168bOjTsdIwKhbUOp+2BdVn6+ksSYRLbO20pIqxD8Qv24EnUFs9HMlagr+IX6EdIqhPUz17N5zmYaPNKAyo0qE9IqhK3ztmJKMzmykNZ6sBZe5bz45pNvSE5Kvm3G0jnfzOG3eb/R54U+GJwNhf61liyqZYfkERHiXhIWxvjoUAydUyXxWSGY/ul0Ph/7OSMnjOS1t19DURR2bNjBy4+/TKcenZg6ZyoGZwMzJ89k6odTeXnoy7w36T0URWHDyg28+eSbKIrCvJXzaN2xNWAPbk6fOE2N2jVQFIWU5BT+77n/Y/fW3Xz89cfMnTEXCxaMaUYunbyEzqDDycUJg7s9GFBQcHF1IS01DRUVq8VK4uVEFEXBy98LRWtPfGZKNeFd3htnV2fH+1hSLURdiKJuo7qkpKVg09pyfG+T0UTU6Sh8/X1Z/s9yfMr7FMjX8+Z3v9Hhfw/z7sB3sWDJpTZoVS2DRw7m0V6PZqsvild+8ojI1IwQ95LmzRkDjBnlAuMuylRNAbpw5gJffPQFg98bzOvvvA7Y/2of/uJwnF2c6flcT5xd7L/kB44ayLGDx5jz5RxC64by5ItPcvnSZWyqDWywbf02RyCyZc2WLIm63NzdmPnbTPp27susL2bxwWcfODKJnjp2iq8nfI1qUqlRpQb17qtHufLlqF6rOnt37GX/P/s5fug4Hh4eDP1wKKlJqY66OicdoXVD0Tld/7Gv1+sxW8wM6TsEvV5Pu872BGfe5bwBiDgfwZY1W9i1ZRflfcvz4+ofCywIyendb1Srfi3em/AeJpMp1/rHDx5n+mfTcXF1kSmaUkxGRIS4Vy1YwOQ+HcHLizZtqhCgCyjuHpVqE9+dyO/zfufvc387Ao71y9fzxpNvUDG0IvXq1GPGrzPQarVYrVZef/J1tqzeQtWQqqw9sJbuzbsTFxtHUlISznpnwiLsBxkOfHYgpy+cpkbVGo76ADs37qR/1/4s3LiQZm2aOfoRfjac2dNms+znZaQkp+Di6oLNZsOYbqScbzmefvlpXvq/lyjvWz7P73bu5DlmTZvFn7/+SVpqGq5urlgsFkxGE74BvjzzyjO8OPhFR4BSEKxWa67vXhT1ReGSEREhBPTrx8iwMMZHu7Ij7ST1O8bLgXl3yGw2s3j+Yvq80McRhADMmDQDg6uB3mN6s/bztY7Fk9vWbSMiMoIGDzfg6KajzPlyDiePnqRSSCXa92nPmq/XsHD2QgKDAh2Jum6sD9C6Y2uCQ4P5ddavWQKRKsFVGPfVOEZMGMGmvzZxNfoqGq2GwKBAHnzkQQyG/K/fqB5anQkzJjDqk1FsXr2Za1euodVpqVy1Mu26tMPJqeC3696YpOzmdy+K+qLkkEBEiHuZY6rGyJFxssX3TsXGxBIfG0+rB1s5rlmtVk4dO0XFWhVp2r0pp3adYuHchTzw0AOOLaehrUM5tO4QS39ZCkDdTnV5bPhjrPl6Db/P/x2/QD9Hoq7M+plbUhVFoUW7Fhz+93COfXL3cKfH0z0K9D09vT15/NnHC/SZObk5SdnN717Y9UXJUqi7ZrZt20b37t0JDAxEURT++OOPwmxOCJGL8ZMM1PkqntiDF1m8JUx21eSTyWhfp6B3vn6i67Z12zCbzQQ3DQauJ9qaOWmmIwGXk7N9JOFK9BUA2r/UHieD/drF8IvZEpLdnKhLb9BjTDMW+vsVtbtNUiZJzu4thRqIpKSk0KhRI6ZPn16YzQgh8qD7yLqMPBSB9UiKZGPNJy8f+5bczMPeMv8id/ZwxpRmD1ICawVSvUV1Fs1f5EjAFXvJngq9fIh9vYaLh4vjmqJTsiQkuzFRV+aW1OhL0XiX9y6y9ywKt0tSdrvtuHdbX5Q8hRqIPProo/zvf//jiSeeKMxmhBB51bw5o2v6kTTanSNrLrLpvAQjeeHp7Unzts1Z+pN9iiXzL/JmPZuxd/le0pPTAQgIDcBkM3F/7/sB2PHLDkIfCKXNK21AgSX/W8KOX3agd9Xj7O3sSEgGYLPZCKwdyK4tu2hWqRkNyjVg7R9rSU1OZd+ufZTgfQX5cvNoRqa8jmrcbX1R8pSohGZGo5HExMQsH0KIgpdlqmafBCN50ff1vvyz7R+O7D/iSLT1yP89gjHFyPaftmNKM3F4w2Fqtq2J4qZwOuw0p/85TcNuDanStAr+Nf0JWxrG1h+34uXnRc0HajoSkp3bf473W7zP3CFzUbQK5XzL0bRVU7Q6LfFx8TzV/il6telFxPmI4v4y3JW7TVImSc7uTUW2fVdRFJYtW0bPnj1zLfPRRx8xbty4bNdl+64QhWPF5GMcn9xAco3kgclkout9XTGmG3H1coWMjSSXL1wmOT6ZCpUrkJaaht5Vj2pVSbqShKJR8PDzAAXMRjNJl5MAcPF2wcXTfqaM1WQl8UoiTgYnfCv74uzmjCnJRNSFKPq+3pcPpnzA9vXb+WjoR6SlpbFo06IiO+uloOUlSZkOHZ/O+JQG9zUo8Pqi6ORn+26JCkSMRiNG4/WFWYmJiQQFBUkgIkQhWTH5GMeHeEsW1jy6cOYCT3d8GoAnX3ySRs0aYbVY+eKjL7hw9gKt2rdCb9Dzz7Z/0Gg09B/UH61GS8T5CHZu3kl0RDQ2m41qNarR8sGWeJfz5qeZP+Eb4Ms749/BarWybd02/vzlTxo2a8iCtQsc23GvXrnK0x2eRqfT8de/f5WI3SG3yoyaE5PJxJ7te26ZpEyv19OsbTP0en22e3dbXxSdUhuI3EwSmglR+DKDEby86NO+eXF3p8S7dOESb7/8Nnt27CGgUgCdunfCxc2FDSs2cPbkWQAq+FWg4f0NObD3AG6ublw8f5EqwVVo9kAzVi5diV6rJykxiUpVK3HpwiWef+N5EuITWPfnOqwWK20ebkNUVBTvfPROltwYh/Ye4okHnuD7Jd/zULeHiutL4LB59eZcM6OKsi0/gUiJWiMihCh6jgPzjqSwePU22U1zG5WqVmLhxoUs/2c5D3Z5kN3bdrPy95VodVoef/Zxnh3wLH4V/fh7898kJiSSbkxn9p+zWb1/NTu27MC7kjcuni58s/Ab4q/F4+rmyubVmzl78iyDRg9i68mtaPVa0knPtt6h4f0NadSsEQu+W1CMXwG7zPUaabY0WZch7kqhJjRLTk7m9OnTjs/PnTvHgQMHKFeuHFWqVCnMpoUQ+dGvH6ORxGf5Ua9xPT6Z+UmO9zav3sykcZPo8lYX1n6+FlVV+e6z7zDZTDw2/DFW/W8V+/7eR0pyCjN+m0GXx7tkqXurjKE9n+vJx299jMViQacrvpyUktlUFJRCHRHZu3cvTZo0oUmTJgC89dZbNGnShA8//LAwmxVC3CHZTXP3bs76GdwqmF9m/8Ki+Yuo1aEWLZ5uQa0Otfhz0Z8A+AX43bLuzaMNvgG+qKrq2PZbHPLSTyHyqlADkfbt26OqaraPefPmFWazQoi74Jiq2RXF4tXbJAtrPuWU9fPwgcMYrUbavdrOfu3Vdo6dH2mpabese3NujPQ0e86SG8+8KWqS2VQUJDlrRgiRXb9+jA4LY/zKUHaYDlOuUbxM1dxEVVX27NjDv7v/JSU5BTd3N5q0bMKvc37NkvXTP8QfCxY8Azw5tPIQh1cdxqeSDzXa1GD/0v1sXbuV1h1a3zZjaOY5Kjs27KBKcJW7DkROHD7B9vXbSUxIxMXVhToN6+TprJa89jNT5MVI1i9fT+zVWHQ6HVWCq9D58c64uLrcVf/FvUMCESFEzjIOzFsxOZLjQ2DxNSTfCPYMqL/N/Y350+dz8uhJPLw88PT2JDE+kaSEJPTOerq93Q1VVYk+Hc28ofOIi4gjPjKe+Mh4FEUh6UoSWictilbhx5k/8tZHb/H35r+5EH6Bl95/KUt77V5ox7w35rFt3TYa3t+Qvxb/xVvj3rrj/q/7cx2zps1i39/7cHVzxbu8N2kpacRdi6NS1Ur0fa0vL/7fi7me4ps5GnKrfnZ4tAMH9xxk5uSZbFy5EZ1ORzm/clgtVmKiY/Dy8aJP/z68PuJ1yvuWv+N3EfeGItu+eydk+64QJcSCBUxs0RltfTfatKlCgC6guHtULMxmMyNeGcHK31bS+fHO9H29L607tEZRFMxmM892epaIyAhiLsRQp10dzu0/h8VkoVKDSvT+tDcGNwMVqlYgKSaJf37+h/VfrsditNCzb0+Sk5NR/BWe+t9T2dr97YPfsEXb8PbyZuXvK9l5dic+5X3y1XdVVfn8o8+Z8ekMWjzYgv5v9uehbg/h5GTPzHZo7yEWfLeAFQtX0KRlE75b8h0enh5ZnmG1Whn47MBb9lO9rNK1V1dGDRhFtRrV6D+wPz2e7YG7hztgz8Xy66xfWTRnEd4+3sxbNa/UJmgTuSuReUTuhAQiQpQgYWGMjw7F0DmV+o8EUdtQNkZHIsMjHes4vhj3BWv/WMvoT0fzYBf7+giDs4ETR07gG+DLe4Pfw4KF2MuxxEbGotFqMHgYcHa3T6PYbDawgcZJg6Io2Kw2EqISUG0qPhV8KFe5XI6JwVRV5VrENeKvxvPZ7M/o1a+X457NZmPTX5vo2LUjGo3GUf7mRGOzvpjFxHcnMnLCSF57+zXH9ZvL7t25lwFPDKBxs8bM+nOWY2eOqqqsXrqa6Z9Nv2VmU2OikUvnL9Hj6R58+v2njkDn5nYizkfwwmMvYLPZWLpjab4DK1GySSAihCg0Y0YZ8Rh3DSoH3fNTNZHhkbzYfSBpqRrMplRiok+hddLh4lIeT2/7qFBaShQmSwovDnqRFm1aYDKZmPbxNMLPhpMYn+hIeAZwJfoKZ0+fpWWbllSrUQ2wBxLzv5lPUmISFfwr0P6R9jRp0QRnV2dSklLYs2MP29ZtIykhiY++/Ii+r/XN0scvx3/J7G9m88rgVxg6ZiiQPdFY3LU4Hgh+gL6v9eX9z97PUj+npGQ7NuzghcdeYMaiGXTp2cVRbspHU+j6RFfqNqqb49dLVVU+HPIhVapX4cfVP2bZXpxTOxfPXaRbs270H9Sft8e9fTffKlHC5CcQkTUiQoh8GT/JwIrJ8fZ1I9zb60bSUtNIS9Xg5PQxSQlzQTlD+WrlSIhUcXGdhcl4ntS05/Gu7MXinxYzePRgoiOiObr/KOO/Gc+X47/EP9CfcV+Nc0xruFZwJTUtlcHvDXYs6vT08mTy+5Np1qYZy39dzuL5ix19cHN34/FnH6ffm/2oVa9Wlv6ZTCYWzV+Eu587i+Yv4s1Rb6LVarMkGmvXuR1LflyCalN5fcTrWerfnJQsc6Fpm4fbcF+r+1jw7QK69OziKJdOOof+PcQbI97IcVHrri27iLoYxWezPssShOTWTlD1IJ7o9wSL5izi/97/P0nLXkZJZlUhRL5lbvElqWyckK1zCiQpcRUGNz0PDe2Cs6eZpPg/SUnahLOXgU7DOmGymZg5aSZLFyzFw8uDns/15KmXnmLZz8swm81ZEoDdvNW1d//eaHVamjRvws5zO/lpzU98+/u3/LzuZ3ae28n4b8ZnC0IAZk6aiclmotPw6+3n1M7i+Yt5pNcjVPCrkKX+rfrU97W+/L35byLOR9yy3I0W/7iYGrVr0PLBlnlv5/W+XLtyjc2rN9/R90aUfhKICCHuXEJCmUh8ZjFfBtVM1furcV8ve0Ky+MQfSElbQq0OtWn2VDNqdajFovmLuHD2AqH1QnFxdaHR/Y1ISU4hNib2lgnAvMt5UzWkKhEXIihXoRytO7SmU49OtHywZbYFo5kyR0NuTJK2cN5Cfpn9S7Z2Ii5E0PD+hlnq3y4pWaP7GwEQcSEiz8nLIs5HUL9p/SzrXG7XTs06NXF1cyXyQuTdf6NEqSSBiBDizvTrZx8VibjI4i1h93Tis/jYXwGo/6j9l/kDLz2IoknA2dPEAy+3BuxJykw2EycOnXBMW2i09h+xOzftvG0CMK1Wi9WS98ykmaMhNyZJS01L5fix49naMZvM2aZSbpeULLPv/+7+N8/Jy6wWa77byWzLYsl9Aay4t0kgIoS4c/36MfJQBMbfzexYf7LEH5iXnpbO1ctXSU1JzXMdm81GmnEtKGCz2Nf2+9WsiEarUKtDKBXrBAIQ1CCIWh1qEXEhggtnLmC1Wjl/6jxarZa/lv2VawIwq9WK0WjkUvglKvhXyLUfN7pxNCSoQRAAlepWwtnTmcAmgQTUDMjSjtZJ6zgZGG6flMxqtXLu1DkAdm7eectyN6rgX4Hzp8/nq52Y6BiSE5Pz/O7i3iOBiBDi7jRvzpge3iSNdufImotsOl+ygpG01DR+n/c7PVv3pJ53PVpUaUGDcg3o2rQrP3/3M8lJtz6zJTnxCi5eVoJb1uCfn/9GVVU2fb0Og7uB1i+1hhs2HrZ7tR1aFy3Rl6LZtm4bi+YsolGzRkRcinCMCDjK3jAysGbpGhLjE3msz2N5eqebR0MAjm86jt5VT+OejYmJisnSjouHC0t+WuLYhnzzKEVOfVo0ZxGBVQK5Gnf1luVu9NiTj7Hv732cOn4q7+3MXYSzizMdu3bM07uLe48EIkKIApHlwLwtYcXdHQD27drHg7UeZPQboynvW55JP0ziu8XfMWXOFKqGVOWjYR/RtkZbtq/fnmN9k8mE2ZJAzXY1afd6B6KOXeLoukOELfybmm1r4l/TH7PR7PgICA2gdsfa6Jx0TBkzxf4LWQPVmlXDt5ovFpPF8eFX3Y9qzarxy+xfmPv1XFp3aE1I7ZDbvlPmaEjNtjUJCA3AbDRjTDWyc95OQlqH4B/qT0x0DGaj2dFOvY71SE1O5fd5vztGKW7Vpzlfz2Hjyo14entSvXn1XMvdPCrSpWcXyvuVZ/a02XlqZ8EPC/j1h1/p8WwPvHy8Cuz7LkoXySMihChYYWFM9KmGNkRL/Y5+xZb4bN+ufTz/yPM0ataIT7/7NMfsnZEXI/lg0Afs3LiTH5b9QLvO7bLcn/v1XKaOn4qzh7P9xNuYZCxmCwY3A67e138mKYoCN+QhS7mWgjHFSHm/8pSvWB6bxpZjH1VV5Wr4VZISkliwZgEt2rW47Xst+2UZ40aMw8nVyXHNYrJgMdr7lflcdw/3LOfRxFyIITU5lQ8++4Bf5/2aa1Iyi9lC5KlIPL08KRdQDps2574D6NDx6YxPaXBfA8e1n2b+xEfDPmLA8AHs2LIj13ZsNhuXz17GZrWxfPdygmsF3/bdRekhCc2EEMUuM/FZuUZBRX5gXlpqGg/WepCQWiHMWzkPg/P1c1NuzvBpsVh4o88b7Nmxhy3/bcmS4TM5OZmZn84kJTkFAGO6kbV/riU5IRnfAF/KVSiHi5sLzds2x8nJiSvRV/jv8H8c2X8ETy9PrsVco1b9WrR5qA3ValTD4GygnG85bDYbxw8dZ/WS1fx39D8+mfkJT72YPWV6TpKTk/n5258dp/CCfS3GpQuX7JlbASe9Ex26dsDZ+XogoigK876Zx+4tu+ncszPtOrWjvN/1c17S09LZvXU3q35fhaIozF89n7iYOEwmU6590ev1NGvbLEv+D1VV+XT0p8z6YhYPdHyAh7o9RJXgKo77FouFg2EHWbV4FdGXopn5+0zad2mfp3cXpYcEIkKIEmHF5GMcH+Jd5FlYf5/3O6PfGM2mY5uy/BKEnDN8Xou5RpvgNrz98dsMGD7gls9OSkhiwsgJ/PnrnwC0aNsCD28PYqJi2PP3XgBcXX3w9AnEmJ5MUnwUFosRnc6AwdlA01aNuXD2AhfOXKBW/VqM+mSUI118YTObzUwbN42fv/+Z5MRkmrVpRgW/CqSmpLJ3515SU1J5uPvDjP1iLAGV7vw8IVVV+XXWr0z/dDrREdHUa1KPKtWrYDabObzvMJcjL3Nfq/sYM3UMDZs2vP0DRakjgYgQouTIPDAvREubTqFFcmDe460ep4JfBWb/OTvL9czspqcvnKZG1RrM+HWGY7vpWy++xf5/9rPx6EbHmS23Ens1lsXzF/Pv7n9JSbKPmBzZfw5P78m4uF7/5aqqKmmpYcTHLsJiDqNB01oE1wqmd7/eNG3dNMezZQpbakoqyxcuZ/v67SQlJOHi6kLthrV5+uWnCQwKLLB2LBYLm1ZtYvXS1cTGxKJz0lEluApPvfQUdRrWKbB2RMkjgYgQosQZvzweQ+fUQp+qSUtNo75PfSb9MIk+/ftkubd59WYmjZtEl7e6sPbztYwaO8oxKrJhxQZe7/M6O8/uvKPRgDMnzvBi9xG4uf+IwTl7FlRj+n+kJPdn3orP8rQoVYjSLD+BiOyaEUIUiTE9vK/vqinEbKyZoxPePt5Zrt8uw6d3OXv55MRbb+cVQhQsCUSEEEUm84wa666oQsvG6upuHz1NSkzKcv12GT6TEpKy1BdCFA0JRIQQRatfP0bHnbdnY111uMCzsbq4ulCzbk3WL1/vuJaXDJ/rlq+jYlBFEuISmPTeJIa/MJzhLwxn4rsTOX7oeIH2UQhxnQQiQoiil5mNdWx5jhwp2EcrikK/1/uxYcUGoiKigNtn+Fy9dDV//PwHGo2Gbs26seSnJVyOvMzlyMv88csfdGvWjac6PMU/2/4p2M4KISQQEUIUn+blz8CVK0Rbogt0mubx5x7H1d2V9we+j9FovGWGz6r3V+XDIR9iMpnw8vbi61++ZufZnfyy/hd+Wf8LO87sYPrC6disNvo/2p8Vv624Zdsm43mM6f9l+zAZzxfY+wlxL5FdM0KI4hMWxvjoUHR1TGjru1Gu2q1X1+embmXvbNuCt6/fzoCeA2jcojHXYq+BLns9q9XKlQtXSE9Jp3aD2sxYOCPXU2AtZgtf/u9LNq7cyE9rfqJ52+ZZ7keGR/Ji94GkpWb9+85qsZL5Y9bgbGXizA/wq+jnuO/i6kJglYLbMptfNyd4E6IgyPZdIUTpsWABKyLvIyzwCQgNzXd1ffBZDLVPUL9+9nv7Nuzjk+c/IT0lHSeDKzq9K4pGg6rasBjTMBtTARWNVsvHS8fx3cifSE/VZn9QBoOLBb3BgqunK5NWT8qWvj4yPNJxsBzAlagrjH5zHOnp9uBEUTTodPosdVxcbcxbMaPYgpGcErwJcbfyE4jk8DeCEEIUkYwghPYdaN48/0GIXTAHTkDOO4Jr029YXRZ88X+YjCpm4/XpH402AGe3J0hPWYDBJZDjmwNIvOqMVvsxWl21bE+yWs6TlPohLR9+jLWLPmHD8gtENrOPxjieGajBDbfrn1s1mCwG9C7jcDJkP+vGbLxAcspYLiZdRGPJ+0x5QSWFy1zEm2ZLY+HchbTr3M6R4E2IoiKBiBCi6IWFsWKLO3AfjBx1149rXCH3A9MqpJv40y0Q5/I/otV6YbMloiju6HSBxMX9D1OaF27OFQjxrIheo8PFORS9PnvCNZNJT1qajsceeJpdq7/nnxkX8f2gEVvP5N6vKxfBaARVqQqa7EnOzBYwGSFsD5zP4xIZ35B44ivGF8hhgpmLeLu93Y21n69l27ptMioiipwEIkKI4hFYCfr1K7Lm7NMilYBKjmsWSyQ6XWUUJe+jETqdnsDAmjg7R1Lf0vqWZSOs5XBSDTjjhh73bPe1uKGqBkKtTahsyVtgcWDnWWJrn4D6d7ft2Wq1MmvWLKq0rEK9x+px/O/jzJo1C78H/XIdFfHWZl+LI8TdkkBECFH0Tp4Eso8QFD2FO1kmp6pqsS3sbFwhmLC/gtl34uxdPefkoc1cPHWNvkN6kBrnTNOeHfl5yDx+G3eF0IbZR0V0AdH4hsRD5btq9o5I8HNvk0BECFF0MqdkArsX6WgIgM2WTFLSb1itV9Fqy+Pi8hBabWXM5nOYTJWIjDyFzZbzjpkbmUzpXLr0H02adC6CXueseXOA3KejbsdqtbIqbDm129SkWq1qAFSrXZ3abUI5Fbac3g++mH1UxBLMgZ1niQko+Gy4t6L1jqd+/YKZihIlkwQiQoiiVcRTMmfO/Etc3AkslubAzaMfesBEQsJpZs0aBkBa2lv4+LyLs3PbHEc9/v13DcnJcbRv/3xhd73Q7N+/lstxJ+ny3CtZrrd+tj0//d8c9u9fy/33d81Wr3GFYLDceQB0J8L+goPxfxMZUnjnE90sp+3govBIICKEKDpFPCXz/fdDWLnyawB0umA8PPqhqlYSEr5CVZMAU0ZJhZdemsxvv31JevohLl16EDe3PpQr9yGK4gSA2XwOVbWxYcNcmjTpTGBgjTz3w2w+l6/rhclqtbJ2w3dUa1GNClX8sZiujwL5VvWnWouqrN3wHU2adCkRO2iaN4ewv1tz4e+iaU8fbF+DU79+PN5a76JpNENZDX4kEBFCFL67nJKJiQnHaEzN9b7B4Iqvb5Us12bPfpuVK7+mQoUg0tONWCxJpKR8jckUj6Jo0eu9sNnAYkkEVH7//RNcXMqj1SqYzf6kpCzGbN6Im1tlFEVBVW2kpoajqiZ69x7F3r1/5dofd3cfatVqybVrEej1KibTGCwW+9oSqzUdrdbZMdpiMNj7X1TOnTtAzLVz2MJMfP74hBzLaKx6zp07QI0aTYusX7fSvPntyxQc+xqcg/FFFPncwDfkRJkcjZGEZkKIwpWZK+QOp2RiYsIZO7YXRmPuZQwGGDduqSMYiY4+x2uvBePrW4XOnV/l558nAW5ALGADvAAz4Jrx+bWMf2pQFHfABUhCVVNxdQ0EVNLTY7HZTDz55HssWzYTm8051/5oNOk8//x7bN35E90fHUatWi0BOHJkKytWT6P7o8OoX//BjL5nD6IKk9ls4ujRbVgsplzL6HR66tVrh5OTPtcyouAd0f2N1juecuWLtt3AihT4GhxJaCaEKFnad7jjP2uNxlSMRtDpxuPkVD3bfbP5HEbjmCwjJrNnDwdg7Ni/WL16JvYgZAjwPvAFUAX4CBgHVASOAa8AbqhqMtenbAykptoXZxoMzXFxScDXNwibzRlF+RKNJvv0jM12Gqt1CLvCFmMxJLF7zzLHepL5C0ahuJvYd+AvOnUaUCxTH05Oeho3frjI2xW3V9/SmrC/IKmI243t+heR5U8QWLHgnpl6ixHMm0kgIoQoPGFh9tGQO02aegMnp+o5JhoDuPF4GJvNxt69f+HrW5UqVerd2BnsAcj/AaewL1Stk3HNBY0mFJvtFFrtAVT1R1T1R/T6WhiNOwgM3IBOV4m0tOsjOhpNDTSaxjn2x2YzkmS8zGMjerJu2hr2718LwOW4kzwy7HHHtZwWhIqyrWinoezC/uqKMfgsUQX4zPS0vIdTEogIIQrHjVMyRfjTNS4uGqvVTLNmj9105zjQFch5FEKr7YrNNg1FiUWjGYCqbsHXdxoREfdjtUZnJEO7PVW1otUbCWkdTONHmnEm7CRr1n8LkOVaSVoQKsq2u90OnpPU1MQ8l817OkEhhMiv9h2KPF9IUlIsAG5u3jfdSYcbzoG5maL4ZPzbtRuuuQIKNltKnttX1b9x8XKi5dNtAPuW2EsxRzgfsZ8HnuvguHY57pRjpESIskwCESFEwcuckikG5crZT7G9ejXipjvuQEyu9VQ1s/z1iXKbLQ5Q0Wi88tS2qlrR6JZSo00IfsH2nQ8VawZSqWkAit6KX/WKGdcqEdI6mLUbvsNqtebp2ULcqyQQEUIUrAULMrbqFu2UTKZ9+/5CURQ2b/6RPn1cWbt2FhCHfT3In0DOoxtm83JAh812AYtlMBbLcaKjewMKRuN+rl4dTVzcCX77bQI221Ws1l9R1YQsz7DZ1uLifZFGPa4HYampiTR6vAE6g5ZjWw86rsuoiBB2skZECFHw7mKXTG5ulxRs//51vPXW/aSnpwD2HB2enhVISrqKxZIGLMmo8THQAvvOmONAPLADuAzosdmew7661oDNFg9oiI+fBGjQ6Vzw96/O1atXsNmmYjJ9hUbzNBrNYEBB0X5GcMvKeFf0xmKyYNGZib0WhX+oP8GtQtjx6yZCW9VDo9WUyORhQhQHCUSEEAWnAHfJZDIYXDEYwGgck2V3zI3M5hh++GEoTk7OPPnke/ToMZwXXgggMfEq3boNZenSLwEL9twhk7HnEbEBb2b8M3PKRkFRfLHnEElGVc1otQacnQOxWJIxGuPw9a2CTncEq9UJVU3BZpuPzbYIcMPgnM65MAPn9hzCw90HFEhNvT5qYko1MenRsRhcrucgKWnJw4QoapLQTAhRMDJ3yeQwGnInmVHzWv/ixeNMnNgbFxd33nprAVqt/e+ro0e3sWTJJHQ6PTVrNsfd3Yvo6HNcvHgMUAgNbY7FYubcuQOoqo3g4Pto2vQRYmMjOXZsB1FRp/Hy8qNr14GAPSvqyZP/8O+/a+jefShBQXUAuHTpP1as+IqmTR+lVq2WWK0WnJ3dCQqqg8ViJjz8CFarPYLSanVUrVofrdbJ0f/CSB6mqioXLx4nKKhOsZ0SLMq21NREnnnGK08JzSQQEULcvdsEIfnNjJofo0c/yNGj2xgx4le++GJQloynNlsa9vUhYB/t0OLh4UNiYtZFq4qiw2AoT3r6NewjJ5n8sR+Ul/nLPBWdzoaq2vDxsf+SNxigefOOLF/+JXPnRuDl5Zvvdyhoe/f+xYKF79HvmU8kV4koFvkJRGSxqhDi7oSFsYLuMHJUjutCbsyM6uKyINuHTjceo5FbjpjkJj09lWPHdlClSj1cXDwdGU+12lVotatwctqEVrsLjSYza6olSxCi0fgDoKoW0tNjsOcY6Q94AE+g1S4FZmFf5DoTCMLNbThWaxpa7TuOvrds+QSKorBhw5x8v0NByzzUzmJIkl05olSQQEQIcXdOnsxTsczMqDd/5JS2Pa/Wr5+Nqtro3ftdx7XMjKeZHzpdS5ycZuHktB2NJpD33luGn181QMHd/XG0Wn+Cg9MJCNiL/WTg1tiTbL+MRlMPCEFRGmbc0+Hi8gQ6XWWMxr2Ovru7+9Cy5RP8/fcSitv+/WvtGVwHPy67ckSpIIGIEOKOrZh8LGNxagGuTs2HmJhwAGrXbpXnOjqdHh+fAEDFao1Fp6uCRmO4YS1FbMY/K+dYX1E06HRVsVqzTu/4+VUjISH3PCVFIXM0JDODq+QqEaWBBCJCiDsTFmbPFZLLlExR0Ovt60HsW3bzLnPxqKLoUFXzTXczNxPefP06VTWhKFkXl1qt5mI/rTZzNEQyuIrSRLbvCiHuzMmT2Kcr7k5q6iaSk8P56af3qVixBl26vEbFiiHZyhmNqRw6tJnExBh0Oj0VK9agRo37Afjxx9FUrlwbVU3PIbDILjLypGNkIyVlGVbrtRvuVs3457/ktA/ZZkvCZDqKu3uvLNePH99JxYrZT+MtKjeOhgTUsJ+Lc2MGV8lVIkoqCUSEEPm2YvIx4D5of2dTMjabhWvXRpCYOAdVtR+OtWvXUgCWLp1MxYo16Nv3f7Rr9zSXL59n5cqv2LBhLikp8Vmeo9PZRyD27fuLffv+AsBi6YqqDkSrHYSi+GVr+9SpPaSmJuLsXAE3tx7Ex39BYuJc9PqHM0rUAxoAi4BnstVPS1uBqprw8HgBm82eIyQ8/Cj//beb995bdkdfj4KQORrS5blXslxv/Wx7fvq/OXLaryixJBARQuRdWNj19O35PMwuMwOqzZZCVFR3rNYoFMUDV9fHMRjOMnbsj1gsZn7+eQwHD25gypRn2Lz5R44f34FW60SXLq/RqdMrKIrC+PHdiYo6g7e3n+NMmTZtnmHnzo1AE6zWKVit36LTfYOi1Mxo9zQ2m41Vq74BFNzcKmGzJeDq2oX4+Cl4e5fHvnX3JPAYMBmrdSEQiKomAZFAOsnJ83B1fRibLQGz+RyqqrJy5ddUqFCZZs26FciXOb8yR0OqtahGhSr+WEzXtyBLBldR0kkeESHEbYXHxJBqNLJ51mlo3gIaNsxy/1YJyW7MI2Kz2YiLO4rNZsLJyRO93hsAJyfo3v0NPDzKERV1htTUeLZvX0RqaiKenr507z4Um82C0ZjKhg1z0Gi0dOz4AgaDK5cvn2PTpvmZPUFRfFBVK/b8ITYUpQKgRVUzM6jaaNWqF6dPH8Nk0mCzmUlOPoeiaLHZnLCf0Ktm1LcA3oAeewbWayiKgo9PHbRaA6qqkpp6gbS0OD744M9iC0ROn97HN9+9hE1ryrWMxqpn8OtzJYOrKBKS0EwIUWDCY2J4ZOxkUhItpBk1kMMPldslJMvMjPrXXzNYufJr6tZty7Fj+7H/0s+Jij1oyPzx5Io9t0cikA6Ux77WPnOnS0LGdTKuuQBWFMWCojhhs1nJXHyq13vj4VGVuLgorv/4SwPSUVUbOp0bTk7u6HQa3N1diI4+i5eXLykpCej1zgwZMpty5QLZvfsPtm37ldjYKIYOnUv79n3z9gUtBGaziaNHt2Gx5B6IFEYGVyFyk59ARKZmhBC3lGo0kpJowWwah4shBFy8s9w3m89hNI65ZUKyzABl+/ZF6PUutGv3LMeOnQS+AmreUNKGfRRiPTAG6AasxB6QTAYGAv1RlAGo6lUgAIgCPsQe1BzMqG/vi6qSMToCUB5FcaF8+e+AQBQlIiOh2SVUdSzly48gPX0rycmLSUuLAhTS0pxQVRsJCTGoqg2LxcTnnz+P0ZiKTqfngQeepGfPtwgJuX7abnFwctLTuPHDty8oRAkkgYgQ4vYsZpw86qD3yvkXbm6H0d3o5Mk9JCRcoUOH/mg0mZkDaqIoTW58EqpqAj4BtGi1r2K1bsOeYOwc9gDjXTQaP6zWi9iDGC9An1F2ALAK+BuYjl5fH5NpN9AbJ6d3UdUBODkFA1VRFD0aTXVU1QNwwtn5fjw9+1GhwtckJv5AevpnPPpof0JC7uO++x7h1KkwIiJOYDKl4eFRnvvuewRv7+yLYYUQ+SOBiBDi1g4dIs1qwOUuH3Ps2HYAOnToT3T06duUPgfoURQNilITVd2XcS0YqML1aZgbNcGeov008BywgvLlvyY2dggmU1Ke+6nROOPq2glFmU+HDv2oXLk2AA0atKdBg/Z5fo4QIm8koZkQIndhYWwOcwWtFlzubp1W5tSNi4t7Hkqbub7+I/OkWhNgyLWGPTOqHjDedN2QUVcIURJJICKEyNmCBfatus1bgFtui0rzrnx5e5Kts2cP5KG0J2Bf22FfCwL2KZgocst4qqrx2BedlrvhmorFEoF954sQoiSSQEQIkd2CBfYzZNp3yLZV9061a/csGo2G5cun5aF0e8CI1XoJOIN9Frk99i21f+VYQ1VXYB89ub5o02w+isVyAkXpeDddF0IUIlkjIoTIWfsO9jNkIk4A1xOS3Sy36zfT652pV689hw9vIi7ucsbVU2RNIJC5a6YOoKCq/8O+Y8Yd+1RNQ+AzrNbKwDXsIyBRQDo22y/YT86Nxp58zEJy8g9otYGoaiA222nAjNl8FvtW3QhsthTsu2Yyr+fvnYQQd08CESFEVpmjIRnZ2w0GVwwGMBrH5Lo7xmCwl7udV1/9kiFDGrJ06STsgcWQW5TWABEZ/27JKGsE4oFHsecW0WAPVGIzypiAxzPqJGA0HsPNrRLp6QNRVVCUdIzGd1EUDRCDzWYvmXndYrmeYyOv7ySEuDsSiAghrrtxSibjRF1f3yqMG7f0lnlCbpVZFa4nNNPpdDzzzBgWLvwYrdaJmjWDqV69MU5OBtzcvAG4dOkEJ07s4soVa8YCVIV69ZpSsWIIer0L588f5ujRbQQFVcPXN4iLF48RE2OlV68ReHn5ce1aJP/9t4v//ttN8+bd6dLldRITYzCbjbi6ehIcbN8uHBsbiclk332j1ztTrlxgtmtGYyoRGSNCeXlPIUT+FUlm1enTp/PZZ58RHR1No0aN+Prrr2meh2PDJbOqEEVswQJWhL7tCEIKwo0p3jOlpl4mJSXihlI6tFo9qmrFZrMX1Gqd+OSTrWzYMJv16+cAYDB4o9HosVhSMZszt+QqODt70aLFY/zzz0rS0xNQFA2urhVxcfHPCGbIqJ97Btic+nmz22WQFULYlajMqosWLeKtt97i22+/pUWLFkybNo0uXbrw33//4ecnyYCEKDFumpIpKEZjKkYj6HTjcXKqDoBOd5bU1FEoSgtstlXANaxWI6BDr2+Cu/tzaLUL8fDw4Ykn3uHff/diMjXFaNyL2RwHuOHs3AQnp+qkpx/AbD7B4cObsVqteHoOxtPzRTSarDt9bpcBNqd+5qe+EOLOFHog8vnnn/Pqq6/y0ksvAfDtt9+yatUq5syZw7vvvlvYzQsh8iIszB6EjBxVaE04OVVHr6/t+FyrNaAo76DTfY3Ndo7AwOro9fa0aSbTCdLSFjrKajQ6fHxGZKmfyV62H2+++TEzZ36Ii8ugHMtB3jLA3tzP/NYXQuRPoW7fNZlM7Nu3j4cfvr6dTqPR8PDDD7Nr165s5Y1GI4mJiVk+hBBF4ORJCKxU3L0QQpRBhRqIXL16FavVir+/f5br/v7+REdHZys/ceJEvLy8HB9BQUGF2T0hBNwwJVPAczJCCJEHJWrXzOjRo3nrrbccnycmJkowIsQNLsfFsWTXLiJjY9EoClV8fenTujXe7nlJm36TsDB75tTA7jCyX8F3Vggh8qBQA5EKFSqg1Wq5fPlyluuXL18mICAgW3mDwYDBkPtZEkKUVUcuXOCT339n8d9/AxDg7Y0KRMXGMvSHH3juwQd5/8knqXbT6GOuHEFIJegnQYgQovgUaiCi1+tp2rQpGzdupGfPngDYbDY2btzI4MGDC7NpIe4Z6/bvp9fEifh7ezPphRd4oWNHynl4APZAZNa6dcxcs4Y///mH1WPH0rRGjbw9uIiDkBuzlZrNZ1FVM3ACVU1CVS9jNpsA52xlc6p/q+t3mwH2busLIfKn0Kdm3nrrLV544QXuv/9+mjdvzrRp00hJSXHsohFC5G7f6dP0nDCBDg0bMvXllwG4kpDAlYQER5kn27Th4caNGThzJo989BH/TJlCcA4jjg6O0ZDC6XNm8rJMsbGRqGoiKSn2LKqZeT1U9SqqOtBRzmTyw2K5/iPpxsymecns6u7uc1cZYAsyg6wQIu+KJKHZN99840ho1rhxY7766itatGhx23qS0EyUdQ998AHXkpL4beRIek6YRopRm2tZg85Ecvo1Ojdpwrxhw3Itt2LysUIbDckpKZjVaiIhIQJVdcm4ouLhUQ776br2HOt6PQwdOpNy5a5HRzdmMb05uLlZZtm8lrtV/++mvhDCrkQlNAMYPHiwTMUIkU/HL15k06FD/PL229hUlRSjFr3uIwxOVbOVNZovYLR8xHMPPsg3q1Yx5eWXqZDT//xhYRBYq9CmZHJKCmY/TG40Gs04oBKqehlX18o4OV2fhrFYxlCuXCCVK+ecvyOvv/zvNkiQIEOIoleo23eFEHdu/qZN+Hp50at1a8c1g1NVnPWh2T4yg5PerVujqiq/btuW/YGZUzJFIDMpmF5fGyenYBTFCUWpjUZTH0UJxsmp1g33s2cxFUKUHRKICFFCnb9yhQZVq2JwcspzHR93d6r5+3PhypWsNxYskF0yQogSqUTlERFCXGexWtFq8v+3glajwZp5vj3keKKuEEKUFDIiIkQJFeDtzemoKGw3BhW3kWYycfHqVfy9vbPeuCEIMRrTiI2NIjk5niJYq35bqqpis1lISLiC0ZhW3N0RQhQxGRERooR6pl07pv/1F5sOHaJyhQp5qrN63z5S0tN5qk0b+4WM0RBziJl/dvzGqlXTOXr0+voRP7+qdOnyOp06vYK3d9Gehm2xXCExcTYJCd9gtUYyevSDANSr146uXQfSsuUTODnpi7RPQoiiJ4GIECXUA3Xq0KBqVaYsW8YXAwYA9t0xOTGaL6CqKj9t3syjTZva84hkBCEX61dj/NwXiI4+Q/36DzJ48A/4+ARgNKayb98aFi36mIULxzFw4Lc89NCLBdL32yUvS0hYTELCBBRFwdm5HTqdgX79RqDVOrFlywI+++wZAgKCGTNmJUFBdQqkT0KIkkkCESFKKEVR+LhvX5745BO+XLECV72FVNNHmHJItqWqKgmpEUTHpTJnyBDH9UsNQnh3wRv4+ATw1VeHqFatQZZ6bdo8xcsvT2H+/FF8+eVLmM0mHnnktTvuc05JwaxWE3AJm21QRl9TSEhIwNm5PG5uldFoYjEYynH//Y/h61uFzp0HcP78YaZMeZZ3323L5Ml/U6mSHMgnxL2qSBKa3SlJaCYEfLl8OcNmzaJjw4a80LEjzWrWdGQntdpsbD96lFnr1nHw/HkWvPUWT7dtCwsWsPxSE4acmo3N4MSnn+7g0qX/SE6Oy7ENVVXZuHEuu3f/wbBh83F398m1P+7uPtSu3QrIOQFYbGwkJlM6AHq9M+XKBTquxcSE8913g2jT5mk6dXoFs9mYpdyN9S0WE3PmvINGo+X99/9wvLMkFROi5MtPQjMJRIQoBZb8/Tfv//QT/126RK1KlahduTKqqnLw/HkuXLnCfSEhfPbii3Rs1MgxJXOwqgdjfh7EhAmbcXIy8N573bDZnHNtQ1HSMBispKUZUZTyuZbTaNL55JOVlC9fKVsW1ZsZDDBu3FJH4PDtt4PYtWspn366nfHjn8lW12azEB8fg6qCoqTj6upFUtI5vLxC0es9cnymEKLkKXGZVYUQd6d369b0atWKzYcO8fPWrUTFxaFRFLo2bcqLDz2UZZQEgPYdWL1pMkFBdalf/0H27VuNzeaMonyJRpP9UDyb7TSqOpTq1Wtw9Oh2FOVTtNoGOZaz2YaSnByHu7tPtiyqNzKbz2E0jnGMmKSmJrF584/06DEcq9WSY12zOR2IQFHSgfG4uX1CevpQTKZqeHl9me2ZQojSTwIRIUoJRVHo2KiRfdQjN5k5Q0Lh6NHtPProG1kCFI2mBhpN4xyrWq1QpUo9jh7dhqJYblnuRplZVHNy4+Fx588fJC0tmdat+9yibhqKokdRTKiqE3p9CO7u/UhMnOkol9uBdEKI0knyiAhxr7gpcVlaWhLu7uXy9Qi9PvNguuQC715aWhJAxoF3eafV+mCzJRZ4f4QQJYOMiAhR2mWeIRPYHUZeT9/u4uJOampCvh5lnxoBcCvADto5O9vPuUlNTUCjyf0U4ZvZbAloNB4F3h8hRMkgIyJC3AtyOEOmVq2W7Nq1LF/ZUy9ePA4oKErNAu4gVKvWEL3ehV27luW5jqqqJCcvw9m5VYH3RwhRMkggIkQpl9uJuo8+OpBz5w7w33+78/QcVVU5c2Yf4IKiFPwIhJubF+3b92Xt2u+wWvO20MNkOoDJdABPz4EF3h8hRMkgUzNClFaOKZmcT9Rt0qQzlSrVYubMgTz11PuAfddLTuy7ZpJITU1GUXxvWe5mN2ZRvd31xx4bzPr1s1m+fFqOZczmdFQ1AlVNR1XTuXZtDDpdNXS6IEymE7m2JYQovSQQEaI0yyUIAdBoNIwa9TvvvtuGn38eg6KkoKpDs+16UVUbqpoEpNC6dR/CwjZhs2Uvd/256bi7++SYRfVmBoM9AVmm6tUb8fLLU5k9+y3c3f1wdn4Pi+X6ehGbzQLEYLNZUNVrqKqKt3dt0tP75/pMIUTpJoGIEKWRYzTk1sWqVWvAhAlbGD++GzZbIjVqhNKwYUfc3Hwwm42cObOPgwc3YDKl06PHcF555XNOnNiVawZWyJpZddy4pbfM6ZFTFtTHHx+OVqvjhx+GYbGk0rLlE9Sr1wYnJ2cSE6+yc+fv/PffP3h4lGPw4O8JCqp722cKIUovyawqRGlzmymZnKSnp7Bt20L++ms6Z8/ud1z38vKlU6cBdOnyGv7+1Qqpwzm7fPk8a9d+z/r1s0hIiHFcDw5uQteug2jX7hmcnQt+944QovBJinch7lU35QrJL1VVSUiIISUlHr3eBR+fAHQ6p0LoaN5ZLGbi4qIxmdJwc/PGy8s3a5ZYIUSpIynehbiX3WEQAvbsrN7efnh7+xVwp+6cTueEr29QcXdDCFFMZPuuEKVFWJh9NEQIIe4hEogIURosWGBfF3IXoyFCCFESSSAiRGkhQYgQ4h4kgYgQJZ1MyQgh7mESiAhRksmUjBDiHie7ZoQoiTJzhXDnW3WFEKI0kEBEiJLo5EkI7J7nhGVCCFFaydSMECVVaGhx90AIIQqdjIgIUZLcOCXTT6ZjhBD3PglEhChp8nGGjBBClHYyNSNESXLyZHH3QAghipSMiAhREtw4JTNSRkOEEGWHBCJClBQyJSOEKINkakaIkkCmZIQQZZSMiAhRnDKnZCRniBCijJIRESGKiyMIkSkZIUTZJSMiQhSHzCBE0rcLIco4GRERorgEVpIgRAhR5kkgIkRRyzxRVwghhEzNCFEsZEpGCCEACURECRIdF8f2o0dJSE3F1WDg/ho1CK1Uqbi7VbDCwlgRKefICCFEJglERLHbdeIEX65YwZK//8ZitWa517FhQwY/9hg9W7ZEUZRi6mEBWbDAHoQE3mPBlRBC3AUJRESx+nL5cobPnk1oYCBTX36ZZ9q2pYKnJ8np6azcs4cZf/1Fr4kTGdC5MzPffBOdVlvcXb4zmUGITMkIIUQWEoiIYvPD2rUMmzWLd554gkkvvIBGo8Fms7H/7FmuJiZSq1Iltk2cyIItW3j5q6/Q63RMf+ON4u52/i1YwAq6yxkyQgiRAwlERLGITUpi6A8/8FqXLkx+8UUURWHTwYNMW7KEyEuXwGIBnY7ASpUY1rs337z+Om/OnEm/9u1pVbt2cXc//0JDi7sHQghRIsn2XVEs5m3ciMVmY3zfvo4gZNSMGdQ4f565zs5s8/FhrrMzNc6ft18PCCA4IICZq1cXd9fzJ3NKRgghRI4kEBHF4vu1a3nygQfw8/bGZrMxbckS2qalMaV8eRoYDLhqNDQwGJhSvjxt09L4atky3njkERZt305ccnJxdz9vHFMyo2RdiBBC5EICEVHkbDYbJyMjebBePQD2nz1L5KVLvOThgeamnTEaReFFDw8iL13C39sbk8XChStXiqPbd0amZIQQ4pYkEBFFzmK1oqoqBicnAK4mJoLFQkjG5zer4eQEFgsp6ekAGM3mIuvrHZMpGSGEyBNZrCqKnN7JCXcXF8JjYgCo4OkJOh1nzGYaGAzZyp82m0Gnw2SxAFDOw6NI+5tvYWGyS0YIIfJIRkREsXi8eXPmb9qEzWajSXAwgZUqMTcpCZuqZilnU1XmJSURWKkS244epV6VKtSoWLGYep1HJ08Wdw+EEKLUkEBEFIuBXbtyJjqav/btQ6PRMKx3b7a7uPDOtWscMhpJtdk4ZDTyzrVrbHdx4dmHHuLPf/5hYNeuJTrD6orJx+xTMrI2RAgh8kSmZkSxaFW7Nu0bNODlr75i+8SJdGzUiEkDBzJtyRJevnQJkpPteUSqVeODrl0Zt3AhFcuVo1/79sXd9ZyFhdlP1A2sBP1kSkYIIfJKUdWbxsJLkMTERLy8vEhYuBBPV9fi7o4oYFcTE2k3ejRX4uOZ/OKLPNOuHc5OTo7Mqj7u7kTFxjL6xx+JjI1lYv/+NA8NpUlwMBpNCRrMkyBECCGySE1N5JlnvEhISMDT0/OWZSUQEcUqLjmZV776ij/++QdvNzd6tmiBr5cXSWlprNq7l/CYGLxdXalkMOAMWbKtdmzUqLi7bxcWxoqTtSQIEUKIDPkJRGRqRhQrH3d3lr73Hmeiovh2zRo2HTpEQkoKbs7O1A0Kws1m4xGrlZfc3QlxcuKM2czcjGyrkwYOLP5gxDEaUrzdEEKI0koCEVEihFSsyGcvveT43Gaz0fOjj3jEamVK+fKORGcNDAam6PW8c+0a05YsoX2DBsU3TZMZhMiJukIIccdK0ES7ENflNdvq/rNni6mHGQIrSRAihBB3QQIRUSLlNdvq1cTEIu5ZhszRECGEEHdFpmZEgQmPiWHJ339zJT4enVZLdX9/+jzwQLaFxharlVV79nDg3DlSjUa83dzo3KQJTWvUcJTJzLa6NS2N4yYTMVYrOkWhhpMTfdzdOZORbbXCbRZBFYrM9O0yJSOEEHet0AKRCRMmsGrVKg4cOIBeryc+Pr6wmhLFbM+pU0z47TdW7NmDXqejoo8PFquVS7GxDJ01i+fbt+f9p56ivIcHU5Yt49s1a7h07RoBPj64GQxcTUrivZ9+onloKO/07MmTbdqQajRy0Wika0wMLopCgFaLBYiwWBhy9SrBOh1+NWvSJDi4aF9WghAhhChQhRaImEwmnnzySVq1asXs2bMLqxlRzBbv3EnfqVOpGRjIjDfeoO+DD+Lu4gJAxNWr/LBuHTNXr+aP3bsJ8PHh2MWL9O/QgTcffZQmISGAfYTkr717+WbVKp6aPJnHNm1izb//Us3PDxdFoTvwqqcnNZyc2JqWxtjYWP41mfC9dIkz0dHUDCziLSsShAghRIEp9Dwi8+bNY9iwYXc0IiJ5REq2zYcO0XnsWJ584AHmDR2K3skJm83mSEhWwdOTJsHBXLp2jTqDBpFqNPLn++/TvXlzTCYTk5Yu5Ux0NCEBAYzq1Qu9Xs+rX3/NrPXrqRkYyE/Dh5OUmsqXS5dy+sIFLBYLOp2OGlWr8tzDDzNu4UJMFgthU6dSwdMzx7YLdEeNjIYIIUSelNo8IkajEaPR6Pg8sbgWIorbUlWVt2bPplWtWswfNgwnnY5NBw8ybckSIi9dAovFkXysSa1apKSn4+niwsaDB1m1Zw8LN2zAxWrFCVgLTF20iDaNG7PlyBH0Gg2nIyN5/dNPcfX2RgGcsP/HqgAoCv7e3qwdN46GQ4bwxZ9/8lDDhjm2XWCJzyQIEUKIQlGids1MnDgRLy8vx0dQUFBxd0nkYvd//3Hg3Dnee/JJRxAyasYMapw/z1xnZ7b5+DDX2Zka58/zxbJl1K9alYFduzJz9Wp+W7uW3lYrfwBHgT+AnlYr2/btI8VoZEq5cugVhZrp6USeO0eNc+f4zsmJf/z8+NnDg5oZCc3OREXxQseOzPjrL0ZMn55j26NmzGDTwYMF89IShAghRIHLVyDy7rvvoijKLT9OnDhxx50ZPXo0CQkJjo+LFy/e8bNE4Zq7YQPBAQF0btIEm83GtCVLaJuWxpTy5WlgMOCq0dDAYGCwpydJJhNOwIsdOmCyWGgAfA+0UBQ8FIXmisJowBdwBd708KCPmxtrUlN5QlH4GKiQnIyLotgTmpUvT9u0NKYtWcKrnTsTn5JCpcTEbG3fWM5ms935y2aOhgghhChw+Zqaefvtt3nxxRdvWSb4LnYxGAwGDAbDHdcXRef8lSuONRj7Tp8m8tIlJuSQfOyi1QqAKTGRaStXogHqANobyqUCVsAN0ANb4+MJ0GpJVVVe1mjwBc6bzaQajbg5OzsSmr186RIHz51DA9TW63NNfPZyRuKzG7cH55lMyQghRKHKVyDi6+uLr69vYfVFlCI2VUWbsRD0VsnHrBlroRWrldNRUQCUv6mMJeOfztjXgFwxm0nVaFCBEEXBAGCzYckIaiAjoVlyMhdiYgDwyWVRama5u0p8JkGIEEIUmkJbIxIeHs6BAwcIDw/HarVy4MABDhw4QHJycmE1KYqQv7c3/126BFxPPnbGbM5WLkBnj3WTVZVy7u7YgJsnSTKjYRfACPg5OXEtYyHrGVXFqKqgKOi0Wked0xkJzTxdXLCRsYg1B6fvJvGZTMkIIUShK7RA5MMPP6RJkyaMHTuW5ORkmjRpQpMmTdi7d29hNSmK0LPt2nHw3Dn2nDpFk+BgAitVYm5SErYbdoMfM5mYHheHApxPSuK3nTsB+BlYr6pk7hx3BbTY/2NMBdxcXFiblkYVnY45NhsxVitOTk64Zkzb2VSVeUlJBFaqxNXERLQaDRet1ixt31wuX4nPwsJYMfmYPQgZOUpGQ4QQohAVWiAyb9481IxfNjd+tG/fvrCaFEXo0fvuo6qfH1OWLUNRFIb17s12FxfeuXaN/enpDLxyhXrh4cxLTsZDr0dRFMp7eFDB05NIoDNwP3BBVflHVZkIHAAMwGtXr5Jos/GypyfLVJUxQIy7O2mqyiGjkXeuXWO7iwuvPvYYs9av59GmTQlzdeWda9c4ZDSSarNlKTesd++85xPJPEMmsJI9CBFCCFGoSlQeEVF6aLVaPn7uOV6YNo36VarwwdNPM2ngQL5YvJhOJ05wzWikspsbjUJCGNC1K/2mTSM2OZl148bx+44dLNiwgf02GzUBH8Co1dK2SROOnD/P4atXcdNqWaLVEli9OmeBIYmJEBdnzw9SrRofde/OF8uXk2I08vkrr3AxJoZpS5bw8qVLkJzsKDfpTvKIBFaCfv0K4asmhBDiZhKIiDvWv2NHwmNiGPPzzxw8f563Hn+cHg88wMqDB2lbty4dGzakdqVKfPzbbxhNJgw6Hb0mTmTcs89yds4c/u+HH1i6axflAgNZMnIkczZtYs3+/VQuX56Ia9eoULkyHz37LPfXqMHC7du5EBNDpXLl0Gm1jP7xR85ducKKDz6gZmAgNQMDad+gwd1lVnWMhhTe10wIIURWhZ7i/W5IivfSYcHmzXz066+ciY4G7PN9BuwLT20Zn3tj3xUTC6RjX1zq7uSE2WolPSPHh4eLC0O7d2fss88yf+NGxv/2GxeuXMHD2RmNzYZqs5FqtWJRVRpVr868oUNpXFCH3t04JSOjIUIIcVdKbYp3UTr169CBqLg4Pp4/n2RVpTZQXVGIV1VOAZ2AAUBT4BgwDfgT8LTZqKHXsy09nZo6He5eXnRo0ACdVssrnTtTxdeXgdOmoU9OprxWi5dORzmNBhSFY+npxCYlFeyLSBAihBBFTgIRcdcsFgtfLVlCXVXlOHBYr0dVVR42m3kaeBswAe6KQjNV5SfgdWCJ1cq6KlXocfkyeqBGejrTliyhfYMGAHy9bBndVZUpVapkSVZmU1XeuXbNUfauD7aTKRkhhCg2JeqsGVE6Ldy+HTUlhfqKghf2jKZbbDauAS9jT91uBlIyZgG1wKvY84ZMio/HR6MhSVV50cODyIwsqPvPniXy0iVeyiFba2bG1Myyd0WmZIQQoljJiIi4axdiYtCpKtUVhQRVxaaqXFFVNEBN7OtF4HoGVYB62E/UPWM2E2+z4aEo2bOg5pKtFQooY6qkbxdCiGIngYi4a1V9fbEoCn6KQhKwUVXxUxRswAjgRyAto6wT0BGoDsQAf6enc9ZioYebG/2iozmSnk6/qVPR63SkpKSw1dmZR93csrV5VxlTMzgSlgkhhCg2MjUj7tozbduiuLnxj9VKA0VhhtXKUpuNw8BMIAUcqd2NwGpgBvbdMyr2A++WpaSwLDUVk82GCiSnp5NgMtE1KopaFy5wzmRytHfHGVNvtGCBfTpGCCFEsZJARNw1nU7HsD59WKXV4qmq/GGzMSNjPYgOeBxYiH0UxBvwuqHuaYt9wsZHUfAyGFAUhfYNGnDtl1/4YfBgPPV6TprN1AoP55+0tDvPmHqjzCmZ0NC7em8hhBB3T6ZmRBY2my3PScEsFosj0VhVX1/e6tePcT//DBnBhQHQaTSssdlYjn30w4A9h4i3wUC80QgZn7eoW5cRzzzD1YQEnpk6lYr9+/Ng/fr8MmoUHy9YQNi5c7S6dInanp6EBAfnmDE1P32XdSFCCFEySCAiHDYdPMi0JUuIvHTJHkzodARWqsSwHH7pT122jGmLF6OmpKBTVSyKwlXAmJGcLDOhmdFmQ4s9CPHBPg2TBKRnBCFk3Nt09CgbP/oIJ6sVd+BqUhLbdu1i9a5d6J2dCXBxITotjej0dEJyyMGX5747RkMK8isnhBDiTsnUjADsv8hHzZhBjfPnmevszDYfH+Y6O1Pj/HlGzZjBpoMHHWWnLlvGZz/+SJfkZJZqNBzW6ahus6HLCEK8sS9EbQTosQcfAHHYgxAD4IZ9JOSJjHvlAA+rlbZkJDsDHgOeATTp6fhaLHhpNJjNZmpeuJClT3nuu+ySEUKIEkcCEYHNZmPakiW0TUtjSvnyNDAYcNVoaGAwMKV8edqmpTFtyRJsNhsWi4VpixfTzWbjOycnmmu1ONls7MceWAD8gn2o7TTQLePabOAU8AjwBpAK1MW+dgTsgUtP7DlG2gF9gS3A9xnXz5jNPOvmRrKq8qSbm6NPFovl9n2fM4c/Jx1hBd3tu2QkCBFCiBJDAhGRr+RhmcnLXtNq0WaUHa6qeNxQ5xFgGOCBfasuQFsgHriCfZRDBWoAkdj/I7RiT3IWDewFagNRGfdexT5C8m/GdM5Js9nRp4Xbt9++75cvc9bFIgnLhBCiBJJARNiTgt0ueZjFwtXEREfysjo3/NI/rao4YR/NyHQGe86Q6hmfq8DVzOfdcC1zpYiCPckZ2EdHMg/Lg+vJzy5b7ZM82hv6dCEm5vZ9t9lI9PXK8b4QQojiJYGIsCcF0+k4YzbneP/G5GGZycuO37BgtIaiYOb6ttx5QAj2tO7pGdcmAeuBBOAi9sDjX2A314OOoxllfYGDQJWMz49mPCtTQ73e0aeqvr659z0lhX+jkknTuOHZ7IG8f0GEEEIUGQlEBE2CgwmsVIm5SUnYbtqRcnPysMzkZd9brVgzyn6RkVG1cUadYcBk7CMgz2VcmwN8jn3dyH3YR0MigBcz7uuAN7EvdK2Ofe3IC9iDlB+ARCDGZsNXo6G+weDo0zNt2+be97Q0frEZ8Qy9j+DgJgXwlRJCCFHQJBARaDQahvXuzXYXF965do1DRiOpNluOycMyk5et1Gh43WzmH6sVs0ZDY2AH9v+gEoEg7GfLGIGAjHbaZ/wz++Zbe/kDwFbsC1Wt2HfdvAYsAzw0GlJVlSfc3bP0SafT5d73tDS2uHryWO937/6EXiGEEIVCUdUckjKUEImJiXh5eZGwcCGerq7F3Z17Xm65OIY88QQ+Hh5ZEoV98eefOeYRsdhsju26BuxTKpk5RWzYT9y1Aqab2nYBzBoN1owU767YF6gmAqpOR5rFglZRaFiuHJWDgrLlB8nS99RU0iw6PL2DeGzwlzRq1BEhhBBFJzU1kWee8SIhIQHP25wJJoGIyOLm7KRxycl8tXRpjonC2tWrlyWz6jNt2/L4hAn8tW+f43muej1am40kiwUN9mAkJwrg5+XF5YQEXPR6zFYrTapXJyktjROXLuHm7My3b75JnaCgXDOmOvq+Zw/HYuoQPPh9GQkRQohikJ9ARDKriiw0Gg1Na9j3tWw6eJDRM2fSNi2NCR4ehDg5ccZsZm5GorBJAwfSr0MHR12LxcK6Aweo7u/PyF69GPTtt6TeeFjdTW05Y094loh9uuZyQgIAZqsVi9XKntOn0SgKHRo04I/3379tMJrZ9xVLTdQIrAQShAghRIknP6lFjvKT5CzTZ8uWYbFaebdPHwZ06kSguzsPZdxzwj794gS0Br7EvpD1yYxtwPWB5oBeo6FO5cp4urhQuXx5khYtYtOECXkbEQsLY8XkY/ZTdSVniBBClAoSiIgc5SfJWaZtR4+iAAM6dXIkPntGa88u8q+TE1t0OhoAM4GXgSHAJK0WP+yJzr7S6fAFRvbqxQdPP01Sejquzs556/CCBazY4i5BiBBClDIyNSNylKckZ8nJ9nIZUtLTUTQaNBqNI/GZb0YQ46YohGeMnoRgn5ZRAJOq4ox9eqauoqBTVS7ExODj7k5KevrNzeYsLEzOkBFCiFJKRkREjvKT5CyTj7s7NpuN1PR0R+KzuIx7V1SVChlByRkgDfu6EL2ikIh92uZYxu6bqr6+XImPx9vN7f/bu/+YqO87juOvOxcQFWmIiEUQ+VG7piZ0UjXBjIBxlZqw2KwsWWKE1jGjaOIko9ik5R8bU0vSrkisLh3+gab9Y7MN7ZqFGQv7oSG14Q80wC6tkx6RYlqhQoXKfffH9c5S4QTke5+77z0fySUcfM978wmBl5/35/P5zrzgtJWEEACIQgQRTGk2h5wF7Nzs3yb70unTwYPP2iYmtFzSaZ9P+W63HpbUJH8rxiX/jfBuSip0ufSniQm5Fi/Wrzdt0pn2dv3iiSfuX2igJbNmzXx82wCAMCOIYEqzOeQs4FcFBVqakKC3W1v9r3/2WX20YIEelvTniQkN+Hwqcbv1F0kvSbruduv3d+5IklyWpZbvX3O+q0v/7e/X3m3bQhdJSwYAoh5BBNPanJenV/fulWf1aj1/+7YKv/5az9++Lc/q1Xp1795JB4oF7N22TUOjo/rl4cOqfuYZ/WHnTg0sXqxRSbl37uiIZelWXJz+HhenMp9PF+XfSfOvxETV7Nyp3xQW6neNjdqwZo02PfbY/YukJQMAUY0DzXBfPz7kbLoDxQI21dToP93dys/N1enqauWkpqrm1Cn9saVFazMzdXLPHr354Yc6096uhLg4vVlZqfLNm9V2+bJ+e+yYJnw+XTh6VOnLlk1fVHMzsyEAEKE4WRVG+Xw+lR4+rL998okkKTs1VT/LydGN4WH9+8oV3fl+90zykiX+bbrffqszbW3q8Xq1/pFH9NdDh0KGkJajV/wfEEIAICIRRBARerxeHXz7bf2js1PjgbUgklalpGjxwoX63+CgRsfGlLRokbauW6e9Tz+tnz/+uFw/OrdkkuZmtaiUs0IAIIJxxDsiwqMrV+rDl18OPvf5fPe0dCzLCh08psIOGQBwDIIIwmaqdSUzDiEdHf5tulonkUMAwDEIIogOvb1SGi0ZAHAatu8ietCSAQDHYUYEkY2WDAA4GkEEkY2WDAA4Gq0ZRD5aMgDgWMyIIDL9sCWzg0PLAMCpCCKIPIEQkraSlgwAOBxBBJElEEI4vh0AYgJrRBB5uKMuAMQMgggiR3BdCAAgVtCaQWSgJQMAMYkZEUQOWjIAEHMIIjCPlgwAxCxaMzCruVkt/etoyQBAjCKIwJxACKl5wXQlAABDaM3AGEIIAIAgAjOam01XAACIALRmEH7NzWpRqVTD8e0AEOuYEYEZ3FEXACCCCMItsEAVAADRmkG4BO+oS0sGAHAXMyKwXzCErJR2EEIAAHcxIwL79fZKRdUcWAYAuAczIrBXRwdrQgAA0yKIwD4/bMkwGwIAmAJBBPZiXQgAIASCCOwRmA3hvBAAQAi2BZGrV69q165dysrKUkJCgnJyclRXV6fx8XG73hKRgpYMAGCGbNs1093dLZ/PpxMnTig3N1ddXV2qrKzUyMiI6uvr7XpbRApaMgCAGbAtiJSUlKikpCT4PDs7Wz09PTp+/DhBxMmCsyGmCwEARIOwniMyNDSk5OTkab8+NjamsbGx4PPh4eFwlIX5Eji+vaiYlgwAYEbCtljV4/GooaFBu3fvnvaaI0eOKCkpKfjIyMgIV3l4UIQQAMAczDqI1NbWyuVyhXx0d3dPeo3X61VJSYnKyspUWVk57b996NAhDQ0NBR99fX2z/44Qfh0dalGpVPMCIQQAMCuzbs1UV1eroqIi5DXZ2dnBj/v7+1VcXKyCggKdPHky5Ovi4+MVHx8/25JgWm+vpEdNVwEAiEKzDiIpKSlKSUmZ0bVer1fFxcXKz89XU1OT3G6OLXGcYEuG80IAALNn22JVr9eroqIiZWZmqr6+XoODg8GvrVixwq63RZi19K/zt2QAAJgD24JIa2urPB6PPB6P0tPTJ33Nsiy73hbh1NwsiRvaAQDmzrZeSUVFhSzLmvKB6Ndy9MrdXTIAAMxRWM8RgQP88Ph2Tk4FADwggghmp7dXKqpmmy4AYF6wjQUz19Hhb8cAADBPCCKYGe6oCwCwAa0ZzAwtGQCADZgRwf3RkgEA2IQggtBoyQAAbERrBqHRkgEA2IgZEUyPlgwAwGYEEUyNlgwAIAxozeBewTvqFhNCAAC2YkYEkwXaMYQQAEAYEERwL9oxAIAwIYjgruZm/7qQNWtMVwIAiBGsEYFfoCVT84LpSgAAMYQZEfj19vpbMgAAhBFBBHd3ydCSAQCEGa2ZWBY4K0S0ZAAAZhBEYllvr5RWKu3YYboSAECMojUT62jHAAAMYkYkFgWPby/lvBAAgFHMiMSiwA4ZWjIAAMMIIrGKlgwAIAJEdGvGsixJ0vDoqOFKHOLSJX30z8XSw1uktT+VRodNVwQAcKDR7/++BP6Oh+KyZnKVIV988YUyMjJMlwEAAOagr69P6enpIa+J6CDi8/nU39+vxMREuVwu0+U8sOHhYWVkZKivr09Lly41XU7MYNzNYNzNYNzNYNwnsyxL33zzjdLS0uR2h14FEtGtGbfbfd8kFY2WLl3KD6oBjLsZjLsZjLsZjPtdSUlJM7qOxaoAAMAYgggAADCGIBJG8fHxqqurU3x8vOlSYgrjbgbjbgbjbgbjPncRvVgVAAA4GzMiAADAGIIIAAAwhiACAACMIYgAAABjCCKGXL16Vbt27VJWVpYSEhKUk5Ojuro6jY+Pmy7N8V555RUVFBRo0aJFeuihh0yX41iNjY1avXq1Fi5cqI0bN6qjo8N0SY7W3t6u0tJSpaWlyeVy6b333jNdUkw4cuSI1q9fr8TERC1fvlzbt29XT0+P6bKiCkHEkO7ubvl8Pp04cUKXL1/W66+/rrfeeksvvvii6dIcb3x8XGVlZdqzZ4/pUhzr3Xff1cGDB1VXV6dPP/1UeXl52rp1q7788kvTpTnWyMiI8vLy1NjYaLqUmNLW1qaqqipdvHhRra2t+u677/TUU09pZGTEdGlRg+27EeS1117T8ePH9dlnn5kuJSacOnVKBw4c0M2bN02X4jgbN27U+vXrdezYMUn++0ZlZGRo//79qq2tNVyd87lcLp09e1bbt283XUrMGRwc1PLly9XW1qbCwkLT5UQFZkQiyNDQkJKTk02XATyQ8fFxXbp0SVu2bAl+zu12a8uWLbpw4YLBygD7DQ0NSRK/y2eBIBIhPB6PGhoatHv3btOlAA/kxo0bmpiYUGpq6qTPp6am6vr164aqAuzn8/l04MABbdq0SWvXrjVdTtQgiMyz2tpauVyukI/u7u5Jr/F6vSopKVFZWZkqKysNVR7d5jLuADCfqqqq1NXVpXfeecd0KVHlJ6YLcJrq6mpVVFSEvCY7Ozv4cX9/v4qLi1VQUKCTJ0/aXJ1zzXbcYZ9ly5ZpwYIFGhgYmPT5gYEBrVixwlBVgL327dunDz74QO3t7UpPTzddTlQhiMyzlJQUpaSkzOhar9er4uJi5efnq6mpSW43E1RzNZtxh73i4uKUn5+vc+fOBRdL+nw+nTt3Tvv27TNbHDDPLMvS/v37dfbsWX388cfKysoyXVLUIYgY4vV6VVRUpMzMTNXX12twcDD4Nf7XaK9r167pq6++0rVr1zQxMaHOzk5JUm5urpYsWWK2OIc4ePCgysvL9eSTT2rDhg164403NDIyoueee850aY5169YteTye4PPPP/9cnZ2dSk5O1qpVqwxW5mxVVVU6c+aM3n//fSUmJgbXQSUlJSkhIcFwdVHCghFNTU2WpCkfsFd5efmU437+/HnTpTlKQ0ODtWrVKisuLs7asGGDdfHiRdMlOdr58+en/LkuLy83XZqjTfd7vKmpyXRpUYNzRAAAgDEsSgAAAMYQRAAAgDEEEQAAYAxBBAAAGEMQAQAAxhBEAACAMQQRAABgDEEEAAAYQxABAADGEEQAAIAxBBEAAGAMQQQAABjzf6H1PIvjC/NCAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -300,11 +312,13 @@ "cell_type": "markdown", "id": "2b636369-1054-49d1-99fd-d76ff3d32e58", "metadata": {}, - "source": [] + "source": [ + "## Logistic Regression" + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 20, "id": "38b15a6d-67e1-4d45-8dbe-97514e0c490e", "metadata": {}, "outputs": [ @@ -333,10 +347,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, @@ -386,7 +400,7 @@ "from sklearn.svm import SVC\n", "# svm = SVC(kernel='linear', random_state=1, C=1000000.0)\n", "# svm = SVC(kernel='poly', degree=3, random_state=1, C=1000000.0)\n", - "svm = SVC(kernel='rbf', gamma=3, random_state=1, C=50.0)\n", + "svm = SVC(kernel='rbf', gamma=2, random_state=1, C=50.0)\n", "svm.fit(X_train_std, y_train)\n", "print('Scoring: %.2f' % svm.score(X_test_std, y_test))" ] @@ -418,16 +432,16 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 10, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGzCAYAAAASZnxRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAoMpJREFUeJzs3XdcVeUfwPHPvRfuZYMiCCqKgIqKuVJzj3KmlrNSS22amaNhmpmalfprZ6ZNTc2Re69yVVpunLhFHMjecOf5/XHlJgIKypTv+/XilZzznPM859ALvvcZ30elKIqCEEIIIUQxUBd3A4QQQghRdkkgIoQQQohiI4GIEEIIIYqNBCJCCCGEKDYSiAghhBCi2EggIoQQQohiI4GIEEIIIYqNBCJCCCGEKDYSiAghhBCi2EggIoQQxcjf35/u3bvftdzOnTtRqVTs3Lmz8BslRBGSQESUWceOHaNv375Uq1YNBwcHKleuTMeOHZk5c2ZxN61A7dmzh8mTJ5OQkHDHckajkQoVKtCqVatcyyiKgp+fH40aNSrQNl67do3Jkydz5MiRAr3vncybNw+VSoVKpeKvv/7Kdj7zWVUqVZ4CBSHEvZFARJRJe/bs4eGHHyY0NJSXXnqJb775hhdffBG1Ws1XX31V3M0rUHv27GHKlCl3DUTs7e3p168fe/bsITw8PMcyu3fv5sqVKwwaNKhA23jt2jWmTJlSpIFIJgcHBxYtWpTt+K5du7hy5Qo6na7I25STNm3akJ6eTps2bYq7KUIUKLviboAQxeGjjz7C3d2d/fv34+HhkeVcVFRU8TSqgKWmpuLs7JyvawYOHMicOXNYvHgx48aNy3Z+0aJFqNVqnn766YJqZqHKyzvo1q0by5Yt4+uvv8bO7r9fiYsWLaJx48bExMQUdjPzRK1W4+DgUNzNEKLASY+IKJPOnz9P3bp1swUhAN7e3rZ/X7p0CZVKxbx587KVU6lUTJ482fb95MmTUalUhIWF0b9/f9zc3PD09GTUqFFkZGRku3bEiBH8+uuv1KpVCwcHBxo3bszu3buz1XP48GG6du2Km5sbLi4uPProo/zzzz9ZymQOM+zatYvhw4fj7e1NlSpVmDx5Mm+//TYA1atXtw1FXLp0Kcf30rJlS/z9/XPsITAajSxfvpz27dtTqVIlAMLCwujbty/ly5fHwcGBhx9+mLVr12a7NiEhgTFjxuDv749Op6NKlSo899xzxMTEsHPnTpo0aQLA0KFDbW289Z0vW7aMxo0b4+joSIUKFRg0aBBXr17NUseQIUNwcXHh/PnzdOvWDVdXVwYOHJjjc97qmWeeITY2lm3bttmOGQwGli9fzoABA3K85tNPP6VFixZ4enri6OhI48aNWb58eY5lFy5cSNOmTXFycqJcuXK0adOGrVu3Ziv3119/0bRpUxwcHAgICGD+/PlZzuc0R6Rdu3aEhIRw8uRJ2rdvj5OTE5UrV+Z///tftvvr9XomTZpEUFAQOp0OPz8/xo4di16vv+s7EqIwSSAiyqRq1apx8OBBjh8/XuD37t+/PxkZGUybNo1u3brx9ddf8/LLL2crt2vXLkaPHs2gQYP44IMPiI2NpUuXLlnadOLECVq3bk1oaChjx45l4sSJXLx4kXbt2vHvv/9mu+fw4cM5efIk77//PuPGjaN3794888wzAHzxxRcsWLCABQsW4OXllWPbVSoVAwYM4NixY5w4cSLLuc2bNxMXF2f7437ixAkeeeQRTp06xbhx4/jss89wdnbmySefZNWqVbbrUlJSaN26NTNnzqRTp0589dVXDBs2jLCwMK5cuULt2rX54IMPAHj55Zdtbcwcgpg3bx79+/dHo9Ewbdo0XnrpJVauXEmrVq2yDTeZTCY6d+6Mt7c3n376KX369Lnbjwt/f3+aN2/O4sWLbcc2bdpEYmJirj0/X331FQ0bNuSDDz7g448/xs7Ojn79+rFhw4Ys5aZMmcKzzz6Lvb09H3zwAVOmTMHPz4/t27dnKXfu3Dn69u1Lx44d+eyzzyhXrhxDhgzJ9jPISXx8PF26dKF+/fp89tlnBAcH884777Bp0yZbGYvFQs+ePfn000/p0aMHM2fO5Mknn+SLL77gqaeeumsdQhQqRYgyaOvWrYpGo1E0Go3SvHlzZezYscqWLVsUg8GQpdzFixcVQJk7d262ewDKpEmTbN9PmjRJAZSePXtmKTd8+HAFUEJDQ7NcCygHDhywHQsPD1ccHByUXr162Y49+eSTilarVc6fP287du3aNcXV1VVp06aN7djcuXMVQGnVqpViMpmy1P/JJ58ogHLx4sU8vZsTJ04ogDJ+/Pgsx59++mnFwcFBSUxMVBRFUR599FGlXr16SkZGhq2MxWJRWrRoodSoUcN27P3331cAZeXKldnqslgsiqIoyv79+3N8zwaDQfH29lZCQkKU9PR02/H169crgPL+++/bjg0ePFgBlHHjxuXpOTPf2f79+5VvvvlGcXV1VdLS0hRFUZR+/fop7du3VxRFUapVq6Y8/vjjWa7NLHdrO0NCQpQOHTrYjp09e1ZRq9VKr169FLPZnONzZ94fUHbv3m07FhUVpeh0OuXNN9+0HduxY4cCKDt27LAda9u2rQIo8+fPtx3T6/WKj4+P0qdPH9uxBQsWKGq1Wvnzzz+ztGPOnDkKoPz99993fllCFCLpERFlUseOHdm7dy89e/YkNDSU//3vf3Tu3JnKlSvnOLSQH6+99lqW719//XUANm7cmOV48+bNady4se37qlWr8sQTT7BlyxbMZjNms5mtW7fy5JNPEhAQYCvn6+vLgAED+Ouvv0hKSspyz5deegmNRnNf7a9Tpw4NGzZkyZIltmOpqamsXbuW7t274+bmRlxcHNu3b6d///4kJycTExNDTEwMsbGxdO7cmbNnz9qGTlasWEH9+vXp1atXtrpUKtUd23LgwAGioqIYPnx4lvkRjz/+OMHBwdl6IABeffXVfD9z//79SU9PZ/369SQnJ7N+/fpch2UAHB0dbf+Oj48nMTGR1q1bc+jQIdvx1atXY7FYeP/991Grs/6qvf2569SpQ+vWrW3fe3l5UatWLS5cuHDXtru4uGSZPKzVamnatGmWa5ctW0bt2rUJDg62/axiYmLo0KEDADt27LhrPUIUFglERJnVpEkTVq5cSXx8PPv27WP8+PEkJyfTt29fTp48ec/3rVGjRpbvAwMDUavV2eZl3F4OoGbNmqSlpREdHU10dDRpaWnUqlUrW7natWtjsViIiIjIcrx69er33O5bDRw4kIsXL7Jnzx7A+kc1LS3NNixz7tw5FEVh4sSJeHl5ZfmaNGkS8N+k3/PnzxMSEnJP7chcvZPTOwgODs62usfOzo4qVarkux4vLy8ee+wxFi1axMqVKzGbzfTt2zfX8uvXr+eRRx7BwcGB8uXL4+XlxezZs0lMTLSVOX/+PGq1mjp16ty1/qpVq2Y7Vq5cOeLj4+96bZUqVbIFNrdfe/bsWU6cOJHtZ1WzZk3gwZmgLUonWTUjyjytVkuTJk1o0qQJNWvWZOjQoSxbtoxJkybl+ondbDbn+f53+9RfkG79pH4/nnnmGcaOHcuiRYto0aIFixYtoly5cnTr1g2wzjkAeOutt+jcuXOO9wgKCiqQtuSHTqfL1vuQVwMGDOCll14iMjKSrl275jiRGeDPP/+kZ8+etGnThm+//RZfX1/s7e2ZO3dujpN88yK3XixFUQrkWovFQr169fj8889zLOvn55eHVgpROCQQEeIWDz/8MADXr18HrJ8sgWyTInPLswHWT5+39kycO3cOi8WCv79/tnK3O3PmDE5OTrbJpE5OTpw+fTpbubCwMNRqdZ7+gNxLIFSpUiXat2/PsmXLmDhxItu2bWPIkCFotVoA21CRvb09jz322B3vFRgYeNdJwbm1sVq1agCcPn3aNoyQ6fTp07bzBaFXr1688sor/PPPPyxdujTXcitWrMDBwYEtW7ZkyTEyd+7cLOUCAwOxWCycPHmSBg0aFFg770VgYCChoaE8+uijRRoYC5EXMjQjyqQdO3bk+Gkzcx5H5lCAm5sbFSpUyLas9ttvv8313rNmzcryfWam1q5du2Y5vnfv3ixzCiIiIlizZg2dOnVCo9Gg0Wjo1KkTa9asyTKsc+PGDRYtWkSrVq1wc3O767Nm5tG4W0Kz2w0cOJCoqCheeeUVjEZjlqWw3t7etGvXju+++84WtN0qOjra9u8+ffoQGhqaZSVNpsyfQW5tfPjhh/H29mbOnDlZlplu2rSJU6dO8fjjj+frme7ExcWF2bNnM3nyZHr06JFrOY1Gg0qlytIrdunSJVavXp2l3JNPPolareaDDz6w9SBlyktPR0Hq378/V69e5Ycffsh2Lj09ndTU1CJtjxC3kh4RUSa9/vrrpKWl0atXL4KDgzEYDOzZs4elS5fi7+/P0KFDbWVffPFFpk+fzosvvsjDDz/M7t27OXPmTK73vnjxIj179qRLly7s3buXhQsXMmDAAOrXr5+lXEhICJ07d2bkyJHodDpbcDNlyhRbmQ8//JBt27bRqlUrhg8fjp2dHd999x16vT7HXBE5yZwQO2HCBJ5++mns7e3p0aPHXRN99enTh+HDh7NmzRr8/PyyZfScNWsWrVq1ol69erz00ksEBARw48YN9u7dy5UrVwgNDQXg7bffZvny5fTr14/nn3+exo0bExcXx9q1a5kzZw7169cnMDAQDw8P5syZg6urK87OzjRr1ozq1aszY8YMhg4dStu2bXnmmWe4ceMGX331Ff7+/owZMyZP7yCvBg8efNcyjz/+OJ9//jldunRhwIABREVFMWvWLIKCgjh69KitXFBQEBMmTGDq1Km0bt2a3r17o9Pp2L9/P5UqVWLatGkF2vY7efbZZ/ntt98YNmwYO3bsoGXLlpjNZsLCwvjtt9/YsmWLrTdQiCJXnEt2hCgumzZtUp5//nklODhYcXFxUbRarRIUFKS8/vrryo0bN7KUTUtLU1544QXF3d1dcXV1Vfr3769ERUXlunz35MmTSt++fRVXV1elXLlyyogRI7IsPVUU6/Ld1157TVm4cKFSo0YNRafTKQ0bNsyyNDPToUOHlM6dOysuLi6Kk5OT0r59e2XPnj1Zyty6FDUnU6dOVSpXrqyo1ep8LeXt16+fAihjx47N8fz58+eV5557TvHx8VHs7e2VypUrK927d1eWL1+epVxsbKwyYsQIpXLlyopWq1WqVKmiDB48WImJibGVWbNmjVKnTh3Fzs4u21LepUuXKg0bNlR0Op1Svnx5ZeDAgcqVK1ey1DF48GDF2dk5T8+lKHd/Z5lyWr77008/2X5uwcHByty5c20//9v9/PPPtraXK1dOadu2rbJt27Y73l9RrEtz27Zta/s+t+W7devWzXbt4MGDlWrVqmU5ZjAYlBkzZih169a1taVx48bKlClTbEuyhSgOKkUp4j5CIR5QkydPZsqUKURHR1OhQoU7llWpVLz22mt88803RdQ6IYQomWSOiBBCCCGKjQQiQgghhCg2EogIIYQQotjIHBEhhBBCFBvpERFCCCFEsZFARAghhBDFpkQnNLNYLFy7dg1XV1dJSyyEEEKUEoqikJycTKVKle66/1OJDkSuXbsmmzEJIYQQpVRERMRdd8Qu0YGIq6srAH9d+AsXV5dibo0QQggh8iIlOYVWAa1sf8fvpEQHIpnDMS6uLri63f1hhBBCCFFy5GVahUxWFUIIIUSxkUBECCGEEMVGAhEhhBBCFJsSPUckLxRFQTFbv5AcscVLBSqNyvoly62FEELkQakORCxGCxk3MrBkWFAhf/hKAgUFtaMaB28H1PbS4SaEEOLOSm0golgU0i6nobPT4VnJE3t7e/kUXswURcFoNBIbHUva5TScqzujUsvPRAghRO5KbSBiMVpAgYq+FXF0cizu5oibHBwdsLOz4/Lly1iMFjQ6TXE3SQghRAlWevvOFVChumvqWFH01Gq1dahM5uwIIYS4C/krLoQQQohiI4GIEEIIIYqNBCIlmIPGgbWr1xZ3M4QQQohCI4FIMYmMjGTMyDEEBwXj5uhGYLVAevfszfY/thd30wDrCpgpk6bgX9kfD2cPunbqyrmz54q7WUIIIR4wEogAFouFQwcPsW3LNg4dPITFYinU+i5dukSLJi3YuWMn02ZM42DoQdZtXEfb9m0Z/froQq07rz775DO+nfktM7+dyZ97/8TZyZnuXbuTkZFR3E0TQgjxACnzgciO7Tvo17UHI/o8xaTnX2REn6fo17UHO7bvKLQ6R702CpVKxV///EWvPr2oUbMGderWYdSYUezeszvX6yaMm0BIcAjlXMoRHBTM5PcnYzQabeePhh6l06OdqOBeAS8PL5o3ac7BAwcBCA8Pp3fP3vh4+lDetTwN6zVk88bNOdajKArffPUN4yaMo8cTPaj3UD1++uUnrl+7LkNFQgghClSpzSNSEHZs38F7r46gdXIKH3mWJ1Cn47xez7xjx3nv1RF8OPsb2ndoX6B1xsXFsXXLVqZ8OAVnZ+ds5z08PHK91sXVhR9+/gHfSr6cOHaC4a8Mx9XVlTfffhOAIc8OoX6D+sycNRONRkPokVDs7e0BGD1iNAaDgd93/o6TsxNhJ8NwdsleP8DFixeJjIykw6MdbMfc3d1p0qwJ//7zL/2f7n8fb0AIIYT4T5kNRCwWC9/M+JTWySl8UrkS6ptZWes5OvJJ5Uq8ffUa38z4lLbt2hZorpLz586jKAq1atXK97XjJ4y3/dvf35/RZ0azbOkyWyAScTmCMW+OoVaw9d5BNYJs5SMiIniy95OE1AsBICAgINd6bkTeAMC7oneW4xW9K9rOCSGEEAWhzA7NHDl8hOunzzDEs7wtCMmkVqkYXL4c10+f4cjhIwVar6Lce5avZUuX0a51O6pVqoanmyeTJ04m4nKE7fzIMSN59eVX6dqpK5/M+ITz58/bzg0fMZzpH02nXet2fDD5A44dPXZfzyGEEEIUhDIbiMTGxILRQKBOl+P5IAcHMBqs5QpQUI0gVCoVp0+fztd1/+z9hyHPDqFL1y6sXLuSfw/+yzvvvoPBYLCVmThpIoePHaZrt67s3L6ThiENWbNqDQDPv/g8p86dYuDAgZw4doIWTVvw7Tff5lhXRZ+KAETdiMpy/EbUDds5IYQQoiCU2UDEs4In2Gs5r9fneP5cRgbYa63lClD58uXp2Kkj3337HampqdnOJyQk5HjdP3v/oWq1qox7dxyNH25MUI0gLodfzlauRs0ajBw9kg1bNvBEryeYP2++7Zyfnx8vDXuJpSuWMuqNUfz848851lW9enV8fHyyTNhNSkpi/7/7afZIs3w+sRBCCJG7MhuINGjYAN9aNZkXG4fltuESi6LwS1w8vrVq0qBhgwKv+8tvvsRsNtPqkVasWrGKc2fPEXYqjFkzZ9G2ZdscrwkKCiLicgS/LfmN8+fPM2vmrCwrWNLT0xn9+mh27dxFeHg4e/7ew8EDBwmuHQzAW2PeYtuWbVy8eJHDhw6ze+dugoODc6xLpVIxYtQIpn80nfVr13P82HFeGPwCvpV86flkzwJ/H0IIIcquMjtZVa1WM+Kdt3jv1RG8ffUag8uXI8jBgXMZGfwSF8+frq58+M5bhbKpXkBAAHsP7GXGxzN45+13iLweiZeXFw0bNeTrWV/neE33nt0ZOXokY0aOQa/X07VbV8a/N54Pp3wIgEajITY2lheGvEDUjSgqVKjAE72eYOLkiQCYzWZGvT6Kq1eu4ubmRsfOHfnk809ybeObb79Jamoqrw17jYSEBFq0asG6jetwcHAo8PchhBCi7FIp9zN7spAlJSXh7u7OkegjuLq5ZjlnzjCTcSWDav7V0DnkPM8jL3Zs38E3Mz7l+ukzYDSAvRbfWjUZ8c5bBb50t6zQZ+gJvxSOQxUHNA6a4m6OEEKIIpaclEwDrwYkJibi5uZ2x7JltkckU/sO7Wnbri1HDh8hNiYWzwqeNGjYoFB6QoQQQgiRVZkPRMA6TNOocaPiboYQQghR5sjHfiGEEEIUGwlEhBBCCFFsJBARQgghRLGRQEQIIYQQxUYCESGEEEIUGwlEhBBCCFFsJBARQgghRLGRQKQEc9A4ZNlPRgghhHjQlOmEZpcvXyY9LT3X845OjlStWrVQ6o6MjGTGxzPYtHET165ew8vbi/r16zNi1Ag6PNqhUOrMj9UrV/PDdz9w+NBh4uLi+Pfgv9RvUL+4myWEEOIBU2YDkcuXL9Oz69OkpuVextkJ1m5aUuDByKVLl+jQugPuHu5MmzGNkHohGI1Gtm3dxujXR3P05NECre9epKam0qJVC/r068PwV4YXd3OEEEI8oMpsIJKelk5qGmi1H6DTVc92Xq+/SGra+3fsMblXo14bhUql4q9//sLZ2dl2vE7dOgweOjjX6yaMm8Ca1Wu4euUqFX0q8vSAp5kwcQL29vYAHA09yltvvMWhA4dQqVQE1Qjim9nf0PjhxoSHhzPm9THs+XsPBoOBav7VmDZjGl26dcmxroHPDgSsQZMQQghRWMpsIJJJp6uOg0NwjucMhoKvLy4ujq1btjLlwylZgpBMHh4euV7r4urCDz//gG8lX04cO8HwV4bj6urKm2+/CcCQZ4dQv0F9Zs6aiUajIfRIqC1IGT1iNAaDgd93/o6TsxNhJ8NwdslevxBCCFGUynwgUtTOnzuPoijUqlUr39eOnzDe9m9/f39GnxnNsqXLbIFIxOUIxrw5hlrB1nsH1QiylY+IiODJ3k8SUi8EgICAgPt5DCGEEKJASCBSxBRFuedrly1dxqxvZnHx/EVSUlIwmUy4ubnZzo8cM5JXX36VRb8uosOjHejdtzeBgYEADB8xnJGvjeT3bb/T4dEO9Ordi3oP1bvv5xFCCCHuhyzfLWJBNYJQqVScPn06X9f9s/cfhjw7hC5du7By7Ur+Pfgv77z7DoZbxo8mTprI4WOH6dqtKzu376RhSEPWrFoDwPMvPs+pc6cYOHAgJ46doEXTFnz7zbcF+mxCCCFEfkkgUsTKly9Px04d+e7b70hNTc12PiEhIcfr/tn7D1WrVWXcu+No/HBjgmoEcTn8crZyNWrWYOTokWzYsoEnej3B/Hnzbef8/Px4adhLLF2xlFFvjOLnH38usOcSQggh7kWZH5rR6y/m63hB+PKbL+nQugOtHmnF+5Pfp95D9TCZTPzx+x98P+d7Qk+EZrsmKCiIiMsR/LbkNxo3aczmjZuzJDtLT09n/Njx9OrTC//q/ly9cpWDBw7Sq3cvAN4a8xadu3QmqGYQCfEJ7N65m+DgnCfpgnVSbcTlCK5fuw7AmdNnAKjoUxEfH5+CfB1CCCHKsDIbiDg6OeLsBKlp7+e6OsbZyVquoAUEBLD3wF5mfDyDd95+h8jrkXh5edGwUUO+nvV1jtd079mdkaNHMmbkGPR6PV27dWX8e+P5cMqHAGg0GmJjY3lhyAtE3YiiQoUKPNHrCSZOngiA2Wxm1OujuHrlKm5ubnTs3JFPPv8k1zauX7uel1942fb9swOeBWDC+xOYOGliQb0KIYQQZZxKuZ/Zk4UsKSkJd3d3jkQfwdXNNcs5c4aZjCsZVPOvhs5Bd0/3L87Mqg8yfYae8EvhOFRxQOOgKe7mCCGEKGLJSck08GpAYmJilkUVOSmzPSKABBlCCCFEMZPJqkIIIYQoNoUaiEybNo0mTZrg6uqKt7c3Tz75ZL6XrQohhBDiwVWogciuXbt47bXX+Oeff9i2bRtGo5FOnTrluGxVCCGEEGVPoc4R2bx5c5bv582bh7e3NwcPHqRNmzaFWbUQQgghSoEinayamJgIWJN65USv16PX623fJyUlFUm7hBBCCFE8imyyqsViYfTo0bRs2ZKQkJAcy0ybNg13d3fbl5+fX1E1TwghhBDFoMgCkddee43jx4+zZMmSXMuMHz+exMRE21dERERRNU8IIYQQxaBIhmZGjBjB+vXr2b17N1WqVMm1nE6nQ6e7t+RkQgghhCh9CrVHRFEURowYwapVq9i+fTvVq1cvzOoeOA4ahyz7yQghhBAPmkINRF577TUWLlzIokWLcHV1JTIyksjISNLTc0+rXlwUReHUyVMUVcb7yMhIxowcQ3BQMG6ObgRWC6R3z95s/2N7kdR/J0ajkQnjJtC4fmPKu5anepXqPD/4ea5du1bcTRNCCPGAKdRAZPbs2SQmJtKuXTt8fX1tX0uXLi3Mau/Jlk1bGDx4MFs2bSn0ui5dukSLJi3YuWMn02ZM42DoQdZtXEfb9m0Z/froQq//btLS0jh86DDjJ4znnwP/sGT5Es6eOUvfJ/sWd9OEEEI8YAp9aCanryFDhhRmtflmNpv58acfSbGk8ONPP2I2mwu1vlGvjUKlUvHXP3/Rq08vatSsQZ26dRg1ZhS79+zO9boJ4yYQEhxCOZdyBAcFM/n9yRiNRtv5o6FH6fRoJyq4V8DLw4vmTZpz8MBBAMLDw+ndszc+nj6Udy1Pw3oN2bxxc471uLu7s3HrRvr270vNWjVp9kgzvvj6Cw4dPMTly5cL9mUIIYQo08r0pneZtm3Zxrnwc/R8qyebP9vMti3b6NKtS6HUFRcXx9YtW5ny4RScnZ2znffw8Mj1WhdXF374+Qd8K/ly4tgJhr8yHFdXV958+00Ahjw7hPoN6jNz1kw0Gg2hR0Kxt7cHYPSI0RgMBn7f+TtOzk6EnQzD2SV7/blJTExEpVLdsX1CCCFEfpX5QCSzNySgRQBNejThzN4z/PjTj3Ts3BGNpuC3sD9/7jyKolCrVq18Xzt+wnjbv/39/Rl9ZjTLli6zBSIRlyMY8+YYagVb7x1UI8hWPiIigid7P0lIPWsOl4CAgDzXm5GRwXvj36P/0/3vup2zEEIIkR9lfvfdzN6Q9kPaA9BucDvOhZ9j25ZthVLf/UyGXbZ0Ge1at6NapWp4unkyeeJkIi7/l2tl5JiRvPryq3Tt1JVPZnzC+fPnbeeGjxjO9I+m0651Oz6Y/AHHjh7LU51Go5GBTw1EURRmfjvzntsuhBBC5KRMByK39oZUqlkJgMq1KhPQIqDQ5ooE1QhCpVLlexfif/b+w5Bnh9ClaxdWrl3Jvwf/5Z1338FgMNjKTJw0kcPHDtO1W1d2bt9Jw5CGrFm1BoDnX3yeU+dOMXDgQE4cO0GLpi349ptv71hnZhBy+fJlNmzZIL0hQpRhRqORi2cvcvzwcS6evYjJZCruJokHRJkORG7vDclUmL0i5cuXp2Onjnz37Xc57kKckJCQ43X/7P2HqtWqMu7dcTR+uDFBNYK4HJ594miNmjUYOXokG7Zs4IleTzB/3nzbOT8/P14a9hJLVyxl1Buj+PnHn3NtZ2YQcu7cOTZu3Yinp2f+H1YIUepFXo3kyw++pE2NNjwW8hhPPPIEj4U8Ruug1nw19Ssir0YWdxNFKVdmA5HM3pBqTavh7e+NyWCyfVWsXpFqTasVWq/Il998idlsptUjrVi1YhXnzp4j7FQYs2bOom3LtjleExQURMTlCH5b8hvnz59n1sxZWZKdpaenM/r10ezauYvw8HD2/L2HgwcOElw7GIC3xrzFti3buHjxIocPHWb3zt0EBwfnWJfRaOSZfs9w8OBB5i2Yh9lstuWAubUHRgjxYNuwfAPta7fn569+5rHujzF/43xW713N/I3zefTxR/nxix/pUKcDm1ZuKu6milKszE5WDT0SyqXLlzCEG/io00c5ltGqtIQeCaVR40YFWndAQAB7D+xlxsczeOftd4i8HomXlxcNGzXk61lf53hN957dGTl6JGNGjkGv19O1W1fGvzeeD6d8CIBGoyE2NpYXhrxA1I0oKlSowBO9nmDi5ImANfAa9foorl65ipubGx07d+STzz/Jsa6rV6+yft16AJo2aprl3JY/ttC2Xc7BkhCi5FMUhXNh5wgKtg4T52bjio2MGjSKnk/3ZMrXU3B1c7VdG9IwhJaPtuSdj99h4usTeX3A60z4ZAJDRgy54z2FyIlKKapUovcgKSkJd3d3jkQfwdXNNcs5c4aZjCsZVPOvhs4h//vTGAwG/tz9J0aDMdcy9lp7WrdpjVarzff9yzJ9hp7wS+E4VHFA41DwK4+EEPdux6YdfPbBZ7z5/pu079o+xzKx0bG0qdGGjj078vm8z1Gr1blea7FYGNBxAAf2HOCLeV/Q46keRfYsouRKTkqmgVcDEhMT7zq/sMz2iGi1Wh597NHiboYQQhQZs9nMkrlLSLeks2TuEtp0apNjmoLlvyzHYrEw6YtJtiAkt2sVRcHRxRFFUZg1Yxbd+nYrlNQH4sFVZueICCFEWbN7627CL4fT/c3uhF8OZ/fW7JmcLRYLi75fRPf+3SnnWe6u1+7eupvrN65Tq0UtLp29xK4tu4rsecSDQQIRIYQoAzJ7NAKaB9C4R2MCmgewZO6SbBPy42LiuBJ+hce6P3bXaw0Gg+34oy8/itFgZMH3Cwp9mwzxYJFARAghyoDMHo22Q6yTzdsMbpNjr0h6qnV3dBdXl7teO3vGbNtxR1dHAC5fvpxjT4sQuZFARAghHnC39mj41vQFoFKtSjn2iri4WQOQ+Lj4u1679JelVG9WHd+aviTHJgMQ0CznnhYhciOBiBBCPEAir0Yy86OZvNr/VYb2GMqoZ0cxbdw0Ll66aOvRyJRTr4hHeQ9q1q3JhmUbgOy9IZka926MwWLAt5Y1ONm3ch9+df3o8HKHXOefCJETCUSEEOIBcOPaDUY8M4I2Ndrw/Wffk56WjoOjA1fDrzL367lcDrvMnqV70Kfpbckbvat749/EP0sPhkqlYtArg/h93e9cCb/CkrlL8G/ij5e/l+06o96I2kVNjdY1OLrtKNfPXCd0SyjthrajYkDFbPcU4k7KbB6RTHq9nuPHjpOYmIizszO1gmvJVvf3SfKICFG0ws+HM7DzQBSLwrC3h/HkwCdtvzOPHTrGGy+8QWx0LInRiTi7O+NT3SdL4jE77Jj+7XTqNaoHQEpyCu1qtaNytcoYzAYsakuW+oxGIylJKSgo6FP1GNOMmIwm/Ov4o9aoc7ynKFskj0geXL58mR+++4F5P80jOjradtzR0ZH+T/dn2PBhNGzUsBhbKIR4EOU1s2lepSSn8HzP53FwcGDhloX4VPYBrMtwt2/cTqvHWjH508kYDAaOHjjKrOmz8PPxY9CwQbZ7aLVaaoXUsn3v4urCnGVzeK7bc/gH+TPk5SG2+wKYTCbOnjhLVGQU2zdsJyopirEfjiUoOCjXewqRmzIZiKxfu55nBzyLvb09g54bRP+n++Pl7UVqSiqbNm7ih+9+4Je5v/D+lPcZP2G8pCwWQhSYnZt33jWzaX6sWriKiIsRbAndkiVYmPnRTH765ideGPECoyaOAqB91/a4urkybdw0ps6cSqWqlXK978MtH2bB5gUMf2o47732Hi07tKRLry64lXMjKT6JvTv3smfHHrx8vFj8x2IaNpMPbuLelLk5Ils3b+Wpvk/RpWsXLkRc4POvPueR5o8QGBjIQ/Uf4p3x7xB2Loz3p7zPB5M+YMa0GQVav4PG4Y5fU6dMva9737oRXmGYOmVqtv1nhBB5c3t20vudQ6EoCr9+9ysde3akeo3qtuMGg4GlvyzFxduFpb8szbJZ5VMvPIWTsxOLf1p81/s3bt6Y3Wd28+nPn5KWmsbE1ycyatAoJr4+kfT0dD6b+xm7Tu+SIETclzIViKSlpTHk2SF07tKZhUsW4uLikmM5Ozs73n3vXSZOnsjkiZM5Gnq0wNpw6eol29enX3yKm5tblmNj3hxTYHUJIUqWvGQ2zY/Tx09z9tRZnnr+qSzHZ8+YjcFioOOYjhgsBmbPmG075+ziTM+ne7J+6fo81aFz0NFrYC+W717OmbQzHIk6wpm0MyzftZwnBzx5X3P0hIAyFogsW7qMuLg4PvnikzzthTB23FgqVarEd7O/K7A2+Pj42L7c3NxQqVRZjv225Dfq162Pu5M7D9V5KEvdBoOB0a+Pxr+yP+5O7tSoXoP/Tf8fADUDagLQv09/HDQOtu9vd6d7ACQkJDDspWFUqVgFLw8vOj/W2RaIzZ83n48++IijoUdtPTjz580vsHcjxIMsr5lN8yPmRgwAATUDbMcye0Nqta9Fs6eaUat9rWy9IgE1A4i+EZ3tfnej0WhwdXeVvWREgSpTgciP3/9Ip86dCAwMzFN5e3t7nn/peRb/upjk5ORCbh0s/nUxUydPZcrUKRw5cYQPPvyAKe9PYcEvCwCYNXMW69etZ+GShRw9dZR5C+ZRrVo1AP7+928Avv/pey5dvWT7/nZ3ugfAgP4DiI6KZs2GNezdv5eGDRvStWNX4uLi6PdUP0a/MZo6devYenD6PdWvkN+KEA+GvGY2zQ+V2jp/7dZgJrM3pM1Lbaz1vNQmW6+I2WyWYEKUGGVmsqqiKIQeCWX6J9PzdV2Xrl34cMqHnD93ngYNGxRO426aOmUq0z+ZzpO9nwSgevXqnDp1ip9++IlnBz9LxOUIgmoE0bJVS1QqVZYAwsvLCwAPDw98fHxyuj3AHe/x919/c2D/ASIiI9DprN2t0z+Zzto1a1m5fCUvvvwizi7O2NnZ3bEOIURWd8pOOn/OfDzKe2A2mynvWZ7qNaujz9Bz4cwF0lLScHZ1JqBmQI5DIFWqVQHg+OHjVAuslqU3xK+eHwB+9fxsvSKvvvMqWq2WY4eO3XGialxMHFcuXcFgMNjalNOkfUVRuHD6AvFx8Wi1Wqr4V6F8hfIF8cpEGVJmAhGz2YzBYMDJySlf12XOI0lNTS2MZtmkpqZy4fwFhr00jOGvDLcdN5lMuLu7A/Ds4Gd5vPPj1Ktdj06dO9H18a507NQxX/Xc6R7Hjh4jJSWFSl5Zf0Glp6dz8cLF+3xCIcquzN6QoROGAtY/4Kd2n+LKqSuc2HGC3ZuzZjbVZ+hJT0u3HSvnWY5+Q/ox8OWBVPGvYjteLbAaTVo14dfvf+Xxvo9n6w3J1OalNpzecZrZM2Yz8OWBbFm1hbEfjc1SRlEU/t39L79+9ytb12zFZDLZzgUFBzHwlYH0GtQLVzdXkhOTWblwJb9+9yvnT5+3lbOzs6PTk50Y9MogmrZuKisORZ6UmUDEzs4OZ2dnoqKi8nXdjRs3AAo9yVlKSgoA3373LU2bZV2VkpkgqGGjhoSdD2PLpi1s/2M7g54eRIdHO7B42d1nv2e60z1SUlLw9fVl6/at2a5z93C/j6cTouzK7A3JzE6akZLBL2N+4Z9l/+Bby5daLWrhofXgkdaPMPOjmaQmp2IymahQsQIfffsR5TzLsXnlZpb8tIS5X89lxg8zeOKZJ2z3H/jKQEY/O5q/tv/F0l+WUqN1DXxq+mDUG21lfGr6UKN1DZb+spTE+EQ0dhr6PNfHdt5oNDJh+ARWzF9BYK1Axs8YT9PWTbHX2nPl0hVWzF/Bh299yPeff897n7zH1DenEnMjhk5PdOLd/71rTXymN7D/r/38+t2vDOg4gL6D+/LhrA+xt7cv0vctSp8ylVn1qT5Pce7cOQ4cOZDnSP3Vl19l65atnD5/Gju7go3b5s+bz9tvvM2NOGuwE+AXwIuvvMi7772bp+u3bdlGj249uBZ9jfLly+Pq4Mr8X+fTq0+vPLfh1nscOniIJx5/ghNnTuDv759j+RnTZvDbkt84GHow13tKZlUh/nPs0DHGDR+HCROKonDj0g1SElOoWLUiLuVcUKlUpMSkEBkRyYCXBjDhkwlER0bzSt9XiLwayaq/V1EtsBrpaelMGjWJFfNXMH7GeF4Y9QIqlQqj0cjgxwdz9MBRVHYqHNwdcmyHoiikxaahT9Pz4pgXGTdtHCqVCkVReHPom2xcvpGPZn9E70G9bcdvTbx25dIVnu/5PBfOXCAwOJC5a+fahnduLQuwYv4K3nvtPR7v/zif/vRpiekZKehkciJ3+cmsWqYmq7786sucOH6CP3f/mafy8fHxLFm0hBdffrHAg5CcvDfpPT6Z/gmzZs7i7JmzHD92nF/m/sJXX3wFwFdffMXSxUs5HXaas2fOsmL5Cnx8fGy9NdX8q7Fj+w4iIyOJj4/PsY473ePRxx6lWfNm9O/dn21bt3Hp0iX27tnL+++9z8ED1sCjWrVqXLp4idAjocTExKDX6wv9vQhRmtUKqcW7H73LuEnjaNu2LSkJKXh6e/LUs08xfvJ4hr0+jKhrUbh7utO+W3scHB3wq+7HsLHDSEtLY1i/YQA4Ojky4/sZNGvbjOnjprPut3WAdVL9nN/mULNOTQypBnw9fencqTODnhvEoOcGMWDQAJo3bY6LxgV9mp5OT3Tir51/sXPzTgDWLV3HmsVr+PyXz+nzbB/bH+idm3cy5vkxtnJV/Kvg5OKEnZ0dLq4uWeaY3FpWpVLRd3BfPvn5E1b/upoNyzcU3cu+i9ufSZQMZSoQad+hPQ/Vf4hXXnzFNuSSG4PBwNBnh2JnZ8fQF4YWSfuef/F5Zn8/m/nz5tO4fmM6tu/IgvkLbL0TLi4ufP7p57Ro2oKWzVoSHh7O6vWrUautP8YZn8zgj9//IKhaEM0aN8uxjjvdQ6VSsWb9Glq1bsUrL7xCveB6PDvgWS6HX8a7ojcAvfr0olPnTnR+tDNVKlZh6eKlRfJuhCittFotLR9tSfuu7Tnw9wE8vT1x9XXl5LGTtOnUhvDz4ahQ4V7JnaXzlmI2mzGbzWxYsQEPHw/OnDjDqaOnAGvadp2jDgWFWdNn2VbLuHm4sWjbIkZMGEFsVCyLf1zM4h8Xs3rRauZ9M48NyzdQwacCMxfNxIKFDCXDtnR4wZwFtOzQkm59utnanFPitWOHjnHs4DGeH/U8R/Yd4WToyVzLAvTo34NmbZuxcM7CIn7jOSvoZHKi4JSpQEStVvPbyt/ISM+gXat2bP9jOzmNTJ08cZKej/dk+x/bWbxscaGtEHluyHO2YZlMTw94mn8P/ktSehLXY67z+47feaKXdTz4hZde4N+D/xKbFEtUfBSbtm7KspLn8R6Pc+L0CVL0KZy5cCbHOu92D1dXVz7/6nMuRFwgOSOZc5fOMW/BPPz8rDPwdTodi5ctJjI2kgxzBs8Nea5gX4oQD6jjh49z9MBRtC5aW0KznZt2smD2AlzKudBzbE/bct7Mya19J/dFY6fhs0mfAdZJr9dvXKdWi1pcOneJXVt22e7v4OjA6+++zq4zu5j922wGvDSArr278urYV1n771qW71qOo5NjloRqv37/K4f2HmLgsIFZ2ppT4rVFPyzC18+XkRNHUrFSRRZ9vyjXspkGvTKI/X/t5/SJ00Xwhu+soJPJiYJTZiarZvL392fn3zt5qs9TdOvUjVrBtej/dH+8vbxJSU1h44aN/LnrT3x8fFi/eT1t2ra5+02FEOIujh08BkBIxxAa92jM2b1n+WXOLyTEJdCwW0PbscU/WyefBzQPoGmvpqyZvoZDew9hMBhsS4ADmgRw+u/TLPxhIW07t82SE8TOzo5OT3Si0xOdstR/e0K1s3vPsmzeMgDadWl3x3JL5i7hevh12nRsg4ODA207t+XEkRO5lm3TqQ0ajYYO3ToAcPLISWrVLb4N8O7WTlG8ylSPSKZq1aqxd/9etvyxhZCQEL756htGvT6Kj6d+DMCCRQs4c/GMBCFCiAJz/NBxVCoV7V+wbnTXZnAbzoadBaBR90a2Y6eOn+Ls2bO2xGd+9fxIT09n9ozZtoRoOmfrBP3L4Zfz/Mk+p4Rq0THRaDQaW96g3MqFXw4nNjoWZxdnAJycnUhPTb9rkjadgw61Wk16ajrFqTCSyYmCUyYDEQCVSkXbdm35demvXI+5TqohleiEaLZt30a/p/qh1WqLu4lCiAeE2Wzm6KGjKIqCh68HAD5BPih21qFhewd72zGLxkKlBpXwqWEdEraYLDiXc2bpL0up3qw6vjV9SY62ZnoOaJG3NPG5JVTzqeWD2WwmPjb+juUCmgeQlppGTJQ1pXxsdCwubi65ls1sU2J8IhaLBRf3nPf1Kgp3eiaZK1IylNlA5HaylEsIUVh2b91NmiENlVrFvyv+BeDYH8ewd7KnvF959izdYzum0Wl4qOdDpCSlkJaQRujWUEI6hWCwGPCtZf1D+s/yfwh4OIAOL3bI0yf723sEMnUd1RWAL6Z8ccdybQa3QaPTsHXNVm5cu8H2DdupXK1yrmUz27R2yVo0Gg3NWuc8eb4o3OmZpFekZCi9gcjNuKEEp0Eps2w/E4nthLB9Iq/RsgYPdXyIP77/A32anl3zdhHUIohmg5pxbNsxrp+5zq55uwhsHoh3TW+irkexe8FuTAYTjfo2okbrGhzddpSI4xGc2HGCdkPa4V3dG/8m/nf8ZH97QjWTwWT7qvFIDbz9vVm9aDV6vT7Xct7VvanboS4Z6Rl8+PaHZKRnkJCQkGtZ/yb+LP55MQu/W0inJzpRsVLFIn7rd3/2vLw7UTRKbUIzxayQejEVby9vynmWK6YWipzEx8YTFR2Fc3VnVBqJRkTZdmtCs7TkNK6du4arpyuKSkHrpEWxKCRcS8BOa4fWWWub/2E2mEmKSsLJzQkHNwcUFPSpegypBixmC9XqVLMt3bfDjunfTqdeo3p3rD8n6SnpXD17lQ6Pd+Dq1auYVbn/Ub527hppyWk0btGY1PTUXO+pKArx1+KJj45nyfYlPNzi4fy+tgJxt2eHO787ce/yk9Cs1K6aUWlUaNw0REdbt7J2dHKU4ZVipigK6WnpREdHo3HTSBAiBP8lNDMYDABsWrmJFfNXUL9JfZq0aoKTsxPRkdGsWLACN0c32nZqS0JcAjs27sDP3483prxBxIUIrl6+yvaN2zGnmRk/YzxVA6ra6tBqtdQKyboqJTOLaM26NbPUn5Pf1/3Okp+W0L5re7o/1T3blg5ms5nD/x5m/pn56Bx0nD15lsGvDaZeo3q2LSgyJcYnsmbRGs4fOc+46eOKJAjJLWPq7e8+Jzm9O1G0Sm2PCFj/58uIzsCcZEYl4wAlgoKCxk2Dg5eDBIZC5GLhnIV8/M7HWMwWuvbpysMtHibyaiTzZ88nJcm671RgcCDPDnsWfYaeTSs3cWTfEfz8/Zi9bDa1H6p91zp2bNrBZx98xpvvv0n7ru3vWva9198j7kYciqLQpXcXmrRsgr3WnquXr7JiwQquR1ynTac2TJ05lfdee48/f/+TSlUr0efZPlTyq2Tda+bv/WxZtQWNnYaJn03k6ReeLpD3VZDPKopGfnpESnUgkkkxK1hMFiixT1JGqEBtp5aeECHyICEugRXzV7D056WEnw+37rRdzp26DeuSkpTC6eOn0WfocXB0oEnLJgx8ZSDtu7XP03YTZrOZ4c8M51z4OYKqBfHt4m9zzZdxa9lqvtVo2b4lv/38G5fOXbK1qfOTnRnw8oAswxdHDx5l0feL2LpmK4nxidjZ2VG9RnWeeuEpeg/qjXu5otkoMz/PKopOmRiauZVKo5L/8YQQpYpHeQ9eGP0CL4x+AUVRsFgs2X6PmUyme9rn6tYsols+38Lurbtz7Sm4vWxAzQC2hG7JtU2ZHmr8EA999xDTv5uO2Wy2bRNR1PLzrKJkKr2rZoQQ4gGhUuX8YepegpDbs4jeKV/Gncrm1qacaDSaYglC8vOsouSSQEQIIR4g+ckiWtozjpb29gsrCUSEEOIBkZ8soqU942hpb7/4jwQiQgjxgMhPFtHSnnG0tLdf/EcCESGEeADkJ4toac84WtrbL7J6IFbNCCFEWZFT8i5FUdiyegsR4RGYL5uZ0XkGkH3VjR12nDxykohLEdnK3k6jaNiyegtde3ctMTmBMp89Iy2DK5evYLpsyrX9dthxMvSkZEwtBSQQEUKIUmTn5p3Zknft3LyTWZ/Monuv7tSub012dvTAUVYtXkXPZ3ry0MMPAdYsopFXI7OVzcmp0FPM+mQWjk6OJWY5bOazjxo/SjKmPkAkEBFCiFIic0gi3ZLOkrlLaNOpDQBL5i4hQ8kg9FAor7z9iu2YxlXDyWMnGfHuCDQajS35161lc1qim1lPhpJhq6e4czXd+uzLFy6XxGUPEJkjIoQQpcStybsyJ2Tm9Vhu1+e1nuJWEtskCoYEIkIIUQrklLxr8c+LWfzz4rseWzJ3CQaDIU/Jv0pikrCS2CZRcCQQEUKIUiCn5F1nz57l1PFTdz0Wfjmc2TNm5yn5V0lMElYS2yQKjgQiQghRwuWUvMu3pi++DXyxaCxUDKyY67HMJF9Lf1lK9WbV75j8qyQmCSuJbRIFSyarCiFEAYqJimHZvGX8/cffJCUm4eTsRHC9YCpXrcz+v/YTfSMajUZDpaqVqP9wfU4dO0X4+XCMBiPlPMvR+cnO9Hy6J07OTrZ7ZvYIDJ0w1HYsJSmF+j3rc+XYFY79cYz6nerneAygce/G7FuzD99avlna2mZwG+YNm2fbKC6nenIqVxDiYuJYNm8Zf/3+F4kJiTg6OVL7odo889Iz1Kr732qX3Nr0UOeH+PHlH+nepDv2WntcXF1o9EgjnnnxGSpXq1wgbRRFQ3pEhBCiAKSlpjF+2HhaBbRi5kczcXFzoV6jemSkZbBwzkKmj5/O/r/241fdD/fy7mxbu42P3/mYdUvX4eDgQJ36dbCYLbz32nu0qN6CmR/NxGKx5Ji8y6g3EnU9Cu+a3gQ2D2TXvF3o0/TZjhnSDRj1RtQuamq0rsHRbUcxpBtyTP6VOYeksJOEZaRn8N5r79EyoCVffvAlTi5O1GtUj8pVK7Np5Sa6NerGgI4DuHTuUo7PnhCZwMxBM/m016ckxSWREJ9AvUb18PT2ZMGcBbSt1ZZX+79KbHRsAf1kRWFTKYqiFHcjcpOUlIS7uztHoo/g6uZa3M0RQogcpSSnMLjbYM6cOMPI90bSb0g/3Mu5M338dH784kf6DO5DUK0gFv+wmIT4BNLT0qnXqB5d+3Rl15Zd7Nm+hxk/zKD3oN5cuXSF+bPn8/NXP/PEgCd4bvhzvDviXUyYbPUZjUZSklJQsP76NqQZcHF3wWg0Zjnm4emBxl5jK5t5zMHJIUv77bDjxZEv8uPXP2ap53Z22DH92+n3nCQsLTWNoT2GcvzQcdt7Kl+hvO28wWBg29ptfD7pc5ISknj/i/eZ8/kcW5tMRhNXz17FbDbj6euJazlXtBqtrU1pqWmsXbKWzyd/jrOLM0v+WELFShXvqa3i/iQnJdPAqwGJiYm4ubndsawEIkIIcZ9e6fsKe3bsYdHWRdRrbP0jvfjHxbz32nsMGzuMtz54C5VKxYE9B3i6w9NodVr+PPcnnl6emM1mJgyfwMqFK1m0dREPt3wYgPXL1jP62dG8Nv41mrZqmiV5l8lk4uyJsxiNRgDs7O0IqBnAxTMXsxyrWacmqLCVzTxmZ591VF6r1VK/WX1C/w29a5KwJq2boNVq7+k9jRw0kh0bdzB/03waNmtoO357ttiEuASe7fIscTFxTPp8EvY6eywWC9PemUZcTBxjPx5LRd+KtjY93OphLl+4bLs+4mIETz/2NJ5enqz8a2WW7LKiaOQnEJGfjhBC3IdTR0/x+7rfqeRfiZioGMA6wXLW9Fk80vYRdv2+i4dbPEz7ru1ZsWAFru6uJCUk8dXUr/jg6w/QaDQ81uMx1i5dy0djP2LV36sA6N6vO8cOHmPezHm8/ObLOLs4Z6m3Y4+OeW5jXsu2fLRlnu+ZX+fDzrNh2QZmfD8jSxAC2bPFepT34LsV39GhdgeuhF/h+VHPs3PzTi6evcji3xfTtHXTLNfv2LQjy/V+1f34euHX9G/Xn52bdvJYj8cK7bnE/ZM5IkIIcR8WzlmIzkGHvbu9bQ7F9g3buR5xHQsWWxbU+Nh41i5eSwWfCji5O7F60WpMJhNms5ll85fhUsGFoweOEn4h3HbvwcMHk5aaxprFa4rxCQvGr9//Snmv8vR4ukeW47dni82cg1LJrxJdenfh1+9/xWKxsHDOQuo2rEuTVk3ydH3j5o2p36Q+C79bWDQPKO6ZBCJCCHEf1v+2Hid3J3q81cOW22Lz6s34+fsRnxRvywT6/Wffk5GegWKn0OHFDqQmp7Js3jLbqpC+k/qiUqmY88kc270rVa1Eq8dasXnl5mJ8woKxZfUWnnzmSXQ6XZbjd8qY2m9IPy6du0TogVB2bt5Jv8H9sm3Ad7fr/9z2JynJKYX7cOK+SCAihBD3yGg0kpKcgm9t3ywZP2OjY8nQZ2TJBLpzy07UajU129Skef/mAKxatMqWBfWRvo+gc9Gx7899WVam+Pn7ERcTV1yPWGDiouPwq+6X5djdMqb6+VvLX7l4BUVR7vn6+Jj4wn48cR8kEBFCiHv057Y/AQhqGgT8l/HzyqUrpKWmZckEGh0TjcViofVzrTEbrX8owy+Gc/bsWVs5ewd7kpKTsnyqN5qM2Gvti/KxCoWdvR0mY9YVOXfLmJpZXueoy/J9Xq/PnLj7ILy/B5kEIkIIcQ/MZjNL5y3F2cOZqEtRgDXjZ/Vm1blx7QZGoxEvfy/AmvG0Ym3rKo+0hDTO/nsWlVqFSqeiUoNK+NTwIfpSNCkxKVSuW9n2qV5RFA7vPUy1wGrF9pwFpVpgNQ7uPWj7Pi8ZUw/9cwiVSkXth2rj5uF2T9e7uLpQ3qs8ouQq1EBk9+7d9OjRg0qVKqFSqVi9enVhVieEEEUm89N4m8FtOLD6AEkxSQD41PTBzskOQ7qBg+utfzhTklJo9WIrNPYaVn28ih0/7SCgcQBaZy0P9XyIlKQUds7biaObI73f7237VL/vz32cPXWW/kP7F+ejFoj+Q/uzbe02bly7AWTvzch0a6/Gwu8W0qZTG/z8/ejzbB+W/7IcfYY+T9dv37CdpT8vpdegXve83FgUjUINRFJTU6lfvz6zZs0qzGqEEKJI3Zrxs9OrnVCpVayZvgZDuoFjvx8juEMw1RpVY90n60iJSyHqehQ+wT5UbViVU3+e4srJKwAENg/Eu6Y3Zw6eYee8nbR4ugVValfBv4k/i35axFdTvyKgZgDN2zUv5ie+f70G9ULnoOOrqV9hMpnumsX164+/5tjBYwx8eSAAA18eSFxMHPO+mZdjxtXbr/9s8mfERsUy8JWBxfzk4m6KLKGZSqVi1apVPPnkk7mW0ev16PV62/dJSUn4+flJQjMhRIly7NAxxg0fZ8v4mRCdQMyVGFw9XbFgQeesw2wwkxSVhNZBi1N5J1RqFfpUPamxqQA4ujvi6O6I2WQmOSoZtUqNXy0/NPYaLBYL0eHRpCWnMW/DPFq0b1Gcj3tXtycky82Sn5YwYfgE+jzbh+PHjmNW5ZwuPjUplciLkTRr3YwFmxegVls/M/9vwv/4/rPvGfb2MHZs25FrFtik2CSiLkfR85mefDHvi/t/QJFvpTah2bRp05gyZUpxN0MIIe6oVkgt3v3o3SxZSDcu38jKhSvx9vWmXr161G1Ql8uXLrN60WrMN8w4uzqTGpeKR3kPEuITyEjKwMHOgZTEFFxdXXlr6lu4uLrw1x9/sWvzLtJS0vDx87ENRZRktycky83TLzxNanIqH7/zMVUDqtKuSzuatWmGzkGHxWLhVOgpdmzawfmL52nQpAGzl822BSEAb019i7TUNGb/bza1QmrRoUsHGjVrZJ0IazJx5N8j7Ni0g6jLUXTo1oFpc6YVxeOL+yQ9IkIIUUD+/uNvfv76Z3Zt2YWiKGjsNJhN1k/9arUai8WSpXzmMTt7O7RaLWmpaWh1Wrr17cb1q9e5kXCDoGpBfLv4WzQaTXE80l2ZzWaGPzOcc+Hn8tzWvTv3MvfruWzfuB1FUXB2cSYjPQOz2UxwvWAGvjKQ/kP755iaXVEUtqzewi+zfmHfn/tQqVQ4uziTlpqGxWKhSasmPDf8Obr27nrH3hlRuEptj4hOp8uW7EYIIUqLlo+2pOWjLbl84TJzv5nLxlUbCekUwvk953l70ttsWLaB3Tt2U7dzXU79fornXnqOpq2aEn4+HIPeQHmv8rTt3JbQ/aHMmDKD7m92Z8vnW9i9dfcdexqK060JxfLa1ubtmtO8XXOuXLrCnh17SEpIwtHJkeCHgmn0SKM7BhAqlYouvbrQpVcXzpw8w8E9B0lJSsHZ1ZnGzRtTK6RWQT+iKGQlqkfkdrLpnRCiNMrsJdBU1vD0x0+z5N0lGCOMnDhyguptqzPw64H8OvJXLu66yM6TO7Os6sjpWvNVc4nsFSlNbRVFKz89IpJHRAghClhOibaOHTmG3qynzUttrMdeaoPBYmD2jNl3vfb21OUlRWlqqyi5CjUQSUlJ4ciRIxw5cgSAixcvcuTIES5fvlyY1QohRLHJKdFWxcCKWDQWAlsGUiWkCgB+9fyo1b4WS39Zapv0mpckXSVFaWqrKNkKdY7IgQMHaN/+v7HCN954A4DBgwczb968wqxaCCEKjMFgYNvabaxcsJJrEddQFAVvH28aNGvAlUtXOHfqHBnpGbiVc6Nq9aqcP3+elya8ZLt+/7r92DvY06hXI9KT03FycwKsvSKnd5xm9ozZjJo4ytbDMHTC0Cz1txnchnnD5pWouSL5aevRA0dZ9MMiToaeJCMtAzcPN1o91oqnX3gan8o+xdF8UYIUao9Iu3btUBQl25cEIUKI0mLVr6toU6MNIweOJCU5hUfaPkJwvWCO7D/CrGmzWLd0HQ6ODrTp3IZKfpVY99s6Lp24xPrP15OakIo+Tc/OX3YS2CKQirUqknA9AUOGAaPeiE9NH2q0rsHSX5aSnp5+1yRdJaWnIS8JxZbMXcLp46fp1bIXvVr2Ys+OPdRrVI+2ndviV92Pn7/6mTY12vDm0DdJTUkt7kcSxahErZoRQoiS5McvfmTauGl079+d4eOGU6tuLY7sO8LgboOpWr0qzw5/ltB9oSz9eSkPt3yYl954iTOnzxAfG8/e3/ZycO1B3Cu6k5KQQtS5KE5uPYmiKNbcGLcsDDGmG/nxix+5cvkKpssmZnSekWN77LDjZOhJ6jWqV0RvIGcnQ0/eta2mNBP92vWjkl8lflj5A227tM0ygTU5KZlVC1fx2fufcf70eRZsXiCLEsqoIls1cy9k1YwQorhs37Cdl3q/xLC3hzHgpQFkpGcQHxvPy71fxr2cO18t/ApnF2cAVi9ezbfTv+XDbz+kqn9VDAYDF89e5NOJn1K3QV0CagbY5oGoNWocnRzxquhlq8vB0YH+z/fn5OGTWZKk3U6r1dKkdZNse6dYLBa2b9xOh24dbAnA8prtND9lM8tVDajKgb8O5NrWlOQUJo2cRNWAqizYtABXd9dc6zkZepJnHnuGR9o8wncrvrtjO0XpkZ9VMxKICCFEDvq164e9vT2f/PgJQ3u+RnqamuTEGyQnRmLvqEVnXw43D+v8hvTU6yQlxuLq5sr+q/ttwcCyecsY98o4fj/2O9VrVgdgx6YdecpCmh9fTf2Kn775iRdGvMCoiaPyXU9ey+a13A+f/8Dnkz5n5+mdVKxU8a7Xr12yljGDx7Dx0EZq1ZU8IA8CWb4rhBD34WToSQ7tPcTgEYPJSM8gPU2Nnd0k0lItqO0cKO9XDqNZwdHpRzSa90hLT8LN142EuAR2b/tv6WrPp3tSzrMci35YBPw3tyLdkl5g8z0MBgNLf1mKi7eLbQVOfurJa9m8lrNYLCz6fhHd+nXLEoTc6fqufbri5ePFr3N+vce3IEozCUSEEOI2W9dspZxnOR59/FHbMcWSitkUhaO7PR1GdsLBzUhywhpSk7fj4K6j27huqDVqvpzype0anYOOHk/1YOuarUDWLKQFlW9j9ozZGCwGOo7paMtLkp968lo2r+XCjoVx+eJl+j7XN8/X29vb8+SAJ9m6dus9vAFR2kkgIoQQt0mITaBipYpZ9joxmmIAqNG6Bo16N6NW+1okJv9IavoKarUPpulTTXHxcuHMyTNZ5k5UqVaF+Nj4LHk3GvdoXCD5NjJ7Q2q1r0Wzp5rZ8pIs+mlRnurJa5vy0/b42HgAKletnK/rq1SrQkJswj2/C1F6SSAihBC3sdfaY9BnnYiZmrQdgIa9mwDQcmhbNNoUdC56Wj7fAgA3LzcUlCzZUg0GA1qdtlCykGb2htyarVVv1nPsyLE81ZPXNuWn7ZkTaW99f3m53qA3YK+1v+d3IUovCUSEEOI21WtWJ/x8ODeu3QCs8x70xj0ApMVZc174BFfG0V1HUKtAfIMrkZGcQfTFaLxrerP458VsWb2FVb+uYuPyjfhW8S3wLKS39ob41fMDoEpIFQJbBqJoFLwDvO9YT14zo+Y3g2q1wGqo1Wr2/70/X9fv+2sf1WtUz/d7EKWfBCJCCHGbHv17oHPQsfTnpQCkJEXh6GGh2sPV2fPLnwCc3nEcrZOWBr0akhKbwv5l+zGkGXAu70z0tWiGPzWct55/i5OhJzkZepI92/dQMbAity5UvJ9ekdt7QwDSk9Np2Kshdg527F+3/4713N5LkVvZvJbL5O3rTYduHVg4ZyGKouTp+msR1/hj/R88/cLT+X4PovSTQEQIIW7j6u7KE888wYLZC7hy+QpGUyI12tSgzcvtiDgczuFV+/hn4d8EtgjEp2ZFos9HsXHaRhRFIepsFFUeqoKnjyednuyEq7srwfWDsXOwY/6b85k3ah6GdMN9ZUzN7A2p0boGPjV9MOqNGDIMJFxPwKeWD4EtAtn5y070afoc68lrZlSDwXBP2V4HvjKQsGNhrF2y9q7XL/55MZ9N+gwnZyd6PtOzoH+UohSQPCJCiDIlr8m7Ym7E0Lt1b9LT0knNSMXJ3QlFUUiNS8WYbkTnrMOpnBMWs4WkqCQUs4LWSYtzeWuSs+ToZEx6E0NHDmX3H7uxqC0kxyUTczUG9wruePn9l9DMDjumfzs9zxlTVy1axZS3p2DvdMucCsU6hJT5TPpUPW7l3XBxc8lWD8C44eMwYcq1DjvseHHki/z49Y93LXd72xVF4Y0hb7Bp5Sa8K3vj6OGY47WKohB3NY746Hg++ekTeg/qnafnFyVffvKISIp3IUSZsnPzzjwl5apQsQLzN85nSPchJCUk4VnFk1p1a+Hq7sqfv//J1fCrWIwWjEYjKFC1elWad2jO2sUbyMhIR7GYcStXic2rDmDQK1g/8rni5mEhMSaOYW8Oo0btGoB1gmetkLwn8urYsyNR16LISM+wHTObzVy9fBWL2WK7Z7uu7XBwdLCVubWedz96965ZXOs3q493Re+7lru97SqViunfT8doNLJpxSZq169N+67tqdeoHnb2dqQkp/Dvrn/ZuXknCbEJvP/F+xKElGHSIyKEKDPMZjPDnxnOufBzBFUL4tvF32bZ/yQnCXEJLJizgCU/LiHyamSWcxo7DWaTdVhCpVLdnP+hwtmlDeW9XsHBsW6W8gb9JQyGiahUMTzc4mG++OWLAn2+ksZisbBu6ToWfreQQ3sPAaBWq7FYLNjb29O5V2eGjBhCw2YNi7mloqBJinchhMjBjk07mDFlBp3f6MyWz7fwzqR38pRmPdIUybFLsYT9E0rc9WgURcHDuzy1WzRkSo/XcHBxpFXfzhjS9Wybtxsn14XY62pmu49Rfwajfgi9+rdi7tdz2Ru+l3Ke5QrjUUucsGNhnAw9SUZaBq4erjzS5hG8fLzufqEolWRoRgghbnN7Uq2ze8+yZO4S2nRqk6VXJNIUSYI5Icu1x4+DOcETl4vvYZtxEQFXlyhEX+5Hx46fU900gpjEMCzphzFaXFHs3LO1waTSYTSDVyMvjEYjf57+k5qNrQFLsC64kJ68ZAiuF0xwvQf7GcW9kUBECFEmZC4jHTphKGBdPjpv2Dx2b91t6xWJNEXyV2gC5gQPTJE+Wa5vUCEAmma9p8WiYLEYqVHDgaZN4coVWLECHB3htg1yATAYtOhTHLm035ov49gWX5IvBqMLDoOQsAc+GBEiJxKICCEeeDkl1fKq6UXlplWZNetHzDW9UWs0xMWCPizYGnRUuPt91Wo1zs4exMRcyXNbdDrwtFhXtjSqEkLVCgHs2xhAaMIergWG2crVqeKBj51PbrcR4oEhgYgQ4oG3aMMizoef57nxz5Fhsa40SU+Hpr07sHD4QnZ8oCEoqBsAgYFXWbRoMv/+u4aUlDjs7XVUqRJM584v06hR12yTW5s27cmOHfN5+un389yevXtX4+MTSJUqtW/eAzC1YN8C63mnFns4SQJUQYIR8cCTQEQI8UCKNFlXuMQaYlk2azOVHwrCyb0KSdas7Vj0OqoEOFOzdTUunvmOXr3a8uOPo/j443lotQ40b94HLy8/jEY9x47tYOrUHnh7+/P66z9Rv34HWz3dug1nx475HDiwgUqVrMtxjcaLObbJaLyI2Wzk8OHNPPvsNNTqrDklm2YO/ZhacOTvC8QFhxESkiBDNuKBJqtmhBAPnDB92M0Jph5cPRvGqs+/ROucey4MjHZoLA5ERJzgueem89hjQ3FyyjrT/+zZ/cyfP54TJ3YzduwyHnnkCcCalOu99zpw+fJJxo5dyuzZb6HX51yNxWImOfksDg6OzJ59GlfX8nd8jiMxF9AFh1HeEzr4SzAiSg9ZviuEKDPC9GFZvr92HaLPe5C2pwVNm4LRaGDPnuWkpyfneo8//1zC6dP/8MEH2/Dyqopen5ZjObPZyLx573Ds2E6+/PIwVapYE3klJcUwblxrkpJi6NdvAg891B57e53tupiYK5w58y+///4z8fGRjBo1D3///zKR6nROeHlVzbHOffug2rMbCzUQyWu2WSHySpbvCiEeSJnDLZlOXkkg+vydV7gkJESydOnnufZSmM0G4uKO8dRTE/HyqsqkSb1zLQug1VpwdHRh/fqvGTZsFgBubhWYPv0vvv56KD/9NAZXV09atuyLu7s3cXHX2LFjISaTHo3GETe36sydOyPLPXU6mDJlZa7BSPR5D8J8C29VTV6zzQpRGCQQEUKUeJGmSFvQkZUHIaYWd1zhotenodeDnd1U7O2zbzMfF/cRcIKmTXvctazReBGDYSItWvRlx475PPfcdJycrL21bm6evPfeWq5ePcOmTbM5cmQbqakJ2Nlp0WiccHefipNT92w9DkbjRfT6ibn2wjRtCkcifTh+PKFQlvhmrihKt6TnmFdFiMImgYgQokTJDDpuFRdrne8RYmpxz/e1t6+OVpv9j7jBcBidzgNHR9e7lgUwmaB5815s2jSbY8d20KxZ1h1jK1euyYsv/pe6/cqVMCZNGoSjY4873vNOGlQI4EgYEBJ254L3IDO/Svc3u7Pl8y1Z8qoIURQkEBFCFJvcspjqw4IxXAjIcrzpbcnECorZnIg2p+xjd1CunHUoKCUlrjCaVGTymm1WiMIkgYgQolhkrmzRh2XvJchrQrGCoFJpgTusqMmB0Wgtb2/vcJeSJVtess0KUdgkEBFCFLowfRjXrmc9ljnJtEGFgJwvysH584cJDz+GwZCOi0s56tVrj7t73jZOUxSF9PS/MBrPoihGNBovnJwew94+EKPxLxRFsc3fsFiSSElZjtkci0qlQ6utjU73X5fMmTP/AlClSjAXLhzh0qWj6PVptjZ5eHhnq99iySA1dR0mUyQqlQY7O38cHdvetd379lkTnPm2TMBD45GnZ82LnLLNVqpViYDmAdIrIoqUBCJCiAJx+zLaW93PcIvZbGbnzoVs3DiLs2f3A6BSqVAUBTs7La1a9eeJJ8YQGNgox+sNhgzS0qKIj38ckykz0ZgKUFCpXNHpGmMypXPx4hEcHFxITg4nJqYtipJhKweg1T6Es3NvNBoLu3YtomLFAL799hXOnNmXrU0tW/ajZ8/R1KjxMPHxkaSkXCE2th0WS2KWe9rZ+ePi0huNxnzHd+AVmFDgy3dv7w3JJL0ioqhJICKEyLfbl9EmmBNyHWYBMFwIsAYd+Rxu0evT+fTTZ/j33zU0bNiZCRPW0LBhJ+ztdSQk3GDHjgVs2jSbP/9cwogRP/Doo0OyXJ+UFMOXXw4mNTUCB4fWlC8/GZ2uAWCH2XyNlJQVJCcvAeCnn94kOTkWi0XB2flp3NyeR6PxBkxkZOwnJWUx8fEfoNFoiYmxpomvVCmId99dTaNGnW+2KYqdOxeyadNs3n77Efr0GcemTd+SkZGEk9MTuLm9iJ1dNcCCwXCClJQlJCTMRKPREBd3nSpViiZpWWZviH8Tf7z8vTAZ/pst613dG/8m/tIrIoqMJDQTQuTLrVlLb5WZQKygWCwWpk/vy6FDmxk2bBbBwc1zLGc2m1i27GP+/HMJ77yzjBYt+gDWZbvvvtuOGzcuYjaD2Zx12azFAqCgKAomUwKKYsbJyR1HRy9MJi2gyvZHOC0tiowMaxA2aNCHBAQ0zKXtZtau/YqjR/+gQoUq2NmVx2y2B6xDRGZzBhqNAyqVCpMpg6Sks3h7+/HZZ/txcSmX5V6FkdDs2KFjjBs+DhO5L9exw47p306nXqN6uZYRIjeSWVUIcV9yG2a5PWtpYdq7dxXTpvXm9dd/ZNWq2XdJMqbg4+PD2bP7+PnnCLRaB1at+pQFCybQqdPLbNw4D3DO5WoFiCZzuMQ6dOKASuWAm1sFQIPJlIpeH4fJlGq7Sq12BtxzbZPFEoW9vQaTycjw4bOpW7cNAMeP72Ldpi/p0XU0ISHWOSIJCTf48MOedO78CkOH/s92j8wU7yEhFGj+EIPBwP4/92Mw5D5JV6vV0qR1k3yvKBICJLOqECIPbh9eyXTySgJxsTkPs2TO8SjsIARg48ZZBAe3oHbtlixZMvuuSca6dx/BlCnd+Pvv5bRtO4BNm2bTuvVTqFQK1iDka6DGLVdmBh6/ATOwt2+E0XgIcAMMKEo8iYnxttJabQPs7BJQlBtUqRJEeHgYavWXaDS33tPKbN4NjMKjfCWib1xm05bZPPbYCwD8svAdVC4GDh7ZSMeOL6LRaKhSJZiOHV/k999/ZuDAD9BqHThutwddcEKBByHWZ9HS8tGWBXpPIe6VBCJClEG5Da9Y3aHHo4iW1EZGXiA09A/eeGOh7djdkoxVrFidBg06smXL95Qr50Nk5AXeeONXdu3KvEcNIHMo5daO4DcBOxwcHkFRYjCbU9FoNmGxhFKunD329m7Y29dCrXYnPNwfV1d/QkLaEB5+DLXaiFrdIFt7zOYvARX2zir86vpz9cJpDh/eAsCN+DN0Gf0EW7/czOHDW3j44W4AdO06jDVrPmfhwlU0fbkaXoEJ1KnigY+dT7b7C/EgkUBEiAdcbktn7zi8UgQ9Hndy9eoZAOrWbZ1r6vOc1KnTmg0bvuHq1dPY2dlTq1azWwKR3FwCtKhUKnS6RqSmbkOlckStboOzc3W0WkcA0tJ+B8De3oVKlay9IIoSnuMdFeUiKrWaoFZBePhUYNNXK9m8bQ4AgS0CaNClCef3nWHL79/RsGFnNBoNlSrVwNXdm5Ty66nfamCh7SsjREkjgYgQD4C8zOm4XVEMr9wrk8k6d8HOTpevQMTeXofJZMBkMmBnp83jTrJG27+syc1ynjanKJmTVFSo1fbZrs1aNho7rZpHnmrF+b3nUKnVXLpyBHudHS8MGA5Ai2faseD1n7P0itg5aChfziRBiChTJBARopTKnONxpzkdcMvS2VLE1dUTgOjocJyc7jzR7VbR0ZdxdfXE1dWTjIxUkpJi83CVO2AtZzJdR6XK+deiRmMdl7JYDKSkZN7XI1s5RTGjUsdi72iPd4AP+5b/g0t5V1RaE1UaV8EnqBIAvjUqE9giwNYr8s8/BlIS4vH2zJ4MTYgHmQQiQpQymZvC2ad7ABB97S7DLEU0r+NOFEXh2LGdbN48h7Cwvej1qTg6uhIS0o5u3YZTo0aTLL0XNWs2pXx5X37/fS49e47KUx0GQwa7dy+ideuniYg4Bah44YVqWHs4jMBKoCbZV8+0B05iNseQkfE3anWVHO+v0zVGo6lIRkYsp07tAVSoVA9nK2exbMHBVUV6QhqXj15i/+q/CWxSi5grN6j/xEOkpSXh5GRdbZPZK7Ji1zwMLicw6jPo9USvPD2vEA8KCUSEKMFy2xTOnPDfcEvTphT7nI47uXz5BJ988jTh4cfx86tN27YDcXJyIyUljr//Xs727b8QHNyct99egpdXVQDs7Ozp1OllVq/+lA4dngOsq2Nyknn833/XkJISz5Yt32Nnp6Vixeqkpsbj4xPIuXNHgY+AL4ExQC/+G4J5CID09B2oVDrAFYvlHOBwc0+Z//aTcXTsSErKQk6e/BNwQlGuYbEcsZ1XFDMqzSfUbFOTc3tSWTt9OanxKWSkZhDYPBDvmt7ExV5Ha+cEqPCqVpEqzXw5dPgHDEmxtO7YGv8g/wJ460KUHpJHRIgSJnPIJTNbqTnBuifLrfKzP0txunDhCBMmtKdCBT9efvlrQkLaZun5MJvNHDq0me++G4HJZGD69L/w8bEu0Y2Lu87rr4fg61uDlBQ9RuOdMnymEBt7DovFwnPPfUyXLsOIirrEW281o0qV2ly6dA5wBFKADMCFrD0jMYAZe3t3LBYNiuKASgUeHl6o1f99XjOb9cTFnUClApXK9eZ9/qMoBrTO6Ti46khPSsWQqsdOq8XBVYfW6b98HE5O7igWe1T2RlQaM0mRCSTHJrNg8wIeafvIvb1sIUoQSWgmRCl1+7La/G4KV5JkZKTy6qu18PCoyOjRv6DR5N4Bm5GRwv/+9zRarQNffRVqy2h68uTfTJnSBW9vf7p3H0nt2i1Rq9W269LSkvjnn1WsWvUpZrOJt99eipeXHykp1vwfJ078ycqV/8PDoyI+PtVxcnInMvICV6+epnbtlmi1DkRFhXP9+jmcncuRkZFM7dot8fUNxMWlAr6+1neflBTLtWtnOHp0O3Fx19Bo7ChXzocmTXpQtWodtFpH3N29MZuNnD17gHPnDhAa+gcODs6kpiYQHNycmjWb4ezsgUZjh7lcBRyqRZKReJ2wbfs4/M9hJn05iedefa7A3r+iKJwLO0dQcFAeJ+0KUXAkEBGiFLl1eW3mpNPSGnzcavPm75kz51U+/ngX33wz+o6ZUXU6GDx4Ih999CQTJ66jSZPutnPnzx/m66+HcvFiKD4+gTRo0BGdzpH4+Ej+/XcNJpMBlUpN584v07btAN59tzsWy3/DKYqSgaIkAmbAHlDh7OxMenoyFosJUOPo6I2Tkw/JyZcxGOJuXml3szyAHrAAGsAVV1dP0tOvYTKlo1ZrcXR0o0WLJ9Dr09i3by1Go562bQfyyivfsGHDNyxfPo2MjBQaNeqCfbmKqNyjibt8jrB9YfhU9mHCJxPo1qdbwb18YMemHXz2wWe8+f6bsnmdKHKSWVWIUiBz0unty2tL2wqXnCiKwsaNs3j44e64uVVAr+eOmVH1+olUrlyLGjWasHHjt1kCkcDAhnz55WHCwvayefMczpz5F70+DReXcvTpMw4nJzd+/HE0PXuO5urV01gsDqhUX6FWB93SHguKshezeQFwEEWxYLGYcHbuT7lyb6JWW39RqtXJREefArYCq4ByWIOReOANoCNwAweHynh4uGAwHCEp6Sf0+j0cPbodD4+K9O49lo4dX8TT07o6pm/fcTz++Ah++WUxYVfmkH7hGE4OWqpVq8bI30by6OOPYmdXsL+KMze1S7eky+Z1osSTQESIYhBpiuSv0ATbpNMHIfi4VVzcNS5dOspTT020HbtbZlSA9u2f44cfRmI2m7IM5ahUKmrXbkHt2tnzoUyf3s82nHL16mkA1OqgHDKeNkKtbonZ/DjPPjue774bib19dRwc/nv5RmMioAXqAWHY2y+8eXwQ0B+VqiqKchY7O390Ond0utrodA1JTx/EpEkLc90999gxF9q+V5lenlOLJFvq7q27Cb8cTvc3u7Pl8y3s3rpbekVEiSWBiBBFJNchmAcsCAFsczQ8PSvn67ry5SuhKAqpqYm4uXnm6ZrU1HjKl6+Ur3o0GnvUajsslsR8XXcvjsRcwLVbwW9cl5vM3pCA5gE07tGYs3vPSq+IKNHUdy8ihLhfmZNQr/8dTPiCbiRv7PZAzAPJTWZa9PxkRQUwGNIB0Okc81VX5nX5oSgKKpXD3Qveo337uLlxXRit6nsUWbbUzN6QtkOsO/u2GdyG8Mvh7N66u0jqFyK/pEdEiEJ0+zyQpk0pEQnGCpunZ2Wcnd05cuR3Hn108B3LpqfvJSHhNFOn9iA5OQ4HBxesk0LzpmrVELZs+S5fQU909GUUxYS9fdDdC9+DffvAqcWeIt+47tbeEN+avgBUqlWJgOYB0isiSizpERGikITpw/gr1BqEhJgevHkgd6LVOtChwxC2bfvxZlKw7GJjp3D+vBPR0c9jNKZw/fo5UlLiyMhIoV8/B0aMqEdcXORd6+rc+SVSUxP488+leW7fiRO7UavtcXRsm+dr8so6FLOR+q0S6OAfXKS7597eG5JJekVESSaBiBCFIHMoRh8WTIgp+wTLsqBr11dJSophy5bvAOvqGIMhDIMhjMuXmxIfPxlFSUej8cfNrRYtW/ZDrbajc+dh6HROXL58nOefr8LFi0fvWI+PTwCNG3flt98+JC3NOufDYjmHxXIkh69zKIqB06f/xcHBC5MpwtYmgyEMk+kMcBE4CxhQlFMoyinAAJxCUY4CFzGZztiuySnja1HNB7lVZm+IfxN/vPy9MBlMti/v6t74N/FnydwlmM3mIm2XEHcjeUSEKEA5DsU8IKKjL99x+EOnc7KlaM/0228fs3DhBNzcKqHV+qBSqUhMPI/BkIBKpcbR0Q+wYDIlYDAk0779s3h4+GAwpHHq1B4uXDiMSqXmqafeJzMnl4ODM35+dQCIiDhJRkYqRqOeTZtmo9M5ER+fzH9ZU1WoVGD9LaegKAYgHm/vqlgsOoxGO1s5jUaD0WggOTkOUAHptjkkipKBNTOr9T4eHt7Y2+tueXaYMmUlFy9WxbXbxmIJRI4dOsa44eMwYcq1jB12TP92OvUa1SvClomySBKaCVEMHuQludHRl5k0qfddk5JNmbIySzCiKAqLF09hyZIpeHtXo1mzJ1i37ms0Gnt69XqL5cs/A0xYk4W5Ak633TX25nk14JV5V1Qqzc37W24eS8U6ryT55r10N7/UODq6kJ6eBKRj3fxOg5tbACkpiWT++lOpDLi6eqNWazGZ0lEUC/b28Nxzk3B39yYxMQqj0frwTk5uBAQ0vO3ZnbiqMqELLrrVMbczGAzs/3M/BkPOQ2EAWq2WJq2boNVqcy0jREGQhGZCFLFbh2IexCW5en1anpKS3d5jolKpGDBgMg0bdmLDhm9Yt24mAGazkeXLp90s1R54GaiFdSM6BWuPxDlgJBCNNbj4BqgCRKJWewMOmM1GIBwYjUYzHnDHbH4HaxbVaADS0xNu1lMHtfpRYAc63QekptqjVlcErqIok3Bymoa9fYDteUymidSq9UiuuUEyZU5M1XkkFFsQAtYgo+WjLYulbiHuhwQiQtynSFMk165D8sZuD1QvSE7ykpQsJ5nJyP7+ezkWi5l33vmNEyd2s27dYuAzVKrMHgblZi+HGmswAlAHOA78CUwDHFGr/QFnzGYD1gRkKlSqQFSqAMzmysAvQBRwBDc3b1JTndFoOqMo4SjKHuzsqqNSaVGrq6MoroA99vYBWZ7tTs9zK23AhSJfHSPEg0QCESHuU4LZOidE3J3ZbKRcOV9atOhDUlIMeZsv3xJrIHI4HzVpUKmaoSjl0ekqkZYWfU/tzatKvkgQIsQ9kkBEiPuQOSRjivR54HtDCopand88FplJx3Kf+1AcbEMywQl4aDyKuzlClFoSiAhxDzJXx8TFlo0hmYKiUqlJSYm7e8Eswm7+17egm3PPiithmRAPIglEhLgHD+oS3cLm4xPA9evnOHfu4M0jRuBjFGUv1hUyDkAw1smrmfM1/rz53zFF0ka9/jjx8R+TlnaUUaMaoNU6UKVKbTp3fpnWrZ8iNNQJpxZ7qN8qodgmpgrxIJFARIh7VBaDkJySd93p+O1GjvyJ8ePbMmNGfxwcnIE44A+gB1AR0AMHgOcBF6wraNKw/qqKBY4CkVgsqViDlsxVMwqKcv7m9ZnJxxKASEymVBQl7uY1V1EUIybTRRTFPssxvf4Y0dHDSU/fgVpdDp2uPI8//jzOzh4cP76TmTNf4Oef36Rz5x/o0ddXhmOEKCASiAiRD7cmLCtLdDondDrQ6yfmuppEp7OWu5O6ddvg6urJjRsXUKvtsAYT9sCW20p6AklYAw2w5gh59ea/FSyWzHkm/+URMZun3MwvkpGlrNnsCSRiuVlUpcrAaJyQ5RikExPzHBaLEVfX6uh05XBwUNG16zC8vKrSp89Yrl8/z5dfjmflyn64NRlNjRp97/isQoi8kUBEiHzIXCFT1npDvLyqMmXKynxnVs10a1bW6tUf4ujRHVgsJpycnKhbtxm+voE4O3sAEBl5juPHdxMdHXvzahWdOj2Hvb01CZdW64SvbyAA16+fx2BIw8nJg9q1ran0IyJOkZGRAvyXhTWnhGRxcdcwGDIAWLnyE86fP8iYMUtwcnLFYMhAq3VAr0/jyhXrHJWjR6HTyCfw+v0GC96bSe8OHfCpL3NDhLhfEogIkU9ldYVMbkHG3dyaldVs1hMXdxwnJz/S06+TlpbE/v3rbpbMXMpr66bAxcUHjcbC33+vwsmp2i133Z6lDp0OunR5GYCff34/TxlgH3qoAwA3blzixIldvPrqHAIDG+aaQVavB/s1epxdzVSoWIFfZv3CjO9n5PNtCCFuVySByKxZs/jkk0+IjIykfv36zJw5k6Zl8Te5EGXQrVlZMzKWo1ZHUL78Wszma1y/Phrr8EsE1gBEhUrlgqvrczg7d8dkmkjdurXZufNXXFy+RafLvkfK7Vld85sBdvPm73BycqNdu4HExETkeH16Ojh4JoM5HH36FLr16cqi7xcxfvp4PMp7FOj7EqKsKfRAZOnSpbzxxhvMmTOHZs2a8eWXX9K5c2dOnz6Nt7d3YVcvRIHJzBki7o29fXX0+v24uPTHwaEBBoMDdnZuqFQ/oihaKlWqjlbraCtv3Q0X6tVrz86dCzGbY/Kc1TU/GWAPHdrMI4/0vjl5NufrzdoUHF3NqPQ6UlM0PPr4o8z9ei77/txHpyc65fNNCCFulZe0hvfl888/56WXXmLo0KHUqVOHOXPm4OTkxM8//1zYVQtRYLLtJSPuicUSj0ZTMV/XuLqWB0BRkgqjSaSmJuDhkXubUlOt/9XwXyK28p7WNiUlFk6bhChLCjUQMRgMHDx4kMcee+y/CtVqHnvsMfbu3ZutvF6vJykpKcuXECWFBCH3T6VyQlFyn/Cak8wJpSqV411K3hudzhGDIec2pRn1qN0TsdOZsVfZ247rM6yTSBwcHXK8TgiRd4U6NBMTE4PZbKZixayfNipWrEhYWFi28tOmTWPKlCmF2SQhRBEwGvXs37+e69fPERd3nfT0aLTaaHS6+qSlbUZRPs3zvc6ftyY/s7evUShtrV69AYcObUFRlBzPOzqCgyprwLH/7/0ABIdIQjMh7leJWjUzfvx43njjDdv3SUlJ+Pn5FWOLhBD5kZwcx+rVn7F1648kJkbh4lIOUJGSEkdKSgccHFphMJwkI2N3nodo9u/fgL29a46TTwtCly7DePfdthw9ugNPz0q246mpoHY25njNut/W0axNM4JqBxVKm4QoSwo1EKlQoQIajYYbN25kOX7jxg18fLKvv9fpdOh0usJskhCikERFhTNpUmfi4q7x2GND6dJlGH5+tblyJYyJE5/GaGxGaupmAG7ceI4KFb5AUYwoyjnAAaPRwH8b3FlXuGRkxBEdfRE3t4B8ZXXNT9m6dVtTrVoIv/wyltde+x6AlIwz2DknowJUeh2Zq3kN+kukpyVw7GA4MxfNzPO7EULkrlADEa1WS+PGjfnjjz948sknAbBYLPzxxx+MGDGiMKsW4oFza1KwnNwpoVhhS0mJZ9KkzphMBiZOXI+Hh3VF3JUrYcTFXUOtTkel2omzs5bUVCdMpstERQ1AURxQqUahUoHB4IXJZP2VpCgKen0cycnhNGrUhRs3ojAY8pbVNb8ZYFUqFaNH/8L48W2YPXs4dnYmDIb30ZiMYLYn9eamv4qikJ6WQEJcBB17dKRLry4F8/KEKOMKfWjmjTfeYPDgwTz88MM0bdqUL7/8ktTUVIYOHVrYVQvxwLg1KVhuMhN1FUcwsnbtl8TGXuH99zfy7bdvZGmnxWIiPj7Z9r2iaFGrTVgs1n1h7OwUnJzcGDr0HZydPTh9+l92715MTMwlWrbsx5tv/kp8/PU8B2H3kgE2MLARU6Zs5cMPe6LXpxJUrx3dXg2hQZUGGPQGQg+Esu63dVyPuEznJzvz5YIvUasLfdGhEGVCoQciTz31FNHR0bz//vtERkbSoEEDNm/enG0CqxAid7cmBctroq6iYjIZ2bLle9q3fw4PD+9s7TQaM1CprqBSVcS6wdwk3N2fIi5uAs7OvUhP30Vi4hU+/XQAYF1Z16RJD155ZSYNGnREpVLlK7i610Csdu0WfPPNCbZt+5G1G77h0xc3286p1Wo6dOvAe5+8R5tObVCpVPdUhxAiuyKZrDpixAgZihGiAOQnUVdROXhwE/HxkXTt+qrtWNZ2pqNSaVGrq6MoroA9zs69SE6ej1rtTOXKO0lO7sfAgW9QuXJNfH1rZJk0WpTOnq1InQHtqfPyQ3irolDHq9E56PAP8sensuwrI0RhKFGrZoQQpU9k5AV0Oif8/evZNoi7G5VKhYNDU4zGi6hUdtjbO1O3bmuqVCne5bDagAt4BSZQp4onPnZ1i7UtQpQVMsgphLgvFosJjeZePtPYoyg5L48tTpV8wcdOej+EKCoSiAhRBpnN5lwTeOWXu7s3aWlJJCRE5es6o/EcGk3J2G9q3z44brcHXXAYHhqP4m6OEGWKDM0IUQYoisLp0/+wceO37N+/jtTUROzs7PHzq0Pnzq/Qrt0gnJxc7+neTZp0R6t1YNu2n2jevFeerjEaL5CRsZuKFRfeU52FwTok4yG9IUIUMQlEhChF8pOoK1NCQhQzZvTjxInd+PgE0LPnGDw9q2AwpHP06Ha+/34Ev/zyDq+99j1t2jyd7za5upandetn2Lx5Do0bd8nWHqMxA0W5gsWSinXVjJHExG9Qq8uh1da7Y9uLmgQhQhQ9CUSEKAV0Oqd8J+oCSEqKYfz41qSmJjJx4joaN+6WJf9F9+4jiI6OYP78cXz66TPo9Wl07Ph8vtvXu/fb/P33b8yd+zZarSVL8jGLxQREY7FYv1eUBNLSjuLsXIWMjOdzbbsQomyQQEQUqe2Xwoi7dH+7KrdqVbXMfXL18qp6T4m6vvjiOVJS4pkxYw9JSdEcOrQ5x2vbtBlARkYqs2a9jJ2dPa6unrnW4+JSjuDg5sB/2V5VKhUvvPAF33//OhUrVufRR58iKKgxDg7OlC9fibi4a1y5cpp//13D4cNbaNt2IP37TyA+/joGQwZarQN6fZotE2vmjrtarQPly2ddylvQGWSPxFzAtVsYlXwL7JZCiHyQQEQUuDB9GNeuZz8edykJEhOp/XUCPSoduqd7T3Xrzl/pZyhfOyHH8x38H9zdUPP7x/fy5ZMcPLiJN9/8laSkaN59tzsWS+7b1qtU6Tg6uvHlly+hUuUeiKjVGXz88Xo8PStny/bq7OxPZORlliyZglqtRadzpn79tiQk3CAsbC8eHhV58cUv6dFjJDExEcyZMzZbFtaEhGgy59GqVBm4u1dGo9HayhRkBtl9+8CpRSQhIRCse3D/3xGiJJNARBSo5QfD4EoEyZNy+kNmx9Q+V2BsU6DOPd1/IjDxHT3JZO8ZcHoxkeWBUbTqWLPM9ZjkZNOm2bi7e9OiRV9CQ3/HYnFApfoKtTr7jrEWyzkUZRQBAbU4dmwnKtVHaDQNcixnsYwiJSUeF5dy2bKoOjqCmxvo9cdITp6L0fgXMTFX8PauxttvL+GRR3phb28NKnLKFms0ZgBXUKv/y8Kq003D3j7g5vmCzyBbqRKyUkaIYiSBiLhnyw+GQVTWJZvm82bG/7sdZgzK5aqm913v1Bm57dDszdS1CfxlOAbaM1nOhHTwvq9PvB4aD3TBYRxPiCRtTwua3v9jFLrQ0N9p2bKv7Q8/gFodhFrdIMfyZjP4+z/EsWM7UKmS71juVjlle9Vqg9Hp6pGePog33lhwx0Rld8vCam8fkOX+BZVBNnNIxisAfOykN0SI4iKBiMizSFMkJ68kABB3Kupm0LEVatbMWnBQbkFI4ZvY0wP2ZQ1CpkbW5Lghgmv1s5at5Jv37ngfOx9a1YeTVxK4HnkBCCiYBheitLRE3N3zl6fjvwmjKQXfoBJEhmSEKDkkEBF3FGmKBCDBnMDx7VHo12sw/O0IuDC1T2ixBh25uq27YiKw7n/X2Bebdbgobkos1+rnfV6Jj50PCb4J5DD9pUTSap3IyMhfQGEy3dzzHseCb1AJI0MyQpQMEoiIXG2/FGbr+QBI+9HdOizSM7NEKRifuKnH2Dr0uO3Yuv8lcGokLI+Fvo0fvE/FgYGNOHBgA0OG/C/P11y7dhYAlarmXUqWXjIkI0TJIoGIyGL7pTDiYm9+c3PSqW1Oxoxia1ah6DG2Dj0WLmRas04sj4oCb+swRqv6d86uqQsO40gYNKhQsodnunZ9lffe68Dx47vyVF5RFM6e3QfoUKmKZ/fbomDnI0MyQpQkEogIm+U799mW1wLWJba5Tjp9QAwaxPh9+1j3qQtwg+O9KvBXVBQhHRJy/EMVrAuGkDCOE8a+jQEletJqvXrt8POrw88/v0m/fu8C1lUvObEeTyM+PhGVqvxdymV1L9lecyuXUxZWo/FCvu+Zm337wLVbggzJCFGCSCAiCNOHcXx71H8rXsZmBh/3tsS21GnalB43A4oeWJcHH58Skev8kWBdMNc8w0gu2lbmm0ql4s03f2X8+NYsXjwFlSoNRRmVbdWLdfO7NBQlkZCQtpw6dTTHcpnU6gxcXMrdc7bX/85lv/72LKwqVQZ6/ThMpqx5RO4lC2vmkExIiKRyF6IkUSkFtQVnIUhKSsLd3Z0j0Udwdbu3DblEzsL0YRzfezPDaWJi1iEYwbr/neTUSA9wd7cecHXLMo8kTB/G8eOgDwsu8UM0p0//y4cf9iAlJYE6dVpSv/5juLp6YjIZuXjxCAcPbiQ+PpKWLfvx1luLOXt2Hykp8bneL6fMqrm5WxbUnK4v6Myq1hUye9B4JNx12E0IUTCSk5Jp4NWAxMRE3Nzc7lhWApEy6NakY1PrLbMeLImrX4rbwv92hv1f3w7g7p4lvXxpCkaSkmL544+5bNo0m8jI/4Y67Oy0tGrVn65dX6V27RbF2MLCcyTmAr4tw2RnXSGKkAQiIkeRpkj++uvyf2nWx5aRoZeCsG8fUyNrouuURkgXP9v8kczcKtHnPUpFojOLxcKVK6dITo5Dq3XExycAV9fyxd2sQnUk5gKN+4bJ5FQhilB+AhGZI1JGZJkHEp+ZZl3kWdOmN9PLO3Kc/+aP+Nj5QBU4mw45T+8sWdRqNVWr1i3uZhSJzCEZXbBMThWiJFPfvYgo7bZfCuP45giSx7swvoZ3toRfIu+mztBR++sE4kIjrKuMbjI6JuDUYk8xtkzcKjMI8QqUeSFClHQyNPOAu3VJrgzFFKB9+5hWzh9NoIaQDt54aDxK1RDNg+xIzAV0wWGSK0SIYpSfoRnpEXlARZoiWb5pN+bjqYxdvl2CkILWtCnja3iTPN6F45sjOHklgQ7+wXgFJuDabSNHYi7c/R6iwB232yNBiBCljAQiD6Dtl8L4a8Mx9Os11qEYWRFTaLIM1RwMo4N/MCEhN7OvSjBSZPbtswYhmUMxEoQIUXrI0MwDJnNprgzFFLGbqeI1gRpadbTu05I5VGOKtM5PMFwo2ZlYSysZihGi5JFVM2VQ5tJc8/HU27KjiiIxaBDjgalrE/jLcIzy9f2oU8WDBN8EIIFr1yHaJ5J9Mn+kQEkQIkTpJ4HIAyBMb10Vo9/qxESfSzIUU4wm9vRg4juOlF9tTSOeuVoj2B/CfMM47rGRI6UgAVpJlbkaJpNvywRJVCZEKSeBSCkXaYrk+N6kW1K0y8ftkiDuVBRhvlk/pd+6Yd6RsP/KSlByZ/v2gTbAOt/GqUUkXoHW4MNKghAhSjsJRB4A5vPKzVTt0hNSEkydoWPq2nSOG7JvnBesC8ajfiQJIdZI5PhxOJ4QSdoea3p1Gbax2nczRYs2wLpRXXlPqORrPSZDMEI8WCQQKcW2XwojLjQC0yEnqFmzuJsjbjGxpwfr/neNUyNheSxZNsy7dcjGo741RTyBGwE4LnlIbLvklve0fl/JV4IPIR5ksmqmlMqycZ3smltyLVzItHZPUn+Qe57+mG6/FEZcLJgTrKttHvSVNplLnO18Im3HNB4JMvlUiFJOVs084DKDkLHLt8MMGY4p0WrWxHTIxLVHrRNW76aDfzCRVax/lBPMYRw/HsaRsGAMF3KeR1KSg5R9++58PnMfmJAQbtsLRuZ9CFGWSCBSStX+OkGW6JYGTZvS4H8nORWalm2IJjeZf4R97HwgJIxrnmHQMixbubhYSuwKnNuHV3IjK16EEBKIlDKZvSGi9Ogxtg49bg7RRNaPzNcf3mBdcK49KWG+1hU4xxMicy5QjDJ7OmR4RQhxNxKIlBKSsKyUq1kT0tM4eSUBH/+C6QHIXIFTMklPhxAibyQQKQUkYdkDoGlTQv53klN+JpZfSqJvu4KZ3CF/7IUQpZ1selcKXLsOyZM8mdjTo2TPThR31GNsHcYu3445yplIU0ntyRBCiKIlgUgJF2mKJO5UVHE3QxSkqChr7hAhhBASiJRkYfow/tp2Bv16DVP7hBZ3c0RBGDSIkFUxxIVGWCceCyFEGSeBSAmn31WOiT5nZEjmAdJjbB3r8mshhBASiJRUYfowjm+PguQkCUIeVFekV0QIISQQKYEiTZEc3x6Ffr3GOkFVPHAyJ65KMCKEKOskECmBEswJ/w3JiAfXoEEyRCOEKPMkEClhsgzJCCGEEA84SWhWgkSaIjm+N4nk8S43d9QtW3NDLBYLhy9cICYpiQpubjQMCECtLgOxclQUYXpJhy6EKJskEClhzFHOTK23EChb2VO3h4by5YoVXLt6FUwmsLOjUuXKjO7Thw716xd38wpNj7F1OLI2geOGCK7Vt+6+K4QQZUkZ+LhZOmTmDCEqyrovSRmyPTSUd779lqBLl5jr4MDucuWY6+BA0KVLvPPtt2wPfbBzqEzs6UHypLtsUyuEEA8oCURKiMwhmfE1vMvUcl2LxcKXK1bQOj2dTz09qafT4aRWU0+n41NPT1qnp/PlihVYLJbibqoQQohCIIFICZC578jUesuKuSVF7/CFC1y7epWhrq6oVaos59QqFUNcXbl29SqHL1wophYWnbjY4m6BEEIUPQlEipktjfsyY5kbkgGISUoCk4lAe/sczwfZ24PJZC33AJtab5k1p8jOfbIhnhCiTJFApJgdPw7J413K7M66FdzcwM6O80ZjtnPXTSYmxMYSnp7OnE2bmLBgAUcvXiyGVhaBQYMYe/QK+mVG2RBPCFGmSCBSAjT1PF/cTSg2DQMCqFS5MnOTk7EoCgBnDQb6R0ZS9dIlvklMxKBScTUuju+3bKH+qFG0HjeObYcPF3PLC0HTphj+dizuVgghRJGSQEQUK7Vazeg+ffjT0ZG3YmNZmJTEI1eusCc9nVaOjoRUrMiqd99l32efcW3ePJa98w6KotBlyhR+3Lq1uJsvhBDiPkkgUoyWHwyDKxHF3Yxi16F+fWYMH06ory9DoqPRq1RU8PDAtVYtPhk+HHdnZ7YcOsTRS5fo3bw5uz7+mGFduvDyrFms27evuJsvhBDiPkhCs2Ky/VIY5r3XGf/vdhhbtpKX5aRD/fos3r2bo1evMnvYMKr7+BCfksLXK1fmmORs5ssvc/76dd755Re6N2mC6rYVN0IIIUoH6REpRmk/usMgCUIAElJSWLR7NyO7d6dvq1YkpqYyfvbsXJOc7Tx2jHF9+3IqIoJdx48Xd/OFEELcIwlEisHyg2HEhUaU6Umqt1v1zz9kGI282KlTnpOcta5Th1qVK/PL9u3F3fwCFRcaYR22E0KIMkACkSKWOSQzdvl2eoytU9zNKTGuxMTg5eaGb/nyeU5yduTiRepVq8bV2AcnE9jUGTpqf51wcyM8CUaEEA8+CUSKgQzJ3Fl+k5wpN5f9Pih6tEtBv6tccTdDCCGKhAQiosgpikJ0YiLnr1/nRnw8FouFSuXLE52URGR8fJYkZ3pFIcJo5KLRSMrN/WbOGY1gZ4enqysnIiKo7CkbxgkhRGlVaKtmPvroIzZs2MCRI0fQarUkJCQUVlWlRpjeOjcEyuYfzsTUVObv2MHsTZs4FfHfsuXqFSsyuEMHtBoNP23bxvi+fXEuV44Bly5xwWgk7WaPhwro5uSEvUqFb1AQKRkZnIqI4JuXXy6mJxJCCHG/Ci0QMRgM9OvXj+bNm/PTTz8VVjWlRpg+jOPbo0ie5MnUGbribk6R23H0KL2nTSMlI4NejzzClGeeobyrK0lpaaz+5x+mLV+O2Wzms9WrOXf9OrvPnMFereZhnY5nXVyoYmfHv3o93yclEW02Uycujg9/+41alSvT/qGHivvxhBBC3KNCC0SmTJkCwLx58wqrilJHv6scU/scAB7MPWUsFguHL1wgJimJCm5uNAwIQK1Ws+v4cbpMnkzbkBDmjRpFJU9PDAYDM1au5HxkJEG+vlz47jte+OYbNh86xLw//mBMz550btiQb1av5uvwcEwZGdjZ2dG0bl3aNWrE+4sWcTIigoVvvGHLIZJb/UIIIUquEpXQTK/Xo9frbd8nPeA7rj5ItoeG8uWKFdmSj73SoweDv/ySNnXrsn7iRLT29gybNYslv/+Oo9mMPbAF+GTJErQODrb7zVq/ntV79uDt4oI9N/9HVRRuJCezcNcu0g0GnHQ6th4+zMB27XKtf3SfPnT4f3v3Hh1Vfe99/L1nJhlCMkkIJIRAIASKwSeIFIWCUUOOty6lFcXW01pALboqXjjqQrByeDwcnhSkLZV6bS1wVtriKQiCz+lFuYlPoaloEIQoEQKYGBICyUwCJJmZ/fyxJwHkGshkJ5PPa62skD17Mt/sNSv58Lt89/Dh9lwUERG5oA7138X8/HwSEhJaPtLT0+0uqc3s3An4vBF5h93127fzzMsvn7X52LQXX+RIXR2/efTRlhDyp7/+lbsDAVYDnwJ/BMYHg3iPHSPL4cBtGCQZBvsOH+aj0lICdXXENTVxyOfjw337KPnyS/7Pj37Ef/zgByzfvJm3/v73c77+My+/zPrt2+29QCIick6tCiIzZ87EMIzzfhQXX3rvg1mzZlFbW9vycfBg578PS4W/ghV/fp/Alq+Y7X3H7nLa3IWajx2vqyPF46F/cjKNjY0sf+897gReB0YbBnGGQV/gLqAJiA4G+dfYWGqCQe43DJ4wDK40Ta6Ijub++HgK+/XjodhYtuzYwaRx43A4HDy3bNkFm58FQztuRESkY2nV1MxTTz3FlClTzntOZmbmJRfjdrtxuyNrIWdNoIaGTT2YHfthRPYOaW4+Nu8szccaTZPKQIABpsnHe/fyPx9+SEwgwEOAM3TuMawAUgzEAkGgeyDACdPk+y4X1xsGpabJgIQEYkNTN27D4IGyMg4cPsw3MzP5dO9e7u/d+5zNzx4oK+PjvXsZOXhwuC+HiIi0UquCSHJyMsnJyeGqRTqh8zUf84W23bqCQQ57vXxRUUEUcGo/WX/o8wkgEWuIrjYQACAJK3QQDOIPHYNQQ7O6Og57vUS5XASCwfM3PwudKyIiHU/Y1ogcOHCAoqIiDhw4QCAQoKioiKKiIurq6sL1kmKDU5uPfZ0nNELhNwx6xcczKDWVJmDXKec0J+FuwFGsEZF4pxNCXzeYJhgGrtAxONnQrFd8PE1+P06H46yv//VzRUSk4wnbrpl///d/Z9myZS1fjxgxAoANGzaQm5sbrpftUNaXWg3MGv/SE+ZH3iJVgBGZmaT17cv8khJSnU6+CgQwgHSXix96PKQ4nRx3OBiRmcmw/v35+Ztv8nogwDWmidMw6A5EAUOxpmkMoN7pJMYw+L/BIFcAUW433UNTdkHTZKnPR1pGBum9erHtiy/I7NWLJT4fC6OjT5ueOfXcEZcxZSgiIuETthGRpUuXYprmGR9dJYRU+Cs4Uupl6Is1Ed3AbNPOnew9coTf19XxitfL501N7Pf7ec3rZdjBg3iBSq+X0spKoqOjufemm1gNPARsNU3qTJMvgZVYgeSEw8F/19dzW/fuvA3MBqri4jhumnzS0MDT1dVsjolh+t13t9x1d97kyWyOieHp6mo+aWjgWDB4xrmdrp+Iz8vO9ZVU+CvsrkREJKw6VB+RSBOojGV82kecvioicvx+40YmL1rEqCFD+N/33ss/d++moryc434/GXFxDIyNpbahgS8qKvjuvHl8+Itf8Oq0aQAsf+89/ifUR6QJqHc4iO/WjT3HjmEAX3TrRlpqKnuBx71eOHrU6g2SkcH8u+8mJTGReX/6Ez+44QYmjB1LQmwsi1au5IGyMqirO+3cTtdHZNQoZgNz19TwAZ+TczOkulLtrkpEJCwUROSSbNyxgym/+hU/GjeO3zz6KC6n87RuqYNSU3nmrrtoaGriqscfZ+f+/WROncqmefN4ddo0Fj34IP/2u99R8tVXDO7Th2fuuot/e+MNVv/jHwDcfP31/OcPf4jL6WT55s3sr6piQHIy38/JYf2OHeQ++ywZKSksmjoVgLzhw8kdNiyiOqvOTv2c/PLIDLEiIs0MswPfQ93r9ZKQkEBRVRGeeI/d5bRKhb+CTW9VM2ttQURu271uxgxM4P38fFxOJz9ftYpFK1Zg1tfjMk38hkG9w0FDIEC8aXIYaN730jsxkbT4eHy1tQT8fmr8fmoaG+kWFcUfn36adZ98wuJ33iExNpZecXGYx49jBIOcME1qAwF8J05wY3Y2b82aRZKnc70vLlpBAfmjb8GZHUtOTn+NiIhIp+Lz+rg6+Wpqa2uJv8BmAY2IhMmuL2ugstLuMsJi+759/L24mJUzZ7aEkBf+67+4IxjkIaeToYbBFr+fZX4/m4EZWItQHwMGA3trajh0yt2YB7hcXOV2U5uQgCcmhhcfeoirBw5k1htvcODQIRpD5zmBgVFR9ElKYvb3vhe5IaSwkLnxd+Ae05OJI7PsrkZEJKw677h1B7Zim7VbJnvV4YgcDfn9xo2k9ujBd0aPxu/3s2jFCu4IBnktKopRTiexhkFv02QucDfwF2ASEIf1hpsEbARK+/fnyMCB7BswgPV9+zKuoYFFK1fi9/tZvXkzP4yOxpeZyaGMDL7MyKAuM5PP+vfn9mCQX731VmR3S/XEk51tdxEiIuGnIBIOPi8zVqxn/IzInN8vO3KEIWlpLes3zPp6HnI6W7qlVoeaj/UGpgBfAbuBVOAI8DBW87Koujp6OJ0YhtHSBbW8rIzlmzdTXlbG/R4P0Q4HKS4XfV0uujkcp5338d697f/Di4hIm1IQkVYzgOalRfurqnCZJkNP6d/RaJoYWE3KmpuqH8baHQPWHiIDaPhaE7LBUVHg97O/quqc3VpPPU/dUkVEOj8FEWm19F692P3llzQ2NTEgORm/YbDbNPkiGGRNIMDGUG+QE8B6oBxYBpRhrfMoArYB7waDbDx2jBOhKZY/19dzNBCgpq6ORnVLFRHpErRYVVptUl4eP1u5kre2bOGu0aN5xOXixsZGTpznOf8d+lwB3NB8sL4e6usxsEZImld8LFy9GoDrjx7l5z178mBCQsv3UbdUEZHIohERabWh6emMGzaM/3zzTdIeeABfKIQMAp4Eor92vpOzJ95hUVE4AZOTIWR4RgYvTp3KNYMGURsM8uOqKjJLSzni93f+bqkiInIG/SZvY8UNxXD8fGMDHVcwGGRbSQl//egjtpWUnHdXypPf/S6fHjxI7bFjTBwzhvz77uNEbCy/ABqhZY2IgdU/pPkuu27girQ0AHY0NREA4gyD3G98gz49erC9tJT/WL6cASkprJw5k7TERPb5/aTu388PamvZk5HB/EceOWu31NbULyIiHYOmZtpQ803ufHN6wvzOtW13/fbtLFq5kvKyMvD7rRbpffsy/Swt0n++ahWzTrmh4eotW1izdStNoQWsDqAn1t1zT+2WF4U1OvJ5eflp3y/ONPnHnj00hp572Odjw5Yt/HnLFqJjYugRHc3Rxka+PHGCgefov9ea+kVEpOPQiEgbOlJNp7zJ3frt23nm5ZcZXFrKkm7deL9HD5Z068bg0lKeefll1m/f3nLuz1et4mdLl9IUDHIVsMHppC/WTpnmiHAF4MMaCWl+g2VgjYqMx+onApAU+nwNcC/Wlt5Jp5x/L+A4fpx+pklPh4PGpia+sX//GTW1pn4REelYFES6uGAwyKKVK7n++HEW9uzJMLeb7g4Hw9xuFvbsyfXHj7No5UqCwWBL87KE0KjEq1FRXOdw4AdGhL6fB8gDpgKbsaZm3MBCrNERJ9aUDUBh6PNfgJeAO4H3gCysnTUvho590dTEg6E78F4dHX1aTa2pX0REOh4FkS7u4717W5qHOU7pBQKc0TysuXlZI9AdGONw8IdQ87LmVTFLsBasPgikY42KeIABWPOARcBxrGmaQ1ihxI+1wHUqVlj5X1iLVz8OHYsH9jRajd7/fOzYaTW1pn4REel4FES6uMNe70U3D2tuXmZycmfMftPExcnFqMOABqyRkOZ2Y06shmYurMASxHrjVWEFEkJfXxk6p7l7SCVWKIkCSkOBxxsMnlZTa+rvFAoKyO+Rgfu24yQ6E+2uRkQk7BREurhe8fHgcl1U87Dm5mVOTo6ADDCMlhENgP+HNRVjcnINSFPo301ADFYwCQLJ0HJDuyCwi5OBBiAN+DT0vH5OJwCJDsdpNbWm/s5g9o57cI7pw8TcUbrjroh0CQoiXdyIzEzS+vZlic9H8Gs7Ulqah/Xty4jMTO69/nqM2FhisILInwMBfhAKCCmh58zCmoYJhM6Jwlq4uj10bDTWaEkT1l15G7CCySHgN6HHtmONjIwIHfMCfVzWBq/vx8WdVlNr6u8sknraXYGISPtREOniHA4H0+++m80xMTxdXc0nDQ0cCwbP2jzM5XIxfeJEqkNrMZ7w+zkBTAA+wQoRh7BubLcfmI01UtIEPBd6fBknp2y2hj4Hgf5AATAm9NxRwCPAKmBQVBR/rK8n3jDYeOLEaTW1pn4REel41EdEyBs+nPmPPMKilSt5oKwM6uqsPhwZGcz/Wh+OpyZMAODZZcvYEwzSv6mJWIeD44ARDGJijY6kAjVYoyBgrfcAK4w0a36sV+jcBuBPoWOfYy1sjY6J4UAggM80SY2JoeQsNbWmfhER6VgURASw/pjnDhvGx3v3ctjrpVd8fMt0xraSktOOPTVhAlNvvpm+DzxAzYkTDB86lDU//SnRLhc97ruPE42NVDocrJoxg9+tW8fb//xny+sse+wx3vrwQ1Zu2dJyrLF7d956/HF+tHgxNfX1RDmd3HDttSyYNIkpv/41H+zaxZC0NP7w9NOMyMw86+jGuervVCMhBQV0//EtWHuSRES6BsM0z9GqsgPwer0kJCRQVFWEJ95jdzkXtGJbMUNn7GD8jCvtLqVNXKhbaU1dHVc/8QT7q6pwGAbXDR3KiEGDeONvf6O+oeGC3z+KkztkmmX378/OAwcYkJzM/qoqAPKGDePduXM7V6hopbULdrH78UTol87EkVl2lyMicll8Xh9XJ19NbW0t8RfYLBC5v9nlslxMt9LEuDhK33iD5U8/zZC+fdm8axcvrl17USEEToYQF9aCVYCdBw4AsL+qipyhQ9n6wgusmzcvokMIQGH1IJKGK4SISNcT2b/d5ZK0tlvp92+4gd0vv0xg9Wr2v/EG+15/nbTYWO7Halg23TBY53RS43CQBzwAfAh85nLhi4qiye2mITqa+4HU2FgWTJ6MYRi8/dxzjL7iCtuug4iIhJ+CiJzhUruVOhwO+icn88Hu3RjHj/OvTicngOucTvJcLnY4HBwGHsIKKH2AuNBIh9MweNjlwnn8ON5jxzBNk8ra2vb4cUVExEYKInKGy+1W2tyBNSsUYprv8lJpmhhYHVQB/F9bnnSlYeAyTcqPHgU4IwRFpMJC5q6pwfN8NWl97C5GRKT9KYjIGS63W2lzB9Yy0yQR2BYKHCmGgYnVQRXA9bWgscs08RsGJxobiXK56NOjR9v8QB3Y2o1xuO+JIuf2YWS5tT5ERLoeBZE2Vlg9yO4SLtvlditt7sD622CQSQ4HvwsEaDBNxjgc9AJex3rjxZ2yADVgmvwmEIDu3fnnnj1MHDsWT/cuso3VE6927iLSZSmItKHsbPA8X83cNTVQWHjB8zuqy+1W2tyB9R2Hg7JgkMPAIr+fD4NBooDVwAKgMBjEFwzyj0CAh5uaWOtwkDtyJHu++oqffPvb7fcDi4iIbdTQrA1lubNIvD2RDxIOwBufw6hRdpd0yS63W2lzB9ZFK1YQ6/MxMxikh2kS6/Ew9ooreO+zz3i3vh5XaDrGiIvju2PGULBxI9/LySHnysjoxXI+Lb1DRES6MAWRNmYNsR+wu4w2cbndSp+aMIEnxo/n95s28cs1a9i+bx952dlMu/12coYO5c0PPqC0shJ/IMAXFRUsWbeOW0aMYNn06RgRvlC1OYQkDU8nL0NrQ0Sk61IQkfNyOByMHDz4kp/vcrmY/C//wqS8PF7/61/51dq15D33HMkJCSTFxVF77BgVR48ysHdvfjZpEk985zu4nM4Lf+NI0E8hREREQUTahWEYPHzbbTx0661s3LGD9z/9FO+xY8TFxDB6yBBuHTECZxcJIJqSERE5SUEkTObG38Fsu4vogAzDYNxVVzHuqqvsLsUeBQXsnHALycP7aDRERATtmgmLnJz+uO8IkL+nEgoK7C5HOpqUFK7sl2h3FSIiHYJGRMIg1ZVKzs2wyVdtdynSgVhTMnk4+znVN0REJERBRKQdzF1Tg1u7ZEREzqAgEkbOlHrWln+T8XYXIvYpLGRuxRDcdwTIuXmYRkJERL5Ga0TCJNWVCp54dj+eyOxnGuwuR+zkiSc7L0UhRETkLBREwmjiyCyyb0sn+rrjnbrlu1yi5tGQG4/aXYmISIelINIO3HcEWLsxzu4ypD0VFJDfIyM0JTNEd9YVETkHrREJsyx3FuVDYffjDRQ+08Dc+W67S5IwO7k7pg8TRyqAiIicj4JIO8jLyKK4D2zb0mR3KdIOCqsHMWB4d+2OERG5CJqaaUfuG4+ydsEuu8uQcCoooPuPa+2uQkSk01AQaSdZ7iyShqZoF00EW7tgFwsm5uEco/btIiIXS1Mz7SgvI4v1gI9jdpcibUwNy0RELo1GRGzgeb5aUzSRoqCA/D2V1u6Y24cphIiItJJGRNpZ86jI7sehaE0Ns7+TaHdJcom0O0ZE5PJpRMQGeRlWozPdobfzmv1MA7tDUzEKISIil05BxCZZ7iwmfvsGnNmxrC3/pt3lyMUqLCR/TyWe/Dqyb9N6EBGRy6WpGbt54inKStON8ToBayqmH86EWHJy+uveMSIibUAjIjbLGZ6oKZpOoHkqhn7pTMwdpRAiItJGNCJis1RXKhO/ncqKbcUsSM9j6IJdjJ9xpd1lCdaW3Gae54+RfVu67hkjItLGFEQ6iIkjs1jf09pNo3vS2KyggPzRt+C+w0l2XgoAic5BGgUREQkDBZEOpPmeNDujK8nfU8uso6UwapTdZXUpLVtyE2KZmKtrLyISbloj0sFkubPIuXkIzuxYFlzVT43P2tFpW3IVQkRE2oVGRDqgVFcqE3OtdSOaqgmjwkLWbowDoCgrDU9+gOw8rQMREWlPCiId2MSRWRRnw04OMndNd2anfm49oOmaS1dYaH3+/HPyR9+C82knpKTgxtrBpHUgIiLtS0Gkg8tyZ5F4eyIfJBxgwfFBBMrdsKeSWf/4G9x3n93ldS6hRajOQU64ZhDOlBR1RRURsZmCSCfQPFXTbMXGQm31vUhrF+yisHoQAJ7ndV8YEZGORkGkE5qYO4r1paesHxn2J+sBjZBYQo3hZu+4B8/ziQwY3h2AtD7dtf5DRKSDCVsQKS0tZe7cuaxfv56KigrS0tK47777+OlPf0p0dHS4XrbLaNnqm+BlAROgtpaGNTXWOpKuuoaksJC5FUNwT8yDhAQ8+Mkeo8WnIiIdWdiCSHFxMcFgkNdee43Bgwezc+dOpk6dSn19PQsXLgzXy3YpWe4ssnKtf1f4K/gg+nPyv8jAH+oI2iVCSUEBc+PvAMA1NAP39VHk5AzTolMRkU7CME3TbK8Xe+GFF3jllVfYu3fvRZ3v9XpJSEigqKoIT7wnzNVFhuKGYgB2bvFCbS1DX6wBYHzaR51/6qag4Iw7Fe9+PBESEsgeEw+g0Q8RkQ7A5/VxdfLV1NbWEh8ff95z23WNSG1tLUlJSed8vKGhgYaGhpavvV5ve5QVUZr/EGflYvUhWZAOwO4vEzv14tbmjqckJIDn5Js6qac1TSUiIp1TuwWRkpISFi9efN5pmfz8fJ5//vn2Kininbo7pPk+Njv3VJ713OxVhztMSFm7YBc7J/Q67Zgz1PFUoUNEJLK0empm5syZzJ8//7zn7N69m6ysk38wysrKuPHGG8nNzeW3v/3tOZ93thGR9PR0Tc20kQp/xVmP7/qyhiPbD+Kb05NRPb+44PcZn1t38WtPTuleelGnVw/C83w1ScPTubJf4mmPad2HiEjn0JqpmVYHkaqqKqqrq897TmZmZsvOmPLycnJzc/nWt77F0qVLcTgu/vY2WiPSfoobitm58yJO9FlrT2asWA9Dhpz/3ObupYOs7qUXKztbaz1ERDqzsAaR1igrK2PcuHGMHDmSgoICnE5nq56vINIxrdhWDJVnn+I5g7qXioh0OR1isWpZWRm5ubkMGDCAhQsXUlVV1fJYaqqG2DszK1goXIiIyOULWxB59913KSkpoaSkhH79+p32WDvuGBYREZEO7OIXbLTSlClTME3zrB8iIiIiEMYgIiIiInIhCiIiIiJiGwURERERsY2CiIiIiNhGQURERERsoyAiIiIitlEQEREREdsoiIiIiIhtFERERETENgoiIiIiYhsFEREREbGNgoiIiIjYRkFEREREbKMgIiIiIrZREBERERHbKIiIiIiIbRRERERExDYKIiIiImIbBRERERGxjYKIiIiI2EZBRERERGyjICIiIiK2URARERER27jsLuB8TNMEoM5XZ3MlIiIicrGa/243/x0/nw4dRHw+HwA5mTk2VyIiIiKt5fP5SEhIOO85hnkxccUmwWCQ8vJyPB4PhmHYXU6b8Hq9pKenc/DgQeLj4+0up0vQNW9/uubtS9e7/eman59pmvh8PtLS0nA4zr8KpEOPiDgcDvr162d3GWERHx+vN2870zVvf7rm7UvXu/3pmp/bhUZCmmmxqoiIiNhGQURERERsoyDSztxuN3PmzMHtdttdSpeha97+dM3bl653+9M1bzsderGqiIiIRDaNiIiIiIhtFERERETENgoiIiIiYhsFEREREbGNgoiIiIjYRkHEJqWlpTz44IMMHDiQmJgYBg0axJw5c2hsbLS7tIg2b948xo4dS/fu3UlMTLS7nIj00ksvkZGRQbdu3Rg9ejSFhYV2lxTR3n//fcaPH09aWhqGYbB69Wq7S4po+fn5XHvttXg8HlJSUrjzzjv57LPP7C6rU1MQsUlxcTHBYJDXXnuNTz/9lF/+8pe8+uqrPPvss3aXFtEaGxu55557+MlPfmJ3KRHpzTff5Mknn2TOnDl89NFHDB8+nFtvvZXKykq7S4tY9fX1DB8+nJdeesnuUrqETZs2MW3aNLZu3cq7775LU1MTt9xyC/X19XaX1mmpj0gH8sILL/DKK6+wd+9eu0uJeEuXLmX69OnU1NTYXUpEGT16NNdeey2//vWvAevGlenp6Tz22GPMnDnT5uoin2EYrFq1ijvvvNPuUrqMqqoqUlJS2LRpEzfccIPd5XRKGhHpQGpra0lKSrK7DJFL0tjYyLZt27jppptajjkcDm666Sa2bNliY2Ui4VNbWwug392XQUGkgygpKWHx4sU8/PDDdpcickkOHz5MIBCgd+/epx3v3bs3FRUVNlUlEj7BYJDp06dz3XXXkZ2dbXc5nZaCSBubOXMmhmGc96O4uPi055SVlXHbbbdxzz33MHXqVJsq77wu5ZqLiFyuadOmsXPnTpYvX253KZ2ay+4CIs1TTz3FlClTzntOZmZmy7/Ly8sZN24cY8eO5fXXXw9zdZGptddcwqNXr144nU4OHTp02vFDhw6RmppqU1Ui4fHoo4/yzjvv8P7779OvXz+7y+nUFETaWHJyMsnJyRd1bllZGePGjWPkyJEsWbIEh0MDVJeiNddcwic6OpqRI0eybt26lsWSwWCQdevW8eijj9pbnEgbMU2Txx57jFWrVrFx40YGDhxod0mdnoKITcrKysjNzWXAgAEsXLiQqqqqlsf0v8fwOXDgAEeOHOHAgQMEAgGKiooAGDx4MHFxcfYWFwGefPJJJk+ezDXXXMOoUaNYtGgR9fX13H///XaXFrHq6uooKSlp+Xrfvn0UFRWRlJRE//79bawsMk2bNo0//OEPvP3223g8npb1TwkJCcTExNhcXSdlii2WLFliAmf9kPCZPHnyWa/5hg0b7C4tYixevNjs37+/GR0dbY4aNcrcunWr3SVFtA0bNpz1PT158mS7S4tI5/q9vWTJErtL67TUR0RERERso0UJIiIiYhsFEREREbGNgoiIiIjYRkFEREREbKMgIiIiIrZREBERERHbKIiIiIiIbRRERERExDYKIiIiImIbBRERERGxjYKIiIiI2Ob/A8nPQQgYFBh5AAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -510,7 +524,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 31, "id": "45dbacb1-08ba-4e54-94ff-f2347b339a96", "metadata": {}, "outputs": [ @@ -533,17 +547,17 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 32, "id": "270cffdb-b14d-4517-ad2d-f85415baeb40", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 14, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, @@ -805,7 +819,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 34, "id": "d623920b-103a-4f7f-8a04-6ca5c89ad5bd", "metadata": {}, "outputs": [ @@ -829,7 +843,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 35, "id": "b3177642-a4d1-4547-a747-9b28345800c1", "metadata": { "scrolled": true @@ -838,10 +852,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, @@ -1444,7 +1458,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.2" + "version": "3.12.10" } }, "nbformat": 4, diff --git a/PythonAI/JupyterLab/PythonAI_5.ipynb b/PythonAI/JupyterLab/PythonAI_5.ipynb new file mode 100644 index 0000000..8e9a011 --- /dev/null +++ b/PythonAI/JupyterLab/PythonAI_5.ipynb @@ -0,0 +1,2717 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "59d5afb6-e57f-4564-8063-67fa904796da", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Dzień 5 - 19.05.2025" + ] + }, + { + "cell_type": "markdown", + "id": "2573407e-45c3-42fe-a17d-9e0b0a78eea8", + "metadata": {}, + "source": [ + "## Deep Learning\n", + "uczenie płytkie - proste algorytmy, ręczne inżynierowanie cech\n", + "uczenie głębokie - używa sieci neuronowych, automatycznie uczy się cech danych" + ] + }, + { + "cell_type": "markdown", + "id": "22dc1546-9abc-4d18-affa-4954cf2999e9", + "metadata": {}, + "source": [ + "h2o.ai\n", + "AutoML - automated machine learning - wyszukuje jaki model będzie najlepszy na bazie danych wejściowych" + ] + }, + { + "cell_type": "markdown", + "id": "16b94743-d23e-4a7d-97c7-0966aa711c5f", + "metadata": {}, + "source": [ + "## Sztuczne sieci neuronowe\n", + "### definicje\n", + "neurony - przekazują i przetwarzają sygnały\n", + "warstwy - neurony są zorganizowane w warstwy\n", + "połączenia - neurony połączone są z wagami i z biasem\n", + "### uczenie\n", + "1. forward propagation - dane przechodzą przez sieć i siec daje błąd\n", + "2. obliczenie błędu\n", + "3. back propagation - błąd jest propagowany wstecz i są zmieniane wagi i bias" + ] + }, + { + "cell_type": "markdown", + "id": "bc61d27e-0b86-496b-8c14-d5c3be316f73", + "metadata": {}, + "source": [ + "## Popularne funkcje aktywacji\n", + " - sigmoid - wartości 0-1 binarne\n", + " - softmax - wartości 0-1 ułamkowe, ale wszystkie wyjścia sumują się do 1 - jest to podział prawdopodobieństwa\n", + " - ReLU - zachowuje wartości dodatnie, zeruje ujemne. Dla dodatnich jest liniowa\n", + " - tanh - podobna do sigmoid, ale wartości od -1 do 1" + ] + }, + { + "cell_type": "markdown", + "id": "7a85c9ef-9dbf-4e71-a62a-3415ded9b7c4", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## metoda dropout (Hangout) - wyłączanie najsłabszych neuronów\n" + ] + }, + { + "cell_type": "markdown", + "id": "9d98ba73-f954-4a6a-ac09-3a6b1afa58ce", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Kod" + ] + }, + { + "cell_type": "markdown", + "id": "11ee196e-06a8-47a4-a411-aa7dd06faaf8", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Setup i wczytanie danych" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "ed806007-30fb-4048-8fa5-f31c7eed433a", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from tensorflow import keras" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "id": "4b4881e2-fdaf-4ccc-b68e-15ec7391146e", + "metadata": {}, + "outputs": [], + "source": [ + "# Wczytaj dane\n", + "mnist = keras.datasets.mnist\n", + "(X_train, Y_train),(X_test, Y_test) = mnist.load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "455c540d-bad5-4a66-9b13-35113ae41f3d", + "metadata": {}, + "outputs": [], + "source": [ + "# Parametry modelu\n", + "EPOCHS = 25\n", + "BATCH_SIZE = 64\n", + "VERBOSE = 1\n", + "NB_CLASSES = 10\n", + "N_HIDDEN = 256\n", + "VALIDATION_SPLIT = 0.2\n" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "beee8e5a-348e-45d1-9a40-79976aed712f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape before: (60000, 28, 28)\n", + "Shape after: (60000, 784)\n" + ] + } + ], + "source": [ + "# modyfikacja danych wejściowych\n", + "\n", + "# normalizacja\n", + "print(f\"Shape before: {X_train.shape}\")\n", + "RESHAPED = 28*28\n", + "X_train = X_train.reshape(60000,RESHAPED)\n", + "X_test = X_test.reshape(10000,RESHAPED)\n", + "print(f\"Shape after: {X_train.shape}\")\n", + "\n", + "# normalizacja\n", + "X_train = X_train.astype('float32') / 255.0\n", + "X_test = X_test.astype('float32') / 255.0\n", + "\n", + "# konwersja do binarnych 0-1\n", + "X_train = np.where(X_train > 0.5, 1, 0)\n", + "X_test = np.where(X_test > 0.5, 1, 0)\n", + "\n", + "# One-hot encoding for labels\n", + "Y_train = keras.utils.to_categorical(Y_train, NB_CLASSES)\n", + "Y_test = keras.utils.to_categorical(Y_test, NB_CLASSES)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "37735925-efe6-4540-97a3-c0c130274fae", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Model" + ] + }, + { + "cell_type": "markdown", + "id": "0de3a87d-7b86-49c0-a44d-35a546149cf2", + "metadata": {}, + "source": [ + "### Stwórz\n" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "4ec7f823-09ee-4b22-a2f6-f3f74853211e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_15\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_15\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ input_layer (Dense)             │ (None, 256)            │       200,960 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_layer_1 (Dropout)       │ (None, 256)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ hidden_layer_1 (Dense)          │ (None, 256)            │        65,792 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_layer_2 (Dropout)       │ (None, 256)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ hidden_layer_2 (Dense)          │ (None, 256)            │        65,792 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_layer_3 (Dropout)       │ (None, 256)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ output_layer (Dense)            │ (None, 10)             │         2,570 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ input_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m200,960\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_layer_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ hidden_layer_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m65,792\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_layer_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ hidden_layer_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m65,792\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_layer_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ output_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m2,570\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 335,114 (1.28 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m335,114\u001b[0m (1.28 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 335,114 (1.28 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m335,114\u001b[0m (1.28 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Model\n", + "\n", + "from tensorflow.keras.layers import Dense\n", + "\n", + "model = keras.models.Sequential()\n", + "model.add(Dense(N_HIDDEN,input_shape=(RESHAPED,),\n", + " activation='relu',\n", + " name='input_layer'))\n", + "# warstwa Dropout\n", + "model.add(keras.layers.Dropout(0.3, name=\"dropout_layer_1\"))\n", + "model.add(Dense(N_HIDDEN, \n", + " activation='relu',\n", + " name=\"hidden_layer_1\"))\n", + "# warstwa Dropout\n", + "model.add(keras.layers.Dropout(0.3, name=\"dropout_layer_2\"))\n", + "model.add(Dense(N_HIDDEN, \n", + " activation='relu',\n", + " name=\"hidden_layer_2\"))\n", + "# warstwa Dropout\n", + "model.add(keras.layers.Dropout(0.3, name=\"dropout_layer_3\"))\n", + "model.add(Dense(NB_CLASSES,\n", + " activation='softmax',\n", + " name='output_layer'))\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "6d0dbbe5-7eac-4917-aff1-6f127ab46dfb", + "metadata": {}, + "outputs": [], + "source": [ + "# Compile the model\n", + "model.compile(loss='categorical_crossentropy',\n", + " optimizer='adam',\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "markdown", + "id": "7db6f8fb-ff16-4bc4-9758-380e13f5a0fb", + "metadata": {}, + "source": [ + "### Trenuj\n" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "30ce3fe1-2cc6-4dad-8b71-c04763d525fa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 8ms/step - accuracy: 0.7797 - loss: 0.6840 - val_accuracy: 0.9529 - val_loss: 0.1505\n", + "Epoch 2/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9466 - loss: 0.1820 - val_accuracy: 0.9659 - val_loss: 0.1156\n", + "Epoch 3/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9579 - loss: 0.1361 - val_accuracy: 0.9683 - val_loss: 0.1057\n", + "Epoch 4/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9674 - loss: 0.1131 - val_accuracy: 0.9681 - val_loss: 0.1111\n", + "Epoch 5/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9706 - loss: 0.0968 - val_accuracy: 0.9723 - val_loss: 0.0927\n", + "Epoch 6/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9751 - loss: 0.0820 - val_accuracy: 0.9718 - val_loss: 0.0968\n", + "Epoch 7/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9772 - loss: 0.0747 - val_accuracy: 0.9715 - val_loss: 0.1028\n", + "Epoch 8/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9773 - loss: 0.0707 - val_accuracy: 0.9731 - val_loss: 0.0950\n", + "Epoch 9/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9801 - loss: 0.0605 - val_accuracy: 0.9747 - val_loss: 0.0953\n", + "Epoch 10/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9813 - loss: 0.0599 - val_accuracy: 0.9731 - val_loss: 0.0968\n", + "Epoch 11/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9836 - loss: 0.0521 - val_accuracy: 0.9738 - val_loss: 0.1034\n", + "Epoch 12/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9853 - loss: 0.0463 - val_accuracy: 0.9758 - val_loss: 0.0912\n", + "Epoch 13/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9847 - loss: 0.0494 - val_accuracy: 0.9744 - val_loss: 0.1016\n", + "Epoch 14/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9859 - loss: 0.0459 - val_accuracy: 0.9751 - val_loss: 0.1031\n", + "Epoch 15/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 8ms/step - accuracy: 0.9854 - loss: 0.0456 - val_accuracy: 0.9742 - val_loss: 0.1089\n", + "Epoch 16/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9874 - loss: 0.0435 - val_accuracy: 0.9772 - val_loss: 0.0990\n", + "Epoch 17/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9877 - loss: 0.0401 - val_accuracy: 0.9752 - val_loss: 0.1109\n", + "Epoch 18/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9891 - loss: 0.0346 - val_accuracy: 0.9747 - val_loss: 0.1082\n", + "Epoch 19/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9882 - loss: 0.0383 - val_accuracy: 0.9775 - val_loss: 0.1048\n", + "Epoch 20/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9897 - loss: 0.0325 - val_accuracy: 0.9778 - val_loss: 0.1025\n", + "Epoch 21/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9895 - loss: 0.0346 - val_accuracy: 0.9768 - val_loss: 0.1113\n", + "Epoch 22/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9899 - loss: 0.0338 - val_accuracy: 0.9743 - val_loss: 0.1128\n", + "Epoch 23/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9907 - loss: 0.0305 - val_accuracy: 0.9769 - val_loss: 0.1209\n", + "Epoch 24/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 7ms/step - accuracy: 0.9893 - loss: 0.0349 - val_accuracy: 0.9753 - val_loss: 0.1185\n", + "Epoch 25/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9909 - loss: 0.0311 - val_accuracy: 0.9760 - val_loss: 0.1198\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Train the model\n", + "model.fit(X_train, Y_train,\n", + " batch_size=BATCH_SIZE,\n", + " epochs=EPOCHS,\n", + " verbose=VERBOSE,\n", + " validation_split=VALIDATION_SPLIT)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "da23d88f-8187-41eb-919b-c925b3330924", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9767 - loss: 0.1173\n", + "Test accuracy: 0.9783999919891357\n" + ] + } + ], + "source": [ + "# Evaluate the model\n", + "test_loss, test_accuracy = model.evaluate(X_test, Y_test, verbose=VERBOSE)\n", + "print(f\"Test accuracy: {test_accuracy}\")" + ] + }, + { + "cell_type": "markdown", + "id": "de2850e3-395b-4a3a-8c01-b9d72b08d47a", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## TensorBoard" + ] + }, + { + "cell_type": "markdown", + "id": "5c23c5b6-1e03-4e48-8590-44263c1e497d", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### TensorBoard " + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "3fa025c9-28b4-478a-bbd1-7c0168897bf9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The tensorboard extension is already loaded. To reload it, use:\n", + " %reload_ext tensorboard\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%load_ext tensorboard\n", + "%tensorboard --logdir logs\n", + "\n", + "import datetime\n", + "from tensorflow.keras.callbacks import TensorBoard" + ] + }, + { + "cell_type": "markdown", + "id": "c10d00a5-3ff4-4659-be31-ccf1067f67c3", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### Uczenie w TensorBoard" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "7e2a394f-ebb5-49bc-8772-cc2d61836fe7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 11ms/step - accuracy: 0.7710 - loss: 0.6943 - val_accuracy: 0.9523 - val_loss: 0.1543\n", + "Epoch 2/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 11ms/step - accuracy: 0.9438 - loss: 0.1872 - val_accuracy: 0.9643 - val_loss: 0.1207\n", + "Epoch 3/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 12ms/step - accuracy: 0.9583 - loss: 0.1362 - val_accuracy: 0.9667 - val_loss: 0.1165\n", + "Epoch 4/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9670 - loss: 0.1089 - val_accuracy: 0.9722 - val_loss: 0.0957\n", + "Epoch 5/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9702 - loss: 0.0975 - val_accuracy: 0.9722 - val_loss: 0.1007\n", + "Epoch 6/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9733 - loss: 0.0856 - val_accuracy: 0.9741 - val_loss: 0.0988\n", + "Epoch 7/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 10ms/step - accuracy: 0.9770 - loss: 0.0747 - val_accuracy: 0.9737 - val_loss: 0.0939\n", + "Epoch 8/25\n", + "\u001b[1m697/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9778 - loss: 0.0683" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mKeyboardInterrupt\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[45]\u001b[39m\u001b[32m, line 6\u001b[39m\n\u001b[32m 1\u001b[39m log_dir = \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mlogs/fit/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdatetime.datetime.now()\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 2\u001b[39m tensorboard_callback = TensorBoard(log_dir=log_dir,\n\u001b[32m 3\u001b[39m write_graph=\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[32m 4\u001b[39m write_images=\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[32m----> \u001b[39m\u001b[32m6\u001b[39m history = \u001b[43mmodel\u001b[49m\u001b[43m.\u001b[49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43mY_train\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 7\u001b[39m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[43m=\u001b[49m\u001b[43mEPOCHS\u001b[49m\u001b[43m,\u001b[49m\u001b[43mverbose\u001b[49m\u001b[43m=\u001b[49m\u001b[43mVERBOSE\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 8\u001b[39m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[43m=\u001b[49m\u001b[43m[\u001b[49m\u001b[43mtensorboard_callback\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 9\u001b[39m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m=\u001b[49m\u001b[43mBATCH_SIZE\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 10\u001b[39m \u001b[43m \u001b[49m\u001b[43mvalidation_split\u001b[49m\u001b[43m=\u001b[49m\u001b[43mVALIDATION_SPLIT\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/utils/traceback_utils.py:117\u001b[39m, in \u001b[36mfilter_traceback..error_handler\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 115\u001b[39m filtered_tb = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 116\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m117\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 118\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[32m 119\u001b[39m filtered_tb = _process_traceback_frames(e.__traceback__)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py:371\u001b[39m, in \u001b[36mTensorFlowTrainer.fit\u001b[39m\u001b[34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[39m\n\u001b[32m 369\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m step, iterator \u001b[38;5;129;01min\u001b[39;00m epoch_iterator:\n\u001b[32m 370\u001b[39m callbacks.on_train_batch_begin(step)\n\u001b[32m--> \u001b[39m\u001b[32m371\u001b[39m logs = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 372\u001b[39m callbacks.on_train_batch_end(step, logs)\n\u001b[32m 373\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.stop_training:\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py:219\u001b[39m, in \u001b[36mTensorFlowTrainer._make_function..function\u001b[39m\u001b[34m(iterator)\u001b[39m\n\u001b[32m 215\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mfunction\u001b[39m(iterator):\n\u001b[32m 216\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[32m 217\u001b[39m iterator, (tf.data.Iterator, tf.distribute.DistributedIterator)\n\u001b[32m 218\u001b[39m ):\n\u001b[32m--> \u001b[39m\u001b[32m219\u001b[39m opt_outputs = \u001b[43mmulti_step_on_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 220\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m opt_outputs.has_value():\n\u001b[32m 221\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/tensorflow/python/util/traceback_utils.py:150\u001b[39m, in \u001b[36mfilter_traceback..error_handler\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 148\u001b[39m filtered_tb = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 149\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m150\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 151\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[32m 152\u001b[39m filtered_tb = _process_traceback_frames(e.__traceback__)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:843\u001b[39m, in \u001b[36mFunction.__call__\u001b[39m\u001b[34m(self, *args, **kwds)\u001b[39m\n\u001b[32m 841\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m context.executing_eagerly():\n\u001b[32m 842\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m without_tracing:\n\u001b[32m--> \u001b[39m\u001b[32m843\u001b[39m \u001b[43m_frequent_tracing_detector_manager\u001b[49m\u001b[43m.\u001b[49m\u001b[43mcalled_without_tracing\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 844\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_key_for_call_stats\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 845\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 846\u001b[39m _frequent_tracing_detector_manager.called_with_tracing(\n\u001b[32m 847\u001b[39m \u001b[38;5;28mself\u001b[39m._key_for_call_stats, \u001b[38;5;28mself\u001b[39m._python_function,\n\u001b[32m 848\u001b[39m \u001b[38;5;28mself\u001b[39m._omit_frequent_tracing_warning)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:196\u001b[39m, in \u001b[36m_FrequentTracingDetectorManager.called_without_tracing\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 194\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mcalled_without_tracing\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[32m 195\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m._lock:\n\u001b[32m--> \u001b[39m\u001b[32m196\u001b[39m detector = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_get_detector\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 197\u001b[39m detector.called_without_tracing()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:189\u001b[39m, in \u001b[36m_FrequentTracingDetectorManager._get_detector\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 186\u001b[39m \u001b[38;5;28mself\u001b[39m._detectors = weakref.WeakKeyDictionary() \u001b[38;5;66;03m# GUARDED_BY(self._lock)\u001b[39;00m\n\u001b[32m 187\u001b[39m \u001b[38;5;28mself\u001b[39m._lock = threading.Lock()\n\u001b[32m--> \u001b[39m\u001b[32m189\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m_get_detector\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[32m 190\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m._detectors:\n\u001b[32m 191\u001b[39m \u001b[38;5;28mself\u001b[39m._detectors[key] = _FrequentTracingDetector()\n", + "\u001b[31mKeyboardInterrupt\u001b[39m: " + ] + } + ], + "source": [ + "log_dir = f\"logs/fit/{datetime.datetime.now()}\"\n", + "tensorboard_callback = TensorBoard(log_dir=log_dir,\n", + " write_graph=True,\n", + " write_images=True)\n", + "\n", + "history = model.fit(X_train,Y_train,\n", + " epochs=EPOCHS,verbose=VERBOSE,\n", + " callbacks=[tensorboard_callback],\n", + " batch_size=BATCH_SIZE,\n", + " validation_split=VALIDATION_SPLIT)" + ] + }, + { + "cell_type": "markdown", + "id": "01d2d551-e12b-4f6a-9924-3b710a7717d0", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Uczenie 2d" + ] + }, + { + "cell_type": "markdown", + "id": "1a22d09d-23c8-4a5a-a4cd-64f88c046f01", + "metadata": {}, + "source": [ + "### flatten" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "id": "423ecce3-974f-4cff-af9f-275d4d9204ae", + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "from tensorflow import keras" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "id": "8b4c45de-ab64-49b0-b8db-d3af9f6f8006", + "metadata": {}, + "outputs": [], + "source": [ + "mnist = keras.datasets.mnist\n", + "(X_train,Y_train),(X_test,Y_test) = mnist.load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "id": "4429b0b5-57cf-4786-b6f0-d66fe8fc417f", + "metadata": {}, + "outputs": [], + "source": [ + "EPOCHS = 25\n", + "BATCH_SIZE = 64 # 32/64/128/256/512/1\n", + "VARBOSE = 1\n", + "NB_CLASSES = 10\n", + "N_HIDDEN = 32 #128/256/512\n", + "VALIDATION_SPLIT = 0.2" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "id": "6371c25c-12fa-46a1-a7f9-82c5c5aebce4", + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X_train.astype('float32')\n", + "X_test = X_test.astype('float32')\n", + "X_train /= 255\n", + "X_test /= 255" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "id": "f051c774-53e4-4185-b575-c49201b5a243", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_20\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_20\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ input_layer (Dense)             │ (None, 28, 32)         │           928 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_18 (Dropout)            │ (None, 28, 32)         │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_layer (Dense)             │ (None, 28, 32)         │         1,056 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_19 (Dropout)            │ (None, 28, 32)         │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ flatten_9 (Flatten)             │ (None, 896)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ output_layer (Dense)            │ (None, 10)             │         8,970 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ input_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m928\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_18 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m1,056\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_19 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ flatten_9 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m896\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ output_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m8,970\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 10,954 (42.79 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m10,954\u001b[0m (42.79 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 10,954 (42.79 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m10,954\u001b[0m (42.79 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = tf.keras.models.Sequential()\n", + "\n", + "model.add(keras.layers.Dense(\n", + " N_HIDDEN,\n", + " input_shape=(28,28),\n", + " name='input_layer',\n", + " activation='relu'))\n", + "model.add(keras.layers.Dropout(0.3))\n", + "model.add(keras.layers.Dense(\n", + " N_HIDDEN,\n", + " name='dense_layer',\n", + " activation='relu'))\n", + "model.add(keras.layers.Dropout(0.3))\n", + "model.add(keras.layers.Flatten(input_shape=(28,28)))\n", + "model.add(keras.layers.Dense(\n", + " NB_CLASSES,\n", + " name='output_layer',\n", + " activation='softmax'))\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "id": "fbc19059-d592-4682-a8d7-5f8d126e211b", + "metadata": {}, + "outputs": [], + "source": [ + "model.compile(optimizer='Adam',\n", + " loss= tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "id": "6c2c7e2b-1aab-4595-8e29-4fc557db8674", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - accuracy: 0.7030 - loss: 0.9725 - val_accuracy: 0.9309 - val_loss: 0.2369\n", + "Epoch 2/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9090 - loss: 0.2997 - val_accuracy: 0.9475 - val_loss: 0.1836\n", + "Epoch 3/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9277 - loss: 0.2366 - val_accuracy: 0.9522 - val_loss: 0.1621\n", + "Epoch 4/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9356 - loss: 0.2212 - val_accuracy: 0.9546 - val_loss: 0.1534\n", + "Epoch 5/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9409 - loss: 0.1953 - val_accuracy: 0.9580 - val_loss: 0.1435\n", + "Epoch 6/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9435 - loss: 0.1839 - val_accuracy: 0.9589 - val_loss: 0.1413\n", + "Epoch 7/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9452 - loss: 0.1813 - val_accuracy: 0.9603 - val_loss: 0.1383\n", + "Epoch 8/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9481 - loss: 0.1683 - val_accuracy: 0.9633 - val_loss: 0.1301\n", + "Epoch 9/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9494 - loss: 0.1697 - val_accuracy: 0.9621 - val_loss: 0.1304\n", + "Epoch 10/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9500 - loss: 0.1654 - val_accuracy: 0.9641 - val_loss: 0.1271\n", + "Epoch 11/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9496 - loss: 0.1626 - val_accuracy: 0.9650 - val_loss: 0.1252\n", + "Epoch 12/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9483 - loss: 0.1659 - val_accuracy: 0.9657 - val_loss: 0.1227\n", + "Epoch 13/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9532 - loss: 0.1525 - val_accuracy: 0.9646 - val_loss: 0.1228\n", + "Epoch 14/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9505 - loss: 0.1539 - val_accuracy: 0.9650 - val_loss: 0.1212\n", + "Epoch 15/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9538 - loss: 0.1491 - val_accuracy: 0.9653 - val_loss: 0.1211\n", + "Epoch 16/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9536 - loss: 0.1507 - val_accuracy: 0.9656 - val_loss: 0.1238\n", + "Epoch 17/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9529 - loss: 0.1524 - val_accuracy: 0.9653 - val_loss: 0.1230\n", + "Epoch 18/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9536 - loss: 0.1475 - val_accuracy: 0.9661 - val_loss: 0.1189\n", + "Epoch 19/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9543 - loss: 0.1463 - val_accuracy: 0.9667 - val_loss: 0.1194\n", + "Epoch 20/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9561 - loss: 0.1401 - val_accuracy: 0.9656 - val_loss: 0.1222\n", + "Epoch 21/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9571 - loss: 0.1427 - val_accuracy: 0.9671 - val_loss: 0.1200\n", + "Epoch 22/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9581 - loss: 0.1390 - val_accuracy: 0.9667 - val_loss: 0.1176\n", + "Epoch 23/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9559 - loss: 0.1485 - val_accuracy: 0.9670 - val_loss: 0.1175\n", + "Epoch 24/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9570 - loss: 0.1382 - val_accuracy: 0.9677 - val_loss: 0.1158\n", + "Epoch 25/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9575 - loss: 0.1383 - val_accuracy: 0.9680 - val_loss: 0.1144\n" + ] + } + ], + "source": [ + "history = model.fit(X_train,Y_train,\n", + " batch_size=BATCH_SIZE,\n", + " epochs=EPOCHS,\n", + " verbose=VARBOSE,\n", + " validation_split=VALIDATION_SPLIT)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "id": "5fe89ecb-659b-4ffe-ab8a-bec02c0b82ad", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9628 - loss: 0.1235\n", + "Test accuracy: 0.9689000248908997\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n" + ] + } + ], + "source": [ + "test_loss, test_acc = model.evaluate(X_test, Y_test)\n", + "print('Test accuracy:', test_acc)\n", + "\n", + "predictions = model.predict(X_test)" + ] + }, + { + "cell_type": "markdown", + "id": "03529c7d-8b68-4436-adf7-7565fe4028ca", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Checkpoint " + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "id": "a975b6b5-0ddb-467f-9903-3e41777bcfd0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/25\n", + "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9570 - loss: 0.1399\n", + "Epoch 1: val_loss improved from inf to 0.11284, saving model to model_checkpoints/weights.01-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9570 - loss: 0.1399 - val_accuracy: 0.9682 - val_loss: 0.1128\n", + "Epoch 2/25\n", + "\u001b[1m745/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9580 - loss: 0.1361\n", + "Epoch 2: val_loss did not improve from 0.11284\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9579 - loss: 0.1361 - val_accuracy: 0.9674 - val_loss: 0.1138\n", + "Epoch 3/25\n", + "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9567 - loss: 0.1380\n", + "Epoch 3: val_loss improved from 0.11284 to 0.11038, saving model to model_checkpoints/weights.03-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9567 - loss: 0.1379 - val_accuracy: 0.9688 - val_loss: 0.1104\n", + "Epoch 4/25\n", + "\u001b[1m744/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9582 - loss: 0.1391\n", + "Epoch 4: val_loss did not improve from 0.11038\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9582 - loss: 0.1391 - val_accuracy: 0.9678 - val_loss: 0.1130\n", + "Epoch 5/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9569 - loss: 0.1342\n", + "Epoch 5: val_loss did not improve from 0.11038\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9569 - loss: 0.1342 - val_accuracy: 0.9683 - val_loss: 0.1119\n", + "Epoch 6/25\n", + "\u001b[1m744/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9592 - loss: 0.1327\n", + "Epoch 6: val_loss did not improve from 0.11038\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9592 - loss: 0.1328 - val_accuracy: 0.9692 - val_loss: 0.1113\n", + "Epoch 7/25\n", + "\u001b[1m745/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1303\n", + "Epoch 7: val_loss improved from 0.11038 to 0.10944, saving model to model_checkpoints/weights.07-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9600 - loss: 0.1303 - val_accuracy: 0.9694 - val_loss: 0.1094\n", + "Epoch 8/25\n", + "\u001b[1m747/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9605 - loss: 0.1293\n", + "Epoch 8: val_loss did not improve from 0.10944\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9605 - loss: 0.1293 - val_accuracy: 0.9693 - val_loss: 0.1107\n", + "Epoch 9/25\n", + "\u001b[1m742/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9605 - loss: 0.1308\n", + "Epoch 9: val_loss did not improve from 0.10944\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9604 - loss: 0.1308 - val_accuracy: 0.9691 - val_loss: 0.1095\n", + "Epoch 10/25\n", + "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9606 - loss: 0.1300\n", + "Epoch 10: val_loss did not improve from 0.10944\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9606 - loss: 0.1300 - val_accuracy: 0.9674 - val_loss: 0.1117\n", + "Epoch 11/25\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9597 - loss: 0.1289\n", + "Epoch 11: val_loss improved from 0.10944 to 0.10944, saving model to model_checkpoints/weights.11-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9597 - loss: 0.1289 - val_accuracy: 0.9693 - val_loss: 0.1094\n", + "Epoch 12/25\n", + "\u001b[1m745/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9596 - loss: 0.1292\n", + "Epoch 12: val_loss did not improve from 0.10944\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9596 - loss: 0.1292 - val_accuracy: 0.9687 - val_loss: 0.1110\n", + "Epoch 13/25\n", + "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9583 - loss: 0.1328\n", + "Epoch 13: val_loss did not improve from 0.10944\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9583 - loss: 0.1328 - val_accuracy: 0.9679 - val_loss: 0.1097\n", + "Epoch 14/25\n", + "\u001b[1m744/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9588 - loss: 0.1280\n", + "Epoch 14: val_loss did not improve from 0.10944\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9588 - loss: 0.1281 - val_accuracy: 0.9687 - val_loss: 0.1097\n", + "Epoch 15/25\n", + "\u001b[1m747/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9593 - loss: 0.1273\n", + "Epoch 15: val_loss improved from 0.10944 to 0.10772, saving model to model_checkpoints/weights.15-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9593 - loss: 0.1273 - val_accuracy: 0.9708 - val_loss: 0.1077\n", + "Epoch 16/25\n", + "\u001b[1m740/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1304\n", + "Epoch 16: val_loss improved from 0.10772 to 0.10721, saving model to model_checkpoints/weights.16-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9599 - loss: 0.1304 - val_accuracy: 0.9700 - val_loss: 0.1072\n", + "Epoch 17/25\n", + "\u001b[1m741/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1267\n", + "Epoch 17: val_loss did not improve from 0.10721\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1268 - val_accuracy: 0.9717 - val_loss: 0.1089\n", + "Epoch 18/25\n", + "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1258\n", + "Epoch 18: val_loss did not improve from 0.10721\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1258 - val_accuracy: 0.9702 - val_loss: 0.1076\n", + "Epoch 19/25\n", + "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9597 - loss: 0.1319\n", + "Epoch 19: val_loss did not improve from 0.10721\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9597 - loss: 0.1319 - val_accuracy: 0.9698 - val_loss: 0.1091\n", + "Epoch 20/25\n", + "\u001b[1m743/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9593 - loss: 0.1273\n", + "Epoch 20: val_loss improved from 0.10721 to 0.10638, saving model to model_checkpoints/weights.20-0.11.h5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9593 - loss: 0.1273 - val_accuracy: 0.9701 - val_loss: 0.1064\n", + "Epoch 21/25\n", + "\u001b[1m743/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1278\n", + "Epoch 21: val_loss did not improve from 0.10638\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1278 - val_accuracy: 0.9696 - val_loss: 0.1065\n", + "Epoch 22/25\n", + "\u001b[1m743/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9614 - loss: 0.1267\n", + "Epoch 22: val_loss did not improve from 0.10638\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9614 - loss: 0.1267 - val_accuracy: 0.9697 - val_loss: 0.1086\n", + "Epoch 23/25\n", + "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9607 - loss: 0.1275\n", + "Epoch 23: val_loss did not improve from 0.10638\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9607 - loss: 0.1275 - val_accuracy: 0.9694 - val_loss: 0.1091\n", + "Epoch 24/25\n", + "\u001b[1m747/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9604 - loss: 0.1262\n", + "Epoch 24: val_loss did not improve from 0.10638\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9604 - loss: 0.1262 - val_accuracy: 0.9702 - val_loss: 0.1091\n", + "Epoch 25/25\n", + "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9611 - loss: 0.1261\n", + "Epoch 25: val_loss did not improve from 0.10638\n", + "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9611 - loss: 0.1261 - val_accuracy: 0.9703 - val_loss: 0.1072\n" + ] + } + ], + "source": [ + "# ModelCheckpoint\n", + "from tensorflow.keras.callbacks import ModelCheckpoint\n", + "\n", + "checkpoint_path = \"model_checkpoints/weights.{epoch:02d}-{val_loss:.2f}.keras\"\n", + "checkpoint_callback = ModelCheckpoint(filepath=checkpoint_path,\n", + " monitor='val_loss',\n", + " verbose=1,\n", + " save_best_only=True,\n", + " mode='min')\n", + "\n", + "history = model.fit(X_train, Y_train,\n", + " epochs=EPOCHS,\n", + " verbose=VERBOSE,\n", + " callbacks=[checkpoint_callback],\n", + " batch_size=BATCH_SIZE,\n", + " validation_split=VALIDATION_SPLIT)\n" + ] + }, + { + "cell_type": "markdown", + "id": "a6226565-c626-4d57-bbb6-c4ed53e4a8d5", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Rysowanie i testowanie poszczególnych liczb" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "id": "e3523f08-f904-495f-b732-16ef36b7e653", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_image(i, predictions_array, true_label, img):\n", + " true_label, img = true_label[i], img[i]\n", + " plt.grid(False)\n", + " plt.xticks([])\n", + " plt.yticks([])\n", + " plt.imshow(img, cmap=plt.cm.binary)\n", + " predicted_label = np.argmax(predictions_array)\n", + " if predicted_label == true_label:\n", + " color ='blue'\n", + " else:\n", + " color ='red'\n", + " plt.xlabel(\"Pred {} Conf: {:2.0f}% True ({})\".format(predicted_label,\n", + " 100*np.max(predictions_array),\n", + " true_label),\n", + " color=color)\n", + "def plot_value_array(i, predictions_array, true_label):\n", + " true_label = true_label[i]\n", + " plt.grid(False)\n", + " plt.xticks(range(10))\n", + " plt.yticks([])\n", + " thisplot = plt.bar(range(10), predictions_array,color=\"#777777\")\n", + " plt.ylim([0, 1])\n", + " predicted_label = np.argmax(predictions_array)\n", + " thisplot[predicted_label].set_color('red')\n", + " thisplot[true_label].set_color('blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "id": "88b5e8c6-f93f-4f05-b473-54565260d309", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 100\n", + "plt.figure(figsize=(6,3))\n", + "plt.subplot(1,2,1)\n", + "plot_image(i, predictions[i], Y_test, X_test)\n", + "plt.subplot(1,2,2)\n", + "plot_value_array(i, predictions[i], Y_test)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "afe9edfc-44a9-4a25-974d-ae5ad5f8ac7a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "739bb39c-1bdf-41ee-bad1-65c558ebf9b5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10c1179a-40b3-4105-acdc-8d0e27113c00", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9a4e558b-453a-4e35-ba66-4eb39961ff34", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "2b02718a-f1c0-44a9-843c-c1186d3268ed", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Modele publiczne które warto znać" + ] + }, + { + "cell_type": "markdown", + "id": "423e279c-cd57-4266-ad6a-2d72a10d71b7", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Manus AI \n", + "manus.im\n", + "Środowisko AI służące do budowania i uruchamiania środowisk AI\n", + "Na przykład - zadajemy mu pytanie, on podejmuje wybór który model i jakie źródła danych są najlepsze, tworzy całe środowisko, uruchamia i daje odpowiedź na pytanie. Całe to środowisko następnie można pobrać i dowolnie modyfikować\n", + "## Grok AI\n", + "## ChatGPT\n", + "## DeepSeek" + ] + }, + { + "cell_type": "markdown", + "id": "9c2a5dc2-9d2a-4ea3-94a8-be869e4f43d9", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Kod" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "id": "e0ce3dea-2489-4b10-ba5e-424c890df254", + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "from tensorflow.keras.optimizers import Adam\n", + "from tensorflow.keras.losses import MeanSquaredError\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.metrics import r2_score\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "a1ddc3c3-ce65-455c-890a-00ea26bbc832", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Wczytywanie danych" + ] + }, + { + "cell_type": "markdown", + "id": "d0bb3c0a-da07-4a5d-a73b-9c0934cae1c2", + "metadata": {}, + "source": [ + "### Pobierz" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "id": "7f2a9747-3724-4292-9e1d-15e1f950c12a", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.datasets import boston_housing\n", + "(X_train, Y_train),(X_test, Y_test) = boston_housing.load_data()" + ] + }, + { + "cell_type": "markdown", + "id": "4ddb9b79-03fb-4682-9163-5a5a53bf04b8", + "metadata": {}, + "source": [ + "### Skaluj" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "id": "3f1fe9af-3bee-45a5-ab0f-14d4bb43ab0b", + "metadata": {}, + "outputs": [], + "source": [ + "scaler = StandardScaler()\n", + "X_train_scaled = scaler.fit_transform(X_train)\n", + "X_test_scaled = scaler.transform(X_test)" + ] + }, + { + "cell_type": "markdown", + "id": "2e1e1867-96f6-4efe-98d5-245cec46af8d", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Stwórz model" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "id": "9eeb9794-0c62-4bcb-9fbf-3cc1db22e321", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/sasza/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/layers/core/dense.py:87: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ], + "source": [ + "model = Sequential()\n", + "model.add(Dense(128, activation='relu', input_shape=(X_train.shape[1],)))\n", + "model.add(Dense(64, activation='relu'))\n", + "model.add(Dense(1))" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "id": "093c6721-782a-4874-9ae7-ad2101c31485", + "metadata": {}, + "outputs": [], + "source": [ + "model.compile(\n", + " optimizer=Adam(learning_rate=0.01),\n", + " loss=MeanSquaredError(),\n", + " metrics=['mae']\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "cf865570-7117-42f0-8254-d940a0eab94a", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Naucz" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "id": "004d195e-f082-4d6a-acdc-28df3bce52d1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 31ms/step - loss: 433.9581 - mae: 18.4893 - val_loss: 117.5812 - val_mae: 8.2945\n", + "Epoch 2/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 88.5552 - mae: 6.8727 - val_loss: 45.8522 - val_mae: 5.4736\n", + "Epoch 3/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 53.5171 - mae: 5.3221 - val_loss: 25.5144 - val_mae: 3.8536\n", + "Epoch 4/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 20.9328 - mae: 3.2101 - val_loss: 19.1949 - val_mae: 3.2938\n", + "Epoch 5/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 16.2139 - mae: 2.8114 - val_loss: 16.7875 - val_mae: 2.9549\n", + "Epoch 6/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 16.5900 - mae: 2.8607 - val_loss: 14.2655 - val_mae: 2.8645\n", + "Epoch 7/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - loss: 11.1120 - mae: 2.3432 - val_loss: 15.8941 - val_mae: 2.7828\n", + "Epoch 8/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 12.4062 - mae: 2.5082 - val_loss: 14.3744 - val_mae: 2.7206\n", + "Epoch 9/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 8.6999 - mae: 2.0951 - val_loss: 16.5603 - val_mae: 2.8280\n", + "Epoch 10/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - loss: 10.6882 - mae: 2.2401 - val_loss: 14.5484 - val_mae: 2.8062\n", + "Epoch 11/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 8.7652 - mae: 2.1168 - val_loss: 15.9710 - val_mae: 2.7320\n", + "Epoch 12/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 10.4021 - mae: 2.2209 - val_loss: 16.1592 - val_mae: 3.1247\n", + "Epoch 13/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step - loss: 11.4349 - mae: 2.2756 - val_loss: 18.4284 - val_mae: 2.8497\n", + "Epoch 14/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 8.7865 - mae: 2.1975 - val_loss: 15.3663 - val_mae: 2.9779\n", + "Epoch 15/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 8.5554 - mae: 2.1210 - val_loss: 19.6532 - val_mae: 3.0629\n", + "Epoch 16/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 10.0664 - mae: 2.2197 - val_loss: 17.1585 - val_mae: 2.7987\n", + "Epoch 17/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 10.2282 - mae: 2.3738 - val_loss: 22.9011 - val_mae: 3.3688\n", + "Epoch 18/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 13.8609 - mae: 2.7961 - val_loss: 21.8463 - val_mae: 3.0875\n", + "Epoch 19/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 16.7707 - mae: 3.0324 - val_loss: 18.6410 - val_mae: 3.2069\n", + "Epoch 20/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 12.3367 - mae: 2.3755 - val_loss: 24.3661 - val_mae: 3.2879\n", + "Epoch 21/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 8.9119 - mae: 2.2774 - val_loss: 16.1305 - val_mae: 3.0695\n", + "Epoch 22/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 8.5175 - mae: 2.1657 - val_loss: 19.4054 - val_mae: 2.8900\n", + "Epoch 23/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 7.4022 - mae: 2.0106 - val_loss: 16.4109 - val_mae: 2.6860\n", + "Epoch 24/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 6.6488 - mae: 1.9070 - val_loss: 13.9394 - val_mae: 2.5710\n", + "Epoch 25/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - loss: 8.4478 - mae: 1.9382 - val_loss: 14.9801 - val_mae: 2.6315\n", + "Epoch 26/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 6.7423 - mae: 1.8794 - val_loss: 13.7264 - val_mae: 2.5257\n", + "Epoch 27/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 8.4049 - mae: 2.0496 - val_loss: 13.8640 - val_mae: 2.7779\n", + "Epoch 28/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 9.3020 - mae: 2.0520 - val_loss: 15.9040 - val_mae: 2.5764\n", + "Epoch 29/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 7.6875 - mae: 2.0375 - val_loss: 13.0019 - val_mae: 2.4454\n", + "Epoch 30/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 6.8073 - mae: 1.9071 - val_loss: 14.1228 - val_mae: 2.6777\n", + "Epoch 31/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - loss: 6.6327 - mae: 1.8368 - val_loss: 13.3223 - val_mae: 2.5823\n", + "Epoch 32/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 8.2943 - mae: 2.0431 - val_loss: 13.4468 - val_mae: 2.4980\n", + "Epoch 33/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 8.4856 - mae: 1.8742 - val_loss: 11.6833 - val_mae: 2.4548\n", + "Epoch 34/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - loss: 7.3320 - mae: 1.8344 - val_loss: 13.4887 - val_mae: 2.5681\n", + "Epoch 35/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 7.4076 - mae: 1.9290 - val_loss: 12.8900 - val_mae: 2.7249\n", + "Epoch 36/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 8.9403 - mae: 2.0053 - val_loss: 11.3275 - val_mae: 2.3754\n", + "Epoch 37/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.9852 - mae: 1.7320 - val_loss: 13.9605 - val_mae: 2.4646\n", + "Epoch 38/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.5555 - mae: 1.7334 - val_loss: 11.2402 - val_mae: 2.3342\n", + "Epoch 39/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.6766 - mae: 1.6351 - val_loss: 13.2182 - val_mae: 2.5067\n", + "Epoch 40/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 6.0243 - mae: 1.7333 - val_loss: 10.7153 - val_mae: 2.3825\n", + "Epoch 41/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 5.8088 - mae: 1.6271 - val_loss: 11.9364 - val_mae: 2.4776\n", + "Epoch 42/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 5.4119 - mae: 1.7531 - val_loss: 13.0173 - val_mae: 2.4271\n", + "Epoch 43/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step - loss: 7.8454 - mae: 1.8227 - val_loss: 12.9081 - val_mae: 2.6552\n", + "Epoch 44/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 6.7705 - mae: 1.9081 - val_loss: 14.7583 - val_mae: 2.9245\n", + "Epoch 45/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 22ms/step - loss: 7.5827 - mae: 2.0380 - val_loss: 13.1053 - val_mae: 2.5901\n", + "Epoch 46/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 5.7081 - mae: 1.6853 - val_loss: 12.8988 - val_mae: 2.4437\n", + "Epoch 47/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 6.2910 - mae: 1.8111 - val_loss: 14.5246 - val_mae: 2.7474\n", + "Epoch 48/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 5.2125 - mae: 1.7195 - val_loss: 30.6900 - val_mae: 4.1277\n", + "Epoch 49/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 24.0342 - mae: 3.6991 - val_loss: 24.3995 - val_mae: 3.9990\n", + "Epoch 50/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 15.9115 - mae: 2.8875 - val_loss: 14.5218 - val_mae: 3.0977\n", + "Epoch 51/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 10.4889 - mae: 2.3489 - val_loss: 11.0483 - val_mae: 2.5508\n", + "Epoch 52/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 8.2176 - mae: 2.0835 - val_loss: 11.1425 - val_mae: 2.5365\n", + "Epoch 53/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 6.4539 - mae: 1.9117 - val_loss: 13.2539 - val_mae: 2.6485\n", + "Epoch 54/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.8317 - mae: 1.7835 - val_loss: 10.0556 - val_mae: 2.2885\n", + "Epoch 55/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 6.0714 - mae: 1.7738 - val_loss: 11.3221 - val_mae: 2.4872\n", + "Epoch 56/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 7.4216 - mae: 1.8305 - val_loss: 10.3006 - val_mae: 2.3735\n", + "Epoch 57/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 7.0539 - mae: 1.8459 - val_loss: 10.5398 - val_mae: 2.3973\n", + "Epoch 58/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 6.2669 - mae: 1.7912 - val_loss: 12.5495 - val_mae: 2.7715\n", + "Epoch 59/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 6.5678 - mae: 1.9863 - val_loss: 11.1018 - val_mae: 2.2908\n", + "Epoch 60/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.4177 - mae: 1.7153 - val_loss: 9.9706 - val_mae: 2.2454\n", + "Epoch 61/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 4.7288 - mae: 1.5695 - val_loss: 10.9810 - val_mae: 2.3551\n", + "Epoch 62/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 4.4483 - mae: 1.5186 - val_loss: 10.6617 - val_mae: 2.2474\n", + "Epoch 63/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 4.4560 - mae: 1.5384 - val_loss: 10.3425 - val_mae: 2.3241\n", + "Epoch 64/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - loss: 4.8169 - mae: 1.5290 - val_loss: 15.1452 - val_mae: 2.5667\n", + "Epoch 65/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step - loss: 15.9096 - mae: 2.6377 - val_loss: 17.4180 - val_mae: 3.3692\n", + "Epoch 66/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 10.7279 - mae: 2.5080 - val_loss: 11.3642 - val_mae: 2.4789\n", + "Epoch 67/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 6.4679 - mae: 1.8719 - val_loss: 9.7717 - val_mae: 2.2388\n", + "Epoch 68/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 5.1761 - mae: 1.6499 - val_loss: 12.7262 - val_mae: 2.7122\n", + "Epoch 69/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 5.5812 - mae: 1.6845 - val_loss: 9.4567 - val_mae: 2.3712\n", + "Epoch 70/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 5.1458 - mae: 1.6184 - val_loss: 10.7782 - val_mae: 2.3204\n", + "Epoch 71/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 5.7928 - mae: 1.7103 - val_loss: 10.1103 - val_mae: 2.3949\n", + "Epoch 72/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 4.5397 - mae: 1.5225 - val_loss: 10.0058 - val_mae: 2.2562\n", + "Epoch 73/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 4.7035 - mae: 1.5499 - val_loss: 11.2216 - val_mae: 2.4738\n", + "Epoch 74/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 9.5389 - mae: 2.2685 - val_loss: 11.7173 - val_mae: 2.5778\n", + "Epoch 75/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 10.8038 - mae: 2.3721 - val_loss: 14.9679 - val_mae: 3.1010\n", + "Epoch 76/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 8.6432 - mae: 2.3237 - val_loss: 13.6855 - val_mae: 2.6954\n", + "Epoch 77/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.7643 - mae: 1.7988 - val_loss: 10.2869 - val_mae: 2.3319\n", + "Epoch 78/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 4.5972 - mae: 1.6025 - val_loss: 10.2548 - val_mae: 2.3824\n", + "Epoch 79/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 3.8668 - mae: 1.4693 - val_loss: 12.0222 - val_mae: 2.5057\n", + "Epoch 80/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - loss: 4.3990 - mae: 1.6195 - val_loss: 9.8486 - val_mae: 2.2541\n", + "Epoch 81/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 4.3753 - mae: 1.5336 - val_loss: 11.2061 - val_mae: 2.4479\n", + "Epoch 82/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 5.2621 - mae: 1.7148 - val_loss: 11.9659 - val_mae: 2.5600\n", + "Epoch 83/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 4.8323 - mae: 1.5652 - val_loss: 13.1333 - val_mae: 2.7751\n", + "Epoch 84/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.9845 - mae: 1.7861 - val_loss: 13.7430 - val_mae: 2.6907\n", + "Epoch 85/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 4.8981 - mae: 1.5957 - val_loss: 14.8737 - val_mae: 2.5673\n", + "Epoch 86/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 6.0925 - mae: 1.8527 - val_loss: 11.3868 - val_mae: 2.4224\n", + "Epoch 87/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 4.6439 - mae: 1.5794 - val_loss: 10.9559 - val_mae: 2.3853\n", + "Epoch 88/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 3.3516 - mae: 1.3203 - val_loss: 10.0497 - val_mae: 2.2155\n", + "Epoch 89/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 4.9605 - mae: 1.5329 - val_loss: 10.0315 - val_mae: 2.2669\n", + "Epoch 90/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 4.9860 - mae: 1.6187 - val_loss: 9.4829 - val_mae: 2.2375\n", + "Epoch 91/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - loss: 4.0989 - mae: 1.4642 - val_loss: 12.6884 - val_mae: 2.5615\n", + "Epoch 92/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - loss: 4.6787 - mae: 1.5383 - val_loss: 11.4163 - val_mae: 2.3816\n", + "Epoch 93/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 4.9045 - mae: 1.6334 - val_loss: 9.7578 - val_mae: 2.2771\n", + "Epoch 94/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 4.4899 - mae: 1.5949 - val_loss: 10.5372 - val_mae: 2.4074\n", + "Epoch 95/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 4.5016 - mae: 1.6066 - val_loss: 12.7994 - val_mae: 2.5053\n", + "Epoch 96/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 4.9262 - mae: 1.6298 - val_loss: 10.8206 - val_mae: 2.3941\n", + "Epoch 97/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 5.3382 - mae: 1.6310 - val_loss: 10.4211 - val_mae: 2.3298\n", + "Epoch 98/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 3.7149 - mae: 1.4453 - val_loss: 12.7979 - val_mae: 2.4910\n", + "Epoch 99/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 5.2015 - mae: 1.7130 - val_loss: 10.1702 - val_mae: 2.3183\n", + "Epoch 100/100\n", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 3.8310 - mae: 1.4211 - val_loss: 10.5756 - val_mae: 2.2947\n" + ] + } + ], + "source": [ + "history = model.fit(\n", + " X_train_scaled, Y_train,\n", + " epochs=100,\n", + " validation_split=0.2,\n", + " verbose=1\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0a252a76-ec52-4bdb-80ca-255344530230", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Ewaluacja\n" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "id": "854aaf6f-1b64-4670-aeda-a5c828026c5f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 14.3194 - mae: 2.7127\n", + "Średni błąd absolutny (MAE): 2.86\n" + ] + } + ], + "source": [ + "loss, mae = model.evaluate(X_test_scaled, Y_test)\n", + "print(f\"Średni błąd absolutny (MAE): {mae:.2f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "id": "43089c42-4bcf-4954-8cf1-3dfa3296326c", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:5 out of the last 318 calls to .one_step_on_data_distributed at 0x70c842a3e660> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:5 out of the last 318 calls to .one_step_on_data_distributed at 0x70c842a3e660> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m1/4\u001b[0m \u001b[32m━━━━━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━\u001b[0m \u001b[1m0s\u001b[0m 98ms/stepWARNING:tensorflow:6 out of the last 321 calls to .one_step_on_data_distributed at 0x70c842a3e660> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:6 out of the last 321 calls to .one_step_on_data_distributed at 0x70c842a3e660> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n", + "R²: 0.80\n" + ] + } + ], + "source": [ + "Y_pred = model.predict(X_test_scaled)\n", + "r2 = r2_score(Y_test, Y_pred)\n", + "print(f\"R²: {r2:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "93a9f39d-5241-404c-91fd-12b888d0d25e", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Narysuk wykresy" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "id": "e7952801-3790-4930-944e-5745f366d98d", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + }, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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p3LceOON/PzzzzzwwANceOGFBAcHY7fb6d+/f6XX6GzK/Oyzz/LYY48xevRonn76aSIiIvDy8uKee+6p8vtwqvPW5DWsquq+zxWd2AeqnM1mq5GyyZ+bwo6IG0RERDBq1ChGjRpFbm4uvXr14oknnnCEnVP9oW/YsCELFy4kJyfHqXbnt99+c+w/G5988gkjRozgX//6l2NbYWGh0+ikUzlVWU+nadOmLFy4kO7du1c5kJ1Jw4YN2b59+0nbK7s2PXv25Pnnn2fhwoVERUXRqlUrLBYLbdq0YdmyZSxbtoyrrrrKcfyxY8dYtGgRTz75JJMnT3ZsP5umyNP55JNPuOyyy/jf//7ntD0zM5OoqKgaPdeJyq/P9u3bufzyy532bd++3bG//N/KXvuJ1/9c3ufymrATfwdPrL0UORtqxhJxsROHKgcHB9OsWTOKiooc24KCgoCT/9APHDgQm83Gv//9b6ftL7/8MhaLhQEDBpxVmaxW60nf8F9//fUqfYsuH11VlWBU7sYbb8Rms/H000+ftK+0tLRaz1Vu4MCBrF69mhUrVji25eXlMX36dBo1auTUn6Rnz54UFRXxyiuv0KNHD0dg69mzJx988AEHDx506q9TXity4jV65ZVXql3O06nsfZgzZ06lQ79rWufOnYmJieGtt95y+l389ttv2bZtm2OUWv369bnwwgt57733nJrWFixY4OgXVe5c3uemTZsCOI2cs9lsTJ8+/axen0hFqtkRcbGkpCR69+5Np06diIiIYO3atXzyySeMHz/ecUynTp0AmDBhAv369cNqtXLzzTczePBgLrvsMh555BH27NlDhw4d+P777/nyyy+55557HB8Q1XXVVVfxwQcfEBoaSlJSEitWrGDhwoVERkae8bEBAQEkJSXx0Ucf0aJFCyIiImjbtu1pl8249NJLueOOO5gyZQobNmzgyiuvxMfHhx07djBnzhxeffVVrr/++mq9hocffpgPP/yQAQMGMGHCBCIiInjvvffYvXs3n376qVNTWnJyMt7e3mzfvp3bb7/dsb1Xr15MmzYNwCnshISE0KtXL6ZOnUpJSQkXXHAB33//Pbt3765WGc/kqquu4qmnnmLUqFFccsklbNq0iZkzZ9KkSZMaPU9lfHx8eP755xk1ahSXXnopQ4cOdQw9b9SoEffee6/j2ClTpjBo0CB69OjB6NGjycjI4PXXX6dNmzaOeYng3N7nNm3acPHFFzNp0iQyMjKIiIhg9uzZlJaWuvxayJ+AB0eCidR65cNh16xZU+n+Sy+99IxDz//5z38aXbt2NcLCwoyAgACjVatWxjPPPGMUFxc7jiktLTXuvvtuIzo62rBYLE7D0HNycox7773XiI+PN3x8fIzmzZsbL7zwgmG3253OCxjjxo2rtJycMFT82LFjxqhRo4yoqCgjODjY6Nevn/Hbb7+dVPZT+fnnn41OnToZvr6+Ts89YsQIIygo6JSPmz59utGpUycjICDAqFevntGuXTvjwQcfNA4ePOh0/Sobqn/iUGXDMIxdu3YZ119/vREWFmb4+/sbXbt2NebOnVvpubt06WIAxqpVqxzb9u/fbwBGQkLCScfv37/fuPbaa42wsDAjNDTUuOGGG4yDBw+edC3Lh54fPnzY6fGVDaWubOj5fffdZ9SvX98ICAgwunfvbqxYsaLS11qZyt7z3bt3G4DxwgsvOG0vH8I9Z84cp+0fffSR0bFjR8PPz8+IiIgwhg0bZuzfv/+kc3366adG69atDT8/PyMpKcn47LPPjBEjRjgNPS9Xlff5VO9n3759DT8/PyM2Ntb4xz/+YSxYsEBDz+WcWQzDhb3VRERERDxMfXZERESkTlPYERERkTpNYUdERETqNI+GnWnTptG+fXtCQkIICQkhOTnZafr73r17O60CbbFYTpqSPSUlhUGDBhEYGEhMTAwPPPCAeu+LiIiIg0eHnjdo0IDnnnuO5s2bYxgG7733HldffTW//PKLY2Xj2267jaeeesrxmIqrMdtsNgYNGkRcXBw///wzhw4dYvjw4fj4+PDss8+6/fWIiIhI7VPrRmNFRETwwgsvMGbMGHr37s2FF154yom8vv32W6666ioOHjxIbGwsAG+99RYPPfQQhw8fxtfX140lFxERkdqo1kwqaLPZmDNnDnl5eSQnJzu2z5w5k//7v/8jLi6OwYMH89hjjzlqd1asWEG7du0cQQegX79+jB07li1bttCxY8dKz1VUVOQ0Y6jdbicjI4PIyMizmgpfRERE3M8wDHJycoiPjz9pTb6KPB52Nm3aRHJyMoWFhQQHB/P55587pnn/61//SsOGDYmPj2fjxo089NBDbN++nc8++wyA1NRUp6ADOO6npqae8pxTpkzhySefdNErEhEREXfat28fDRo0OOV+j4edli1bsmHDBrKyshyLEy5dupSkpCSnad3btWtH/fr16dOnD7t27TrrafIBJk2axMSJEx33s7KySExMZN++fYSEhJzT6xERERH3yM7OJiEhwWmh5Mp4POz4+vrSrFkzwFwfaM2aNbz66qv85z//OenYbt26AbBz506aNm1KXFwcq1evdjomLS0NgLi4uFOe08/PDz8/v5O2l48KExERkfPHmbqg1Lp5dux2u1N/moo2bNgAmKvwgrm436ZNm0hPT3ccs2DBAkJCQpxWPBYREZE/L4/W7EyaNIkBAwaQmJhITk4Os2bN4ocffuC7775j165dzJo1i4EDBxIZGcnGjRu599576dWrF+3btwfgyiuvJCkpiVtvvZWpU6eSmprKo48+yrhx4yqtuREREZE/H4+GnfT0dIYPH86hQ4cIDQ2lffv2fPfdd1xxxRXs27ePhQsX8sorr5CXl0dCQgJDhgzh0UcfdTzearUyd+5cxo4dS3JyMkFBQYwYMcJpXh4RERH5c6t18+x4QnZ2NqGhoWRlZanPjohIHWSz2SgpKfF0MaSafHx8sFqtp9xf1c9vj3dQFhERcRXDMEhNTSUzM9PTRZGzFBYWRlxc3DnNg6ewIyIidVZ50ImJiSEwMFATx55HDMMgPz/fMQipfHDS2VDYERGROslmszmCTmRkpKeLI2chICAAMPv4xsTEnLZJ63Rq3dBzERGRmlDeR6fiAtJy/il//86lz5XCjoiI1Glqujq/1cT7p7AjIiIidZrCjoiISB3XqFEjXnnlFY8/h6eog7KIiEgt07t3by688MIaCxdr1qwhKCioRp7rfKSw40Lp2YUUldqJrueHv8/Z9SAXERGpjGEY2Gw2vL3P/FEeHR3thhLVXmrGcqGbpq+k59QlbD6Q5emiiIjIeWLkyJEsXbqUV199FYvFgsViYc+ePfzwww9YLBa+/fZbOnXqhJ+fHz/99BO7du3i6quvJjY2luDgYLp06cLChQudnvPEJiiLxcJ///tfrr32WgIDA2nevDlfffVVtcqZkpLC1VdfTXBwMCEhIdx4442kpaU59v/6669cdtll1KtXj5CQEDp16sTatWsB2Lt3L4MHDyY8PJygoCDatGnDvHnzzv6inYFqdlzI6mX2IC+x/elX5BARqRUMw6CgxOaRcwf4WKs0sujVV1/l999/p23bto61HqOjo9mzZw8ADz/8MC+++CJNmjQhPDycffv2MXDgQJ555hn8/Px4//33GTx4MNu3bycxMfGU53nyySeZOnUqL7zwAq+//jrDhg1j7969REREnLGMdrvdEXSWLl1KaWkp48aN46abbuKHH34AYNiwYXTs2JFp06ZhtVrZsGEDPj4+AIwbN47i4mJ+/PFHgoKC2Lp1K8HBwWc879lS2HEh77KwY7Mr7IiI1AYFJTaSJn/nkXNvfaofgb5n/tgNDQ3F19eXwMBA4uLiTtr/1FNPccUVVzjuR0RE0KFDB8f9p59+ms8//5yvvvqK8ePHn/I8I0eOZOjQoQA8++yzvPbaa6xevZr+/fufsYyLFi1i06ZN7N69m4SEBADef/992rRpw5o1a+jSpQspKSk88MADtGrVCoDmzZs7Hp+SksKQIUNo164dAE2aNDnjOc+FmrFcyNtqhp1Su93DJRERkbqic+fOTvdzc3O5//77ad26NWFhYQQHB7Nt2zZSUlJO+zzt27d3/BwUFERISIhjaYYz2bZtGwkJCY6gA5CUlERYWBjbtm0DYOLEifztb3+jb9++PPfcc+zatctx7IQJE/jnP/9J9+7defzxx9m4cWOVznu2VLPjQlYvM0uWqhlLRKRWCPCxsvWpfh47d004cVTV/fffz4IFC3jxxRdp1qwZAQEBXH/99RQXF5/2ecqblMpZLBbsNfjl/IknnuCvf/0r33zzDd9++y2PP/44s2fP5tprr+Vvf/sb/fr145tvvuH7779nypQp/Otf/+Luu++usfNXpLDjQj5e5TU7CjsiIrWBxWKpUlOSp/n6+mKzVa1v0fLlyxk5ciTXXnstYNb0lPfvcZXWrVuzb98+9u3b56jd2bp1K5mZmSQlJTmOa9GiBS1atODee+9l6NChzJgxw1HOhIQE7rzzTu68804mTZrE22+/7bKwo2YsF7Kqz46IiJyFRo0asWrVKvbs2cORI0dOW+PSvHlzPvvsMzZs2MCvv/7KX//61xqtoalM3759adeuHcOGDWP9+vWsXr2a4cOHc+mll9K5c2cKCgoYP348P/zwA3v37mX58uWsWbOG1q1bA3DPPffw3XffsXv3btavX8+SJUsc+1xBYceF1GdHRETOxv3334/VaiUpKYno6OjT9r956aWXCA8P55JLLmHw4MH069ePiy66yKXls1gsfPnll4SHh9OrVy/69u1LkyZN+OijjwCwWq0cPXqU4cOH06JFC2688UYGDBjAk08+CZgr0o8bN47WrVvTv39/WrRowZtvvum68hqG8aevdsjOziY0NJSsrCxCQkJq7HlHvLOapb8f5l83dGBIpwY19rwiInJmhYWF7N69m8aNG+Pv7+/p4shZOt37WNXPb9XsuJCGnouIiHiewo4LOSYVVDOWiIiIxyjsuJCP1by8qtkRERHxHIUdF9JyESIiIp6nsONCx/vsqBlLRETEUxR2XOj40HPV7IiIiHiKwo4LabkIERERz1PYcSFvLRchIiLicQo7LlTejKU+OyIiIp6jsONCjpodNWOJiIibNWrUiFdeeeWU+0eOHMk111zjtvJ4ksKOCzn67KgZS0RExGMUdlzIx6rlIkRERDxNYceFjk8qqD47IiJSNdOnTyc+Ph77Cf09r776akaPHg3Arl27uPrqq4mNjSU4OJguXbqwcOHCczpvUVEREyZMICYmBn9/f3r06MGaNWsc+48dO8awYcOIjo4mICCA5s2bM2PGDACKi4sZP3489evXx9/fn4YNGzJlypRzKk9N8vZ0AeoyLQQqIlLLGAaU5Hvm3D6BYLGc8bAbbriBu+++myVLltCnTx8AMjIymD9/PvPmzQMgNzeXgQMH8swzz+Dn58f777/P4MGD2b59O4mJiWdVvAcffJBPP/2U9957j4YNGzJ16lT69evHzp07iYiI4LHHHmPr1q18++23REVFsXPnTgoKCgB47bXX+Oqrr/j4449JTExk37597Nu376zK4QoKOy7kbVWfHRGRWqUkH56N98y5/3EQfIPOeFh4eDgDBgxg1qxZjrDzySefEBUVxWWXXQZAhw4d6NChg+MxTz/9NJ9//jlfffUV48ePr3bR8vLymDZtGu+++y4DBgwA4O2332bBggX873//44EHHiAlJYWOHTvSuXNnwOwAXS4lJYXmzZvTo0cPLBYLDRs2rHYZXEnNWC50fDSWmrFERKTqhg0bxqeffkpRUREAM2fO5Oabb8arbOBLbm4u999/P61btyYsLIzg4GC2bdtGSkrKWZ1v165dlJSU0L17d8c2Hx8funbtyrZt2wAYO3Yss2fP5sILL+TBBx/k559/dhw7cuRINmzYQMuWLZkwYQLff//92b50l1DNjgtZNamgiEjt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SUkuKXd1OJaLUDOWiIiIR3i0GWvcuHHMmjWLL7/8knr16jn62ISGhhIQEMCuXbuYNWsWAwcOJDIyko0bN3LvvffSq1cv2rdvD8CVV15JUlISt956K1OnTiU1NZVHH32UcePG4efn58mXB4CPJhUUERHxKI/W7EybNo2srCx69+5N/fr1HbePPvoIAF9fXxYuXMiVV15Jq1atuO+++xgyZAhff/214zmsVitz587FarWSnJzMLbfcwvDhw53m5fGk40PP1WdHRETEEzxas2MYp6/tSEhIYOnSpWd8noYNGzJv3ryaKlaN8lafHREREY+qFR2U6zJv9dkRERHxKIUdF9NCoCIiIp6lsONi5X12StRnR0RExCMUdlxMy0WIiIh4lsKOix1f9VxhR0RExBMUdlxMQ89FREQ8S2HHxXzUjCUiIuJRCjsudrxmR2FHRETEExR2XEx9dkRERDxLYcfFjs+grD47IiIinqCw42KaQVlERMSzFHZcrGKfnTOtBSYiIiI1T2HHxXzKmrEA1EdZRETE/RR2XKy8ZgegxKZ+OyIiIu6msONi5X12QHPtiIiIeILCjot5V2jG0lw7IiIi7qew42JWS4Wwo2YsERERt1PYcTEvLwvl3XbUjCUiIuJ+Cjtu4F22PpaasURERNxPYccNtGSEiIiI5yjsuMHxiQXVZ0dERMTdFHbcwKesGUt9dkRERNxPYccNymt2StSMJSIi4nYKO25Q3mdHNTsiIiLup7DjBuUTC6rPjoiIiPsp7LhB+ZIRGnouIiLifgo7bmDV0HMRERGPUdhxA/XZERER8RyFHTco77NToj47IiIibqew4wbWsj47NjVjiYiIuJ3Cjhv4OGZQVtgRERFxN4UdN9ByESIiIp6jsOMG5X121EFZRETE/RR23MAxz4767IiIiLidwo4beKsZS0RExGMUdtzAqg7KIiIiHqOw4wY+1rKh5wo7IiIibqew4wblNTsl6rMjIiLidgo7bnB8uQj12REREXE3hR03KB96rj47IiIi7letsGO321myZAlPPfUUY8aMYejQoUyYMIEZM2awb9++ap98ypQpdOnShXr16hETE8M111zD9u3bnY4pLCxk3LhxREZGEhwczJAhQ0hLS3M6JiUlhUGDBhEYGEhMTAwPPPAApaWl1S6Pq1g19FxERMRjqhR2CgoK+Oc//0lCQgID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rbdy7733MmXKFEDX2lWqcl3j4uJIT0932l9aWkpGRsY5X3uFHRfw9fWlU6dOLFq0yLHNbrezaNEikpOTPViy859hGIwfP57PP/+cxYsX07hxY6f9nTp1wsfHx+nab9++nZSUFF37aujTpw+bNm1iw4YNjlvnzp0ZNmyY42dd55rTvXv3k6ZQ+P3332nYsCEAjRs3Ji4uzul6Z2dns2rVKl3vasrPz8fLy/mjz2q1YrfbAV1rV6nKdU1OTiYzM5N169Y5jlm8eDF2u51u3bqdWwHOqXuznNLs2bMNPz8/49133zW2bt1q3H777UZYWJiRmprq6aKd18aOHWuEhoYaP/zwg3Ho0CHHLT8/33HMnXfeaSQmJhqLFy821q5dayQnJxvJyckeLHXdUHE0lmHoOtek1atXG97e3sYzzzxj7Nixw5g5c6YRGBho/N///Z/jmOeee84ICwszvvzyS2Pjxo3G1VdfreHQZ2HEiBHGBRdc4Bh6/tlnnxlRUVHGgw8+6DhG1/rs5OTkGL/88ovxyy+/GIDx0ksvGb/88ouxd+9ewzCqdl379+9vdOzY0Vi1apXx008/Gc2bN9fQ89ru9ddfNxITEw1fX1+ja9euxsqVKz1dpPMeUOltxowZjmMKCgqMu+66ywgPDzcCAwONa6+91jh06JDnCl1HnBh2dJ1r1tdff220bdvW8PPzM1q1amVMnz7dab/dbjcee+wxIzY21vDz8zP69OljbN++3UOlPX9lZ2cbf//7343ExETD39/faNKkifHII48YRUVFjmN0rc/OkiVLKv37PGLECMMwqnZdjx49agwdOtQIDg42QkJCjFGjRhk5OTnnXDaLYVSYNlJERESkjlGfHREREanTFHZERESkTlPYERERkTpNYUdERETqNIUdERERqdMUdkRERKROU9gRERGROk1hR0T+lEaOHMk111zj6WKIiBso7IhIrTNy5EgsFstJt/79+3u6aCJyHvL2dAFERCrTv39/ZsyY4bTNz8/PQ6URkfOZanZEpFby8/MjLi7O6RYeHg6AxWJh2rRpDBgwgICAAJo0acInn3zi9PhNmzZx+eWXExAQQGRkJLfffju5ubmnPN+aNWuIjo7m+eefB2D+/Pn06NGDsLAwIiMjueqqq9i1a5frXrCIuIzCjoiclx577DGGDBnCr7/+yrBhw7j55pvZtm0bAHl5efTr14/w8HDWrFnDnDlzWLhwIePHj6/0uRYvXswVV1zBM888w0MPPeR4jokTJ7J27VoWLVqEl5cX1157LXa73W2vUURqyDkvJSoiUsNGjBhhWK1WIygoyOn2zDPPGIZhGIBx5513Oj2mW7duxtixYw3DMIzp06cb4eHhRm5urmP/N998Y3h5eRmpqamOc1x99dXGZ599ZgQHBxuzZ88+bZkOHz5sAMamTZtq8qWKiBuoz46I1EqXXXYZ06ZNc9oWERHh+Dk5OdlpX3JyMhs2bABg27ZtdOjQgaCgIMf+7t27Y7fb2b59O7GxsQCsWrWKuXPn8sknn5w0MmvHjh1MnjyZVatWceTIEUeNTkpKCm3btq2plykibqCwIyK1UlBQEM2aNXPpOZo2bUpkZCTvvPMOgwYNwsfHx7Fv8ODBNGzYkLfffpv4+Hjsdjtt27aluLjYpWUSkZqnPjsicl5auXLlSfdbt24NQOvWrfn111/Jy8tz7F++fDleXl60bNnSsS0qKorFixezc+dObrzxRkpKSgA4evQo27dv59FHH6VPnz60bt2aY8eOueFViYgrKOyISK1UVFREamqq0+3IkSOO/XPmzOGdd97h999/5/HHH2f16tWODsjDhg3D39+fESNGsHnzZpYsWcLdd9/Nrbfe6mjCKhcTE8PixYv57bffGDp0KKWlpYSHhxMZGcn06dPZuXMnixcvZuLEiW59/SJScxR2RKRWmj9/PvXr13e69ejRw7H/ySefZPbs2bRv357333+fDz/8kKSkJAACAwP57rvvyMjIoEuXLlx//fX06dOHf//735WeKy4ujsWLF7Np0yaGDRuGYRjMnj2bdevW0bZtW+69915eeOEFt7xuEal5FsMwDE8XQkSkOiwWC59//rmWexCRKlHNjoiIiNRpCjsiIiJSp2nouYicd9T6LiLVoZodERERqdMUdkRERKROU9gRERGROk1hR0REROo0hR0RERGp0xR2REREpE5T2BEREZE6TWFHRERE6jSFHREREanT/h9hoyWRgsyhmAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(history.history['loss'], label='train loss')\n", + "plt.plot(history.history['val_loss'], label='val loss')\n", + "plt.xlabel(\"Epoka\")\n", + "plt.ylabel(\"Błąd (MSE)\")\n", + "plt.legend()\n", + "plt.title(\"Historia trenowania modelu\")\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "id": "dd5b1b14-0cdb-47e4-829b-2f31f34516ed", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhGZJREFUeJzt3XlYlOX6B/DvDAzDjiLKooKoKOKCWyruCohLrmhmWWq2uVRqy8lOpVYnM0uz1LQ0rWMeS9TUzH3NNTdcckNFUARRkB2GYeb5/cFvJke2GZgVvp/r4rqc933nnXsekLl5tlsihBAgIiIiskFSSwdAREREVFlMZIiIiMhmMZEhIiIim8VEhoiIiGwWExkiIiKyWUxkiIiIyGYxkSEiIiKbxUSGiIiIbBYTGSIiIrJZTGSIaqADBw5AIpHgwIEDlg6FrND48ePRqFEjS4dBpBcmMkSPWb16NSQSifbL3t4e9evXx/jx45GUlGTp8GzerVu3dNpXIpHA3d0dbdu2xeLFi6FSqUz22p9++il+++03k92/IrNnz4ZEIsGDBw9KPd+oUSM8+eSTZo6KyLbZWzoAImv10UcfITAwEAUFBTh+/DhWr16Nw4cP4+LFi3B0dLR0eFXSs2dP5Ofnw8HBwWIxjBkzBgMHDgQAZGZm4o8//sBrr72GhIQEzJ8/3ySv+emnn2LkyJEYNmyYSe5fXXz//fdQq9WWDoNIL0xkiMowYMAAdOzYEQDw4osvwsvLC/PmzcOWLVvw1FNPmS0OIQQKCgrg5ORktHtKpVKLJ2Pt27fH2LFjtY8nT56Mzp07Y+3atSZLZEg/MpnM0iEQ6Y1DS0R66tGjBwDgxo0bOsevXLmCkSNHwtPTE46OjujYsSO2bNlS4vnnz59Hr1694OTkhAYNGuCTTz7BqlWrIJFIcOvWLe11muGFnTt3omPHjnBycsLy5csBABkZGZg2bRoaNmwIuVyOpk2bYt68eSX+el63bh06dOgANzc3uLu7o3Xr1li0aJH2fGlzZP7880+MGjUK/v7+kMvlaNiwIaZPn478/PyqNp1eJBIJvL29YW9f8u+rpUuXomXLlpDL5fDz88OUKVOQkZGhc01cXByio6Ph4+MDR0dHNGjQAE8//TQyMzO198/NzcWPP/6oHdIaP3689vlnz57FgAED4O7uDldXV4SHh+P48eM6r6EZdjxy5AhmzJiBunXrwsXFBcOHD8f9+/eN3iYAkJubizfffFP7PW/evDm++OILCCG012iG61avXl3i+RKJBLNnz9Y+zs7OxrRp09CoUSPI5XLUq1cPkZGROHPmjPaax+fIaO7/xRdf4LvvvkOTJk0gl8vxxBNP4OTJkyVec/369QgJCYGjoyNatWqFTZs2cd4NmQx7ZIj0pEk2ateurT32999/o1u3bqhfvz7effdduLi44Ndff8WwYcOwYcMGDB8+HACQlJSEPn36QCKRYObMmXBxccGKFSsgl8tLfa2rV69izJgxeOWVV/DSSy+hefPmyMvLQ69evZCUlIRXXnkF/v7+OHr0KGbOnInk5GR89dVXAIDdu3djzJgxCA8Px7x58wAAly9fxpEjR/DGG2+U+f7Wr1+PvLw8TJo0CXXq1MFff/2Fb775Bnfu3MH69euN0IK68vLytHNFsrKysH37duzYsQMzZ87UuW727NmYM2cOIiIiMGnSJFy9ehXffvstTp48iSNHjkAmk6GwsBBRUVFQKBR47bXX4OPjg6SkJPz+++/IyMiAh4cH/vvf/+LFF19Ep06d8PLLLwMAmjRpAqD4+9ijRw+4u7vjnXfegUwmw/Lly9G7d28cPHgQnTt31onptddeQ+3atTFr1izcunULX331FaZOnYpffvlFr/eenp5e6vHHE1IhBIYMGYL9+/dj4sSJaNu2LXbu3Im3334bSUlJWLhwoV6v96hXX30VMTExmDp1KkJCQpCWlobDhw/j8uXLaN++fbnPXbt2LbKzs/HKK69AIpHg888/x4gRI3Dz5k1tL862bdswevRotG7dGnPnzsXDhw8xceJE1K9f3+BYifQiiEjHqlWrBACxZ88ecf/+fXH79m0RExMj6tatK+Ryubh9+7b22vDwcNG6dWtRUFCgPaZWq0XXrl1FUFCQ9thrr70mJBKJOHv2rPZYWlqa8PT0FABEfHy89nhAQIAAIHbs2KET18cffyxcXFzEtWvXdI6/++67ws7OTiQmJgohhHjjjTeEu7u7KCoqKvM97t+/XwAQ+/fv1x7Ly8srcd3cuXOFRCIRCQkJZd7LUPHx8QJAqV+TJk0SarVae21qaqpwcHAQ/fr1EyqVSnt88eLFAoD44YcfhBBCnD17VgAQ69evL/e1XVxcxLhx40ocHzZsmHBwcBA3btzQHrt7965wc3MTPXv21B7T/GxEREToxDl9+nRhZ2cnMjIyyn39WbNmlfneNV+DBg3SXv/bb78JAOKTTz7Ruc/IkSOFRCIR169fF0L806arVq0q8ZoAxKxZs7SPPTw8xJQpU8qNc9y4cSIgIED7WHP/OnXqiPT0dO3xzZs3CwBi69at2mOtW7cWDRo0ENnZ2dpjBw4cEAB07klkLBxaIipDREQE6tati4YNG2LkyJFwcXHBli1b0KBBAwDFf1Xv27cPTz31FLKzs/HgwQM8ePAAaWlpiIqKQlxcnHaV044dOxAWFoa2bdtq7+/p6Ylnn3221NcODAxEVFSUzrH169ejR48eqF27tva1Hjx4gIiICKhUKhw6dAgAUKtWLeTm5mL37t0Gvd9H5+Dk5ubiwYMH6Nq1K4QQOHv2rEH30sfLL7+M3bt3Y/fu3diwYQOmTJmC5cuXY8aMGdpr9uzZg8LCQkybNg1S6T+/rl566SW4u7tj27ZtAAAPDw8AwM6dO5GXl2dQHCqVCrt27cKwYcPQuHFj7XFfX18888wzOHz4MLKyskrELpFItI979OgBlUqFhIQEvV5zw4YN2vf+6Je3t7fOdX/88Qfs7Ozw+uuv6xx/8803IYTA9u3bDXqvQPHPx4kTJ3D37l2Dnzt69GidHknNcOvNmzcBAHfv3sWFCxfw/PPPw9XVVXtdr1690Lp1a4Nfj0gfHFoiKsOSJUvQrFkzZGZm4ocffsChQ4d0hoKuX78OIQQ++OADfPDBB6XeIzU1FfXr10dCQgLCwsJKnG/atGmpzwsMDCxxLC4uDufPn0fdunXLfC2geNLsr7/+igEDBqB+/fro168fnnrqKfTv37/c95uYmIgPP/wQW7ZswcOHD3XOaeaZlEalUpWYH+Lp6VnhiqigoCBERERoH48YMQISiQRfffUVXnjhBbRu3VqbGDRv3lznuQ4ODmjcuLH2fGBgIGbMmIEFCxbg559/Ro8ePTBkyBCMHTtWm+SU5f79+8jLyyvxGgDQokULqNVq3L59Gy1bttQe9/f317lO8+H+eLuVpWfPnvDy8ipx/PEJ2AkJCfDz84Obm1uJuDTnDfX5559j3LhxaNiwITp06ICBAwfi+eef10niylLR+9bEU9rPddOmTXXm4RAZCxMZojJ06tRJu2pp2LBh6N69O5555hlcvXoVrq6u2vkMb731VoneE42yEpWKlLZCSa1WIzIyEu+8806pz2nWrBkAoF69eoiNjcXOnTuxfft2bN++HatWrcLzzz+PH3/8sdTnqlQqREZGIj09Hf/6178QHBwMFxcXJCUlYfz48eUuxb19+3aJxGv//v3o3bu3nu/2H+Hh4Vi8eDEOHTpk8F/wX375JcaPH4/Nmzdj165deP311zF37lwcP35c24tmLHZ2dqUeF49MwDWnR3uHHlXanjxPPfUUevTogU2bNmHXrl2YP38+5s2bh40bN2LAgAHlvo61vW8igIkMkV7s7Owwd+5c9OnTB4sXL8a7776r/QtWJpPp9CyUJiAgANevXy9xvLRjZWnSpAlycnIqfC2guMdi8ODBGDx4MNRqNSZPnozly5fjgw8+KDW5unDhAq5du4Yff/wRzz//vPa4PsNTPj4+Ja4LDQ3V4x2VVFRUBADIyckBUNxuQPHk50d7DAoLCxEfH1+iLVq3bo3WrVvj/fffx9GjR9GtWzcsW7YMn3zyCYDSP/Dr1q0LZ2dnXL16tcS5K1euQCqVomHDhpV6P1UVEBCAPXv2IDs7W6dX5sqVK9rzwD89I4+v5Cqrx8bX1xeTJ0/G5MmTkZqaivbt2+M///lPhYmMPvECpf9cG/KzTmQIzpEh0lPv3r3RqVMnfPXVVygoKEC9evXQu3dvLF++HMnJySWuf3S4JSoqCseOHUNsbKz2WHp6On7++We9X/+pp57CsWPHsHPnzhLnMjIytElAWlqazjmpVIo2bdoAABQKRan31vyl/ehf1kIInSXbZXF0dERERITO16PzKAyxdetWAP8kQhEREXBwcMDXX3+tE9vKlSuRmZmJQYMGAShe9aR5/xqtW7eGVCrVec8uLi4lPuzt7OzQr18/bN68WWcZ/L1797B27Vp0794d7u7ulXo/VTVw4ECoVCosXrxY5/jChQshkUi0iYe7uzu8vLy086Q0li5dqvNYpVKVGCasV68e/Pz8yvzZMISfnx9atWqFn376SZuMAsDBgwdx4cKFKt+fqDTskSEywNtvv41Ro0Zh9erVePXVV7FkyRJ0794drVu3xksvvYTGjRvj3r17OHbsGO7cuYNz584BAN555x2sWbMGkZGReO2117TLr/39/ZGenl7m0MDjr71lyxY8+eSTGD9+PDp06IDc3FxcuHABMTExuHXrFry8vPDiiy8iPT0dffv2RYMGDZCQkIBvvvkGbdu21c6teFxwcDCaNGmCt956C0lJSXB3d8eGDRv0nvNRGWfOnMGaNWsAFO9tsnfvXmzYsAFdu3ZFv379ABT3lsycORNz5sxB//79MWTIEFy9ehVLly7FE088od1Qb9++fZg6dSpGjRqFZs2aoaioCP/9739hZ2eH6Oho7Wt26NABe/bswYIFC+Dn54fAwEB07twZn3zyCXbv3o3u3btj8uTJsLe3x/Lly6FQKPD555+brA0qMnjwYPTp0wf//ve/cevWLYSGhmLXrl3YvHkzpk2bpl0+DhRv2vjZZ5/hxRdfRMeOHXHo0CFcu3ZN537Z2dlo0KABRo4cidDQULi6umLPnj04efIkvvzyS6PE/Omnn2Lo0KHo1q0bJkyYgIcPH2Lx4sVo1aqVTnJDZDSWWzBFZJ00S2xPnjxZ4pxKpRJNmjQRTZo00S5vvnHjhnj++eeFj4+PkMlkon79+uLJJ58UMTExOs89e/as6NGjh5DL5aJBgwZi7ty54uuvvxYAREpKiva6gIAAnSW4j8rOzhYzZ84UTZs2FQ4ODsLLy0t07dpVfPHFF6KwsFAIIURMTIzo16+fqFevnnBwcBD+/v7ilVdeEcnJydr7lLb8+tKlSyIiIkK4uroKLy8v8dJLL4lz586Vuay3skpbfm1vby8aN24s3n77bZ1luxqLFy8WwcHBQiaTCW9vbzFp0iTx8OFD7fmbN2+KF154QTRp0kQ4OjoKT09P0adPH7Fnzx6d+1y5ckX07NlTODk5CQA6S7HPnDkjoqKihKurq3B2dhZ9+vQRR48e1Xl+WT8bpbVnaTTLr+/fv1/q+dK+99nZ2WL69OnCz89PyGQyERQUJObPn6+z/FuI4uXzEydOFB4eHsLNzU089dRTIjU1VWf5tUKhEG+//bYIDQ0Vbm5uwsXFRYSGhoqlS5fq3Kus5dfz588vETMeW94thBDr1q0TwcHBQi6Xi1atWoktW7aI6OhoERwcXG77EFWGRAjO0iKylGnTpmH58uXIyckpcyKlKezduxcRERH4888/0b17d7O9LtVcbdu2Rd26dQ3eFoCoIpwjQ2Qmj2/1n5aWhv/+97/o3r27WZMYANo5PaUtASaqCqVSWWK+0oEDB3Du3LlKrWQjqgh7ZIjMpG3btujduzdatGiBe/fuYeXKlbh79y727t2Lnj17miWG3Nxc/Pzzz1i0aBGysrKQkJCgs9EcUVXdunULERERGDt2LPz8/HDlyhUsW7YMHh4euHjxIurUqWPpEKma4WRfIjMZOHAgYmJi8N1330EikaB9+/ZYuXKl2ZIYoHgl1WuvvYbWrVtj1apVTGLI6GrXro0OHTpgxYoVuH//PlxcXDBo0CB89tlnTGLIJNgjQ0RERDaLf44RERGRzWIiQ0RERDar2s+RUavVuHv3Ltzc3PTadIyIiIgsTwiB7Oxs+Pn5lTufr9onMnfv3rVYnRQiIiKqmtu3b5db+LXaJzKaQmu3b982ar0UpVKJXbt2oV+/fpDJZEa7L5XEtjYPtrN5sJ3Ng+1sHqZs56ysLDRs2FCnYGppqn0ioxlOcnd3N3oi4+zsDHd3d/4nMTG2tXmwnc2D7WwebGfzMEc7VzQthJN9iYiIyGYxkSEiIiKbxUSGiIiIbBYTGSIiIrJZTGSIiIjIZjGRISIiIpvFRIaIiIhsFhMZIiIisllMZIiIiMhmMZEhIiIim2XRRGb27NmQSCQ6X8HBwdrzBQUFmDJlCurUqQNXV1dER0fj3r17FoyYiIiIrInFe2RatmyJ5ORk7dfhw4e156ZPn46tW7di/fr1OHjwIO7evYsRI0ZYMFoiIiKyJhYvGmlvbw8fH58SxzMzM7Fy5UqsXbsWffv2BQCsWrUKLVq0wPHjx9GlSxdzh0pERERWxuKJTFxcHPz8/ODo6IiwsDDMnTsX/v7+OH36NJRKJSIiIrTXBgcHw9/fH8eOHSszkVEoFFAoFNrHWVlZAIordCqVSqPFrbmXMe9JpWNbmwfb2TzYzubBdjYPU7azvveUCCGE0V9dT9u3b0dOTg6aN2+O5ORkzJkzB0lJSbh48SK2bt2KCRMm6CQlANCpUyf06dMH8+bNK/Wes2fPxpw5c0ocX7t2LZydnU3yPoiIiGqSgoICODo6mvQ18vLy8MwzzyAzMxPu7u5lXmfRHpkBAwZo/92mTRt07twZAQEB+PXXX+Hk5FSpe86cORMzZszQPs7KykLDhg3Rr1+/chvCUEqlErt370ZkZCRkMpnR7kslsa3Ng+1sHmxn82A7m4Zarcbhw4cRGxuLwYMHIzg42GTtrBlRqYjFh5YeVatWLTRr1gzXr19HZGQkCgsLkZGRgVq1ammvuXfvXqlzajTkcjnkcnmJ4zKZzCQ/zKa6L5XEtjYPtrN5sJ3Ng+1sPNnZ2diwYQMSEhIAFH8et27dGoBp2lnf+1l81dKjcnJycOPGDfj6+qJDhw6QyWTYu3ev9vzVq1eRmJiIsLAwC0ZJRERUs1y/fh3Lli1DQkICHBwcMGLECJ1RFUuyaI/MW2+9hcGDByMgIAB3797FrFmzYGdnhzFjxsDDwwMTJ07EjBkz4OnpCXd3d7z22msICwvjiiUiIiIzUKvV2LdvH44cOQIA8PHxwciRI1GnTh0LR/YPiyYyd+7cwZgxY5CWloa6deuie/fuOH78OOrWrQsAWLhwIaRSKaKjo6FQKBAVFYWlS5daMmQiIqIaIykpSZvEdOzYEVFRUbC3t6pZKZZNZNatW1fueUdHRyxZsgRLliwxU0RERESk0bBhQ/Tt2xeenp5o2bKlpcMplVXNkSEiIiLLUalU2Lt3Lx4+fKg91qNHD6tNYgAmMkRERAQgIyMDq1atwuHDhxETEwO1Wm3pkPRiXQNdREREZHZXrlzB5s2btRvd9ejRA1KpbfR1MJEhIiKqoYqKirBnzx6cOHECAFC/fn2MHDlSZ/+2sqjUAn/FpwMA/opPR5em9WAnlZgy3FIxkSEiIqqBcnJysHbtWiQnJwMAwsLCEB4eDjs7uwqfu+NiMuZsvYT0nHx83gl44ceT8HR1wqzBIejfytfUoeuwjX4jIiIiMipNrSQnJyeMGTMG/fr10zuJmbTmDJIzC3SOp2QWYNKaM9hxMdkk8ZaFPTJEREQG0gyrpGYXoJ6bIzoFelpkWMVQRUVFkEqlkEqlsLe3x6hRoyCVSuHh4aHX81VqgTlbL6G0atMCgATAnK2XEBniY7b2YCJDRERkAM2wyqM9Er4ejhYZVjFEWloaYmJiEBQUhL59+wIAateubdA9/opPL9ET8ygBIDmzAH/FpyOsiXl2/+XQEhERkZ6sbVhFXxcuXMB3332HlJQUnDlzBgUFZScj5UnN1u95+l5nDOyRISIi0oM1DqtURKlUYvv27Th79iwAICAgANHR0dr5MYaq56bf8/S9zhiYyBAREenBGodVyvPgwQOsX78eqampAICePXuiV69eVdofplOgJ3w9HJGSWVBqQicB4ONRPGfIXDi0REREpAdrHFYpi1KpxOrVq5GamgoXFxc899xz6NOnT5U3ubOTSjBrcAiA4qTlUZrHswaHmLVHiokMERGRHqxxWKUsMpkMERERCAwMxKuvvorGjRsb7d79W/ni27Ht4eOh+z59PBzx7dj2Zp/wzKElIiIiPVjjsMqjUlNTUVhYiAYNGgAAQkNDERoaConE+L0j/Vv5IjLEB8evp+LB5eP4YdwTFtvZlz0yREREerDGYRUAEELgzJkz+P7777F+/Xrk5eUVxySRmCSJ0bCTSrRJmyX30WEiQ0REpCdrG1ZRKBTYtGkTtm7diqKiItStW9esr28NOLRERERkAM2wiqV39k1JSUFMTAzS0tIgkUjQt29fdOvWzaS9MNaIiQwREZGB7KQSiy2xFkLg9OnT2LFjB1QqFdzd3REdHQ1/f3+LxGNpTGSIiIhszM2bN6FSqdCsWTMMHToUzs7Olg7JYpjIEBER2QAhhHYC75AhQ9C4cWN06NChxg0lPY6TfYmIiKyYEAInTpzAb7/9BiGKF347OjqiY8eOFk1iNBXAgeJdj1Xq0halmx57ZIiIiKxUfn4+tmzZgitXrgAAWrVqhaCgIAtH9U8F8PScfHzeCXjhx5PwdHWySAVw9sgQERFZoaSkJHz33Xe4cuUKpFIp+vfvj6ZNm1o6LKurAM4eGSIiIisihMDx48exZ88eqNVq1K5dGyNHjoSfn5+lQ7PKCuBMZIiIiKzI77//jjNnzgAAQkJCMHjwYDg6Wr5+E2CdFcCZyBAREVmRNm3a4MKFC4iMjLT4hN7HWWMFcCYyREREFiSEwP3791GvXj0AQEBAAKZNm2aVe8NYYwVwTvYlIiKykNzcXKxduxYrVqzAgwcPtMetMYkB/qkAXlYfkQSAr5krgDORISIisoCEhAQsX74c169f1/bKWDtrrADORIaIiMiM1Go1Dh06hB9//BHZ2dnw8vLCiy++iBYtWlg6NL1YWwVwzpEhIiIyk5ycHGzcuBHx8fEAgNDQUAwcOBAODg4Wjswwmgrgx6+n4sHl4/hh3BPo0rSe2SuAA0xkiIiIzObMmTOIj4+HTCbDwIED0bZtW0uHVGl2Ugk6BXrij8vFc2cskcQATGSIiIjMpnv37sjIyEBYWBjq1q1r6XCqBc6RISIiMpHs7Gxs374dKpUKACCVSjFkyBAmMUbEHhkiIiITuH79OjZt2oS8vDzY29sjMjLS0iFVS0xkiIiIjEitVmP//v04fPgwAMDb2xvt27e3cFTVFxMZIiIiI8nMzMSGDRtw+/ZtAEDHjh0RFRUFe3t+3JoKW5aIiMgIbt26hV9//RX5+flwcHDAkCFD0LJlS0uHVe0xkSEiIjICd3d3qFQq+Pr6YuTIkfD0NN82/TUZExkiIqJKUigUkMvlAABPT0+MGzcO9erV41CSGXH5NRERUSVcuXIFixYtws2bN7XH/Pz8mMSYGVubiIjIACqVCrt378aJEycAACdOnEDjxo0tHFXNxUSGiIhITw8fPkRMTAzu3r0LAAgLC0N4eLiFo6rZmMgQERHp4dKlS9iyZQsUCgWcnJwwdOhQNG/e3NJh1XhMZIiIiCpw+/ZtrF+/HgDQsGFDREdHw8PDw8JREcBEhoiIqEINGjRAaGgoXF1d0adPH9jZ2Vk6JB0qtcBf8elIzS5APTdHi1ajNjcmMkRERKW4dOkSGjVqBGdnZ0gkEgwdOhQSifUlBzsuJmPO1ktIzizQHvP1cMSswSHo38rXgpGZB5dfExERPUKpVGLLli1Yv349Nm/eDCEEAFhtEjNpzRmdJAYAUjILMGnNGey4mGyhyMyHiQwREdH/u3//PlasWIGzZ88CKC74qElkrI1KLTBn6yWUFp3m2Jytl6BSW2f8xsKhJSIiIgDnzp3Dtm3boFQq4eLighEjRlj1/jB/xaeX6Il5lACQnFmAv+LTEdakjvkCMzMmMkREVKMVFhZi+/btiI2NBQAEBgZixIgRcHV1tWxgFUjNLjuJqcx1toqJDBER1WhqtRq3bt2CRCJBr1690KNHD0il1j/zop6bo1Gvs1VMZIiIqMZ5dAKvo6MjRo4cCaVSiUaNGlk2MAN0CvSEr4cjUjILSp0nIwHg41G8FLs6s/6Uk4iIyIgUCgU2bdqEM2fOaI/Vr1/fppIYALCTSjBrcAiA4qTlUZrHswaHVPv9ZJjIEBFRjZGSkoLvv/8eFy5cwK5du5Cfn2/pkKqkfytffDu2PXw8dIePfDwc8e3Y9jViHxkOLRERUbUnhMDp06exY8cOqFQquLu7Izo6Gk5OTpYOrcr6t/JFZIhPjd3Z12p6ZD777DNIJBJMmzZNe6ygoABTpkxBnTp14OrqiujoaNy7d89yQRIRkc1RKBTYsGEDtm3bBpVKhaCgILzyyivw9/e3dGhGYyeVIKxJHQxtWx9hTerUmCQGsJJE5uTJk1i+fDnatGmjc3z69OnYunUr1q9fj4MHD+Lu3bsYMWKEhaIkIiJbU1RUhO+//x5///03pFIpIiMjMWbMGDg7O1s6NDISiycyOTk5ePbZZ/H999+jdu3a2uOZmZlYuXIlFixYgL59+6JDhw5YtWoVjh49iuPHj1swYiIishX29vZo3bo1PDw8MGHCBHTt2tUqSw3YIk2hSqB4cz5L7SBs8TkyU6ZMwaBBgxAREYFPPvlEe/z06dNQKpWIiIjQHgsODoa/vz+OHTuGLl26lHo/hUIBhUKhfZyVlQWguHaGUqk0WtyaexnznlQ6trV5sJ3Ng+1segUFBcjJyQFQ3M5dunRB+/bt4ejoyHY3kj2X7+Gz7VfwMCcfH3cEJv33L9R2dcK7A4IR0cLbKK+h7/fKoonMunXrcObMGZw8ebLEuZSUFDg4OKBWrVo6x729vZGSklLmPefOnYs5c+aUOL5r1y6TdCXu3r3b6Pek0rGtzYPtbB5sZ9PIzc1FQkICpFIpmjVrxnY2oRnB//z7445qALkojD+NP+KNc/+8vDy9rrNYInP79m288cYb2L17Nxwdjbfr4MyZMzFjxgzt46ysLDRs2BD9+vWDu7u70V5HqVRi9+7diIyMhEwmM9p9qSS2tXmwnc2D7WwaQgj89ddfOH/+PNRqNTw8PKBUKvHkk0+ynY1IpRaI+uoQUrKKyx7IpQIfd1Tjg1NSKNQSSAB4uzti57SeVZ5wrBlRqYjFEpnTp08jNTUV7du31x5TqVQ4dOgQFi9ejJ07d6KwsBAZGRk6vTL37t2Dj49PmfeVy+WQy+UljstkMpP8MJvqvlQS29o82M7mwXY2nvz8fPz222+4du0aACAkJAT9+/fHvn372M5GdupGGhIeKvD4FnwKtQQKVfGxhIcKnL2TXeVClfp+3yyWyISHh+PChQs6xyZMmIDg4GD861//QsOGDSGTybB3715ER0cDAK5evYrExESEhYVZImQiIrIyt2/fRkxMDLKysmBnZ4eoqCh07NgRRUVFlg6tWrLGQpUWS2Tc3NzQqlUrnWMuLi6oU6eO9vjEiRMxY8YMeHp6wt3dHa+99hrCwsLKnOhLREQ1hxACe/fuRVZWFjw9PTFy5Ej4+lb/nWwtyRoLVVp81VJ5Fi5cCKlUiujoaCgUCkRFRWHp0qWWDouIiKyARCLB8OHDcejQIfTr16/UaQVkXNZYqNKqEpkDBw7oPHZ0dMSSJUuwZMkSywRERERWJSEhAYmJiejRowcAwMPDA4MHD7ZwVDWHplDlpDVnrKZQpVUlMkRkuzSbY9XEWi9kemq1GocPH8aBAwcghICfnx+aNGli6bBqJE2hyjlbLyE955+imz4ejpg1OMTshSoNSmQuX76MdevW4c8//0RCQgLy8vJQt25dtGvXDlFRUYiOjmbXHlENtONiMuZsvYTkzH8m+Pla6JcaVT85OTnYtGkTbt68CQAIDQ1Fw4YNLRxVzaYpVHn8eioeXD6OH8Y9gS5N61nkjxe9ShScOXMGERERaNeuHQ4fPozOnTtj2rRp+PjjjzF27FgIIfDvf/8bfn5+mDdvns7OukRUve24mIxJa87oJDEAkJJZgElrzmDHxWQLRUbVQXx8PJYvX46bN29CJpNh6NChGDZsGBwcHCwdWo1nJ5Vo58JYsgdWrx6Z6OhovP3224iJiSmx0+6jjh07hkWLFuHLL7/Ee++9Z6wYichKqdQCc7ZeKnXSn0DxmPmcrZcQGeLDYSYy2OHDh7F3714AQN26dTFq1CjUrVvXwlGRtdErkbl27ZpeG9OEhYUhLCyMtSyIaoi/4tNL9MQ8SgBIzizAX/HpVd4ci2oezR/O7dq1w4ABA6x2YzvOD7MsvRIZQ394rPWHjYiMyxo3xyLbplAotHMtW7VqhVq1aqFBgwYWjqpsnB9meXrNkSnPnj17MGvWLGzdutUY8RCRDbHGzbHINqnVauzduxeLFy/WVq4GYPVJDOeHWZ5BiczkyZPxwQcfaB9v2LAB/fv3x7Zt2zB69GgsWLDA6AESkfXSbI5VVie6BMV/nZpzcyyyPVlZWfjxxx9x+PBh5OTk4NKlS5YOqUIVzQ8DiueHqdSlXUHGZFAis3//fvTs2VP7eMGCBfj0009x6tQprFmzhrvuEtUwms2xgMdLyFlucyyyLXFxcVi2bBkSExPh4OCA6OhodOrUydJhVciQ+WFkWnrNkZkzZw4AIDExEZs3b8axY8cghMDJkycRGhqKjz76CAUFBUhMTMRHH30EAPjwww9NFzURWY1HN8d69Be7pTbHIuMx5SRWlUqFffv24ejRowAAX19fjBw5Ep6ettF7x/lh1kOvRGb8+PEAgGXLliEyMhJt27bFn3/+CR8fH7z77rsQQiA3Nxdff/01xo8fDyHYlUZUk2g2x+LKjerD1JNYDx8+rE1iOnXqhMjISNjb285m85wfZj30+qkJCAgAAHTp0gXz58/HlClT8M0332D48OHw9/cHAJw8eRKBgYHax0RUs9hJJVxiXU1oJrE+/iepZhLrt2PbVzmZ6dKlC+Li4tCtWze0aNGiSveyBGssnlhTGTRHZuHChZBIJHj55Zfh6emJWbNmac8tX76chbuIiGycqSaxqlQqnDlzRttjL5fLMXHiRJtMYgDOD7MmBvXjNWrUCH/++Wep51asWGGUgIiIyHJMscnhw4cPERMTg7t376KwsBBdunQBAEgktv0hz/lh1sF2BiSJiMjkjD2J9dKlS9iyZQsUCgUcHR1Ru3btqoRndTg/zPKYyBAR2Thjri4y1iTWoqIi7Ny5E6dOnQJQvLHdyJEj4eHhUam4rBnnh1kWExkiIhtm7NVFxpjEmpaWhpiYGKSkpAAAunbtir59+8LOzs7geIgqUuUSBUREZBmm2CLfGJNY8/PzkZqaCmdnZzzzzDOIjIxkEkMmw0SGiMgGmXKLfM0kVh8P3eEjHw/HMpdeP7p/WIMGDTBixAi88sorCAoKMvj1iQzBoSUiIhtkitVFjzJkEuuDBw/w22+/YfDgwfD29gYAtGzZ0uDXJKoMoyUyLVq0wLVr16BSqYx1SyIiKoM5tsjXZxLruXPnsG3bNiiVSmzfvl27EzyRuRgtkfn000+RlZVlrNsREVE5zLlFfmmrolRFxYlLbGwsAKC2d324BnfDsRtpXH5MZmW0RGb48OHGuhUREVXAXFvkl7YqKshNhUinW8jPfggAiLPzx5FbdSFuXQNg3JpMRBUxeLJvfn4+8vLytI8TEhLw1VdfYdeuXUYNjIiIymaOLfJLWxXlKclDF+U55Gc/hMpOjh2KZjicUw/ikSiqsmqKyFAGJzJDhw7FTz/9BADIyMhA586d8eWXX2Lo0KH49ttvjR4gERGVrjKri/RV1qqoh8IJqWoXJKnc8WtOMJLV7iWeW9VVU0SGMHho6cyZM1i4cCEAICYmBt7e3jh79iw2bNiADz/8EJMmTTJ6kEREVDpTbZH/6KqoWpJ8ZAs5VJBCQIJ9hU2ghB1K9gX9o6qrpoj0ZXAik5eXBzc3NwDArl27MGLECEilUnTp0gUJCQlGD5CIiMpnii3yi1c7CTS3e4BOskTEqbxwXBkAAFAa8NFRlVVTRPoweGipadOm+O2333D79m3s3LkT/fr1AwCkpqbC3b1kFyMRkTVTqQWO3UjD5tgkHLuRxqGQ/+cpl6KX7Ca6OiTAXiLgKimEBGqD72OMVVNE5TG4R+bDDz/EM888g+nTpyM8PBxhYWEAintn2rVrZ/QAiYiMTbOceM+lFGyKTUJ6rlJ7rjqtuKlsMcnk5GSc3RODxvYPoRYSnC6qj4tF3ihvKOlxxlo1RVQRgxOZkSNHonv37khOTkZoaKj2eHh4OJdgE5HVK2058aM0K26qOlnW0ipTTFIIgZMnT2LXrl1QqVRwcHbFpocNkKp2Nei1jbVqikgfBg8trVq1Ch4eHmjXrh2k0n+e3qlTJwQHBxs1OCIiYyqryOKjqsOKm8oWk8zLy8P+/fuhUqnQvHlzTJs6GR890xM+7oYNDxlj1RSRvgxOZN599114e3tj4sSJOHr0qCliIiIyuvKKLD7u0RU3tqYqxSRdXFwwbNgwREVFYfTo0XByckL/Vr449E4fuMjLr17tKrfDwtFt8b+XuuDwv/oyiSGzMTiRSUpKwo8//ogHDx6gd+/eCA4Oxrx585CSkmKK+IiIjKKiIoulscUVN4YUkxRC4Pjx47h27Zr2fPPmzdGlSxdIJP8MCZ1OeIhcRfl19HIUKvi4OyKsSR0OJ5FZGZzI2NvbY/jw4di8eTNu376Nl156CT///DP8/f0xZMgQbN68GWq14TPbiYhMqTJJiS2uuNl9Sb8/Ku+mZeCXX37Bzp078dtvvyE3N7fMa81RoJKosgxOZB7l7e2N7t27IywsDFKpFBcuXMC4cePQpEkTHDhwwEghEhFVnSFJiQTFE2NtbcWNSi3wW+zdCq+rK83B9YO/4erVq7Czs0Pv3r3h7Oxc5vXmLFBJZKhKJTL37t3DF198gZYtW6J3797IysrC77//jvj4eCQlJeGpp57CuHHjjB0rEVGlaYos6jvoYYsrbv6KT0d6bmE5Vwi0sk/GQPkVFOTlwNPTExMnTkSnTp10hpIeV1Hb2WriR9WDwYnM4MGD0bBhQ6xevRovvfQSkpKS8L///Q8REREAiieLvfnmm7h9+7bRgyUiqqzyiiw+yteGV9yUN7QjhRoRDtfxhCwJUgCtWrXCyy+/DF/fit+nOQpUElWWwfvI1KtXDwcPHtRuhFeaunXrIj4+vkqBEREZm6bI4uP7q9RxccDQtn6IDPExSp0iSylvaEcNKfKEDEVCgjZdemFEVM9ye2EeV1bb+VSjDQTJNhmcyPTq1Qvt27cvcbywsBDr1q3D888/D4lEgoCAAKMESERkTKYqsmgNNENAKZkF/7/UWkAG9f8XeAT+UvrjvmNDzO5nWBKjUZ3bjmyXwUNLEyZMQGZmZonj2dnZmDBhglGCIiIyJU2RxaFt61er5cKPDgE5QYl+DnHo43ADgIAEgApSvDn0iSq93+radmS7DO6REUKUmsnfuXMHHh4eRgmKiIgqp38rX3zWzwexf+6EI5QoElJ4SvIhd/fkEBBVS3onMu3atYNEIoFEIkF4eDjs7f95qkqlQnx8PPr372+SIImIzKWyhRatgVqtxqFDh3D18CE4QsDFwxMN2vfBwPq+NvU+iAyhdyIzbNgwAEBsbCyioqLg6vpPETEHBwc0atQI0dHRRg+QiGyfrSQHlSm0aC2ys7OxceNG3Lp1CwDQtm1bDBw4EDKZzLKBEZmY3onMrFmzAACNGjXC6NGj4ejIjY+IqGK2khxoCi0+XoHIVqphx8TEIDExETKZDE8++STatGlj6ZCIzEKvyb5C/PNfe9y4cUxiiEgvla3CbG5VKbRoLQYMGID69evj5ZdfZhJDNYpeiUzLli2xbt06FBaWt2MkEBcXh0mTJuGzzz4zSnBEZLtsKTkwpNCitcjKysKlS5e0j318fDBx4kR4eXlZMCoi89NraOmbb77Bv/71L0yePBmRkZHo2LEj/Pz84OjoiIcPH+LSpUs4fPgw/v77b0ydOhWTJk0yddxEZOUMSQ7CmtQxX2ClsLWiiHFxcdi0aRMUCgU8PDxQv359AKjU3jBEtk6vRCY8PBynTp3C4cOH8csvv+Dnn39GQkIC8vPz4eXlhXbt2uH555/Hs88+i9q1a5s6ZiKyAbaUHNhKUUSVSoV9+/bh6NGjAIp7YZycnCwaE5GlGbSPTPfu3dG9e3dTxUJE1YitJAdAaTvi6pKgeCt+SxZFzMzMRExMDO7cuQMAeOKJJ9CvXz+drTCIaqJKVb8mIqqILVVMtvaiiFevXsWyZctw584dyOVyjBo1CgMHDmQSQwQmMkRkItaeHDxOUxTRx0O3h8inCtWwVWqBYzfSsDk2CcdupFV6YvODBw9QUFAAPz8/vPLKKwgJCanUfYiqI6bzRGQytlYx2ZhFEcvaP+fDQc31ev6j5WC6du0KR0dHtG3bFnZ2dgbHQlSdMZEhoiqpaNdeW6uYrCmKWBXlba43/ZdYzOtU/vMvX76Mo0eP4rnnnoODgwMkEgk6dOhQpZiIqismMkRUafru2muM5MBW6LN/jua6x4sHFBUVYdeuXTh58iQA4Pjx4+jZs6epQiWqFqqUyBQUFJTYJM/d3b1KARGRbbD1Lf1NRZ/9cwBg6f44hAX5aHun0tPTERMTg+Tk4t2Ou3btim7duun9urZSz4rI2AxOZPLy8vDOO+/g119/RVpaWonzKpXKKIERkfWqqNdBguJdeyNDfGrch6m+++Is/zMeXx+4BV8PR0xtK0di7J8oLCyEk5MThg8fjqCgIL1f01bqWRGZgsGrlt5++23s27cP3377LeRyOVasWIE5c+bAz88PP/30k0H3+vbbb9GmTRu4u7vD3d0dYWFh2L59u/Z8QUEBpkyZgjp16sDV1RXR0dG4d++eoSETkZHZ4pb+5mLovji1chJw/a+9KCwshL+/P1599VWDkxhbqGdFZCoGJzJbt27F0qVLER0dDXt7e/To0QPvv/8+Pv30U/z8888G3atBgwb47LPPcPr0aZw6dQp9+/bF0KFD8ffffwMApk+fjq1bt2L9+vU4ePAg7t69ixEjRhgaMhEZmS3t2mtuFe2f87hbqtrIEzLckDbE2OeeN2h43pbqWRGZisGJTHp6Oho3bgygeD5MenrxX1zdu3fHoUOHDLrX4MGDMXDgQAQFBaFZs2b4z3/+A1dXVxw/fhyZmZlYuXIlFixYgL59+6JDhw5YtWoVjh49iuPHjxsaNhEZkS3t2mtu5e2fo5GXl6f9dz4csLGgJQ7leuNUQoZBr8WeMaJKzJFp3Lgx4uPj4e/vj+DgYPz666/o1KkTtm7dilq1alU6EJVKhfXr1yM3NxdhYWE4ffo0lEolIiIitNcEBwfD398fx44dQ5cuXUq9j0KhgEKh0D7OysoCACiVSiiVykrH9zjNvYx5Tyod29o8DGnndg3cEFBbjntZZW/p7+3uiHYN3Grk9y28uReWPhOKz7ZfQUrWP4mGHdToZJ+Ia9fS0NguEDfhqT0jh0BqZi6USv17ZFIzcyG3q7i3xdD7Vgf8vWEepmxnfe8pEUIY1Oe4cOFC2NnZ4fXXX8eePXswePBgCCGgVCqxYMECvPHGGwYFeuHCBYSFhaGgoACurq5Yu3YtBg4ciLVr12LChAk6SQkAdOrUCX369MG8efNKvd/s2bMxZ86cEsfXrl0LZ2dng2IjIjKWgoIC3Lp1CwUFxYmNn58f6tWrZ+GoiKxXXl4ennnmGWRmZpY75GpwIvO4hIQEnD59Gk2bNkWbNm0Mfn5hYSESExO1BdFWrFiBgwcPIjY2tlKJTGk9Mg0bNsSDBw+MujRcqVRi9+7diIyMhEz2+G4QZExsa/OoTDvvuXyvRK+Dj7sj3h0QjIgW3qYK1aYIIRB77jx+/2M77KBGvrBHq6YB+PyqBxTq4sEnTQ/Wzmk9DVrlpVILRH11qMKeMUPvWx3w94Z5mLKds7Ky4OXlVWEiU+UN8QICAhAQEFDp5zs4OKBp06YAgA4dOuDkyZNYtGgRRo8ejcLCQmRkZOgMWd27dw8+Pj5l3k8ul0Mul5c4LpPJTPLDbKr7Uklsa/MwpJ0HtGmAfq3qc/+SMhQWFmLbtm04f/487AAkqdzxl6oRwtykUKglUKgk2nk0Mwe1hKPcwaD7y/7/eZPWnAGgu+FeVe5bnfD3hnmYop31vV+lEpm9e/di7969SE1NhVqt1jn3ww8/VOaWWmq1GgqFAh06dIBMJsPevXsRHR0NoLgCbGJiIsLCwqr0GkRkPDVp115DJSQk4Pz585BIJOjduzdyazfF1T8uAcjVXlPVulO2Vs+KyNgMTmTmzJmDjz76CB07doSvr6+2qFllzJw5EwMGDIC/vz+ys7Oxdu1aHDhwADt37oSHhwcmTpyIGTNmwNPTE+7u7njttdcQFhZW5kRfIiJrEhQUhD59+uj0XPdp5oWdO7bj8+g2qOfhYpQeLFurZ0VkTAYnMsuWLcPq1avx3HPPVfnFU1NT8fzzzyM5ORkeHh5o06YNdu7cicjISADFE4ulUimio6OhUCgQFRWFpUuXVvl1iYhMQaFQYPfu3ejZs6d2TP/xWkma5GJga1+jdsWzZ4xqKoMTmcLCQnTt2tUoL75y5cpyzzs6OmLJkiVYsmSJUV6PiMhUkpOTERMTg/T0dKSlpeH555+vUo81EenH4A3xXnzxRaxdu9YUsRAR2RwhBP766y+sXLkS6enpcHd3R9++fZnEEJmJwT0yBQUF+O6777Bnzx60adOmRNfoggULjBYcEZE1KygowNatW3Hp0iUAQPPmzTF06FA4OTlV+d6sZk2kH4MTmfPnz6Nt27YAgIsXL+qc418gRFRTpKWlYc2aNcjIyIBUKkVERAS6dOlilN+DrGZNpD+DE5n9+/ebIg4iqgZqUi+Cu7s7HBwcUKtWLYwcORL169c3yn011awf3+BOU83627HtmcwQPaLSG+Jdv34dN27cQM+ePeHk5AQhBHtkiGqwmtCLUFBQALlcDolEAplMhqeffhpOTk5wdDROccyKqllLUFzNOjLEp9omiESGMniyb1paGsLDw9GsWTMMHDgQycnJAICJEyfizTffNHqARGT9NL0Ij1di1vQi7LiYbKHIjOfOnTtYtmwZDh8+rD1Wu3ZtoyUxAKtZE1WGwYnM9OnTIZPJkJiYqFOEcfTo0dixY4dRgyMi61dRLwJQ3IugUleprJvFCCFw5MgRrFq1CpmZmTh37hyKiopM8lqp2WUnMZW5jqgmMHhoadeuXdi5cycaNGigczwoKAgJCQlGC4yIbIMhvQi2tmFbXl4efvvtN8TFxQEAWrZsicGDB8Pevspl6kpVz02/3h19ryOqCQz+35ibm6vTE6ORnp5earFGIqreqmsvQmJiImJiYpCdnQ07Ozv0798fHTp0MOlcwE6BnvD1cERKZtnVrH08iidRE1Exg4eWevTogZ9++kn7WCKRQK1W4/PPP0efPn2MGhwRWb/q2IuQl5eHNWvWIDs7G3Xq1MGLL76Ijh07apMYlVrg2I00bI5NwrEbaUYbNrOTSjBrcAiAf6pXa2gezxocwom+RI8wuEfm888/R3h4OE6dOoXCwkK88847+Pvvv5Geno4jR46YIkYismLVsRfB2dkZERERSEpKwqBBg+Dg4KA9Z+rVWaxmTWQYgxOZVq1a4dq1a1i8eDHc3NyQk5ODESNGYMqUKfD15X8woppG04swac0ZSACdZMYaexHK2uvm1q1bcHBwgJ+fHwDgiSeewBNPPKEzlGSuPV5YzZpIf5Wasebh4YF///vfxo6FiGyUrfQilNqb4i7HxKAC3L18BrVq1cLLL78MR0fHEnNhzL3HC6tZE+nH4ERm1apVcHV1xahRo3SOr1+/Hnl5eRg3bpzRgiMi22HtvQil9aY4QYk2BVeRdCkbABAQEACptPSpg9V5dRaRLTN4su/cuXPh5eVV4ni9evXw6aefGiUoIrJNml6EoW3rI6xJHatJYkrrTfGVZmGo49/ws8uGUkhx3q4Znhw8RGc+zKOq6+osIltncI9MYmIiAgMDSxwPCAhAYmKiUYIiItMqbZ5IdfZob4oEAu3s76KNfTIkEiBd7YQDhY2RWeBUbm9KdVydRVQdGJzI1KtXD+fPn0ejRo10jp87dw516rA7lcjalbXq5sNBzS0YlWk92ksiANSR5kIiAa4WeeGE0h+q/++cLq83RbM6q7zhJV8bW51FVB0YPLQ0ZswYvP7669i/fz9UKhVUKhX27duHN954A08//bQpYiQiIymvJtL0X2ItE1QZjLlXS3Evieb5EhwqDMR+RWMcVTbSJjH/XFc6O6kEQ0LLn7Q8JNRXZzjNVPvNENE/DO6R+fjjj3Hr1i2Eh4drt+lWq9V4/vnnOUeGyIrpUxNJc53MXEGVwZh7tahUKuTcPINIlzvYndsQAKCADLfU//Sc6LPXjUotsOVc+cUvt5xLxjv9W8BOKqmRPV9ElmBwIuPg4IBffvkFn3zyCWJjY+Hk5ITWrVsjICDAFPERkZHos+oGAE4nPES3Zt7mCaoUZe3VkpxZgFfXnMH0iGaY2repXhOJMzMzsWHDBty+fRsNAHhJauOBcC312or2uqmo/TQx/hWfjsz8wjL3m5n+SyzmdaowdCLSU6UrnwUFBSEoKMiYsRCRCem7muZBjsLEkZStvF4jjYV7ruF/fyVg9pCW5fbOXL16FZs3b0Z+fj7s7GXYk9uwzCTm5Z6BFfb06Nt+KZn5+HznVZvo+SKqDgyeI0NEtknf1TRerpYr/qpPrwcApGQpMGnNGey4WHKoR6VSYefOnVi3bh3y8/Ph6+uHfZJQnaGkR0lQPCRU0fwVfdsvPbdQ754vIqo6JjJENYRm1U1Zgyea4x0CapsrpBIM3YNlztZLJRKQX3/9FcePHwcAdO7cGS17D8XNrLLv8ehGduXRp/18PRzhqWciaMmeL6LqhIkMUQ2hT2VlzXWWYsgeLJoEZOHuazorgp544gk4OTlh9OjR6N+/Px7kKfW6X0VJlL6VqX3crb/ni6g6YSJDVINoaiL5eOh+2Pp4OGLh6LaWCeoRFfV6lGbp/muYumIvus/bhx0Xk9G0aVO88cYbCA4OBmDcjezKaz9NwUhb6Pkiqk4qPdk3Ly8PiYmJKCws1Dnepk2bKgdFRKZTVk0ktaoIf8RbNrZHK2nrw01SgN4ON+EmUWBrVkipFag1iUVKZkGpE3D1WXr9qIpqSulTDVxzHRFVncGJzP379zFhwgRs37691PMqlarKQRGRaZVWWVltJf91+7fyxcs9A7H8UPlZVSO7dHST3YKDRI0CYQ9nSSFyhLxEBWp9EouKll4/rqLK1OVVA/9wUHMUxp/W+7WIqHwGJzLTpk1DRkYGTpw4gd69e2PTpk24d+8ePvnkE3z55ZemiJGIapCKNp6zgxqdZLcRbH8fAJCicsXBwsbIQ3Gxx9IqUJeXWFRmkz19WHPPF1F1YnAis2/fPmzevBkdO3aEVCpFQEAAIiMj4e7ujrlz52LQoEGmiJOIrFBpxSftpJIyj+ujvCXY7pIC9HG4AU9pPgDgnNIHZ4vqQzw2I6W0ibsVDQmZgjX3fBFVFwYnMrm5uahXrx4AoHbt2rh//z6aNWuG1q1b48wZ/ca1icj2lbUF/5BQX2w5l1zp8gLlrR5qbncfntJ85At7HCoMxF21R6nXlTVxt6IhISKyPQavWmrevDmuXr0KAAgNDcXy5cuRlJSEZcuWwdfX+N2zRGR9yio+mZxZgOWH4kstSlnWBnaPK2/10Omi+rhcVBebC0JKTWI0e7mwAjVRzWFwIvPGG28gObn4l9GsWbOwfft2+Pv74+uvv2bRSKIaQJ8yAo/TXFvaBnaPe3T5sockH11ltyD5/zuoIcVxZQDy4VDuXi5cEURUcxg8tDR27Fjtvzt06ICEhARcuXIF/v7+8PLyMmpwRGR99C0j8LhHd9Atb3hHs8roy//tQmdZImQSNXKEA84X+WmTlZd7BpYYvjLlxF0isl6V3kdGw9nZGe3btzdGLERkAwwtI2Do8wsLC1Fw/QS6O9wCACSp3HCtqC4A3WTlnf4tzDpxl4isk8GJjEqlwurVq7F3716kpqZCrVbrnN+3b5/RgiMi62NIGQFDn3/v3j3ExMTgwYMHkEgk6NWrN2T1QzAoR1HqxnPmnLhblZVYRGQ6Bicyb7zxBlavXo1BgwahVatWkEj4H5moJukU6IlazjJk6FnDSKOiHXQvXbqETZs2oaioCG5uboiOjkZAQIARIq66slZocSiLyPIMTmTWrVuHX3/9FQMHDjRFPERk5XZfSqlUEgOUnIj7aC+Hs6r411HTpk0xbNgwuLi4GCvkKtGs0Hp8irJmJdbjJRGIyLwMTmQcHBzQtGlTU8RCRFZOs2KpPC5yO7jJ7ZGSpdAeK20i7o6Lyfh0yzkkZv2zQ1yQW2vMaNPRapKY8lZoCRQnaI+XRCAi8zI4kXnzzTexaNEiLF68mMNKRDWMPiuWchUqfPdcR0glkjLnk2w7l4Rvft2FnrI72CUNQqraDQBwPdsOk38+i2/HSqyil6Oi96vvSiwiMh2DE5nDhw9j//792L59O1q2bAmZTKZzfuPGjUYLjoisi74rlh7kKDC0bf1Sz205nYBNmzcjzOEhAKCJXbo2kbG2Xg59329VV3IRUeUZnMjUqlULw4cPN0UsRGTl9F2xVNZ1MX+ex7E9f6CRnQJqIcFJZX1cUnnrXGNNvRxVfb9EZHoGJzKrVq0yRRxEZAM0u+6mZBaUOm+krJVJQggcP34CF/btgrtUIFvtgAOFjfFAuJb5WtbQy1HZ90tE5mNwiQIiqrk0u+4CMKhEQFxcHHbt2gkpBBJUtbBFEVJuEgNYRy9HZd8vEZlPpXb2jYmJwa+//orExEQUFhbqnGMFbKLqrX8rX3w7tn2JfVXKKxEQFBSEWvWbYEd8IS6r6qFkWqDr8cKPltyMrjLvl4jMx+BE5uuvv8a///1vjB8/Hps3b8aECRNw48YNnDx5ElOmTDFFjERkZfq38kVkiE+ZyYUQAqdPn0arVq3g6OgIiUSCJ3r3x8LrJ/S6/6O9HGVtRvfBoBao7SI3S3JT0fslIssxOJFZunQpvvvuO4wZMwarV6/GO++8g8aNG+PDDz9Eenq6KWIkIitUVomAvLw8/Pbbb4iLi8OtW7cQHR0NiUSCzo3rlDvfBACkEmDxmHbaXo6yNqNLzizA5LVndY6Zeqddc5dEICL9GDxHJjExEV27dgUAODk5ITs7GwDw3HPP4X//+59xoyMiq6RSCxy7kYbNsUk4diMNKnVxqpGYmIjly5cjLi4OdnZ2aNSokfY55c030Vg8pj0GtvHTvkZZm9GVRrPT7o6LyZV8V0RkiwzukfHx8UF6ejoCAgLg7++P48ePIzQ0FPHx8RBC3185RGSrSh3qcZfjxWaFSLp0CkII1KlTByNHjoSPj4/Oc8uab1Jab4o+m+89ytr2oCEi8zA4kenbty+2bNmCdu3aYcKECZg+fTpiYmJw6tQpjBgxwhQxEpGJaSbTAsUJRJem9UpNBEob6pFDidYF13Dn7ywAQJs2bTBo0CA4ODiU+lr6zjepzPJra9qDhojMw+BE5rvvvoNarQYATJkyBXXq1MHRo0cxZMgQvPLKK0YPkIhMS9PDkp6Tj887AS/8eBKerk4lekjKG+qpJc1HkZDisn1j/HvIUNjblT1qrUmaUjLzkZ5bCLUoTp4eT2aqsvzaGvagISLzMDiRkUqlkEr/+SX19NNP4+mnnzZqUERkPOUtXX60h0Vu989zkjML8OqaM1j6TDvtnBXdoR7NQA6ggAz7C5tAKeyQUeCEk7celtkbUtqwlMbjw0sVbUZXHkOTIEsu7yaiqjE4kenZsyd69+6NXr16oVu3bnB0tPymVUTVgSk+TMtaujxrcAgiQ3wqnEw79X9nsRgSDGzjq+3lcIISPR1uIk7lhZuq4oTlvvqfze3K6g0pawWSRvL/T9b9dmx79G/lq50cPGnNGUgAvZKZyuy0W14bcY8YIutncCLTr18/HDp0CAsWLEBRURE6duyok9g4OzubIk6ias0UH6ZlJQ6a1T3TIoIqnEyrFsDktWewTNoe9dwc4SvNQk+Hm3CWFKGWNB8JqtpQPbb4sbTeEJVa4N2NF/RKRh6drFvW5ODSVGan3YraSJNUEZH1MjiRef/99wEARUVFOHnyJA4ePIgDBw7g888/h1QqRUEBx6aJDGGKD9Py5rNoBoWWH7qp9/0+2vI3PuosRZT8GiQA0tVOOFDYWCeJKa83ZPG+OGTkKSt8ndIm65Y2OfhhbiE+3la1nXb1aSOugCKyfpUqUQAAN2/exIULF3Du3DmcP38ebm5u6NmzpzFjI6r2TPVhWtHSZQEgr1Cl172cUIjQgis4cjgHEgBXi7zwl9IfRY8lMQDw9BP++P38XZ2hMZVaYNWRW3rHDpQcniptM7qoVlXbaVefNuIKKCLrZ3Ai88wzz+DgwYNQKBTo2bMnevXqhXfffRdt2rSBRMK/WogMYaoPU2Ot2nFAEYY6XoKTpAhSOxmGDxuCO6iD+MeGelzkdrCTSrBwzzXtMR93OcZ08odSJZCRX3FvzKMeHZ4qa+5QVXfa1beNuAKKyLoZnMisW7cOXl5eePHFF9G3b19079690vNi5s6di40bN+LKlStwcnJC165dMW/ePDRv3lx7TUFBAd58802sW7cOCoUCUVFRWLp0Kby9vSv1mkTWxFQfpsaqHF0Ie8QVeaG+XRaGDBmBVq2aoBUAtRp4f/NFpOcWF43NUZTs3UnJUmDhnjiDXu/x4SlTTsTVt42soQo3EZXN4BIFaWlpWLFiBQoLCzFz5kx4eXmha9eueO+997Br1y6D7nXw4EFMmTIFx48fx+7du6FUKtGvXz/k5uZqr5k+fTq2bt2K9evX4+DBg7h79y433qNqw1Qfppqly5XpI3VGIVwkCu3jM0V+OCxtjT6hjQEUJxdT1p7RJjHGppmsq5k79HiPlbFKEVTURhKUrMJNRNbH4ESmdu3aGDJkCBYsWIDTp0/j/PnzaNasGebPn48BAwYYdK8dO3Zg/PjxaNmyJUJDQ7F69WokJibi9OnTAIDMzEysXLkSCxYsQN++fdGhQwesWrUKR48exfHjxw0NncjqmOrDVLN02dD9VzIzMzFAdgl9HG5CiuKNLwWkSM9XYfelFIPrHxnC18NRO7G5orlDQPHcIU2Np8oor/ZTZVZAEZFlVKpHZuPGjXj99dfRpk0bBAcH4/fff8fgwYOxYMGCKgWTmZkJAPD0LP6lffr0aSiVSkRERGivCQ4Ohr+/P44dO1al1yKyBqb+MK3lLCt5zMketZxlOq8nhRrt7G4jPj4ecokKgIAc/wwXaSYdH7+ZZlD9I0M8WqvNkLlDVaFZ3u3jodvj5fNIUmUMjxbZrGrMRKTL4Dky9erVg5eXF3r06IGXXnoJvXv3RuvWrasciFqtxrRp09CtWze0atUKAJCSkgIHBwfUqlVL51pvb2+kpKSUeh+FQgGF4p9u8ays4vovSqUSSqVhEw7Lo7mXMe9JpavubR3e3AtLnwnFZ9uvICXrkeXE7o54d0Awwpt7Gfze91y+h+m/xJbYsRcACgqVmNA1AKuOJgAAnKFAN/ub8JLmAQDi1PVwuqg+1HZSyB/pE0nPyceJ66mQ25mmOGxGbgGm/e80Fo5ui8IitV6vk5qZC6XSvUqvG97cC72DeuB0wkM8yFHAy1WODgG1YSeVGOVnbs/lezrfW7lU4OOOwO6/7yKypV+V70+lq+6/N6yFKdtZ33tKhIElq//++2+0bNmyUkGVZ9KkSdi+fTsOHz6MBg0aAADWrl2LCRMm6CQmANCpUyf06dMH8+bNK3Gf2bNnY86cOSWOr127lpv1ET0mIyMDt2/fhkqlgp2dHfz9/eHh4WHpsIiIkJeXh2eeeQaZmZlwdy/7DxaDe2R+/fVXvPDCCwgICKhSgI+aOnUqfv/9dxw6dEibxACAj48PCgsLkZGRodMrc+/ePfj4+JR6r5kzZ2LGjBnax1lZWWjYsCH69etXbkMYSqlUYvfu3YiMjIRMVrL7noyHbW2Y4zfS8OJ/T1V43crnOiDl4BaoVCpIXT3xe4YvZnrI8MEpKRRqy84LebtfM8zfda3C61Y81xFdrHSPF5VaIOqrQzq9bICmR0aND09JUcvVCTun9eQ8HBPg7w3zMGU7a0ZUKmJwIrN582b85z//Qa9evTBx4kRER0dDLpcbHCBQPCb+2muvYdOmTThw4AACAwN1znfo0AEymQx79+5FdHQ0AODq1atITExEWFhYqfeUy+WlxiOTyUzyw2yq+1JJbOuK7biYjHc3XIBCVfEHY1qBGqNGjcLZs2fRo2cv7FlwAEAuFGqJXs83lL71kgAgMaNQrxjSC1RW+zNx6kYaEh4qUHL2U7ECtQQJDxU4eyebG+6ZEH9vmIcp2lnf+xk82Tc2NhYnT55Ey5Yt8cYbb8DHxweTJk3CyZMnDQ5yypQpWLNmDdauXQs3NzekpKQgJSUF+fn5AAAPDw9MnDgRM2bMwP79+3H69GlMmDABYWFh6NKli8GvR1SdaZYrl7f5XCNpOlrbFy9brufmCE9PT4SHh8NBZo93ooJNGp+PhyOmRzTT69oAT/2Gga15jxduuEdkHgYnMgDQrl07fP3117h79y5WrlyJO3fuoFu3bmjTpg0WLVqkXX1UkW+//RaZmZno3bs3fH19tV+//PKL9pqFCxfiySefRHR0NHr27AkfHx9s3LixMmETVVsVLYu2gxpdZAnoI7+JDvZJaOFWWGJJd2krnIzF00WGg2/3wdS+TfVabv5cWCOb3+OFG+4RmUelEhkNIQSUSiUKCwshhEDt2rWxePFiNGzYUCcZKe/5pX2NHz9ee42joyOWLFmC9PR05ObmYuPGjWXOjyGqqcpbruwuKcAg+WW0sL8PALhQ5IPXB3cqMS8jNct0PQPpuUqcTnio93JzB3upze/xwg33iMyjUonM6dOnMXXqVPj6+mL69Olo164dLl++jIMHDyIuLg7/+c9/8Prrrxs7ViIqQ1nDE43t0jBEfgl1pPnIF/Y4ghZ46ekhGNCmvs51Oy4mY97Oq2aJUd+9W8y1x4uplJe0aVh7MkZkCwye7Nu6dWtcuXIF/fr1w8qVKzF48GDY2eluVDFmzBi88cYbRguSiMpX2vBEZ1kiQuxTAQDJKjccLAzEC71bwMPJASq10H6AaubWOJhof5jSYuzfyheRIRVXry7vurKKSVoTTTL2eL0oAFg4uq3VJ2NEtsDgROapp57CCy+8gPr165d5jZeXF9RqdZUCIyL9aYYxUjILtPNk0tXOEAKILfLFuSI/CEiw5MANLDlwQ1t4MTLEx2QlBzQeLwSpoW/16tKuM2UxSWN7PBnzcrbHg8vHEdGChW+JjMHgoaUPPvig3CSGiMxPM4whh1I7jBGnqoPfFC0RW1Qf4rHBDU3hxcX74oxacsAc81lMXUzSFDTJ2NC29TknhsjI9OqReXSDuYpUtd4SERmusLAQBddPYJzndWzKb4HUfACQIEM4lXq9QHGSserIrSq/di0nGT6LLi5T8ngviY+Re0kqKiapqQkVGeJjdcNMRGQaeiUyZ8+e1Xl85swZFBUVoXnz5gCAa9euwc7ODh06dDB+hERUrtTUVKxfvx4PHjyARCKBrzQLqah4F2sBlLvnjL6WPNse3Zp6AYBe816qwpBiktxkjqhm0CuR2b9/v/bfCxYsgJubG3788UfUrl0bAPDw4UNMmDABPXr0ME2URFSCEAJnz57F9u3bUVRUBDc3N4iATjh3Ur99nDRqOcmQWcmExtfDEV0a/5Mw6DvvpbK4yRwRPc7gOTJffvkl5s6dq01iAKB27dr45JNP8OWXXxo1OCIqnUKhwKZNm7B161YUFRWhadOmCOo1DN8YmMQAwIRuxaVBKtNv8sEg8y4f5iZzRPQ4gxOZrKws3L9/v8Tx+/fvIzs72yhBEVH59u3bhwsXLkAikSA8PByjnx6DT3fFG3QPzYZsU/s2xbdj21fqw7+2i4PBz6kKbjJHRI8zOJEZPnw4JkyYgI0bN+LOnTu4c+cONmzYgIkTJ2LEiBGmiJGIHtO7d28EBARg/Pjx6N69O07eemjQ6iNNIvDBoBb4Kz4dJ+PTUVikMjgOcw/h6LszMCf6EtUcBu8js2zZMrz11lt45plnoFQWj6vb29tj4sSJmD9/vtEDJCKgoKAA586dQ6dOnSCRSODk5KRTysPQhMLHwxFDQn3x8bbL2gRIXokN8SwxhFPWJnPGXiFFRLbB4ETG2dkZS5cuxfz583Hjxg0AQJMmTeDi4mL04IgIuHv3LmJiYvDw4UPY29uXujpQ34RiQCsfPB/WCA9zCzFl7ZlKb4RX1iZ35qLvzsBEVP0ZnMhouLi4oE2bNsaMhYgeIYTAX3/9hV27dkGtVqNWrVplFkwtbWffx/l6OGLxM+0BAN3n7atSEgNYfgjH1CukiMg26JXIjBgxAqtXr4a7u3uF82A2btxolMCIqoPK1gPKz8/Hli1bcOXKFQBAcHAwhg4dCkfH0nteNHNHJq05Awmgk6Q8nngcu5FWpd18OYRDRNZEr0TGw8MDEolE+28iqlhl6wElJSVh/fr1yMzMhJ2dHfr164cnnnhC+3+wLPrOHanMBN0PBrWAl5ucQzhEZHX0SmRWrVpV6r+JqhtDe1DKul5TD+jx4RtNPaBvx7ZH/1a+pT5fqVQiKysLtWvXxsiRI+Hn56d3/PrMHTFkgq5mLsz4boE1JnmxharaRPQPg+fI/PDDD+jTpw8CAwNNEQ+RxRjag1LW9R8MaoGPt12usB6QWg18vE3z/OIzmtcbNWoUAgMDyxxKKk9Fc0f0mU/zKEvPhTEnW6qqTUTFDN5HZu7cuWjatCn8/f3x3HPPYcWKFbh+/bopYiMyG0MrKpd3/eS1Z/WqBzR5bfHz60mzMUz+N9wlBdrXS1DVqlQSo1ILHLuRhs2xSTh2Iw0qdclUpby9WB7l6+Go7TmqCWyxqjYRVSKRiYuLQ2JiIubOnQtnZ2d88cUXaN68ORo0aICxY8eaIkYik6qoojJQ3IOiSQr0uV4/Aq3tkzHA4SpqSwvQQZZU6uvpa8fFZHSftw9jvj+ON9bFYsz3x9F93r5SP4A182l8PEomS891DsD/XuqCw//qW2OSGEN/BojIehicyABA/fr18eyzz2LhwoVYtGgRnnvuOdy7dw/r1q0zdnxEJmdIRWV9rteHHEpEOsShoywJUglwo8gTfxY2KvX19FGZ3oT+rXxx+F998b+XumDR023xw7gnAAD/GhCMsCZ1asxwEmD4zwARWQ+D58js2rULBw4cwIEDB3D27Fm0aNECvXr1QkxMDHr27GmKGIlMytCKyimZ+VV6PW9pNno53ISLRIkiIcVxZUPEqbzw+ECPvnFV1JugmZMTGeJTIjl5dD6NUqnEH5cNfz/VAatqE9kugxOZ/v37o27dunjzzTfxxx9/oFatWiYIi8h8DKmovONiMj7epv+n/eN7uvhKs9DP4RqkEiBD7Yj9hU2QIZwMjuvRlTUPshV69yZY+wZylloxxKraRLbL4ERmwYIFOHToED7//HMsWrQIvXr1Qu/evdG7d280a9bMFDESmVRFq3g0S5Af5iowZe3ZCufBaK7/YFDII6uS/v+cqxfc3DJwNQM4kF8fStiV+fyytv8vbWWNPqy9N8GSK4b0/RlgVW0i62NwIjNt2jRMmzYNAHDhwgUcPHgQO3bswNSpU1GvXj3cuXPH2DESmZQ+u+JqkhJ9p3pqPnyjWvlg119/o8DBHT4eLugU6AlVUS/su5aGPXrswvu4svan0Yc19ybou++OqRiyMzIRWZdKTfYVQuDMmTPYvXs3du7cif3790OtVqNu3brGjo/ILMpaxePz/0uQa7s46NUDUtvZXvuhq1arcejgAfy1cwNcHlzRTqB1cHCo8PVK+9Auby5MeSQo7tmw1t4Ea1kxVJnvCRFZnsE9MoMHD8aRI0eQlZWF0NBQ9O7dGy+99BJ69uzJ+TJk08rbFXdzbJJe91CL4r/Ys7OzsXHjRty6dQsAoFAoIITQKTNgaAXnyqyWsoXeBENWDJl6jg+rahPZHoMTmeDgYLzyyivo0aMH6y5RtVPWrrj6Dstk5ivx8dr9GOh+G0WKAjg4OODJJ59E69atDXq90uy+lKLXdY+yhQKP1rZiiFW1iWyLwYnM/Pnztf8uKCio1O6jRLZGn239JRBob5+ENrIUFCkAb28fjBo1EnXqVP1DccfFZPxw5JZe19pagUeuGCKiqjB4joxarcbHH3+M+vXrw9XVFTdv3gQAfPDBB1i5cqXRAySyBo9u618WF0khWtinAgAuF9VFq77DjJLEaOaQ6MP3/ws8Dm1b32Y2tdMkiWVFau1zfIjIsgxOZD755BOsXr0an3/+ORwcHLTHW7VqhRUrVhg1OCJropkMWstJVur5HCHHn4WNsF/RGMeVAUjLK9Kr9lFFDJkbY81zYcpSXu0nW5jjQ0SWZfDQ0k8//YTvvvsO4eHhePXVV7XHQ0NDceXKFaMGR2RO+mzG1r+VL1wc7PHcD39BAjU62CchSe2BZLU7ACBB/U+vwa0Heeg+b1+V90XRd27IxG6NrHouTHk0SeLj+8jYwhwfIrIsgxOZpKQkNG3atMRxtVoNpVJplKCIzE3fzdh2XEzG7C1/w0WiQG+Hm6gnzUUTkY4NBa1Q9P+b20kAeDjL8NWea0bZF0XfuSERIT56XWetuGKIiCrD4KGlkJAQ/PnnnyWOx8TEoF27dkYJisic9C24qLnOIScFQ+WXUE+aC4Www7FCf50kRpO8GGtflJo0h0SzYsiW5vgQkWUZ3CPz4YcfYty4cUhKSoJarcbGjRtx9epV/PTTT/j9999NESNZGX2GYCxVM8dQ+hZc7BvsjY+2XMQTskS0/P8JvalqFxwsbIwcIdc+x8fDEU8/0RAL98SV+ZqG7ovCXWeJiMpmcCIzdOhQbN26FR999BFcXFzw4Ycfon379ti6dSsiIyNNESNZEX2GYCxZM8dQ+m7G9uOfcWiviEVd+zwAwAWlN04X1Yd4rFPzi5GheJCr0Ou1DdkXhXNIiIhKZ3AiAwA9evTA7t27jR0LWTl96uEAsGjNHEPpm0zczixEltoRbhIF/iwMxB11rVKve5CrMNm+KJxDQkRUksFzZF544QX8+OOPJY5nZWXhhRdeMEpQZH30rYcze8vfFq+ZY4jykgk7qCFDEQAgoI4LjioDsEXRsswkRnM/U85p4RwSIiJdBicyq1evxuTJk/H6669DrVZrj+fn55ea4FD1oO8QTEpW2cMqj84NsRZlJR3ukgIMkl9GT4db8HWX47mwRqjr4YI84VDqfR5NTrgvChGR+VSq+vW2bdvwxx9/ICoqCg8fPjR2TGSFjFnnxlw1c/RRWtIRaJeGIfJLqCPNR11pDt4N94eDvdSg5ISVlImIzKNSc2RCQkJw4sQJREdHo1OnTtiyZQs8PW1/6SeVzZh1bqytZo4m6fh4ywUE5Mehuf0DAEC6xB3hAwdjyBNNda7Td8It57QQEZmewYmMRFL8S7hOnTrYs2cPXn31VYSFhekUk6Tqp6KiiRIUf6ALIXAvS1HuNda430lHHxmerXUD95XFSUzj1k/gvSFRkNnb6VxnaHLCSspERKZlcCIjxD8fUfb29lixYgVCQkIwefJkowZG1kXfvUwA2Nx+J0II/Prrr7h//z5cXFwwYsQING7cuMzrmZwQEVkPg+fI7N+/v8Qw0owZM7B9+3Z8+OGHRguMrI8+8z5scW6IRCLBkCFD0LRpU7z66qvlJjFERGRdDOqRUSqVeOGFF/D777+jRYsWOuciIiIQERFh1ODI+miGVo7fTMOxG2kABMIae6HLIz0UtjA3JDU1Fffv30fLli0BAA0aNMCzzz5r4aiIiMhQBiUyMpkMBQXWs+KELGP3pRSdCa+L998osXOvtQ6/CCFw9uxZbN++HQDg5eUFb29vC0dFRESVZfDQ0pQpUzBv3jwUFRWZIh6ycvoWWDQmzQZ6f1xIxrEbaZXeUE+hUGDTpk3YunUrioqK0KhRI7i6uhozVCIiMjODJ/uePHkSe/fuxa5du9C6dWu4uLjonN+4caPRgiProm+BxcgQH6MNI+24mIy52/7GjGDgnQ3noVBJKlW36e7dZPy87lfkZWdAIpGgT5++6N69m3YVHhER2SaDE5latWohOjraFLGQldN3d199qzpXRNP742CnmzoZWrfppy37cP3sYdhBIFctwwFlY2w/rMCs2ilWOfmYiIj0Z3Ais2rVKlPEQTZA3x15jbFzr7F6f3ZcTMamv66jrUwgUeWBw4WBUMAeEistYklERIbRe46MWq3GvHnz0K1bNzzxxBN49913kZ+fb8rYyMqYqqpzaQzp/SmNWq3WJkOxRX44UBiIvYVNofj/3N1ai1gSEZFh9E5k/vOf/+C9996Dq6sr6tevj0WLFmHKlCmmjI2sjCmrOj9KpRY4cv2+Xtc+3vsjhMCJEyfwww8/4Nj1VCRnFkBAgnhVHTxeJckai1gSEZFh9B5a+umnn7B06VK88sorAIA9e/Zg0KBBWLFiBaTSStWeJBuj7+6+lZ3oq1ILLN53HauOxCMjX6nXcx7t/cnPz8eWLVtw5cqV4pguXdDrHtZUxJKIiAyjdwaSmJiIgQMHah9HRERAIpHg7t27JgmMrJOpdu7dcTEZHT7ZjYV7rumVxDze+5OUlITvvvsOV65cgVQqRf/+/dGiVVu9XtvailgSEZH+9O6RKSoqgqOj7i98mUwGpVK/v5yp+jD2zr07Libj1TVn9L7+0d4fqQQ4duwY9uzZA7Vajdq1a2PkyJHw8/ODSi30KnRpjUUsiYhIP3onMkIIjB8/HnK5XHusoKAAr776qs5eMtxHpmYw1s69mgm5hvB2l2P2kJbo38oXe/fuxeHDhwEAISEhGDx4sDbhNvVQGBERWZ7eicy4ceNKHBs7dqxRg6Gap6LVSaX7J/Ho0KEDYmNj0bNnT3Ts2LHEBneaobBHSyoAxT0xhm6qR0RE1kfvRMYU+8ccOnQI8+fPx+nTp5GcnIxNmzZh2LBh2vNCCMyaNQvff/89MjIy0K1bN3z77bcICgoyeixkGYZPtBWQ5KRi0poC7Zyc119/HTKZrMxn2EIRSyIiqhyLLjfKzc1FaGgolixZUur5zz//HF9//TWWLVuGEydOwMXFBVFRUSxcWY0YMtFWDiUiHeLQX34NDaQZ2j1gyktiNDRDYUPb1kdYkzpMYoiIqgmDd/Y1pgEDBmDAgAGlnhNC4KuvvsL777+PoUOHAiheAu7t7Y3ffvsNTz/9tDlDJRPR7E1T1oRcjZycHAyQJcBZokSRkEAmUeG2EcshEBGRbbLaDWDi4+ORkpKCiIgI7TEPDw907twZx44ds2BkZEyaCbnA49vV4f+PCbSUJuP69etwliiRoXbEVkUIbqqKkxfuAUNEVLNZtEemPCkpKQAAb29vnePe3t7ac6VRKBRQKBTax1lZWQAApVJp1KXimntx+XnVhTf3wtJnQvHZ9itIyfonMXGEEmH28fCVZgMAbqk9caLIHyqpHeT/33/j5WzP74GR8GfaPNjO5sF2Ng9TtrO+97TaRKay5s6dizlz5pQ4vmvXLjg7Oxv99Xbv3m30e9ZUM4J1Hz98mImEhGxIpVI0aNAAbT09MQwAoNJe8+Dycfxx2YxB1gD8mTYPtrN5sJ3NwxTtnJeXp9d1VpvI+Pj4AADu3bsHX99/lsjeu3cPbdu2LfN5M2fOxIwZM7SPs7Ky0LBhQ/Tr1w/u7u5Gi0+pVGL37t2IjIzUa7IpGW7P5XvYcmM7UuGBtz3l+OCUFAq1RDsEtXB0W0S08C73HqQ//kybB9vZPNjO5mHKdtaMqFTEahOZwMBA+Pj4YO/evdrEJSsrCydOnMCkSZPKfJ5cLtfZtE9DJpOZ5IfZVPetibKzs7Fz5070798frq6uGNCmASTSJzF3298AcqFQS6BQSeDLPWBMij/T5sF2Ng+2s3mYop31vZ9FE5mcnBxcv35d+zg+Ph6xsbHw9PSEv78/pk2bhk8++QRBQUEIDAzEBx98AD8/P529Zqh6uH79OjZt2oS8vDyoVCqMHj0aQPEeML2D6mDnju34PLoN6nm4cA8YIiLSsmgic+rUKfTp00f7WDMkNG7cOKxevRrvvPMOcnNz8fLLLyMjIwPdu3fHjh07StR8IvNTqYVRNphTq9XYv3+/tsyAt7e3zko1ANr7Dmzty7+siIhIh0UTmd69e0OIsncPkUgk+Oijj/DRRx+ZMSqqyI6LySW2/K/McE9WVhY2bNiAxMREAEDHjh0RFRUFe3urHfEkIiIrw08MMsiOi8mYtOZMic3rUjILMGnNGW3ZgIrcvXsXa9asQX5+PuRyOQYPHoyWLVuaJmgiIqq2mMiQ3jSVqkvrQxMo3tBuztZLiAzxqXCYqU6dOnByckKtWrUwcuRIeHp6miJkIiKq5pjIkN4qqlQtACSXUzYgJycHLi4ukEgkkMvleO655+Dq6sqhJCIiqjSrLVFA1kffcgC7L5XcefnKlStYsmQJTpw4oT1Wq1YtJjFERFQlTGRIb/pWqv7hyC3suJgMACgqKsKOHTvwyy+/oKCgAJcvXy53gjcREZEh+Ocw6U1Tqbq84SXgn7kyHX3l2LghBsnJxUlNWFgYwsPDIZFwDxgiIjIOJjI1nCH7wWgqVb+65ky59xQAHLLvYvnyv1CkLISTkxOGDh2K5s2bm+AdEBFRTcZEpgarzH4w/Vv5YmK3Rlh55FaZ93WVKNDbIR5FSoGGDRsiOjoaHh4exg6fiIiIc2RqKs1+MI8PE2n2g9HMcSlNRIhPuffOEXKcKqqPRi3bY9y4cUxiiIjIZJjI1EAV7QcDFM9xUalLn5SrmSvz6ABUoF06akuKS65LAKS7NMLYEU/Czs7OmKETERHpYCJTAxmyH0xpNHNlAMAeanSV3UJvh5vo7XATMqgAALMGh7CwIxERmRwTmRpI3/1gyruufytfLBjSGMOcr6C5/QMIAdxS1UZdd2e9yxQQERFVFSf71kD67gdT3nXnzp3D5QPb4CaUcHB0RsN2vRDVpEmlq2ATERFVBhOZGkgzxyUls6DUeTISAD4exUuxH1dUVIRt27YhNjYWABAYGIgRI0bA1dXVpDETERGVhkNLNdCjc1we7zvRPC5rjotUKkVGRgYkEgl69+6NsWPHMokhIiKLYY9MDdW/lS++Hdu+xD4yPqXsIyOEgBACUqkUUqkUI0aMQFpaGho1amSByImIiP7BRKYG69/KF5EhPuXu7KtQKLBt2zY4Ojpi4MCBAAA3Nze4ublZKmwiIiItJjI1nJ1UgrAmdUo9l5KSgpiYGKSlpUEikaBz586oU6f0a4mIiCyBiQyVIITA6dOnsWPHDqhUKri5uWHkyJFMYoiIyOowkSEdCoUCW7duxd9//w0ACAoKwrBhw+Ds7GzhyIiIiEpiIkNaQgj89NNPuHv3LqRSKcLDwxEWFgaJhPvCEBGRdeLya9KSSCTo0aMHPDw8MGHCBHTt2pVJDBERWTX2yNRwBQUFSEtLQ/369QEAwcHBaNq0Kezt+aNBRETWjz0yNVhSUhKWL1+On3/+GVlZWdrjTGKIiMhW8BOrBhJC4Pjx49izZw/UajVq166N/Px8uLu7Wzo0IiIigzCRqWHy8/Px22+/4dq1awCAkJAQDB48GI6O+hWSJCIisiZMZGqQ27dvIyYmBllZWbCzs0NUVBQ6duzICb1ERGSzmMjUILGxscjKyoKnpydGjRoFHx8fS4dERERUJUxkapD+/fvDyckJPXr0gFwut3Q4REREVcZVS9VYQkICNm/eDCEEAEAmkyEiIoJJDBERVRvskamG1Go1Dh8+jAMHDkAIAT8/PzzxxBOWDouIiMjomMhUMzk5Odi0aRNu3rwJAGjTpg1CQ0MtHBUREZFpMJGpRuLj47Fx40bk5ORAJpNh4MCBaNu2raXDIiIiMhkmMtXEyZMn8ccffwAA6tati1GjRqFu3boWjoqIiMi0mMhUEw0aNICdnR3atGmDAQMGQCaTWTokIiIik2MiY8OysrK0ZQV8fX0xefJkeHp6WjgqIiIi8+HyaxukVquxd+9efP3117h79672OJMYIiKqadgjY2OysrKwYcMGJCYmAgDi4uLg5+dn4aiIiIgsg4mMDYmLi8OmTZuQn58PBwcHDBkyBC1btrR0WERERBbDRMYGqFQq7Nu3D0ePHgVQPB9m5MiRHEoiIqIaj4mMDbhw4YI2ienUqRMiIyNhb89vHRERET8NbUBoaChu3LiBkJAQtGjRwtLhEBERWQ2uWrJCKpUKf/75JwoLCwEAEokE0dHRTGKIiIgewx4ZK/Pw4UPExMTg7t27SE9Px9ChQy0dEhERkdViImNFLl26hC1btkChUMDR0RHBwcGWDomIiMiqMZGxAkVFRdi1axdOnjwJoLjcwMiRI+Hh4WHhyIiIiKwbExkLe/jwIX799VekpKQAALp27Yq+ffvCzs7OwpERERFZPyYyFmZvb4+srCw4Oztj2LBhCAoKsnRIRERENoOJjAWo1WpIpcULxtzc3PD000/Dw8NDWwCSiIiI9MPl12b24MEDLF++HJcuXdIea9iwIZMYIiKiSmCPjBmdO3cO27Ztg1KpxL59+xAcHKztmSEiIiLDMZExg8LCQmzfvh2xsbEAgEaNGmHEiBFMYoiIiKqIiYyJpaamIiYmBvfv3wcA9OrVCz179mQSQ0REZARMZEwoKysLK1asgFKphKurK0aMGIHAwEBLh0VERFRtMJExIXd3d7Rr1w4PHjzAiBEj4OLiYumQiIiIqhUmMkZ27949ODk5aVch9evXD1KpFBKJxMKRERERVT+cqGEkQgicOnUK33//PTZu3Ai1Wg0AsLOzYxJDRERkIjaRyCxZsgSNGjWCo6MjOnfujL/++svSIelQKBTYsGEDtm3bBpVKBQcHByiVSkuHRUREVO1Z/dDSL7/8ghkzZmDZsmXo3LkzvvrqK0RFReHq1auoV6+epcNDSkoKNm3ahIcPH0IqlSI8PBxhYWHshSEiIjIDq++RWbBgAV566SVMmDABISEhWLZsGZydnfHDDz9YNC4hBO7fv48ff/wRDx8+hIeHB8aPH4+uXbsyiSEiIjITq+6RKSwsxOnTpzFz5kztMalUioiICBw7dqzU5ygUCigUCu3jrKwsAIBSqTTqcE9BQQHS0tKgUqkQFBSEJ598Ek5OThxSMgFNm7JtTYvtbB5sZ/NgO5uHKdtZ33tadSLz4MEDqFQqeHt76xz39vbGlStXSn3O3LlzMWfOnBLHd+3aBWdnZ6PG16hRI2RnZ8PZ2Rn79+836r2ppN27d1s6hBqB7WwebGfzYDubhynaOS8vT6/rrDqRqYyZM2dixowZ2sdZWVlo2LAh+vXrZ9TCjEqlErt378bgwYMhk8mMdl8qSdPWkZGRbGsTYjubB9vZPNjO5mHKdtaMqFTEqhMZLy8v2NnZ4d69ezrH7927Bx8fn1KfI5fLIZfLSxyXyWQm+WE21X2pJLa1ebCdzYPtbB5sZ/MwRTvrez+rnuzr4OCADh06YO/evdpjarUae/fuRVhYmAUjIyIiImtg1T0yADBjxgyMGzcOHTt2RKdOnfDVV18hNzcXEyZMsHRoREREZGFWn8iMHj0a9+/fx4cffoiUlBS0bdsWO3bsKDEBmIiIiGoeq09kAGDq1KmYOnWqpcMgIiIiK2PVc2SIiIiIysNEhoiIiGwWExkiIiKyWUxkiIiIyGYxkSEiIiKbxUSGiIiIbBYTGSIiIrJZTGSIiIjIZjGRISIiIptlEzv7VoUQAoD+5cD1pVQqkZeXh6ysLFZWNTG2tXmwnc2D7WwebGfzMGU7az63NZ/jZan2iUx2djYAoGHDhhaOhIiIiAyVnZ0NDw+PMs9LREWpjo1Tq9W4e/cu3NzcIJFIjHbfrKwsNGzYELdv34a7u7vR7kslsa3Ng+1sHmxn82A7m4cp21kIgezsbPj5+UEqLXsmTLXvkZFKpWjQoIHJ7u/u7s7/JGbCtjYPtrN5sJ3Ng+1sHqZq5/J6YjQ42ZeIiIhsFhMZIiIisllMZCpJLpdj1qxZkMvllg6l2mNbmwfb2TzYzubBdjYPa2jnaj/Zl4iIiKov9sgQERGRzWIiQ0RERDaLiQwRERHZLCYyREREZLOYyFTSkiVL0KhRIzg6OqJz587466+/LB2STTt06BAGDx4MPz8/SCQS/PbbbzrnhRD48MMP4evrCycnJ0RERCAuLs4ywdqwuXPn4oknnoCbmxvq1auHYcOG4erVqzrXFBQUYMqUKahTpw5cXV0RHR2Ne/fuWShi2/Ttt9+iTZs22k3CwsLCsH37du15trFpfPbZZ5BIJJg2bZr2GNvaOGbPng2JRKLzFRwcrD1vyXZmIlMJv/zyC2bMmIFZs2bhzJkzCA0NRVRUFFJTUy0dms3Kzc1FaGgolixZUur5zz//HF9//TWWLVuGEydOwMXFBVFRUSgoKDBzpLbt4MGDmDJlCo4fP47du3dDqVSiX79+yM3N1V4zffp0bN26FevXr8fBgwdx9+5djBgxwoJR254GDRrgs88+w+nTp3Hq1Cn07dsXQ4cOxd9//w2AbWwKJ0+exPLly9GmTRud42xr42nZsiWSk5O1X4cPH9aes2g7CzJYp06dxJQpU7SPVSqV8PPzE3PnzrVgVNUHALFp0ybtY7VaLXx8fMT8+fO1xzIyMoRcLhf/+9//LBBh9ZGamioAiIMHDwohittVJpOJ9evXa6+5fPmyACCOHTtmqTCrhdq1a4sVK1awjU0gOztbBAUFid27d4tevXqJN954QwjBn2djmjVrlggNDS31nKXbmT0yBiosLMTp06cRERGhPSaVShEREYFjx45ZMLLqKz4+HikpKTpt7uHhgc6dO7PNqygzMxMA4OnpCQA4ffo0lEqlTlsHBwfD39+fbV1JKpUK69atQ25uLsLCwtjGJjBlyhQMGjRIp00B/jwbW1xcHPz8/NC4cWM8++yzSExMBGD5dq72RSON7cGDB1CpVPD29tY57u3tjStXrlgoquotJSUFAEptc805Mpxarca0adPQrVs3tGrVCkBxWzs4OKBWrVo617KtDXfhwgWEhYWhoKAArq6u2LRpE0JCQhAbG8s2NqJ169bhzJkzOHnyZIlz/Hk2ns6dO2P16tVo3rw5kpOTMWfOHPTo0QMXL160eDszkSGqoaZMmYKLFy/qjHOT8TRv3hyxsbHIzMxETEwMxo0bh4MHD1o6rGrl9u3beOONN7B79244OjpaOpxqbcCAAdp/t2nTBp07d0ZAQAB+/fVXODk5WTAyTvY1mJeXF+zs7ErMxr537x58fHwsFFX1pmlXtrnxTJ06Fb///jv279+PBg0aaI/7+PigsLAQGRkZOtezrQ3n4OCApk2bokOHDpg7dy5CQ0OxaNEitrERnT59GqmpqWjfvj3s7e1hb2+PgwcP4uuvv4a9vT28vb3Z1iZSq1YtNGvWDNevX7f4zzQTGQM5ODigQ4cO2Lt3r/aYWq3G3r17ERYWZsHIqq/AwED4+PjotHlWVhZOnDjBNjeQEAJTp07Fpk2bsG/fPgQGBuqc79ChA2QymU5bX716FYmJiWzrKlKr1VAoFGxjIwoPD8eFCxcQGxur/erYsSOeffZZ7b/Z1qaRk5ODGzduwNfX1/I/0yafTlwNrVu3TsjlcrF69Wpx6dIl8fLLL4tatWqJlJQUS4dms7Kzs8XZs2fF2bNnBQCxYMECcfbsWZGQkCCEEOKzzz4TtWrVEps3bxbnz58XQ4cOFYGBgSI/P9/CkduWSZMmCQ8PD3HgwAGRnJys/crLy9Ne8+qrrwp/f3+xb98+cerUKREWFibCwsIsGLXteffdd8XBgwdFfHy8OH/+vHj33XeFRCIRu3btEkKwjU3p0VVLQrCtjeXNN98UBw4cEPHx8eLIkSMiIiJCeHl5idTUVCGEZduZiUwlffPNN8Lf3184ODiITp06iePHj1s6JJu2f/9+AaDE17hx44QQxUuwP/jgA+Ht7S3kcrkIDw8XV69etWzQNqi0NgYgVq1apb0mPz9fTJ48WdSuXVs4OzuL4cOHi+TkZMsFbYNeeOEFERAQIBwcHETdunVFeHi4NokRgm1sSo8nMmxr4xg9erTw9fUVDg4Oon79+mL06NHi+vXr2vOWbGeJEEKYvt+HiIiIyPg4R4aIiIhsFhMZIiIisllMZIiIiMhmMZEhIiIim8VEhoiIiGwWExkiIiKyWUxkiIiIyGYxkSEioxo/fjyGDRtm6TCsygcffICXX37Z0mForV69GgcOHChx/NKlS2jQoAFyc3PNHxRRJTGRITKx8ePHQyKRQCKRQCaTITAwEO+88w4KCgosHZpJLFq0CKtXr9br2pqQ9KSkpGDRokX497//rT3Wu3dvTJs2zXJBlSEkJARdunTBggULLB0Kkd6YyBCZQf/+/ZGcnIybN29i4cKFWL58OWbNmmXpsEzCw8MDtWrVsnQYVmPFihXo2rUrAgICLB0K9u/fj27duuGNN97A8OHD0b59e3z77bc610yYMAHffvstioqKLBQlkWGYyBCZgVwuh4+PDxo2bIhhw4YhIiICu3fv1p6fPXu2ttfm0S9Nz4ZarcbcuXMRGBgIJycnhIaGIiYmRuc1/v77bzz55JNwd3eHm5sbevTogRs3bgBAqfdu1KgRhBBo2rQpvvjiC517xcbGQiKR4Pr163jrrbfw5JNPas999dVXkEgk2LFjh/ZY06ZNsWLFCgAle1liYmLQunVrODk5oU6dOoiIiEBubi5mz56NH3/8EZs3b9bGpBnu+Ne//oVmzZrB2dkZjRs3xgcffAClUlluG9+5cwdjxoyBp6cnXFxc0LFjR5w4cUJ7fvPmzWjfvj0cHR3RuHFjzJkzR+fDWiKRYMWKFRg+fDicnZ0RFBSELVu2aM+rVCpMnDhR+z1o3rw5Fi1aVG5MALBu3ToMHjxY+3j8+PE4ePAgFi1apH3f8fHxFX4fhBCYPXs2/P39IZfL4efnh9dff73C19fIyMjA0KFD0bJlS7z11luYP38+Zs6cWeK6yMhIpKen4+DBg3rfm8iizFLRiagGGzdunBg6dKj28YULF4SPj4/o3Lmz9lh2drZONeovvvhCODs7iwsXLgghhPjkk09EcHCw2LFjh7hx44ZYtWqVkMvl4sCBA0IIIe7cuSM8PT3FiBEjxMmTJ8XVq1fFDz/8IK5cuSKEEDr3vn79umjatKl47rnnhBBC/Oc//xEhISE6Mb/++uuiZ8+eQgghtmzZIjw8PERRUZEQQohhw4YJLy8v8a9//Uv72gBEXFxcifd79+5dYW9vLxYsWKCtBL1kyRKRnZ0tsrOzxVNPPSX69++vjU2hUAghhPj444/FkSNHRHx8vNiyZYvw9vYW8+bNK7ONs7OzRePGjUWPHj3En3/+KeLi4sQvv/wijh49KoQQ4tChQ8Ld3V2sXr1a3LhxQ+zatUs0atRIzJ49W3sPAKJBgwZi7dq1Ii4uTrz++uvC1dVVpKWlCSGEKCwsFB9++KE4efKkuHnzplizZo1wdnYWv/zyS5lxpaWlCYlEolNUNiMjQ4SFhYmXXnpJ+76Liooq/D6sX79euLu7iz/++EMkJCSIEydOiO+++67M137cyZMnBQBx584dsWrVKrF///4yr+3cubOYNWuW3vcmsiQmMkQmNm7cOGFnZydcXFyEXC4XAIRUKhUxMTGlXn/s2DHh6Oio/YAsKCgQzs7O2g9ljYkTJ4oxY8YIIYSYOXOmCAwMFIWFheXGolarxfDhw0WHDh1EXl6eEEKIpKQkYWdnJ06cOCGEKP7A9vLyEqtXrxZCCPHw4UMhlUrFyZMnhVqtFp6enmLu3LnaRGzNmjWifv36Ou9Xk8icPn1aABC3bt0qs20eTfLKMn/+fNGhQ4cyzy9fvly4ublpk47HhYeHi08//VTn2H//+1/h6+urfQxAvP/++9rHOTk5AoDYvn17ma87ZcoUER0dXeb5s2fPCgAiMTFR5/jjFZqFqPj78OWXX4pmzZpV+D0uS1ZWlvDy8hJjx44V7733XrmJzPDhw8X48eMr9TpE5sahJSIz6NOnD2JjY3HixAmMGzcOEyZMQHR0dInrEhMTMWzYMLz11lt46qmnAADXr19HXl4eIiMj4erqqv366aeftENHsbGx6NGjB2QyWblxvPfeezh27Bg2b94MJycnAICfnx8GDRqEH374AQCwdetWKBQKjBo1CgBQq1YthIaG4sCBA7hw4QIcHBzw8ssv4+zZs8jJycHBgwfRq1evUl8vNDQU4eHhaN26NUaNGoXvv/8eDx8+rLC9fvnlF3Tr1g0+Pj5wdXXF+++/j8TExDKvj42NRbt27eDp6Vnq+XPnzuGjjz7Sab+XXnoJycnJyMvL017Xpk0b7b9dXFzg7u6O1NRU7bElS5agQ4cOqFu3LlxdXfHdd9+VG1d+fj4AwNHRscL3XNH3YdSoUcjPz0fjxo3x0ksvYdOmTQbNY3Fzc8O+ffuQl5eHJUuWYPDgwRgyZAjOnj1b4lonJyeddiGyZkxkiMzAxcUFTZs2RWhoKH744QecOHECK1eu1LkmNzcXQ4YMQVhYGD766CPt8ZycHADAtm3bEBsbq/26dOmSdp6MJikpz5o1a7Bw4UJs2rQJ9evX1zn34osvYt26dcjPz8eqVaswevRoODs7a8/37t0bBw4c0CYtnp6eaNGiBQ4fPlxuImNnZ4fdu3dj+/btCAkJwTfffIPmzZsjPj6+zDiPHTuGZ599FgMHDsTvv/+Os2fP4t///jcKCwvLfE5F7z8nJwdz5szRab8LFy4gLi5OJ8l4PBGUSCRQq9UAiue6vPXWW5g4cSJ27dqF2NhYTJgwody4vLy8AECv5A0o//vQsGFDXL16FUuXLoWTkxMmT56Mnj17Vjh36FGtW7fGhg0b8NVXX2HevHnw8PBAnz59cP/+fZ3r0tPTUbduXb3vS2RJTGSIzEwqleK9997D+++/r/2LXQiBsWPHQq1W47///S8kEon2+pCQEMjlciQmJqJp06Y6Xw0bNgRQ3JPw559/lvmhduzYMbz44otYvnw5unTpUuL8wIED4eLigm+//RY7duzACy+8oHO+V69eOHz4MPbu3YvevXsDKE5u/ve//+HatWvaY6WRSCTo1q0b5syZg7Nnz8LBwQGbNm0CADg4OEClUulcf/ToUQQEBODf//43OnbsiKCgICQkJJTbpm3atEFsbCzS09NLPd++fXtcvXq1RPs1bdoUUql+vwaPHDmCrl27YvLkyWjXrh2aNm2q7RErS5MmTeDu7o5Lly7pHC/tfQMVfx+cnJwwePBgfP311zhw4ACOHTuGCxcu6BX/40JCQrB06VJkZmbi/PnzOucuXryIdu3aVeq+RObGRIbIAkaNGgU7OzssWbIEQPGqpT179mD58uXIyclBSkoKUlJSkJ+fDzc3N7z11luYPn06fvzxR9y4cQNnzpzBN998gx9//BEAMHXqVGRlZeHpp5/GqVOnEBcXh//+97+4evUqUlJSMHz4cDz99NOIiorS3vvRv8Lt7Owwfvx4zJw5E0FBQQgLC9OJt2fPnsjOzsbvv/+uk8j8/PPP8PX1RbNmzUp9nydOnMCnn36KU6dOITExERs3bsT9+/fRokULAECjRo1w/vx5XL16FQ8ePIBSqURQUBASExOxbt063LhxA19//bU28SnLmDFj4OPjg2HDhuHIkSO4efMmNmzYgGPHjgEAPvzwQ/z000+YM2cO/v77b1y+fBnr1q3D+++/r/f3LCgoCKdOncLOnTtx7do1fPDBBzh58mS5z5FKpYiIiMDhw4d1jjdq1AgnTpzArVu38ODBA22vT3nfh9WrV2PlypW4ePEibt68iTVr1sDJyUm7rHvmzJl4/vnny4zlzJkzmD17Nq5evYqioiJkZGRg/vz5cHR0REhIiPa6W7duISkpCREREXq3DZFFWXqSDlF1V9aE1rlz54q6deuKnJwc0atXLwGgxNeqVauEEMWTdL/66ivRvHlzIZPJRN26dUVUVJQ4ePCg9n7nzp0T/fr1E87OzsLNzU306NFD3LhxQ+zfv7/UewcEBOjEc+PGDQFAfP7556W+j9DQUOHj46N9rFmR8/TTT5f5fi9duiSioqJE3bp1hVwuF82aNRPffPON9trU1FQRGRkpXF1dBQDtBNS3335b1KlTR7i6uorRo0eLhQsXCg8Pj3Lb+datWyI6Olq4u7sLZ2dn0bFjR+3EWSGE2LFjh+jatatwcnIS7u7uolOnTjqrfgCITZs26dzTw8ND+z0oKCgQ48ePFx4eHqJWrVpi0qRJ4t133xWhoaHlxvXHH3+I+vXrC5VKpT129epV0aVLF+Hk5CQAiPj4eO25sr4PmzZtEp07dxbu7u7CxcVFdOnSRezZs0d7fty4caJXr15lxnH37l3xwgsviEaNGgmZTCYcHR1Fu3btxLZt23Su+/TTT0VUVFS574nImkiEEMIC+RMRWZk///wT4eHhuH37Nry9vS0dTrUhhEDnzp0xffp0jBkzpsLrzfF9WL16NRo1alRiSLCwsBBBQUFYu3YtunXrZpLXJjI2Di0R1XAKhQJ37tzB7NmzMWrUKCYxRiaRSPDdd99VuMLIGr4PiYmJeO+995jEkE1hjwxRDbd69WpMnDgRbdu2xZYtW0qsaCLz4PeBqHKYyBAREZHN4tASERER2SwmMkRERGSzmMgQERGRzWIiQ0RERDaLiQwRERHZLCYyREREZLOYyBAREZHNYiJDRERENouJDBEREdms/wPOhYxkfapo2QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(Y_test, Y_pred)\n", + "plt.xlabel(\"Rzeczywista cena (tys. $)\")\n", + "plt.ylabel(\"Przewidywana cena (tys. $)\")\n", + "plt.title(\"Regresja - Boston Housing\")\n", + "plt.plot([0, 50], [0, 50], '--', color='gray')\n", + "plt.grid(True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "id": "5df22a98-1108-4f7a-b67a-1dd57d727e95", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Przetestuj na jakimśtam domu" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "id": "1891f025-f769-49d5-9a22-8cb3288c1656", + "metadata": {}, + "outputs": [], + "source": [ + "new_house = [[0.1, 25.0, 5.0, 0, 0.5, 6.0, 60, 5.0, 4, 300, 15.0, 390.0, 10.0]]\n", + "new_house_scaled = scaler.transform(new_house)" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "id": "58b9474b-c396-4945-a4f5-4ab6fed1c022", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 53ms/step\n", + "Przewidywana cena domu: 20.08 tys. $\n" + ] + } + ], + "source": [ + "predicted_price = model.predict(new_house_scaled)\n", + "print(f\"Przewidywana cena domu: {predicted_price[0][0]:.2f} tys. $\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "1ad0f1b1-dffb-4418-a6ea-5990827e18d2", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Zapisz i wczytaj model" + ] + }, + { + "cell_type": "markdown", + "id": "4e0291d4-19c4-4c36-9303-dc508a33de76", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### Zapisz" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "id": "ce0524da-85c0-4295-abfa-778ede7e950c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['scaler.save']" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import joblib\n", + "model.save(\"boston_model.keras\")\n", + "joblib.dump(scaler, \"scaler.save\")" + ] + }, + { + "cell_type": "markdown", + "id": "a6ccc2af-284c-413f-94b9-213f71ccdeb0", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### Wczytaj" + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "id": "0b837963-be8e-45c6-a892-724fb8194d37", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.models import load_model\n", + "import joblib\n", + "\n", + "model = load_model(\"boston_model.keras\")\n", + "scaler = joblib.load(\"scaler.save\")" + ] + }, + { + "cell_type": "markdown", + "id": "10712ab9-ff91-48a3-aa13-0bd5e7c4b42f", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### Testuj" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "id": "b3de28f5-3170-4283-94f4-db91527ebe4a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 97ms/step\n", + "Cena: 20.08 tys. $\n" + ] + } + ], + "source": [ + "new_house = [[0.1, 25.0, 5.0, 0, 0.5, 6.0, 60, 5.0, 4, 300, 15.0, 390.0, 10.0]]\n", + "new_house_scaled = scaler.transform(new_house)\n", + "prediction = model.predict(new_house_scaled)\n", + "print(f\"Cena: {prediction[0][0]:.2f} tys. $\")" + ] + }, + { + "cell_type": "markdown", + "id": "2c041416-51ff-4b9e-bb4d-c3431fa870e7", + "metadata": {}, + "source": [ + "# Dzień 6 - 20.05.2025" + ] + }, + { + "cell_type": "markdown", + "id": "cd20cae1-be7f-49ee-b112-15f4cd9cfc6f", + "metadata": {}, + "source": [ + "# CNN - Convolutional Neural Network\n", + "## zalety \n", + "- analiza przestrzenna - nie spłaszczamy obrazów\n", + "- wydajna - \n", + "- skuteczna - dokładność w rozpoznaniu wzorców wizualnych" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0c993d2e-5730-4084-a3c1-1bc001041ba1", + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf" + ] + }, + { + "cell_type": "markdown", + "id": "ca48ef25-a03a-4fcc-9595-a3bd6a958b21", + "metadata": {}, + "source": [ + "## Pobierz obrazy" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2ee7ebc4-4be9-4720-b605-abe3153477dd", + "metadata": {}, + "outputs": [], + "source": [ + "(X_train, Y_train),(X_validation, Y_validation) = tf.keras.datasets.cifar10.load_data()\n", + "Y_train = tf.keras.utils.to_categorical(Y_train, 10)\n", + "Y_validation = tf.keras.utils.to_categorical(Y_validation, 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8f6fd327-3219-4ad5-a5f6-c043ccd108ea", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + "\n", + "data_generator = ImageDataGenerator(\n", + " featurewise_center=True,\n", + " featurewise_std_normalization=True,\n", + " horizontal_flip=True,\n", + " vertical_flip=True\n", + ")\n", + "\n", + "data_generator.fit(X_train)\n", + "\n", + "X_valication = data_generator.standardize(X_validation.astype('float32'))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "1184eeaf-1cac-4a3f-b37d-b8edc3af40bd", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Conv2D, Dense, MaxPooling2D, Dropout, BatchNormalization, Activation, Flatten" + ] + }, + { + "cell_type": "markdown", + "id": "7f496a49-1466-4ceb-9b94-392fa21935a7", + "metadata": {}, + "source": [ + "## Stwórz model" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "56509616-c5fa-44ba-875c-5739e7411c60", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/sasza/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ], + "source": [ + "model = Sequential(layers=[\n", + " # blok 1\n", + " Conv2D(32, (3, 3),\n", + " padding='same',\n", + " input_shape=X_train.shape[1:]),\n", + " BatchNormalization(),\n", + " Activation('gelu'),\n", + " Conv2D(32, (3, 3), padding='same'),\n", + " BatchNormalization(),\n", + " Activation('gelu'),\n", + " MaxPooling2D(pool_size=(2, 2)),\n", + " Dropout(0.2),\n", + " # blok 2\n", + " Conv2D(64, (3, 3), padding='same'),\n", + " BatchNormalization(),\n", + " Activation('gelu'),\n", + " Conv2D(64, (3, 3), padding='same'),\n", + " BatchNormalization(),\n", + " Activation('gelu'),\n", + " MaxPooling2D(pool_size=(2, 2)),\n", + " Dropout(0.3),\n", + " # blok 3\n", + " Conv2D(128, (3, 3), padding='same'),\n", + " BatchNormalization(),\n", + " Activation('gelu'),\n", + " Conv2D(128, (3, 3), padding='same'),\n", + " BatchNormalization(),\n", + " Activation('gelu'),\n", + " MaxPooling2D(pool_size=(2, 2)),\n", + " Dropout(0.45),\n", + " # final\n", + " Flatten(),\n", + " Dense(10, activation='softmax')\n", + "\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "4d837958-3e5e-45a5-8d6c-33b2d7e1528b", + "metadata": {}, + "outputs": [], + "source": [ + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer='Adam',\n", + " metrics=['accuracy']\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "04b45a8e-58b2-43d8-8cf9-2fd86e961eb5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_3\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_3\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ conv2d_12 (Conv2D)              │ (None, 32, 32, 32)     │           896 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_12          │ (None, 32, 32, 32)     │           128 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ activation_12 (Activation)      │ (None, 32, 32, 32)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_13 (Conv2D)              │ (None, 32, 32, 32)     │         9,248 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_13          │ (None, 32, 32, 32)     │           128 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ activation_13 (Activation)      │ (None, 32, 32, 32)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d_6 (MaxPooling2D)  │ (None, 16, 16, 32)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_6 (Dropout)             │ (None, 16, 16, 32)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_14 (Conv2D)              │ (None, 16, 16, 64)     │        18,496 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_14          │ (None, 16, 16, 64)     │           256 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ activation_14 (Activation)      │ (None, 16, 16, 64)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_15 (Conv2D)              │ (None, 16, 16, 64)     │        36,928 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_15          │ (None, 16, 16, 64)     │           256 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ activation_15 (Activation)      │ (None, 16, 16, 64)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d_7 (MaxPooling2D)  │ (None, 8, 8, 64)       │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_7 (Dropout)             │ (None, 8, 8, 64)       │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_16 (Conv2D)              │ (None, 8, 8, 128)      │        73,856 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_16          │ (None, 8, 8, 128)      │           512 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ activation_16 (Activation)      │ (None, 8, 8, 128)      │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_17 (Conv2D)              │ (None, 8, 8, 128)      │       147,584 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_17          │ (None, 8, 8, 128)      │           512 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ activation_17 (Activation)      │ (None, 8, 8, 128)      │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d_8 (MaxPooling2D)  │ (None, 4, 4, 128)      │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_8 (Dropout)             │ (None, 4, 4, 128)      │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ flatten (Flatten)               │ (None, 2048)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense (Dense)                   │ (None, 10)             │        20,490 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ conv2d_12 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ batch_normalization_12 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ activation_12 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_13 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m9,248\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ batch_normalization_13 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ activation_13 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ max_pooling2d_6 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_6 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_14 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ batch_normalization_14 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ activation_14 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_15 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ batch_normalization_15 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ activation_15 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ max_pooling2d_7 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_7 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_16 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ batch_normalization_16 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ activation_16 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_17 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ batch_normalization_17 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ activation_17 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ max_pooling2d_8 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_8 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2048\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m20,490\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 309,290 (1.18 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m309,290\u001b[0m (1.18 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 308,394 (1.18 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m308,394\u001b[0m (1.18 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 896 (3.50 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m896\u001b[0m (3.50 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "id": "e0dff06e-57cd-4caf-a49e-2307764a9831", + "metadata": {}, + "source": [ + "## Uczenie modelu" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "227d98ed-a60d-4fcf-aa0a-2f9fc1b4050e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m195/195\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m49s\u001b[0m 222ms/step - accuracy: 0.1819 - loss: 2.8103 - val_accuracy: 0.1018 - val_loss: 97.6675\n", + "Epoch 2/5\n", + "\u001b[1m195/195\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 222ms/step - accuracy: 0.2692 - loss: 2.1237 - val_accuracy: 0.1161 - val_loss: 82.1247\n", + "Epoch 3/5\n", + "\u001b[1m195/195\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m48s\u001b[0m 248ms/step - accuracy: 0.3134 - loss: 1.9531 - val_accuracy: 0.1122 - val_loss: 135.0129\n", + "Epoch 4/5\n", + "\u001b[1m195/195\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m44s\u001b[0m 226ms/step - accuracy: 0.3663 - loss: 1.7459 - val_accuracy: 0.1282 - val_loss: 175.1613\n", + "Epoch 5/5\n", + "\u001b[1m195/195\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 204ms/step - accuracy: 0.3564 - loss: 1.7099 - val_accuracy: 0.1055 - val_loss: 170.8446\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(\n", + " x=data_generator.flow(X_train, Y_train, batch_size=16),\n", + " epochs=5,\n", + " verbose=1,\n", + " validation_data=(X_validation, Y_validation),\n", + " steps_per_epoch=len(X_train) // 256\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ac373983-4d3e-42c8-9481-d57ce925f66d", + "metadata": {}, + "source": [ + "## Testowanie" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "96f39332-a855-473a-b12e-aea90ff9c045", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 74ms/step\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGbCAYAAAAr/4yjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAFRJJREFUeJzt3HuQVnX9wPHPcl3cBRRcXBRbVka0FMeCyryt5oUEbDKTgZEJFjEyrxU11eQFxVAnTcYrTKUzxqShmTMmXijM1HRSsISUUKFUZrjIxZkUCPb7+6PZz8/H3QU1FMzXa4Y/nrPf5+x3zzns+3nO84WqUkoJAIiITjt7AgDsOkQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkERhJxs4cGBMmDAhHz/88MNRVVUVDz/88E6b09u9fY7vh+XLl0dVVVXceuutH4r97mgDBw6MSy65ZGdP433Tel3feeedO3sqbMdHOgq33nprVFVV5Z/q6uoYPHhwnHPOObFy5cqdPb135b777vuf/qXyUdcat3fyZ/ny5Tt7unyIddnZE9gVXHrppdHY2BgbN26MRx99NG666aa47777YtGiRbHbbrt9oHM5+uij480334xu3bq9q+fdd999ccMNN3xow9DQ0BBvvvlmdO3adWdPZZdUV1cXt912W8W2q6++Ol555ZX4yU9+0mYsvFeiEBEnnXRSDBs2LCIiJk2aFH379o1rrrkm7rnnnhg7dmy7z/nXv/4VNTU1O3wunTp1iurq6h2+311d6zu17Xm/jvuurqamJsaNG1ex7fbbb49169a12f5WpZTYuHFj9OjR4/2e4i7ho3p97Egf6dtHHfn85z8fERHLli2LiIgJEyZEbW1tvPjiizFixIjo2bNnnH766RER0dLSEtdee20cdNBBUV1dHXvttVdMnjw51q1bV7HPUkpMmzYtBgwYELvttlsce+yxsXjx4jbfu6PPFJ588skYMWJE7LHHHlFTUxOHHHJIzJgxI+d3ww03RERU3EZotaPnGBHx4osvxosvvrjdY7l27dqYMmVKDBkyJGpra6NXr15x0kknxV/+8peKce3d+9/WcT/mmGPi4IMPjqeffjoOP/zw6NGjRzQ2NsbNN9+83Tn99a9/jQkTJsR+++0X1dXVUV9fHxMnTozXXnutYtwll1wSVVVV8cILL8SECRNi9913j969e0dzc3O88cYbbfb7i1/8IoYOHRo9evSIPn36xJgxY+Lll1/e7nx2pIEDB8aoUaPigQceiGHDhkWPHj1i5syZ2/xspaqqqs07zFdffTUmTpwYe+21V3Tv3j0OOuig+PnPf97muf/85z/j+eeff8fza2lpicsvvzwGDBgQ1dXVcdxxx8ULL7zQZtycOXPyWO65554xbty4ePXVVyvGbOv6WLp0aZx66qlRX18f1dXVMWDAgBgzZkxs2LChYh+7wjnb1Xin0I7WX3Z9+/bNbVu2bInhw4fHkUceGT/+8Y/zttLkyZPj1ltvjebm5jjvvPNi2bJlcf3118fChQvjsccey9shF110UUybNi1GjBgRI0aMiAULFsSJJ54Ymzdv3u58HnrooRg1alT0798/zj///Kivr4/nnnsu7r333jj//PNj8uTJsWLFinjooYfa3GJ4v+Z43HHHRURs9/71Sy+9FL/5zW/itNNOi8bGxli5cmXMnDkzmpqa4m9/+1vsvffe23x+R8c9ImLdunUxYsSIGD16dIwdOzZ+9atfxVlnnRXdunWLiRMnbvN4vvTSS9Hc3Bz19fWxePHimDVrVixevDieeOKJiqBGRIwePToaGxtj+vTpsWDBgvjpT38a/fr1iyuvvDLHXH755XHhhRfG6NGjY9KkSbF69eq47rrr4uijj46FCxfG7rvvvs2fc0dasmRJjB07NiZPnhxnnnlmHHDAAe/q+StXrozDDjssqqqq4pxzzom6urqYO3dunHHGGfH666/HBRdckGO/+tWvxh/+8Id4p/8D/xVXXBGdOnWKKVOmxIYNG+Kqq66K008/PZ588skc03qtfvrTn47p06fHypUrY8aMGfHYY4+1OZbtXR+bN2+O4cOHx6ZNm+Lcc8+N+vr6ePXVV+Pee++N9evXR+/evSNi1zpnu5TyEXbLLbeUiCjz5s0rq1evLi+//HK5/fbbS9++fUuPHj3KK6+8UkopZfz48SUiyve+972K5//xj38sEVFmz55dsf3++++v2L5q1arSrVu3MnLkyNLS0pLjfvCDH5SIKOPHj89t8+fPLxFR5s+fX0opZcuWLaWxsbE0NDSUdevWVXyft+7r7LPPLu2dzvdjjqWU0tDQUBoaGtp8v7fbuHFj2bp1a8W2ZcuWle7du5dLL720YltElFtuuSW3dXTcSymlqampRES5+uqrc9umTZvKoYceWvr161c2b97c4X7feOONNvv75S9/WSKiPPLII7nt4osvLhFRJk6cWDH2lFNOKX379s3Hy5cvL507dy6XX355xbhnn322dOnSpc329jQ0NJSLL754u+PeauTIkW3OQUNDQ4mIcv/991dsb+84tIqIiu99xhlnlP79+5c1a9ZUjBszZkzp3bt3xfFrPQ/b03pdf/zjHy+bNm3K7TNmzCgRUZ599tlSSimbN28u/fr1KwcffHB58803c9y9995bIqJcdNFFua2j62PhwoUlIsqcOXM6nM+OOGf/q9w+iojjjz8+6urqYt99940xY8ZEbW1t3H333bHPPvtUjDvrrLMqHs+ZMyd69+4dJ5xwQqxZsyb/DB06NGpra2P+/PkRETFv3rzYvHlznHvuuRWvQt/6iqsjCxcujGXLlsUFF1zQ5pXL21/Rtuf9muPy5cvf0SqX7t27R6dO/7nMtm7dGq+99lrU1tbGAQccEAsWLNju8yPaHvdWXbp0icmTJ+fjbt26xeTJk2PVqlXx9NNPd7i/t95f37hxY6xZsyYOO+ywiIh25/T1r3+94vFRRx0Vr732Wrz++usREfHrX/86WlpaYvTo0RXHuL6+Pvbff/88xh+UxsbGGD58+Ht6bikl7rrrrjj55JOjlFLx8wwfPjw2bNhQcYwefvjhd/wuISKiubm5YhHFUUcdFRH/eUcZEfHUU0/FqlWr4hvf+EbFZ0wjR46MAw88MH7729+22efbr4/WdwIPPPBAu7f5Ina9c7YrcfsoIm644YYYPHhwdOnSJfbaa6844IAD8hdZqy5dusSAAQMqti1dujQ2bNgQ/fr1a3e/q1atioiIf/zjHxERsf/++1d8va6uLvbYY49tzq31VtbBBx/8zn+gD3iO29LS0hIzZsyIG2+8MZYtWxZbt27Nr7319lxH2jvurfbee+82HyoOHjw4Iv4TrdZf9G+3du3amDp1atx+++3587d6+z3niIiPfexjFY9bj8e6deuiV69esXTp0iiltDl2rT7oFVWNjY3v+bmrV6+O9evXx6xZs2LWrFntjnn7MXs3tnUsI/7/OmzvlteBBx4Yjz76aMW29q6PxsbG+Na3vhXXXHNNzJ49O4466qj44he/GOPGjctg7GrnbFciChHxmc98JlcfdeStr3hbtbS0RL9+/WL27NntPmdXWBq4s+f4ox/9KC688MKYOHFiXHbZZdGnT5/o1KlTXHDBBdHS0rLd57d33P9bo0ePjscffzy+853vxKGHHhq1tbXR0tISX/jCF9qdU+fOndvdT+sr5JaWlqiqqoq5c+e2O7a2tnaHzn972ltp1NG7yrdGOiLy5x83blyMHz++3ecccsgh73lu2zuW71ZH18fVV18dEyZMiHvuuScefPDBOO+882L69OnxxBNPxIABA3a5c7YrEYX/wqBBg2LevHlxxBFHbHPJX0NDQ0T859XJfvvtl9tXr17dZgVQe98jImLRokVx/PHHdziuo7/0H8Qct+XOO++MY489Nn72s59VbF+/fn3sueee73m/ERErVqxoswTx73//e0T8ZxVOe9atWxe/+93vYurUqXHRRRfl9qVLl77neQwaNChKKdHY2JjvVHY1ra/I169fX7G99ZV5q7q6uujZs2ds3bp1m9fb+6X1OlyyZEmuAmy1ZMmS/Po7MWTIkBgyZEj88Ic/jMcffzyOOOKIuPnmm2PatGkfinO2s/hM4b8wevTo2Lp1a1x22WVtvrZly5b8C3j88cdH165d47rrrqt4RXTttddu93t86lOfisbGxrj22mvb/IV+675afzG+fcz7Ncd3uiS1c+fObV4Fzpkzp83ywvdiy5YtMXPmzHy8efPmmDlzZtTV1cXQoUM7nE9E21em7+RcdOTLX/5ydO7cOaZOndpmv6WUNktdd4ZevXrFnnvuGY888kjF9htvvLHicefOnePUU0+Nu+66KxYtWtRmP6tXr654/G6XpG7PsGHDol+/fnHzzTfHpk2bcvvcuXPjueeei5EjR253H6+//nps2bKlYtuQIUOiU6dOuc8PwznbWbxT+C80NTXF5MmTY/r06fHMM8/EiSeeGF27do2lS5fGnDlzYsaMGfGVr3wl6urqYsqUKTF9+vQYNWpUjBgxIhYuXBhz587d7qvlTp06xU033RQnn3xyHHroodHc3Bz9+/eP559/PhYvXhwPPPBARET+EjzvvPNi+PDh0blz5xgzZsz7Nsd3uiR11KhRcemll0Zzc3Mcfvjh8eyzz8bs2bMr3o28V3vvvXdceeWVsXz58hg8eHDccccd8cwzz8SsWbM6vCfcq1evOProo+Oqq66Kf//737HPPvvEgw8+mP8m5b0YNGhQTJs2Lb7//e/H8uXL40tf+lL07Nkzli1bFnfffXd87WtfiylTprzn/e8okyZNiiuuuCImTZoUw4YNi0ceeSTfWb3VFVdcEfPnz4/PfvazceaZZ8YnPvGJWLt2bSxYsCDmzZsXa9euzbHvdknq9nTt2jWuvPLKaG5ujqamphg7dmwuSR04cGB885vf3O4+fv/738c555wTp512WgwePDi2bNkSt912WwYv4sNzznaKD3i10y6ldUnqn//8522OGz9+fKmpqenw67NmzSpDhw4tPXr0KD179ixDhgwp3/3ud8uKFStyzNatW8vUqVNL//79S48ePcoxxxxTFi1aVBoaGra5JLXVo48+Wk444YTSs2fPUlNTUw455JBy3XXX5de3bNlSzj333FJXV1eqqqraLBPckXMs5d0tSf32t7+d+zziiCPKn/70p9LU1FSamppyXEdLUjs67k1NTeWggw4qTz31VPnc5z5XqqurS0NDQ7n++usrxrW331deeaWccsopZffddy+9e/cup512WlmxYkWbpZmtS1JXr15dsc/W62bZsmUV2++6665y5JFHlpqamlJTU1MOPPDAcvbZZ5clS5Zs9zjtyCWpI0eObHf8G2+8Uc4444zSu3fv0rNnzzJ69OiyatWqNj93KaWsXLmynH322WXfffctXbt2LfX19eW4444rs2bNqhj3bpekvn2ZaEdLZe+4447yyU9+snTv3r306dOnnH766blEvFVH18dLL71UJk6cWAYNGlSqq6tLnz59yrHHHlvmzZvXZux/c87+V1WVsoMSDx+gY445JtasWdPuLY4Po9b/ifbD+n9X8b/DZwoAJFEAIIkCAMlnCgAk7xQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgCk/wPLCD4tuXsbKAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Klasy CIFAR-10\n", + "class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',\n", + " 'dog', 'frog', 'horse', 'ship', 'truck']\n", + "\n", + "# Wybierz losowy indeks\n", + "index = np.random.randint(0, len(X_validation))\n", + "\n", + "# Pobierz pojedynczy obrazek i etykietę\n", + "image = X_validation[index]\n", + "true_label = np.argmax(Y_validation[index])\n", + "\n", + "image_for_display = image * data_generator.std + data_generator.mean\n", + "image_for_display = np.clip(image_for_display, 0, 255).astype('uint8')\n", + "\n", + "image_batch = np.expand_dims(image, axis=0)\n", + "\n", + "# Przewidywanie klasy\n", + "prediction = model.predict(image_batch)\n", + "predicted_class = np.argmax(prediction[0])\n", + "\n", + "# Wyświetlenie obrazka\n", + "plt.imshow(image_for_display)\n", + "plt.title(f\"Predicted: {class_names[predicted_class]} | True: {class_names[true_label]}\")\n", + "plt.axis('off')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "id": "44cc5989-0cf6-49d1-8307-b9e4d2a1bbd5", + "metadata": {}, + "source": [ + "# PyTorch" + ] + }, + { + "cell_type": "markdown", + "id": "33166007-e9b7-4931-9c75-670544d4645e", + "metadata": {}, + "source": [ + "biblioteka traktowana jako #2, za TensorFlowem\n", + "Mocno Pythonowy framework, dużo rzeczy trzeba ustawiać i tworzyć, ale za to jest więcej możliwości niż w TensorFlow" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "336c92ba-50fa-439e-b46e-52cf135049d7", + "metadata": {}, + "outputs": [], + "source": [ + "import torch" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e4cce36d-10d0-44d9-8ba7-33a0f6769495", + "metadata": {}, + "outputs": [], + "source": [ + "import torchvision.transforms as transforms\n", + "from torchvision import datasets\n", + "from torch.utils.data import DataLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "109a8b29-1c1f-4918-b969-c7173999510f", + "metadata": {}, + "outputs": [], + "source": [ + "train_transform = transforms.Compose([\n", + " transforms.RandomHorizontalFlip(),\n", + " transforms.RandomVerticalFlip(),\n", + " transforms.ToTensor(),\n", + " transforms.Normalize(\n", + " [0.485, 0.456, 0.406],\n", + " [0.229, 0.224, 0.225])\n", + "])\n", + "\n", + "train_data = datasets.CIFAR10(\n", + " root='data',\n", + " train=True,\n", + " download=True,\n", + " transform=train_transform)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "930b465a-140c-47c1-bf54-54fcffc80f17", + "metadata": {}, + "outputs": [], + "source": [ + "train_loader = DataLoader(\n", + " dataset=train_data,\n", + " batch_size=32,\n", + " shuffle=True,\n", + " num_workers=2\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "6d20c732-fed0-431e-9cdc-e8659e8fb08a", + "metadata": {}, + "outputs": [], + "source": [ + "validation_transform = transforms.Compose([\n", + " transforms.ToTensor(),\n", + " transforms.Normalize(\n", + " [0.485, 0.456, 0.406],\n", + " [0.229, 0.224, 0.225])\n", + "])\n", + "\n", + "validation_data = datasets.CIFAR10(\n", + " root='data',\n", + " train=False,\n", + " download=True,\n", + " transform=validation_transform)\n", + "\n", + "validation_loader = DataLoader(\n", + " dataset=validation_data,\n", + " batch_size=128,\n", + " shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "a973a911-9f34-4810-9d87-00a5df461e1a", + "metadata": {}, + "outputs": [], + "source": [ + "torch.manual_seed(1234)\n", + "classes = 10\n", + "\n", + "from torch.nn import Sequential, Conv2d, BatchNorm2d, GELU, MaxPool2d, Dropout2d, Linear, Flatten\n", + "\n", + "model = Sequential(\n", + " Conv2d(in_channels=3, out_channels=32,\n", + " kernel_size=3, padding=1),\n", + " BatchNorm2d(32),\n", + " GELU(),\n", + " Conv2d(in_channels=32, out_channels=32,\n", + " kernel_size=3, padding=1),\n", + " BatchNorm2d(32),\n", + " GELU(),\n", + " MaxPool2d(kernel_size=2, stride=2),\n", + " Dropout2d(0.2),\n", + "\n", + " Conv2d(in_channels=32, out_channels=64,\n", + " kernel_size=3, padding=1),\n", + " BatchNorm2d(64),\n", + " GELU(),\n", + " Conv2d(in_channels=64, out_channels=64,\n", + " kernel_size=3, padding=1),\n", + " BatchNorm2d(64),\n", + " GELU(),\n", + " MaxPool2d(kernel_size=2, stride=2),\n", + " Dropout2d(p=0.3),\n", + "\n", + " Conv2d(in_channels=64, out_channels=128,\n", + " kernel_size=3),\n", + " BatchNorm2d(128),\n", + " GELU(),\n", + " Conv2d(in_channels=128, out_channels=128,\n", + " kernel_size=3),\n", + " BatchNorm2d(128),\n", + " GELU(),\n", + " MaxPool2d(kernel_size=2, stride=2),\n", + " Dropout2d(p=0.5),\n", + " Flatten(),\n", + "\n", + " Linear(512, classes),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "8ea91d13-7d99-4dd3-8c59-d85b92964434", + "metadata": {}, + "outputs": [], + "source": [ + "def train_model(model, cost_function, optimizer, data_loader):\n", + " # send the model to the GPU\n", + " model.to(device)\n", + "\n", + " # set model to training mode\n", + " model.train()\n", + "\n", + " current_loss = 0.0\n", + " current_acc = 0\n", + "\n", + " # iterate over the training data\n", + " for i, (inputs, labels) in enumerate(data_loader):\n", + " # send the input/labels to the GPU\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + "\n", + " with torch.set_grad_enabled(True):\n", + " # forward\n", + " outputs = model(inputs)\n", + " _, predictions = torch.max(outputs, 1)\n", + " loss = cost_function(outputs, labels)\n", + "\n", + " # backward\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # statistics\n", + " current_loss += loss.item() * inputs.size(0)\n", + " current_acc += torch.sum(predictions == labels.data)\n", + "\n", + " total_loss = current_loss / len(data_loader.dataset)\n", + " total_acc = current_acc.double() / len(data_loader.dataset)\n", + "\n", + " print('Train Loss: {:.4f}; Accuracy: {:.4f}'.format(total_loss, total_acc))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "090590fa-01b4-4212-82bb-0086cbc4d4eb", + "metadata": {}, + "outputs": [], + "source": [ + "def test_model(model, cost_function, data_loader):\n", + " # send the model to the GPU\n", + " model.to(device)\n", + "\n", + " # set model in evaluation mode\n", + " model.eval()\n", + "\n", + " current_loss = 0.0\n", + " current_acc = 0\n", + "\n", + " # iterate over the validation data\n", + " for i, (inputs, labels) in enumerate(data_loader):\n", + " # send the input/labels to the GPU\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # forward\n", + " with torch.set_grad_enabled(False):\n", + " outputs = model(inputs)\n", + " _, predictions = torch.max(outputs, 1)\n", + " loss = cost_function(outputs, labels)\n", + "\n", + " # statistics\n", + " current_loss += loss.item() * inputs.size(0)\n", + " current_acc += torch.sum(predictions == labels.data)\n", + "\n", + " total_loss = current_loss / len(data_loader.dataset)\n", + " total_acc = current_acc.double() / len(data_loader.dataset)\n", + "\n", + " print('Test Loss: {:.4f}; Accuracy: {:.4f}'.format(total_loss, total_acc))\n", + "\n", + " return total_loss, total_acc" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "2d2ed49a-5216-4b71-9632-a7ce47ceed78", + "metadata": {}, + "outputs": [], + "source": [ + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "4f537000-9338-4825-b4a5-da73d1f3fdc7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "Train Loss: 1.3657; Accuracy: 0.5059\n", + "Test Loss: 1.1043; Accuracy: 0.6036\n", + "Epoch 2/10\n", + "Train Loss: 1.2027; Accuracy: 0.5700\n", + "Test Loss: 0.9592; Accuracy: 0.6560\n", + "Epoch 3/10\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mKeyboardInterrupt\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[38]\u001b[39m\u001b[32m, line 7\u001b[39m\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m epoch \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(epochs):\n\u001b[32m 6\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m'\u001b[39m\u001b[33mEpoch \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[33m/\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[33m'\u001b[39m.format(epoch + \u001b[32m1\u001b[39m, epochs))\n\u001b[32m----> \u001b[39m\u001b[32m7\u001b[39m \u001b[43mtrain_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcost_func\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moptimizer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtrain_loader\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 8\u001b[39m test_model(model, cost_func, validation_loader)\n", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[33]\u001b[39m\u001b[32m, line 12\u001b[39m, in \u001b[36mtrain_model\u001b[39m\u001b[34m(model, cost_function, optimizer, data_loader)\u001b[39m\n\u001b[32m 9\u001b[39m current_acc = \u001b[32m0\u001b[39m\n\u001b[32m 11\u001b[39m \u001b[38;5;66;03m# iterate over the training data\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m12\u001b[39m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlabels\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdata_loader\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 13\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# send the input/labels to the GPU\u001b[39;49;00m\n\u001b[32m 14\u001b[39m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m.\u001b[49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[43m \u001b[49m\u001b[43mlabels\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[43mlabels\u001b[49m\u001b[43m.\u001b[49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/torch/utils/data/dataloader.py:733\u001b[39m, in \u001b[36m_BaseDataLoaderIter.__next__\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 730\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m._sampler_iter \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m 731\u001b[39m \u001b[38;5;66;03m# TODO(https://github.com/pytorch/pytorch/issues/76750)\u001b[39;00m\n\u001b[32m 732\u001b[39m \u001b[38;5;28mself\u001b[39m._reset() \u001b[38;5;66;03m# type: ignore[call-arg]\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m733\u001b[39m data = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_next_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 734\u001b[39m \u001b[38;5;28mself\u001b[39m._num_yielded += \u001b[32m1\u001b[39m\n\u001b[32m 735\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[32m 736\u001b[39m \u001b[38;5;28mself\u001b[39m._dataset_kind == _DatasetKind.Iterable\n\u001b[32m 737\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m._IterableDataset_len_called \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 738\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m._num_yielded > \u001b[38;5;28mself\u001b[39m._IterableDataset_len_called\n\u001b[32m 739\u001b[39m ):\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/torch/utils/data/dataloader.py:1491\u001b[39m, in \u001b[36m_MultiProcessingDataLoaderIter._next_data\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 1488\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._process_data(data, worker_id)\n\u001b[32m 1490\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m._shutdown \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m._tasks_outstanding > \u001b[32m0\u001b[39m\n\u001b[32m-> \u001b[39m\u001b[32m1491\u001b[39m idx, data = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_get_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1492\u001b[39m \u001b[38;5;28mself\u001b[39m._tasks_outstanding -= \u001b[32m1\u001b[39m\n\u001b[32m 1493\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m._dataset_kind == _DatasetKind.Iterable:\n\u001b[32m 1494\u001b[39m \u001b[38;5;66;03m# Check for _IterableDatasetStopIteration\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/torch/utils/data/dataloader.py:1453\u001b[39m, in \u001b[36m_MultiProcessingDataLoaderIter._get_data\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 1449\u001b[39m \u001b[38;5;66;03m# In this case, `self._data_queue` is a `queue.Queue`,. But we don't\u001b[39;00m\n\u001b[32m 1450\u001b[39m \u001b[38;5;66;03m# need to call `.task_done()` because we don't use `.join()`.\u001b[39;00m\n\u001b[32m 1451\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 1452\u001b[39m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1453\u001b[39m success, data = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_try_get_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1454\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m success:\n\u001b[32m 1455\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m data\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/torch/utils/data/dataloader.py:1284\u001b[39m, in \u001b[36m_MultiProcessingDataLoaderIter._try_get_data\u001b[39m\u001b[34m(self, timeout)\u001b[39m\n\u001b[32m 1271\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m_try_get_data\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout=_utils.MP_STATUS_CHECK_INTERVAL):\n\u001b[32m 1272\u001b[39m \u001b[38;5;66;03m# Tries to fetch data from `self._data_queue` once for a given timeout.\u001b[39;00m\n\u001b[32m 1273\u001b[39m \u001b[38;5;66;03m# This can also be used as inner loop of fetching without timeout, with\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 1281\u001b[39m \u001b[38;5;66;03m# Returns a 2-tuple:\u001b[39;00m\n\u001b[32m 1282\u001b[39m \u001b[38;5;66;03m# (bool: whether successfully get data, any: data if successful else None)\u001b[39;00m\n\u001b[32m 1283\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1284\u001b[39m data = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_data_queue\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1285\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m (\u001b[38;5;28;01mTrue\u001b[39;00m, data)\n\u001b[32m 1286\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[32m 1287\u001b[39m \u001b[38;5;66;03m# At timeout and error, we manually check whether any worker has\u001b[39;00m\n\u001b[32m 1288\u001b[39m \u001b[38;5;66;03m# failed. Note that this is the only mechanism for Windows to detect\u001b[39;00m\n\u001b[32m 1289\u001b[39m \u001b[38;5;66;03m# worker failures.\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/multiprocessing/queues.py:122\u001b[39m, in \u001b[36mQueue.get\u001b[39m\u001b[34m(self, block, timeout)\u001b[39m\n\u001b[32m 120\u001b[39m \u001b[38;5;28mself\u001b[39m._rlock.release()\n\u001b[32m 121\u001b[39m \u001b[38;5;66;03m# unserialize the data after having released the lock\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m122\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_ForkingPickler\u001b[49m\u001b[43m.\u001b[49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mres\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/torch/multiprocessing/reductions.py:541\u001b[39m, in \u001b[36mrebuild_storage_fd\u001b[39m\u001b[34m(cls, df, size)\u001b[39m\n\u001b[32m 540\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mrebuild_storage_fd\u001b[39m(\u001b[38;5;28mcls\u001b[39m, df, size):\n\u001b[32m--> \u001b[39m\u001b[32m541\u001b[39m fd = \u001b[43mdf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mdetach\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 542\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 543\u001b[39m storage = storage_from_cache(\u001b[38;5;28mcls\u001b[39m, fd_id(fd))\n", + "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/multiprocessing/resource_sharer.py:57\u001b[39m, in \u001b[36mDupFd.detach\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 55\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mdetach\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[32m 56\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m'''Get the fd. This should only be called once.'''\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m57\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43m_resource_sharer\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_id\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m conn:\n\u001b[32m 58\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m reduction.recv_handle(conn)\n", + "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/multiprocessing/resource_sharer.py:87\u001b[39m, in \u001b[36m_ResourceSharer.get_connection\u001b[39m\u001b[34m(ident)\u001b[39m\n\u001b[32m 85\u001b[39m address, key = ident\n\u001b[32m 86\u001b[39m c = Client(address, authkey=process.current_process().authkey)\n\u001b[32m---> \u001b[39m\u001b[32m87\u001b[39m \u001b[43mc\u001b[49m\u001b[43m.\u001b[49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mos\u001b[49m\u001b[43m.\u001b[49m\u001b[43mgetpid\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 88\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m c\n", + "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/multiprocessing/connection.py:206\u001b[39m, in \u001b[36m_ConnectionBase.send\u001b[39m\u001b[34m(self, obj)\u001b[39m\n\u001b[32m 204\u001b[39m \u001b[38;5;28mself\u001b[39m._check_closed()\n\u001b[32m 205\u001b[39m \u001b[38;5;28mself\u001b[39m._check_writable()\n\u001b[32m--> \u001b[39m\u001b[32m206\u001b[39m \u001b[38;5;28mself\u001b[39m._send_bytes(\u001b[43m_ForkingPickler\u001b[49m\u001b[43m.\u001b[49m\u001b[43mdumps\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m)\n", + "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/multiprocessing/reduction.py:51\u001b[39m, in \u001b[36mForkingPickler.dumps\u001b[39m\u001b[34m(cls, obj, protocol)\u001b[39m\n\u001b[32m 48\u001b[39m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[32m 49\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mdumps\u001b[39m(\u001b[38;5;28mcls\u001b[39m, obj, protocol=\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[32m 50\u001b[39m buf = io.BytesIO()\n\u001b[32m---> \u001b[39m\u001b[32m51\u001b[39m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mbuf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m)\u001b[49m.dump(obj)\n\u001b[32m 52\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m buf.getbuffer()\n", + "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/multiprocessing/reduction.py:39\u001b[39m, in \u001b[36mForkingPickler.__init__\u001b[39m\u001b[34m(self, *args)\u001b[39m\n\u001b[32m 38\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, *args):\n\u001b[32m---> \u001b[39m\u001b[32m39\u001b[39m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m.\u001b[49m\u001b[34;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 40\u001b[39m \u001b[38;5;28mself\u001b[39m.dispatch_table = \u001b[38;5;28mself\u001b[39m._copyreg_dispatch_table.copy()\n\u001b[32m 41\u001b[39m \u001b[38;5;28mself\u001b[39m.dispatch_table.update(\u001b[38;5;28mself\u001b[39m._extra_reducers)\n", + "\u001b[31mKeyboardInterrupt\u001b[39m: " + ] + } + ], + "source": [ + "cost_func = torch.nn.CrossEntropyLoss()\n", + "optimizer = torch.optim.Adam(model.parameters())\n", + "\n", + "epochs = 10\n", + "for epoch in range(epochs):\n", + " print('Epoch {}/{}'.format(epoch + 1, epochs))\n", + " train_model(model, cost_func, optimizer, train_loader)\n", + " test_model(model, cost_func, validation_loader)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9f060ea9-b8de-46d4-8fdc-3a89f565d2f6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "01db7828-0e98-45b9-b332-9d86a148f3cc", + "metadata": {}, + "source": [ + "# Sieć YOLO\n", + "algorytm/sieć YOLO służy do rozpoznawania obiektów znajdujących się na zdjęciach\n", + "np. kwadratowe ramki wokół obiektów, często z opisem pod ramką - to właśnie YOLO" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a27ad14f-3a79-46d0-bfa6-154f85e9513a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}