Last active
December 7, 2023 02:51
-
-
Save toilaluan/d34ff885cc1f348c392d2525ab28d0e5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "ec3806e9-f6a3-4fb0-baca-b21fdb8fdca8", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Thu Dec 7 02:40:07 2023 \n", | |
"+---------------------------------------------------------------------------------------+\n", | |
"| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |\n", | |
"|-----------------------------------------+----------------------+----------------------+\n", | |
"| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", | |
"| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n", | |
"| | | MIG M. |\n", | |
"|=========================================+======================+======================|\n", | |
"| 0 NVIDIA A40 On | 00000000:2A:00.0 Off | 0 |\n", | |
"| 0% 33C P8 21W / 300W | 4MiB / 46068MiB | 0% Default |\n", | |
"| | | N/A |\n", | |
"+-----------------------------------------+----------------------+----------------------+\n", | |
" \n", | |
"+---------------------------------------------------------------------------------------+\n", | |
"| Processes: |\n", | |
"| GPU GI CI PID Type Process name GPU Memory |\n", | |
"| ID ID Usage |\n", | |
"|=======================================================================================|\n", | |
"| No running processes found |\n", | |
"+---------------------------------------------------------------------------------------+\n" | |
] | |
} | |
], | |
"source": [ | |
"!nvidia-smi" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "1db5984e-b13f-4a8f-b34f-fc0146d6a0b7", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/opt/conda/lib/python3.10/site-packages/controlnet_aux/mediapipe_face/mediapipe_face_common.py:7: UserWarning: The module 'mediapipe' is not installed. The package will have limited functionality. Please install it using the command: pip install 'mediapipe'\n", | |
" warnings.warn(\n", | |
"/opt/conda/lib/python3.10/site-packages/controlnet_aux/segment_anything/modeling/tiny_vit_sam.py:654: UserWarning: Overwriting tiny_vit_5m_224 in registry with controlnet_aux.segment_anything.modeling.tiny_vit_sam.tiny_vit_5m_224. This is because the name being registered conflicts with an existing name. Please check if this is not expected.\n", | |
" return register_model(fn_wrapper)\n", | |
"/opt/conda/lib/python3.10/site-packages/controlnet_aux/segment_anything/modeling/tiny_vit_sam.py:654: UserWarning: Overwriting tiny_vit_11m_224 in registry with controlnet_aux.segment_anything.modeling.tiny_vit_sam.tiny_vit_11m_224. This is because the name being registered conflicts with an existing name. Please check if this is not expected.\n", | |
" return register_model(fn_wrapper)\n", | |
"/opt/conda/lib/python3.10/site-packages/controlnet_aux/segment_anything/modeling/tiny_vit_sam.py:654: UserWarning: Overwriting tiny_vit_21m_224 in registry with controlnet_aux.segment_anything.modeling.tiny_vit_sam.tiny_vit_21m_224. This is because the name being registered conflicts with an existing name. Please check if this is not expected.\n", | |
" return register_model(fn_wrapper)\n", | |
"/opt/conda/lib/python3.10/site-packages/controlnet_aux/segment_anything/modeling/tiny_vit_sam.py:654: UserWarning: Overwriting tiny_vit_21m_384 in registry with controlnet_aux.segment_anything.modeling.tiny_vit_sam.tiny_vit_21m_384. This is because the name being registered conflicts with an existing name. Please check if this is not expected.\n", | |
" return register_model(fn_wrapper)\n", | |
"/opt/conda/lib/python3.10/site-packages/controlnet_aux/segment_anything/modeling/tiny_vit_sam.py:654: UserWarning: Overwriting tiny_vit_21m_512 in registry with controlnet_aux.segment_anything.modeling.tiny_vit_sam.tiny_vit_21m_512. This is because the name being registered conflicts with an existing name. Please check if this is not expected.\n", | |
" return register_model(fn_wrapper)\n" | |
] | |
} | |
], | |
"source": [ | |
"from predict import Predictor\n", | |
"import pandas as pd\n", | |
"\n", | |
"predictor = Predictor()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "2006ff43-0bd9-423c-983e-2f2d978e79da", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "481c79a516d248108593858062bee540", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
"Loading pipeline components...: 0%| | 0/7 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"predictor.setup()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "d2d7e5d1-d365-4083-977b-a4a62ef5dcf7", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"prompt = \"a beautiful, colorful shirt, sharpness, ultra 4k\"\n", | |
"seed = 42\n", | |
"image = \"/code/replicate-sdxl-t2i-adapter/test_sketch.jpg\"\n", | |
"use_canny=True\n", | |
"params = {\n", | |
" \"prompt\": prompt,\n", | |
" \"seed\": seed,\n", | |
" \"image\": image,\n", | |
" \"use_canny\": use_canny,\n", | |
" \"lora_url\": \"https://civitai.com/api/download/models/126807?type=Model&format=SafeTensor\",\n", | |
" \"lora_scale\": 1.5,\n", | |
" \"negative_prompt\": \"deformed, animation, anime, cartoon, comic, cropped, out of frame, low res, draft, cgi, low quality render, thumbnail\",\n", | |
" \"suffix_prompt\": \"textured, high quality, full detailed material, studio style, simple background, dslr, natural lighting, shot by camera, RAW image, photorealistic, sharp focus, 8k, uhd, file grain, masterpiece\",\n", | |
" \"num_outputs\": 1,\n", | |
" \"num_inference_steps\": 35,\n", | |
" \"guidance_scale\": 7.5,\n", | |
" \"adapter_conditioning_scale\": 0.9,\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "c6b05074-3e38-4651-864a-f2374bbda5e6", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"REPEAT_TIME = 10" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "86a43305-6033-4a4f-9041-7cbe073e53fb", | |
"metadata": {}, | |
"source": [ | |
"## Current Demo" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "5cfe8996-5314-4cc4-85d8-2940c406363a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<controlnet_aux.pidi.PidiNetDetector at 0x7fa16600feb0>" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"predictor.pidinet.to('cpu')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "3f5728f3-eefe-4877-8cc8-d9fdc7ee9cb8", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "d4d11cdf5c1e4c3d9af2653a75e3cb94", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "5fa38834120a48d2884c9f6c553b0a64", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "b468d34979094bfc9197f7f08d770030", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "b03451f843824d829214e9b3f2ce7892", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "75aa764bbe5f4b31ae8440ba9b03e8c6", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "8d965c73b1444c64a91e94cbfde7dfde", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "dba78b9049674c929694dcc95f4ac6f7", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "0070ec8baf3b48c6b44402eed6f2da98", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "2e81a4f4bf0241d980e20b59fc534c0f", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "939a02ce75c14d87bf5e6fbe13b6c952", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"time_pidi_cpu = []\n", | |
"for _ in range(REPEAT_TIME):\n", | |
" time_pidi_cpu.append(predictor.predict(**params))\n", | |
"time_pidi_cpu = pd.DataFrame(time_pidi_cpu)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "02a42f26-aca9-4ba0-892b-9522a791a8bd", | |
"metadata": {}, | |
"source": [ | |
"## Use GPU for Pidi" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "a7f61a77-38ec-4729-b4f7-a5c1d5d8ef0b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<controlnet_aux.pidi.PidiNetDetector at 0x7fa16600feb0>" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"predictor.pidinet.to('cuda')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "4ca86303-26cf-4842-b5cb-373d874aa0a2", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "806ecdac9bee45f3923866b2c43a53e3", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "aca91ed90fff42b5a57446e208e90d30", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "31600a0fd6ef4a85a2a535573dea451f", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "a80af62b42cf471e9bc29ac2e15a2213", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "076b5de9f7264832aff941c54aa4156f", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "d79a1fe1a32141e7ba8c43a04e0ca3f4", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "1f4a7fdf4bf94c66b9f5277a336b93ca", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "2f8a14de5ece4919b2b487cb196ec505", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "6757ffe7de2c42c38df2dd744fe35737", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "a6f8cd640eb9451498e44eb3812acb0e", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
" 0%| | 0/35 [00:00<?, ?it/s]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"time_pidi_gpu = []\n", | |
"for _ in range(REPEAT_TIME):\n", | |
" time_pidi_gpu.append(predictor.predict(**params))\n", | |
"time_pidi_gpu = pd.DataFrame(time_pidi_gpu)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"id": "a78eedbc-96e5-4991-a3a1-f55409eaee0c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAMWCAYAAAAgRDUeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwuklEQVR4nOzdd5gV5fk/4GdZytIWlI4iRQHBAgYVERVUIhJFsYuFInYwIraQRIoa0RBrxBoFY2xRQU2siGJDUERUEnpAUCk2QFABYX5/+ON8PbK0dZml3Pd1netiZt6Zeeacd2Z3P8y8JydJkiQAAAAAIEUlirsAAAAAALY/QikAAAAAUieUAgAAACB1QikAAAAAUieUAgAAACB1QikAAAAAUieUAgAAACB1QikAAAAAUieUAgAAACB1QikAYJuTk5MTAwYMKO4yfrEHH3wwdt999yhVqlRUrlw59f3Xq1cvunXrlvp+AYDtg1AKALZBM2fOjPPOOy8aNGgQeXl5kZ+fH61bt45bb701vvvuu+Iuj40wZcqU6NatW+y6665x7733xj333LPBdSZOnBhnnHFG1KlTJ8qUKRM77rhjtGvXLoYOHRqrVq1KoeotR9u2bSMnJycaNmxY4PKRI0dGTk5O5OTkxBNPPJFydQBARETJ4i4AAChazz77bJx00klRpkyZ6NKlS+y5556xYsWKePPNN+Pyyy+P//znPxsVcGzNvvvuuyhZcuv+NWf06NGxevXquPXWW2O33XbbYPu//e1vcf7550eNGjXizDPPjIYNG8Y333wTo0aNih49esS8efPi97//fQqVbzny8vJixowZ8c4778T++++fteyhhx6KvLy8+P7774upOgBg6/5tDQDIMmvWrDj11FOjbt268corr0StWrUyy3r27BkzZsyIZ599thgr3HxWr14dK1asiLy8vMjLyyvucn6xhQsXRkRs1GN7Y8eOjfPPPz9atWoVzz33XFSsWDGzrHfv3jF+/PiYNGnS5ip1i7XrrrvGDz/8EI888khWKPX999/HiBEj4qijjoonn3yyGCsEgO2bx/cAYBvy5z//OZYuXRr33XdfViC1xm677RYXX3xxZvqHH36Ia665JnbdddcoU6ZM1KtXL37/+9/H8uXLs9arV69eHH300TF69OjYd999o2zZsrHXXnvF6NGjIyJi+PDhsddee0VeXl60aNEi3n///az1u3XrFhUqVIj//e9/0b59+yhfvnzUrl07rr766kiSJKvtX/7ylzjwwAOjSpUqUbZs2WjRokWBj1fl5OREr1694qGHHoo99tgjypQpEy+88EJm2U/HlPrmm2+id+/eUa9evShTpkxUr149fv3rX8eECROytvn4449HixYtomzZslG1atU444wz4tNPPy3wWD799NPo1KlTVKhQIapVqxaXXXbZRj8id8cdd2Rqrl27dvTs2TMWLVqU9X73798/IiKqVau2wTGyBg4cGDk5OfHQQw9lBVJr7LvvvlljQy1btiwuvfTSzGN+jRs3jr/85S9rfRY/N2DAgMjJyVlr/rBhwyInJydmz56ddQxF0Wd+yfscEdG5c+d47LHHYvXq1Zl5//rXv+Lbb7+Nk08+ucB1Pv300zjrrLOiRo0aUaZMmdhjjz3i/vvvz2qzYsWK6NevX7Ro0SIqVaoU5cuXj4MPPjheffXVrHazZ8+OnJyc+Mtf/hL33HNP5lzbb7/94t13381qO3/+/OjevXvsvPPOUaZMmahVq1Yce+yxWe8rAGxLhFIAsA3517/+FQ0aNIgDDzxwo9qfffbZ0a9fv/jVr34VN998c7Rp0yYGDRoUp5566lptZ8yYEaeddlp07NgxBg0aFF9//XV07NgxHnroobjkkkvijDPOiIEDB8bMmTPj5JNPzgoBIiJWrVoVRx55ZNSoUSP+/Oc/R4sWLaJ///6Z8GWNW2+9NfbZZ5+4+uqr47rrrouSJUvGSSedVOAdXq+88kpccsklccopp8Stt94a9erVK/A4zz///LjzzjvjhBNOiDvuuCMuu+yyKFu2bEyePDnTZtiwYXHyySdHbm5uDBo0KM4555wYPnx4HHTQQVmB0Zpjad++fVSpUiX+8pe/RJs2beLGG2/cqMciBwwYED179ozatWvHjTfeGCeccELcfffdccQRR8TKlSsjIuKWW26J4447LiIi7rzzznjwwQfj+OOPL3B73377bYwaNSoOOeSQ2GWXXTa4/yRJ4phjjombb745jjzyyLjpppuicePGcfnll0efPn02uP6mKIo+U9j3eY3TTjst5s2blwnDIiIefvjhOPzww6N69eprtV+wYEEccMAB8fLLL0evXr0yj0/26NEjbrnllky7JUuWxN/+9rdo27Zt3HDDDTFgwID4/PPPo3379jFx4sS1tvvwww/H4MGD47zzzotrr702Zs+eHccff3zmM4+IOOGEE2LEiBHRvXv3uOOOO+K3v/1tfPPNNzFnzpyNPl4A2KokAMA2YfHixUlEJMcee+xGtZ84cWISEcnZZ5+dNf+yyy5LIiJ55ZVXMvPq1q2bREQyZsyYzLwXX3wxiYikbNmyyccff5yZf/fddycRkbz66quZeV27dk0iIrnooosy81avXp0cddRRSenSpZPPP/88M//bb7/NqmfFihXJnnvumRx22GFZ8yMiKVGiRPKf//xnrWOLiKR///6Z6UqVKiU9e/Zc53uxYsWKpHr16smee+6ZfPfdd5n5//73v5OISPr167fWsVx99dVZ29hnn32SFi1arHMfSZIkCxcuTEqXLp0cccQRyapVqzLzb7/99iQikvvvvz8zr3///klEZL03Bfnggw+SiEguvvji9bZb46mnnkoiIrn22muz5p944olJTk5OMmPGjMy8unXrJl27dl2rpp8bOnRoEhHJrFmzstYtij5TmPc5SZKkTZs2yR577JEkSZLsu+++SY8ePZIkSZKvv/46KV26dPLAAw8kr776ahIRyeOPP55Zr0ePHkmtWrWSL774Imt7p556alKpUqVM//zhhx+S5cuXZ7X5+uuvkxo1aiRnnXVWZt6sWbOSiEiqVKmSfPXVV5n5Tz/9dBIRyb/+9a/MuhGRDB48eIPHBgDbCndKAcA2YsmSJRERBT6+VZDnnnsuImKtu2MuvfTSiIi17kxq2rRptGrVKjPdsmXLiIg47LDDsu7QWTP/f//731r77NWrV+bfax6/W7FiRbz88suZ+WXLls38++uvv47FixfHwQcfvNajdhERbdq0iaZNm27gSH8cl2ncuHHx2WefFbh8/PjxsXDhwrjwwguzxqM66qijYvfddy/wLq3zzz8/a/rggw8u8Jh/6uWXX44VK1ZE7969o0SJ//s17Jxzzon8/PxCjfdVmM89Nzc3fvvb32bNv/TSSyNJknj++ec3uYZ1KYo+U5j3+edOO+20GD58eKxYsSKeeOKJyM3NzdyJ9lNJksSTTz4ZHTt2jCRJ4osvvsi82rdvH4sXL870w9zc3ChdunRE/Die2VdffRU//PBD7LvvvgX21VNOOSV22GGHrOP46TGXLVs2SpcuHaNHj46vv/56k44PALZWQikA2Ebk5+dHxI/jJ22Mjz/+OEqUKLHWN7vVrFkzKleuHB9//HHW/J8/GlapUqWIiKhTp06B83/+h3WJEiWiQYMGWfMaNWoUEZE1Zs6///3vOOCAAyIvLy923HHHqFatWtx5552xePHitY6hfv36GzrMiPhxrK1JkyZFnTp1Yv/9948BAwZkBRtrjrVx48Zrrbv77ruv9V7k5eVFtWrVsubtsMMOGwwT1rWf0qVLR4MGDdbaz8YozOdeu3bttUKsJk2aZNVYFH5pnyns+/xzp556aixevDief/75eOihh+Loo48uMMT7/PPPY9GiRXHPPfdEtWrVsl7du3ePiP8bgD4i4oEHHoi999478vLyokqVKlGtWrV49tlnC+yrP38v1gRUa46lTJkyccMNN8Tzzz8fNWrUiEMOOST+/Oc/x/z58zfpWAFgayKUAoBtRH5+ftSuXXuTv2WtoIGrC5Kbm7tJ85MNDJpdkDfeeCOOOeaYyMvLizvuuCOee+65GDlyZJx22mkFbu+nd1Wtz8knnxz/+9//4q9//WvUrl07Bg8eHHvssUeh7wpa1zEXh9122y1KliwZH3300Wbf17r6yroGHv+lfaao3udatWpF27Zt48Ybb4zXX389TjvttALbrRnT6owzzoiRI0cW+GrdunVERPzjH/+Ibt26xa677hr33XdfvPDCCzFy5Mg47LDD1hoba33H8tNj7t27d0ybNi0GDRoUeXl5cdVVV0WTJk3WGgQeALYVQikA2IYcffTRMXPmzHj77bc32LZu3bqxevXqmD59etb8BQsWxKJFi6Ju3bpFWtvq1avXeuxq2rRpERGZAcqffPLJyMvLixdffDHOOuus6NChQ7Rr165I9l+rVq248MIL46mnnopZs2ZFlSpV4k9/+lNEROZYp06dutZ6U6dOLbL3Yl37WbFiRcyaNatQ+ylXrlwcdthh8frrr8fcuXM3qobPPvtsrTurpkyZklVjQdbc3fPzgd+L8u6qzeW0006LN954I/Lz8+M3v/lNgW2qVasWFStWjFWrVkW7du0KfK0ZHP2JJ56IBg0axPDhw+PMM8+M9u3bR7t27eL777//RXXuuuuucemll8ZLL70UkyZNihUrVsSNN974i7YJAFsqoRQAbEOuuOKKKF++fJx99tmxYMGCtZbPnDkzbr311oiIzB/mP/1GsYiIm266KSJ+HE+pqN1+++2ZfydJErfffnuUKlUqDj/88Ij48W6SnJycrDtvZs+eHU899VSh97lq1aq1HqeqXr161K5dO5YvXx4REfvuu29Ur1497rrrrsy8iIjnn38+Jk+eXGTvRbt27aJ06dJx2223Zd0hc99998XixYsLvZ/+/ftHkiRx5plnxtKlS9da/t5778UDDzwQET9+7qtWrcr6LCIibr755sjJyYkOHTqscz+77rprRES8/vrrmXnLli3LbHtLduKJJ0b//v3jjjvuyIwF9XO5ublxwgknxJNPPlngHYeff/55VtuI7Dudxo0bt1GBcEG+/fbbtQKtXXfdNSpWrJjVJwFgW1KyuAsAAIrOrrvuGg8//HCccsop0aRJk+jSpUvsueeesWLFihgzZkw8/vjj0a1bt4iIaNasWXTt2jXuueeeWLRoUbRp0ybeeeedeOCBB6JTp05x6KGHFmlteXl58cILL0TXrl2jZcuW8fzzz8ezzz4bv//97zPjBh111FFx0003xZFHHhmnnXZaLFy4MIYMGRK77bZbfPjhh4Xa7zfffBM777xznHjiidGsWbOoUKFCvPzyy/Huu+9m7kApVapU3HDDDdG9e/do06ZNdO7cORYsWBC33npr1KtXLy655JIieQ+qVasWffv2jYEDB8aRRx4ZxxxzTEydOjXuuOOO2G+//eKMM84o1HYPPPDAGDJkSFx44YWx++67x5lnnhkNGzaMb775JkaPHh3PPPNMXHvttRER0bFjxzj00EPjD3/4Q8yePTuaNWsWL730Ujz99NPRu3fvTPBUkCOOOCJ22WWX6NGjR1x++eWRm5sb999/f1SrVi3mzJlTqNrTUqlSpRgwYMAG211//fXx6quvRsuWLeOcc86Jpk2bxldffRUTJkyIl19+Ob766quI+PGuxOHDh8dxxx0XRx11VMyaNSvuuuuuaNq0aYHB4IZMmzYtDj/88Dj55JOjadOmUbJkyRgxYkQsWLAgTj311E3eHgBsDYRSALCNOeaYY+LDDz+MwYMHx9NPPx133nlnlClTJvbee++48cYb45xzzsm0/dvf/hYNGjSIYcOGxYgRI6JmzZrRt2/f6N+/f5HXlZubGy+88EJccMEFcfnll0fFihWjf//+0a9fv0ybww47LO677764/vrro3fv3lG/fv244YYbYvbs2YUOpcqVKxcXXnhhvPTSSzF8+PBYvXp17LbbbnHHHXfEBRdckGnXrVu3KFeuXFx//fVx5ZVXRvny5eO4446LG264ISpXrvxLDz9jwIABUa1atbj99tvjkksuiR133DHOPffcuO6666JUqVKF3u55550X++23X9x4443x97//PT7//POoUKFC/OpXv4qhQ4dmAq8SJUrEM888E/369YvHHnsshg4dGvXq1YvBgwdnvnlxXUqVKhUjRoyICy+8MK666qqoWbNm9O7dO3bYYYfMQOBbuxo1asQ777wTV199dQwfPjzuuOOOqFKlSuyxxx5xww03ZNp169Yt5s+fH3fffXe8+OKL0bRp0/jHP/4Rjz/+eIwePXqT91unTp3o3LlzjBo1Kh588MEoWbJk7L777vHPf/4zTjjhhCI8QgDYcuQkhRmFFABgE3Tr1i2eeOKJQt1BAgDAtsmYUgAAAACkTigFAAAAQOqEUgAAAACkrlhDqUGDBsV+++0XFStWjOrVq0enTp1i6tSpWW2+//776NmzZ1SpUiUqVKgQJ5xwQoFfcf1TSZJEv379olatWlG2bNlo165dTJ8+fXMeCgCwHsOGDTOeFAAAWYo1lHrttdeiZ8+eMXbs2Bg5cmSsXLkyjjjiiFi2bFmmzSWXXBL/+te/4vHHH4/XXnstPvvsszj++OPXu90///nPcdttt8Vdd90V48aNi/Lly0f79u3j+++/39yHBAAAAMBG2KK+fe/zzz+P6tWrx2uvvRaHHHJILF68OKpVqxYPP/xwnHjiiRERMWXKlGjSpEm8/fbbccABB6y1jSRJonbt2nHppZfGZZddFhERixcvjho1asSwYcPi1FNPTfWYAAAAAFhbyeIu4KcWL14cERE77rhjRES89957sXLlymjXrl2mze677x677LLLOkOpWbNmxfz587PWqVSpUrRs2TLefvvtjQqlVq9eHZ999llUrFgxcnJyfulhAQAAAGw3kiSJb775JmrXrh0lSqz7Ib0tJpRavXp19O7dO1q3bh177rlnRETMnz8/SpcuHZUrV85qW6NGjZg/f36B21kzv0aNGhu9zvLly2P58uWZ6U8//TSaNm1a2EMBAAAA2O7NnTs3dt5553Uu32JCqZ49e8akSZPizTffTH3fgwYNioEDB641f+7cuZGfn596PQAAAABbqyVLlkSdOnWiYsWK6223RYRSvXr1in//+9/x+uuvZyVoNWvWjBUrVsSiRYuy7pZasGBB1KxZs8BtrZm/YMGCqFWrVtY6zZs3L3Cdvn37Rp8+fTLTa968/Px8oRQAAABAIWxoSKRi/fa9JEmiV69eMWLEiHjllVeifv36WctbtGgRpUqVilGjRmXmTZ06NebMmROtWrUqcJv169ePmjVrZq2zZMmSGDdu3DrXKVOmTCaAEkQBAAAAbH7FGkr17Nkz/vGPf8TDDz8cFStWjPnz58f8+fPju+++i4gfByjv0aNH9OnTJ1599dV47733onv37tGqVausQc533333GDFiRET8mML17t07rr322njmmWfio48+ii5dukTt2rWjU6dOxXGYAAAAAPxMsT6+d+edd0ZERNu2bbPmDx06NLp16xYRETfffHOUKFEiTjjhhFi+fHm0b98+7rjjjqz2U6dOzXxzX0TEFVdcEcuWLYtzzz03Fi1aFAcddFC88MILkZeXt1mPBwAAAICNk5MkSVLcRWxplixZEpUqVYrFixev91G+VatWxcqVK1OsjE1VqlSpyM3NLe4yAAAAYLuxsbnKFjHQ+dYmSZKYP39+LFq0qLhLYSNUrlw5atasucEB1gAAAID0CKUKYU0gVb169ShXrpywYwuVJEl8++23sXDhwoiIrG9jBAAAAIqXUGoTrVq1KhNIValSpbjLYQPKli0bERELFy6M6tWre5QPAAAAthDF+u17W6M1Y0iVK1eumCthY635rIz/BQAAAFsOoVQheWRv6+GzAgAAgC2PUAoAAACA1AmlyKhXr17ccsst622Tk5MTTz31VEREzJ49O3JycmLixImbvTYAAABg22Kg8yJU73fPprav2dcfVeTbfPfdd6N8+fIb3b5OnToxb968qFq1apHXAgAAAGzbhFJkVKtWbZPa5+bmRs2aNTdTNQAAAMC2zON725G2bdtGr169olevXlGpUqWoWrVqXHXVVZEkSUSs/fje9OnT45BDDom8vLxo2rRpjBw5Mmt7m/r43n/+8584+uijIz8/PypWrBgHH3xwzJw5MyIiunXrFp06dYqBAwdGtWrVIj8/P84///xYsWJFZv2CHi9s3rx5DBgwYJPfCwAAAKB4uVNqO/PAAw9Ejx494p133onx48fHueeeG7vsskucc845We1Wr14dxx9/fNSoUSPGjRsXixcvjt69exd6v59++mkccsgh0bZt23jllVciPz8/3nrrrfjhhx8ybUaNGhV5eXkxevTomD17dnTv3j2qVKkSf/rTnwq9XwAAAGDLJJTaztSpUyduvvnmyMnJicaNG8dHH30UN99881qh1MsvvxxTpkyJF198MWrXrh0REdddd1106NChUPsdMmRIVKpUKR599NEoVapUREQ0atQoq03p0qXj/vvvj3LlysUee+wRV199dVx++eVxzTXXRIkSbuoDAACAbYm/9LczBxxwQOTk5GSmW7VqFdOnT49Vq1ZltZs8eXLUqVMnE0itaVtYEydOjIMPPjgTSBWkWbNmUa5cuaz9LV26NObOnVvo/QIAAABbJqEUqShbtuwv3kaJEiUy41+tsXLlyl+8XQAAACB9QqntzLhx47Kmx44dGw0bNozc3Nys+U2aNIm5c+fGvHnzstoW1t577x1vvPHGekOkDz74IL777rus/VWoUCHq1KkTET9+O+BP61myZEnMmjWr0DUBAAAAxUcotZ2ZM2dO9OnTJ6ZOnRqPPPJI/PWvf42LL754rXbt2rWLRo0aRdeuXeODDz6IN954I/7whz8Uer+9evWKJUuWxKmnnhrjx4+P6dOnx4MPPhhTp07NtFmxYkX06NEj/vvf/8Zzzz0X/fv3j169emXGkzrssMPiwQcfjDfeeCM++uij6Nq161phGgAAALB1MND5dqZLly7x3Xffxf777x+5ublx8cUXx7nnnrtWuxIlSsSIESOiR48esf/++0e9evXitttuiyOPPLJQ+61SpUq88sorcfnll0ebNm0iNzc3mjdvHq1bt860Ofzww6Nhw4ZxyCGHxPLly6Nz584xYMCAzPK+ffvGrFmz4uijj45KlSrFNddc404pAAAA2ErlJD8fpIdYsmRJVKpUKRYvXhz5+flZy77//vuYNWtW1K9fP/Ly8oqpwsJp27ZtNG/ePG655ZbiLmUt3bp1i0WLFsVTTz1V5Nvemj8zAAAA2NqsL1f5KY/vAQAAAJA6oRRF4vzzz48KFSoU+Dr//POLuzwAAABgC+PxvQJsq4/vbU4LFy6MJUuWFLgsPz8/qlevnnJF/8dnBgAAAOnZ2Mf3DHROkahevXqxBk8AAADA1sXjewAAAACkTigFAAAAQOqEUgAAAACkTigFAAAAQOqEUgAAAACkzrfvkVGvXr3o3bt39O7de51tcnJyYsSIEdGpU6eYPXt21K9fP95///1o3rx5anUCAABsT+r97tniLqFYzL7+qOIugc1MKFWUBlRKcV+Li3yT7777bpQvX36j29epUyfmzZsXVatWLfJaAAAAgG2bUIqMatWqbVL73NzcqFmz5maqBgAAANiWGVNqO9K2bdvo1atX9OrVKypVqhRVq1aNq666KpIkiYgfH9+75ZZbMu2nT58ehxxySOTl5UXTpk1j5MiRWdubPXt25OTkxMSJEzdq/88880w0bNgw8vLy4tBDD40HHnggcnJyYtGiRRERMWzYsKhcuXI89dRTmXbt27ePuXPnZrbRrVu36NSpU9Z2e/fuHW3btt3UtwMAAAAoRkKp7cwDDzwQJUuWjHfeeSduvfXWuOmmm+Jvf/vbWu1Wr14dxx9/fJQuXTrGjRsXd911V1x55ZWF3u+sWbPixBNPjE6dOsUHH3wQ5513XvzhD39Yq923334bf/rTn+Lvf/97vPXWW7Fo0aI49dRTC71fAAAAYMvk8b3tTJ06deLmm2+OnJycaNy4cXz00Udx8803xznnnJPV7uWXX44pU6bEiy++GLVr146IiOuuuy46dOhQqP3efffd0bhx4xg8eHBERDRu3DgmTZoUf/rTn7LarVy5Mm6//fZo2bJlRPwYojVp0iTeeeed2H///Qu1bwAAAGDL406p7cwBBxwQOTk5melWrVrF9OnTY9WqVVntJk+eHHXq1MkEUmvaFtbUqVNjv/32y5pXUMhUsmTJrHa77757VK5cOSZPnlzofQMAAABbHqEUW5USJUpkxsBaY+XKlcVUDQAAAFBYQqntzLhx47Kmx44dGw0bNozc3Nys+U2aNIm5c+fGvHnzstoWVuPGjWP8+PFZ895999212v3www9Z7aZOnRqLFi2KJk2aRMSP3xD405oiYqMHWgcAAAC2HEKp7cycOXOiT58+MXXq1HjkkUfir3/9a1x88cVrtWvXrl00atQounbtGh988EG88cYbBQ5MvrHOO++8mDJlSlx55ZUxbdq0+Oc//xnDhg2LiMh6nLBUqVJx0UUXxbhx4+K9996Lbt26xQEHHJB51O+www6L8ePHx9///veYPn169O/fPyZNmlTougAAAIDiIZTaznTp0iW+++672H///aNnz55x8cUXx7nnnrtWuxIlSsSIESMybc8+++y1BiXfFPXr148nnngihg8fHnvvvXfceeedmZCrTJkymXblypWLK6+8Mk477bRo3bp1VKhQIR577LHM8vbt28dVV10VV1xxRey3337xzTffRJcuXQpdFwAAAFA8cpKfD9BDLFmyJCpVqhSLFy+O/Pz8rGXff/99zJo1K+rXrx95eXnFVGHhtG3bNpo3bx633HJLcZcSERF/+tOf4q677oq5c+dGRMSwYcOid+/esWjRoiLdz9b8mQEAANT73bPFXUKxmH39UcVdAoW0vlzlp0qmWBPbuTvuuCP222+/qFKlSrz11lsxePDg6NWrV3GXBQAAABQDj+9RJM4///yoUKFCga/zzz8/IiKmT58exx57bDRt2jSuueaauPTSS2PAgAHFWzgAAABQLDy+V4Bt9fG9zWnhwoWxZMmSApfl5+dH9erVU67o//jMAACArZnH99jaeHyPVFWvXr1YgycAAABg6+LxPQAAAABSJ5QqJE89bj18VgAAALDlEUptolKlSkVExLffflvMlbCx1nxWaz47AAAAoPgZU2oT5ebmRuXKlWPhwoUREVGuXLnIyckp5qooSJIk8e2338bChQujcuXKkZubW9wlAQAAAP+fUKoQatasGRGRCabYslWuXDnzmQEAAABbBqFUIeTk5EStWrWievXqsXLlyuIuh/UoVaqUO6QAAABgCySU+gVyc3MFHgAAAACFYKBzAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFJXrKHU66+/Hh07dozatWtHTk5OPPXUU1nLc3JyCnwNHjx4ndscMGDAWu133333zXwkAAAAAGyKYg2lli1bFs2aNYshQ4YUuHzevHlZr/vvvz9ycnLihBNOWO9299hjj6z13nzzzc1RPgAAAACFVLI4d96hQ4fo0KHDOpfXrFkza/rpp5+OQw89NBo0aLDe7ZYsWXKtdQEAAADYcmw1Y0otWLAgnn322ejRo8cG206fPj1q164dDRo0iNNPPz3mzJmTQoUAAAAAbKxivVNqUzzwwANRsWLFOP7449fbrmXLljFs2LBo3LhxzJs3LwYOHBgHH3xwTJo0KSpWrFjgOsuXL4/ly5dnppcsWVKktQMAAACQbasJpe6///44/fTTIy8vb73tfvo44N577x0tW7aMunXrxj//+c913mU1aNCgGDhwYJHWCwAAAMC6bRWP773xxhsxderUOPvsszd53cqVK0ejRo1ixowZ62zTt2/fWLx4ceY1d+7cX1IuAAAAABuwVYRS9913X7Ro0SKaNWu2yesuXbo0Zs6cGbVq1VpnmzJlykR+fn7WCwAAAIDNp1hDqaVLl8bEiRNj4sSJERExa9asmDhxYtbA5EuWLInHH398nXdJHX744XH77bdnpi+77LJ47bXXYvbs2TFmzJg47rjjIjc3Nzp37rxZjwUAAACAjVesY0qNHz8+Dj300Mx0nz59IiKia9euMWzYsIiIePTRRyNJknWGSjNnzowvvvgiM/3JJ59E586d48svv4xq1arFQQcdFGPHjo1q1aptvgMBAAAAYJPkJEmSFHcRW5olS5ZEpUqVYvHixR7lAwAAoFjV+92zxV1CsZh9/VHFXQKFtLG5ylYxphQAAAAA2xahFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkLpiDaVef/316NixY9SuXTtycnLiqaeeylrerVu3yMnJyXodeeSRG9zukCFDol69epGXlxctW7aMd955ZzMdAQAAAACFUayh1LJly6JZs2YxZMiQdbY58sgjY968eZnXI488st5tPvbYY9GnT5/o379/TJgwIZo1axbt27ePhQsXFnX5AAAAABRSyeLceYcOHaJDhw7rbVOmTJmoWbPmRm/zpptuinPOOSe6d+8eERF33XVXPPvss3H//ffH7373u19ULwAAAABFY4sfU2r06NFRvXr1aNy4cVxwwQXx5ZdfrrPtihUr4r333ot27dpl5pUoUSLatWsXb7/9dhrlAgAAALARivVOqQ058sgj4/jjj4/69evHzJkz4/e//3106NAh3n777cjNzV2r/RdffBGrVq2KGjVqZM2vUaNGTJkyZZ37Wb58eSxfvjwzvWTJkqI7CAAAAADWskWHUqeeemrm33vttVfsvffeseuuu8bo0aPj8MMPL7L9DBo0KAYOHFhk2wMAAABg/bb4x/d+qkGDBlG1atWYMWNGgcurVq0aubm5sWDBgqz5CxYsWO+4VH379o3FixdnXnPnzi3SugEAAADItlWFUp988kl8+eWXUatWrQKXly5dOlq0aBGjRo3KzFu9enWMGjUqWrVqtc7tlilTJvLz87NeAAAAAGw+xRpKLV26NCZOnBgTJ06MiIhZs2bFxIkTY86cObF06dK4/PLLY+zYsTF79uwYNWpUHHvssbHbbrtF+/btM9s4/PDD4/bbb89M9+nTJ+6999544IEHYvLkyXHBBRfEsmXLMt/GBwAAAEDxK9YxpcaPHx+HHnpoZrpPnz4REdG1a9e4884748MPP4wHHnggFi1aFLVr144jjjgirrnmmihTpkxmnZkzZ8YXX3yRmT7llFPi888/j379+sX8+fOjefPm8cILL6w1+DkAAAAAxScnSZKkuIvY0ixZsiQqVaoUixcv9igfAAAAxare754t7hKKxezrjyruEiikjc1VtqoxpQAAAADYNgilAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1BVrKPX6669Hx44do3bt2pGTkxNPPfVUZtnKlSvjyiuvjL322ivKly8ftWvXji5dusRnn3223m0OGDAgcnJysl677777Zj4SAAAAADZFsYZSy5Yti2bNmsWQIUPWWvbtt9/GhAkT4qqrrooJEybE8OHDY+rUqXHMMcdscLt77LFHzJs3L/N68803N0f5AAAAABRSyeLceYcOHaJDhw4FLqtUqVKMHDkya97tt98e+++/f8yZMyd22WWXdW63ZMmSUbNmzSKtFQAAAICis1WNKbV48eLIycmJypUrr7fd9OnTo3bt2tGgQYM4/fTTY86cOekUCAAAAMBGKdY7pTbF999/H1deeWV07tw58vPz19muZcuWMWzYsGjcuHHMmzcvBg4cGAcffHBMmjQpKlasWOA6y5cvj+XLl2emlyxZUuT1AwAAAPB/topQauXKlXHyySdHkiRx5513rrftTx8H3HvvvaNly5ZRt27d+Oc//xk9evQocJ1BgwbFwIEDi7RmAAAAANZti398b00g9fHHH8fIkSPXe5dUQSpXrhyNGjWKGTNmrLNN3759Y/HixZnX3Llzf2nZAAAAAKzHFh1KrQmkpk+fHi+//HJUqVJlk7exdOnSmDlzZtSqVWudbcqUKRP5+flZLwAAAAA2n2INpZYuXRoTJ06MiRMnRkTErFmzYuLEiTFnzpxYuXJlnHjiiTF+/Ph46KGHYtWqVTF//vyYP39+rFixIrONww8/PG6//fbM9GWXXRavvfZazJ49O8aMGRPHHXdc5ObmRufOndM+PAAAAADWoVjHlBo/fnwceuihmek+ffpERETXrl1jwIAB8cwzz0RERPPmzbPWe/XVV6Nt27YRETFz5sz44osvMss++eST6Ny5c3z55ZdRrVq1OOigg2Ls2LFRrVq1zXswAAAAAGy0Yg2l2rZtG0mSrHP5+patMXv27KzpRx999JeWBQAAAMBmtkWPKQUAAADAtkkoBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApK5kcRcAAAAAsJYBlYq7guIxYHFxV5Aad0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpK1mYlVatWhXDhg2LUaNGxcKFC2P16tVZy1955ZUiKQ4AAACAbVOhQqmLL744hg0bFkcddVTsueeekZOTU9R1AQAAALANK1Qo9eijj8Y///nP+M1vflPU9QAAAACwHSjUmFKlS5eO3XbbrahrAQAAAGA7UahQ6tJLL41bb701kiQp6noAAAAA2A4U6vG9N998M1599dV4/vnnY4899ohSpUplLR8+fHiRFAcAAADAtqlQoVTlypXjuOOOK+paAAAAANhOFCqUGjp0aFHXAQAAAMB2pFBjSgEAAADAL1GoO6UiIp544on45z//GXPmzIkVK1ZkLZswYcIvLgwAAACAbVeh7pS67bbbonv37lGjRo14//33Y//9948qVarE//73v+jQoUNR1wgAAADANqZQodQdd9wR99xzT/z1r3+N0qVLxxVXXBEjR46M3/72t7F48eKN3s7rr78eHTt2jNq1a0dOTk489dRTWcuTJIl+/fpFrVq1omzZstGuXbuYPn36Brc7ZMiQqFevXuTl5UXLli3jnXfe2dRDBAAAAGAzKlQoNWfOnDjwwAMjIqJs2bLxzTffRETEmWeeGY888shGb2fZsmXRrFmzGDJkSIHL//znP8dtt90Wd911V4wbNy7Kly8f7du3j++//36d23zssceiT58+0b9//5gwYUI0a9Ys2rdvHwsXLtyEIwQAAABgcypUKFWzZs346quvIiJil112ibFjx0ZExKxZsyJJko3eTocOHeLaa6+N4447bq1lSZLELbfcEn/84x/j2GOPjb333jv+/ve/x2effbbWHVU/ddNNN8U555wT3bt3j6ZNm8Zdd90V5cqVi/vvv3/TDhIAAACAzaZQodRhhx0WzzzzTEREdO/ePS655JL49a9/HaecckqBAVNhzJo1K+bPnx/t2rXLzKtUqVK0bNky3n777QLXWbFiRbz33ntZ65QoUSLatWu3znUAAAAASF+hvn3vnnvuidWrV0dERM+ePaNKlSoxZsyYOOaYY+K8884rksLmz58fERE1atTIml+jRo3Msp/74osvYtWqVQWuM2XKlHXua/ny5bF8+fLM9JIlSwpbNgAAAAAboVChVIkSJaJEif+7yerUU0+NU089tciKStugQYNi4MCBxV0GAAAAwHajUI/vRUS88cYbccYZZ0SrVq3i008/jYiIBx98MN58880iKaxmzZoREbFgwYKs+QsWLMgs+7mqVatGbm7uJq0TEdG3b99YvHhx5jV37txfWD0AAAAA61OoUOrJJ5+M9u3bR9myZeP999/PPPq2ePHiuO6664qksPr160fNmjVj1KhRmXlLliyJcePGRatWrQpcp3Tp0tGiRYusdVavXh2jRo1a5zoREWXKlIn8/PysFwAAAACbT6FCqWuvvTbuuuuuuPfee6NUqVKZ+a1bt44JEyZs9HaWLl0aEydOjIkTJ0bEj4ObT5w4MebMmRM5OTnRu3fvuPbaa+OZZ56Jjz76KLp06RK1a9eOTp06ZbZx+OGHx+23356Z7tOnT9x7773xwAMPxOTJk+OCCy6IZcuWRffu3QtzqAAAAABsBoUaU2rq1KlxyCGHrDW/UqVKsWjRoo3ezvjx4+PQQw/NTPfp0yciIrp27RrDhg2LK664IpYtWxbnnntuLFq0KA466KB44YUXIi8vL7POzJkz44svvshMn3LKKfH5559Hv379Yv78+dG8efN44YUX1hr8HAAAAIDiU6hQqmbNmjFjxoyoV69e1vw333wzGjRosNHbadu2bSRJss7lOTk5cfXVV8fVV1+9zjazZ89ea16vXr2iV69eG10HAAAAAOkq1ON755xzTlx88cUxbty4yMnJic8++yweeuihuOyyy+KCCy4o6hoBAAAA2MYU6k6p3/3ud7F69eo4/PDD49tvv41DDjkkypQpE5dddllcdNFFRV0jAAAAANuYQoVSOTk58Yc//CEuv/zymDFjRixdujSaNm0aFSpUKOr6AAAAANgGbVIoddZZZ21Uu/vvv79QxQAAAACwfdikUGrYsGFRt27d2GeffdY7QDkAAAAArM8mhVIXXHBBPPLIIzFr1qzo3r17nHHGGbHjjjturtoAAAAA2EZt0rfvDRkyJObNmxdXXHFF/Otf/4o6derEySefHC+++KI7pwAAAADYaJsUSkVElClTJjp37hwjR46M//73v7HHHnvEhRdeGPXq1YulS5dujhoBAAAA2MZsciiVtXKJEpGTkxNJksSqVauKqiYAAAAAtnGbHEotX748Hnnkkfj1r38djRo1io8++ihuv/32mDNnTlSoUGFz1AgAAADANmaTBjq/8MIL49FHH406derEWWedFY888khUrVp1c9UGAAAAwDZqk0Kpu+66K3bZZZdo0KBBvPbaa/Haa68V2G748OFFUhwAAAAA26ZNCqW6dOkSOTk5m6sWAAAAALYTmxRKDRs2bDOVAQAAAMD25Bd9+x4AAAAAFMYm3SkFAADAVmJApeKuoHgMWFzcFQAbyZ1SAAAAAKTOnVIAAMA2rd7vni3uEorF7LzirgBg/dwpBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqShZ3AQAbUu93zxZ3Cambff1RxV0CAADAZuVOKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSt8WHUvXq1YucnJy1Xj179iyw/bBhw9Zqm5eXl3LVAAAAAKxPyeIuYEPefffdWLVqVWZ60qRJ8etf/zpOOumkda6Tn58fU6dOzUzn5ORs1hoBAAAA2DRbfChVrVq1rOnrr78+dt1112jTps0618nJyYmaNWtu7tIAAAAAKKQt/vG9n1qxYkX84x//iLPOOmu9dz8tXbo06tatG3Xq1Iljjz02/vOf/6RYJQAAAAAbslWFUk899VQsWrQounXrts42jRs3jvvvvz+efvrp+Mc//hGrV6+OAw88MD755JN1rrN8+fJYsmRJ1gsAAACAzWerCqXuu+++6NChQ9SuXXudbVq1ahVdunSJ5s2bR5s2bWL48OFRrVq1uPvuu9e5zqBBg6JSpUqZV506dTZH+QAAAAD8f1tNKPXxxx/Hyy+/HGefffYmrVeqVKnYZ599YsaMGets07dv31i8eHHmNXfu3F9aLgAAAADrsdWEUkOHDo3q1avHUUcdtUnrrVq1Kj766KOoVavWOtuUKVMm8vPzs14AAAAAbD5bRSi1evXqGDp0aHTt2jVKlsz+wsAuXbpE3759M9NXX311vPTSS/G///0vJkyYEGeccUZ8/PHHm3yHFQAAAACbT8kNNyl+L7/8csyZMyfOOuustZbNmTMnSpT4v2zt66+/jnPOOSfmz58fO+ywQ7Ro0SLGjBkTTZs2TbNkAAAAANZjqwiljjjiiEiSpMBlo0ePzpq++eab4+abb06hKgAAAAAKa6t4fA8AAACAbYtQCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASJ1QCgAAAIDUCaUAAAAASN0WHUoNGDAgcnJysl677777etd5/PHHY/fdd4+8vLzYa6+94rnnnkupWgAAAAA21hYdSkVE7LHHHjFv3rzM680331xn2zFjxkTnzp2jR48e8f7770enTp2iU6dOMWnSpBQrBgAAAGBDtvhQqmTJklGzZs3Mq2rVqutse+utt8aRRx4Zl19+eTRp0iSuueaa+NWvfhW33357ihUDAAAAsCFbfCg1ffr0qF27djRo0CBOP/30mDNnzjrbvv3229GuXbusee3bt4+33357c5cJAAAAwCYoWdwFrE/Lli1j2LBh0bhx45g3b14MHDgwDj744Jg0aVJUrFhxrfbz58+PGjVqZM2rUaNGzJ8/f737Wb58eSxfvjwzvWTJkqI5AAAAAAAKtEWHUh06dMj8e++9946WLVtG3bp145///Gf06NGjyPYzaNCgGDhwYJFtDwAAAID12+If3/upypUrR6NGjWLGjBkFLq9Zs2YsWLAga96CBQuiZs2a691u3759Y/HixZnX3Llzi6xmAAAAANa2VYVSS5cujZkzZ0atWrUKXN6qVasYNWpU1ryRI0dGq1at1rvdMmXKRH5+ftYLAAAAgM1niw6lLrvssnjttddi9uzZMWbMmDjuuOMiNzc3OnfuHBERXbp0ib59+2baX3zxxfHCCy/EjTfeGFOmTIkBAwbE+PHjo1evXsV1CAAAAAAUYIseU+qTTz6Jzp07x5dffhnVqlWLgw46KMaOHRvVqlWLiIg5c+ZEiRL/l6sdeOCB8fDDD8cf//jH+P3vfx8NGzaMp556Kvbcc8/iOgQAAAAACrBFh1KPPvroepePHj16rXknnXRSnHTSSZupIgAAAACKwhb9+B4AAAAA2yahFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkDqhFAAAAACpE0oBAAAAkLotOpQaNGhQ7LffflGxYsWoXr16dOrUKaZOnbredYYNGxY5OTlZr7y8vJQqBgAAAGBjbNGh1GuvvRY9e/aMsWPHxsiRI2PlypVxxBFHxLJly9a7Xn5+fsybNy/z+vjjj1OqGAAAAICNUbK4C1ifF154IWt62LBhUb169XjvvffikEMOWed6OTk5UbNmzc1dHgAAAACFtEXfKfVzixcvjoiIHXfccb3tli5dGnXr1o06derEscceG//5z3/SKA8AAACAjbTVhFKrV6+O3r17R+vWrWPPPfdcZ7vGjRvH/fffH08//XT84x//iNWrV8eBBx4Yn3zyyTrXWb58eSxZsiTrBQAAAMDms0U/vvdTPXv2jEmTJsWbb7653natWrWKVq1aZaYPPPDAaNKkSdx9991xzTXXFLjOoEGDYuDAgUVaLwAAAADrtlXcKdWrV6/497//Ha+++mrsvPPOm7RuqVKlYp999okZM2ass03fvn1j8eLFmdfcuXN/ackAAAAArMcWfadUkiRx0UUXxYgRI2L06NFRv379Td7GqlWr4qOPPorf/OY362xTpkyZKFOmzC8pFQAAAIBNsEWHUj179oyHH344nn766ahYsWLMnz8/IiIqVaoUZcuWjYiILl26xE477RSDBg2KiIirr746DjjggNhtt91i0aJFMXjw4Pj444/j7LPPLrbjAAAAACDbFh1K3XnnnRER0bZt26z5Q4cOjW7dukVExJw5c6JEif97CvHrr7+Oc845J+bPnx877LBDtGjRIsaMGRNNmzZNq2wAAAAANmCLDqWSJNlgm9GjR2dN33zzzXHzzTdvpooAAAAAKApbxUDnAAAAAGxbhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqhFIAAAAApE4oBQAAAEDqShZ3AWxe9X73bHGXUCxm551W3CUUjwGLi7sCAAAA2CjulAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdUIpAAAAAFInlAIAAAAgdSWLuwAAALZs9X73bHGXUCxmX39UcZcAANs0oRQAABRkQKXiriB9AxYXdwUAbEc8vgcAAABA6oRSAAAAAKRuq3h8b8iQITF48OCYP39+NGvWLP7617/G/vvvv872jz/+eFx11VUxe/bsaNiwYdxwww3xm9/8JsWKAX6h7fGRkQiPjQAAwHZki79T6rHHHos+ffpE//79Y8KECdGsWbNo3759LFy4sMD2Y8aMic6dO0ePHj3i/fffj06dOkWnTp1i0qRJKVcOAAAAwLps8aHUTTfdFOecc0507949mjZtGnfddVeUK1cu7r///gLb33rrrXHkkUfG5ZdfHk2aNIlrrrkmfvWrX8Xtt9+ecuUAAAAArMsWHUqtWLEi3nvvvWjXrl1mXokSJaJdu3bx9ttvF7jO22+/ndU+IqJ9+/brbA8AAABA+rboMaW++OKLWLVqVdSoUSNrfo0aNWLKlCkFrjN//vwC28+fP3+d+1m+fHksX748M7148Y9jmixZsqSwpW8xVi//trhLKBZLcpLiLqF4bAN9tiDbYz/Wh7cte/Z/sbhLSN2kvB7FXULx6PtJcVewWWyP1+GI7fRavI1eh/Xh7cw22I/14e3MNtCH1+QpSbL+z3CLDqXSMmjQoBg4cOBa8+vUqVMM1VAUttMhoiOu326PfJuz3X6S+vA2Y7v9JPXhbcp2+Wnqw9uU7fbT1I+3GdvtJ7kN9eFvvvkmKlVa9/Fs0aFU1apVIzc3NxYsWJA1f8GCBVGzZs0C16lZs+YmtY+I6Nu3b/Tp0yczvXr16vjqq6+iSpUqkZOT8wuOgOKwZMmSqFOnTsydOzfy8/OLuxzYZPowWzt9mG2BfszWTh9ma6cPb92SJIlvvvkmateuvd52W3QoVbp06WjRokWMGjUqOnXqFBE/BkajRo2KXr16FbhOq1atYtSoUdG7d+/MvJEjR0arVq3WuZ8yZcpEmTJlsuZVrlz5l5ZPMcvPz3fxYqumD7O104fZFujHbO30YbZ2+vDWa313SK2xRYdSERF9+vSJrl27xr777hv7779/3HLLLbFs2bLo3r17RER06dIldtpppxg0aFBERFx88cXRpk2buPHGG+Ooo46KRx99NMaPHx/33HNPcR4GAAAAAD+xxYdSp5xySnz++efRr1+/mD9/fjRv3jxeeOGFzGDmc+bMiRIl/u9LBA888MB4+OGH449//GP8/ve/j4YNG8ZTTz0Ve+65Z3EdAgAAAAA/s8WHUhERvXr1WufjeqNHj15r3kknnRQnnXTSZq6KLVWZMmWif//+az2SCVsLfZitnT7MtkA/ZmunD7O104e3DznJhr6fDwAAAACKWIkNNwEAAACAoiWUAgAAACB1QinW0rZt2+jdu/cWs4969erFLbfcslnrKaxu3bpFp06diruMbdLGfO45OTnx1FNPRUTE7NmzIycnJyZOnLjZa2PDnBts61xztj+/9PejYcOGReXKlYusHrYsm+P31Z//LE3jd/QNce1jS+d30K3PVjHQORS32bNnR/369eP999+P5s2bZ+bfeuutYVi2zePdd9+N8uXLb3T7OnXqxLx586Jq1aqbsSp+zrnB9qBbt26xaNGiTAge4ZrD+tWrVy969+6dFSCccsop8Zvf/Kb4imKz2tTfWwpj+PDhUapUqc26j59y7aOotG3bNpo3b75JwW1h1mHrJJRim7dixYooXbr0Ztl2pUqVNst2iahWrdomtc/NzY2aNWtupmoiVq1aFTk5OVGiRNHfYLo5+2hxcW5snTZnX1y5cmWqf0xtbpv7msO2p2zZslG2bNniLoPNZFN/bymMHXfccbPvY0Nc+4Ci5vE91uvrr7+OLl26xA477BDlypWLDh06xPTp0zPLv/zyy+jcuXPstNNOUa5cudhrr73ikUceydrGsmXLokuXLlGhQoWoVatW3Hjjjb+opjlz5sSxxx4bFSpUiPz8/Dj55JNjwYIFmeUDBgyI5s2bx9/+9reoX79+5OXlRUTECy+8EAcddFBUrlw5qlSpEkcffXTMnDlzo/ZZv379iIjYZ599IicnJ9q2bRsRBd9WfdFFF0Xv3r1jhx12iBo1asS9994by5Yti+7du0fFihVjt912i+effz5r+5MmTYoOHTpEhQoVokaNGnHmmWfGF1988QvepS1f27Zto1evXtGrV6+oVKlSVK1aNa666qrM3TU/vw1++vTpccghh0ReXl40bdo0Ro4cmbW9TbmdfPTo0ZGTkxPPPvts7L333pGXlxcHHHBATJo0KdNmzWMWzzzzTDRt2jTKlCkTc+bMieXLl8dll10WO+20U5QvXz5atmwZo0ePXmu9p556Kho2bBh5eXnRvn37mDt3bqbNuvrohvp2RMS//vWv2G+//SIvLy+qVq0axx13XGbZhmr7+OOPo2PHjrHDDjtE+fLlY4899ojnnnsuIn48108//fSoVq1alC1bNho2bBhDhw7d4Hu5LZ8bq1evjj//+c+x2267RZkyZWKXXXaJP/3pTxERceWVV0ajRo2iXLly0aBBg7jqqqti5cqVmXXXfMYPPvhg1KtXLypVqhSnnnpqfPPNN1nvyW9/+9u44oorYscdd4yaNWvGgAEDMsvPOuusOProo7NqWrlyZVSvXj3uu+++Dda/oXMs4sfz7JprrokuXbpEfn5+nHvuuRER8eabb8bBBx8cZcuWjTp16sRvf/vbWLZs2Vrrde7cOcqXLx877bRTDBkyJGv/OTk5ceedd8YxxxwT5cuXz7x3d955Z+y6665RunTpaNy4cTz44INZ6y1atCjOO++8qFGjRuTl5cWee+4Z//73vzPLN1TbHXfckTn3atSoESeeeGJm2RNPPBF77bVXlC1bNqpUqRLt2rXLWrcgAwYMiAceeCCefvrpyMnJiZycnBg9evRa15w115UXX3wx9tlnnyhbtmwcdthhsXDhwnj++eejSZMmkZ+fH6eddlp8++23me2vXr06Bg0aFPXr14+yZctGs2bN4oknnlhvTVu79Z1bH330URx22GGZz+jcc8+NpUuXZtZdc2257rrrokaNGlG5cuW4+uqr44cffojLL788dtxxx9h5552zrl9rPqtHH300DjzwwEy/eu2117LqKqrrTdu2bePjjz+OSy65JNNnItZ+fG/NdeL++++PXXbZJSpUqBAXXnhhrFq1Kv785z9HzZo1o3r16pn3Zo1FixbF2WefHdWqVYv8/Pw47LDD4oMPPtjkOtk0m/p7y5prYIcOHaJs2bLRoEGDtc7tuXPnxsknnxyVK1eOHXfcMY499tiYPXv2emv46d139erVi+uuuy7OOuusqFixYuyyyy5xzz33/KJ9rOHaR1Hp1q1bvPbaa3Hrrbdm+tLs2bPjtddei/333z/KlCkTtWrVit/97nfxww8/rHedVatWRY8ePTL9pnHjxnHrrbcW8xHyiyXwM23atEkuvvjiJEmS5JhjjkmaNGmSvP7668nEiROT9u3bJ7vttluyYsWKJEmS5JNPPkkGDx6cvP/++8nMmTOT2267LcnNzU3GjRuX2d4FF1yQ7LLLLsnLL7+cfPjhh8nRRx+dVKxYMbOPDalbt25y8803J0mSJKtWrUqaN2+eHHTQQcn48eOTsWPHJi1atEjatGmTad+/f/+kfPnyyZFHHplMmDAh+eCDD5IkSZInnngiefLJJ5Pp06cn77//ftKxY8dkr732SlatWrXBGt55550kIpKXX345mTdvXvLll18mSZIkXbt2TY499tis965ixYrJNddck0ybNi255pprktzc3KRDhw7JPffck0ybNi254IILkipVqiTLli1LkiRJvv7666RatWpJ3759k8mTJycTJkxIfv3rXyeHHnroRr0/W6s2bdokFSpUSC6++OJkypQpyT/+8Y+kXLlyyT333JMkydqf+5577pkcfvjhycSJE5PXXnst2WeffZKISEaMGJEkSZLMmjUriYjk/fff3+C+X3311SQikiZNmiQvvfRSpl/Wq1cv07eHDh2alCpVKjnwwAOTt956K5kyZUqybNmy5Oyzz04OPPDA5PXXX09mzJiRDB48OClTpkwybdq0rPX23XffZMyYMcn48eOT/fffPznwwAMz+y+oj25M3/73v/+d5ObmJv369Uv++9//JhMnTkyuu+66zPIN1XbUUUclv/71r5MPP/wwmTlzZvKvf/0ree2115IkSZKePXsmzZs3T959991k1qxZyciRI5Nnnnlmg+/ltnxuXHHFFckOO+yQDBs2LJkxY0byxhtvJPfee2+SJElyzTXXJG+99VYya9as5Jlnnklq1KiR3HDDDZl1+/fvn1SoUCE5/vjjk48++ih5/fXXk5o1aya///3vs96T/Pz8ZMCAAcm0adOSBx54IMnJyUleeumlJEmS5K233kpyc3OTzz77LLPO8OHDk/LlyyfffPPNBuvf0DmWJD+eZ/n5+clf/vKXZMaMGZlX+fLlk5tvvjmZNm1a8tZbbyX77LNP0q1bt6z1KlasmAwaNCiZOnVq5tq/pvYkSZKISKpXr57cf//9ycyZM5OPP/44GT58eFKqVKlkyJAhydSpU5Mbb7wxyc3NTV555ZUkSX481w844IBkjz32SF566aVMP33uueeSJEk2WNu7776b5ObmJg8//HAye/bsZMKECcmtt96aJEmSfPbZZ0nJkiWTm266KZk1a1by4YcfJkOGDNnge/nNN98kJ598cnLkkUcm8+bNS+bNm5csX758rWvOmuvKAQcckLz55pvJhAkTkt122y1p06ZNcsQRRyQTJkxIXn/99aRKlSrJ9ddfn9n+tddem+y+++7JCy+8kMycOTMZOnRoUqZMmWT06NEb/Iy3Vus6t5YuXZrUqlUrc96MGjUqqV+/ftK1a9fMul27dk0qVqyY9OzZM5kyZUpy3333JRGRtG/fPvnTn/6Uub6UKlUqmTt3bpIk//fzYeedd06eeOKJ5L///W9y9tlnJxUrVky++OKLJEk27nrz09+P1ufLL79Mdt555+Tqq6/O9Jkk+fHnQ6VKlTLt1lwnTjzxxOQ///lP8swzzySlS5dO2rdvn1x00UXJlClTkvvvvz+JiGTs2LGZ9dq1a5d07Ngxeffdd5Np06Yll156aVKlSpXM9ZfNY1N+b0mSH6+BVapUSe69995k6tSpyR//+MckNzc3+e9//5skSZKsWLEiadKkSXLWWWclH374YfLf//43Oe2005LGjRsny5cvT5Kk4J+lP+2DdevWTXbcccdkyJAhyfTp05NBgwYlJUqUSKZMmbLR+1gX1z6KyqJFi5JWrVol55xzTqYvffLJJ0m5cuWSCy+8MJk8eXIyYsSIpGrVqkn//v3Xuc4PP/yQrFixIunXr1/y7rvvJv/73/8y5+Fjjz2W2d/Pzxu2fEIp1rLmB960adOSiEjeeuutzLIvvvgiKVu2bPLPf/5znesfddRRyaWXXpokyY8/0EqXLp3V/ssvv0zKli1bqFDqpZdeSnJzc5M5c+Zklv/nP/9JIiJ55513kiT58Ze8UqVKJQsXLlzvdj///PMkIpKPPvpogzWsK/Ao6JeFgw46KDP9ww8/JOXLl0/OPPPMzLx58+YlEZG8/fbbSZL8+MftEUcckbXduXPnJhGRTJ06dYO1ba3atGmTNGnSJFm9enVm3pVXXpk0adIkSZLsz/3FF19MSpYsmXz66aeZts8///wvDqUeffTRzLw1/XLND7WhQ4cmEZFMnDgx0+bjjz9OcnNzs+pIkiQ5/PDDk759+2at99M/ICZPnpxERCasLaiPbkzfbtWqVXL66acXeEwbU9tee+2VDBgwoMD1O3bsmHTv3r3AZeuzrZ4bS5YsScqUKZMJoTZk8ODBSYsWLTLT/fv3T8qVK5csWbIkM+/yyy9PWrZsmZn++XuSJEmy3377JVdeeWVmumnTpllhV8eOHbPCofXZ0DmWJD+eZ506dcpar0ePHsm5556bNe+NN95ISpQokXz33XeZ9Y488sisNqecckrSoUOHzHREJL17985qc+CBBybnnHNO1ryTTjop+c1vfpMkyY/neokSJdb5+W6otieffDLJz8/Pet/XeO+995KISGbPnl3gttenoF9w1/WH2csvv5xpM2jQoCQikpkzZ2bmnXfeeUn79u2TJEmS77//PilXrlwyZsyYtY6zc+fOm1zn1mB959Y999yT7LDDDsnSpUsz85599tmkRIkSyfz585Mk+fGzqFu3btZ/KDVu3Dg5+OCDM9Nrri+PPPJIkiT/91n99A/ilStXJjvvvHPm/NqY683GhlJJsnZAkSQFh1I/v060b98+qVev3lrHN2jQoCRJfuzv+fn5yffff5+17V133TW5++67N6o2CmdTfm9Jkh+vgeeff37WNlq2bJlccMEFSZIkyYMPPpg0btw4a3vLly9PypYtm7z44otJkmxcKHXGGWdkplevXp1Ur149ufPOOzd6H+vj2kdR+Xnf/f3vf79W3xwyZEhSoUKFzPVvY6+5PXv2TE444YTMtFBq6+PxPdZp8uTJUbJkyWjZsmVmXpUqVaJx48YxefLkiPhxnJ1rrrkm9tprr9hxxx2jQoUK8eKLL8acOXMiImLmzJmxYsWKrG3suOOO0bhx40LXVKdOnahTp05mXtOmTaNy5cqZmiIi6tatu9az/dOnT4/OnTtHgwYNIj8/P+rVqxcRkam1qOy9996Zf+fm5kaVKlVir732ysyrUaNGREQsXLgwIiI++OCDePXVV6NChQqZ1+677x4RsdGPF26tDjjggMxjDRERrVq1iunTp8eqVauy2q353GvXrp3V9pf66TbW9Muf9qPSpUtnfZ4fffRRrFq1Kho1apT1eb322mtZn1XJkiVjv/32y0zvvvvuG+yjG9O3J06cGIcffniBx7Ixtf32t7+Na6+9Nlq3bh39+/ePDz/8MLP+BRdcEI8++mg0b948rrjiihgzZszGv5EbaWs6NyZPnhzLly9f5/v92GOPRevWraNmzZpRoUKF+OMf/7jWtaRevXpRsWLFzHStWrUyx7bGT9+TgtqcffbZmceQFixYEM8//3ycddZZG30cG3OO7bvvvlnrfPDBBzFs2LCs9719+/axevXqmDVrVta2fqpVq1ZZfbygbU+ePDlat26dNa9169ZZfXznnXeORo0aFXg8G6rt17/+ddStWzcaNGgQZ555Zjz00EOZx0WaNWsWhx9+eOy1115x0kknxb333htff/31et+/wvjpZ1qjRo3MI54/nbfmM54xY0Z8++238etf/zrrmP7+979vs9f/9Z1bkydPjmbNmmUNFt26detYvXp1TJ06NTNvjz32yBrfr0aNGlnXkjXXl5+fbz/tsyVLlox999030/eK63rz8+tEjRo1omnTpmsd30+vi0uXLo0qVapk1Tpr1qxtts9sSTb295afLv/59E/73IwZM6JixYqZz3HHHXeM77//fpM+y59ec3JycqJmzZpZ/aUo9rGpdbj2sSGTJ0+OVq1aZZ1PrVu3jqVLl8Ynn3yy3nWHDBkSLVq0iGrVqkWFChXinnvuKfK/50iXgc75RQYPHhy33npr3HLLLbHXXntF+fLlo3fv3rFixYpiraugbz/p2LFj1K1bN+69996oXbt2rF69Ovbcc88ir/XnA/nm5ORkzVtz8V29enVERCxdujQ6duwYN9xww1rbqlWrVpHWxqYpW7Zs1g/LpUuXRm5ubrz33nuRm5ub1bZChQqbtO3CfEPP+gbI3Zjazj777Gjfvn08++yz8dJLL8WgQYPixhtvjIsuuig6dOgQH3/8cTz33HMxcuTIOPzww6Nnz57xl7/8ZZPrXJet6dxY33v99ttvx+mnnx4DBw6M9u3bR6VKleLRRx9da7y8go53zbFtbJsuXbrE7373u3j77bdjzJgxUb9+/Tj44IMLe1gF+nlfXLp0aZx33nnx29/+dq22u+yyyy/a9oZsaBDoDdVWunTpmDBhQowePTpeeuml6NevXwwYMCDefffdqFy5cowcOTLGjBkTL730Uvz1r3+NP/zhDzFu3LjM2GhF4ed9en2f8Zqxkp599tnYaaedstqVKVOmyGrakhTFQN8bupasmffz8219iut6s6nHsnTp0qhVq1bWeIFr/HS8KrZ8S5cujRYtWsRDDz201rJNGTR9Q/2lKPaxqXW49rG5PProo3HZZZfFjTfeGK1atYqKFSvG4MGDY9y4ccVdGr+AUIp1atKkSfzwww8xbty4OPDAAyPix4HNp06dGk2bNo2IiLfeeiuOPfbYOOOMMyLixz8mp02bllm+6667RqlSpWLcuHGZP2a+/vrrmDZtWrRp06ZQNc2dOzfmzp2buaPkv//9byxatCizz4Ksqfvee+/N/EH35ptvbvR+13wb1br+J+yX+NWvfhVPPvlk1KtXL0qW3L5OyZ//ABk7dmw0bNhwrVBlzec+b968zB8HY8eO/cX7Hzt27Fr9skmTJutsv88++8SqVati4cKF6w0Gfvjhhxg/fnzsv//+ERExderUWLRo0Xq3vTF9e++9945Ro0ZF9+7dC11bnTp14vzzz4/zzz8/+vbtG/fee29cdNFFEfHjL6hdu3aNrl27xsEHHxyXX375BkOpbfXcaNiwYZQtWzZGjRoVZ599dtayMWPGRN26deMPf/hDZt7HH3+8WeqoUqVKdOrUKYYOHRpvv/12gZ/9+mzsOfZTv/rVr+K///1v7Lbbbuvd9s/PwbFjx663j0f82M/feuut6Nq1a2beW2+9ldXHP/nkk5g2bVqBd0ttTG0lS5aMdu3aRbt27aJ///5RuXLleOWVV+L444+PnJycaN26dbRu3Tr69esXdevWjREjRkSfPn3WW3fp0qU3Sx//6ZcoFOZn4tZofedWkyZNYtiwYbFs2bJMoPnWW29FiRIlCn2H9U+NHTs2DjnkkIj48Tr93nvvRa9evSKi6K83m6vP/OpXv4r58+dHyZIlM3d8k55NvaaOHTs2unTpkjW9zz77RMSPn+Vjjz0W1atXj/z8/M1S7y/dh2sfReXnfalJkybx5JNPRpIkmf+UfOutt6JixYqx8847F7jOmjYHHnhgXHjhhZl57q7b+nl8j3Vq2LBhHHvssXHOOefEm2++GR988EGcccYZsdNOO8Wxxx6babPmf54nT54c5513Xta3hVWoUCF69OgRl19+ebzyyisxadKk6NatW9Zt6ZuiXbt2sddee8Xpp58eEyZMiHfeeSe6dOkSbdq0WesxkZ/aYYcdokqVKnHPPffEjBkz4pVXXtngHyE/Vb169Shbtmy88MILsWDBgli8eHGh6i9Iz54946uvvorOnTvHu+++GzNnzowXX3wxunfvvll+EdiSzJkzJ/r06RNTp06NRx55JP7617/GxRdfvFa7du3aRaNGjaJr167xwQcfxBtvvJEVCBTW1VdfHaNGjcr0y6pVq2Z9Y9zPNWrUKE4//fTo0qVLDB8+PGbNmhXvvPNODBo0KJ599tlMu1KlSsVFF10U48aNi/feey+6desWBxxwQCakKsjG9O3+/fvHI488Ev3794/JkyfHRx99lPlf/Y2prXfv3vHiiy/GrFmzYsKECfHqq69mQoR+/frF008/HTNmzIj//Oc/8e9//3uDAUPEtntu5OXlxZVXXhlXXHFF5nGCsWPHxn333RcNGzaMOXPmxKOPPhozZ86M2267LUaMGLHZajn77LPjgQceiMmTJ2eFORtjY8+xn7ryyitjzJgx0atXr5g4cWJMnz49nn766cwf72u89dZb8ec//zmmTZsWQ4YMiccff3yD27788stj2LBhceedd8b06dPjpptuiuHDh8dll10WERFt2rSJQw45JE444YQYOXJkzJo1K55//vl44YUXNqq2f//733HbbbfFxIkT4+OPP46///3vsXr16mjcuHGMGzcurrvuuhg/fnzMmTMnhg8fHp9//vlG9fN69erFhx9+GFOnTo0vvvgi65sWf4mKFSvGZZddFpdcckk88MADMXPmzJgwYUL89a9/jQceeKBI9rGlWd+5dfrpp0deXl507do1Jk2aFK+++mpcdNFFceaZZ2Ye7/0lhgwZEiNGjIgpU6ZEz5494+uvv848DlvU15t69erF66+/Hp9++mmRfmNou3btolWrVtGpU6d46aWXYvbs2TFmzJj4wx/+EOPHjy+y/VCwTb2mPv7443H//ffHtGnTon///vHOO+9krlenn356VK1aNY499th44403YtasWTF69Oj47W9/u8HHlzbWL92Hax9FpV69ejFu3LiYPXt2fPHFF3HhhRfG3Llz46KLLoopU6bE008/Hf37948+ffpk/k78+TqrV6+Ohg0bxvjx4+PFF1+MadOmxVVXXRXvvvtuMR8dv5RQivUaOnRotGjRIo4++uho1apVJEkSzz33XOaW3D/+8Y/xq1/9Ktq3bx9t27aNmjVrrvVH/eDBg+Pggw+Ojh07Rrt27eKggw6KFi1aFKqenJycePrpp2OHHXaIQw45JNq1axcNGjSIxx57bL3rlShRIh599NF47733Ys8994xLLrkkBg8evNH7LVmyZNx2221x9913R+3atTOhXFGoXbt2vPXWW7Fq1ao44ogjYq+99orevXtH5cqVCx3ebS26dOkS3333Xey///7Rs2fPuPjiizNfSf9TJUqUiBEjRmTann322Wt9RXZhXH/99XHxxRdHixYtYv78+fGvf/0rc+fPugwdOjS6dOkSl156aTRu3Dg6deoU7777btZjTeXKlYsrr7wyTjvttGjdunVUqFBhg310Y/p227Zt4/HHH49nnnkmmjdvHocddli88847G13bqlWromfPntGkSZM48sgjo1GjRnHHHXdExI//G9W3b9/Ye++945BDDonc3Nx49NFHN/gebsvnxlVXXRWXXnpp9OvXL5o0aRKnnHJKLFy4MI455pi45JJLolevXtG8efMYM2ZMXHXVVZutjnbt2kWtWrWiffv2WeOqbYyNPcd+au+9947XXnstpk2bFgcffHDss88+0a9fv7X2femll8b48eNjn332iWuvvTZuuummaN++/Xq33alTp7j11lvjL3/5S+yxxx5x9913x9ChQ6Nt27aZNk8++WTst99+0blz52jatGlcccUVmVBgQ7VVrlw5hg8fHocddlg0adIk7rrrrnjkkUdijz32iPz8/Hj99dfjN7/5TTRq1Cj++Mc/xo033hgdOnTY4Pt4zjnnROPGjWPfffeNatWqxVtvvbXBdTbWNddcE1dddVUMGjQoc24+++yzRfpI4ZZmXedWuXLl4sUXX4yvvvoq9ttvvzjxxBPj8MMPj9tvv71I9nv99dfH9ddfH82aNYs333wznnnmmahatWpEFP315uqrr47Zs2fHrrvuWqSPSeXk5MRzzz0XhxxySHTv3j0aNWoUp556anz88cdFEtyxfpt6TR04cGA8+uijsffee8ff//73eOSRRzJ3hpYrVy5ef/312GWXXeL444+PJk2aRI8ePeL7778vsjunfuk+XPsoKpdddlnk5uZG06ZNo1q1arFy5cp47rnn4p133olmzZrF+eefHz169Ig//vGP61xnzpw5cd5558Xxxx8fp5xySrRs2TK+/PLLrLum2DrlJEmSFHcRwPanbdu20bx587jllltS3/fo0aPj0EMPja+//rrIx+AYNmxY9O7dOxYtWlSk22X7tXTp0thpp51i6NChcfzxx2/0epvzHKtXr1707t07evfuXeTbhqI2e/bsqF+/frz//vvRvHnz4i6HrdSmXlNzcnJixIgR670DGwBjSgHAFmn16tXxxRdfxI033hiVK1eOY445prhLAgCAIrVtPxvEFu+NN97I+irYn7/Sct11162zho15tIMty/nnn7/Oz/P8888v7vK2Ks6N4jNnzpyoUaNGPPzww3H//fdnDb48Z86c9V47fTXyplnfe/nGG28Ud3lsYbaU313gl3LtA7YEHt+jWH333Xfx6aefrnP5hr79qah89dVX8dVXXxW4rGzZsmt9XS1btoULF8aSJUsKXJafnx/Vq1dPuaKtl3Njy/TDDz/E7Nmz17l8e/w2z19ixowZ61y20047RdmyZVOshi3dlvK7C/xSrn3AlkAoBQAAAEDqPL4HAAAAQOqEUgAAAACkTigFAAAAQOqEUgAAAACkTigFALCFGDBgQDRv3ry4ywAASIVQCgCgiMyfPz8uuuiiaNCgQZQpUybq1KkTHTt2jFGjRhV3aQAAW5ySxV0AAMC2YPbs2dG6deuoXLlyDB48OPbaa69YuXJlvPjii9GzZ8+YMmVKcZcIALBFcacUAEARuPDCCyMnJyfeeeedOOGEE6JRo0axxx57RJ8+fWLs2LERETFnzpw49thjo0KFCpGfnx8nn3xyLFiwYJ3bbNu2bfTu3TtrXqdOnaJbt26Z6Xr16sW1114bXf5fO/cT0vQfx3H8tVGXzcMYDNthCEnRphuITVhCwwg2+kNeokP2RToosjyEgezSQfAWhImsW/9A8ODBQOgPQXpooLHIog0WDfUwShwzsMty6+SXQoUfbX0PP56P05fPn+/7+/keX3w+H8NQU1OTWlpa9PTpU21sbJi1QqGQ3r59a855+PChXC6Xnj9/Lr/fr6amJsXjcRWLRXPM69ev1dXVJafTKZfLpe7ubq2urjbmZwEAAIhQCgAAoG6lUknPnj1TIpGQ0+nc0+9yuVStVnXp0iWVSiUtLCzo5cuX+vLli65cuVJ3/bt376q7u1vv3r3T+fPnde3aNRmGob6+PmUyGbW2tsowDNVqNXPOjx8/dOfOHT158kSLi4taW1vTrVu3JEk/f/5Ub2+votGoVlZWlE6nNTAwIJvNVve3AgAA7OL4HgAAQJ0+f/6sWq2mEydOHDjm1atX+vDhgwqFgnw+nyTp8ePHamtr0/LyssLh8F/XP3funAYHByVJt2/fViqVUjgc1uXLlyVJo6OjikQi+vr1q44cOSJJqlQqun//vlpbWyVJN27c0NjYmCTp+/fv2tra0oULF8x+v9//198HAACwH3ZKAQAA1On3HUgHyWaz8vl8ZiAlSYFAQC6XS9lstq76oVDIfG5ubpYkBYPBPW3fvn0z2xwOhxk4SZLX6zX73W63+vv7FYvFdPHiRU1MTPxxtA8AAKARCKUAAADqdOzYMdlstoZfZm632/cEXpVKZc+4w4cPm8+7R+z2a6tWq/vO2R3ze60HDx4onU7r1KlTmpmZ0fHjx827sQAAABqBUAoAAKBObrdbsVhMU1NT2t7e3tNfLpfl9/u1vr6u9fV1s/3Tp08ql8sKBAL7vtfj8fyxQ2lnZ0cfP35s/AIO0NHRoWQyqTdv3qi9vV3T09OW1QYAAP9/hFIAAAANMDU1pZ2dHXV1dWl2dlb5fF7ZbFb37t1TJBLR2bNnFQwGdfXqVWUyGS0tLckwDEWjUZ08eXLfd545c0bz8/Oan59XLpfT0NCQyuXyP19LoVBQMplUOp3W6uqqXrx4oXw+z71SAACgobjoHAAAoAGOHj2qTCaj8fFxjYyMqFgsyuPxqLOzU6lUSjabTXNzcxoeHtbp06dlt9sVj8c1OTl54DuvX7+u9+/fyzAMHTp0SDdv3lRPT88/X4vD4VAul9OjR4+0ubkpr9erRCJhXqYOAADQCLbaf7mZEwAAAAAAAGggju8BAAAAAADAcoRSAAAAAAAAsByhFAAAAAAAACxHKAUAAAAAAADLEUoBAAAAAADAcoRSAAAAAAAAsByhFAAAAAAAACxHKAUAAAAAAADLEUoBAAAAAADAcoRSAAAAAAAAsByhFAAAAAAAACxHKAUAAAAAAADL/QKG+xvfMCjr+QAAAABJRU5ErkJggg==", | |
"text/plain": [ | |
"<Figure size 1200x800 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import pandas as pd\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"# Calculate the mean for each column\n", | |
"mean_df1 = time_pidi_cpu.mean()\n", | |
"mean_df2 = time_pidi_gpu.mean()\n", | |
"\n", | |
"# Create a bar chart to compare means\n", | |
"fig, ax = plt.subplots(figsize=(12, 8))\n", | |
"\n", | |
"bar_width = 0.35\n", | |
"index = range(len(mean_df1))\n", | |
"\n", | |
"bar1 = ax.bar(index, mean_df1, bar_width, label='pidi_cpu')\n", | |
"bar2 = ax.bar([i + bar_width for i in index], mean_df2, bar_width, label='pidi_gpu')\n", | |
"\n", | |
"ax.set_xlabel('Columns')\n", | |
"ax.set_ylabel('Mean')\n", | |
"ax.set_title('Comparison of Column Means')\n", | |
"ax.set_xticks([i + bar_width / 2 for i in index])\n", | |
"ax.set_xticklabels(mean_df1.index)\n", | |
"ax.legend()\n", | |
"\n", | |
"plt.tight_layout()\n", | |
"plt.show()\n" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.13" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment