trap/test_custom_rnn.ipynb
2024-12-27 16:12:50 +01:00

1982 lines
313 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Goal of this notebook: implement some basic RNN/LSTM/GRU to _forecast_ trajectories based on VIRAT and/or the custom _hof_ dataset."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ruben/suspicion/trap/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
}
],
"source": [
"import numpy as np\n",
"import torch\n",
"import matplotlib.pyplot as plt # Visualization \n",
"import torch.nn as nn\n",
"import pandas_helper_calc # noqa # provides df.calc.derivative()\n",
"import pandas as pd\n",
"import cv2\n",
"import pathlib\n",
"from tqdm.autonotebook import tqdm"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"FPS = 12\n",
"# SRC_CSV = \"EXPERIMENTS/hofext-maskrcnn/all.txt\"\n",
"# SRC_CSV = \"EXPERIMENTS/raw/generated/train/tracks.txt\"\n",
"SRC_CSV = \"EXPERIMENTS/raw/hof-meter-maskrcnn2/train/tracks.txt\"\n",
"SRC_CSV = \"EXPERIMENTS/20240426-hof-yolo/train/tracked.txt\"\n",
"SRC_CSV = \"EXPERIMENTS/raw/hof2/train/tracked.txt\"\n",
"# SRC_H = \"../DATASETS/hof/webcam20231103-2-homography.txt\"\n",
"SRC_H = None\n",
"CACHE_DIR = \"EXPERIMENTS/cache/hof2/\"\n",
"# SMOOTHING = True # hof-yolo is already smoothed, hof2 isn't\n",
"# SMOOTHING_WINDOW=3 #2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"in_fields = ['x', 'y', 'vx', 'vy', 'ax', 'ay'] #, 'dt'] (WARNING: dt column contains NaN)\n",
"# out_fields = ['v', 'heading']\n",
"# velocity cannot be negative, and heading is circular (modulo), this makes it harder to optimise than a linear space, so try to use components\n",
"# an we can use simple MSE loss (I guess?)\n",
"out_fields = ['dx', 'dy']\n",
"SAMPLE_STEP = 5 # 1/5, for 12fps leads to effectively 12/5=2.4fps\n",
"GRID_SIZE = 2 # round items on a grid of 2 points per meter (None to disable rounding)\n",
"window = 8 #int(FPS*1.5 / SAMPLE_STEP)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cuda\n"
]
}
],
"source": [
"# Set device\n",
"device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
"print(device)\n",
"\n",
"# Hyperparameters\n",
"input_size = len(in_fields) #in_d\n",
"hidden_size = 64 # hidden_d\n",
"num_layers = 1 # num_hidden\n",
"output_size = len(out_fields) # out_d\n",
"learning_rate = 0.005 #0.01 #0.005\n",
"batch_size = 512\n",
"num_epochs = 1000\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"cache_path = pathlib.Path(CACHE_DIR)\n",
"cache_path.mkdir(parents=True, exist_ok=True)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Samping 1/5, of 412098 items\n",
"Done sampling kept 83726 items\n"
]
}
],
"source": [
"from pathlib import Path\n",
"from trap.tools import load_tracks_from_csv\n",
"from trap.tools import filter_short_tracks, normalise_position\n",
"\n",
"data= load_tracks_from_csv(Path(SRC_CSV), FPS, GRID_SIZE, SAMPLE_STEP )"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# create x-norm, y_norm columns\n",
"data, mu, std = normalise_position(data)\n",
"data = filter_short_tracks(data, window+1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The dataset is a bit crappy because it has different frame step: ranging from predominantly 1 and 2 to sometimes have 3 and 4 as well. This inevitabily leads to difference in speed caluclations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1606 training tracks, 402 test tracks\n"
]
}
],
"source": [
"track_ids = data.index.unique('track_id').to_numpy()\n",
"np.random.shuffle(track_ids)\n",
"test_offset_idx = int(len(track_ids) * .8)\n",
"training_ids, test_ids = track_ids[:test_offset_idx], track_ids[test_offset_idx:]\n",
"print(f\"{len(training_ids)} training tracks, {len(test_ids)} test tracks\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"here, draw out a sample track to see if it looks alright. **unfortunately the imate isn't mapped properly**."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4789\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import random\n",
"# if H:\n",
"# img_src = \"../DATASETS/hof/webcam20231103-2.png\"\n",
"# # dst = cv2.warpPerspective(img_src,H,(2500,1920))\n",
"# src_img = cv2.imread(img_src)\n",
"# print(src_img.shape)\n",
"# h1,w1 = src_img.shape[:2]\n",
"# corners = np.float32([[0,0], [w1, 0], [0, h1], [w1, h1]])\n",
"\n",
"# print(corners)\n",
"# corners_projected = cv2.perspectiveTransform(corners.reshape((-1,4,2)), H)[0]\n",
"# print(corners_projected)\n",
"# [xmin, ymin] = np.int32(corners_projected.min(axis=0).ravel() - 0.5)\n",
"# [xmax, ymax] = np.int32(corners_projected.max(axis=0).ravel() + 0.5)\n",
"# print(xmin, xmax, ymin, ymax)\n",
"\n",
"# dst = cv2.warpPerspective(src_img,H, (xmax, ymax))\n",
"# def plot_track(track_id: int):\n",
"# plt.gca().invert_yaxis()\n",
"\n",
"# plt.imshow(dst, origin='lower', extent=[xmin/100-mean_x, xmax/100-mean_x, ymin/100-mean_y, ymax/100-mean_y])\n",
"# # plot scatter plot with x and y data \n",
" \n",
"# ax = plt.scatter(\n",
"# filtered_data.loc[track_id,:]['proj_x'],\n",
"# filtered_data.loc[track_id,:]['proj_y'],\n",
"# marker=\"*\") \n",
"# ax.axes.invert_yaxis()\n",
"# plt.plot(\n",
"# filtered_data.loc[track_id,:]['proj_x'],\n",
"# filtered_data.loc[track_id,:]['proj_y']\n",
"# )\n",
"# else:\n",
"def plot_track(track_id: int):\n",
" ax = plt.scatter(\n",
" data.loc[track_id,:]['x_norm'],\n",
" data.loc[track_id,:]['y_norm'],\n",
" marker=\"*\") \n",
" plt.plot(\n",
" data.loc[track_id,:]['x_norm'],\n",
" data.loc[track_id,:]['y_norm']\n",
" )\n",
"\n",
"# print(filtered_data.loc[track_id,:]['proj_x'])\n",
"# _track_id = 2188\n",
"_track_id = random.choice(track_ids)\n",
"print(_track_id)\n",
"plot_track(_track_id)\n",
"\n",
"for track_id in random.choices(track_ids, k=100):\n",
" plot_track(track_id)\n",
" \n",
"# print(mean_x, mean_y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now make the dataset:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>l</th>\n",
" <th>t</th>\n",
" <th>w</th>\n",
" <th>h</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>state</th>\n",
" <th>diff</th>\n",
" <th>x_raw</th>\n",
" <th>y_raw</th>\n",
" <th>...</th>\n",
" <th>vx</th>\n",
" <th>vy</th>\n",
" <th>ax</th>\n",
" <th>ay</th>\n",
" <th>v</th>\n",
" <th>a</th>\n",
" <th>heading</th>\n",
" <th>d_heading</th>\n",
" <th>x_norm</th>\n",
" <th>y_norm</th>\n",
" </tr>\n",
" <tr>\n",
" <th>track_id</th>\n",
" <th>frame_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th>342.0</th>\n",
" <td>1393.736572</td>\n",
" <td>0.000000</td>\n",
" <td>67.613647</td>\n",
" <td>121.391151</td>\n",
" <td>13.244408</td>\n",
" <td>2.414339</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>13.5</td>\n",
" <td>2.5</td>\n",
" <td>...</td>\n",
" <td>6.143418e-01</td>\n",
" <td>1.389160</td>\n",
" <td>-1.422342e+00</td>\n",
" <td>0.453213</td>\n",
" <td>1.518941</td>\n",
" <td>0.142097</td>\n",
" <td>66.143088</td>\n",
" <td>5.536579e+01</td>\n",
" <td>0.353449</td>\n",
" <td>-1.768217</td>\n",
" </tr>\n",
" <tr>\n",
" <th>347.0</th>\n",
" <td>1393.844849</td>\n",
" <td>12.691238</td>\n",
" <td>86.482910</td>\n",
" <td>156.264786</td>\n",
" <td>13.500384</td>\n",
" <td>2.993156</td>\n",
" <td>2.0</td>\n",
" <td>5.0</td>\n",
" <td>13.5</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>6.143418e-01</td>\n",
" <td>1.389160</td>\n",
" <td>-1.422342e+00</td>\n",
" <td>0.453213</td>\n",
" <td>1.518941</td>\n",
" <td>0.142097</td>\n",
" <td>66.143088</td>\n",
" <td>5.536579e+01</td>\n",
" <td>0.414443</td>\n",
" <td>-1.574517</td>\n",
" </tr>\n",
" <tr>\n",
" <th>352.0</th>\n",
" <td>1405.273438</td>\n",
" <td>36.675903</td>\n",
" <td>90.329956</td>\n",
" <td>176.461975</td>\n",
" <td>13.509425</td>\n",
" <td>3.650656</td>\n",
" <td>2.0</td>\n",
" <td>5.0</td>\n",
" <td>13.5</td>\n",
" <td>3.5</td>\n",
" <td>...</td>\n",
" <td>2.169933e-02</td>\n",
" <td>1.577999</td>\n",
" <td>-1.422342e+00</td>\n",
" <td>0.453213</td>\n",
" <td>1.578149</td>\n",
" <td>0.142097</td>\n",
" <td>89.212166</td>\n",
" <td>5.536579e+01</td>\n",
" <td>0.416598</td>\n",
" <td>-1.354485</td>\n",
" </tr>\n",
" <tr>\n",
" <th>357.0</th>\n",
" <td>1421.215698</td>\n",
" <td>76.261253</td>\n",
" <td>91.465088</td>\n",
" <td>181.133682</td>\n",
" <td>13.500221</td>\n",
" <td>4.282279</td>\n",
" <td>2.0</td>\n",
" <td>5.0</td>\n",
" <td>13.5</td>\n",
" <td>4.5</td>\n",
" <td>...</td>\n",
" <td>-2.209058e-02</td>\n",
" <td>1.515896</td>\n",
" <td>-1.050958e-01</td>\n",
" <td>-0.149049</td>\n",
" <td>1.516057</td>\n",
" <td>-0.149020</td>\n",
" <td>90.834891</td>\n",
" <td>3.894540e+00</td>\n",
" <td>0.414404</td>\n",
" <td>-1.143113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>362.0</th>\n",
" <td>1438.374268</td>\n",
" <td>115.362549</td>\n",
" <td>84.298584</td>\n",
" <td>172.143616</td>\n",
" <td>13.499658</td>\n",
" <td>4.743787</td>\n",
" <td>2.0</td>\n",
" <td>5.0</td>\n",
" <td>13.5</td>\n",
" <td>4.5</td>\n",
" <td>...</td>\n",
" <td>-1.349331e-03</td>\n",
" <td>1.107618</td>\n",
" <td>4.977900e-02</td>\n",
" <td>-0.979866</td>\n",
" <td>1.107619</td>\n",
" <td>-0.980250</td>\n",
" <td>90.069799</td>\n",
" <td>-1.836220e+00</td>\n",
" <td>0.414270</td>\n",
" <td>-0.988670</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">5030</th>\n",
" <th>32702.0</th>\n",
" <td>1705.054635</td>\n",
" <td>749.467887</td>\n",
" <td>132.149004</td>\n",
" <td>182.105042</td>\n",
" <td>14.000000</td>\n",
" <td>10.495261</td>\n",
" <td>1.0</td>\n",
" <td>5.0</td>\n",
" <td>14.0</td>\n",
" <td>10.5</td>\n",
" <td>...</td>\n",
" <td>1.654143e-12</td>\n",
" <td>-0.029145</td>\n",
" <td>4.967546e-11</td>\n",
" <td>0.657171</td>\n",
" <td>0.029145</td>\n",
" <td>-0.657171</td>\n",
" <td>270.000000</td>\n",
" <td>1.644812e-08</td>\n",
" <td>0.533492</td>\n",
" <td>0.936057</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32707.0</th>\n",
" <td>1703.756025</td>\n",
" <td>749.703112</td>\n",
" <td>131.216670</td>\n",
" <td>181.961914</td>\n",
" <td>14.000000</td>\n",
" <td>10.499609</td>\n",
" <td>1.0</td>\n",
" <td>5.0</td>\n",
" <td>14.0</td>\n",
" <td>10.5</td>\n",
" <td>...</td>\n",
" <td>7.418066e-13</td>\n",
" <td>0.010435</td>\n",
" <td>-2.189608e-12</td>\n",
" <td>0.094992</td>\n",
" <td>0.010435</td>\n",
" <td>-0.044905</td>\n",
" <td>90.000000</td>\n",
" <td>-4.320000e+02</td>\n",
" <td>0.533492</td>\n",
" <td>0.937512</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32712.0</th>\n",
" <td>1702.457415</td>\n",
" <td>749.938337</td>\n",
" <td>130.284337</td>\n",
" <td>181.818787</td>\n",
" <td>14.000000</td>\n",
" <td>10.500165</td>\n",
" <td>1.0</td>\n",
" <td>5.0</td>\n",
" <td>14.0</td>\n",
" <td>10.5</td>\n",
" <td>...</td>\n",
" <td>-4.263256e-14</td>\n",
" <td>0.001334</td>\n",
" <td>-1.882654e-12</td>\n",
" <td>-0.021841</td>\n",
" <td>0.001334</td>\n",
" <td>-0.021841</td>\n",
" <td>90.000000</td>\n",
" <td>1.416898e-08</td>\n",
" <td>0.533492</td>\n",
" <td>0.937698</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32717.0</th>\n",
" <td>1701.158805</td>\n",
" <td>750.173562</td>\n",
" <td>129.352003</td>\n",
" <td>181.675659</td>\n",
" <td>14.000000</td>\n",
" <td>10.500019</td>\n",
" <td>1.0</td>\n",
" <td>5.0</td>\n",
" <td>14.0</td>\n",
" <td>10.5</td>\n",
" <td>...</td>\n",
" <td>-2.984279e-14</td>\n",
" <td>-0.000350</td>\n",
" <td>3.069545e-14</td>\n",
" <td>-0.004042</td>\n",
" <td>0.000350</td>\n",
" <td>-0.002362</td>\n",
" <td>270.000000</td>\n",
" <td>4.320000e+02</td>\n",
" <td>0.533492</td>\n",
" <td>0.937649</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32722.0</th>\n",
" <td>1702.384766</td>\n",
" <td>750.754517</td>\n",
" <td>123.435425</td>\n",
" <td>180.945618</td>\n",
" <td>14.000000</td>\n",
" <td>10.499985</td>\n",
" <td>2.0</td>\n",
" <td>5.0</td>\n",
" <td>14.0</td>\n",
" <td>10.5</td>\n",
" <td>...</td>\n",
" <td>0.000000e+00</td>\n",
" <td>-0.000082</td>\n",
" <td>7.162271e-14</td>\n",
" <td>0.000644</td>\n",
" <td>0.000082</td>\n",
" <td>-0.000644</td>\n",
" <td>270.000000</td>\n",
" <td>1.172430e-08</td>\n",
" <td>0.533492</td>\n",
" <td>0.937638</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>80035 rows × 24 columns</p>\n",
"</div>"
],
"text/plain": [
" l t w h x \\\n",
"track_id frame_id \n",
"1 342.0 1393.736572 0.000000 67.613647 121.391151 13.244408 \n",
" 347.0 1393.844849 12.691238 86.482910 156.264786 13.500384 \n",
" 352.0 1405.273438 36.675903 90.329956 176.461975 13.509425 \n",
" 357.0 1421.215698 76.261253 91.465088 181.133682 13.500221 \n",
" 362.0 1438.374268 115.362549 84.298584 172.143616 13.499658 \n",
"... ... ... ... ... ... \n",
"5030 32702.0 1705.054635 749.467887 132.149004 182.105042 14.000000 \n",
" 32707.0 1703.756025 749.703112 131.216670 181.961914 14.000000 \n",
" 32712.0 1702.457415 749.938337 130.284337 181.818787 14.000000 \n",
" 32717.0 1701.158805 750.173562 129.352003 181.675659 14.000000 \n",
" 32722.0 1702.384766 750.754517 123.435425 180.945618 14.000000 \n",
"\n",
" y state diff x_raw y_raw ... vx \\\n",
"track_id frame_id ... \n",
"1 342.0 2.414339 2.0 NaN 13.5 2.5 ... 6.143418e-01 \n",
" 347.0 2.993156 2.0 5.0 13.5 3.0 ... 6.143418e-01 \n",
" 352.0 3.650656 2.0 5.0 13.5 3.5 ... 2.169933e-02 \n",
" 357.0 4.282279 2.0 5.0 13.5 4.5 ... -2.209058e-02 \n",
" 362.0 4.743787 2.0 5.0 13.5 4.5 ... -1.349331e-03 \n",
"... ... ... ... ... ... ... ... \n",
"5030 32702.0 10.495261 1.0 5.0 14.0 10.5 ... 1.654143e-12 \n",
" 32707.0 10.499609 1.0 5.0 14.0 10.5 ... 7.418066e-13 \n",
" 32712.0 10.500165 1.0 5.0 14.0 10.5 ... -4.263256e-14 \n",
" 32717.0 10.500019 1.0 5.0 14.0 10.5 ... -2.984279e-14 \n",
" 32722.0 10.499985 2.0 5.0 14.0 10.5 ... 0.000000e+00 \n",
"\n",
" vy ax ay v a \\\n",
"track_id frame_id \n",
"1 342.0 1.389160 -1.422342e+00 0.453213 1.518941 0.142097 \n",
" 347.0 1.389160 -1.422342e+00 0.453213 1.518941 0.142097 \n",
" 352.0 1.577999 -1.422342e+00 0.453213 1.578149 0.142097 \n",
" 357.0 1.515896 -1.050958e-01 -0.149049 1.516057 -0.149020 \n",
" 362.0 1.107618 4.977900e-02 -0.979866 1.107619 -0.980250 \n",
"... ... ... ... ... ... \n",
"5030 32702.0 -0.029145 4.967546e-11 0.657171 0.029145 -0.657171 \n",
" 32707.0 0.010435 -2.189608e-12 0.094992 0.010435 -0.044905 \n",
" 32712.0 0.001334 -1.882654e-12 -0.021841 0.001334 -0.021841 \n",
" 32717.0 -0.000350 3.069545e-14 -0.004042 0.000350 -0.002362 \n",
" 32722.0 -0.000082 7.162271e-14 0.000644 0.000082 -0.000644 \n",
"\n",
" heading d_heading x_norm y_norm \n",
"track_id frame_id \n",
"1 342.0 66.143088 5.536579e+01 0.353449 -1.768217 \n",
" 347.0 66.143088 5.536579e+01 0.414443 -1.574517 \n",
" 352.0 89.212166 5.536579e+01 0.416598 -1.354485 \n",
" 357.0 90.834891 3.894540e+00 0.414404 -1.143113 \n",
" 362.0 90.069799 -1.836220e+00 0.414270 -0.988670 \n",
"... ... ... ... ... \n",
"5030 32702.0 270.000000 1.644812e-08 0.533492 0.936057 \n",
" 32707.0 90.000000 -4.320000e+02 0.533492 0.937512 \n",
" 32712.0 90.000000 1.416898e-08 0.533492 0.937698 \n",
" 32717.0 270.000000 4.320000e+02 0.533492 0.937649 \n",
" 32722.0 270.000000 1.172430e-08 0.533492 0.937638 \n",
"\n",
"[80035 rows x 24 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# a=filtered_data.loc[1]\n",
"# min(a.index.tolist())\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x False\n",
"y False\n",
"vx False\n",
"vy False\n",
"ax False\n",
"ay False\n",
"dx False\n",
"dy False\n"
]
}
],
"source": [
"for field in in_fields + out_fields:\n",
" print(field, data[field].isnull().values.any())"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0%| | 0/1606 [00:00<?, ?it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1606/1606 [00:27<00:00, 58.17it/s]\n",
"100%|██████████| 402/402 [00:06<00:00, 60.38it/s]\n"
]
}
],
"source": [
"def create_dataset(data, track_ids, window, only_last=False):\n",
" X, y, = [], []\n",
" factor = SAMPLE_STEP if SAMPLE_STEP is not None else 1\n",
" for track_id in tqdm(track_ids):\n",
" df = data.loc[track_id]\n",
" # print(df)\n",
" start_frame = min(df.index.tolist())\n",
" for step in range(len(df)-window-1):\n",
" i = int(start_frame) + (step*factor)\n",
" # print(step, int(start_frame), i)\n",
" feature = df.loc[i:i+(window*factor)][in_fields]\n",
" # target = df.loc[i+1:i+window+1][out_fields]\n",
" # print(i, window*factor, factor, i+window*factor+factor, df['idx_in_track'])\n",
" # print(i+window*factor+factor)\n",
" if only_last:\n",
" target = df.loc[i+window*factor+factor][out_fields]\n",
" else:\n",
" target = df.loc[i+factor:i+window*factor+factor][out_fields]\n",
"\n",
" X.append(feature.values)\n",
" y.append(target.values)\n",
" \n",
" return torch.tensor(np.array(X), dtype=torch.float), torch.tensor(np.array(y), dtype=torch.float)\n",
"\n",
"X_train, y_train = create_dataset(data, training_ids, window)\n",
"X_test, y_test = create_dataset(data, test_ids, window)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"X_train, y_train = X_train.to(device=device), y_train.to(device=device)\n",
"X_test, y_test = X_test.to(device=device), y_test.to(device=device)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [],
"source": [
"from torch.utils.data import TensorDataset, DataLoader\n",
"dataset_train = TensorDataset(X_train, y_train)\n",
"loader_train = DataLoader(dataset_train, shuffle=True, batch_size=batch_size)\n",
"dataset_test = TensorDataset(X_test, y_test)\n",
"loader_test = DataLoader(dataset_test, shuffle=False, batch_size=batch_size)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Model give output for all timesteps, this should improve training. But we use only the last timestep for the prediction process"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## RNN"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"class SimpleRnn(nn.Module):\n",
" def __init__(self, in_d=2, out_d=2, hidden_d=4, num_hidden=1):\n",
" super(SimpleRnn, self).__init__()\n",
" self.rnn = nn.RNN(input_size=in_d, hidden_size=hidden_d, num_layers=num_hidden)\n",
" self.fc = nn.Linear(hidden_d, out_d)\n",
"\n",
" def forward(self, x, h0):\n",
" r, h = self.rnn(x, h0)\n",
" # r = r[:, -1,:]\n",
" y = self.fc(r) # no activation on the output\n",
" return y, h\n",
"rnn = SimpleRnn(input_size, output_size, hidden_size, num_layers).to(device)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LSTM"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For optional LSTM-GAN, see https://discuss.pytorch.org/t/how-to-use-lstm-to-construct-gan/12419\n",
"\n",
"Or VAE (variational Auto encoder):\n",
"\n",
"> The only constraint on the latent vector representation for traditional autoencoders is that latent vectors should be easily decodable back into the original image. As a result, the latent space $Z$ can become disjoint and non-continuous. Variational autoencoders try to solve this problem. [Alexander van de Kleut](https://avandekleut.github.io/vae/)\n",
"\n",
"For LSTM based generative VAE: https://github.com/Khamies/LSTM-Variational-AutoEncoder/blob/main/model.py\n",
"\n",
"http://web.archive.org/web/20210119121802/https://towardsdatascience.com/time-series-generation-with-vae-lstm-5a6426365a1c?gi=29d8b029a386\n",
"\n",
"https://youtu.be/qJeaCHQ1k2w?si=30aAdqqwvz0DpR-x&t=687 VAE generate mu and sigma of a Normal distribution. Thus, they don't map the input to a single point, but a gausian distribution."
]
},
{
"cell_type": "code",
"execution_count": 328,
"metadata": {},
"outputs": [],
"source": [
"class LSTMModel(nn.Module):\n",
" # input_size : number of features in input at each time step\n",
" # hidden_size : Number of LSTM units \n",
" # num_layers : number of LSTM layers \n",
" def __init__(self, input_size, hidden_size, num_layers): \n",
" super(LSTMModel, self).__init__() #initializes the parent class nn.Module\n",
" # We _could_ train the h0: https://discuss.pytorch.org/t/learn-initial-hidden-state-h0-for-rnn/10013 \n",
" # self.lin1 = nn.Linear(input_size, hidden_size)\n",
" self.num_layers = num_layers\n",
" self.hidden_size = hidden_size\n",
" self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)\n",
" self.linear = nn.Linear(hidden_size, output_size)\n",
" # self.activation_v = nn.LeakyReLU(.01)\n",
" # self.activation_heading = torch.remainder()\n",
"\n",
" \n",
" def get_hidden_state(self, batch_size, device):\n",
" h = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(device)\n",
" c = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(device)\n",
" return (h, c)\n",
"\n",
" def forward(self, x, hidden_state): # defines forward pass of the neural network\n",
" # out = self.lin1(x)\n",
" \n",
" out, hidden_state = self.lstm(x, hidden_state)\n",
" # extract only the last time step, see https://machinelearningmastery.com/lstm-for-time-series-prediction-in-pytorch/\n",
" # print(out.shape)\n",
" # TODO)) Might want to remove this below: as it might improve training\n",
" # out = out[:, -1,:]\n",
" # print(out.shape)\n",
" out = self.linear(out)\n",
" \n",
" # torch.remainder(out[1], 360)\n",
" # print('o',out.shape)\n",
" return out, hidden_state\n",
"\n",
"lstm = LSTMModel(input_size, hidden_size, num_layers).to(device)\n"
]
},
{
"cell_type": "code",
"execution_count": 329,
"metadata": {},
"outputs": [],
"source": [
"# model = rnn\n",
"model = lstm\n"
]
},
{
"cell_type": "code",
"execution_count": 330,
"metadata": {},
"outputs": [],
"source": [
"optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
"loss_fn = nn.MSELoss()"
]
},
{
"cell_type": "code",
"execution_count": 331,
"metadata": {},
"outputs": [],
"source": [
"def evaluate():\n",
" # toggle evaluation mode\n",
" model.eval()\n",
" with torch.no_grad():\n",
" batch_size, seq_len, feature_dim = X_train.shape\n",
" y_pred, _ = model(\n",
" X_train.to(device=device),\n",
" model.get_hidden_state(batch_size, device)\n",
" )\n",
" train_rmse = torch.sqrt(loss_fn(y_pred, y_train))\n",
" # print(y_pred)\n",
"\n",
" batch_size, seq_len, feature_dim = X_test.shape\n",
" y_pred, _ = model(\n",
" X_test.to(device=device),\n",
" model.get_hidden_state(batch_size, device)\n",
" )\n",
" # print(loss_fn(y_pred, y_test))\n",
" test_rmse = torch.sqrt(loss_fn(y_pred, y_test))\n",
" print(\"Epoch ??: train RMSE %.4f, test RMSE %.4f\" % ( train_rmse, test_rmse))\n",
"\n",
"def load_most_recent():\n",
" paths = list(cache_path.glob(f\"checkpoint-{model._get_name()}_*.pt\"))\n",
" if len(paths) < 1:\n",
" print('Nothing found to load')\n",
" return None, None\n",
" paths.sort()\n",
"\n",
" print(f\"Loading {paths[-1]}\")\n",
" return load_cache(path=paths[-1])\n",
"\n",
"def load_cache(epoch=None, path=None):\n",
" if path is None:\n",
" if epoch is None:\n",
" raise RuntimeError(\"Either path or epoch must be given\")\n",
" path = cache_path / f\"checkpoint-{model._get_name()}_{epoch:05d}.pt\"\n",
" else:\n",
" print (path.stem)\n",
" epoch = int(path.stem[-5:])\n",
"\n",
" cached = torch.load(path)\n",
" \n",
" optimizer.load_state_dict(cached['optimizer_state_dict'])\n",
" model.load_state_dict(cached['model_state_dict'])\n",
" return epoch, cached['loss']\n",
" \n",
"\n",
"def cache(epoch, loss):\n",
" path = cache_path / f\"checkpoint-{model._get_name()}_{epoch:05d}.pt\"\n",
" print(f\"Cache to {path}\")\n",
" torch.save({\n",
" 'epoch': epoch,\n",
" 'model_state_dict': model.state_dict(),\n",
" 'optimizer_state_dict': optimizer.state_dict(),\n",
" 'loss': loss,\n",
" }, path)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"TODO)) See [this notebook](https://www.cs.toronto.edu/~lczhang/aps360_20191/lec/w08/rnn.html) For initialization (with random or not) and the use of GRU"
]
},
{
"cell_type": "code",
"execution_count": 332,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loading EXPERIMENTS/cache/hof2/checkpoint-LSTMModel_01000.pt\n",
"checkpoint-LSTMModel_01000\n",
"starting from epoch 1000 (loss: 0.014368701726198196)\n",
"Epoch ??: train RMSE 0.0849, test RMSE 0.0866\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"0it [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch ??: train RMSE 0.0849, test RMSE 0.0866\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"start_epoch, loss = load_most_recent()\n",
"if start_epoch is None:\n",
" start_epoch = 0\n",
"else:\n",
" print(f\"starting from epoch {start_epoch} (loss: {loss})\")\n",
" evaluate()\n",
"\n",
"loss_log = []\n",
"# Train Network\n",
"for epoch in tqdm(range(start_epoch+1,num_epochs+1)):\n",
" # toggle train mode\n",
" model.train()\n",
" for batch_idx, (x, targets) in enumerate(loader_train):\n",
" # Get x to cuda if possible\n",
" x = x.to(device=device).squeeze(1)\n",
" targets = targets.to(device=device)\n",
"\n",
" # forward\n",
" scores, _ = model(\n",
" x,\n",
" torch.zeros(num_layers, x.shape[2], hidden_size, dtype=torch.float).to(device=device),\n",
" torch.zeros(num_layers, x.shape[2], hidden_size, dtype=torch.float).to(device=device)\n",
" )\n",
" # print(scores)\n",
" loss = loss_fn(scores, targets)\n",
"\n",
" # backward\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
"\n",
" # gradient descent update step/adam step\n",
" optimizer.step()\n",
"\n",
" loss_log.append(loss.item())\n",
"\n",
" if epoch % 5 != 0:\n",
" continue\n",
"\n",
" cache(epoch, loss)\n",
" evaluate()\n",
"\n",
"evaluate()"
]
},
{
"cell_type": "code",
"execution_count": 333,
"metadata": {},
"outputs": [],
"source": [
"# print(loss)\n",
"# print(len(loss_log))\n",
"# plt.plot(loss_log)\n",
"# plt.ylabel('Loss')\n",
"# plt.xlabel('iteration')\n",
"# plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 335,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch.Size([49999, 9, 2]) torch.Size([49999, 9, 2])\n"
]
}
],
"source": [
"model.eval()\n",
"\n",
"with torch.no_grad():\n",
" y_pred, _ = model(X_train.to(device=device),\n",
" model.get_hidden_state(X_train.shape[0], device))\n",
" \n",
" print(y_pred.shape, y_train.shape)\n",
"# y_train, y_pred"
]
},
{
"cell_type": "code",
"execution_count": 336,
"metadata": {},
"outputs": [],
"source": [
"import scipy\n",
"\n",
"def ceil_away_from_0(a):\n",
" return np.sign(a) * np.ceil(np.abs(a))\n"
]
},
{
"cell_type": "code",
"execution_count": 343,
"metadata": {},
"outputs": [],
"source": [
"def predict_and_plot(model, feature, steps = 50):\n",
" lenght = feature.shape[0]\n",
"\n",
" dt = (1/ FPS) * SAMPLE_STEP\n",
"\n",
" trajectory = feature\n",
"\n",
" # feature = filtered_data.loc[_track_id,:].iloc[:5][in_fields].values\n",
" # nxt = filtered_data.loc[_track_id,:].iloc[5][out_fields]\n",
" with torch.no_grad():\n",
" # h = torch.zeros(num_layers, window+1, hidden_size, dtype=torch.float).to(device=device)\n",
" # c = torch.zeros(num_layers, window+1, hidden_size, dtype=torch.float).to(device=device)\n",
" h = torch.zeros(num_layers, 1, hidden_size, dtype=torch.float).to(device=device)\n",
" c = torch.zeros(num_layers, 1, hidden_size, dtype=torch.float).to(device=device)\n",
" hidden_state = (h, c)\n",
" # X = torch.tensor([feature], dtype=torch.float).to(device)\n",
" # y, (h, c) = model(X, h, c)\n",
" for i in range(steps):\n",
" # predict_f = scipy.ndimage.uniform_filter(feature)\n",
" # predict_f = scipy.interpolate.splrep(feature[:][0], feature[:][1],)\n",
" # predict_f = scipy.signal.spline_feature(feature, lmbda=.1)\n",
" # bathc size of one, so feature as single item in array\n",
" # print(X.shape)\n",
" X = torch.tensor([feature], dtype=torch.float).to(device)\n",
" # print(type(model))\n",
" y, hidden_state, *_ = model(X, hidden_state)\n",
" # print(hidden_state.shape)\n",
"\n",
" s = y[-1][-1].cpu()\n",
"\n",
" # proj_x proj_y v heading a d_heading\n",
" # next_step = feature\n",
"\n",
" dx, dy = s\n",
" \n",
" dx = (dx * GRID_SIZE).round() / GRID_SIZE\n",
" dy = (dy * GRID_SIZE).round() / GRID_SIZE\n",
" vx, vy = dx / dt, dy / dt\n",
"\n",
" v = np.sqrt(s[0]**2 + s[1]**2)\n",
" heading = (np.arctan2(s[1], s[0]) * 180 / np.pi) % 360\n",
" # a = (v - feature[-1][2]) / dt\n",
" ax = (vx - feature[-1][2]) / dt\n",
" ay = (vx - feature[-1][3]) / dt\n",
" # d_heading = (heading - feature[-1][5])\n",
" # print(s)\n",
" # ['x', 'y', 'vx', 'vy', 'ax', 'ay'] \n",
" x = feature[-1][0] + dx\n",
" y = feature[-1][1] + dy\n",
" if GRID_SIZE is not None:\n",
" # put points back on grid\n",
" x = (x*GRID_SIZE).round() / GRID_SIZE\n",
" y = (y*GRID_SIZE).round() / GRID_SIZE\n",
"\n",
" feature = [[x, y, vx, vy, ax, ay]]\n",
" \n",
" trajectory = np.append(trajectory, feature, axis=0)\n",
" # f = [feature[-1][0] + s[0]*dt, feature[-1][1] + s[1]*dt, v, heading, a, d_heading ]\n",
" # feature = np.append(feature, [feature], axis=0)\n",
" \n",
" # print(next_step, nxt)\n",
" # print(trajectory)\n",
" plt.plot(trajectory[:lenght,0], trajectory[:lenght,1], c='orange')\n",
" plt.plot(trajectory[lenght-1:,0], trajectory[lenght-1:,1], c='red')\n",
" plt.scatter(trajectory[lenght:,0], trajectory[lenght:,1], c='red', marker='x')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1301\n",
"(10, 6) (10, 6)\n"
]
},
{
"data": {
"image/png": "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LYQQuOaaa3D//ffjd7/7HZYuXTrlY/i+j02bNmH+/PkNOMPGKRaLeOONN8Y971a9p/u788470d3djYsuumhK+7XqfV26dCl6e3vr7l0+n8czzzwz7r07mPf8bBEGHlu2bMEjjzyCzs7OKR/jQO+F2eqtt97C4ODguOfdyvc1dPvtt2P58uU45ZRTprzvbLmvB/qcWb58OQzDqLtPmzdvxvbt28e9TwfzPj+YE2+6e+65R1iWJdasWSP+9Kc/ic9//vMinU6L3bt3CyGE+PSnPy2+/vWvy+2feOIJoeu6+Nd//Vfx6quvihtuuEEYhiE2bdo0E6c/aV/60pdEKpUS69atE7t27ZJf5XJZbrP/td54443i4YcfFm+88YbYsGGD+MQnPiEikYh45ZVXZuISJu2rX/2qWLdundi6dat44oknxKpVq0RXV5fYs2ePEGLu3NORfN8XixcvFtdff/2o77XyfS0UCuL5558Xzz//vAAgvvvd74rnn39ezvC4+eabRTqdFg888IB46aWXxCWXXCKWLl0qKpWKPMY555wjvv/978vHB3rPz5SJrtVxHHHxxReLhQsXihdeeKHuPWzbtjzG/td6oPfCTJnoWguFgvja174mnnrqKbF161bxyCOPiNNOO0284x3vENVqVR5jLtzXUC6XE7FYTNxyyy1jHqNV7utkPme++MUvisWLF4vf/e534o9//KNYuXKlWLlyZd1xjj32WPGLX/xCPp7M+/xQzEjwIYQQ3//+98XixYuFaZrijDPOEE8//bT83vve9z5xxRVX1G1/7733imOOOUaYpilOOOEE8eCDDzb5jKcOwJhfd955p9xm/2u97rrr5L9LT0+P+OAHPyg2btzY/JOfoo9//ONi/vz5wjRNsWDBAvHxj39cvP766/L7c+WejvTwww8LAGLz5s2jvtfK9/Wxxx4b8+c2vJ4gCMQ3v/lN0dPTIyzLEueee+6of4MlS5aIG264oe65id7zM2Wia926deu47+HHHntMHmP/az3Qe2GmTHSt5XJZnHfeeWLevHnCMAyxZMkS8bnPfW5UEDEX7mvo1ltvFdFoVGSz2TGP0Sr3dTKfM5VKRXz5y18W7e3tIhaLiQ9/+MNi165do44zcp/JvM8PhTL8okRERERNwbVdiIiIqKkYfBAREVFTMfggIiKipmLwQURERE3F4IOIiIiaisEHERERNRWDDyIiImoqBh9ERETUVAw+iIiIqKkYfBAREVFTMfggIiKipmLwQURERE31/wFwRYUJ3YTkmwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"# print(filtered_data.loc[track_id,:]['proj_x'])\n",
"_track_id = 8701 # random.choice(track_ids)\n",
"_track_id = 3880 # random.choice(track_ids)\n",
"\n",
"# _track_id = 2780\n",
"\n",
"for batch_idx in range(100):\n",
" _track_id = random.choice(track_ids)\n",
" plt.plot(\n",
" data.loc[_track_id,:]['x'],\n",
" data.loc[_track_id,:]['y'],\n",
" c='grey', alpha=.2\n",
" )\n",
"\n",
"_track_id = random.choice(track_ids)\n",
"# _track_id = 1096\n",
"_track_id = 1301\n",
"print(_track_id)\n",
"ax = plt.scatter(\n",
" data.loc[_track_id,:]['x'],\n",
" data.loc[_track_id,:]['y'],\n",
" marker=\"*\") \n",
"plt.plot(\n",
" data.loc[_track_id,:]['x'],\n",
" data.loc[_track_id,:]['y']\n",
")\n",
"\n",
"X = data.loc[_track_id,:].iloc[:][in_fields].values\n",
"# Adding randomness might be a cheat to get multiple features from current position\n",
"rnd = np.random.random_sample(X.shape) / 10\n",
"# print(rnd)\n",
"\n",
"print(X[:10].shape, (X[:10] + rnd[:10]).shape)\n",
"\n",
"# predict_and_plot(data.loc[_track_id,:].iloc[:5][in_fields].values)\n",
"# predict_and_plot(model, data.loc[_track_id,:].iloc[:5][in_fields].values, 50)\n",
"# predict_and_plot(model, data.loc[_track_id,:].iloc[:10][in_fields].values, 50)\n",
"# predict_and_plot(model, data.loc[_track_id,:].iloc[:20][in_fields].values)\n",
"# predict_and_plot(model, data.loc[_track_id,:].iloc[:30][in_fields].values)\n",
"predict_and_plot(model, X[:12])\n",
"predict_and_plot(model, X[:12] + rnd[:12])\n",
"predict_and_plot(model, data.loc[_track_id,:].iloc[:][in_fields].values)\n",
"# predict_and_plot(filtered_data.loc[_track_id,:].iloc[:70][in_fields].values)\n",
"# predict_and_plot(filtered_data.loc[_track_id,:].iloc[:115][in_fields].values)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## VAE"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# From https://github.com/CUN-bjy/lstm-vae-torch/blob/main/src/models.py (MIT)\n",
"\n",
"from typing import Optional\n",
"\n",
"\n",
"class Encoder(nn.Module):\n",
" def __init__(self, input_size=4096, hidden_size=1024, num_layers=2):\n",
" super(Encoder, self).__init__()\n",
" self.hidden_size = hidden_size\n",
" self.num_layers = num_layers\n",
" self.lstm = nn.LSTM(\n",
" input_size,\n",
" hidden_size,\n",
" num_layers,\n",
" batch_first=True,\n",
" bidirectional=False,\n",
" )\n",
"\n",
" def get_hidden_state(self, batch_size, device):\n",
" h = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(device)\n",
" c = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(device)\n",
" return (h, c)\n",
"\n",
" def forward(self, x, hidden_state):\n",
" # x: tensor of shape (batch_size, seq_length, hidden_size)\n",
" outputs, (hidden, cell) = self.lstm(x, hidden_state)\n",
" return outputs, (hidden, cell)\n",
"\n",
"\n",
"class Decoder(nn.Module):\n",
" def __init__(\n",
" self, input_size=4096, hidden_size=1024, output_size=4096, num_layers=2\n",
" ):\n",
" super(Decoder, self).__init__()\n",
" self.hidden_size = hidden_size\n",
" self.output_size = output_size\n",
" self.num_layers = num_layers\n",
" self.lstm = nn.LSTM(\n",
" input_size,\n",
" hidden_size,\n",
" num_layers,\n",
" batch_first=True,\n",
" bidirectional=False,\n",
" )\n",
" self.fc = nn.Linear(hidden_size, output_size)\n",
" \n",
" def get_hidden_state(self, batch_size, device):\n",
" h = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(device)\n",
" c = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(device)\n",
" return (h, c)\n",
"\n",
" def forward(self, x, hidden):\n",
" # x: tensor of shape (batch_size, seq_length, hidden_size)\n",
" output, (hidden, cell) = self.lstm(x, hidden)\n",
" prediction = self.fc(output)\n",
" return prediction, (hidden, cell)\n",
"\n",
"\n",
"class LSTMVAE(nn.Module):\n",
" \"\"\"LSTM-based Variational Auto Encoder\"\"\"\n",
"\n",
" def __init__(\n",
" self, input_size, output_size, hidden_size, latent_size, device=torch.device(\"cuda\")\n",
" ):\n",
" \"\"\"\n",
" input_size: int, batch_size x sequence_length x input_dim\n",
" hidden_size: int, output size of LSTM AE\n",
" latent_size: int, latent z-layer size\n",
" num_lstm_layer: int, number of layers in LSTM\n",
" \"\"\"\n",
" super(LSTMVAE, self).__init__()\n",
" self.device = device\n",
"\n",
" # dimensions\n",
" self.input_size = input_size\n",
" self.hidden_size = hidden_size\n",
" self.latent_size = latent_size\n",
" self.num_layers = 1\n",
"\n",
" # lstm ae\n",
" self.lstm_enc = Encoder(\n",
" input_size=input_size, hidden_size=hidden_size, num_layers=self.num_layers\n",
" )\n",
" self.lstm_dec = Decoder(\n",
" input_size=latent_size,\n",
" output_size=output_size,\n",
" hidden_size=hidden_size,\n",
" num_layers=self.num_layers,\n",
" )\n",
"\n",
" self.fc21 = nn.Linear(self.hidden_size, self.latent_size)\n",
" self.fc22 = nn.Linear(self.hidden_size, self.latent_size)\n",
" self.fc3 = nn.Linear(self.latent_size, self.hidden_size)\n",
"\n",
" def reparametize(self, mu, logvar):\n",
" std = torch.exp(0.5 * logvar)\n",
" noise = torch.randn_like(std).to(self.device)\n",
"\n",
" z = mu + noise * std\n",
" return z\n",
"\n",
" def forward(self, x, hidden_state_encoder: Optional[tuple]=None):\n",
" batch_size, seq_len, feature_dim = x.shape\n",
"\n",
" if hidden_state_encoder is None:\n",
" hidden_state_encoder = self.lstm_enc.get_hidden_state(batch_size, self.device)\n",
"\n",
" # encode input space to hidden space\n",
" prediction, hidden_state = self.lstm_enc(x, hidden_state_encoder)\n",
" enc_h = hidden_state[0].view(batch_size, self.hidden_size).to(self.device)\n",
"\n",
" # extract latent variable z(hidden space to latent space)\n",
" mean = self.fc21(enc_h)\n",
" logvar = self.fc22(enc_h)\n",
" z = self.reparametize(mean, logvar) # batch_size x latent_size\n",
"\n",
" # initialize hidden state as inputs\n",
" h_ = self.fc3(z)\n",
" \n",
" # decode latent space to input space\n",
" z = z.repeat(1, seq_len, 1)\n",
" z = z.view(batch_size, seq_len, self.latent_size).to(self.device)\n",
"\n",
" # initialize hidden state\n",
" hidden = (h_.contiguous(), h_.contiguous())\n",
" # TODO)) the above is not the right dimensions, but this changes architecture\n",
" hidden = self.lstm_dec.get_hidden_state(batch_size, self.device)\n",
" reconstruct_output, hidden = self.lstm_dec(z, hidden)\n",
"\n",
" x_hat = reconstruct_output\n",
" \n",
" return x_hat, hidden_state, mean, logvar\n",
"\n",
" def loss_function(self, *args, **kwargs) -> dict:\n",
" \"\"\"\n",
" Computes the VAE loss function.\n",
" KL(N(\\mu, \\sigma), N(0, 1)) = \\log \\frac{1}{\\sigma} + \\frac{\\sigma^2 + \\mu^2}{2} - \\frac{1}{2}\n",
" :param args:\n",
" :param kwargs:\n",
" :return:\n",
" \"\"\"\n",
" predicted = args[0]\n",
" target = args[1]\n",
" mu = args[2]\n",
" log_var = args[3]\n",
"\n",
" kld_weight = 0.00025 # Account for the minibatch samples from the dataset\n",
" recons_loss = torch.nn.functional.mse_loss(predicted, target=target)\n",
"\n",
" kld_loss = torch.mean(\n",
" -0.5 * torch.sum(1 + log_var - mu**2 - log_var.exp(), dim=1), dim=0\n",
" )\n",
"\n",
" loss = recons_loss + kld_weight * kld_loss\n",
" return {\n",
" \"loss\": loss,\n",
" \"Reconstruction_Loss\": recons_loss.detach(),\n",
" \"KLD\": -kld_loss.detach(),\n",
" }\n"
]
},
{
"cell_type": "code",
"execution_count": 303,
"metadata": {},
"outputs": [],
"source": [
"vae = LSTMVAE(input_size, output_size, hidden_size, 1024, device=device)\n",
"vae.to(device)\n",
"vae_optimizer = torch.optim.Adam(vae.parameters(), lr=learning_rate)"
]
},
{
"cell_type": "code",
"execution_count": 304,
"metadata": {},
"outputs": [],
"source": [
"def train_vae(model, train_loader, test_loader, max_iter, learning_rate):\n",
" # optimizer\n",
" optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
"\n",
" ## interation setup\n",
" epochs = tqdm(range(max_iter // len(train_loader) + 1))\n",
" epochs = tqdm(range(max_iter))\n",
"\n",
" ## training\n",
" count = 0\n",
" for epoch in epochs:\n",
" model.train()\n",
" optimizer.zero_grad()\n",
" train_iterator = tqdm(\n",
" enumerate(train_loader), total=len(train_loader), desc=\"training\"\n",
" )\n",
"\n",
" # if count > max_iter:\n",
" # print(\"max!\")\n",
" # return model\n",
"\n",
" for batch_idx, (x, targets) in train_iterator:\n",
" count += 1\n",
"\n",
" # future_data, past_data = batch_data\n",
"\n",
" ## reshape\n",
" batch_size = x.size(0)\n",
" example_size = x.size(1)\n",
" # image_size = past_data.size(2), past_data.size(3)\n",
" # past_data = (\n",
" # past_data.view(batch_size, example_size, -1).float().to(args.device) # flattens image, we don't need this\n",
" # )\n",
" # future_data = future_data.view(batch_size, example_size, -1).float().to(args.device)\n",
"\n",
" y, hidden_state, mean, logvar = model(x)\n",
"\n",
" # calculate vae loss\n",
" # print(y.shape, targets.shape)\n",
" losses = model.loss_function(y, targets, mean, logvar)\n",
" mloss, recon_loss, kld_loss = (\n",
" losses[\"loss\"],\n",
" losses[\"Reconstruction_Loss\"],\n",
" losses[\"KLD\"],\n",
" )\n",
"\n",
" # Backward and optimize\n",
" optimizer.zero_grad()\n",
" mloss.mean().backward()\n",
" optimizer.step()\n",
"\n",
" train_iterator.set_postfix({\"train_loss\": float(mloss.mean())})\n",
" print(\"train_loss\", float(mloss.mean()), epoch)\n",
"\n",
" model.eval()\n",
" eval_loss = 0\n",
" test_iterator = tqdm(\n",
" enumerate(test_loader), total=len(test_loader), desc=\"testing\"\n",
" )\n",
"\n",
" with torch.no_grad():\n",
" for batch_idx, (x, targets) in test_iterator:\n",
" # future_data, past_data = batch_data\n",
"\n",
" ## reshape\n",
" batch_size = x.size(0)\n",
" example_size = x.size(1)\n",
" # past_data = (\n",
" # past_data.view(batch_size, example_size, -1).float().to(args.device)\n",
" # )\n",
" # future_data = future_data.view(batch_size, example_size, -1).float().to(args.device)\n",
"\n",
" y, hidden_state, mean, logvar = model(x)\n",
"\n",
" # calculate vae loss\n",
" losses = model.loss_function(y, targets, mean, logvar)\n",
" mloss, recon_loss, kld_loss = (\n",
" losses[\"loss\"],\n",
" losses[\"Reconstruction_Loss\"],\n",
" losses[\"KLD\"],\n",
" )\n",
"\n",
" eval_loss += mloss.mean().item()\n",
"\n",
" test_iterator.set_postfix({\"eval_loss\": float(mloss.mean())})\n",
"\n",
" # if batch_idx == 0:\n",
" # nhw_orig = past_data[0].view(example_size, image_size[0], -1)\n",
" # nhw_recon = recon_x[0].view(example_size, image_size[0], -1)\n",
" # imshow(nhw_orig.cpu(), f\"orig{epoch}\")\n",
" # imshow(nhw_recon.cpu(), f\"recon{epoch}\")\n",
" # writer.add_images(f\"original{i}\", nchw_orig, epoch)\n",
" # writer.add_images(f\"reconstructed{i}\", nchw_recon, epoch)\n",
"\n",
" eval_loss = eval_loss / len(test_loader)\n",
" # writer.add_scalar(\"eval_loss\", float(eval_loss), epoch)\n",
" print(\"Evaluation Score : [{}]\".format(eval_loss))\n",
"\n",
" print(\"Done :-)\")\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 305,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0%| | 0/11 [00:00<?, ?it/s]\n",
"training: 0%| | 0/98 [00:00<?, ?it/s]\n",
" 0%| | 0/1000 [00:00<?, ?it/s]\n"
]
},
{
"ename": "RuntimeError",
"evalue": "For batched 3-D input, hx and cx should also be 3-D but got (2-D, 2-D) tensors",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[305], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mtrain_vae\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvae\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mloader_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mloader_test\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_epochs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlearning_rate\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m)\u001b[49m\n",
"Cell \u001b[0;32mIn[304], line 36\u001b[0m, in \u001b[0;36mtrain_vae\u001b[0;34m(model, train_loader, test_loader, max_iter, learning_rate)\u001b[0m\n\u001b[1;32m 29\u001b[0m example_size \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39msize(\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 30\u001b[0m \u001b[38;5;66;03m# image_size = past_data.size(2), past_data.size(3)\u001b[39;00m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;66;03m# past_data = (\u001b[39;00m\n\u001b[1;32m 32\u001b[0m \u001b[38;5;66;03m# past_data.view(batch_size, example_size, -1).float().to(args.device) # flattens image, we don't need this\u001b[39;00m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;66;03m# )\u001b[39;00m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;66;03m# future_data = future_data.view(batch_size, example_size, -1).float().to(args.device)\u001b[39;00m\n\u001b[0;32m---> 36\u001b[0m y, hidden_state, mean, logvar \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;66;03m# calculate vae loss\u001b[39;00m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;66;03m# print(y.shape, targets.shape)\u001b[39;00m\n\u001b[1;32m 40\u001b[0m losses \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mloss_function(y, targets, mean, logvar)\n",
"File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n",
"Cell \u001b[0;32mIn[302], line 128\u001b[0m, in \u001b[0;36mLSTMVAE.forward\u001b[0;34m(self, x, hidden_state_encoder)\u001b[0m\n\u001b[1;32m 125\u001b[0m hidden \u001b[38;5;241m=\u001b[39m (h_\u001b[38;5;241m.\u001b[39mcontiguous(), h_\u001b[38;5;241m.\u001b[39mcontiguous())\n\u001b[1;32m 126\u001b[0m \u001b[38;5;66;03m# TODO)) the above is not the right dimensions, but this changes architecture\u001b[39;00m\n\u001b[1;32m 127\u001b[0m \u001b[38;5;66;03m# hidden = self.lstm_dec.get_hidden_state(batch_size, self.device)\u001b[39;00m\n\u001b[0;32m--> 128\u001b[0m reconstruct_output, hidden \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlstm_dec\u001b[49m\u001b[43m(\u001b[49m\u001b[43mz\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhidden\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 130\u001b[0m x_hat \u001b[38;5;241m=\u001b[39m reconstruct_output\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m x_hat, hidden_state, mean, logvar\n",
"File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n",
"Cell \u001b[0;32mIn[302], line 54\u001b[0m, in \u001b[0;36mDecoder.forward\u001b[0;34m(self, x, hidden)\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x, hidden):\n\u001b[1;32m 53\u001b[0m \u001b[38;5;66;03m# x: tensor of shape (batch_size, seq_length, hidden_size)\u001b[39;00m\n\u001b[0;32m---> 54\u001b[0m output, (hidden, cell) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlstm\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhidden\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 55\u001b[0m prediction \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfc(output)\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m prediction, (hidden, cell)\n",
"File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n",
"File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/rnn.py:755\u001b[0m, in \u001b[0;36mLSTM.forward\u001b[0;34m(self, input, hx)\u001b[0m\n\u001b[1;32m 752\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (hx[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mdim() \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m3\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m hx[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39mdim() \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m3\u001b[39m):\n\u001b[1;32m 753\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFor batched 3-D input, hx and cx should \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 754\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124malso be 3-D but got (\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhx[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mdim()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-D, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhx[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39mdim()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-D) tensors\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 755\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(msg)\n\u001b[1;32m 756\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 757\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m hx[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mdim() \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m hx[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39mdim() \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m2\u001b[39m:\n",
"\u001b[0;31mRuntimeError\u001b[0m: For batched 3-D input, hx and cx should also be 3-D but got (2-D, 2-D) tensors"
]
}
],
"source": [
"train_vae(vae, loader_train, loader_test, num_epochs, learning_rate*10)"
]
},
{
"cell_type": "code",
"execution_count": 300,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1301\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADF6ElEQVR4nOz9d5gkZ3nuj9+VujrH6Z6wO7NJq9VKKGcESBwLkODIiGQTDwfbB4N9CAcwBtuYY4x/AgeMbTjY4K9NsADbJGMDQiJIgHIO7Eqbdyf2TOeurq6u+Puj9nmnesLuzG7vzM7M+7muvmamu6a7OtV71xPuR/A8zwOHw+FwOBzOCiGu9g5wOBwOh8PZWHDxweFwOBwOZ0Xh4oPD4XA4HM6KwsUHh8PhcDicFYWLDw6Hw+FwOCsKFx8cDofD4XBWFC4+OBwOh8PhrChcfHA4HA6Hw1lR5NXegbm4rouJiQkkEgkIgrDau8PhcDgcDmcJeJ6HZrOJoaEhiOKJYxtnnfiYmJjA8PDwau8Gh8PhcDicU2B0dBSbN28+4TZnnfhIJBIA/J1PJpOrvDccDofD4XCWQqPRwPDwMFvHT8RZJz4o1ZJMJrn44HA4HA5njbGUkglecMrhcDgcDmdF4eKDw+FwOBzOisLFB4fD4XA4nBWFiw8Oh8PhcDgrChcfHA6Hw+FwVhQuPjgcDofD4awoXHxwOBwOh8NZUbj44HA4HA6Hs6Jw8cHhcDgcDmdFWbb4+NnPfoZbbrkFQ0NDEAQB3/nOdxbd9h3veAcEQcCnP/3p09hFDofD4XA464lli49Wq4WLL74Yn/3sZ0+43be//W088MADGBoaOuWd43A4HA6Hs/5Y9myXm2++GTfffPMJtxkfH8e73vUu/PCHP8QrXvGKU945DofD4XA464+eD5ZzXRdvectb8Hu/93u44IILTrp9p9NBp9NhfzcajV7vEofD4XBOgmVZ0HUdsiwjFout9u5w1jk9Lzj95Cc/CVmW8e53v3tJ2992221IpVLsMjw83Otd4nA4HM5JsG0brVYLhmGs9q5wNgA9FR+PPvoo/uZv/gZf/OIXlzRSFwA+/OEPo16vs8vo6Ggvd4nD4XA4HM5ZRk/Fx89//nNMT09jZGQEsixDlmUcPXoU73//+7F169YF/0dVVSSTya4Lh8PhcDic9UtPaz7e8pa34MYbb+y67mUvexne8pa34G1ve1svH4rD4XA4HM4aZdniQ9M0HDhwgP19+PBhPPHEE8hmsxgZGUEul+vaXlEUDAwMYNeuXae/txwOh8PhcNY8yxYfjzzyCF784hezv9/3vvcBAN761rfii1/8Ys92jMPhcDgczvpk2eLjhhtugOd5S97+yJEjy30IDofD4XA46xg+24XD4XA4HM6KwsUHh8PhcDicFYWLDw6Hw+FwOCsKFx8cDodzlmOaJur1+mrvBofTM3o+24XD4XA4vcN1XVQqFbiuC0EQzrgR43IaCji9Z2ZmBq7rIpfLQZbX7xLNIx8cDodzFiOKIhMcmqah2WyekcehAZ+WZZ2R++csDcdx4DjOuheBXHxwOBzOWU40GkUqlQIANJtNtFqtnt5/p9OBrusAgEgk0tP75nAWgosPDofDWQPEYjEkEgkAQL1eR7vd7sn9mqaJarUKAAiHw0zkcDhnEi4+OBwOZ42QSCQQi8UAALVaDYZhnNb9WZbVVU/iOA4ajUYvdpXDOSFcfHA4HM4aIpVKIRKJwPM8VKtVmKZ5Svdj2zYTHqFQCMlkEpZlwbbtHu8xhzMfLj44HA5njZFOpxEOh+F5HiqVyrKLRB3HQblchuM4UBQF2WwWosiXA87KwT9tHA6Hs8LYto3x8XEcPnz4lP5fEARkMhmEQiG4rotyubzkiAVt7zgOZFnmwoOzKvBPHIfD4aww5N3RaDRYl8lyEQQB2WwWiqJ0CYqTUa1WYds2JElCLpeDJEmn9PgczunAxQeHw+GsMKFQiHWuTE9Pn/L9iKKIbDYLWZZZKsV13RP+TzKZhKIoXHhwVhUuPjgcDmcVKBQKAHzfjlMtGgXQFcGwbfuk3SqKoiCfz69r90zO2Q8XHxwOh7MKRKNRxONxuK57WtEPwBcgmUwGAKDrOncp5Zz1cPHB4XA4q0Q+nwcwW4dxOoRCIYTDYQA4Ixbs7XYbrVZrSXUlHM7J4HE3zrql3W5jamoKqqqecBhXvV5HMpk847bSruvC87yunLwgCOwS/FuSJHYdp3e4rnvSmgjAH67meR4EQYAoiuxnr0kmkwiHwzAMAzMzMxgcHDzt+zMMA4ZhwDRNhEKhHu2pH1Gh+S9kdMbpPUv5fK4HuPjgrEscx8Hjjz9+0vCzbdvMpvp5z3teTw/Wp4OiKOjr6+MCpMeczlwUSZIQjUYRiUR6Wi+Rz+cxOjqKarWK/v7+0xI5siwjGo1C13U0Gg309fX1ZB89z2N1Kaqq9uQ+OSfGtm0oirLau3HG4OKDsy6RJGme8FjooB5c3IMRiF5D901n0YIgsKmVdJZNf7uuC8uyoOs6P8PsMSd6j+deL4oii1R5ngfHcdBsNtFsNhEKhZgQOd3PTDqdxtTUFLM6P13BkEgk0G63YZomDMNgqZjTwbIseJ4HURR5oeoKsd69V/iniLMuGR0dZb9nMhlccMEFa6atsNVqoV6vo9lsIhKJrPuD0EqSTCZPmIJbDNd12eTXTqcD0zRhmibq9ToikQgikcgpRwREUUQul8PU1BRKpdJpiw9JkhCLxaBpGprNJlRVPW2BRFGPsyUyuJ4RRRGu66777z0XH5x1x+HDh3Hs2DEAfkh7165da0Z4AGBhc8uy0Gw2+ZTRswBRFJnIcBwH7XYbuq7Dtm3ous6Mwii6FYlEkEgklrzo53I5zMzMoNPpoFarIZ1On9b+xuNx9hkyDOO065l4yoXTa7j44Kwr9u/fj4mJCQDA4OAgzj333FXeo+UjCAKSySTK5TJ0XUc0Gl3Xud+1hiRJiMfjiMfjME0Tuq7DMIyu9IymaXAcB+l0elEBQgKZUkG2baNer8MwDIyMjLAz32BRsiAIiEQiiEajJ9xHURQRjUahado88eE4Dur1OlKp1JJEebDeg0c+OL2Ciw/OusBxHDz33HOYmZkBAIyMjGDbtm2rvFenjqqqrAui0Wggl8ut9i5xFiAUCiEUCnXVhlA6pt1uw3VdZDKZBUPo9Xq9q7MhWFPiuu4JBcbIyAjz9VgMVVWhado8A7NyuYxOpwPLspg9+4mwbZulAXi9B6dX8E8SZ83jOA727NmDSqUCANi+fTuGh4dXea9On2QyiU6ng06n07PCQc6ZgdqjAb/jRJIkVKtVdDodlMtlZLPZeVGGQqHAxAcVHIuiiFKpBMMwutpu6XbHcaDrOsbHxxGJRE74mQiFQhAEAY7jwLbtLuFA9UQkjk50PyReFEXh3VecnsHFB2fNo2kaarUaBEHArl270N/fv9q71BNkWWaFg61Wi4uPNYSqqsjlcmzcfalUmhdlWOhz2tfXh0ceeQS2bUMQBGzZsqXrdtd1cfDgQei6jtHRUezYsWPRwkRBEBAKhZiAlWWZRTBSqRQajQZM04Trukgmk4tGNXi9B+dMsL7LaTkbglQqhV27duH8889fN8KDiMfjSCaTyGazq70rnGVCXi3BoW8nm+GiaRpyuRxkWWb1H0FEUcSWLVsgSRJ0Xcfk5OQJ748EA5mDUWdNIpFAMpmEIAioVquoVquo1Wqs3ZvwPI/9L6/34PQSLj4464JCodAzQ6WzCVEUEY/Hebh7jSJJEvr6+hAKhdjYezK1m0ur1UKn00EqlUI+n4fneRgfH5+3XSgUwubNmwEApVIJ9Xp90ccnwWCaJhMWVNDc19eHVCqFSCSCer2OarWKer3eZZ+u6zpc14Usy7zomdNTuPjgcDicMwhFG8LhMDzPQ7VanTd7JTiNNplMsm4XTdNQrVbn3Wc6nWZFyGNjY4tGVBRFYb4Rc033VFVFPp9HJpNBMplEu91GtVrtmopLbrCxWIwLYE5P4eKDw+FwzjCCICCTyTDH2maziUqlwgpOq9UqPM+DJEkIh8MIh8Mskjc5Obng0LmhoSGEw2HYto1jx44tOBNEEASWegmKCkIURWSzWfT19SEWi8G2bZZ+6XQ6sG2b+ZZwOL2Eiw8Oh8NZAQRBQCqVYt4fhmGgVCqxbibLstBut3H06FEcO3YMoihCFEVYloXJyUlYloVGo8FEBtV/iKKIVquFYrHY9Xie52FiYoJ1vZimuehcm1gshkgkgkajgXq9Dl3XoWkaAHCX3RWG3l/LspiT7okunU6HtWevJXi3C4fD4awg0WgUsiyjWq3Ctm2Uy2UAs4tNMD1C6Zh6vQ7Lspj3S6FQAACEw2EMDQ1hbGwM09PTiMVizD6eilHJUKxer6PRaEBV1QU7W8jojNIvZGrG5wutHEEBUavVlvW/uq6vqYJ7Lmc5HA5nhQmFQsjn8wiHwxAEAYqiIJlMIp/PY2hoiN1GBmamaTIDvbliIJfLMcOxsbEx5pQaJBaLQVVVeJ636KLmeR5kWYYoitB1nbV3c2OxlWPuoEtJkha9zCUej6/krp42/FPF4XA4qwDVWyyGZVmsFmR0dBSO42B4eHjBSMTmzZvZ0Lu9e/eyYtR0Os2cUlOpFGZmZlj6Ze79eJ7HvEEMw4Dneby9doURBAEDAwOs/mchXNdlDrqAXzi8mIvu2cza2lsOh8PZICiKAkVREA6HmQnYsWPH5nlxAL6QGRkZgWEYqFQqqFarXcID8E3rkskkPM/D1NQUJicnu+6Lfvc8j6VmyOODs3KIorio8DBNE6VSCe12m7VM53K5NSc8AC4+OBwO56yk0Wig3W4jHo/j/PPPZ2JgrvEYYds2C71blrXgbBhKv1BdB03jBWZD/o7jsALUTqezqC8JZ2XRNA3lchm2bUOSJORyuTWXagnCxQeHw+GcZTSbTdZtQp4elAIJCoa52ycSCUQiEVY8uhAUESHbdyI4P0YURaTTaQC+CFoo2sJZGVzXRaVSYe9DJBJBPp9f8ykxLj44HA7nLKLVajETslQqxSIYNNtnbrssTcIF0HU2vFiERJZl5PN5iKKIer3ORA6ALhfUdDoNSZLgOM6iLbqcM4tlWZiZmYFhGKxVey3WdyzE2n8GHA6Hs46g9EcikegqCiWjr7mRD1qIkskkS6sAi4sPum+q/6CWXNd1WasnOaOS8FksisI5s8iyDEEQIMsyM4JbL/BuFw6HwzmLiEajrNh07vWALypoOi3g13GEQiG2vaqq0DTtpMWiAwMDaDQa0HWdtd8GxQcwK4R42mV1EAQB2WwWkiStO3t7HvngcE6C53m4/2CZH4A5K8ZCQ9xCoRAkSYLruvOiH8HtKT1zosgH4IsUavUtFotdkQ+qJ1hvC95ahKIf641li4+f/exnuOWWWzA0NARBEPCd73yH3WZZFn7/938fF154IWKxGIaGhvA//sf/wMTERC/3mcNZUe7eN4M3fOEB3LNvZrV3hbOBoTktnuctWHRKkPhYSptsoVBAKBRCp9NBrVabF/kguPDm9Jpli49Wq4WLL74Yn/3sZ+fdpus6HnvsMXzkIx/BY489hm9961t47rnn8Ku/+qs92VkOZzX4wdOTx39OrfKecDY6VM+xFPFhWdZJazUURUE2m4XnedA0Da7rshoDgEc+OGeOZdd83Hzzzbj55psXvC2VSuGuu+7quu4zn/kMrrrqKhw7dgwjIyOntpcczgriuh7+5cGjaLQtuJ6H/3zSFx/ff3oSw1m/6C8ZUfDmq7dAFPnBmbMyCILAvDdOJD5kWYaiKDAMA8VikbXMBk3Egl0tjuMwC3dd11l0hWa7BP93o2NZFprNJiRJQiqVOiOPYZrmot4q9D7Rexh8LzOZzJqaPnzGC07r9Tpr21qITqfTFR5caOwzh7OS6JaDT925D7W21XV9y7TxV3fugwcgHVHw6ss2I67ymm3OyqCqKqLRKKanpxEKhWCa5qJeD6qqolQqIRQKoVKpMLv1hWg2m2xRbbfbEEURzWaTDajjzOK6LgzDWLAmpxfYtt3lvbIcqtXqmhIfZ7Tg1DAM/P7v/z7e8IY3LPpBvu2225BKpdhleHj4TO4Sh3NS4qqM773nhbh8S6bretcDPACXb8ng++95IRcenBUlFotBEASIogjXdbv8OeYSDofZWTLVcYTDYUSjUcRiMcTjccTjcTZhl4bbUUGrpmnMwhvgkY+VQpKkUx7kt9YGAJ6xvbUsC7/2a78Gz/Pwuc99btHtPvzhD+N973sf+7vRaHABwll1NqUj+Nr/ugYXf+xOtE2HXR8NSfj626+BIvFGMc7KIssyi360222Uy+VFB9NRbYht2yw6Eo/H50VKPM9DuVxmtR+1Wg2qqsKyLNRqNWZYxsXHmYfEoqqqXZ1HgC9KwuEwIpHImnc2Jc6I+CDhcfToUfzkJz85YfhOVVX2ReFwziaeHKt1CQ8A0E0HT47WcMXWxaeRcjhnilgshnQ6jUajAU3T0Gg0Fjy+BotO6YzYsqyuhcvzPFSrVRbhSKfTzDuEagkobc45c1CNh2EYcJzZ440oiohEIgiHwwiFQuvufei5+CDhsX//fvz0pz89Ya6Rwzmb+dHeIgDgpRf0o9Ts4LFjNQDAXXuLXHxwVgVVVRGJRBCPx9FqtVAsFk8oPmzbZouWZc3WMHmeh0qlgk6nA8/zkEwmu7pcJEmCJEmwLAuGYSCTycx7DM6pY1kW2u022u32PMERjHCsN8ERZNniQ9M0HDhwgP19+PBhPPHEE8hmsxgcHMRrX/taPPbYY/iv//ovOI6DqSm/PTGbza6bcBFnY/CS3f04fzCJX714CP/y4DE8dqyGLbkoXrK7f7V3jbNBIcdLwzDQbDZRLBbR398/T4DIsgxZlrtabel3GlRmmiYA32o9FArBdV1WyNpoNLBz505MTU3BMAw+2bYHkJBrt9td74sgCExwqKq6rgVHkGUnrh955BFceumluPTSSwEA73vf+3DppZfij//4jzE+Po7vfve7GBsbwyWXXILBwUF2ue+++3q+8xzOmeSKrVm88pJNEAQBL7ugH4IAHC3rGEwvr6J8bv6WwzkdZFnG0NAQkskkHMfBwYMHF/x8UUcGnVlblsVSLaZpQhRFZDIZdoZNi6AgCGi1WpBlGYlEAoB/0hmMnHCWT6PRQLPZZNGoSCSCTCaDgYEBZDIZ9tpvFJYd+bjhhhtOWHzEC5M465FCIowrt2Tx0JEK7nhmCr/5gm1L/t/9+/fDMAxs27aNty9yeoIsy9ixYwcef/xxNBoNjI+PY9OmTV3TTlVVRbvdZsZhnufBcRwkk0lUq9WuVIogCDBNE47jwHEcWJYFTdNYkapt26hWq8jn8xtqgewlkUiEiQ5VVdfFZNrTYWM/ew5nGdx84QAA3/GUz3rhrDaJRIKNuZienkalUumKgFCa2zRNFgXpdDpQFAX5fB6KorDtRVFEu91Gq9WC67qwbRuNRgOCICCZTEIURdi2jXq9vvJPdJ0QjUaRzWYRiUQ2vPAAuPjgcJbMTc/zxccjR6t81gvnjOF53pLTdENDQ4jFYtA0DZqmdQkQEh+2bTPzKardoOhFUHzQT/q/crnM0jHUcqvrOq//4PQELj44nCUymIrgspE0+3ups154hISzHHRdR7FYRL1e7+qEWIhoNIp0Oo14PM5qOSqVCrNHB2YLGgGw1ApBn01RFNn2lB7QNA3NZhOAXz9CAqRer590ZgyHczLWliUah7MKBGe9JMOztsp81gvnTEDtr61WC7quIxwOIx6PL2rp3d/fz4bCOY7DBAhFNVzXhSRJUFUVnU4H7XabCYlg5IPEBxWaNhoNzMzMIBaLAfCFjmmaME0TtVoNuVyO139wThkuPjick8BnvXBWkmw2i06nA03TmFhot9tQVRWxWIxFMQiySdd1HbZtQ1EUdDodtFotALPRjXA4fELxQYiiiHw+j2aziXq9zsyuLMti25mmOc+0bCNAr6VlWSiXy0v6n0gkgmg0eiZ3a03Cj5QczkmgWS/v/trjePRolV3vHs+mXL4lg797w6UnFR68yIyzVMj5mbpODMNgQzhlWUY8HmfpEcCPfhw+fBiapqFQKKBer8MwDFY/Qn5LVERKkRDy+hBFsWvSbTqdRiwWQ7vdhqZpLKJCYiMajZ6x4WpnM5VKhf0eHIh6Iug922hC7WTwoyGHswRo1kskJHVdT7Nehpbp/cHhLAVFUZDJZFAoFBCPx1nXSa1Ww/T0NEu3JJNJhMNhuK6LRqMBURQhyzIcx4EgCMxrxvM8GIaBSqWCer2OUqmERqMB27aZ+PA8D5FIBIlEArZto1wuo1QqwXEchEIh9PX1IZ1O85TLEiHDN043/BXhcJYIn/XCWS0kSUIymUQ8Hoeu62i1WnAchxlXRaNR5HI5jI+Po1wuo7+/H5IkMcFQKBTgOA5UVUW1WoUoilBVlQ0zq1QqqNVqqNfrzICMxAuNkI9EIujr61vtl2LV8DyPTRTO5XJ8JtlpwsUHh7NEaNaLJApwXA/XnZPDvQfKJ531wrtdOL1CFEXE43HEYjEWwZiZmWFRiJmZGYiiCNM0WbcKhftVVYWiKDBNk81zcV0X1WqV3Tfg14FYlgVFUSDLMkRRRCKR2PBpQ9M04bpuVzsy59Th4oPDWSI06+UD//4kHAB//poL8cjRGjbxlAtnhSGnzL6+PjakzDRNRCIRVKtVdDodRCIR2LYN27ahaRqbWqsoCkqlEmKxGEKhEBMzVKAqiiJarRZCoRCrVWg2mxt+SKhhGACw4WzQzxRcfHA4S+SKrVlc7nl4z9efAAA8erSGV16yaXV3irOhCYVCGB4eBuB3YDSbTTz77LPMhyMcDjNxQk6lVLg6NTWFwcFBdl+dTge2bcMwDGiaBgBIpVIs9ULiZKMSFB+c02djx9E4nGViObMplJ8+yx1OOasLda5IkoRwOIx8Po+hoSGWepEkic10IWfSfD4PURRZ2oY6YhqNBtt2ZmYG09PTUBSFDbCr1WonNT1br5A5G9XKcE4fHvngcE5C0GTMtGdtr+/aM4XP/GQ/AG4yxjl7SKfTGBsbY50uVHjaarVYqqVQKKBYLELTNIRCIYTDYVbjIUkSXNeFruuQZZnVgFiWhWq1uiGLThVFQS6XY6/pmaTZbMKyLGQymXWd3uHig8M5CYuZjOmWw03GOGcd0WiUTbH1PA+SJLGOFfLqSKVS0HUdjUaDeXmQJXs4HEYqlWKj3+m+6vU6yuUyVFVFIpFY7ae5ogiCsGIRD7K073Q66zrFw9MuHM5JIJOxy7dkuq53PcCDbzL2/fe8cFHhwbtdOIx6HRgbW/i2sTH/9tNEVVUWvRBFkXWpUIsubbNp0yaMjIwA8Bc8MhwTBAHRaBSRSASxWIxNYZUkCbqu48iRIyiXy3y+yxlmvR83uPjgcJZA0GRMwmzem5uMcZZMvQ7cdBNw/fXA6Gj3baOj/vU33XTaAiRYl+A4DiKRCCKRCHRdR7PZhOu6EAQBoVAIiUQCkUgEruvCMAxmt64oCqsloehHKBSCqqpwXRfFYhHFYhGVSoWJFg5nOXDxweEskSfHarBMEwnM2irrpoPbHzi27s9SOD2g2QSmp4FDh4AbbpgVIKOj/t+HDvm3Hw+7nw6RiC+GLctiaRJJklCv11knC+ALFaoDoWJTKkBNp9NIpVLMRp1aecnWvd1uwzAMlEolWJa14H5wOIvBxQeHs0R+tLcIGxKu3TWAC/r9g7sMB//3P3+Je/advPNlo5s0bXg2bwbuvhvYvt0XGldeCbz5zX7E49Ah//q77/a3W4CJiQl2mZmZQaPRYJGKuUQiEZimiWaziVarhXQ6jUQiwea8kFimabbBGg7LsljKJplMIpVKMVMtKkq1bRuu6/KoB+eU4dVxHM4SIZOxX714CF/6+X788vv7EZIlSLaFHzw9hRt2FVZ7FzlnI6YJPPEEcP/9wAMP+H8DQLEI3H67/zsJj+OeHfPvonuRp+4TAEgmk/O2J/Fh2zbr0BgYGGAFppVKhZmGkWU4CZm5goYm6qZSKUSjUYRCIZimiXa7jZmZGYyMjECSpHn7wOGcCC4+OJwlcsXWLC5zPXzlgaMot11IIqDbQAo2fvz0UXwm60dDeNvtBmd8fFZo3H8/8OijwNwJqIIABFN1X/nKosLDMAxmgT6XhbohbNtmE1cpjQKADYUrFosolUqIx+NQVZWJj7mIosgm2kajUaiqCtu20dfXh1gshgMHDsC2bViWxaN6nGXDxQeHswwWarttQ4FiGfh/dz4DHaF5bbfBEDdnndHpAI89Nis07r9/4W6WbBa49lrgmmuAHTuAP/gD4MiR2dvf8pYFIx/tdhu1Wm3BmqJsNjtvxggNiSO/jlAohGg0ym7P5XKo1+vodDpsAB19LmnyKnlLkDcI/Z9hGLBtG7quswm7AP9cc04NLj44nGVAbbfv/trjePSofzZqQobmeojCxIWbU/jrN1/b1XbLi1HXCZ7nF4cGhcbjj8+mUQhRBC66yBcaJDh27vSjHVRceuSIn2r5yld84UFFqAEB0mq1UD/e+RKJRJhDKeCnWuZGPShC4nkewuEwm4DbCURdFEVBNpvF9PQ02u02qtUqBEGAZVlMfJCY0DQNiUSCdbjQ7ZqmIRKJMLdTnnLhnApcfHA4y4Tabi/+2J1om/4B2ICCkAT8xa27EBctALOtt1x8rFHabT+qQULjgQeAiYn52/X1+SKDhMaVVwLx+PztxsZmu1qCNR533z17/Q03APfcg2YqxcymYrEYUqlUl/iIz7l/XddRr9eZ8MhkMqzddm69SCwWQzKZRKPRQCQSQafTYVbs5OfR6XRgGAZL1TSbTUSjUeZ2OjMzw2adkCjh9Jb1ftzgnxoO5xR4cqzGhAfRcBT8f/eP47ev2wzP85BKpQD4Z7DkFsk5S/E84OjRbqHxxBPA3BZSSQIuvnhWaFx7rS8klvLeJhJA4XhRcjDFEhQghQIaggDtuPBIJBIndRPVNA2NRgOA726aSqW6HDnnmoFFIhEoioJoNMrcTV3XRSgUgiiK8DyPCRbXddn/S5KERCKBsbExNJtN2LbNrNk5nOXCxQeHcwr8aG8RAPDSC/rxhy/fjbf+00M4Utbx5UdncN5AHNfv8M9c9pYdmMfD3p1Ohw+lOlvQdeCRR7oLQ4vF+dv193cLjcsvB2KxU3vMVAq44w7fx2NuO+3wMHDPPUAiATUcRqtSQTKZROz4YwXPguemOUjUzhUqwcgHWafT9mQsVqvV0Ol02HUUxbAsC5Ikod1uo1QqIRqNQpZlmKYJy7LY/pCVO4ezXLj44HBOgWDbrSAI+Mn7r8cb//FBPHCogo/ecRR/fasMx67iw999Dh+8IoytfTHuibBaeJ6f0ggKjSefBOZOaJVl4NJLu2s1tm5dWlRjqaRS/mUhjgsSFUChUOgSGcEFfq74iMViUBRlXvEpRSQcx4HjOF3pkVgshlarBcdxYBgGEx6yLDPfD03TYNs2SqUSK261LAuxWAyCILACVM6ZgaddOBzOPK7YmsUVgb9FUcS//ObVeOftj+GuPUV86L8O47rNCsKw8Vyxia19MX6gXik0bTaqQYJjZgETuMHB2VqNa68FLrsMiJwdNvnLLeKcKzyC90F26kGoG4a8QEKhEGu3JRt1URRRq9VgWRaOHTsGwI+upFIpqKqKarUK27bX/SLJOTNw8cHZsNi23TV463QRBQHXbM9i70QDY7U2fnjQRgoe9hU1pCNlPFo5iL4Bg3uA9BLPAw4c6BYaTz0FzPWtUBRfXAQLQ4eHexvVOMsIioKFPuMkPhRFgaqqaDQaLD2TyWRQqVSQTqcxMTEBy7JQLBbR19eHRCKBZrMJQRAgyzIXH2eI9f66cvHB2ZBUq1W0222kUimWVz9ddMvB3/34APMA8QBoiMB2Grj3QAljrgkn3OryAOEsk0YDePjhWaHxwANAuTx/u82bu4XGpZcCG6wwMmgctlBdBhWTqqoKVVVhGAYcx2GD6dLpNA4fPszSLeFwGOVyGdFolNWJ0EwYzqlDdTQ0PZhY768rPwJyNiSKorDBWL0SHwt5gNiQoLkyooKF3YUEPvHW67jwWCquC+zb112r8cwz3c6gAKCqfiFosFZjkfko64GlFniSD8dCUQ/HcaBpGutWURQFpmmy2hDP89But1lksK+vj3mNTExMQNd1CIIARVEWnS/DWRzLstBut9Fut9n7BKBnx6K1AD8KcjYk4XAYjUYDpmmyIVq9YCEPkGk3ga1SBbdeMoBCXOnJ46xL6nXgwQdnhcaDDwIL2Ypv2TIrNK691m993QBdRJlMBpqmsRbupbKQWDEMgxWaRqNRGIbR1RFTqVRYd1Y2m4UkSVAUBZZloVqtwrKsrtbc1cRxHPY99jyPTeWd+/tCLCbkgp1Bc7cTBAGSJCEajS7puDFx3Bsmn8/DMAy02+1F67+ChnC2baPVajGXWfJYsSyLRUuCAjOXyzEvluC+Bp+DIAjYu3cvGxB48cUXn3T/zxRcfHA2JFTZT3MwIj0sNJzrAdJABIYn4yd7pnDTlbsWLA7ccLgusHdvt1vo3r3zoxrhMHDFFd0plMHB1dnnVYbG2S8VWpgWWmCbzSbrXAmHw6hWq1AUBaIootVqsbRKIpFAKBRiQoSMz3RdZ628qyk+Op0OqtXqqkRfyAF2sXZj27ZRqVTY37VaDbquw7IsJgRoqrAoiqhWq0zMeJ6HRqPBLO7JCI4GAC70mrfbbWzatGlRQeR5HsrlMjqdDmzbPql/zJmGiw/OhiUcDkPTNHYG2Cvu2uP7RZyTj8F2PRwp65jxEjAna/jHnz4LOZbaeMPnqlU/kkEplAcf9CMdc9m2rVtoXHyxXyzKWTa0IM9dGF3XZaZkqVQKhmEw+3TXdeE4DizLwuDgIHRdh2mayOVyaLfbiEQiXV0ugiCsWtol6OpKJxO0mAcXdvo9yGKCae719Pfcn4ZhwLIs1Ot16LqOVCrFTio8z0Or1UKz2ey6P1VVUSqVumps6vU6iygBYK+nruuIRqPMXp+GAEqSBMMwWLcSvbftdhuKojAxOXef6/U6isUidF0HcHbM4+Hig7NhCYqPYMj5dHnBzj78y/1HcWCmxa6rehHEnA7+5b5DqHoRJCLq+i08dRxgz57uWo1nn52/XTTqW5GT0LjmGt/Ui9MTFhMf7XYbnU4HsiwjkUgwIULFptTFIooii54oigJBELrO3On+V2O2S6PRgKZpAPyIUDqdXtL313Gcnuwvzc2hCFKpVGKRKU3TmKcPFe5SuoralEVRRDgcRjQaRaPRYGKOXu9YLMZEVTgcxqZNmxAOhyEIAhMsAwMDaDQaaLVaqNVqrEU6eCJlmibGx8fRaDQgSRJkWUY+n8fw8HDXwMHVYB0e+TicpREKhSBJEhzHQafT6ZlN9It25nHX+69nhacyHNiQoHsKBAG4cnMMn5ozfG5NUy7Pdp7cfz/w0EO+i+dczjmn2y30wgt9Yy9Oz3Fdl9UPKHMiR/V6Ha7rIhaLMSdTWpBpEq4gCKhUKl0CQ1VVHDt2DK7rsrN1x3FW1LXX8zzUajU252Yp9vNUPNtqtVhXyVLFymIIgoBYLIZIJMIEQLlcRrvdRjQaZTb31BlEA//osQEwkZJIJBCPx1mNCs3nobo0qg+hqIUsyyzVQ8ZxJFJIvLiui5mZGUxPT7OaNnpcei9XG/7N52xowuEwWq0WDMPo6YyKYOGpdbz+w4WAmCLhr169G4OpNdr2adt+x0mwVmP//vnbxePAVVfNCo2rrwby+ZXf3w1Kq9Vi0bygs6nruiyUTy6mtJjNzMyw9llJkmDbNur1OpLJJBs6RzOK6HfHcVZstovruqhUKjBNE4IgsMV9MaheQtf1rtRQu92GIAhsMT4dRFFELBZj6SnXdWGaJitGNU0TlUqFCQqKgtTrdZZqAWaLQanOhiIf5XIZjUaD2QIQ9JqTMKEolW3baDQaGB8fZ9GXWCyGoSHfiblarbKUzWrDxQdnQxMUH71MvQCzhaf0NfcEAW3LxbOTdfTlsmfF2cdJmZnpTp88/DDQas3fbteu7lbX5z3PH8LGWXGo5gCYP3G21WqxCbaO48DzPESjURYdITfUXC6HYrEI0zTRaDQwODjIFn3AXyzp/1eigJqKN8kYMDi1dy6maXZ9pwH/bD8Wi0GSJFb4SQLmdHAcB6VSCQC6LOgdx8H09DSr3YjFYshkMl3bk4gLprbS6TR7L6jtOTgkkCiXy+jv72cRIFmWYVkWarUaS6NRaiabzQLwC14BnDWDALn44GxoKMRMhktzQ9SnAw2fS0VCqLQd7MhF8Vy5gwcOl3H5joGzT3xYFvD0091uoQcPzt8ukfAjGSQ0rr4ayOVWfn85C9Jut5mIoBoOglIxFLWQJAmpVIotWBQhkGUZqVQK5XIZjuN0uZ9GIhHmUxFs5TxTUPTAdV1IkoRsNjvve+p5HgzDYOKKCIVCrFgzuJ/VahWtVguCICCZTJ7yvlHLreu6SKVSEEWRDeybmJhgAi2ZTLIajkgkwl5/Eh7xeByJRILtI6WXJElC/njEcG4xbDEwCFGSJHiexwROJBJBf39/l/ik+T9ny3GHiw/OhiY48bPXoUgaPveV+w6jcqyOl56fx5sLBaQEg4VRV3UiaLHYLTQefhg4fibVxe7d3bUau3fzqMZZDEU9SFgHoVZN6mgJenjM3VZRFCQSCei6jlarBU3T2AI3OTkJy7LO+ELWarWY8FEUhe0vQVEeGpIHzE7tpYF7c6GJvvV6HZqmQRRFxOPxU97HZDLZ9dqRH0cqlWK1ZLquwzAMxONxlrLyPA+SJCGdTs97HUlEiaKIfD6PTqfDIhcLIUkSBgYGoCgKksnkgt0ssVjsrDIx4+KDs6GhivmlGgYtBxo+99mf+DURo5UW3vHyrZienoZt2z1v8T0hpulPcg2mUI4cmb9dKjXbeUK1Gj3IjXNWhk6nw7pR5i5otm3DsqyuCB99/kioBN026T5EUWR1CqIoIpVKYXR0lC2eZwKKHhiGAcBPFWQyma5F3jCMroJMikLEYrGTfpeppqLRaKDRaLAC0lMhuE+O46BSqbBC3E2bNsE0TZRKJWiaxlIukiQhHA4jmUyy7qNgFIn8VKjeJhqNdokP8igiFEVh7+nZ0Ea7FJYtPn72s5/hL/7iL/Doo49icnIS3/72t3Hrrbey2z3Pw0c/+lF84QtfQK1Ww3XXXYfPfe5z2LlzZy/3m8M5bUzTZF/60znzORkV3S8sO1JqwXVdRCIRNJtN6Lp+5sTHxES30Hj0UeD4gZwhCMAFF3S7he7aBayRgxdnPhT1WMj4itIS1LJJ1uiiKHZFCCj1QouYqqqsjiFYsBr0megldJbvOA5LiwSFARXCUgpJkiQkEglEIpFl7Q91mDSbTdTrdZimiXg8fkqpV/LmCEZgaPIv1cpQagTwxZSqql2OpnNRVbWroHZgYABTU1PsNSC7ewCr3jZ7KixbfLRaLVx88cX4jd/4Dbz61a+ed/uf//mf42//9m/xpS99Cdu2bcNHPvIRvOxlL8OePXvOmkIXDgeYPbuIRqM9PYNzXQ//8uBRNI4PmKu0/Bz00VILn/nRXgiihLDTwsufN9Ab34FOB3j88Vmh8cADwPER6F1kMt1C48or/UgHZ11A0TRg9sw+CHVNJBIJlmYxDIMJFfoczvUHsW2b+X7IssxqDegxLMvqSa0UCQGKRsqyjEwm01UMq2kaWq0WSx+lUqmuWonlkkgk4HkeNE1js1ZUVWV1IieDLNCbzWaX5XkymWRCEPAjE0FhQ3Vmwfba4AXAvFoUSg/R62OaJpLJJGzb3hji4+abb8bNN9+84G2e5+HTn/40/uiP/givfOUrAQBf/vKX0d/fj+985zt4/etff3p7y+H0iDMZ9dAtB5+6cx9qbQsC/Om2ANBxgf/3k30wEMLmiI3/dl7h1AbbjY52C41HH/XTKkFE0e84CdZqnHvuuh4hv9GhRSkcDncVGgqCAMuymNU3dVQ0m03mSwHMmoXNHUhnmiZrx6XF1TAMJJNJNJtNFItF5HI5Ni/kVLBtG7VajRWLkk8GiYpWq8XmzVC3DqVYTjf6kkwmmTkYpUA6nQ4TDBQpCkLGXpqmsdeEikmproOcTFVVPeXXZS5B8UHvQy6XW93asVOkpzUfhw8fxtTUFG688UZ2XSqVwtVXX437779/QfFBbzRBVdcczpmEzgJppgKwuLXyyX6nsDVVksdC86fbAkDVjUCBjXP74/h/v3YBIoIJXddPLD4MA3jsse4Uyvj4/O1yuW5b8iuv9LtSOBsC13VZCH4hMT0zM8M8OdLpNEufUL2D4zhot9uwLAutVgvFYhGiKLKiTBImhmF0dZNomsbSDVSzQFbniqKwVAPNUKrX6xAEASMjI0zcUO0GFX6nUilIkgRN05hBF3XwULEsRWKmp6fZ9y84RI62s22bXQAwvxK6BFNHNCSPBIjneZienmaiQpIkdDodNpCSCDqLUu0FiQ3DMNBsNhGNRk8rQkOIoohsNgvP81hKZ0Vrx3pIT8UH5aP651gk9/f3s9vmctttt+FP/uRPerkbHM4JobM1x3GQyWS6DiSnArXMUchbEASEQyF84fUX4Pq//gWapgcRHmxIUAUX+4oaRhs2zksLrABQlmV/qNqxY91C4/HH/RbYIJIEXHRRd1Rjxw4e1djAkKlYKBRivhvBtEmtVoPruixaQYsonbVHo1GWZqDFWhAEmKbJTLrIw4LaV8PhMNvWsqxFB57Ztt0VlQmHwyiXy2y8QdCJNZFIwLZtlEqlrvoJQhAE9hiCIKBcLsPzPKTTaUiShHa7DcMwFp0auxwMw2AiZC7UUZNIJFikicRUUOwQmqYhHA73xBMlHA6zKNbZ4lZ6Kqx6t8uHP/xhvO9972N/NxoNDA8Pr+IecdYrdBCmbpNoNIpMJjMvJDp3fPbJfidXQ7qQtfWeyRmErBZyAmB6IpqIoOX5j3XHL6dx8bU5uA89BPuZZyBTzcbk5PwdLxS6hcYVVwBnUcscZ3UJmooFo2hUu9Fut6HrOhPJtK2qqqxjJZvNolarQVEUqKqKvr4+AH5kutlssnZcuj0UCrE0jOd56OvrY66owUuz2WQTVIPCIRaLod1usygJtYF2Oh2WyqBoYiKRgKqqaDQaLIoQCoVYJIfaS3VdZ2Zi5HFCUQgy66KICEVRgpESei2DA9lc12XRHnqtyJODjhtBd9JgmijoqhqPx3tmxtZsNmEYBgRBQCaTWTPdLXPpqfgYGBgA4JufDAbGXheLRVxyySUL/g/lxDicMwUVqjUaDdTrdXamt2XLlp4dEIL3Y1kWTNPEQw+Ow4WAHX1RPG8whod+8SzOGTuIy8f34oov70Nq+jAkZ84ZmiwDl1zS7Ra6bRuPanAWhVIS1L4ZxLIsNq2WFkA6A5dlGTMzM8z8Kph+UBSFWYfTIhyLxVg6RVVVxGIxNhE3uBgDsyZZwev6+vpQKpXYMDYSDul0mhWbkndIOBxGPB5HLBaDbdsoFotoNBpsaivtK21Xq9XgeR5UVWWdL6thIU6Takl4qKqKVCrVs5oPSuMA6JqkuxbpqfjYtm0bBgYG8OMf/5iJjUajgQcffBDvfOc7e/lQHM5Jofwt5WhpsmM6nUahUOipm2kQRVGgmCZe3ZnCK5qPovbtu/G80WeR0+ePkJ+JpbF3eBeueOMtiN7wIuDyy/1prxzOEqEQ/9ziy+CZvqIoCIfDbKoqQaPd2+12V3qB7qfT6TD3X8dxkEqlWAvsYos7eV0EZ5f09fXBdV1Uq1UWdaSIBp3J0+PGYjFWtEnzXOr1+ryFlgQPpV4kSUImk1mVBXmh9l8qZO0VNBkX8N/rtdjhEmTZ4kPTNBw4cID9ffjwYTzxxBPIZrMYGRnBe9/7Xnz84x/Hzp07Wavt0NBQlxcIh3OmMU2TDW+iIrp4PI5oNIpsNtuzMxEAfq3GwYPdbqFPPYXz5uSrLVHCs/3b8PDQ+Xh8aBce27Qbw+cP48Mv3QGzP4MoN/PinALJZHJRkzwq9pxbD0JEIhEYhgFd1+fVNpB3BUUjqLiaHmeu0ygAViAaTDlks1m0Wi0mcGRZZi2idBYfrKEI3m+tVmOmXdSZRkZnwcVYVdVVSUFQxCY4yC8Wi/WkuDQICTeK7pyOJfzZwrKPwI888ghe/OIXs7+pXuOtb30rvvjFL+KDH/wgWq0W3v72t6NWq+EFL3gB7rjjDu7xwVkxgpbMpmmyMzZVVZHNZk//AKVp/th4EhoPPAAcdy7sYtMmljoxr7wK/+2OcXiejXEvAwEuIiEFP/zN69CoVc/IYDvOxmEhMe15HvORCYVCC5pwhcNhNtyMRrYTrVaLtZzSjBj67lCdU6VSYWf3mqah2Wx2iZhYLMZSnYDfQivLMprNJrsvEh1zn0O1WsWhQ4fY8yN/klQqxVI0ANhI+tX47riuy4RHr1MsBHW22LbNojvr4Tix7FfphhtuWLD6lxAEAR/72MfwsY997LR2jMNZLp7noV6vs4MonWXRgTedTi//S+t5wL593SPkn3kGCJzZAQBCIT9lEqzVCBROP3mkgjG3ji1iBfAADwJ008beoo6RqD9hlOZAcDi9gIopqTBzodo6QRAQDocxMzPDvjfUHttoNNDpdLoKSyVJ6kqn0OJLiyMAllKh4W2ALx7S6TRKpRLK5TISiQQr+A6mP2l7QRBw8OBBFkUZGRlBNBpFJBJhnTsnm267EtBgPlEUz9h3l+bwCILQm5Ons4RV73bhcHoB5YaDg+LoEo/Hlx6mbDRmoxr33w88+CBwvK2ti5GRbqFx6aXACQ6C/oRbAedvG0Jz3ETFACIwcdfeIn73uk0sLM3FB6dXUHcLRT4Wq4XwPA+6rjPzLkmSmNMoRUbq9XpXJwjZnpPgp64UGmo2MzPDUi/UHRJMySiKgr6+vq6FtN1us7qJarWKcrkMwzBQKBRY1IWs3UOhEDKZzKoUlc7lTNdeyLKMfD7f86nbqw0XH5w1D7k3Ul442NKXSqUWN/FyXeC557prNX75Sz/aESQc9qMaQROvoaFl7SNNuL1pdx/+95fuxV2H2rh0JI0XjPhnc61Wi6deOD2FohU0x2Uh8UFtuOQXQWKAhrqljtvva5oG27aZoKC22qDj6fDwMCteBcBSJKFQCLquo1arMfGwc+fOLuFhGAaLlJTLZWYsls/n0dfXh3g83mUdP3eS7HqHROF6gosPzpqm3W6zNrtgPpp64LsiCbWaH8kgofHgg/51c9m6tVtoXHyxn1Y5DWjCLQBcvTWNuw61MV630NZ9UySaUrlW3Qo5Zx9k/EXtsXMXaxrgJggC0uk0NE1jnS2aprE2WPrdsiyUy2Wk02n2O7XsKoqCYrHIpuPG43FWh9FsNllhKYmgoAlXp9NBsVhEsVhEtVplReKpVIp9h0lEpdNp/v1YJ3DxwVmzBA9q5GVAueBsKoXQgQPdbqF7986/k0jEtyIPplCO+9WcKV60awDCTyZxtG7hQ996Bh97pYtrzikA8MUUP7hyeoHjOEyUz62LoE4Rz/OY78fo6CgTH5ZlIZPJIBaLMdMvGro2dzJuNBplJmaFQoHVcZDXB9WSUGEoGfE5joN6vY59+/ahUqmg1Woxt+F0Oo10Os26XxRFWdAQkLN24e8kZ81BBzUK74bDYVjFIpRHHkH4iScQefJJiA8/7NdvzGXHju7JrhdeCKxwHnXrYB+2ZxUcrFjQIePeAyVcNuIbLZGvwnopKuOsHkHxEUy52LaNSqUC13VZiyp9l6hOhBZ70zSZzbmiKGi1Wl1TcCnKSAWX0WiUCY9qtcpSJalUCuFwmA2Gm5qawpEjRzA5OQld12EYBosA5vN5DA4OIp/PM/tyiqhw1g9cfHDWFJ1OB/VKBXjmGcQefxzRJ5+E8OCDkA8enL9xLOZHNUhoXH21b1W+Sriuh3958CgabQvp42uBCxE/O1DBQHIMrtVBIhHDG65LIh7n9umc04NqPshSXdM05vtBRZ/UtknpEYoekrPpsWPHoGkaBEFgM15EUUR/fz8EQUClUoHneRgYGIDrupicnOwSN2S2RbNapqen4TgORFFk6RUAbNx8JBLB5s2bsX379p5MrOWcvXDxwTn7KZXg3X8/OvfcA+GBB9D3xBMQj7fkBfF27oQQrNV43vN8u/KzBN1y8Kk796HWthCDASAMByJKpoh/eeAoQrARCSt42UWbufjgnBYkMshfgyIQhCzL89o2qeAZAMrlMiqVCprNJhtHIIoiOp0Osz+nlI0sy2yoG4kMYLaNlyIgNEQuEokgGo2yYXWAX6dVKBTQ19eHrVu3LjiZl7O+OHuOzBwOANg28PTT3bUaBw5AABBsQvXicViXXorOZZfBufJKJF7yEkirGNVYCnFVxvfe80K8+2uP44mjMxDgwYUI03PRFmScNxDHb18zAMm1WYskh3MqUE0F4IsAVVVZukQQhHlpjKBdumVZ0DSNmZJFIhFks1k2xTaVSiGfz0NRFNRqNRZJsW2btev29fXBsiyMjo6yYlXy26HBcAC6OmMKhQJ27NjBZ31tELj44Kwu09PdQuPhh4E5TosAYJ1zDuwrroD8ghdAesELUO7vh3U8rEsTNdcCm9IRfO1/XYOrPvZfsM0ONIQBiIASwSdfdwnqtSp0XUe73eZnf5xThizVAbCajxMVMgfnwIiiyCIjuq4jGo0il8tB13WUSiVIksQiJp7nsTkuoigiHo8jl8shHo/jkUceAQA2JTcej0OSJNaOq+s6i5wUCgU2YI6zMeDig7NyWBbw5JPdbqGHD8/fLpkErrkGxiWXoHXRRTAvuQSRTZuYUVilUoF1/Awrl8utGeFBPDlWg2AaSAoWNM+P57RMF8c0oHC8m6DZbHLxwTllHMdhdtyyLLMukhMRHC1Pxlme5yEajSIajaJUKrE2WnJBLZfLaLVaSCQSCIVCUFUVruvi0UcfZcZk27dvRzQahaZpXXUn1I67detWCIKAdruNSqWCdDq95oemcU4OFx+cM8fkZLfQeOQRYE7uGYIAnH9+d6vr7t3oWBYq5TIAsJAvnWWZpum30/Z6QNwK8aO9RURFC5dviuMJTcWxqj8J8+6DNfyvK/PMrrqvr29dORpyVg7LsmCaJqu7CDr/LgbViIiiCEVRmPlYNptFu91m9R6xWAyO42BiYgKlUgmO47DrbNvGxMQEDMNgvhyu62JqaorVhlCERFEUjIyMsIgHFbUGUz6c9cvaO3Jzzk5ME3jiiW630KNH52+XTncLjauu8q8LQJbNgO9mGBQenU4Hoigil8ut2YX5V3bmMGBvxmUjaTxcj+Hj338OA6kwbjyvgEwmzWylq9UqCmd5HQvn7ITaY8njg6INi31nqC0XAOtEEUURsVgMqqqyLpVEIgEAmJmZwczMDCzLYiZjnU4HpVIJnU4HsiyzIWuNRoPVnMRiMXbfmzZtQvr4d5+EiiRJXHhsELj44Jwa4+PdQuPRR4FOp3sbQfA7TkhoXHstcO65wEk8LJrNJgsZJxIJ5hnQ6XTYcKW1KjwA4Ny+ENSRNFRVxeuu3IK/vGs/puoGK/rLZrOYmJjg4oNzypSPRw0pFQIApmku+r0JtuXShUS+aZrQdZ0Vq5ILKV1H4wts20ar1WLeH1TwSjNfUqkUGo0GFEVBPp9HJpOZtx8kbjjrHy4+OCen0wEee6y7MHRsbP52uZwvMkhoXHmlX7+xDKjSHgCbFklzJkh4LDYga61Azy8WiyEVUfDfLxrCNx4dw1cfPIYrtmaRyWQwNTUFwzBYwR+HsxwocqiqalcXy2KYpslmI3meB0VREA6H2XTadrvdVcRKY+TJm6NarbLJuKIoss9sOp1GMplkTqmhUAipVArZbPYMvwKcsx0uPjjdeB4wOtotNB5/3E+rBBFF4KKLut1CzznHj3ac8kP7zqUAEIlEmCMi2TOv9vjsXkHig87y3nj1CL7x6Bj+6+lJfOS/78azUxoG4nE0Gg1UKhUuPjjLglxJAbCUC4ATpjKChl+0PQmEer0OTdOQTCYRDofZiHcyI7MsC6VSCcViEYqisOLTeDyOfD7PnHsp9ZLL5biDL4eLjw1Pu+2nTEhoPPAAMDExf7u+vlmRce21wBVXAD3uxmi1WiwfnEql4HkeGsct0qn2Y61jmiY6x9NT1M1y6XAauweT2DvZwJ//8Dl87aFR/P2v7cag5B/4N23axHPgnCVTKpXYQDlRFFmny4mEe6fTYZENskqPx+PodDrsO0hFojRBOpFIMOdUEjuRSASFQoFFXEzTZJHKSCSCdDq9JovEOb2Hfwo2Ep4HHDnSLTQef9w39goiSf4k12CtxvbtpxXVOBm2bbMhcclkEqIodomR9ZILpucYjUbZQVgQBLzx6hF85DvP4L+emgQA/PRgE2+9wDdnqtVqC+bHOZyFKBaLzD690+mwlOVi6Upqf6W6D6rjUFUV5XIZuq5DURRIkgRN02CaJiKRCHM1bTQacF0XkUgEW7duRT6fR7VahWmabG5MKpVCPB7nQxM5DC4+1jO67re3BlMoxeL87fr7u4XGFVcAKxzqJ08ACs26rssW6kQisW7CtPScKOpB815mmgYUSUDT8IXg95+ZwkAoBVdvIDbawttffi1EkUc/OCdG0zQ0Gg14nodYLMYm14ZCoQW/Q4ZhoNFodNWDyLLMRALVW1HUpNlsIplMwvM8zMzMsBRPPB7HwMAANm/ejJmZGRiGgUQiAV3XWbpmvZxAcHoDFx/rBc8DDh3qFhpPPgkcrzhnyDJw6aXdYmPLljMa1TgZuq6zTpZUKgUAbMgVjexeL1B4mjoEgvNeguiWg8/dX8RmsYaoKuN1L7wIuRQ3HeMsjud5mJqagm3biEajzJuj1WqxAlGq56BIR7VaheM4bGic67psZkur1WIzXtLpNCYmJhCLxWAYBur1OorFIsrlMkvx7NixA61WC51Oh3W6hMNhNjmXpw45Qbj4WKtomm9FHkyhzMzM325oqFtoXHYZcBaFPh3HYTnlRCIBWZZZGx/gp2DWy0FL13XYts1MloDueS+PHq2ybR3XgwMZw4UsfuPqQbTqFS4+OCek3W6zIW6Dg4NMGAB+ai/ocuq6Lmq1GhzH6Wq/FQSBzWEZHx9HrVZj5mAU/dA0jaVbaAbR8PAwm57bbreRTqdZ10smk1k3kUtO7+DiYy3gecD+/d1C46mngOMHFkYo5IuLoInX8PCqRjVORr1eZ9MtKRpAYWM6a1ovUMolFot1HYxp3stFf/JDGNbsexoNSfj0216I0aNHUK/X0W63ec6csyBkzFculyFJEgRBQDQaRbVaZbNVgiK+Wq0imUxClmUkk0k899xzkGWZbaPrOiYnJ+E4DrLZLCKRCEvHWJYFRVFYdCMajaJQKDB3UlVVWZ1WLBZb0548nDMHFx9nI42GH9UImnhVKvO327x5tvvkmmv8dMoa6ggJFsOlUikIggDDMFgKJrlMj5CznbkplyBPjtW6hAcA6KaDAxULuXgczWYT09PTGBkZWTeRIE7v0HUdxWIRtm1DlmXkcjlMTU0hFAohHA53idZarcbqQPr6+jA9Pc08O0RRhOd5OHbsGJrNJmRZRiKRgKIo8DwPmqZBURTmI0IuqLZtwzAMuK7LnEyDET4OZy5cfKw2rgvs29ctNJ55xo92BFFV4PLLZ4XGNdf44mMNE2yjpYMbHdTi8fi6aslzXZeJj4UK73601y8E3j2YwN7JJmKqhFbHwT/fewSffOW5aLfbaLVaaDQarC6GwwHABryVy2U4joN8Pg9VVREKhZhrLqFpGnMmzWQycF2XRRojkQg8z4NpmtA0jc1sSSQScF0X09PTTMzUajVYltU1qZaKTMPhMBRFQTwe5+kWzqKsn6P7WqFeBx58cDaF8uCDQLU6f7stW7prNS65xE+rrBPa7TYsy2JTMgGwA54kSevujEnTNFaYt1AB7Ut29+P8wSQuG0njhX9+N/SOH9I2LP9MMh6Po1aroV6vIxqN8lA2h1Gv11GpVNBoNBCNRtHX18eEBQAm4qmzBfBrqVRVZfNZVFVl7qY0B4b8PmKxGCtkjUQiqFQqbPxBNBpltR7xeByqqiIcDrOICIezGFx8nElcF9i7t3uy696986Ma4bBvRR6s1RgcXJ19XgE8z+tqOSUjJHL+XE9FpsSJUi4AcNlIBnsmG/iPJyaQiSqo6n73y8NHKvjcPYfgGBpCVhMvOD4orFAorLvXiLN8bNvG+Pg4isUiE+2bN29mhmGCILAi7urxk5xYLIZYLAZd16HrOjMWI58PYHYOTDweZ8Z4giBAURTMzMzAtm309fWxAXaSJCEUCiGRSLATCh714JwILj56SbXqRzJIaDz4oF+/MZft27uFxsUXAxvoTJbmRNDZkeM4zI8gEomsy6JKcjVd7LmdqOX2r+7cB8DDSMTEFcNJZrnOfRM44+PjqFQq0DQN2WwW27dvZ+ZgACBJElzXRaVSYT46yWSS+eh0Oh3WdusE2vJt20YsFkM0GkW9Xocoikgmk5iammImY4lEgt1HNBpl5oCSJPGoB+ekcPFxqjgOsGdPd63Gs8/O3y4a9aMaVBh69dW+qdcGhYrWAD/qIQgCy1UrisJGbK83KAQezL8HOVHLLQBcviWLv37t8+BoZTQaDRSLRUSj0UXvj7P+qdfrrB02kUigUCigv78fjuMwsStJEvPdkGWZ+W3Q5GgqKqV2WgBs22g0yiIjmUwGxWIRlUqla9qtZVlMbJCDKn2vOZwTsf7FR70ONJsLF2eOjQGJBLCUAr5yubvV9aGH/PudyznndNdqXHihb+zFATDrdUEHLCpcE0VxXRsR0VnlicQCtdzu/uM7mOgA/Jbbr7/9GiiSiHZcYcWn09PTGFzH6TnO4riui0OHDqHdbgPwh8ANDw9DFEUm7ql11j4+PoGmRJPooDSMIAjI5XKs5gPwu1jI8yOVSjEnU8uyEA6HEY1G0Ww2YVkWK0qlx1xPpoCcM8f6XhXrdeCmm4DpaeDuu33PC2J0FLjhBqBQAO64o1uA2LbfcRJ0C92/f/79x+PAVVd1p1D6+s70s1qzzI16kCERVd6vp+6WuZws8kE8OVbrEh6A33L75GgNV2z1/RYGBgYwNjaGmZkZxGKxddeSzDkxnudhfHwcjUYDrVYLfX19yGaz7HNAgoSKkklQ0N+VSgXVapX562SzWVY4Stvbtg3XddmE2kqlgmazyTpZ6vU665oJRjqo5oPDORnr92gP+JGJ6WnfdvyGG2YFCAmPQ4f87Y4cAY4enRUaDz8MHC8Q7GLXru4R8hdc4A9h4yyJYHGaJEmoHPcuocr79Qwd2E9WhEcttwDwyosHoVsu7tpTxF17i7hiqz/iPJPJQNM0VKtVjI+Pdw2p46x/6vU6JiYm0Ol02MyUoaEhAH6tBnWRybLc1fEiiiJL2ZGvRzweZ5bppml2WawnEgnE43GUy2XYtg1BECAIAhKJBKrVKprNJpvFBPjiZj1MnuasDOv7iLV5sy84SGjccAPwz/8MvPGNwPi4H7lwHL+NdS6JhF+fQULjqquAXG5l938d4boui3pEIhHUajUAYIZE6525bY+L8ZLd/fj6Q6Ooty1M1jv419++Bt99cgKb0rOFqoIgYNOmTWi1WjBNE+Pj42e9+VhwrggtYuv5cXuN67pwHAeapqFcLsMwDFiWhf7+fqTTabboU9SDXEbpc6coCnRdx+joKDMCC4VCMAwDkiSxSAi9VhRRo9QKuZqapglZlrsMxegzzaMenOWwvsUH4Ec67r4buP56X4Bcf/3sbZrmXwBg9+5ut9Ddu3lUowfQ0KpWqwXXdSGKItrtNgv5bhTDrGAufS402bZxvNOlafg/nxqr4bM/PQAAqLctXDaSYZNtaZ7GoUOHUKvVEI/HkVsFcdxut2EYBjzPY4vXQpeFIDEQFAVLXbzmTmEl5g5Pm/vYiqLMu5ytC6ZhGCw6CPivtaZpKBaLME2TGYLJsoyZ43OdqHg7mUwyS35N02CaJvPnoDoQXde7uq+Cr1WhUGAzlizLguu6aLfbEEWRGQGqqopIJAJBEJj5GIezVNa/+AB8AfKFLwA33th9fSgEvP/9wAc+AGSzq7Nv6xTbttkAKjqoSZIEWZbR6XQgSdK6LjANQqFsYOHIR7DNVgBAS4DpuPirO/fBA5COKHj1ZZsRV2f/Px6Po1AooFgsYmpqCtFodEXblGl8+6lyImGyHKigcinQWTxB6YlIJIJYLHZWfR6Dg+AAX4zQwEXDMJBOp9l4e3pe5MdBIpfqN1qtFnRdh+M4iEQiME0Toigim80yQz/yBaH/J5Fj2zZzQVUUhXW4RCIRVkfChQdnuWwM8TE6Crz97fOvN03gttuAL38ZeMMbgDe9yffcOIsOQGsNGuFtGAa7jobGhcNhdtYUi8U2TJsoLY6iKC4Y+ViszZbqTi/fksHfveHSLuFBFAoFaJqGVquFo0ePYvv27azl8UzSbDaZURyF8OdGMmgRC/49NyqxlAjJQtBZP9UKBUXDQvshCAIcx2GLNLWJuq7LrtN1HYlE4qzxmUkkEvA8jxnUWZaFer0O0zSRTqdRKBSwY8cO9plqNBowTROO47DXmmqsyEAsHA6zeo5sNtvV2k5zXaiTJhQKQVVVFqnMZrNs9lIqlUIqlYJlWZBlmYsPzrJZ/+IjWFy6fTvwla8Ab34zcPiwX9chCH79x1/+pX85/3y/JuSNbwS2bVvtvV8TeJ7H2j+DZ5XhcBjxeLxrMQzm3zcKwbHmi0Ftthd/7E60zVmzp2Cb7UKIoojNmzfj8OHD6HQ6OHToEHbs2HFG7dcbjQar30kkEssyO1tueuVELHfBo0Ln4P/Zto1OpwNN02DbNqrVKlqtFpLJ5BkTce12m3WOnKhTiQYukrlXvV5npmDZbBYjIyNMKNGMFl3XkUqlIMsyGxRHogLwPy+KoiASibDHprlDFGkhQUb1WLqusyjJ2NgYbNtmhaaCICCdTnM3U86yWd+fmLGxbuFx993A858P3HOP/3ez6adbPv954DWv8Ye37dkD/NEf+bc///nAZz8LHM+ncrqhItLp6Wnm1yEIAmKxGAqFArLZ7LwD+EYUH8HIx4l4cqzWJTyA2TbbExEOh7Ft2zYoioJOp8OEyJmgXq932eCvdZdVWZbZ55UKJk3TRKlUQrVaXVZK52S4rotarcbulzqWThbxMU2TpbeCw94oamFZFsbHx6FpGkRRZOkYij4GIx+iKLIUk2maqFarKBaLzHSMiEaj2LlzJ2uFTyQSrFuNilkpMnI2181wzl7Wt/hIJHwfDxIe5PNBRajbtwMDA8Cv/RrwjW8AxSLwT//k14aIot92+7//tz9n5eUvB26/fbZAdYNDLXuNRoOFdpPJJPr7+9mZ10JsRPGxVI8ParPNxXzBdsGQf2Z6V6D9djHC4TBLubTbbYyNjbFwfS/wPA+1Wo3dZyqVWlfD/2iBLRQKrHW03W5jZmYG9XqdvYenCgkaqtmgQs12u41KpbLo/TuOg8nJSdbdQjNUNm3axLap1+uo1WqQJAn9/f2IRqOoVqvse0mpFBoUp+s6NE1DpVJhKRVgNu0iCAJUVWU1W4D/2TVNE5IkQVEUth/0Wm2k7zOnN6zvtEsq5RuILeRwOjzsR0CCDqepFPC2t/mXyUngX//VFxyPPAL84Af+JRoFXvlKPy3zspdtqJksQShHrygKYrEYO5gu5f+AjXWwWqrHB022/e4TE/jxs9N489UjiKpyV5vtiQiHwxgeHsb4+DharRZKpRJzqDyd15uEBy1E6XR63bpYSpKEdDqNWCyGZrMJwzCYGR55YizntaSajWazCc/zWKF1KBRCp9NBpVJBp9NBuVxGNpvtEqie56FUKqHRaLAaDkmSkMvl2OtP38NQKIR0Oo10Os3muNB+Uio0Go12XS+KImuVJfFCt9E8GACs7sOyLEQiEfZ4qqpumLotTu9Z35EPwBcUC1mrA/71i7V6Dg4C732vbzj23HPARz/qW6frOvC1rwG33OJv8853Ar/4hT/BdgMRi8WQy+WQz+dZ7ncpbGTxcbID9RVbs3jlJZvQON5q+8uJBl55ySZmLrYUqAMmFoux2oxyuXzKZ+6e56FarXY50a5X4RFEURRks1nkcjkoisJqKqanp5kIOxmO47BR9zQ0MZ/Ps1SkqqrI5XJsoiyZeRGNRgOlUqlr1L2iKMjn82wbTdNgWRaSySRSqRSLooRCIciyzO6PikLD4TByuRyy2Sz6+/uRTCbZfQTFMbXYhkIhVtNF3WrRaJSlXjicU4V/epbCuecC//f/Avv2+TNd3vMefzhcuQz8/d8DL3yhn8L58Id9W/YNgCzLp+RKupHFx1IP1tMNv17j6fH6KT0e5fwTiQQ0TUOn02FRkOVg2zYztCLhcbZ0gqwUqqqir68P6XQakiSxCcylUgntdpt1l8yFUjbU+ppOp5HJZOZ9BkKhEPr6+iBJEnu9LcuCYRgoFouwbRvhcBitVosVfVIxcafTYR1H8XicpYdIOJFFOhWZkhU6mZIJgoB6vY6ZmRkWVQFmoymu60IQBFY/RAPoUqnUWdeWzFl7rO+0S68RBH9C7ZVX+p0xP/0p8NWvAt/8pm/P/olP+JcLL/Tbdt/wBmBkpPs+ejXobo2yEcXHyWo+5pqMjdf8M+u9k0185if+TKFkRMGbr97CTMZOBAkFyvnTAlgul7vcMBdjbqqAhv6tdwv8xRAEgXmoaJrGTLuCPhyCILBuGgBswaZ0yImcbWVZRl9fHyqVCizLQrFYhGEYaLfbUBSFuYwqioKBgQHWQkuD4VRVZR4eiqKwaAoJCACsTiMYtWo0GiiXy8w8jKIcwcLUer0OwzC6zMRSqRTblsM5VXoe+XAcBx/5yEewbds2RCIR7NixA3/6p3+6/j6osgy85CW+XXuxCPz7vwO33uoblz39NPChDwFbtgAvehHwD//gR0lo0N311/stwEFGR/3rb7rJ326dshHFB0UcFluAyGTsL+/ch7+6cx8bLGc6Lv7y+PWfunMfdGv+GfZiyLLMztZVVYVt2ywNoJ2gaNqyLFZnQL4Q+Xx+wwqPIMGiVBohH4wWUNsuCQ9ynV3K3B2q5QiFQqjVapiYmOiaJKsoCrZs2QJJkljXDEU16L2VZRnZbJZFVxzHYfsVCoW67M/Jp4XqQ6hInL6fqqrCdV1WZEreIZS22QgjEThnlp5HPj75yU/ic5/7HL70pS/hggsuwCOPPIK3ve1tSKVSePe7393rhzs7iESA177Wv1SrfiTk9tv9gtaf/9y/vOtdsxbv09MnHnTXbK7b6MdGFB9UI7BYymIxkzHispE0PvPGyxY0GTsR5LOiaRokSWJTSGlBChaiep6HZrOJVqvFznxTqdSGS7MsBUmSusYCUITBcRx2CYVCy/YJoXZYimJUKhVWJDo8PIxEIoFOpwNd16EoSld6hMRLMLrmOE5X2oXeS3KmnZmZgeu6iMVi86ZKp9NplEoldDodVt9B6ZxYLMZahTmcU6Xn4uO+++7DK1/5SrziFa8AAGzduhVf+9rX8NBDD/X6oc5OMhngt37Lv4yNAV//up+aefxx4Ec/8rcRBF9oXHWV31Hztrd1e5EsViC7znFdF51OB+12G51OB/F4fM37SNDZI4ATFmouZjIGADvycQymTs1BMplMQpZlaJqGWCzGWjupeyGXy8G2bdRqNVacSAZUvJNhacxNuSwH13Wh6zp0XWfzVsiXg2o7qHhYEAQ2R4fanOmx5woPum+q5aAajVarhVqthlqtxhxiyZMnWOxKHj5zxU0+n4cgCGfUxI6zMei5+Hj+85+Pz3/+89i3bx/OPfdcPPnkk/jFL36BT33qUwtuHwxTAjitWRFnHZs3+3NjPvABYO9eX4R89auzEY6pqdlBd0NDfg0JeZFsEDzPY/ltcm8kemnwtFrous6KAE92JryQyRgA/PujY8jEQvjwzecBAB44VME127NLjh5RvUK73WZFg41GA+12G7VaDaqqQpZldkbPrbJXBnr96TNPY+11XWfFvZlMho0k6HQ6mJ6eZlEsqsNIpVIol8vzhurRcZWEka7rqFQqqFQqME2TpVCoeyb4fWu1Wmi1WohEIlBVldmxByNhoVBo3vwZDmep9Lzm40Mf+hBe//rX47zzzoOiKLj00kvx3ve+F29605sW3P62225jcwJSqRSG1+viu3s38Kd/Chw44JuXveY13bdPTAAvfjHwkY/4QmWdEgzzA/4Uzmq1ys7oZFlm26yHRZBMpZbyXMhk7KUX9OOe37sBLzm/n932+Z8dwv+7+yDu3jeDN3zhAdyzb3muu1Q0mc/nkc/nWVGiruusfqCvr29dvOZrheCwNrJBr9VqzDtn69atzLF0cHBw3iRbmtECgI24DwoQqvkgIVKtVlEul9HpdBCJRNDX14eBgQG2P0HxUSwWWR1JLBZjHVRBgnUf666mj3PG6Xnk49/+7d9w++2346tf/SouuOACPPHEE3jve9+LoaEhvPWtb523/Yc//GG8733vY383Go31K0AAP+WyaZOfhpl7/aFDwMc/7l8uvdQ3MnvDG/zt1yE0jRPwi/PorGpmZoa5LK51go6WJ4NMxn714iEIgoDPv+VyfPfJCTx2tIov3X8Uf/HD53DZSBoA8IOnp3DDrsKy9yfYuZFMJtlrLYoi64ZZicF0Gx3Lsrr8XwzDwMTEBCRJQiKRwMjICEt70CRZmsBLBZ/ZbBayLMNxHOYHQoPxms0mBEFgtSiNRgO1Wg2dTqdLhAZbf4Ot2K1WC4qiIB6PIxqNIplMzvs+BlMvG6mGi9Mbei4+fu/3fo9FPwDgwgsvxNGjR3HbbbctKD5UVV0Xi8ySWWjQ3Vve4v9dKAAXXeTXfTz+uH/54Af91Myb3uRHSzKZ1X4GPYFyyeS4SGdV5FuwXkyMaL7GUoy5rtiaxRWBvwVBwC0XDaHetnDN9iweOFTBY8dqAIDvPz2J4awvaJbThhu873g8jng8jna7jUajAdu2USqV2GKzHl7/sxWK9BmGAcdxMDY2xiIeW7ZsgaZpLF1H2zebTTbsbdOmTez9abfbCIVCzAiN3Fip3ZYmTVcqFcRiMfT19aFQKHQJBtd1Yds2a+MVBAGRSIRdUicogOefE86p0HPxQRMQg1B72IZnoUF3NGeGrj90CHjsMeDee/36kJ//3L/97ruB3/1df8bMm94EvOIVfpfNGiN4wKMwb7BQjhbr9RD+p9ZLAKfcmkhtuLV2t0FYy7TxV3fugwcgHVHw6ss2L7sbhqC8Pk1F1XWdjU1fD+/D2YZt2ywSoaoqxsfHoSgKotEotm7dCk3T4DgOO47qus6EB3mCBI+x9P5pmoZWq8Vs24lOp4OpqSk29HFgYGBepGJu7QZ1x1DLNi8w5fSankvWW265BX/2Z3+G733vezhy5Ai+/e1v41Of+hRe9apX9fqh1h5LGXRXKPjGZO94B/CznwFHjswal5km8J3vAK97nT8Q721vA+66C1jAYXEtMNd23LZtFl5eD4sepVwURVmS18NCUBvu5Vu6I16uB3gALt+Swfff88JTFh4E1RaQLwW1elYqlQUdPDmnhuM4KBaLqFarcF0XpVKJDWjbunUr63qhqGCr1UKj0UAikYCqqosObRRFkQ12JIdUimRQdEVRFKTT6QVTJKZpshNEarWmFB1Nz+VweknPxcff/d3f4bWvfS1+53d+B7t378YHPvAB/PZv/zb+9E//tNcPtfagQXf33DO/q4UG3d1xR7fHx5YtwO//PvDUU/7lQx/yxUmjAXzxi8BLX+p31dAcmhUq/PI8j7kfLodgwWlw7gQwG/UIhULrIpRL/h6nOwuF2nAjoe5WSgHAF/7H5Rha4uC5paCqKvL5PDOkMgwDMzMzPZ2Qu1FxXRdTU1NsmJymaVBVFeFwGNu2bWMdX+12uytdQnbmiUSCFaYuhiiKrHuFfD6CKTbqqJnLXOt9Eit9fX2nLJw5nBPR8yN8IpHApz/9aRw9ehTtdhsHDx7Exz/+cV7ERpzqoDvAj37cdhtw+LCfjnnHO4Bs1m/Z/Zu/8X1Ddu2anUNzhqCWv1arhXq9fsqV7nMjH+sp5QKc3FxsOSzUhusB+I0vPgLb6W1KkwoX+/r6WC1BvV5HqVRaF+3Pq4HneZiYmECpVEK1WkWr1UI4HIaqqtiyZQtrN280Gizy1Ol0kE6nEY/HkclkuqbRnggSNJZlsbqRkZERllqr1Wrz9i0Y+QDAaj7mdrhwOL1i7Z9ebkREEXjBC4DPfQ6YnAT+8z/9rphIBNi/H/iTP/FFyJVXAp/+tL9ND6BoR7lcZnNDFgvjLuW+5ooPOvtaLwXIvRQfc9twr97mT7p9YrSG/9/3nwXgv6b3Hyz3rO2R5oSQE6ppmpiZmWEzXzhLg4TH+Pg4JicnWYF1LpfDueeeC9u2Ua/XUavVmKMptdGS1wfVDlE65ESIoohoNNr1/cpkMkxIzMzMsJQgMOusGoS6bnitB+dMwcXHWicUAv77f/eLU6en/e6Zm28GJAl45BHg//wfP6JCc2gWmhtTr/vFsAsxNgbU6+h0Ol3h91gsdkozPxYqOCXPAjoAroeUi23bS3I2XSov2d2Pv3n9JfiHN1+OLbkYvv72a/C267YCAP7p3sP4+kPHluQBshSBEtyGihQLhQLC4TCzYaeJracidpYrkpaz/akKsF7vU/D2Y8eO4bnnnsPMzAxrkd2+fTtGRkag6zqKxSLq9TpisRhEUWTzeCKRCGKxGMrlMotWLEUM0H3Q94g6WQqFAiKRCGzbRqVSYd9l+pwGv5uqqiKbXbqRHYezXNb+UZ4zSzwOvPnNwPe/75uWfeYzwLXXAq7rW7v/xm8A/f3+DJpvfxvodE467M67/nrUb70V5aNHYds2s1lOpVKnJRKCEzclSeo6iK+HAx6dWYZCoZ7kzK/YmsUrL9nEXhtBEPDRWy7A/7nxXADAR/7jGXz5viMAfA+QxViKQFloG0mSkM1mkclk2Pj3Hz52AL/1j/fg7meLy3ouyzVKW872p2rC1ut9+sneSbztCz/Hv//ofuzZswe6riOdTmPr1q3YuXMnZFnG9PQ0jh07hkajgUMlP0oWFB+e56FcLsM0TZYKy2azJ9038m2hiKLrumg2mywCEolEYJom6vU6m9A7FxI+HM6ZgouP9Uqh4Lfm3ncfcPCgb1y2e7cvOL75TeDVr/aFyDveARw96rf43nDDrAAZHYV5442Y0TS0NA3QdWZOdDppEVo86YBHBXTrTXzQWeWZHMzmuh7SURm7BhKwHA8/fc5fCL//9CQ+85P9+MxP9uPL9x+B686+tj94evL4z8UFyom2iUQiyOfziEajuO9ACWHY+OGj+9FqtebVDZzK/Z/u9su9717tk+u6zC69WCzirof3YqtUxpN79sNxHORyOZxzzjkIh8MYHx/HoUOHsH//fpTLZTw7VccnfnQYz0zNpkJM0+zyiCkUCl1TaU8GRT5okCC52NKwQRLEjUYD1Wq1K/II+LV7vYjYcTiLwcuYV5Gg0Rb9DcymHYKRBTroUPscnd0sBXH7duAP/xD4gz8AnnwSuP12eF/7GoTxcX/wHQBPkuAePgz7hS+E9U//hM773oeWrkMcGYHyj/+I1K5dTHQED1SLHQxPdv1cj4+F7i9YrT/3trnX0Wsy9yBKf9u23TUQa264fO57sNhPRVFQr9fhOM48vwXCMAw2oygSibCw96kUXbuuC8uy5oXSAd8D5K/v2j/PA0Tr2PjLO/06kLgqo9rUAQ8QBA93Pn0MYVi45+mD+OvQcQ8SVQFEAbrlwHWBnz99CGlY+MXTz+JTShuCICGminjF8wbxvb0z0Do2AAE/PlABYOGB/ZP4+x8+4adoVBk3XdDPFj5/roiM/3hqEk3LgyBI+MHToxBg4QdPj2IwKQNwkYzIeP3lWwB46HRMfPOxUTQ7NgRRwF1PjyIMCz9++jA+pdqAayMeCeG1V2wBAHz7iQk0DQsQRNz59BGEYOOHTx/BQAwAPKQiIbzu8mEIApg1uWla+NZjo2gZFjxRxE+eHkMMNn7y9CH8ddgCPA/xsIzXXL4FsizB84BvPDoKzfBv+/FTRxGHhV88tQ8fMyuwbRujtTYyEQWW0cahYgWS5+C5UgeSHEJkxsaDB4s4vxCD53VPmn36YBU2gF88N4nz+kLsfVYUBclkEoqiLFuQk6gnl9NarYZGo4FoNIpms8nae8vlMmZmZuZ5MZFJGYdzphC8s6xyrNFoIJVKoV6vr6lK60qlgrFA3cRCBwvXdVEul1Eul5nD4XKwbXtZngtzF+vgRQQwsG8ftt1/P0YeeghqoACtlkzi8NatOLx7N9oveQlCx90ugxe6n8UIjhgHfJERCoXgOA5L39AsF1VV4TgOWq0W8/iYKyJoAad5FcRCQoPEBp2Ji6LIzvRoQaTnQb4Ky4GGsM3FcRxYltV1f9FolB3EFUU5oVNk8H7oslAkQRAE1g2hmyb2T7VQanu439kKEwvXBEhwEIGFqGBBgQMXAhwIcDwRriD6f3sCHIhwIOK4FETwE+rhuNA76TNYGqsf31romSz8nGe3PrW9luBCFSzkVCAV8iC5NiIyEFOAYq0F2TURlz08bygFQRQRjkRw1Y5+yLLEPm+UCkmn02yo3GJUq1V84xvfQL1eRzwex5YtWzA8PIwdO3agVqtB13WEw2HUajWUSiXIsowHHngAmqYBAH7zN38Tm08yXdu2bUxPT0MUxa4ZMZyNy3LWbx756BHBCAbQfcZsGAZarVbX9NblOr7Sor0cTiZujmzdiiNbt0J63eswsmcPdtx7L0aefhrpRgOXPvUULn3qKZQeewzHrrsOx669Fp3AwkmRF0VRmJBYTCAAs26fdJvrunBdl01ZDY6eD+agaf7LQpER+j342tOiHXx8uo4O4sHXsd1uMyG12Ej0YHQlOI+GRAWZowWFoSRJ7IyV9oWe80LQ+7vQaxd8fMuy2OsIAILnYVtGhmM28SLsx7iXgeEpaCMET1bRcGS0XQkOJGiQoHkLtDGfVacfaw8BHmS4kOBCElxInv+7CxFtKDAhw4EI3VOhG8DoPGucOAAPm9w62kersAQFoVAbFw5nEHJENjSuWq0C8MVvoVDA0NAQIpHIghGKYNqFfrZaLRw7dgy2bTMjM1EUkUql5kXlaGAdh3Om4OKjR2SzWaRSKbawtVot1Go1NJtN5iwI+AsWGQaFw+EFTYOCZ/BkNkTV7tFotOvAENxuIaillc7Kg4scLYSCIEC+8EI4jz+Oo5s3I95qIaFpiBgG+vbvR9/+/bj0K19B5wUvgHbrrdB+5VfgxmIswkAHurl1G6qqIhQKsQOfpmkol8ssJaEoCsLhMMLhMBzHYSPfs9nsgmIrFApBVdWuVA2FlU3TZK2ttPDTUCxd19miTpGVoNjRNI0JCknyzzQVRWHTRoNCstFosGFsmUwGrutienqa3RdNCx0eHoaqqjh8+DAsy4KiKNi1axd7Lq7rwjAMdDoddDqdee8fzTwKh8MQBAH1eh0zMzPMgIoGjkmShH0TVYxN7IcIDzHRgOQ5iHsGfv2yYQxnY/BEBZUO8Om7D8G0/RmGIjwoooAbz+uDDBexsIJYWMUXHhyFbosABLgQEFIE/N2vXw6tUYcAIJNOw4OA3/raQ1AsE+rxOImiePjd52/t+ixalgnbdphosiwbdx8o+qk0eBA8QJCA67YWIMv+e+q/T4BtW3AcF09M1mC7FI0QIYjA87f2wXUdOIHPh2VZ2D/ThOP6Wsr1RLiSgMs3ZyFJfuQrHA5DUUJMLJqmCcdx8OCxynHLWBeACEkScPlwBoLnwnFmO7IUWYYoSvjxwTJMC5AEFyE4UBQRN5/nPwfX8/DdX07DtIXjwkNEWAJ+7fJhVHQHdUtAwxQwrbvYV+6gYQIWJFiQMe6lUfaiuCzr4PduuRRbB7JMKNCJi6ZpaLfbmJychK7ryOVybFAgfVboOBMOhyHLMqvTqdfrkGWZ+X+Ew2EkEokFhwmul3Z3ztkLFx89RNd11Ot1NBoNdmYqiiJCoRBSqRRSqRTi8fiy8rdUeJZMJntudUziwTl6FPY73gF7fBzO1q2w/uEfUPujP0Lj2DFEVBWRZBKhX/4S4XvuQfiee5CLRNB52ctQuekmlC6/HN7xhZqcGMk8KXjGHo1GoSgKq1lxXReJRAK5XA6qqrLqe5olQYuYKIrswDpXCLiuC13XYRgGwuEw68SIxWKsbTH43jQaDSa44vE4EokEi8h0Op15Lo8A2MwNqvy3LAu/+MUvUKvV4DgO8vk8RkZGWKqo0+mg0Whg3759rF0yFAph586dkCQJnU6ny2VSkiSWmiEhRq8dpelKpRJM02TbJhIJyLLMomiHyjpqXhQXDkTwK7v78aNny3hoooMjVhIvPmcbarUayuMlqK4FRaSUigfRAy4azuDibQNQFAV7JhswnSnIwY+nDWgtA/0xCYIgoC8dxt6pJmQb8AQVbQhoeiHYloTMwGYUFJN5wCQSCXieh3a7Ddd1sb/YQPFZw08BiTYkAYAL5PqyyEdl9prYto1wOIyS7uCOMcCXSp6fAnGAoU2bsCmlMsFqmiYmqy08Pd2BIlAEQoDrAfFwCFsHcyxN4W8PiGIIyeQgpjsCvnbIjwxRikW0XbzhvB0YSsisI8TzPKiqiummBXhVqLIHywuh7slo2Qoy23bjkq39eK5k4JknHkYYDmS4EOFBt4F0KovzNvmPT58zQYzhb356ELotYNqNo4EoDITwy5aIPeNVbMol5tUV2baNiYkJTE1NodlswrZt5PN5GIbB/EPos0+pRhKyyWSSnYSQtbuqqojFYohGo11ROe7vwTnTcPHRI8rlMiYmJtjfsiwjmUwyh8JT6eCgfnzP8xAOh5dUL7AcBEGAUixCednLZofd/ed/AsPDcM47D9bLXgZ7fBytTAbN//xPKHffjei3vgX58GGEv/MdDH3nO+hPp6HddBPar3oVvOuuY0OuCFqM6YBLAqXVajEHRUnyF7ZQKATP81h7ajQaZS2HlFqh303TRKvVYqkbEh3BGosg0WgU4XC4a3iaYRhIJBJIJBJIJpPsfkmM0BlyvV6HZVmQJAkTExNs8BelarZt28bym/V6Hfv3+90fJEApHRUc9gXMRn4oQhR830l0BL1Q0uk0HMeBrutotVrsrPjCLXmMDBbw0ku2wTAMnL9jC+47XEUhoaJSqcB1Xewt6rAg43lbC/it63fhH+45iIcOl/F0ycGNV/kdTF98rIymp+K/ndeH97z4HPzNj57DvQdm8PCRMn71/AxkWYZt27j/mUMoiBrOHUzjjS96Hr583yE8c6yE+355GK+4oMDajKvVKmKxGCKRCKLRKJ4p19BABM/flsKrLsjg209N4/FjNRyq2tjSl2Q1QSQ2H36ugYYXxRXb8/jtG87BP/x0H546Mo290y1sLySZIBBFEY+XpzDuJHHRcAa3XFjAfz0+igNTDUzZEVzR14f+/n5MTEzANE1mNR6Px3H3k9PoQMG1O/vxf152Pv7yrgP46bPTeLKh4leu8tuYK5UKSqUS6vU6Dh2pwPUEbMvFcPWOHO47XMeBmRYe3TeOnfk47n2uCAXAVdtyeN3FeXzzkWN4ZryGJ8er2HXVNqRSKZimCcuycKBYh+N4kAH0iToEF6gjgnoH+MiPi9g7beDtL+xgaHCQCQlZljE8PIxoNIpisciGyOVyOUiShEajgVAo1JVClGWZCW1BEFjKpd1uo1QqIZVKsRQMsVgKksPpFbzgtEd0Oh0cPHiQhTFPVXAQjuOgVCrBcRyEQiHkcrkz04JKPh/T093D7gC/7faGG/y23TvugJdMwjJNuA8/DPHrX4fyzW9CmJptTbSHhtC+9VaIb34z1CuvRKPRYO2CoigiHo8DAGq1GjRNQyqVQqFQgGEYqNfrzKqdoicnSykB/oGVRMdSXx+KspAgCoVCyGaz80QLnVmXy2UUi0WYpolwOIxisYhwOIxNmzax0fM0A6Ner6PZbOLo0aOIRCLsIC6KItrtNksJUUpnsf2js1Car0FzPY4cOcIEGBmARSIR5HI5iKII13UxOjrKFloqUJwyQ5gxBNy4M83Gtf/8YAXbhvpx9TkFAMAjRyoYr7XxqxcPsVqV7z45gYxk4pycn+6q1Wp46uA4So0WnrcpzcL3vyy2kU9FsbM/CdM02Vk5DawTBAEHiw1UDRvP3znAJuZ+/7HDKCTDOKcvwlJ4JCSfPFbBVK2FF+3sY3VTjx6tIpcI46Kt/ey5h0IhPDnWwESjw/bdNE18+8H9iMPABcM5FiERRRGJRAKxWAyu6+KZsSqmmx28aGefn36UZfzsYA2b+1K4+pwCPM+DpmkoFovQdR1HSi1oCOPmS/0hcJVKBQ8fnEZSFTGUUjFW0dHyFNzwvBHE43HYto0f/3Ic+XgIu4fSbDic53n49B1P4T8ePoxrNoXw33ak8NP9FTw0YSLe1499JT8KdOlACB95yRZccM6WeamQZrOJsbExmKbJ0oyUMkylUvjOd76DyclJjIyM4KKLLmLF0LZto1arwTRNZLNZDA0NwXEcfO1rX2Opy49+9KMn/R7xglPOXJazfnPxcRbiOA7K5TJs215whHbPqdeBZnPhmTNjY/403oWiLo4D/PSnwFe/Cu+b34RwvJYDAKzzzkP71lthvOpVUHftYotnp9PB5OQkq8InO+lyucwW3MVGeAe7bCgFEcxzLwfP89ioclpAg/MziHK5zIygaMqn4zgIh8MYHh5m0ZJwOIx0Os1C4q1Wix3YSZAsB4p0hUIhlhKifaC6FYqakBMlheTJvdLzPORyOWzduhWqqqJWqzExGIlElmwUNzU1hXK5zAqlKTpBv4dCIVaPEyxypMFolBajeSGqqqLdbqPVarH0AKXUKOJF6TZRFFGv19nzCXZ9pFKpE56hk4AvFousRmbz5s1dfhk0AbbT6cwrdKbrqc2Zhq2pqopMJoNwOAzbtqFpGqrVKksvUW0RCY10Os2MvqjoWBRFHCibmKhquHJTBOVyGe12G8/N6Bjoy2LajeMvfnwUHcdDNizgQy/sw01Xnodk0o/4PHCogmu2Z2GaJo4dO9ZlakfRxTvvvBNTU1PYtGkTzj//fLTbbVYvdvS4aeDQ0BD6+vrQaDTw7W9/G51OB4Ig4I//+I9P+rng4oMzF97tsoZxXReVSqXLTfSM99unUosPtDtRu50kATfeCNx4I4TPfhb4/vdhf/nLkO64A8qzz0L5xCeQ/MQngOuuA970JuB1r4Mbi6FSqbBCXFrEaKERBAH9/f1dLb1LmWexXChqEAqFUCqVYBgGNE1jB2fbtjE2NoZ6vQ5RFNHf759pdzodjI+PsyLbZDKJmZkZGIaBqakpTExMoN1uQ1EUDA8PszH1i00TnQu10FI7Lf0fRSsodE55ezq7bjQamJqaYrdv3rwZsViMzWNxXZcV/1JdwFLQNA2jo6Oo1+ssPURW62TVTa8fiYx8Ps/er1arxaI92WwWhmFgenoamqbBtm1WF0NpN1VVWUfP2NgY2u02q4dJp9PM+Ipel1QqNc/IzfP8UfTBOTSpVAqbN2+e5zarKApkWUYoFGLPgeasUH0SPT55vBiGwd77WCzG2siDhcyU2ms0Gjh06BBLPQULqVMA+vt9AVkoFFAul+GXJBvY2hfBF359F/7ge4cwVjfx4R/N4OkJDW+7bisOtBS8/fan8MW3XYkbdhWwfft29h41m02YpsmiYyScJEli/h70/tFnKhwOd4n/pX7XgjVdHM5y4eLjLMLzPFQqFVZfQHncNUEkArzmNZBf8xo45TK8b34T8te/7qdy7r0XuPdeeO9+N4QbbkDyhS9E66qroKoq0uk0Mz8iVnKqLXUiVatVJohM08TY2Bgz9yoUCmxM+aFDhwD4i2qr1WIL4vT0NI4ePcrSKSQ8gs9psedF+XdKDRCiKLLakmw2y7oz6PMRiURQqVRYSkhRFCQSCWzZsoWluCYnJ1Gr1VjRbz6fZ+3GVGuzEIZhYHJyEpOTk6hWq+zsNpfLIRaLQZZl6LrOaiio3VoQBIyNjXWZwFmWhWKxiOnpaQCzXUp0PyS2qDiV0keUFiORSkIgFovBMAxYloVqtQrDMFgUp9PpsKLvVqvF0lZBQRRsWaYan2CtD9XqzHbIzBrTUWGmaZosdUHROxIVfmePxe6T9pNEAIkxes1IyOTzeYiiyFxSs9ksvvSmC/CJnxzDXc+W8ZVftvFcZT+GIzYygo4fPH4EL9rZB0mSsGXLFkxNTTFhFyygJoFFoqzT6bDPB+CfrTYCUcvlwsUH51Tg4uMsgYQH5aWz2WxPZoKsBlIuB7z97f6FXFS/+lUIjz2G8I9+hHN+9CNsi0RgvfzlMF/7WrjXXgscP8BLknTqaaBThGZdNJtNPPvss3Bdl83XGBkZ6RJGg4ODKJVKrP05Go1CkiQcPnyYuWdSLciJoM6Ydrs9z3COhAqdiSuKwkaj05lrJBLB6Ogopqam2OyPeDyOdDrNil0pxK+qKmzbZmfuwZHqQedUSn1Uq1W2sBqGAVVVMTg4iM2bN7OOHTKjokhKNptFqVTCzMwMO6Mm0RCJRFirM0UZ6DUNOr8G26VlWUYul8Pg4GCXGRylL4KeLSTc6G+aV5JIJFi9TFAMUGSABAhNjAXAIkrUvhpM9dFrRWkKKvqlSJfjODBNs2tQWzweRygUYlErEgTUAk+mg/Seh0IhxONxtFot1sL90RtHIEkS7twzjYcmbTwp2MjCwn17juFv/8uDIIeQSsTxP67z7duPHj2Ker2OqXIFCvyaqWQyyWph6vU6BEFALpc77vZqshbu5RAUriQoOZylsjZXt3UGHfDpDDCbza6fVrdNm4D3vx94//vh7dmD5uc/j9A3voHw+Dikb34T4W9+E7FsFsYtt0B/1augXnYZcOutSyqA7aUAkWWZpUxEUcSWLVuwefPmeSkvWkxFUUSz2US1WsXRo0fZYtvf39/VZhyEzo5psQyakgUXakmSoGkaq88AZg3NUqkUHMfB/v372Vl3oVBAJpOBbdtotVqsEJIECBXwUuRkISM2ajmmxTFYLEr1FTSvBgCrf1EUBaVSidU80P3SfVPb7JYtW9jtQVFNBnOWZbHnT+kY6k6iluzga0dRBkpT0eJJpnU0m8SyLExNTXWZ0JEACXZZkTgjO3PqGKE0Cf0PFWzSJSiW4vE4K4KVZZlFc6geh/aPFnsSlzQTJui+S9GRarWKVruD/YemAS8MAQI6noxJpCCZDj5/3zgUOMhEJLx4ewL5TBI7d+7Ef9zzMI7MtDEYmx1TkEwm0Wg0oGkaotEo8wAhMRb8nFK79Ing4oNzOnDxcRZAhYAkPE5lBshaQDj/fNTe9z7MvPnNiP/yl8jdeScyd94JqVRC7EtfQuxLX4K3eTOgaUCt5gsNEiAkPI6nPdBs9kR8uK6LYrGIUqnEFqF8Pn/S2RYUTTh69CharRZkWca2bdtYoWIymWSLFYXhg06tAFhRJS3iwX2i6EHQEj8SiaBYLKJarcJxHIiiyEymSKhQXQcVPiYSCXYdFX3Shbp56LHoDN1xHHbGTqZrQVdMwF9syOiKWkepdic4i4QKZalYlqDFVZblWbfW488xlUrBsixWF1IulyGKIotG0Bk8iSlg1sVWkiRYlsXeH9pnMtij+T4UwQFmW57nGuPRok2igYpjg6KOxgLQ4kuLOj2OKIrzzPJouBu957quQ9M0FpWi1A99XizLwnuvzuKbe5v4RVEEjrunOpCgwxcImbCKf398Ei85t4P+pIonyyJcz0Pbdtlk3Egkwgz3LMtC7LhRIL32wfeHtj8Rc8UHh7MceLfLKkOV/OSYuZL1DqvBkSNHUK/XWTFcLpVC5L77EPnWtxD54Q8hHA/nA4AjirDyeVQ/+UlE/uIvkNyzB9i2De6PfgRhZKTL+4MO/nMPprQQ0xksiQH6SWegAJBMJtHf3496vQ7At5imKEdwSNfTTz/N9pEWC+qUoXbhgYEBVgsRLBTtdDrsrD4ajbL9oMdotVpoNpus9ocWu6CFPe1bsCYoeNZPix+d1VOKIjjllLxCKFXQaDSY0yotTsGUA7WhUrqICj6DKZ9oNMqKRmkBt22bLXjBNuO5Z9WqqnbVjtB7S10xwUGEVCjseR5LpdC+GobR9ZwBMNFBYov2JdhhM9cYby5kFkj7HwqFuuz1S6USi8iEw+EFowbBuhBK48iyjEwmw2pfWq0WK1wmLxpKvfXl8/j0vUWMWVGYnoSEYKEDBYYQgn3cH0wAMJxS0Gy1cLF7CAOKDikcR2rkXCSiCVy7LcmEBdXP6LqOmZkZ3HfffSzt+653vWtJhoaTk5PwPA/9/f1rpz6Nc8bg3S5rBMobA3576XoXHgBYyyktMolMBuItt0C78UaIsgzxe9+D9K//CvGHP4Rk25CKRQz8z/+JSiaDAxdeiJkPfhD2sWPAsWNsIaXahrlTcIHZKcAnQhAEpNNpiKLI6gX0wKC9oGW167qYOu5tQo/veR6KxWLX2erRo0e7nEqpwJNESrA+gEQR+XvQWfpcMUGvWzQaRa1Ww9jYGLsfepy5M2aCw/3mvg7B9EiwYJSiHXOt/4P1IbRf8XiciY2gEy2lNILFosHHDUKLOr0OC91GPh/kURF0uqXoRnDiM4Aux07yv6BojiiKTATScw0WhAbTH4sNEgzed6FQYKlT+mxQRGhuWiOYxiGRRa8debYkEglMT09jcnKSGepNV+rody0IooUpNwHNCyEntPAHL8rjaEvE//doFbYLHKtbAEJ4ADvwEvtZCC0D+/Yega1EcNnwxcgeT9EFi2yDxcfB0QMnIvi8zrJzWM4agIuPVYKcKgGwKZXrHRIGdPacy+W67J4rhgH3xS+GduWVSH3iE3A/8xlEv/51ZOp15KpV5KpVnPM//yfKV12FiRtuwNSVV8JeYNz4YgfEYGElLaDUNRKsQ6D0Q3BxAGjuiLfg/ZMBVFAM0H0Gh3gFixxpsaRow9zXiYoPKVJA6YygRX2w/iC4r8HOjrkLf9CLIhjdoLP6YIqBhgcGX7fgTB7y3DiVse/LQVEUdpY+t6B2bkv23AuJI2qJjcfj7D0noXG6+05F4nRCQb4iJL6CYpM+c6qqsrQV2a7Tc0qlUti6dSsGBgZw7Ngxv7h4dAYJGBhIyPiN3QP46aSEnx5xcahi4JYL8njRlhhuu7eKZyb9ExoDCp51+7FTLCIWEvDyi3IwWhrC/QUWNSJRN/f50/ynhUQXFRyT0KLXkMNZDlx8rBLUSktFg+sVOshReqHZbKLdbiMcDkPX9Xmii6zYp8tllItFtK67DoXpaZy7fz9ipolQu438ffchf999uDAWg/6yl0F/1avgXH89JFXtmiQbPEMn4QEs7GNAC3SwpoF+kjign3v37oXruti0aRM7myabd4qCUAEldR/Q8yIzM7pfSiNQGLzT6TC/jiuuuAKFQoHtl2VZmJmZYfvlui4TMnSWTsZWtC+0mFFhY7ATg1IJJB7o72DaJviazX3deik25gopWvyC0QwyMyM78KDAoAgFXUhEBaNGZxpBEJBKpebNSTnR9gCY2R1F3NTjn2MyjxseHsb09DQ6d9+P2Mw04rILo1HBS/rjuHJzH7YNb4KidBCHhT9/6SBe8y/70Hb89+2Q14cBrwbLkXCw2MDhkoFnSjZede35rNhU07QFU05z6z7ICyf4GYpEIl2mbRzOUuHiYxWhM6P1DBUMEpS6oANX0BKaWihLBw6g9G//BkcQkIhGkfzDP4T+Z3+G9vg45O3bEb/mGoTvvBPi6Cji3/oW4t/6FtDfD/z6rwNvfCNw1VX+6NZlEEytnIyrr776hLfH43GUSiUAQCaTwbFjx6BpGsLhMLOCp9/p/afCT/J8iMfjsCwLuq6zyIemacxhU5IkZuoFzM4SCqbuyD+ECmLJQI2iFatV2Exn3ME6nBOF7edGqub+PNvOupf7naZoDHmBNBoNFnUjk8H+/n686qYX44knnsDk5CRzS03GXcStKGLpPDRNwzPHZpByNdiIIgwLTURwzMsi7lq471gbitiCPKHh6h19GMz3MZFHxmkERScjkQj7bLKBeMcLa6lGh8M5Fbj44JxR5p6N0mTNdDqNQqHAipJoQXKnp1H+t3+D1ekgIcvY/Lu/i9zu3Qh/5SsI3XorQnv2QGy3gV/8wu+Auf124N/+DSgWgb/9W/+yY4cvQt70JiAwxn6loPqH4Ah0y7KQTCaRyWSQyWS6tqdUAgDEYjEUCgVMT0/Dtm1WI9NsNmFZFivkpMWa6i6oCwQAa7klu28ArFuEHDlXE/LimMtCwmJu1Gq9QmMUKALRaDTYZ6BQKECSJKRSKVx44YUIhUKYnp5mE3ePHTvGip73TbcQESwMhy0IRgNNLwIdKuCKcAHsyih4xa4kDK0JPRZlkUIqyiUoYgmAGbqRMdzZ8BnirH24+OCcUQRBYKkDAKxLAeg+Q6QOjGldh6iqyOk6tn/wgxi+/HJ/u0IBuOuuWZ+PVAoYGfGt2//mb4A77wS++lXgO98BDh4E/vRP/cvll/tC5PWvB4aGVux5JxKJro4QwzBg23aXsyQAJk7of7Zv345KpYJMJsPaVpvNJuvIoSm/kiSxDhNaNIKzVIhTGbx3pqH6jbkC42zZv9WCDNuoPqVWq2FmZgadToel+NLpNLZu3coEPdWYzMzMwLZt7MqFsOn5W3DZSBa/968PAcdLiVwPsJUYPvjKizF69AiLSNLMJaC7QJdqi6jtmj5H610EclYOLj44KwqdZQHdKY5SqYTJyUl0BAHpX/91nNPXB2FgoDscPzwM3HPPfIdTRQFe8Qr/omnAd7/rR0R++EPg0Uf9ywc+ALz4xX405NWvBpbQRng60IA0TdNYq+ncNJuu60x4UIFh8P8pNdJut9HX18eKFCllNbdtlsLiAFhaZ+4k1LMBmrrKWZhwOIzBwUGEQiHMzMygXq/DNE2MjIwgHA4jm82y1m1Kx7XbbUQiEeSjKrKOjYPFOkR39rsjwUXJFDGu+amcRqMB13VRKpXY9zD4XaPuo06nM8+HhsPpBVzGclYcOtjR8K5KpYJDhw6x1r1zLrgAwvEpmfPC85s3n9hcLB73Ix3f+x4wOQl89rN+dMTzgJ/8BPjN3wQGBoDXvAb45jeBQJSg1yQSCdZaSwWE2WwWoiiyWgwA6Ovrw5YtW+b9v+u6qFar8DyPFapSFINsxovFImq1WldYvFAoIJvNnpXCg7M0JElCoVDA8PAwE6AHDx5Eq9WCqqpIJpPo6+tDf38/c4YNdq08feAoQvDbliMhCRcNxeFAwH3jHeTzeeTzedbCHDRrI+izs5SWWw7nVODig7PiUKjXcRyMjY1hz549rPWUpsdSqobyzadEPg/8zu/49SGHDgF/9mfA+ecDnQ7wrW8Br32tX6j6G78B/PjHwJwD8OlCdRZk3ERChGpBAL8gdWhoqCvlQL9TnQfZnFMovFarYXp6mhUdSpLEDNKo04WzPkgmk9i+fTvC4TBs22ausmSAl0gkMDIywqIglmUhl8thez6Jvrh/eHdcD6+7pIBPvPZivOyCISiKwtxi6fMT9LUBZoc7BufecDi9hIsPzqqQTqfZ2PpWqwXXdZHP55m9NrlOAj06AG7bBvzBHwDPPAM88QTwwQ/6UZRGA/jnfwZuvNFP67zvfX6aZm73Rb3uD7VbiLEx//YFoLw5AESjUUxNTbEi0mQyieHh4QVrHTqdTpcPjOM4qFQqmJ6ehq7r8DwPoVAImUwGhULhpHbwnLWLqqrYtGkTm89DLro0UVlRFGzfvh2WZTE31Gsv2Y04DeyzHeybqOJlu/O4YmuWFX97nodYLNblv0MEC1HnRkU4nF7Aj1acVcEwDExMTLCz93w+j0QigVQqxRZjOoNfimfCkhEE4OKLgU9+Ejh61K8hefvbgUzGT9P89V8DV1wB7N4NfOxjwIEDvrC46Sbg+uv9Dpsgo6P+9TfdtKAAoQiHJElotVpoNBrsoE9nrHNxHIf9nyzL0DQNpVKJFZKGw2H09fWxOpCNXqi5EQiHw8xPg1JuqqoiFouxSGIqlUK73cb4+Diy2Swy6ePpSU/A4cOHMTk5CQDM8h8Aa7ee271CJmkAj35wzgw8PstZUSh1cOjQITaKvK+vD+l0mnVyEAtV4fcUUQRe9CL/8nd/50/K/epXgf/4D+C554CPftS/XHKJLzLK5WUPuwtOgi2Xy4hEIgiFQti2bdui7YrU3eK6btcwuKAvCmdjQW6z0WiUzaiJx+NIJpPM/C6VSqFareLJQ5N4cuo+TLSO2+pDgNY28K93/Ayh/FHEVBn/7bwBRKNReJ6Hcrk8bywBmbpRt9Z6NkLkrA78KMZZURzHYaPrU6kUtmzZgk2bNqFerzPLbArzkug4Y+IjSCgE/Oqv+pdm02/Zvf12v733iSdmtzt0yG/fvf124B3v8P/evt0XJJs3z7tbmgiraRo0TWMRj7lzTOiMtlarYWpqCp1Oh5k4nS3+HJzVhZx0yR6/2Wwik8mw9IvneSjX6jiwdwINq4mqEwKwCQ4EOI6HI1NVNKZ0CEoImyUNhXyO1X0shKqqXTbqHE4v4eKDs6Ls378flUoF4XCYTX4l4dFoNCDLMorFYtf/0PyJWCy2MjuZSABveYt/KRZ9E7PbbwcefNC/fWYGeOlL/d/7+/2W3uHhBe+KJtU6joOpqSkIgoBqtbrgthT1ocmr5JHCazk4AFh3SigUgm3bLPpBFv8jIyNot9t4id7BL/Yehd3sAB6gI4SWJ8MRRPTHJFy6OYaOoaNU8kcQlEqlrhZ4ggztyImWR9w4vYQf1TgrhqZpqFQqAPz20nw+3zWuPZvNIplMLjhHZO600xWjvx9417uABx7w6z9+67e6by8WfTv3t7/dj34EziIty8L09DQbbCaKIprNJmZmZmAYBpvvMne6bDabxTnnnMPacjkcYLY+g6bgAv4sJEIQBGzatAm7d27Dr1y4Bf1SCzF00IGCo14OphjCDbv6kUslWAqP7OlpOnAQahEHeMstp/dwKctZEVzXxbPPPotEIgFZlnH99dcv6UyKUjFnhclRKOR7hQSRJKBaBb7wBf+yaRPwhjfAe+MbMX68oyeXyyEajWJ4eBiWZbFZJtFoFAMDAwiHw0yAUCcCT7Fw5hKMRESjURiGwQYLki9HOBxGKpVCJ5SG6Lm4UJzEA+5WHHFzSNsGzFACmZhfPxKLxbB9+3Zks1lMTk5icnJyXlu7qqowTZOZjXE4vYKfVnFWBDJIkiQJu3btWvLiSqPkV51gcen27cC99/o/HQcYHPTt21MpYHwc+Mu/hHDZZRi48Ub0/+M/YpNpMpOwCy64AAMDA1BVFZZlYXR0FNPT08wuPRwOc+HBWRCKEAK+mCcxQK3bwOywyudKHdiegO2hKnJyBw4kTHtx7B8rY3BwELIso9PpYGJigrVrz53tAsxGW3jkg9NruPjgnHFKpRKb8rp58+auMd1rgrGxbuFx993A85/v/9y+3W/Rfegh4JFHgG99C96rXw03FEL40CEMfOYzuOr1r8clv/u7UP/xHyFXq9i0aRN27drFBszV63Xs378fo6Oj/CDPOSEU4dA0DfF4HIIgsNlBRDgcxlXnDGA4G0ZClfCilF9jNIEMoiH/kD84OAjAb6PVNI1NPCbIDI9+dxxnnhEZh3M6cPHBOaMYhoHJyUlEo1Fs2bIFfX19ALrnSJz1JBL+MDsSHlRcOjw8K0AKBd9R9VWvAr7xDRSffBKlP/9zuC9+MTxBQOqXv0T2j//Yj5K8/OUI/fu/YySbxc6dO5FIJOC6LiqVCp577jlMTk6uXo0L56yGzOQsy2IdUQCYfwzgC5QLNmeQivhCZWuohXPSIhxPwEPlEKrVKuLxOLLZLAAwURGMfDQaDVSrVVQqFRZtaTQa3HCM0zO4+OCcUcgQiwanrUlDrFTK9wC55575XS007O6OO5jHhyAIKOzcicjv/A7En/wE1aefRvUjH4Fz2WV+muYHPwDe/Gagvx/R3/otbN+zB9s2b2YzW6anp/Hcc8+xaBGHQ4iiyARHs9lENBqFKIqs+wWYrQ2RZfm4c6mL1+/23YIfLss4VvW7x5LJJLLZLBtOGCxuJkHieR6rA3FdF/VFnHw5nOXCxQfnjDM4OMgmtpL4WFORD8AXFgv4eABYcNidJEmsNdgpFNB+xztg3Xsv8OyzvnHZOecAug587WvALbcguWsXdn7qU9g2MYHQcW8QfpbJWYhYLAZZllkqJChGPM9vnyUBAvjftV1ZGbtTDlwI+Le9/hRkz/PQ398PURRhGMa8E4N0Oj2vvd0wDJ5+4fQELj44nDMMiQhJkoBdu4D/+3+Bfft835D3vMdv5y2Xgb//eyRf/nKc94pXYOc//RPyc/xOOBzAF/DJZBKAX/tBRcrBugxVVbvEhOu6eNUOCQI8PDoD7Jvxhxvmcjk2tC5oJkbGZalUiokbgqdfOL2Aiw/OirJmIx+nCDlSAuhuLRYE3x/k05/2C1rvvBN461uBRALC0aOI/u3fQrz4YuCii/w5NMeOzb/zUxx2x1n7hMNhNo6g2WyyglGalURDGYlQKIRtmRAuTPoC40tP1OA4Du7bN41UKjWvxTb4/8lksqsgladfOL3gjIiP8fFxvPnNb0Yu59v3XnjhhXjkkUfOxENxOGc1VDgqSdLi9S6yDLzkJcAXvzjrqHrrrYCiAE8/DXzoQ8CWLf4Mmr//ez9KchrD7jjrA4p+tNttSJIEWZbhui5arRZkWe4Su/Q5fMmgCUnw8GTRxH88U8K7vnwv9tXmm/jNjWwkEgn2eABPv3BOn56Lj2q1iuuuuw6KouAHP/gB9uzZg7/6q79ibYWcjc1Gi3zQQXzJ1tSRCPC61wHf/rYvRD7/eb/NVxCAn/8ceOc7/Y6Z177Wb/09dMi/nQRI0I9ketqfU8NZlyiKwmoyGo0Gi060Wi24rsvqPlzXRafTgeM46I9JuCbvfya/uacJ2bPx019OzPt8zo2EAH6nTTqdZn/z9AvndOi5w+knP/lJDA8P45//+Z/Zddu2bev1w3A4ZyVkU+04DhzHYf4Lp2QclskA/+t/+ZfRUeBf/9WfMfPEE8CPfuRvIwi+0LjqKv/2t73tpMPuOOuHRCKBdrsNy7LgeR4URYFlWdA0jY0qoM9ep9PB4ZkmtootPCjkUe4IyAN44sBRZMxIl5BYbJJtNBqFIAio1Wos/UItuxzOcuh55OO73/0urrjiCrzuda9DoVDApZdeii984QuLbt/pdNBoNLounPXLeol8eJ4H0zShaRqq1SpKpRKKxSImJycxMzODSqWCer3OivhO26V1eBj4wAeAxx8HfvlL4A//ENi2DaDXcWrKT7UcOgQMDQE//emiw+4464e5rbf0e6vVYpEPURT9dlwX2FdqYaJUwyBq/v9ARdhp49HDU9AtgOId7XZ70e9oJBJBJpOBIAjcj4ZzyvRcfBw6dAif+9znsHPnTvzwhz/EO9/5Trz73e/Gl770pQW3v+2225BKpdhlmB8wOWcxruuiXC5jamoKpVIJjUYD7XYbpmmyM0dRFKEoChveRZ0DPeP884GPfxw4eBC47z7g1a/uvn1iAnjxi4GPfATYu7d3j8s5Kwm23lqWxQpRgdlaI9d1Mdifx427NyERjSAraAA8GAjBcAW4ngBPAUgi27Z9QrfdcDiMQqHATAM5nOUieD0+BQ2FQrjiiitw3333seve/e534+GHH8b/v737Do+jvhM//p62XbtrSZYs2UY2EGODwQQDhlDCgUMJCXDhAgYCpJJicpBKcneJk0suJuW4HCThSKGEnnt+Ae6ABAzBkBAMnDHNEGODcZUsq65W22Znvr8/xjOS3GVLa2v9eT2PHuzV7O4Mo/Lx9/spzz333DbH+4ORfJlMhsmTJ9Pb2zskwUlUh82bN2PbNnV1dUGr6LGkWCzS2dkJDMydCYVCQcKfYRiVnUQ7OMfDp2kDKyIA730vXHopXHKJN/hOVJ1CoUBXVxeappFKpejp6eHll1/mrbfeAmDGjBk0NDSwceNG0HRuX7KGlXYdPSpGg5ah2cpxbKg1CKAvueQSGhsbSW3Vv0aInclkMqRSqd36/T3iPyWbmpo4/PDDhzw2Y8YM1m6vVBCvHj2ZTA75EGJ/NTh3o7GxkdraWhKJBNFoFMuy9l3gMXjYnVJeu/czzvAqaZYtg699zduGOf10+PWvvUm8omoMLr0tFotomjZki7NcLhOLxQiHw2zszIDjMF7zkpG7VYzWUgRHDVRjFYvFoGOqEKNhxH9SnnTSSaxYsWLIY2+99RYtLS0j/VZiDBrrOR+Dgw+/f8c+sathd+3tsHo1LF0KN98MJ5/sBSVPPeUlsE6YEMyhQX7JVIXBpbdKqWAVTtM0isUi0WjUCz4yBcroHJ5WmJrCxiRHGAZ9PfsNy7ZX9SLESBjx4ONLX/oSS5Ys4Qc/+AGrVq3innvu4Ze//CXz588f6bcSY1A8HieVSu19AuY+st/MptndYXctLfC5z3lluu++CwsXwsyZUCrBgw96Zb0TJnhVMk884c2eEWOSZVlBbpEfNPgrcX41TDQaZUpDmjOPamHujAaOSHsBx1Et9eiDym39luuDp+UKMZJGPPg47rjjeOCBB7j33nuZOXMm3/ve9/jpT3/KZZddNtJvJcagaDRKPB7fs9LT/cB+s2IzzGF3gBeIfOMbXuOyV1+F666Dgw6CTMZrcPaBD3iluV/6Erz44tC8ETEm+MFHuVwOtl6UUriuS6lUIhKJMKUhzfSGKLquc0ydF2y+ublAyBoIPkzTxLZt+qRPjBglo7JB/aEPfYjXXnuNQqHAm2++yWc+85nReBshDmzDHHY3xJFHwvXXe1szzzzjrY7U1noluz/9qdc3xJ9Ds3LlaJy9GAV+8vPgFbqg1LZcDobO6bqOUoqZdTpxC7pyDhvKA0PkotEomqaRzWalnFaMCpntIsSBTNfhlFO8vJDWVvjf/4V587xOqytXwne/C9OmDcyhaWvb12csdsEfNOfnJPmNxkqlUtCIzC+jrYlHmd3g/Rp4qziQ7G9ZFpZlSeKpGDUSfAghPKEQfOhDcO+9XsLqnXfCOeeAYXjbMF/6kleq68+h2XpujAy62y9Eo9FgzotSCqUUmqbhOA6xWAzbtnFdl3A4jGmaHNfgrZK8U0pSHlTxEo1GcV2Xnp6efXQloppJ8CGE2FYiAR/7GDz6qNe07Gc/gxNP9CoinnjCS1BtbPQSVh980AtWZNDdfiEUCmGaZrC1AgRBiN+LZnBZ+KEpqA1DSRmsd9OAlzMyeFKuzHARI02CDyHEzjU0wPz5XjfVt9/2uqvOmAHFoleq+/d/723NLF/ulf4ODkBk0N0+4eds+MGHH4z09/cTj8exLAvTNL3265rGcY3eisfb5VpsG15e20M4HCYUCkniqRgVEnwIIXbfwQd7c2WWL/eal331q95WTG/vQGCxerWX0Hr77QPzZmTQXUVFIpEhQw4LhQLd3d10d3djmiZ1dXXBFoymaRw33nveejdFURksWd2JUiqYFSNbL2KkjfhUWyHEAUDT4OijvY8f/tCrmLnnHm+ybibjBSOf+IR37LhxcMcdMuiugvwVC13XcV2XYrFIf38/5XKZVCpFLBajt7eXUqnE3zry2MUS47QQ3SrGWjWOze90cOszK8GwMPs7OOU9Oo7jjNkSebH/kZUPIYbJrwQQW+i6t7Xyy196WyvXXz/0893dXkXNiSd6uSPt7fvkNA8EfjIpeD0//C6nlmVh2zalUonu7u5g26VYdli+ZhOvru1kotYFwLuqllLZ5fa/vMN/LF7Lw6+3U7DLsvohRpQEH0IMg6ZpjB8/nvHjx1d2jstY0d7uBSGDRaNegLJkCXzxi9Dc7FXR3Hmn5ICMoFwux+bNm2lra6O9vT3I8wBvJcQPQJRS6LpOU1MT8UiY0w6ppT5m0qx5ycDdKoZyXXRcZh+U5oeXnEDY1CX4ECNKfnoKIUbGjgbd5fNerseCBV6/EMfxuq9ecYVXMTNvntdfZCcj3MWuDW4sVi6XMQwjaDhm23awEuLPbUkkEjQ1NRELW5wwJY2uD3S0VRpELIPffmI275k8AU3T6O/vl1kvYsRI8CGE2Hu7GnS3dq230vH//h+89ZbXOfU97/ECk/vvh/POg6amgTk0+3Jo3xgViUSCAKSmpgZd14NtF/CGxYVCIcLhMH19fWSz2WAVpCdXxB1UTeuiU7AdXlnTSTQaDRJYu2UashghEnwIIfbe7g66q6nxgo4FC2DFioHmZU1N0NUFt9wCp54KU6d6c2hefXVfXtWYomkakUgEIGgsNnjrxXEcEokExWKRUChEd3c35XIZ0zTpyLn4CycaMLtlHACL/9YKQDqdBqC3t3f/mW8kxjQJPoQQe29PBt1pGhx7LNxwg7dl4zcvSya9lZIf/hBmzfLKdhcuhDVrKntNY1A0GgUgn88Hqxp+QzE/ECmXy5TLZQqFAkop0uk0DTUWsUG1j18/ewZfPesw3jfVC0KSyWTQOVUm3YqRIMGHEGJk7M2gO8OAM86AW2+FTZsGmpeFQvD66/BP/wRTpsDJJ3tzaDo6RuUSxrpwOIyue2Wx/hZMKBQK5rv4j7W3txMKhYhGo6TTaZLhbUto3z9tPNMbvWFzkUiEpqYmwuEwuVyuchckqpYEH0KI/UskAhdeCL//vReI/PrXcPrp3krJs8/CF77gbdN86ENeb5H+/n19xvsNTdMIh8PBn8HrbhqLxXAcB9d1KRQKwYTbWCw2ZGvG5zjONtsrfnm5TLkVI0GCDyHE/iudhk99Cp580tua+clP4JhjoFyGRx6Byy7zKmb8OTRbV2McgMPu/K0XP3jQNI1EIoFt22QymaDt+tb5IYPlcjls28Y0zSGPAcHzhNgbEnwIIcaGiRPhK1+BpUvhjTfgW9/yEln7++Huu+Hcc70eIv4cmp6eA3LYnb/14q9maJpGTU1NsOJhGEawOlIqlYL8EJ8CCoUCtm0HHU39HBGAeDxe2QsSVUmCDyHE2DNjBvzrv8KqVQPNyxoavFyQX/wCTjoJjjoK/vY3r/z3tNMOmGF3g6te/L9blkU4HA5yP2KxGMViEQDXdb0cEQYCED8o8YMPf9UjHA4PWQ0RYk9J8CGEGLs0DebMgRtvhA0bvIqayy+HRMILMvyunO+8482heeCBbfuRjJFhd5lMhk2bNtHR0UFPTw99fX07zL+IxWJDtl3i8Xgw6bZYLOI4DtlslnK5TC6XC1qy+xzHIZ/Po+s6Sqkg+JBVDzFSJIQVQlQH04SzzvI+cjmva+o998Af/uDlgnR1wUc+4h1bXw8PPjimht3l83kcx8FxHEpbusFms1nq6uoIhUJDjvX/rmlaMFxu3LhxuK5LuVwmk8kEw+f8AXNb8yfhgrc6Mni7Roi9JSsfQojqE4vBxRfDQw9Bayt8/etDP9/RAbNnwwUXwO9+53Va3c/5WyCxWIyamhpCoRBKKTo7O4MtlK35iaSlUgnDMGhsbETTtKDaJZfL4TjONs/zk1az2Szr16+nVCoRj8e3SUwVYk9J8CGEqG65nNc3ZLBQyFsNeeghL0hpaIArr4THH/cqafZDfvBhmiY1NTXU1dUFbc+7urqChNBMJkNra2swh0XTtKCV+oQJE6itrSUejxOJRNB1nVAoRDKZHPJeyWQyqJApFotkMhkKhcJ2AxUh9oQEH0KI6rWjYXelkpfrMX8+tLRANgu//a23ZTNpElxzDTz/POxHrcS3XnXQNI1x48YNCUDa2tqCQKNUKqFpWpDn4ZfOjh8/HsMw6OvrQ9M0XNfdJol0eWs/4XCYUChEJBIhEolQKpXo6OjYJj9EiD0hwYcQojrtatjd+vVePsgzz8Bf/gKf/zzU1XmNzW68EU44AaZNG5hDsx8aHIAAQwID27aHlNAWi0U0TaOxsRGlVFBiq2naNjkfz7/bhWVZlEolQqEQkyZNwjRNHMehX5q6iREgwYcQojrt7rC7VMorzf3FL7z8kIcfhksv9fJGVq3ySnqnTx+YQ7Nx4z65nB0NdFNK7fBz/jaJUopyuYxt20SjUSzLwjAMCoUCKzdnWdXWM+R5L7zTwcOvtrJoeRuPLW8lEolSU1MDQH9/v6x+iL0mwYcQojrtybA7y/Kald19t7cCcvfd8MEPerNnli71mpxNmjQwh2YfNyhzXZeOjo5tEk4HT7LVdT1IIO3u7sa27aBk1tUMXlnfw9qOfvrKA9s6pXKZB15azyOvtXL/0o3kbCcIWlzXJZvNVugKRbWS4EMIUb32ZthdIuGtgDzyiLci8vOfe9s2SsGf/uS1fW9sHJhDU6Fpr37uR7lcpq2tbUivD8MwSCaTNDQ0BI+Vy2XS6TQAvb29dHZ2kkwmCYVCmJriA4eNJxkZ+FWgoTDdMmV0poyv4T8uPoao6b2nrH6IkSLBhxBC7Mr48d5Au2ef9XJI/u3f4PDDoVj0Ao8LL4QJEwbm0FSgKqR3q1WXdDpNQ0MDiUQCXdeHtEaPx+OEw2Hy+TwdHR2Ew2Hi8bjXN6TQz/SmJGpLUKOjCGtlLMvi2xceR0MyEqysRCKRoMRXVj/E3pDgQwghhmPqVPinf4LXX4eXX4avfc1bRent9bZi5s6Fgw4amEMzOB9jBAfdhcPhYKWjqamJWCw2pCLGz/dwXRdN00gmk0FTsUQigWEY9Pb24rou/UUHV3nP1VA4aGRsWJ/1zn3wts7g1Q8pvRV7SoIPIYTYE5oGs2bBj34Ea9Z4SaxXXQXjxnlJqTfc4CWp+nNoli0b0UF3iUSCxsZGEonELpt/2bZNMpkMGoxt2rSJ7u5uXNfFsix6yjqKLSsfGhzeXEu/CvPMOz0AQ6ph/BJcWf0Qe0OCDyGE2Fu67gUPt9zi5Yc89BBcdBFEIl6Z7oIFcMwxXgDyzjtw8snDGnRXLpeDAGB3u4z6PT4Gz2ZJJpMUi0XefPNNlFJEIhHq6uqYWFtD1BjYdvniWUfw7/Nm84EjJqJpGo7jDMkt8Vc/dtQhVYhdkeBDCCFGUjgM550H99/vVczccQeceaYXoPjbF2vXwmGHwb/8C5x66k4H3dm2TWdnJ47jYBjGkIm1Oz8Nb1vGMAzy+Ty2baPrOt3d3RQKBQzDYNKkSRiGQX0ijMvAtksqleL8oydy3NSBuTGDt17C4TDhcBilFH1VNhVYVIYEH0IIMVqSSbjiCnjsMW8r5j//05uuC948mX/7N3j3XYjHvTySxsYhTy+VSkHgYVkW9fX1QRntrtTX1xOLxYJ+Hps2baKvry8IYJLJZFBya9s2fmaKjhoyQM4PPrZuROavfvjNyoQYDgk+hBCiEhob4R//0dt6uf/+oZ/r74dPf9qrmLnqKnj6aQq5HJ2dnbiuSygUoq6uLqhg2R2DczPa2tro7u6mXC4zYcKEIPnUsizK5TLlcnnIysfg9/EDka17iViWBey4+ZkQOyPBhxBCVNK6dfDNbw59LJXyuq12d8OvfgWnnYZ16KHUfO97xFetoq62drdXPAYLh8OUSiX6+/spFoskEglaWlqIxWJBwqhpml6XVD/4ULBkdXfwGpZlBTNg/GF1W5MARAyXBB9CCFEpOxp019vrbb3cey/2FVfg1tRgtLaSuPlmUu9/P9qRR8IPfgCrVw/r7UzTDAIHXdeJx+NYlkVtbW3QqVQpb6Vj8MrHojc7gtfQNC1Y/dh660WIPSXBhxBCVMKuBt2tXg3//M+Uv/1t2l5+mdydd8JHPgKhELzxBvzzP3vH+XNoNm/e5Vv6pbRKKWzbRtM0otEo8Xg8GDy3fEMP73TkBkptUfxheRs/+9NKfvanlfz2uXcxTW+LZeutFyH2lLnrQ4QQQuw1f9AdbH/Q3WmnQUMD0fp6zFgM62Mfg499DHp6vC6qd98NTz0Ff/2r93HNNV4VzaWXwvnne+3gt+I4TlBy67ouSilM06Rc9jqY5os2L6/vRtk2JXfLyoemKNhl/v3xt1BAOmrx4SNPAbyVD38SrhB7Q1Y+hBCiEoYx6M5P5gQgnYZPftJr275+Pfz7v8Ps2VAuw6OPegFKYyNcdpk3h2ZQXoY/f8UwDJRSuK7rdTTt7/cm22qKc2Y0kI4PlO9qgOMqFDC7ZRyPXnMK6XgEXdeH5H1IACL2hgQfQghRKXsz6A6guRm+/GX4v/+DN9+Eb38bDjkEcjm45x740IegqQm+8AUiS5fi2Dau6w4klSoVDJfTdZ1kMkkiYvGBwyewZdclKLmNhQzuu+oEmtNRNE3bYcmtEHtCgg8hhBiLpk+H734XVq6E55/3yngbGqCzE26+mUnz5jH3qqs46r77SK1fj2EYlEol1qxZg+M4JJNJmpubicfjbOrpH4g6AIUiV3J4ZV1P8NiOSm5Bql3E8I168HH99dejaRrXXnvtaL+VEEIceDQNjj/ea2C2YYPX0OyKK3DjcWKbN3PE//wP53zta8z9yleo+81vUGvWYJomDQ0NhMNh9FKJzZs2o22JPjQNzjjMa3a25M+vBLNmBq98+MGGbL2IPTWqwceLL77ILbfcwlFHHTWabyOEEALANL0k1DvuYPWSJfzf17/O2qOPxjEM0mvXcvAtt3DyZZdx5Be/iHXbbWTeeAP9zjtpfus1IoP6l/38smO45bQGPv0vnwyG3fn9PpRSwZwXWfEQe2rUql2y2SyXXXYZv/rVr/j+978/Wm8jhBBiO8qWxepjj2XZoYcSymaZ/vrrHPLCC9S//jrJZctg2TLSpklDOg2HHcZfa6bAlq7q2vr1nDV/Hqx9F0wd+vooRiJBpYufwOqTFRAxXKMWfMyfP59zzz2XuXPnSvAhhBAVlM/neeedd+jq6qJcLqPicf526qm8e+aZ1Pb3c8xbb5F6+GHM5ctJd3Tw/o4Ojn/hRR6ddhL3nfRhtDPP3GbYXbazE4B4PI6u60Om2e5J91VxYBuV4OO+++7jpZde4sUXX9zlscVicUgCUyaTGY1TEkKIque6Lj09PRQKBfL5PDCQq5HL5YhGo7gTJ7Lh2GN596MfxX3tNeoff5z6xx+nprOTC5c/RWOhB2Nw4DF5MrZtUywW0TQtGEYnVS9ib4x4uLpu3TquueYa7r777t0a/bxw4UJSqVTwMXnr+nchhBC7VCgUaG9vp1AooGlaMNHWMAxisRjRaBSlFPF4HMdxyGaz5KZOpfXqq1l0yy3cN/d8AKKlgveCd94Z9CPJZrMARCKRYOicaUqPSrHnRjz4WLp0Ke3t7RxzzDGYpolpmjz99NPceOONmKY5ZKkO4Jvf/Ca9vb3Bx7p160b6lIQQomr5qx1dXV1BO/X6+nomTJhAJBIhEokQjUaDXA2/v4dpmkSjUUzTJOa6dEVigDfbRQFcfjmsW0e5XA5WURLb6aIqWy5iT4x46HrGGWfw2muvDXnsE5/4BNOnT+e6667bZiR0OBwO6seFEELsvmKxSE9PT/CPukQiQU1NTVCV4jgOSikikQiZTIZCwVvViMfjNDY2UigU6Fu7lvLvf4/a8m9RTUFXw0Tq33kHTjuN/ocfhlSKcDg8pPOqJJmKvTHiIWtNTQ0zZ84c8hGPx6mrq2PmzJkj/XZCCHFA8ruVOo6DaZrU19eTTCaDoGBwSWw4HA7aoyulSCQSxGIxUsUS5Rt+itHV5TX4wOs1Nm/eQnqbJuO++y4dF1+Katu03VUPIfaUrJcJIcQYpGkaqVSKeDzO+PHjg8RSX7FYxHEcdF0nHo9jGEawItLX1weAHY2TzbnYZY3GeAcALaFWVsdqOeeCf2XFhCms12OU4wlZoRYjqiIZQ4sXL67E2wghxAFlZ9vW/gA4wzCC1RG/RDaTyZBIJDDiEVLXf597F7/B3BV3AxDRijiuYmOynpu+8H0+d/ZMGg7awTwaIfaQpCsLIUQV8vNA/JkufoKpbduUSiVs26ZQKJCuT/K5j57E4ruehK9Dm14PCtIh+MaVpxK2zO1WLg7e3hFiuGTbRQghqpBfheI4DoVCYcj2S7lcxnEcbNvGtm3W9ZbIxuMwC0qHev8mde0iKzf1EYvFJLlUjDgJPoQQogoppYLS2lKpFOR8+BWH5XI5+Fi6LoOrvF8HBi4fmF6PhcOS1V3EYrHtvr6sfIi9IdsuQghRhZRSQa8lP/HUz/mwLCvYjtF1nTlTa3l1lRd8mJrDjy84jD+8HKG5NrlNe4QdvZesjojhkJUPIYSoQq7rAl57dcdxyOVywWN+EGLbNpqmcWh9FKVt6Vyqeds07582nhMOa95n5y+qmwQfQghRhYrFIkopcrkcpVKJfD4ftEnP5XIUCoVgOm2pVAqajBmaE1TH7Ky8dvBKh2y9iOGSbRchhKhCg3My/CADvPksfufTVCoVVL/4OR+m5mArtcNcDyFGggQfQghRpTRNIxQKBfkflmWhlApar5umieu6W8pyvW0XAwdH14lGo7t8bZ+sfIjhkm0XIYSoQslkkkgkQk1NDWrLSkZDQwOWZWFZFq7rksvlCIfDlMtlFF4wYWrOkOm1OyNJpmJPSfAhhBBVaHCfD3+VI5FIYJpe0zA/+AiFQvT396MGbbvE4/F9eeriACDBhxBCVDHbtoO8j3Q6DRAMmbNtm2w2i1IKVw2sfOzOqgdIrw+x5yT4EEKIKubPeAmFQpimSSgUwjAMXNelUChQLBYxTRMGVbuUSqV9eMbiQCDBhxBCVDF/xovfbCwWiwUJp36lS21tLbrm1R9YmkOxUNit15YVD7GnJPgQQogq5G+J+MHH4O6mmqahlKJcLgcD51wGkkeffat1j95LiN0lwYcQQlQhP8Dwu5r6ZbX+UDl/+8WyLO8JaiCA+MtbG3f5+n7Jrv9eQgyH9PkQQogqNTg48KfZZjKZoOJF0zT+vKKNIl3YZSd43tJ3WrnpybfQNI1k1OJjc1rQdQkwxMiR4EMIIaqQv/Lh/xkgk8kEWy/jxo2jszfDU2+upruomD1o26Xs2Px00QocdNJRi48cM4lEeOivi8H5HrLyIYZLtl2EEKJK+Vsjuq5TLBYplUoYhkFNTQ3RaJRxNQk+ccJkDk2H0HU3eF6+HMLAZXbLOB695pRtAg//tX0SfIjhkuBDCCGqkG3bFAoF8vl8UFILkEql0HUd0zS9QCRi8g/vbcS0ygCUlU5JWSRCGvdddQLN6e23WS+XveMl8BB7QrZdhBCiCnldS4eWwsbj8aCduqZp6LqObdu8u3EzJl4wkXMjaJpO0S7zyroejp1SC4DruhSLxeBjcBWNEMMlwYcQQlQh0zSDapdoNEoqlSIWi2HbdtDjI5PJUCqVaO3owdK9ZmQ5J8KcKWmefTfDojc3MWN8mHw+v03jMU3TCIfD0opd7BEJPoQQogoZhoFSCk3Tgom2AN3d3UHSqWEYhMNhUmFwSl7wkXcjXHNaC6e0Fji0pSFoRAZgWRbhcJhwOEwoFJItF7HHJPgQQogq5G+L+AGI32RM07Rg1SKRSJDP57E0F033tl3ybgTXtjn1PfU0NqZwXZdQKEQ4HN7tmS9C7IoEH0IIUWXK5XKwWuEHG5ZlUSwWCYfD1NTUBA3Hurq6cF0XU/NWPgoqTFjTKJVKlMtlIpEIoVBoX16OqEKSKSSEEFUmm80GfzYMA13Xg3Jbv+GYUopisRhMtQ0ZW7ZdnDCmaVIoFIKKFiFGmgQfQghRRcrlMvl8HsdxgiBD1/VgpQMGenS0tbVh27aXE7Il4bSovOCjVCpR2M0Bc0IMlwQfQghRRbLZLK7rDulu6pfUglcFUy6XKRaLQfJpPB4npHvbNEU3RCQSAbxyXSFGgwQfQghRJRzHIZ/PUy6XCYVCQQBiGEaQgAreykdnZyf5fN7bcgmFCGl+8OFVswDk8/nKX4Q4IEjwIYQQVcLP3wC2qUzxq16UUuRyOTZv3kyhUMB1XXRdH7Ly4Tch84fRCTHSpNpFCCGqgOu65HI5wNtacRwn6D7ql9jquk4mk6G3t5eenh5c15vnEgqFiBhe8GG7oWBFJBqNSgdTMSok+BBCiCrgr3r4Wyx+wAEDc1i6u7vJ5/N0dXVRLBZxXZdkMklNTQ3mJm/2S0lZ2LZNOBwmFotJ8CFGhQQfQggxBrS3twdBRDgcHjK3xXEcurq6cByHUChEoVAgl8tRKpWCZNPu7m7K5TK2bQcJp6FQCF3XSSQSKM2rbCm6YUqlEolEIkg8FWKkSfAhhBBjwODcC39Crc8PNEzTHFLp4j8vm80G1S7RaJS+vj4sy6K932aTXWRlXxtn6l7wYTsWjy1vQ48kqB3vcvkJU9F1aaMuRpYEH0IIMQbU19fT0dHhbZGY3o9uTdNwXRfbtkmlUqTTafr6+kgkErS1tdHR0YFt2/T39wfbKP6sF90weHldkZ5iP6bWx/kHewGN7Vj8/uV2MvRiRDJcOPsgEmH5VSFGlmzmCSHEGBAKhWhubqampoZoNEo0GiUSieC6LpZlEYvFiEQiGIaBZVlBYOLndqRSqWC4nGEYRCMRLn/fdCbWxqk3uzko3ApA0YlQxGDGpHoeveYUCTzEqJCvKiGEGMP8KpZEIhFsx4TDXpdS27aDDqf+lkyhUCAej1Mul0nFQlxxwkHkX/0ZMb3IK/3TyBbGoVth7v7cKViG/PtUjA75yhJCiDEsHo/T0NBANBodEnwMbiBWW1sLgGVZTJkyhYkTJxKNRikUCqxZ/Sxnpf+KqzQeaTsbNI3NJYNX1vXsw6sS1U6CDyGEGON0XcdxnKA5WKlUoq+vD03TCIVC1NTUkM/n0TSN6dOnU1tbuyVA6ecE+xcAPNJ9GrZbi26BQmfRm5v28VWJaibbLkIIUQX8VY9yucyGDRsol8sYhkEsFgtKbkOhELZt09PTQ6lUwul4lPdE1tBTrmFl8QygTNQ0+c95RzMxHd23FySqmgQfQghRBQqFQjAszjCMYNUDvLyQaDSKZVls2LDBq4DJbuYM4y4Anix/DLQo4K2WnDerOWhQJsRokG0XIYQY45RSZLNZWlu9ihXTNIOyWsdxsCyLcePGYZomra2t5PN5xnXfQdLoZ0XhEOzoKcEsGOloKiphxL/KFi5cyHHHHUdNTQ0NDQ1ccMEFrFixYqTfRgghxBZ9fX1s3LgRx3GIx+OMHz8ewzBQSuG6LqZp0tzcHMx/6W5/ldOiiwB4UbsSKxQKeodI8CEqYcS/yp5++mnmz5/PkiVLWLRoEbZtc+aZZ9Lf3z/SbyWEEAe8crnM22+/TalUIhqN0tLSAngt15VSKKWIRCKkUimKxSJKKaZlbgTgT9nTsGLTiEajXuOxLYHH4A6pQoyGEc/5+OMf/zjk77fffjsNDQ0sXbqUU089daTfTgghDliu67Jhwwb6+vowDINDDz006O9RKnlTanVdx7Isent7MU2TctcTTA+/RdaJssa8kNpIhHg8LjkeoqJGPeG0t7cXIKgz31qxWBwypyCTyYz2KQkhxJinlKKrqwtN04hEItTX1xOPx+np6Qmm1vrD40KhEJs2bWJl6yY+oN0BwB/6/4FwspZYLBZs0fhk60WMtlH9CnNdl2uvvZaTTjqJmTNnbveYhQsXkkqlgo/JkyeP5ikJIURV8IOFvr4+IpEIpVKJzZs309bWRldXV9DZVNM0bNvmtXWduO/cRJ3ZyzvFyfRaJxOLxYa8lt8tVYjRNqpfZfPnz+f111/nvvvu2+Ex3/zmN+nt7Q0+1q1bN5qnJIQQVUHXderq6kin08HWilKK/v7+oN26pmnU1taSzWZ5Z/UyLq57HIAXzM8wLl0HeDkjtm3jui5AUPUixGgatW2Xq6++mocffphnnnmGSZMm7fC4cDhMOBwerdMQQoiqpWkajY2N1NfXY5ommUyGSCSCruuMG1fLqtZuujdl0Lsdzgn9BkNzebz3RNYm3wtZB6Nc4NB6LZgB40+8FWK0jfhXmVKKL37xizzwwAMsXryYqVOnjvRbCCGE2MI0zWBoXEdHBwDRaJSevn5WdfbjlBxOqn+YYxvfIO+G+FnbJWTXdaKhqA07TErolEoFHMcJBtAJMdpG/Kts/vz53HPPPTz00EPU1NTQ1tYGQCqVIhqVdr1CCDEastkshUIBpRSJRIJ4JsMJLbXku57iU40PAPDjjR+nvVRPVLM5qD7J5cdNYOO7qyiVSliWhWmaUvUiKmLEcz5uvvlment7Oe2002hqago+7r///pF+KyGEEBDMa3Fdl1AohGVZXjt1+w0+1+hVt9zWfj7/0/13lNHJmgm+etY0IrobNCILbWk0JisfohJGZdtFCCFE5fT29lIqlYIAQtM0ujve4COR/8TUXB7pPoX/bv8gCp2sCuGWNN7tKqD39QYD5yzLIpvNSsKpqAipqRJCiDEsl8tRKpUolUqEw2EMw6C7cw1Htv4jCSPP//XP5LaNFzGtuY47PnMypx4+iYhW5qVV67BtO5h8GwqFMAxDgg9REbK+JoQQY5RSikwmE2yblMtloEDspUsZb3WxqnAQfy58krlHtnDyzKlMP6iBmy9t4L7FCrtjHa47MO3Wtu19fTniACIrH0IIMUZpmkZdXR2GYRCJRCgW8xSfu5Kp1ru027X8IXsV6USaYw5uJJ1O47ou/f39HJpwSIW8Spna2tqgJ4j/mkKMNgk+hBBiDLMsi3A4TKlUJLvsqxxpvUzWifKU9S3QkliWxfjx49F1HcdxaG9vp6urC9M0SSQSJBIJampqMAwD0zRl20VUhAQfQggxRiml+OuqDgqFAmue+w4nmk9gK4NXJt5EKNoSdD5NpVIAdHd3093dTSwWI5lMkk6nMU2TSCQCEHQ5FWK0SfAhhBBj1OK3NnPlr5/luaf+g7/T7gLgqcg3GT/pFAqFAuVymXK5TG9vLx0dHaxcuTIY9gneXJhoNIphGDiOAxD8V4jRJMGHEEKMUX94rZWzapZwATcA8Ef7ChoP/Qcsy0LTNCzLIhaL0dPTQ1tbG/l8nmQySWNjI+Dld0Sj0WAyrj8BV1omiNEm1S5CCDFGuK7irufXkMl7lSmrVyzmjpb/wNBcHsvO5bXYRazdUGDe1IMJhUKEw2FisRj5fB5N06ipqWHatGn09/eTy+WIx+NMmDCB7u5uent7aW9vJx6PS9KpGHUSfAghxBiRsx1uePwtevI2E6wO/vfQ7xDTi/y577385N15dJOlHDG59IwohxxyCBs2bEDXvQXuuro6mpubSafT9PT0YJpmkPOhlCIcDtPU1MS4ceP28VWKA4FsuwghxBiRCJs8cs0pzG4ZR4ed5sm+41men8oP1n4WW7OYMrmZR685lUR4oGrFMAx0XQ8STPP5PK7rBuW54CWaapqGruuy6iEqQlY+hBBiDJmYjnLvZ05g1r8+zjfWf5EpxiZ0ZVIyY9z72ZOwDO/flH4prT/nxbZtwuEw3d3dKKWIRqPBqohSKuh06gckQowmCT6EEGKMeWV9D/mSA2i86zQSp0S+ZPLKuh6OnVILQCwWI5VKbekBUgoqWsaNGxe0U9c0DaVUEHz4SadCjDbZdhFCiDHmiTc3AXDmEY08/bW/432HH4SLwaItj8NAp1J/xSOdTgePRyKRYItlcG8P2XIRlSIrH0IIMcZ8YEYjhzclOW9WM5qm8cvLZ/M/r2xkYjo65Dh/2FxtbS3jx4/f7mv5wYcEHqKSJPgQQogx5tgptRw76O+apnH+0ROHHKNpGqVSiVAoRDQ6NCgZzA8+/PwPISpBgg8hhKhCjuNsmXLLToMPv6GY32AsHA5X5PzEgU2CDyGEqEKlUgnwgoqdDYvzVz4Mw0DTNExTfi2I0SfrbEIIUYUKhQLALqtXZNtF7AsS4gohRJUpFovkcjk0TaNcLtPa2rrDY3O5HP39/RiGgeu6NDc3V/BMxYFKgg8hhKgy/vaJUiro5bEjjuOglMI0TSzLIpFIVPBMxYFKgg8hhKgyoVCIo48+mp6eHuLx+E7zOOrq6nAcB13XMU1Tcj5ERchXmRBCVCHDMKirq9vlcRJsiH1BMoyEEEIIUVESfAghhBCioiT4EEIIIURFSfAhhBBCiIqS4EMIIYQQFSXBhxBCCCEqSoIPIYQQQlSUBB9CCCGEqCgJPoQQQghRURJ8CCGEEKKiJPgQQgghREVJ8CGEEEKIipLgQwghhBAVtd+NM1RKAZDJZPbxmQghhBBid/m/t/3f4zuz3wUffX19AEyePHkfn4kQQgghhquvr49UKrXTYzS1OyFKBbmuy8aNG6mpqUHTtBF97Uwmw+TJk1m3bh3JZHJEX3t/Jdcs11yNDrTrBblmueb9n1KKvr4+mpub0fWdZ3Xsdysfuq4zadKkUX2PZDI55m7q3pJrPjAcaNd8oF0vyDUfKMbqNe9qxcMnCadCCCGEqCgJPoQQQghRUQdU8BEOh1mwYAHhcHhfn0rFyDUfGA60az7Qrhfkmg8UB8o173cJp0IIIYSobgfUyocQQggh9j0JPoQQQghRURJ8CCGEEKKiJPgQQgghREVVXfDx85//nClTphCJRJgzZw4vvPDCTo//7//+b6ZPn04kEuHII4/k0UcfrdCZ7r2FCxdy3HHHUVNTQ0NDAxdccAErVqzY6XNuv/12NE0b8hGJRCp0xnvvO9/5zjbnP3369J0+ZyzfY4ApU6Zsc82apjF//vztHj8W7/EzzzzDhz/8YZqbm9E0jQcffHDI55VSfPvb36apqYloNMrcuXNZuXLlLl93uD8PKmln12zbNtdddx1HHnkk8Xic5uZmrrjiCjZu3LjT19yT749K2dU9/vjHP77NuZ999tm7fN2xeo+B7X5fa5rGj3/84x2+5v58j4ejqoKP+++/ny9/+cssWLCAl156iVmzZnHWWWfR3t6+3eP/+te/cskll/CpT32KZcuWccEFF3DBBRfw+uuvV/jM98zTTz/N/PnzWbJkCYsWLcK2bc4880z6+/t3+rxkMklra2vwsWbNmgqd8cg44ogjhpz/X/7ylx0eO9bvMcCLL7445HoXLVoEwEc/+tEdPmes3eP+/n5mzZrFz3/+8+1+/kc/+hE33ngj//Vf/8Xzzz9PPB7nrLPOolAo7PA1h/vzoNJ2ds25XI6XXnqJb33rW7z00kv8/ve/Z8WKFZx33nm7fN3hfH9U0q7uMcDZZ5895Nzvvffenb7mWL7HwJBrbW1t5dZbb0XTNC688MKdvu7+eo+HRVWR448/Xs2fPz/4u+M4qrm5WS1cuHC7x1900UXq3HPPHfLYnDlz1Gc/+9lRPc/R0t7ergD19NNP7/CY2267TaVSqcqd1AhbsGCBmjVr1m4fX233WCmlrrnmGnXIIYco13W3+/mxfo8B9cADDwR/d11XTZgwQf34xz8OHuvp6VHhcFjde++9O3yd4f482Je2vubteeGFFxSg1qxZs8Njhvv9sa9s73qvvPJKdf755w/rdartHp9//vnq9NNP3+kxY+Ue70rVrHyUSiWWLl3K3Llzg8d0XWfu3Lk899xz233Oc889N+R4gLPOOmuHx+/vent7Aaitrd3pcdlslpaWFiZPnsz555/P8uXLK3F6I2blypU0Nzdz8MEHc9lll7F27dodHltt97hUKnHXXXfxyU9+cqeDF8f6PR5s9erVtLW1DbmPqVSKOXPm7PA+7snPg/1db28vmqaRTqd3etxwvj/2N4sXL6ahoYHDDjuMz3/+83R2du7w2Gq7x5s2beKRRx7hU5/61C6PHcv32Fc1wUdHRweO49DY2Djk8cbGRtra2rb7nLa2tmEdvz9zXZdrr72Wk046iZkzZ+7wuMMOO4xbb72Vhx56iLvuugvXdXnf+97H+vXrK3i2e27OnDncfvvt/PGPf+Tmm29m9erVnHLKKfT19W33+Gq6xwAPPvggPT09fPzjH9/hMWP9Hm/Nv1fDuY978vNgf1YoFLjuuuu45JJLdjpsbLjfH/uTs88+m9/+9rc8+eST/PCHP+Tpp5/mnHPOwXGc7R5fbff4jjvuoKamho985CM7PW4s3+PB9ruptmLPzJ8/n9dff32Xe38nnngiJ554YvD3973vfcyYMYNbbrmF733ve6N9mnvtnHPOCf581FFHMWfOHFpaWvjd7363W/9iGOt+85vfcM4559Dc3LzDY8b6PRZD2bbNRRddhFKKm2++eafHjuXvj3nz5gV/PvLIIznqqKM45JBDWLx4MWecccY+PLPKuPXWW7nssst2mRw+lu/xYFWz8lFfX49hGGzatGnI45s2bWLChAnbfc6ECROGdfz+6uqrr+bhhx/mqaeeYtKkScN6rmVZvPe972XVqlWjdHajK51OM23atB2ef7XcY4A1a9bwxBNP8OlPf3pYzxvr99i/V8O5j3vy82B/5Acea9asYdGiRcMesb6r74/92cEHH0x9ff0Oz71a7jHAn//8Z1asWDHs720Yu/e4aoKPUCjE7NmzefLJJ4PHXNflySefHPKvwMFOPPHEIccDLFq0aIfH72+UUlx99dU88MAD/OlPf2Lq1KnDfg3HcXjttddoamoahTMcfdlslrfffnuH5z/W7/Fgt912Gw0NDZx77rnDet5Yv8dTp05lwoQJQ+5jJpPh+eef3+F93JOfB/sbP/BYuXIlTzzxBHV1dcN+jV19f+zP1q9fT2dn5w7PvRruse83v/kNs2fPZtasWcN+7pi9x/s643Uk3XfffSocDqvbb79dvfHGG+qqq65S6XRatbW1KaWUuvzyy9U3vvGN4Phnn31WmaapfvKTn6g333xTLViwQFmWpV577bV9dQnD8vnPf16lUim1ePFi1draGnzkcrngmK2v+bvf/a567LHH1Ntvv62WLl2q5s2bpyKRiFq+fPm+uIRh+8pXvqIWL16sVq9erZ599lk1d+5cVV9fr9rb25VS1XePfY7jqIMOOkhdd91123yuGu5xX1+fWrZsmVq2bJkC1A033KCWLVsWVHZcf/31Kp1Oq4ceeki9+uqr6vzzz1dTp05V+Xw+eI3TTz9d3XTTTcHfd/XzYF/b2TWXSiV13nnnqUmTJqmXX355yPd3sVgMXmPra97V98e+tLPr7evrU1/96lfVc889p1avXq2eeOIJdcwxx6j3vOc9qlAoBK9RTffY19vbq2KxmLr55pu3+xpj6R4PR1UFH0opddNNN6mDDjpIhUIhdfzxx6slS5YEn3v/+9+vrrzyyiHH/+53v1PTpk1ToVBIHXHEEeqRRx6p8BnvOWC7H7fddltwzNbXfO211wb/fxobG9UHP/hB9dJLL1X+5PfQxRdfrJqamlQoFFITJ05UF198sVq1alXw+Wq7x77HHntMAWrFihXbfK4a7vFTTz213a9l/7pc11Xf+ta3VGNjowqHw+qMM87Y5v9FS0uLWrBgwZDHdvbzYF/b2TWvXr16h9/fTz31VPAaW1/zrr4/9qWdXW8ul1NnnnmmGj9+vLIsS7W0tKjPfOYz2wQR1XSPfbfccouKRqOqp6dnu68xlu7xcGhKKTWqSytCCCGEEINUTc6HEEIIIcYGCT6EEEIIUVESfAghhBCioiT4EEIIIURFSfAhhBBCiIqS4EMIIYQQFSXBhxBCCCEqSoIPIYQQQlSUBB9CCCGEqCgJPoQQQghRURJ8CCGEEKKiJPgQQgghREX9f/ZpuJGBiCqbAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# VAE Predict and plot\n",
"_track_id = 8701 # random.choice(track_ids)\n",
"_track_id = 3880 # random.choice(track_ids)\n",
"\n",
"# _track_id = 2780\n",
"\n",
"for batch_idx in range(100):\n",
" _track_id = random.choice(track_ids)\n",
" plt.plot(\n",
" data.loc[_track_id,:]['x'],\n",
" data.loc[_track_id,:]['y'],\n",
" c='grey', alpha=.2\n",
" )\n",
"\n",
"_track_id = random.choice(track_ids)\n",
"# _track_id = 1096\n",
"_track_id = 1301\n",
"print(_track_id)\n",
"ax = plt.scatter(\n",
" data.loc[_track_id,:]['x'],\n",
" data.loc[_track_id,:]['y'],\n",
" marker=\"*\") \n",
"plt.plot(\n",
" data.loc[_track_id,:]['x'],\n",
" data.loc[_track_id,:]['y']\n",
")\n",
"\n",
"# predict_and_plot(data.loc[_track_id,:].iloc[:5][in_fields].values)\n",
"predict_and_plot(vae, data.loc[_track_id,:].iloc[:5][in_fields].values, 50)\n",
"# predict_and_plot(vae, data.loc[_track_id,:].iloc[:10][in_fields].values, 50)\n",
"# predict_and_plot(vae, data.loc[_track_id,:].iloc[:20][in_fields].values)\n",
"# predict_and_plot(vae, data.loc[_track_id,:].iloc[:30][in_fields].values)\n",
"# predict_and_plot(filtered_data.loc[_track_id,:].iloc[:70][in_fields].values)\n",
"# predict_and_plot(filtered_data.loc[_track_id,:].iloc[:115][in_fields].values)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'LSTM_VAE' object has no attribute 'embed_size'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[103], line 268\u001b[0m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# Statistics.\u001b[39;00m\n\u001b[1;32m 262\u001b[0m \u001b[38;5;66;03m# if batch_num % 20 ==0:\u001b[39;00m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;66;03m# print('| epoch {:3d} | elbo_loss {:5.6f} | kl_loss {:5.6f} | recons_loss {:5.6f} '.format(\u001b[39;00m\n\u001b[1;32m 264\u001b[0m \u001b[38;5;66;03m# epoch, mloss.item(), KL_loss.item(), recon_loss.item()))\u001b[39;00m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m test_losses\n\u001b[0;32m--> 268\u001b[0m vae \u001b[38;5;241m=\u001b[39m \u001b[43mLSTM_VAE\u001b[49m\u001b[43m(\u001b[49m\u001b[43minput_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhidden_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m16\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mto(device)\n\u001b[1;32m 270\u001b[0m vae_loss \u001b[38;5;241m=\u001b[39m VAE_Loss()\n\u001b[1;32m 271\u001b[0m optimizer \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39moptim\u001b[38;5;241m.\u001b[39mAdam(vae\u001b[38;5;241m.\u001b[39mparameters(), lr\u001b[38;5;241m=\u001b[39m learning_rate)\n",
"Cell \u001b[0;32mIn[103], line 73\u001b[0m, in \u001b[0;36mLSTM_VAE.__init__\u001b[0;34m(self, input_size, output_size, hidden_size, latent_size, num_layers, device)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;66;03m# Decoder Part\u001b[39;00m\n\u001b[1;32m 72\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minit_hidden_decoder \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mnn\u001b[38;5;241m.\u001b[39mLinear(in_features\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlatent_size, out_features\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhidden_size \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlstm_factor)\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdecoder_lstm \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mnn\u001b[38;5;241m.\u001b[39mLSTM(input_size\u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43membed_size\u001b[49m, hidden_size\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhidden_size, batch_first \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m, num_layers \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnum_layers)\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutput \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mnn\u001b[38;5;241m.\u001b[39mLinear(in_features\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhidden_size \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlstm_factor, out_features\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutput_size)\n",
"File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1207\u001b[0m, in \u001b[0;36mModule.__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 1205\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m modules:\n\u001b[1;32m 1206\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m modules[name]\n\u001b[0;32m-> 1207\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m object has no attribute \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\n\u001b[1;32m 1208\u001b[0m \u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28mself\u001b[39m)\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m, name))\n",
"\u001b[0;31mAttributeError\u001b[0m: 'LSTM_VAE' object has no attribute 'embed_size'"
]
}
],
"source": [
"# import torch\n",
"\n",
"class VAE_Loss(torch.nn.Module):\n",
" \"\"\"\n",
" Adapted from https://github.com/Khamies/LSTM-Variational-AutoEncoder/blob/main/model.py\n",
" \"\"\"\n",
" def __init__(self):\n",
" super(VAE_Loss, self).__init__()\n",
" self.nlloss = torch.nn.NLLLoss()\n",
" \n",
" def KL_loss (self, mu, log_var, z):\n",
" kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())\n",
" kl = kl.sum(-1) # to go from multi-dimensional z to single dimensional z : (batch_size x latent_size) ---> (batch_size) \n",
" # i.e Z = [ [z1_1, z1_2 , ...., z1_lt] ] ------> z = [ z1] \n",
" # [ [z2_1, z2_2, ....., z2_lt] ] [ z2]\n",
" # . [ . ]\n",
" # . [ . ]\n",
" # [[zn_1, zn_2, ....., zn_lt] ] [ zn]\n",
" \n",
" # lt=latent_size \n",
" kl = kl.mean()\n",
" \n",
" return kl\n",
"\n",
" def reconstruction_loss(self, x_hat_param, x):\n",
"\n",
" x = x.view(-1).contiguous()\n",
" x_hat_param = x_hat_param.view(-1, x_hat_param.size(2))\n",
"\n",
" recon = self.nlloss(x_hat_param, x)\n",
"\n",
" return recon\n",
" \n",
"\n",
" def forward(self, mu, log_var,z, x_hat_param, x):\n",
" kl_loss = self.KL_loss(mu, log_var, z)\n",
" recon_loss = self.reconstruction_loss(x_hat_param, x)\n",
"\n",
"\n",
" elbo = kl_loss + recon_loss # we use + because recon loss is a NLLoss (cross entropy) and it's negative in its own, and in the ELBO equation we have\n",
" # elbo = KL_loss - recon_loss, therefore, ELBO = KL_loss - (NLLoss) = KL_loss + NLLoss\n",
"\n",
" return elbo, kl_loss, recon_loss\n",
" \n",
"class LSTM_VAE(torch.nn.Module):\n",
" \"\"\"\n",
" Adapted from https://github.com/Khamies/LSTM-Variational-AutoEncoder/blob/main/model.py\n",
" \"\"\"\n",
" def __init__(self, input_size, output_size, hidden_size, latent_size, num_layers=1, device=\"cuda\"):\n",
" super(LSTM_VAE, self).__init__()\n",
"\n",
" self.device = device\n",
" \n",
" # Variables\n",
" self.num_layers = num_layers\n",
" self.lstm_factor = num_layers\n",
" self.input_size = input_size\n",
" self.hidden_size = hidden_size\n",
" self.latent_size = latent_size\n",
" self.output_size = output_size\n",
"\n",
" # X: bsz * seq_len * vocab_size \n",
" # X: bsz * seq_len * embed_size\n",
"\n",
" # Encoder Part\n",
" self.encoder_lstm = torch.nn.LSTM(input_size= input_size,hidden_size= self.hidden_size, batch_first=True, num_layers= self.num_layers)\n",
" self.mean = torch.nn.Linear(in_features= self.hidden_size * self.lstm_factor, out_features= self.latent_size)\n",
" self.log_variance = torch.nn.Linear(in_features= self.hidden_size * self.lstm_factor, out_features= self.latent_size)\n",
"\n",
" # Decoder Part\n",
" \n",
" self.hidden_decoder_linear = torch.nn.Linear(in_features= self.latent_size, out_features= self.hidden_size * self.lstm_factor)\n",
" self.decoder_lstm = torch.nn.LSTM(input_size= self.embed_size, hidden_size= self.hidden_size, batch_first = True, num_layers = self.num_layers)\n",
" self.output = torch.nn.Linear(in_features= self.hidden_size * self.lstm_factor, out_features= self.output_size)\n",
" # self.log_softmax = torch.nn.LogSoftmax(dim=2)\n",
"\n",
" def get_hidden_state(self, batch_size):\n",
" h = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(self.device)\n",
" c = torch.zeros(self.num_layers, batch_size, self.hidden_size).to(self.device)\n",
" return (h, c)\n",
"\n",
"\n",
" def encoder(self, x, hidden_state):\n",
"\n",
" # pad the packed input.\n",
"\n",
" out, (h,c) = self.encoder_lstm(x, hidden_state)\n",
" # output_encoder, _ = torch.nn.utils.rnn.pad_packed_sequence(packed_output_encoder, batch_first=True, total_length= total_padding_length)\n",
"\n",
" # Extimate the mean and the variance of q(z|x)\n",
" mean = self.mean(h)\n",
" log_var = self.log_variance(h)\n",
" std = torch.exp(0.5 * log_var) # e^(0.5 log_var) = var^0.5\n",
" \n",
" # Generate a unit gaussian noise.\n",
" # batch_size = output_encoder.size(0)\n",
" # seq_len = output_encoder.size(1)\n",
" # noise = torch.randn(batch_size, self.latent_size).to(self.device)\n",
" noise = torch.randn(self.latent_size).to(self.device)\n",
" \n",
" z = noise * std + mean\n",
"\n",
" return z, mean, log_var, (h,c)\n",
"\n",
"\n",
" def decoder(self, z, x):\n",
"\n",
" hidden_decoder = self.hidden_decoder_linear(z)\n",
" hidden_decoder = (hidden_decoder, hidden_decoder)\n",
"\n",
" # pad the packed input.\n",
" packed_output_decoder, hidden_decoder = self.decoder_lstm(packed_x_embed,hidden_decoder) \n",
" output_decoder, _ = torch.nn.utils.rnn.pad_packed_sequence(packed_output_decoder, batch_first=True, total_length= total_padding_length)\n",
"\n",
"\n",
" x_hat = self.output(output_decoder)\n",
" \n",
" # x_hat = self.log_softmax(x_hat)\n",
"\n",
"\n",
" return x_hat\n",
"\n",
" \n",
"\n",
" def forward(self, x, hidden_state):\n",
" \n",
" \"\"\"\n",
" x : bsz * seq_len\n",
" \n",
" hidden_encoder: ( num_lstm_layers * bsz * hidden_size, num_lstm_layers * bsz * hidden_size)\n",
"\n",
" \"\"\"\n",
" # Get Embeddings\n",
" # x_embed, maximum_padding_length = self.get_embedding(x)\n",
"\n",
" # Packing the input\n",
" # packed_x_embed = torch.nn.utils.rnn.pack_padded_sequence(input= x_embed, lengths= sentences_length, batch_first=True, enforce_sorted=False)\n",
"\n",
"\n",
" # Encoder\n",
" z, mean, log_var, hidden_encoder = self.encoder(x, maximum_padding_length, hidden_encoder)\n",
"\n",
" # Decoder\n",
" x_hat = self.decoder(z, packed_x_embed, maximum_padding_length)\n",
" \n",
" return x_hat, mean, log_var, z, hidden_encoder\n",
"\n",
" \n",
"\n",
" def inference(self, n_samples, x, z):\n",
"\n",
" # generate random z \n",
" batch_size = 1\n",
" seq_len = 1\n",
" idx_sample = []\n",
"\n",
"\n",
" hidden = self.hidden_decoder_linear(z)\n",
" hidden = (hidden, hidden)\n",
" \n",
" for i in range(n_samples):\n",
" \n",
" output,hidden = self.decoder_lstm(x, hidden)\n",
" output = self.output(output)\n",
" # output = self.log_softmax(output)\n",
" # output = output.exp()\n",
" _, s = torch.topk(output, 1)\n",
" idx_sample.append(s.item())\n",
" x = s.squeeze(0)\n",
"\n",
" w_sample = [self.dictionary.get_i2w()[str(idx)] for idx in idx_sample]\n",
" w_sample = \" \".join(w_sample)\n",
"\n",
" return w_sample\n",
"\n",
"\n",
"\n",
"def get_batch(batch):\n",
" sentences = batch[\"input\"]\n",
" target = batch[\"target\"]\n",
" sentences_length = batch[\"length\"]\n",
"\n",
" return sentences, target, sentences_length\n",
"\n",
"class Trainer:\n",
"\n",
" def __init__(self, train_loader, test_loader, model, loss, optimizer) -> None:\n",
" self.train_loader = train_loader\n",
" self.test_loader = test_loader\n",
" self.model = model\n",
" self.loss = loss\n",
" self.optimizer = optimizer\n",
" self.device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
" self.interval = 200\n",
"\n",
"\n",
" def train(self, train_losses, epoch, batch_size, clip) -> list: \n",
" # Initialization of RNN hidden, and cell states.\n",
" states = self.model.init_hidden(batch_size) \n",
"\n",
" for batch_idx, (x, targets) in enumerate(self.train_loader):\n",
" # Get x to cuda if possible\n",
" x = x.to(device=device).squeeze(1)\n",
" targets = targets.to(device=device)\n",
"\n",
" # for batch_num, batch in enumerate(self.train_loader): # loop over the data, and jump with step = bptt.\n",
" # get the labels\n",
" source, target, source_lengths = get_batch(batch)\n",
" source = source.to(self.device)\n",
" target = target.to(self.device)\n",
"\n",
"\n",
" x_hat_param, mu, log_var, z, states = self.model(source,source_lengths, states)\n",
"\n",
" # detach hidden states\n",
" states = states[0].detach(), states[1].detach()\n",
"\n",
" # compute the loss\n",
" mloss, KL_loss, recon_loss = self.loss(mu = mu, log_var = log_var, z = z, x_hat_param = x_hat_param , x = target)\n",
"\n",
" train_losses.append((mloss , KL_loss.item(), recon_loss.item()))\n",
"\n",
" mloss.backward()\n",
"\n",
" torch.nn.utils.clip_grad_norm_(self.model.parameters(), clip)\n",
"\n",
" self.optimizer.step()\n",
"\n",
" self.optimizer.zero_grad()\n",
"\n",
"\n",
" if batch_num % self.interval == 0 and batch_num > 0:\n",
" \n",
" print('| epoch {:3d} | elbo_loss {:5.6f} | kl_loss {:5.6f} | recons_loss {:5.6f} '.format(\n",
" epoch, mloss.item(), KL_loss.item(), recon_loss.item()))\n",
"\n",
" return train_losses\n",
"\n",
" def test(self, test_losses, epoch, batch_size) -> list:\n",
"\n",
" with torch.no_grad():\n",
"\n",
" states = self.model.init_hidden(batch_size) \n",
"\n",
" for batch_num, batch in enumerate(self.test_loader): # loop over the data, and jump with step = bptt.\n",
" # get the labels\n",
" source, target, source_lengths = get_batch(batch)\n",
" source = source.to(self.device)\n",
" target = target.to(self.device)\n",
"\n",
"\n",
" x_hat_param, mu, log_var, z, states = self.model(source,source_lengths, states)\n",
"\n",
" # detach hidden states\n",
" states = states[0].detach(), states[1].detach()\n",
"\n",
" # compute the loss\n",
" mloss, KL_loss, recon_loss = self.loss(mu = mu, log_var = log_var, z = z, x_hat_param = x_hat_param , x = target)\n",
"\n",
" test_losses.append((mloss , KL_loss.item(), recon_loss.item()))\n",
"\n",
" # Statistics.\n",
" # if batch_num % 20 ==0:\n",
" # print('| epoch {:3d} | elbo_loss {:5.6f} | kl_loss {:5.6f} | recons_loss {:5.6f} '.format(\n",
" # epoch, mloss.item(), KL_loss.item(), recon_loss.item()))\n",
"\n",
" return test_losses\n",
"\n",
"vae = LSTM_VAE(input_size, output_size, hidden_size, 16, 1, device).to(device)\n",
"\n",
"vae_loss = VAE_Loss()\n",
"optimizer = torch.optim.Adam(vae.parameters(), lr= learning_rate)\n",
"\n",
"trainer = Trainer(loader_train, loader_test, vae, vae_loss, optimizer)\n",
"\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.10.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}