diff --git a/tutorials/notebooks/mct_features_notebooks/README.md b/tutorials/notebooks/mct_features_notebooks/README.md index 062af4eef..f94a2626b 100644 --- a/tutorials/notebooks/mct_features_notebooks/README.md +++ b/tutorials/notebooks/mct_features_notebooks/README.md @@ -10,12 +10,12 @@ These techniques are essential for further optimizing models and achieving super
Post-Training Quantization (PTQ) - | Tutorial | Included Features | - |------------------------------|-----------------------------------------------------------------------------------------------------| - | [MobileNetV2](../imx500_notebooks/keras/example_keras_mobilenetv2_for_imx500.ipynb) | ✅ PTQ | - | [Mixed-Precision MobileNetV2](keras/example_keras_mobilenet_mixed_precision.ipynb) | ✅ PTQ
✅ Mixed-Precision | - | [Nanodet-Plus](../imx500_notebooks/keras/example_keras_nanodet_plus_for_imx500.ipynb) | ✅ PTQ | - | [YoloV8-nano](keras/example_keras_yolov8n.ipynb) | ✅ PTQ | + | Tutorial | Included Features | + |--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| + | [Basic Post-Training Quantization (PTQ)](keras/example_keras_post-training_quantization.ipynb) | ✅ PTQ | + | [MobileNetV2](../imx500_notebooks/keras/example_keras_mobilenetv2_for_imx500.ipynb) | ✅ PTQ | + | [Mixed-Precision MobileNetV2](keras/example_keras_mobilenet_mixed_precision.ipynb) | ✅ PTQ
✅ Mixed-Precision | + | [Nanodet-Plus](../imx500_notebooks/keras/example_keras_nanodet_plus_for_imx500.ipynb) | ✅ PTQ | | [EfficientDetLite0](../imx500_notebooks/keras/example_keras_effdet_lite0_for_imx500.ipynb) | ✅ PTQ
✅ [sony-custom-layers](https://github.com/sony/custom_layers) integration |
diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_threshold_search.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_threshold_search.ipynb index a419fda36..f558321f9 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_threshold_search.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_threshold_search.ipynb @@ -1,844 +1,763 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20", - "metadata": { - "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20" - }, - "source": [ - "# Activation Threshold Search Demonstration For Post-Training Quantization\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "9be59ea8-e208-4b64-aede-1dd6270b3540", - "metadata": { - "id": "9be59ea8-e208-4b64-aede-1dd6270b3540" - }, - "source": [ - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_threshold_search.ipynb)" - ] - }, - { - "cell_type": "markdown", - "id": "930e6d6d-4980-4d66-beed-9ff5a494acf9", - "metadata": { - "id": "930e6d6d-4980-4d66-beed-9ff5a494acf9" - }, - "source": [ - "## Overview" - ] - }, - { - "cell_type": "markdown", - "id": "699be4fd-d382-4eec-9d3f-e2e85cfb1762", - "metadata": { - "id": "699be4fd-d382-4eec-9d3f-e2e85cfb1762" - }, - "source": [ - "This tutorial demonstrates the process used to find the activation threshold, a step that MCT uses during post-training quantization.\n", - "\n", - "In this example we will explore 2 metrics for threshold selection. We will start by demonstrating how to apply the corresponding MCT configurations, then, we will feed a representative dataset through the model, plot the activation distribution of two layers with their respective MCT calculated thresholds, and finally compare the quantized model accuracy of the two methods.\n" - ] - }, - { - "cell_type": "markdown", - "id": "85199e25-c587-41b1-aaf5-e1d23ce97ca1", - "metadata": { - "id": "85199e25-c587-41b1-aaf5-e1d23ce97ca1" - }, - "source": [ - "## Activation threshold explanation" - ] - }, - { - "cell_type": "markdown", - "id": "a89a17f4-30c9-4caf-a888-424f7a82fbc8", - "metadata": { - "id": "a89a17f4-30c9-4caf-a888-424f7a82fbc8" - }, - "source": [ - "During quantization process, thresholds are used to map a distribution of 32bit float values to their quantized counterparts. Doing this with the least loss of data while maintaining the most representative range is important for final model accuracy.\n", - "\n", - "How it’s done in MCT?\n", - "\n", - "MCT's Post-training quantization uses a representative dataset to evaluate a list of typical output activation values. The challenge comes with how best to match these values to their quantized counterparts. To this end, a grid search for the optimal threshold is performed according to number of possible error metrics. Typically, mean squared error is the best performing metric and used by default.\n", - "\n", - "The error is calculated based on the difference between the float and quantized distribution. The threshold is selected based on the minimum error. For the case of MSE;\n", - "\n", - "$$\n", - "ERR(t) = \\frac{1}{n_s} \\sum_{X \\in Fl(D)} (Q(X, t, n_b) - X)^2\n", - "$$\n", - "\n", - "- $ERR(t)$ : The quantization error function dependent on threshold t.\n", - "ns: The size of the representative dataset, indicating normalization over the dataset's size.\n", - "\n", - "- $\\sum$: Summation over all elements X in the flattened dataset $Fl(D)$.\n", - "\n", - "- $F_l(D)$: The collection of activation tensors in the l-th layer, representing the dataset D flattened for processing.\n", - "\n", - "- $Q(X, t, n_b)$: The quantized approximation of X, given a threshold t and bit width nb.\n", - "\n", - "- $X$: The original activation tensor before quantization.\n", - "\n", - "- $t$: The quantization threshold, a critical parameter for controlling the quantization process.\n", - "\n", - "- $n_b$: The number of bits used in the quantization process, affecting the model's precision and size.\n", - "\n", - "\n", - "The quantization thresholds often have limitations, typically for deployment purposes. In MCT, activation thresholds are restricted by default to **Power of Two** values only and can represent signed values within the range of (-T, T) or unsigned values within the range of (0, T). Other restriction settings are available.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "9c0e9543-d356-412f-acf1-c2ecad553e06", - "metadata": { - "id": "9c0e9543-d356-412f-acf1-c2ecad553e06" - }, - "source": [ - "### Error methods supported by MCT:\n", - "\n", - "- NOCLIPPING - Use min/max values as thresholds.\n", - "\n", - "- MSE - Use min square error for minimizing quantizationnoises.\n", - "\n", - "- MAE - Use min absolute error for minimizing quantization nose.\n", - "\n", - "- KL - Use KL-divergen ce tosgnals disb as tas o be similar as posible.\n", - "\n", - "- Lp - Use Lpsingimizing quantization noise." - ] - }, - { - "cell_type": "markdown", - "id": "04228b7c-00f1-4ded-bead-722e2a4e89a0", - "metadata": { - "id": "04228b7c-00f1-4ded-bead-722e2a4e89a0", - "tags": [] - }, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "markdown", - "id": "2657cf1a-654d-45a6-b877-8bf42fc26d0d", - "metadata": { - "id": "2657cf1a-654d-45a6-b877-8bf42fc26d0d" - }, - "source": [ - "Install and import the relevant packages:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", - "metadata": { - "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", - "tags": [] - }, - "outputs": [], - "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "!pip install -q mct-nightly" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19", - "metadata": { - "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19" - }, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import keras\n", - "import model_compression_toolkit as mct\n", - "import os" - ] - }, - { - "cell_type": "markdown", - "id": "z8F-avk3azgZ", - "metadata": { - "id": "z8F-avk3azgZ" - }, - "source": [ - "Clone MCT to gain access to tutorial scripts" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e3b675cf-e1b5-4249-a581-ffb9b1c16ba1", - "metadata": { - "id": "e3b675cf-e1b5-4249-a581-ffb9b1c16ba1" - }, - "outputs": [], - "source": [ - "!git clone https://github.com/sony/model_optimization.git local_mct\n", - "!pip install -r ./local_mct/requirements.txt\n", - "import sys\n", - "sys.path.insert(0,\"./local_mct\")\n", - "import tutorials.resources.utils.keras_tutorial_tools as tutorial_tools" - ] - }, - { - "cell_type": "markdown", - "id": "0c7fed0d-cfc8-41ee-adf1-22a98110397b", - "metadata": { - "id": "0c7fed0d-cfc8-41ee-adf1-22a98110397b" - }, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "markdown", - "id": "aecde59e4c37b1da", - "metadata": { - "collapsed": false, - "id": "aecde59e4c37b1da" - }, - "source": [ - "Load ImageNet classification dataset and seperate a small representative subsection of this dataset to use for quantization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "_ztv72uM6-UT", - "metadata": { - "id": "_ztv72uM6-UT" - }, - "outputs": [], - "source": [ - "if not os.path.isdir('imagenet'):\n", - " !mkdir imagenet\n", - " !wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", - " !mv ILSVRC2012_devkit_t12.tar.gz imagenet/\n", - " !wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", - " !mv ILSVRC2012_img_val.tar imagenet/" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "YVAoUjK47Zcp", - "metadata": { - "id": "YVAoUjK47Zcp" - }, - "outputs": [], - "source": [ - "import torchvision\n", - "if not os.path.isdir('imagenet/val'):\n", - " ds = torchvision.datasets.ImageNet(root='./imagenet', split='val')" - ] - }, - { - "cell_type": "markdown", - "id": "fcbb3eecae5346a9", - "metadata": { - "collapsed": false, - "id": "fcbb3eecae5346a9" - }, - "source": [ - "Here we create the representative dataset. For detail on this step see [ImageNet tutorial](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/imx500_notebooks/keras/example_keras_mobilenetv2_for_imx500.ipynb). If you are running locally a higher fraction of the dataset can be used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eda9ad33-f88c-4178-8f19-bac6b2b2e97b", - "metadata": { - "id": "eda9ad33-f88c-4178-8f19-bac6b2b2e97b" - }, - "outputs": [], - "source": [ - "REPRESENTATIVE_DATASET_FOLDER = './imagenet/val'\n", - "BATCH_SIZE = 20\n", - "fraction =0.001\n", - "model_version = 'MobileNetV2'\n", - "\n", - "preprocessor = tutorial_tools.DatasetPreprocessor(model_version=model_version)\n", - "representative_dataset_gen = preprocessor.get_representative_dataset(fraction, REPRESENTATIVE_DATASET_FOLDER, BATCH_SIZE)" - ] - }, - { - "cell_type": "markdown", - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", - "metadata": { - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5" - }, - "source": [ - "## MCT Quantization" - ] - }, - { - "cell_type": "markdown", - "id": "55edbb99-ab2f-4dde-aa74-4ddee61b2615", - "metadata": { - "id": "55edbb99-ab2f-4dde-aa74-4ddee61b2615" - }, - "source": [ - "This step we load the model and quantize with two methods of threshold error calculation: no clipping and MSE.\n", - "\n", - "No clipping chooses the lowest Power of two threshold that does not loose any data to its threshold.\n", - "\n", - "MSE chooses a Power of two threshold that results in the least difference between the float distribution and the quantized distribution.\n", - "\n", - "This means no clipping will often result in a larger threshold, which we will see later in this tutorial." - ] - }, - { - "cell_type": "markdown", - "id": "VMrcPUN6jPlB", - "metadata": { - "id": "VMrcPUN6jPlB" - }, - "source": [ - "First we load mobilenetv2 from the keras library" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c431848f-a5f4-4737-a5c8-f046a8bca840", - "metadata": { - "id": "c431848f-a5f4-4737-a5c8-f046a8bca840" - }, - "outputs": [], - "source": [ - "from keras.applications.mobilenet_v2 import MobileNetV2\n", - "float_model = MobileNetV2()" - ] - }, - { - "cell_type": "markdown", - "id": "Pd8blHyKjWay", - "metadata": { - "id": "Pd8blHyKjWay" - }, - "source": [ - "Quantization perameters are defined. Here we will use default values apart from quantisation method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ca971297-e00b-44b5-b9e1-e57ba5843e38", - "metadata": { - "id": "ca971297-e00b-44b5-b9e1-e57ba5843e38" - }, - "outputs": [], - "source": [ - "from model_compression_toolkit.core import QuantizationErrorMethod\n", - "\n", - "# Specify the IMX500-v1 target platform capability (TPC)\n", - "tpc = mct.get_target_platform_capabilities(\"tensorflow\", 'imx500', target_platform_version='v1')\n", - "\n", - "# List of error methods to iterate over\n", - "q_configs_dict = {}" - ] - }, - { - "cell_type": "markdown", - "id": "Vot-MCiWjzCE", - "metadata": { - "id": "Vot-MCiWjzCE" - }, - "source": [ - "You can edit the code below to quantize with other error metrics MCT supports." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "jtiZzXmTjxuI", - "metadata": { - "id": "jtiZzXmTjxuI" - }, - "outputs": [], - "source": [ - "# Error methods to iterate over\n", - "error_methods = [\n", - " QuantizationErrorMethod.MSE,\n", - " QuantizationErrorMethod.NOCLIPPING\n", - "]\n", - "\n", - "# If you are curious you can add any of the below quantization methods as well.\n", - "#QuantizationErrorMethod.MAE\n", - "#QuantizationErrorMethod.KL\n", - "#QuantizationErrorMethod.LP\n", - "\n", - "# Iterate and build the QuantizationConfig objects\n", - "for error_method in error_methods:\n", - " q_config = mct.core.QuantizationConfig(\n", - " activation_error_method=error_method,\n", - " )\n", - "\n", - " q_configs_dict[error_method] = q_config" - ] - }, - { - "cell_type": "markdown", - "id": "8W3Dcn0jkJOH", - "metadata": { - "id": "8W3Dcn0jkJOH" - }, - "source": [ - "Finally we quantize the model, this can take some time." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba0c6e55-d474-4dc3-9a43-44b736635998", - "metadata": { - "id": "ba0c6e55-d474-4dc3-9a43-44b736635998" - }, - "outputs": [], - "source": [ - "quantized_models_dict = {}\n", - "\n", - "for error_method, q_config in q_configs_dict.items():\n", - " # Create a CoreConfig object with the current quantization configuration\n", - " ptq_config = mct.core.CoreConfig(quantization_config=q_config)\n", - "\n", - " # Perform MCT post-training quantization\n", - " quantized_model, quantization_info = mct.ptq.keras_post_training_quantization(\n", - " in_model=float_model,\n", - " representative_data_gen=representative_dataset_gen,\n", - " core_config=ptq_config,\n", - " target_platform_capabilities=tpc\n", - " )\n", - "\n", - " # Update the dictionary to include the quantized model\n", - " quantized_models_dict[error_method] = {\n", - " \"quantization_config\": q_config,\n", - " \"quantized_model\": quantized_model,\n", - " \"quantization_info\": quantization_info\n", - " }\n" - ] - }, - { - "cell_type": "markdown", - "id": "A8UHRsh2khM4", - "metadata": { - "id": "A8UHRsh2khM4" - }, - "source": [ - "## Threshold and Distribution Visulisation" - ] - }, - { - "cell_type": "markdown", - "id": "Y-0QLWFJkpFV", - "metadata": { - "id": "Y-0QLWFJkpFV" - }, - "source": [ - "To assist with understanding we will now plot for two of Mobilenet's layers. The thresholds found during quantisation for both MSE error and NoClip, along side each layers activation distribution obtained by feeding the representative dataset through the model. This is useful to help visulise the effect of different thresholds on dataloss vs data resolution during quantisation.\n", - "\n", - "MCT quantization_info stores threshold data per layer. However, to see the distribution of the activations the model needs to be rebuilt upto and including the layer chosen for distribution visulisation.\n", - "\n", - "To do this we first need to list the layer names. With keras this can be done easily for the first 10 layes with the following." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac", - "metadata": { - "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac" - }, - "outputs": [], - "source": [ - "for index, layer in enumerate(float_model.layers):\n", - " if index < 10:\n", - " print(layer.name)\n", - " else:\n", - " break" - ] - }, - { - "cell_type": "markdown", - "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277", - "metadata": { - "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277" - }, - "source": [ - "First activation layer in model is 'Conv1_relu'.\n", - "\n", - "For this particular model, through testing we found that expanded_conv_project_BN shows differing thresholds for the two error metrics. So, this layer will also be visulised. For some context, MobileNetv2 uses an inverted residual structure where the input is expanded in the channel dimension, passed through a depthwise conv, and finally projected back to to a lower dimension. expanded_conv_project_BN layer represents this projection and the BN indicates Batch Normalisation.\n", - "\n", - "Use these layer names to create a pair of models that end in these respective layers." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d", - "metadata": { - "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d" - }, - "outputs": [], - "source": [ - "from tensorflow.keras.models import Model\n", - "layer_name1 = 'Conv1_relu'\n", - "layer_name2 = 'expanded_conv_project_BN'\n", - "\n", - "layer_output1 = float_model.get_layer(layer_name1).output\n", - "activation_model_relu = Model(inputs=float_model.input, outputs=layer_output1)\n", - "layer_output2 = float_model.get_layer(layer_name2).output\n", - "activation_model_project = Model(inputs=float_model.input, outputs=layer_output2)" - ] - }, - { - "cell_type": "markdown", - "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364", - "metadata": { - "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364" - }, - "source": [ - "Feed the representative dataset through these models and store the output." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eaeb9888-5d67-4979-af50-80781a811b4b", - "metadata": { - "id": "eaeb9888-5d67-4979-af50-80781a811b4b" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "activation_batches_relu = []\n", - "activation_batches_project = []\n", - "for images in representative_dataset_gen():\n", - " activations_relu = activation_model_relu.predict(images)\n", - " activation_batches_relu.append(activations_relu)\n", - " activations_project = activation_model_project.predict(images)\n", - " activation_batches_project.append(activations_project)\n", - "\n", - "all_activations_relu = np.concatenate(activation_batches_relu, axis=0).flatten()\n", - "all_activations_project = np.concatenate(activation_batches_project, axis=0).flatten()" - ] - }, - { - "cell_type": "markdown", - "id": "I5W9yY5DvOFr", - "metadata": { - "id": "I5W9yY5DvOFr" - }, - "source": [ - "Thresholds calculated by MCT during quantization can be accessed using the following. The layer number matches the index of the layers named in the previous steps.\n", - "\n", - "As mentioned above we use the first activation relu layer and the batch normalisation layer as they best demonstrate the effect of the two threshold error methods." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "NGnjrPD_uTd5", - "metadata": { - "id": "NGnjrPD_uTd5" - }, - "outputs": [], - "source": [ - "# layer 4 is the first activation layer - Conv1_relu\n", - "layer_name2 = 'expanded_conv_project_BN'\n", - "optimal_thresholds_relu = {\n", - " error_method: data[\"quantized_model\"].layers[4].activation_holder_quantizer.get_config()['threshold'][0]\n", - " for error_method, data in quantized_models_dict.items()\n", - "}\n", - "\n", - "# layer 9 is the batch normalisation projection layer - Expanded_conv_project_BN\n", - "optimal_thresholds_project = {\n", - " error_method: data[\"quantized_model\"].layers[9].activation_holder_quantizer.get_config()['threshold'][0]\n", - " for error_method, data in quantized_models_dict.items()\n", - "}" - ] - }, - { - "cell_type": "markdown", - "id": "XRAr8L5mvuLd", - "metadata": { - "id": "XRAr8L5mvuLd" - }, - "source": [ - "### Distribution Plots\n", - "\n", - "These are the distributions of the two layers firstly, below relu and secondly Project_BN.\n", - "\n", - "The second distribution shows distinctly the difference in the result of the two error metrics." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "VPb8tBNGpJjo", - "metadata": { - "id": "VPb8tBNGpJjo" - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "# Plotting\n", - "plt.figure(figsize=(10, 6))\n", - "plt.hist(all_activations_relu, bins=100, alpha=0.5, label='Original')\n", - "for method, threshold in optimal_thresholds_relu.items():\n", - " plt.axvline(threshold, linestyle='--', linewidth=2, label=f'{method}: {threshold:.2f}')\n", - "\n", - "plt.title('Activation Distribution with Optimal Quantization Thresholds First Relu Layer')\n", - "plt.xlabel('Activation Value')\n", - "plt.ylabel('Frequency')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "Df7eKzh4oj5X", - "metadata": { - "id": "Df7eKzh4oj5X" - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "# Plotting\n", - "plt.figure(figsize=(10, 6))\n", - "plt.hist(all_activations_project, bins=100, alpha=0.5, label='Original')\n", - "for method, threshold in optimal_thresholds_project.items():\n", - " plt.axvline(threshold, linestyle='--', linewidth=2, label=f'{method}: {threshold:.2f}')\n", - "\n", - "plt.title('Activation Distribution with Optimal Quantization Thresholds Prohject BN layer')\n", - "plt.xlabel('Activation Value')\n", - "plt.ylabel('Frequency')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "4c967d41-439d-405b-815f-be641f1768fe", - "metadata": { - "id": "4c967d41-439d-405b-815f-be641f1768fe" - }, - "source": [ - "## Accuracy\n", - "\n", - "Finally we can show the effect of these different thresholds on the models accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "092d9fd0-8005-4551-b853-3b52840639c2", - "metadata": { - "id": "092d9fd0-8005-4551-b853-3b52840639c2" - }, - "outputs": [], - "source": [ - "test_dataset_folder = './imagenet/val'\n", - "batch_size=50\n", - "evaluation_dataset = preprocessor.get_validation_dataset_fraction(0.005, test_dataset_folder, batch_size)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8ebf7d04-7816-465c-9157-6068c0a4a08a", - "metadata": { - "id": "8ebf7d04-7816-465c-9157-6068c0a4a08a" - }, - "outputs": [], - "source": [ - "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=[\"accuracy\"])\n", - "results = float_model.evaluate(evaluation_dataset)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613", - "metadata": { - "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613" - }, - "outputs": [], - "source": [ - "evaluation_results = {}\n", - "\n", - "for error_method, data in quantized_models_dict.items():\n", - " quantized_model = data[\"quantized_model\"]\n", - "\n", - " quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=[\"accuracy\"])\n", - "\n", - " results = quantized_model.evaluate(evaluation_dataset, verbose=0) # Set verbose=0 to suppress the log messages\n", - "\n", - " evaluation_results[error_method] = results\n", - "\n", - " # Print the results\n", - " print(f\"Results for {error_method}: Loss = {results[0]}, Accuracy = {results[1]}\")" - ] - }, - { - "cell_type": "markdown", - "id": "GpEZ2E1qzWl3", - "metadata": { - "id": "GpEZ2E1qzWl3" - }, - "source": [ - "These results mirror the case for many models hence why MSE has been chosen by default by the MCT team.\n", - "\n", - "Each of MCT's error methods have a different effect on different models so it is always worth including this metric into hyper perameter tuning when trying to improve quantized model accuracy." - ] - }, - { - "cell_type": "markdown", - "id": "14877777", - "metadata": { - "id": "14877777" - }, - "source": [ - "## Conclusion" - ] - }, - { - "cell_type": "markdown", - "id": "bb7e1572", - "metadata": { - "id": "bb7e1572" - }, - "source": [ - "In this tutorial, we demonstrated the methods used to find a layers quantization threshold for activation. The process is similar for weight quantization but a representative dataset is not required. Use this code to assist with choosing error methods for your own model.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "8c0c9b61-8056-4d06-8a2b-6e5fc56325f6", - "metadata": { - "id": "8c0c9b61-8056-4d06-8a2b-6e5fc56325f6" - }, - "source": [ - "## Appendix\n", - "\n", - "Some code to assist with gaining information from each layer in the MCT quanisation output." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "qml4LLmWZLP4", - "metadata": { - "id": "qml4LLmWZLP4" - }, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import inspect\n", - "\n", - "\n", - "quantized_model = data[\"quantized_model\"]\n", - "quantizer_object = quantized_model.layers[1]\n", - "\n", - "quantized_model = data[\"quantized_model\"]\n", - "\n", - "\n", - "relu_layer_indices = []\n", - "\n", - "\n", - "for i, layer in enumerate(quantized_model.layers):\n", - " # Convert the layer's configuration to a string\n", - " layer_config_str = str(layer.get_config())\n", - "\n", - " layer_class_str = str(layer.__class__.__name__)\n", - "\n", - " # Check if \"relu\" is mentioned in the layer's configuration or class name\n", - " if 'relu' in layer_config_str.lower() or 'relu' in layer_class_str.lower():\n", - " relu_layer_indices.append(i)\n", - "\n", - "print(\"Layer indices potentially using ReLU:\", relu_layer_indices)\n", - "print(\"Number of relu layers \" + str(len(relu_layer_indices)))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43f34133-8ed4-429a-a225-6fb6a6f5b207", - "metadata": { - "id": "43f34133-8ed4-429a-a225-6fb6a6f5b207" - }, - "outputs": [], - "source": [ - "for error_method, data in quantized_models_dict.items():\n", - " quantized_model = data[\"quantized_model\"]\n", - " print(quantized_model.layers[1])" - ] - }, - { - "cell_type": "markdown", - "id": "01c1645e-205c-4d9a-8af3-e497b3addec1", - "metadata": { - "id": "01c1645e-205c-4d9a-8af3-e497b3addec1" - }, - "source": [ - "\n", - "\n", - "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", - "\n", - "Licensed under the Apache License, Version 2.0 (the \"License\");\n", - "you may not use this file except in compliance with the License.\n", - "You may obtain a copy of the License at\n", - "\n", - " http://www.apache.org/licenses/LICENSE-2.0\n", - "\n", - "Unless required by applicable law or agreed to in writing, software\n", - "distributed under the License is distributed on an \"AS IS\" BASIS,\n", - "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - "See the License for the specific language governing permissions and\n", - "limitations under the License.\n" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "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.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "cells": [ + { + "cell_type": "markdown", + "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20", + "metadata": { + "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20" + }, + "source": [ + "# A Practical Guide to Activation Threshold Search in Post-Training Quantization\n", + "\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_threshold_search.ipynb)\n", + "\n", + "## Overview\n", + "This tutorial demonstrates how to find the optimal activation threshold, a key component in MCT's post-training quantization workflow.\n", + "\n", + "In this example, we will explore two different metrics for threshold selection. We will begin by applying the appropriate MCT configurations, followed by inferring a representative dataset through the model. Next, we will plot the activation distributions of two layers along with their corresponding MCT-calculated thresholds, and finally, we will compare the quantized model accuracy using both methods.\n", + "\n", + "## Activation threshold explanation\n", + "During the quantization process, thresholds are used to map a distribution of 32-bit floating-point values to their quantized equivalents. Minimizing data loss while preserving the most representative range is crucial for maintaining the final model's accuracy.\n", + "\n", + "### How Is It Done in MCT?\n", + "\n", + "MCT's post-training quantization leverages a representative dataset to evaluate a range of typical output activation values. The challenge lies in determining the best way to map these values to their quantized versions. To address this, a grid search is performed to find the optimal threshold using various error metrics. Typically, mean squared error (MSE) is the most effective and is used as the default metric.\n", + "\n", + "The error is calculated based on the difference between the original float and the quantized distributions. The optimal threshold is then selected based on the metric that results in the minimum error. For example, for the case of MSE.\n", + "\n", + "$$\n", + "ERR(t) = \\frac{1}{n_s} \\sum_{X \\in Fl(D)} (Q(X, t, n_b) - X)^2\n", + "$$\n", + "\n", + "- $ERR(t)$ : The quantization error function dependent on the threshold $t$.\n", + "- \n", + "- $n_s$: The size of the representative dataset.\n", + "\n", + "- $\\sum$: Summation over all elements $X$ in the flattened dataset $F_l(D)$.\n", + "\n", + "- $F_l(D)$: The set of activation tensors in the $l$-th layer, flattened for processing.\n", + "\n", + "- $Q(X, t, n_b)$: The quantized approximation of $X$, given a threshold $t$ and bit width $n_b$.\n", + "\n", + "- $X$: The original activation tensor before quantization.\n", + "\n", + "- $t$: The quantization threshold, a key parameter for controlling the quantization process.\n", + "\n", + "- $n_b$: The number of bits used in quantization, impacting model precision and size.\n", + "\n", + "\n", + "Quantization thresholds often have specific limitations, typically imposed for deployment purposes. In MCT, activation thresholds are restricted by default to Power-of-Two values and can represent either signed values within the range $(-T, T)$ or unsigned values within $(0, T)$. Other restriction settings are also configurable.\n", + "\n", + "### Error methods supported by MCT:\n", + "\n", + "- **NOCLIPPING:** Use min/max values as thresholds.\n", + "\n", + "- **MSE:** Minimizes quantization noise by using the mean squared error (MSE).\n", + "\n", + "- **MAE:** Minimizes quantization noise by using the mean absolute error (MAE).\n", + "\n", + "- **KL:** Uses Kullback-Leibler (KL) divergence to align the distributions, ensuring that the quantized distribution is as similar as possible to the original.\n", + "\n", + "- **Lp:** Minimizes quantization noise using the Lp norm, where `p` is a configurable parameter that determines the type of distance metric.\n", + "\n", + "## Setup\n", + "Install the relevant packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", + "metadata": { + "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", + "tags": [] + }, + "outputs": [], + "source": [ + "TF_VER = '2.14'\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + }, + "id": "7837babf2112542b" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19", + "metadata": { + "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19" + }, + "outputs": [], + "source": [ + "import keras\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "markdown", + "source": [ + "Load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." + ], + "metadata": { + "collapsed": false + }, + "id": "4d691159f5bfc53e" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "\n", + "float_model = MobileNetV2()" + ], + "metadata": { + "collapsed": false + }, + "id": "468d67cd5f25886e" + }, + { + "cell_type": "markdown", + "source": [ + "## Dataset preparation\n", + "### Download the ImageNet validation set\n", + "Download the ImageNet dataset with only the validation split.\n", + "**Note:** For demonstration purposes we use the validation set for the model quantization routines. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", + "\n", + "This step may take several minutes..." + ], + "metadata": { + "collapsed": false + }, + "id": "de5a1be0c4fc4847" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "_ztv72uM6-UT", + "metadata": { + "id": "_ztv72uM6-UT" + }, + "outputs": [], + "source": [ + "import os\n", + " \n", + "if not os.path.isdir('imagenet'):\n", + " !mkdir imagenet\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", + " \n", + " !cd imagenet && tar -xzf ILSVRC2012_devkit_t12.tar.gz && \\\n", + " mkdir ILSVRC2012_img_val && tar -xf ILSVRC2012_img_val.tar -C ILSVRC2012_img_val" + ] + }, + { + "cell_type": "markdown", + "source": [ + "The following code organizes the extracted data into separate folders for each label, making it compatible with Keras dataset loaders." + ], + "metadata": { + "collapsed": false + }, + "id": "ca398ea7e1551d7" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "YVAoUjK47Zcp", + "metadata": { + "id": "YVAoUjK47Zcp" + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "import shutil\n", + "\n", + "root = Path('./imagenet')\n", + "imgs_dir = root / 'ILSVRC2012_img_val'\n", + "target_dir = root /'val'\n", + "\n", + "def extract_labels():\n", + " !pip install -q scipy\n", + " import scipy\n", + " mat = scipy.io.loadmat(root / 'ILSVRC2012_devkit_t12/data/meta.mat', squeeze_me=True)\n", + " cls_to_nid = {s[0]: s[1] for i, s in enumerate(mat['synsets']) if s[4] == 0} \n", + " with open(root / 'ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt', 'r') as f:\n", + " return [cls_to_nid[int(cls)] for cls in f.readlines()]\n", + "\n", + "if not target_dir.exists():\n", + " labels = extract_labels()\n", + " for lbl in set(labels):\n", + " os.makedirs(target_dir / lbl)\n", + " \n", + " for img_file, lbl in zip(sorted(os.listdir(imgs_dir)), labels):\n", + " shutil.move(imgs_dir / img_file, target_dir / lbl)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "These functions generate a `tf.data.Dataset` from image files in a directory." + ], + "metadata": { + "collapsed": false + }, + "id": "a0bb1a9df8e1d7fc" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "def imagenet_preprocess_input(images, labels):\n", + " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels\n", + "\n", + "def get_dataset(batch_size, shuffle):\n", + " dataset = tf.keras.utils.image_dataset_from_directory(\n", + " directory='./imagenet/val',\n", + " batch_size=batch_size,\n", + " image_size=[224, 224],\n", + " shuffle=shuffle,\n", + " crop_to_aspect_ratio=True,\n", + " interpolation='bilinear')\n", + " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)), num_parallel_calls=tf.data.AUTOTUNE)\n", + " dataset = dataset.prefetch(buffer_size=tf.data.AUTOTUNE)\n", + " return dataset" + ], + "metadata": { + "collapsed": false + }, + "id": "c8acd6413a722c2f" + }, + { + "cell_type": "markdown", + "source": [ + "## Representative Dataset\n", + "For quantization with MCT, we need to define a representative dataset required by the PTQ algorithm. This dataset is a generator that returns a list of images:" + ], + "metadata": { + "collapsed": false + }, + "id": "8aa0bca3e15fba91" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "batch_size = 32\n", + "n_iter = 10\n", + "\n", + "dataset = get_dataset(batch_size, shuffle=True)\n", + "\n", + "def representative_dataset_gen():\n", + " for _ in range(n_iter):\n", + " yield [dataset.take(1).get_single_element()[0].numpy()]" + ], + "metadata": { + "collapsed": false + }, + "id": "1bdb4144e4ce2ab6" + }, + { + "cell_type": "markdown", + "source": [ + "## Target Platform Capabilities\n", + "MCT optimizes the model for dedicated hardware. This is done using TPC (for more details, please visit our [documentation](https://sony.github.io/model_optimization/docs/api/api_docs/modules/target_platform.html)). Here, we use the default Tensorflow TPC:" + ], + "metadata": { + "collapsed": false + }, + "id": "98f4bbca00996989" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import model_compression_toolkit as mct\n", + "\n", + "# Get a TargetPlatformCapabilities object that models the hardware for the quantized model inference. Here, for example, we use the default platform that is attached to a Keras layers representation.\n", + "target_platform_cap = mct.get_target_platform_capabilities('tensorflow', 'default')" + ], + "metadata": { + "collapsed": false + }, + "id": "554719effaf90250" + }, + { + "cell_type": "markdown", + "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", + "metadata": { + "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5" + }, + "source": [ + "## Post-Training Quantization using MCT\n", + "In this step, we load the model and apply post-training quantization using two threshold error calculation methods: **\"No Clipping\"** and **MSE**.\n", + "\n", + "- **\"No Clipping\"** selects the lowest power-of-two threshold that ensures no data is lost (clipped).\n", + "- **MSE** selects a power-of-two threshold that minimizes the mean square error between the original float distribution and the quantized distribution.\n", + "\n", + "- As a result, the \"No Clipping\" method typically results in a larger threshold, as we will demonstrate later in this tutorial.\n", + "\n", + "The quantization parameters are predefined, and we use the default values except for the quantization method. Feel free to modify the code below to experiment with other error metrics supported by MCT." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "jtiZzXmTjxuI", + "metadata": { + "id": "jtiZzXmTjxuI" + }, + "outputs": [], + "source": [ + "from model_compression_toolkit.core import QuantizationErrorMethod\n", + "\n", + "q_configs_dict = {}\n", + "# Error methods to iterate over\n", + "error_methods = [\n", + " QuantizationErrorMethod.MSE,\n", + " QuantizationErrorMethod.NOCLIPPING\n", + "]\n", + "\n", + "# If you are curious you can add any of the below quantization methods as well.\n", + "# QuantizationErrorMethod.MAE\n", + "# QuantizationErrorMethod.KL\n", + "# QuantizationErrorMethod.LP\n", + "\n", + "# Iterate and build the QuantizationConfig objects\n", + "for error_method in error_methods:\n", + " q_config = mct.core.QuantizationConfig(\n", + " activation_error_method=error_method,\n", + " )\n", + "\n", + " q_configs_dict[error_method] = q_config" + ] + }, + { + "cell_type": "markdown", + "id": "8W3Dcn0jkJOH", + "metadata": { + "id": "8W3Dcn0jkJOH" + }, + "source": [ + "Now we will run post-training quantization for each configuration:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba0c6e55-d474-4dc3-9a43-44b736635998", + "metadata": { + "id": "ba0c6e55-d474-4dc3-9a43-44b736635998" + }, + "outputs": [], + "source": [ + "quantized_models_dict = {}\n", + "\n", + "for error_method, q_config in q_configs_dict.items():\n", + " # Create a CoreConfig object with the current quantization configuration\n", + " ptq_config = mct.core.CoreConfig(quantization_config=q_config)\n", + "\n", + " # Perform MCT post-training quantization\n", + " quantized_model, quantization_info = mct.ptq.keras_post_training_quantization(\n", + " in_model=float_model,\n", + " representative_data_gen=representative_dataset_gen,\n", + " core_config=ptq_config,\n", + " target_platform_capabilities=target_platform_cap\n", + " )\n", + "\n", + " # Update the dictionary to include the quantized model\n", + " quantized_models_dict[error_method] = {\n", + " \"quantization_config\": q_config,\n", + " \"quantized_model\": quantized_model,\n", + " \"quantization_info\": quantization_info\n", + " }\n" + ] + }, + { + "cell_type": "markdown", + "id": "A8UHRsh2khM4", + "metadata": { + "id": "A8UHRsh2khM4" + }, + "source": [ + "## Threshold and Distribution Visualization\n", + "To facilitate understanding, we will plot the activation distributions for two layers of MobileNetV2. For each layer, we will show the thresholds determined by both **MSE** and **No Clipping** methods, along with the corresponding activation distributions obtained by infering the representative dataset through the model. This visualization highlights the trade-off between data loss and data resolution under different thresholds during quantization.\n", + "\n", + "MCT’s `quantization_info` stores the threshold values for each layer. However, to view the actual activation distributions, the model needs to be reconstructed up to and including the target layer selected for visualization.\n", + "\n", + "To do this, we first need to identify the layer names. In Keras, this can be easily done for the first 10 layers using the following code snippet." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac", + "metadata": { + "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac" + }, + "outputs": [], + "source": [ + "for index, layer in enumerate(float_model.layers):\n", + " if index < 10:\n", + " print(layer.name)\n", + " else:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277", + "metadata": { + "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277" + }, + "source": [ + "The first activation layer in the model is named `Conv1_relu`.\n", + "\n", + "For this particular model, testing has shown that the `expanded_conv_project_BN` layer exhibits different thresholds for the two error metrics. Therefore, we will also include this layer in the visualization. For context, MobileNetV2 uses an inverted residual structure, where the input is first expanded in the channel dimension, then passed through a depthwise convolution, and finally projected back to a lower dimension. The `expanded_conv_project_BN` layer represents this projection, and the BN suffix indicates the presence of Batch Normalization.\n", + "\n", + "We will use these layer names to create two separate models, each ending at one of these respective layers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d", + "metadata": { + "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d" + }, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Model\n", + "layer_name1 = 'Conv1_relu'\n", + "layer_name2 = 'expanded_conv_project_BN'\n", + "\n", + "layer_output1 = float_model.get_layer(layer_name1).output\n", + "activation_model_relu = Model(inputs=float_model.input, outputs=layer_output1)\n", + "layer_output2 = float_model.get_layer(layer_name2).output\n", + "activation_model_project = Model(inputs=float_model.input, outputs=layer_output2)" + ] + }, + { + "cell_type": "markdown", + "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364", + "metadata": { + "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364" + }, + "source": [ + "Infer the representative dataset using these models and store the outputs for further analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eaeb9888-5d67-4979-af50-80781a811b4b", + "metadata": { + "id": "eaeb9888-5d67-4979-af50-80781a811b4b" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "activation_batches_relu = []\n", + "activation_batches_project = []\n", + "for images in representative_dataset_gen():\n", + " activations_relu = activation_model_relu.predict(images)\n", + " activation_batches_relu.append(activations_relu)\n", + " activations_project = activation_model_project.predict(images)\n", + " activation_batches_project.append(activations_project)\n", + "\n", + "all_activations_relu = np.concatenate(activation_batches_relu, axis=0).flatten()\n", + "all_activations_project = np.concatenate(activation_batches_project, axis=0).flatten()" + ] + }, + { + "cell_type": "markdown", + "id": "I5W9yY5DvOFr", + "metadata": { + "id": "I5W9yY5DvOFr" + }, + "source": [ + "Thresholds calculated by MCT during quantization can be accessed using the following approach. The layer indices correspond to the order of the layers listed in the previous steps.\n", + "\n", + "As noted earlier, we focus on the first ReLU activation layer and the Batch Normalization layer (`expanded_conv_project_BN`) since they effectively illustrate the impact of the two threshold error methods." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "NGnjrPD_uTd5", + "metadata": { + "id": "NGnjrPD_uTd5" + }, + "outputs": [], + "source": [ + "# layer 4 is the first activation layer - Conv1_relu\n", + "layer_name2 = 'expanded_conv_project_BN'\n", + "optimal_thresholds_relu = {\n", + " error_method: data[\"quantized_model\"].layers[4].activation_holder_quantizer.get_config()['threshold'][0]\n", + " for error_method, data in quantized_models_dict.items()\n", + "}\n", + "\n", + "# layer 9 is the batch normalisation projection layer - Expanded_conv_project_BN\n", + "optimal_thresholds_project = {\n", + " error_method: data[\"quantized_model\"].layers[9].activation_holder_quantizer.get_config()['threshold'][0]\n", + " for error_method, data in quantized_models_dict.items()\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "XRAr8L5mvuLd", + "metadata": { + "id": "XRAr8L5mvuLd" + }, + "source": [ + "### Distribution Plots\n", + "Below are the activation distributions for the two selected layers: first, the ReLU activation layer, `Conv1_relu`, followed by the `expanded_conv_project_BN` layer.\n", + "\n", + "The second distribution clearly highlights the differences between the two error metrics, showing the impact of each on the resulting quantization threshold." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "VPb8tBNGpJjo", + "metadata": { + "id": "VPb8tBNGpJjo" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(10, 6))\n", + "plt.hist(all_activations_relu, bins=100, alpha=0.5, label='Original')\n", + "for method, threshold in optimal_thresholds_relu.items():\n", + " plt.axvline(threshold, linestyle='--', linewidth=2, label=f'{method}: {threshold:.2f}')\n", + "\n", + "plt.title('Activation Distribution with Optimal Quantization Thresholds First Relu Layer')\n", + "plt.xlabel('Activation Value')\n", + "plt.ylabel('Frequency')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "Df7eKzh4oj5X", + "metadata": { + "id": "Df7eKzh4oj5X" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(10, 6))\n", + "plt.hist(all_activations_project, bins=100, alpha=0.5, label='Original')\n", + "for method, threshold in optimal_thresholds_project.items():\n", + " plt.axvline(threshold, linestyle='--', linewidth=2, label=f'{method}: {threshold:.2f}')\n", + "\n", + "plt.title('Activation Distribution with Optimal Quantization Thresholds Project BN layer')\n", + "plt.xlabel('Activation Value')\n", + "plt.ylabel('Frequency')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4c967d41-439d-405b-815f-be641f1768fe", + "metadata": { + "id": "4c967d41-439d-405b-815f-be641f1768fe" + }, + "source": [ + "## Model Evaluation\n", + "Finally, we can demonstrate the impact of these different thresholds on the model's overall accuracy.\n", + "In order to evaluate our models, we first need to load the validation dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "val_dataset = get_dataset(batch_size=50, shuffle=False)" + ], + "metadata": { + "collapsed": false + }, + "id": "9199b59c4f10eca1" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", + "float_accuracy = float_model.evaluate(val_dataset)\n", + "print(f\"Float model's Top 1 accuracy on the Imagenet validation set: {(float_accuracy[1] * 100):.2f}%\")" + ], + "metadata": { + "collapsed": false + }, + "id": "631780a79e2cedf0" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613", + "metadata": { + "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613" + }, + "outputs": [], + "source": [ + "evaluation_results = {}\n", + "\n", + "for error_method, data in quantized_models_dict.items():\n", + " quantized_model = data[\"quantized_model\"]\n", + "\n", + " quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=[\"accuracy\"])\n", + "\n", + " results = quantized_model.evaluate(val_dataset, verbose=0) # Set verbose=0 to suppress the log messages\n", + "\n", + " evaluation_results[error_method] = results\n", + "\n", + " # Print the results\n", + " print(f\"Results for {error_method}: Loss = {results[0]}, Accuracy = {results[1]}\")" + ] + }, + { + "cell_type": "markdown", + "id": "GpEZ2E1qzWl3", + "metadata": { + "id": "GpEZ2E1qzWl3" + }, + "source": [ + "These results are consistent across many models, which is why MSE is set as the default method.\n", + "\n", + "Each of MCT's error methods impacts models differently, so it is recommended to include this metric as part of hyperparameter tuning when optimizing quantized model accuracy.\n", + "\n", + "\n", + "## Conclusion\n", + "In this tutorial, we explored the process of finding optimal activation thresholds using different error metrics in MCT’s post-training quantization workflow. By comparing the **MSE** and **No Clipping** methods, we demonstrated how the choice of threshold can significantly affect the activation distributions and, ultimately, the quantized model’s performance. While **MSE** is commonly the best choice and is used by default, it is essential to consider other error metrics during hyperparameter tuning to achieve the best results for different models.\n", + "\n", + "Understanding the impact of these thresholds on data loss and resolution is critical when fine-tuning the quantization process for deployment, making this a valuable step in building high-performance quantized models.\n", + "\n", + "\n", + "## Appendix\n", + "Below is a code snippet that can be used to extract information from each layer in the MCT quantization output, assisting in analyzing the layer-wise quantization details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "qml4LLmWZLP4", + "metadata": { + "id": "qml4LLmWZLP4" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "\n", + "quantized_model = data[\"quantized_model\"]\n", + "quantizer_object = quantized_model.layers[1]\n", + "\n", + "quantized_model = data[\"quantized_model\"]\n", + "\n", + "\n", + "relu_layer_indices = []\n", + "\n", + "\n", + "for i, layer in enumerate(quantized_model.layers):\n", + " # Convert the layer's configuration to a string\n", + " layer_config_str = str(layer.get_config())\n", + "\n", + " layer_class_str = str(layer.__class__.__name__)\n", + "\n", + " # Check if \"relu\" is mentioned in the layer's configuration or class name\n", + " if 'relu' in layer_config_str.lower() or 'relu' in layer_class_str.lower():\n", + " relu_layer_indices.append(i)\n", + "\n", + "print(\"Layer indices potentially using ReLU:\", relu_layer_indices)\n", + "print(\"Number of relu layers \" + str(len(relu_layer_indices)))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43f34133-8ed4-429a-a225-6fb6a6f5b207", + "metadata": { + "id": "43f34133-8ed4-429a-a225-6fb6a6f5b207" + }, + "outputs": [], + "source": [ + "for error_method, data in quantized_models_dict.items():\n", + " quantized_model = data[\"quantized_model\"]\n", + " print(quantized_model.layers[1])" + ] + }, + { + "cell_type": "markdown", + "id": "01c1645e-205c-4d9a-8af3-e497b3addec1", + "metadata": { + "id": "01c1645e-205c-4d9a-8af3-e497b3addec1" + }, + "source": [ + "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_z_score_threshold.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_z_score_threshold.ipynb index e57bf7a08..acbf5a1aa 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_z_score_threshold.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_z_score_threshold.ipynb @@ -1,847 +1,777 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20", - "metadata": { - "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20" - }, - "source": [ - "# Activation Z-Score Threshold Demonstration For Post-Training Quantization\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "9be59ea8-e208-4b64-aede-1dd6270b3540", - "metadata": { - "id": "9be59ea8-e208-4b64-aede-1dd6270b3540" - }, - "source": [ - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_z_score_threshold.ipynb)" - ] - }, - { - "cell_type": "markdown", - "id": "930e6d6d-4980-4d66-beed-9ff5a494acf9", - "metadata": { - "id": "930e6d6d-4980-4d66-beed-9ff5a494acf9" - }, - "source": [ - "## Overview" - ] - }, - { - "cell_type": "markdown", - "id": "699be4fd-d382-4eec-9d3f-e2e85cfb1762", - "metadata": { - "id": "699be4fd-d382-4eec-9d3f-e2e85cfb1762" - }, - "source": [ - "This tutorial demonstrates the process used to find the activation z-score threshold, a step that MCT can use during post-training quantization.\n", - "\n", - "In this example we will explore how setting different z scores effects threshold and accuracy. We will start by demonstrating how to apply the corresponding MCT configurations, then, we will feed a representative dataset through the model, plot the activation distribution of an activation layer with their respective MCT calculated z-score thresholds, and finally compare the quantized model accuracy of the examples of different z-score.\n" - ] - }, - { - "cell_type": "markdown", - "id": "85199e25-c587-41b1-aaf5-e1d23ce97ca1", - "metadata": { - "id": "85199e25-c587-41b1-aaf5-e1d23ce97ca1" - }, - "source": [ - "## Activation threshold explanation" - ] - }, - { - "cell_type": "markdown", - "id": "a89a17f4-30c9-4caf-a888-424f7a82fbc8", - "metadata": { - "id": "a89a17f4-30c9-4caf-a888-424f7a82fbc8" - }, - "source": [ - "During quantization process, thresholds are used to map a distribution of 32-bit float values to their quantized counterparts. Doing this with the least loss of data while maintaining the most representative range is important for final model accuracy.\n", - "\n", - "Some models exhibit anomolus values when fed a representative dataset. It is in the interest of the models accuracy to remove these values so that the quantization threshold results in a more reliable range mapping.\n", - "\n", - "MCT has the option to remove these using z-score thresholding. Allowing the user to remove data based on standard distributions.\n", - "\n", - "The Z-score of a value is calculated by subtracting the mean of the dataset from the value and then dividing by the standard deviation of the dataset. This measures how many standard deviations an element is from the mean.\n", - "\n", - "\n", - "\n", - "To calculate a threshold $t$ for quantization based on a Z-score threshold $Z_t$, you might define $t$ as a function of $Z_t$, $\\mu$, and $\\sigma$, such as:\n", - "\n", - "$$\n", - "t(Z_t) = μ + Z_t \\cdot σ\n", - "$$\n", - "\n", - "\n", - "Where:\n", - "\n", - "- $t(Z_t)$: The quantization threshold calculated based on a Z-score threshold $Z_t$.\n", - "- $Z_t$: The chosen Z-score threshold value, which determines how many standard deviations from the mean an activation needs to be to be considered for special handling (e.g., removal or adjustment) before the main quantization process.\n", - "- $\\mu = \\frac{1}{n_s} \\sum_{X \\in Fl(D)} X$: The mean of activations\n", - "- $\\sigma = \\sqrt{\\frac{1}{n_s} \\sum_{X \\in Fl(D)} (X - \\mu)^2}$: The standard deviation of activations in $Fl(D)$.\n", - "where:\n", - "- $Fl(D)$ is the activation distribution and $X$ is an individual activation.\n", - "\n", - "\n", - "This equation for $t(Z_t)$ allows you to set a threshold based on the statistical distribution of activations, identifying values that are unusually high or low relative to the rest of the data. These identified values can then be removed before applying the main quantization algorithm." - ] - }, - { - "cell_type": "markdown", - "id": "04228b7c-00f1-4ded-bead-722e2a4e89a0", - "metadata": { - "id": "04228b7c-00f1-4ded-bead-722e2a4e89a0" - }, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "markdown", - "id": "2657cf1a-654d-45a6-b877-8bf42fc26d0d", - "metadata": { - "id": "2657cf1a-654d-45a6-b877-8bf42fc26d0d" - }, - "source": [ - "Install and import the relevant packages:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", - "metadata": { - "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324" - }, - "outputs": [], - "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "!pip install -q mct-nightly" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19", - "metadata": { - "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19" - }, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import keras\n", - "import model_compression_toolkit as mct\n", - "import os" - ] - }, - { - "cell_type": "markdown", - "id": "z8F-avk3azgZ", - "metadata": { - "id": "z8F-avk3azgZ" - }, - "source": [ - "Clone MCT to gain access to tutorial scripts" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e3b675cf-e1b5-4249-a581-ffb9b1c16ba1", - "metadata": { - "id": "e3b675cf-e1b5-4249-a581-ffb9b1c16ba1" - }, - "outputs": [], - "source": [ - "!git clone https://github.com/sony/model_optimization.git local_mct\n", - "!pip install -r ./local_mct/requirements.txt\n", - "import sys\n", - "sys.path.insert(0,\"./local_mct\")\n", - "import tutorials.resources.utils.keras_tutorial_tools as tutorial_tools\n" - ] - }, - { - "cell_type": "markdown", - "id": "0c7fed0d-cfc8-41ee-adf1-22a98110397b", - "metadata": { - "id": "0c7fed0d-cfc8-41ee-adf1-22a98110397b" - }, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "markdown", - "id": "aecde59e4c37b1da", - "metadata": { - "collapsed": false, - "id": "aecde59e4c37b1da" - }, - "source": [ - "Load ImageNet classification dataset and seperate a small representative subsection of this dataset to use for quantization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "_ztv72uM6-UT", - "metadata": { - "id": "_ztv72uM6-UT" - }, - "outputs": [], - "source": [ - "if not os.path.isdir('imagenet'):\n", - " !mkdir imagenet\n", - " !wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", - " !mv ILSVRC2012_devkit_t12.tar.gz imagenet/\n", - " !wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", - " !mv ILSVRC2012_img_val.tar imagenet/" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "YVAoUjK47Zcp", - "metadata": { - "id": "YVAoUjK47Zcp" - }, - "outputs": [], - "source": [ - "import torchvision\n", - "if not os.path.isdir('imagenet/val'):\n", - " ds = torchvision.datasets.ImageNet(root='./imagenet', split='val')" - ] - }, - { - "cell_type": "markdown", - "id": "fcbb3eecae5346a9", - "metadata": { - "collapsed": false, - "id": "fcbb3eecae5346a9" - }, - "source": [ - "Here we create the representative dataset. For detail on this step see [ImageNet tutorial](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/imx500_notebooks/keras/example_keras_mobilenetv2_for_imx500.ipynb). If you are running locally a higher fraction of the dataset can be used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eda9ad33-f88c-4178-8f19-bac6b2b2e97b", - "metadata": { - "id": "eda9ad33-f88c-4178-8f19-bac6b2b2e97b" - }, - "outputs": [], - "source": [ - "REPRESENTATIVE_DATASET_FOLDER = './imagenet/val'\n", - "BATCH_SIZE = 20\n", - "fraction =0.001\n", - "model_version = 'MobileNet'\n", - "\n", - "preprocessor = tutorial_tools.DatasetPreprocessor(model_version=model_version)\n", - "representative_dataset_gen = preprocessor.get_representative_dataset(fraction, REPRESENTATIVE_DATASET_FOLDER, BATCH_SIZE)" - ] - }, - { - "cell_type": "markdown", - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", - "metadata": { - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5" - }, - "source": [ - "## MCT Quantization" - ] - }, - { - "cell_type": "markdown", - "id": "55edbb99-ab2f-4dde-aa74-4ddee61b2615", - "metadata": { - "id": "55edbb99-ab2f-4dde-aa74-4ddee61b2615" - }, - "source": [ - "This step we load the model and quantize with a few z-score thresholds.\n" - ] - }, - { - "cell_type": "markdown", - "id": "VMrcPUN6jPlB", - "metadata": { - "id": "VMrcPUN6jPlB" - }, - "source": [ - "First we load MobileNet from the keras library." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c431848f-a5f4-4737-a5c8-f046a8bca840", - "metadata": { - "id": "c431848f-a5f4-4737-a5c8-f046a8bca840" - }, - "outputs": [], - "source": [ - "from tensorflow.keras.applications import MobileNet\n", - "float_model = MobileNet(weights='imagenet')" - ] - }, - { - "cell_type": "markdown", - "id": "Pd8blHyKjWay", - "metadata": { - "id": "Pd8blHyKjWay" - }, - "source": [ - "Quantization perameters are defined. Here we will use default values apart from quantization method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ca971297-e00b-44b5-b9e1-e57ba5843e38", - "metadata": { - "id": "ca971297-e00b-44b5-b9e1-e57ba5843e38" - }, - "outputs": [], - "source": [ - "from model_compression_toolkit.core import QuantizationErrorMethod\n", - "\n", - "# Specify the IMX500-v1 target platform capability (TPC)\n", - "tpc = mct.get_target_platform_capabilities(\"tensorflow\", 'imx500', target_platform_version='v1')\n", - "\n", - "# List of error methods to iterate over\n", - "q_configs_dict = {}" - ] - }, - { - "cell_type": "markdown", - "id": "Vot-MCiWjzCE", - "metadata": { - "id": "Vot-MCiWjzCE" - }, - "source": [ - "You can edit the code below to quantize with other values of z-score." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "jtiZzXmTjxuI", - "metadata": { - "id": "jtiZzXmTjxuI" - }, - "outputs": [], - "source": [ - "# Z-score values to iterate over\n", - "z_score_values = [3,5,9]\n", - "\n", - "# Iterate and build the QuantizationConfig objects\n", - "for z_score in z_score_values:\n", - " q_config = mct.core.QuantizationConfig(\n", - " z_threshold=z_score,\n", - " )\n", - " q_configs_dict[z_score] = q_config\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "8W3Dcn0jkJOH", - "metadata": { - "id": "8W3Dcn0jkJOH" - }, - "source": [ - "Finally we quantize the model, this can take some time. Grab a coffee!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba0c6e55-d474-4dc3-9a43-44b736635998", - "metadata": { - "id": "ba0c6e55-d474-4dc3-9a43-44b736635998" - }, - "outputs": [], - "source": [ - "quantized_models_dict = {}\n", - "\n", - "for z_score, q_config in q_configs_dict.items():\n", - " # Create a CoreConfig object with the current quantization configuration\n", - " ptq_config = mct.core.CoreConfig(quantization_config=q_config)\n", - "\n", - " # Perform MCT post-training quantization\n", - " quantized_model, quantization_info = mct.ptq.keras_post_training_quantization(\n", - " in_model=float_model,\n", - " representative_data_gen=representative_dataset_gen,\n", - " core_config=ptq_config,\n", - " target_platform_capabilities=tpc\n", - " )\n", - "\n", - " # Update the dictionary to include the quantized model\n", - " quantized_models_dict[z_score] = {\n", - " \"quantization_config\": q_config,\n", - " \"quantized_model\": quantized_model,\n", - " \"quantization_info\": quantization_info\n", - " }\n" - ] - }, - { - "cell_type": "markdown", - "id": "A8UHRsh2khM4", - "metadata": { - "id": "A8UHRsh2khM4" - }, - "source": [ - "### Z-Score Threshold and Distribution Visulisation" - ] - }, - { - "cell_type": "markdown", - "id": "Y-0QLWFJkpFV", - "metadata": { - "id": "Y-0QLWFJkpFV" - }, - "source": [ - "To assist with understanding we will now plot the activation distribution of Mobilenet's first activation layer.\n", - "\n", - "This will be obtained by feeding the representative dataset through the model.\n", - "To see the distribution of the activations the model needs to be rebuilt upto and including the layer chosen for distribution visulisation.\n", - "\n", - "To see said layers z-score threshold values. we will need to calculate these manually using the equestion stated in the introduction.\n", - "\n", - "To plot the distribution we first need to list the layer names. With keras this can be done easily using the following. We established the index of the layer of interest using various checks that can be seen in the appendix section." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac", - "metadata": { - "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac" - }, - "outputs": [], - "source": [ - "#print layer name\n", - "print(float_model.layers[51].name)" - ] - }, - { - "cell_type": "markdown", - "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277", - "metadata": { - "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277" - }, - "source": [ - "The example activation layer in model is 'conv_dw_8_relu'.\n", - "\n", - "Use this layer name to create a model ending at conv_dw_8_relu" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d", - "metadata": { - "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d" - }, - "outputs": [], - "source": [ - "from tensorflow.keras.models import Model\n", - "layer_name1 = 'conv_dw_8_relu'\n", - "\n", - "layer_output1 = float_model.get_layer(layer_name1).output\n", - "activation_model_relu = Model(inputs=float_model.input, outputs=layer_output1)" - ] - }, - { - "cell_type": "markdown", - "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364", - "metadata": { - "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364" - }, - "source": [ - "Feed the representative dataset through these models and store the output." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eaeb9888-5d67-4979-af50-80781a811b4b", - "metadata": { - "id": "eaeb9888-5d67-4979-af50-80781a811b4b" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "activation_batches_relu = []\n", - "activation_batches_project = []\n", - "for images in representative_dataset_gen():\n", - " activations_relu = activation_model_relu.predict(images)\n", - " activation_batches_relu.append(activations_relu)\n", - "\n", - "all_activations_relu = np.concatenate(activation_batches_relu, axis=0).flatten()" - ] - }, - { - "cell_type": "markdown", - "id": "I5W9yY5DvOFr", - "metadata": { - "id": "I5W9yY5DvOFr" - }, - "source": [ - "We can calculate the z-score for a layer using the equations stated in the introduction." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "WDx-LQSyxpDK", - "metadata": { - "id": "WDx-LQSyxpDK" - }, - "outputs": [], - "source": [ - "optimal_thresholds_relu = {}\n", - "\n", - "# Calculate the mean and standard deviation of the activation data\n", - "mean = np.mean(all_activations_relu)\n", - "std_dev = np.std(all_activations_relu)\n", - "\n", - "# Calculate and store the threshold for each Z-score\n", - "for zscore in z_score_values:\n", - " optimal_threshold = zscore * std_dev + mean\n", - " optimal_thresholds_relu[f'z-score {zscore}'] = optimal_threshold" - ] - }, - { - "cell_type": "markdown", - "id": "XRAr8L5mvuLd", - "metadata": { - "id": "XRAr8L5mvuLd" - }, - "source": [ - "### Distribution Plots\n", - "\n", - "Here we plot the distribution from the resulting model along with its z score thresholds." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "VPb8tBNGpJjo", - "metadata": { - "id": "VPb8tBNGpJjo" - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "# Plotting\n", - "plt.figure(figsize=(10, 6))\n", - "plt.hist(all_activations_relu, bins=100, alpha=0.5, label='Activations')\n", - "for z_score, threshold in optimal_thresholds_relu.items():\n", - " random_color=np.random.rand(3,)\n", - " plt.axvline(threshold, linestyle='--', linewidth=2, color=random_color, label=f'{z_score}, z-score threshold: {threshold:.2f}')\n", - " z_score_1 = int(z_score.split(' ')[1]) # Splits the string and converts the second element to an integer\n", - " error_value = mse_error_thresholds[z_score_1] # Now using the correct integer key to access the value\n", - " plt.axvline(error_value, linestyle='-', linewidth=2, color=random_color, label=f'{z_score}, MSE error Threshold: {error_value:.2f}')\n", - "\n", - "plt.title('Activation Distribution with Optimal Quantization Thresholds - First ReLU Layer')\n", - "plt.xlabel('Activation Value')\n", - "plt.ylabel('Frequency')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "qbA6kFmw0vaf", - "metadata": { - "id": "qbA6kFmw0vaf" - }, - "source": [ - "Here it can plainly be seen the effect of z-score on error threshold. The lowest z-score of 3 reduces the error threshold for that layer." - ] - }, - { - "cell_type": "markdown", - "id": "4c967d41-439d-405b-815f-be641f1768fe", - "metadata": { - "id": "4c967d41-439d-405b-815f-be641f1768fe" - }, - "source": [ - "## Accuracy\n", - "\n", - "Finally we can show the effect of these different z-score thresholds on the models accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "092d9fd0-8005-4551-b853-3b52840639c2", - "metadata": { - "id": "092d9fd0-8005-4551-b853-3b52840639c2" - }, - "outputs": [], - "source": [ - "REPRESENTATIVE_DATASET_FOLDER = './imagenet/val'\n", - "BATCH_SIZE = 20\n", - "fraction =0.005\n", - "model_version = 'MobileNet'\n", - "\n", - "preprocessor = tutorial_tools.DatasetPreprocessor(model_version=model_version)\n", - "evaluation_dataset = preprocessor.get_validation_dataset_fraction(fraction, REPRESENTATIVE_DATASET_FOLDER, BATCH_SIZE)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8ebf7d04-7816-465c-9157-6068c0a4a08a", - "metadata": { - "id": "8ebf7d04-7816-465c-9157-6068c0a4a08a" - }, - "outputs": [], - "source": [ - "#prepare float model and evaluate\n", - "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=[\"accuracy\"])\n", - "results = float_model.evaluate(evaluation_dataset)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613", - "metadata": { - "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613" - }, - "outputs": [], - "source": [ - "#prepare quantised models and evaluate\n", - "evaluation_results = {}\n", - "\n", - "for z_score, data in quantized_models_dict.items():\n", - " quantized_model = data[\"quantized_model\"]\n", - "\n", - " quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=[\"accuracy\"])\n", - "\n", - " results = quantized_model.evaluate(evaluation_dataset, verbose=0) # Set verbose=0 to suppress the log messages\n", - "\n", - " evaluation_results[z_score] = results\n", - "\n", - " # Print the results\n", - " print(f\"Results for {z_score}: Loss = {results[0]}, Accuracy = {results[1]}\")" - ] - }, - { - "cell_type": "markdown", - "id": "GpEZ2E1qzWl3", - "metadata": { - "id": "GpEZ2E1qzWl3" - }, - "source": [ - "Here we can see very minor gains from adjusting the z-score threshold. For the majority of simple models this trend will likely follow. From testing we have found that transformer models have a tendancy to benefit from anomoly removal but it is always worth playing with these perameters if your quantised accuracy is distinctly lower than your float model accuracy.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "14877777", - "metadata": { - "id": "14877777" - }, - "source": [ - "## Conclusion" - ] - }, - { - "cell_type": "markdown", - "id": "bb7e1572", - "metadata": { - "id": "bb7e1572" - }, - "source": [ - "In this tutorial, we demonstrated the z-score thresholding step used during quantization. Please use this code to assist with choosing z-score thresholds for your own model.\n", - "\n", - "We have found a when adjusting z-score the sweet spot tends to be between 8 and 12. with no change above 12 and distribution distruction below 8. This will likely require a study on your part for your specific usecase.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "BVHmePYJe7he", - "metadata": { - "id": "BVHmePYJe7he" - }, - "source": [ - "## Appendix\n", - "\n", - "Below are a sellection of code samples used to establish the best layers to use for plotting thresholds and distributions.\n", - "\n", - "Firstly of the list of layers that are effected by this z-score adjustment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cn-Ac9br9Ltz", - "metadata": { - "id": "cn-Ac9br9Ltz" - }, - "outputs": [], - "source": [ - "# Initialize a dictionary to hold threshold values for comparison\n", - "thresholds_by_index = {}\n", - "\n", - "# Try to access each layer for each quantized model and collect threshold values\n", - "for z_score, data in quantized_models_dict.items():\n", - " quantized_model = data[\"quantized_model\"]\n", - " for layer_index in range(len(quantized_model.layers)):\n", - " try:\n", - " # Attempt to access the threshold value for this layer\n", - " threshold = quantized_model.layers[layer_index].activation_holder_quantizer.get_config()['threshold'][0]\n", - " # Store the threshold value for comparison\n", - " if layer_index not in thresholds_by_index:\n", - " thresholds_by_index[layer_index] = set()\n", - " thresholds_by_index[layer_index].add(threshold)\n", - " except Exception as e:\n", - " pass\n", - "\n", - "# Find indices where threshold values are not consistent\n", - "inconsistent_indices = [index for index, thresholds in thresholds_by_index.items() if len(thresholds) > 1]\n", - "\n", - "print(\"Inconsistent indices:\", inconsistent_indices)\n" - ] - }, - { - "cell_type": "markdown", - "id": "PiNdvojz_FDN", - "metadata": { - "id": "PiNdvojz_FDN" - }, - "source": [ - "Choosing randomly from these we check the thresholds" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "Huv0u6z106lX", - "metadata": { - "id": "Huv0u6z106lX" - }, - "outputs": [], - "source": [ - "mse_error_thresholds = {\n", - " z_score: data[\"quantized_model\"].layers[52].activation_holder_quantizer.get_config()['threshold'][0]\n", - " for z_score, data in quantized_models_dict.items()\n", - "}\n", - "print(mse_error_thresholds)" - ] - }, - { - "cell_type": "markdown", - "id": "0YPqhQOh_N2r", - "metadata": { - "id": "0YPqhQOh_N2r" - }, - "source": [ - "We now want to varify which layers matchup indicies based on layer names of the float model. For the example of 52 there is no matching layer as it is a quantization of the previous layer. Checking 51 we can see that the indicies matches upto the layer name conv_dw_8_relu, we can use this to plot the distribution." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "rWGx5-6uu5H-", - "metadata": { - "id": "rWGx5-6uu5H-" - }, - "outputs": [], - "source": [ - "target_z_score = 9\n", - "\n", - "for index, layer in enumerate(float_model.layers):\n", - " search_string = str(layer.name)\n", - "\n", - " # Check if the target_z_score is in the quantized_models_dict\n", - " if target_z_score in quantized_models_dict:\n", - " data = quantized_models_dict[target_z_score]\n", - " # Iterate over each layer of the target quantized model\n", - " for quantized_index, quantized_layer in enumerate(data[\"quantized_model\"].layers):\n", - " found = search_string in str(quantized_layer.get_config())\n", - " # If found, print details including the indices of the matching layers\n", - " if found:\n", - " print(f\"Float Model Layer Index {index} & Quantized Model Layer Index {quantized_index}: Found match in layer name {search_string}\")\n", - " else:\n", - " print(f\"Z-Score {target_z_score} not found in quantized_models_dict.\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "AW_vC22Qw32E", - "metadata": { - "id": "AW_vC22Qw32E" - }, - "outputs": [], - "source": [ - "data[\"quantized_model\"].layers[51].get_config()" - ] - }, - { - "cell_type": "markdown", - "id": "01c1645e-205c-4d9a-8af3-e497b3addec1", - "metadata": { - "id": "01c1645e-205c-4d9a-8af3-e497b3addec1" - }, - "source": [ - "\n", - "\n", - "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", - "\n", - "Licensed under the Apache License, Version 2.0 (the \"License\");\n", - "you may not use this file except in compliance with the License.\n", - "You may obtain a copy of the License at\n", - "\n", - " http://www.apache.org/licenses/LICENSE-2.0\n", - "\n", - "Unless required by applicable law or agreed to in writing, software\n", - "distributed under the License is distributed on an \"AS IS\" BASIS,\n", - "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - "See the License for the specific language governing permissions and\n", - "limitations under the License.\n" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "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.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "cells": [ + { + "cell_type": "markdown", + "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20", + "metadata": { + "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20" + }, + "source": [ + "# Enhancing Post-Training Quantization with Z-Score Outlier Handling\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_activation_z_score_threshold.ipynb)\n", + "\n", + "## Overview\n", + "This tutorial demonstrates the process used to find the activation z-score threshold, a step that MCT can use during post-training quantization.\n", + "\n", + "In this example we will explore how setting different z scores effects threshold and accuracy. We will start by demonstrating how to apply the corresponding MCT configurations, then, we will feed a representative dataset through the model, plot the activation distribution of an activation layer with their respective MCT calculated z-score thresholds, and finally compare the quantized model accuracy of the examples of different z-score.\n", + "\n", + "## Managing Outliers with Activation Z-Score Thresholding\n", + "During the quantization process, thresholds are used to map a distribution of 32-bit floating-point values to their quantized equivalents. Achieving this with minimal data loss while preserving the most representative range is crucial for maintaining the model’s final accuracy.\n", + "\n", + "Some models can exhibit anomalous values when evaluated on a representative dataset. These outliers can negatively impact the range selection, leading to suboptimal quantization. To ensure a more reliable range mapping, it is beneficial to remove these values.\n", + "\n", + "The **Model Compression Toolkit (MCT)** provides an option to filter out such outliers using **Z-score thresholding**, allowing users to exclude values based on their deviation from the standard distribution.\n", + "\n", + "The Z-score of a value is calculated by subtracting the dataset’s mean from the value and then dividing by the standard deviation. This metric indicates how many standard deviations a particular value is away from the mean.\n", + "\n", + "\n", + "\n", + "The quantization threshold, $t$, is defined as a function of $Z_t$, the mean, $μ$, and the standard deviation, $σ$, of the activation values:\n", + "\n", + "$$\n", + "t(Z_t) = μ + Z_t \\cdot σ\n", + "$$\n", + "\n", + "\n", + "Where:\n", + "\n", + "- $t(Z_t)$: The calculated quantization threshold based on the Z-score threshold $Z_t$.\n", + "- $Z_t$: The chosen Z-score threshold. It indicates how many standard deviations an activation value must be from the mean to qualify for removal or special handling prior to quantization.\n", + "- $\\mu = \\frac{1}{n_s} \\sum_{X \\in F_l(D)} X$: The mean of activations\n", + "- $\\sigma = \\sqrt{\\frac{1}{n_s} \\sum_{X \\in F_l(D)} (X - \\mu)^2}$: The standard deviation of activations in $F_l(D)$.\n", + " where:\n", + " - $F_l(D)$: Represents the distribution of activation values.\n", + " - $X$: An individual activation within the distribution.\n", + "\n", + "\n", + "This equation for $t(Z_t)$ enables the identification of activation values that deviate significantly from the mean, helping to remove outliers before the main quantization step. This process results in a more reliable range for mapping floating-point values to quantized representations, ultimately improving quantization accuracy.\n", + "## Setup\n", + "Install the relevant packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", + "metadata": { + "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324" + }, + "outputs": [], + "source": [ + "TF_VER = '2.14'\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + }, + "id": "bd8e08612add2018" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19", + "metadata": { + "id": "b3f0acc8-281c-4bca-b0b9-3d7677105f19" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import keras" + ] + }, + { + "cell_type": "markdown", + "source": [ + "Load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." + ], + "metadata": { + "collapsed": false + }, + "id": "fd5ac404451fd924" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "\n", + "float_model = MobileNetV2()" + ], + "metadata": { + "collapsed": false + }, + "id": "69daa2d5d731b157" + }, + { + "cell_type": "markdown", + "source": [ + "## Dataset preparation\n", + "### Download the ImageNet validation set\n", + "Download the ImageNet dataset with only the validation split.\n", + "**Note:** For demonstration purposes we use the validation set for the model quantization routines. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", + "\n", + "This step may take several minutes..." + ], + "metadata": { + "collapsed": false + }, + "id": "a5584696d8f09653" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import os\n", + " \n", + "if not os.path.isdir('imagenet'):\n", + " !mkdir imagenet\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", + " \n", + " !cd imagenet && tar -xzf ILSVRC2012_devkit_t12.tar.gz && \\\n", + " mkdir ILSVRC2012_img_val && tar -xf ILSVRC2012_img_val.tar -C ILSVRC2012_img_val" + ], + "metadata": { + "collapsed": false + }, + "id": "66a1e4f3878aa76b" + }, + { + "cell_type": "markdown", + "source": [ + "The following code organizes the extracted data into separate folders for each label, making it compatible with Keras dataset loaders." + ], + "metadata": { + "collapsed": false + }, + "id": "c343537ba9ba1e6d" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "import shutil\n", + "\n", + "root = Path('./imagenet')\n", + "imgs_dir = root / 'ILSVRC2012_img_val'\n", + "target_dir = root /'val'\n", + "\n", + "def extract_labels():\n", + " !pip install -q scipy\n", + " import scipy\n", + " mat = scipy.io.loadmat(root / 'ILSVRC2012_devkit_t12/data/meta.mat', squeeze_me=True)\n", + " cls_to_nid = {s[0]: s[1] for i, s in enumerate(mat['synsets']) if s[4] == 0} \n", + " with open(root / 'ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt', 'r') as f:\n", + " return [cls_to_nid[int(cls)] for cls in f.readlines()]\n", + "\n", + "if not target_dir.exists():\n", + " labels = extract_labels()\n", + " for lbl in set(labels):\n", + " os.makedirs(target_dir / lbl)\n", + " \n", + " for img_file, lbl in zip(sorted(os.listdir(imgs_dir)), labels):\n", + " shutil.move(imgs_dir / img_file, target_dir / lbl)\n" + ], + "metadata": { + "collapsed": false + }, + "id": "bddd52741649281e" + }, + { + "cell_type": "markdown", + "source": [ + "These functions generate a `tf.data.Dataset` from image files in a directory." + ], + "metadata": { + "collapsed": false + }, + "id": "53bff06ed1608b1b" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "def imagenet_preprocess_input(images, labels):\n", + " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels\n", + "\n", + "def get_dataset(batch_size, shuffle):\n", + " dataset = tf.keras.utils.image_dataset_from_directory(\n", + " directory='./imagenet/val',\n", + " batch_size=batch_size,\n", + " image_size=[224, 224],\n", + " shuffle=shuffle,\n", + " crop_to_aspect_ratio=True,\n", + " interpolation='bilinear')\n", + " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)), num_parallel_calls=tf.data.AUTOTUNE)\n", + " dataset = dataset.prefetch(buffer_size=tf.data.AUTOTUNE)\n", + " return dataset" + ], + "metadata": { + "collapsed": false + }, + "id": "73ad65d39184ac57" + }, + { + "cell_type": "markdown", + "source": [ + "## Representative Dataset\n", + "For quantization with MCT, we need to define a representative dataset required by the PTQ algorithm. This dataset is a generator that returns a list of images:" + ], + "metadata": { + "collapsed": false + }, + "id": "fb36537e4308b48e" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "batch_size = 32\n", + "n_iter = 10\n", + "\n", + "dataset = get_dataset(batch_size, shuffle=True)\n", + "\n", + "def representative_dataset_gen():\n", + " for _ in range(n_iter):\n", + " yield [dataset.take(1).get_single_element()[0].numpy()]" + ], + "metadata": { + "collapsed": false + }, + "id": "49f40f3ea3fc8855" + }, + { + "cell_type": "markdown", + "source": [ + "## Target Platform Capabilities\n", + "MCT optimizes the model for dedicated hardware. This is done using TPC (for more details, please visit our [documentation](https://sony.github.io/model_optimization/docs/api/api_docs/modules/target_platform.html)). Here, we use the default Tensorflow TPC:" + ], + "metadata": { + "collapsed": false + }, + "id": "e7197e9b332c3bde" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import model_compression_toolkit as mct\n", + "\n", + "# Get a TargetPlatformCapabilities object that models the hardware for the quantized model inference. Here, for example, we use the default platform that is attached to a Keras layers representation.\n", + "target_platform_cap = mct.get_target_platform_capabilities('tensorflow', 'default')" + ], + "metadata": { + "collapsed": false + }, + "id": "d1d179f65e3fc09f" + }, + { + "cell_type": "markdown", + "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", + "metadata": { + "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5" + }, + "source": [ + "## Post-Training Quantization using MCT\n", + "This step we quantize the model with a few Z-score thresholds.\n", + "The quantization parameters are predefined, and we use the default values except for the quantization method. Feel free to modify the code below to experiment with other Z-scores values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "jtiZzXmTjxuI", + "metadata": { + "id": "jtiZzXmTjxuI" + }, + "outputs": [], + "source": [ + "# List of error methods to iterate over\n", + "q_configs_dict = {}\n", + "\n", + "# Z-score values to iterate over\n", + "z_score_values = [3,5,9]\n", + "\n", + "# Iterate and build the QuantizationConfig objects\n", + "for z_score in z_score_values:\n", + " q_config = mct.core.QuantizationConfig(\n", + " z_threshold=z_score,\n", + " )\n", + " q_configs_dict[z_score] = q_config" + ] + }, + { + "cell_type": "markdown", + "id": "8W3Dcn0jkJOH", + "metadata": { + "id": "8W3Dcn0jkJOH" + }, + "source": [ + "Now we will run post-training quantization for each configuration:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba0c6e55-d474-4dc3-9a43-44b736635998", + "metadata": { + "id": "ba0c6e55-d474-4dc3-9a43-44b736635998" + }, + "outputs": [], + "source": [ + "quantized_models_dict = {}\n", + "\n", + "for z_score, q_config in q_configs_dict.items():\n", + " # Create a CoreConfig object with the current quantization configuration\n", + " ptq_config = mct.core.CoreConfig(quantization_config=q_config)\n", + "\n", + " # Perform MCT post-training quantization\n", + " quantized_model, quantization_info = mct.ptq.keras_post_training_quantization(\n", + " in_model=float_model,\n", + " representative_data_gen=representative_dataset_gen,\n", + " core_config=ptq_config,\n", + " target_platform_capabilities=target_platform_cap\n", + " )\n", + "\n", + " # Update the dictionary to include the quantized model\n", + " quantized_models_dict[z_score] = {\n", + " \"quantization_config\": q_config,\n", + " \"quantized_model\": quantized_model,\n", + " \"quantization_info\": quantization_info\n", + " }\n" + ] + }, + { + "cell_type": "markdown", + "id": "A8UHRsh2khM4", + "metadata": { + "id": "A8UHRsh2khM4" + }, + "source": [ + "### Z-Score Threshold and Distribution Visualization\n", + "To aid in understanding, we will plot the activation distribution of an activation layer in MobileNetV2. This distribution will be generated by inferring a representative dataset through the model.\n", + "\n", + "To visualize the activations, the model must be rebuilt up to and including the selected layer. Once the activations are extracted, we can calculate their Z-score threshold values manually using the equation provided in the introduction.\n", + "\n", + "Before plotting the distribution, we need to list the layer names. With Keras, this can be done easily using the following code. We determined the index of the layer of interest through a series of checks, which are detailed in the appendix section." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac", + "metadata": { + "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac" + }, + "outputs": [], + "source": [ + "#print layer name\n", + "layer_name = float_model.layers[51].name\n", + "print(layer_name)" + ] + }, + { + "cell_type": "markdown", + "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277", + "metadata": { + "id": "c38d28f3-c947-4c7c-aafa-e96cc3864277" + }, + "source": [ + "The example activation layer in the model is named `conv_dw_8_relu`.\n", + "\n", + "We will use this layer name to build a model that ends at `conv_dw_8_relu`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d", + "metadata": { + "id": "1f9dd3f3-6e22-4be9-9beb-29568ff14c9d" + }, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Model\n", + "\n", + "layer_output = float_model.get_layer(layer_name).output\n", + "activation_model_relu = Model(inputs=float_model.input, outputs=layer_output)" + ] + }, + { + "cell_type": "markdown", + "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364", + "metadata": { + "id": "ccc81508-01e5-421c-9b48-6ed3ce5b7364" + }, + "source": [ + "Infer the representative dataset using these models and store the outputs for further analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eaeb9888-5d67-4979-af50-80781a811b4b", + "metadata": { + "id": "eaeb9888-5d67-4979-af50-80781a811b4b" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "activation_batches_relu = []\n", + "activation_batches_project = []\n", + "for images in representative_dataset_gen():\n", + " activations_relu = activation_model_relu.predict(images)\n", + " activation_batches_relu.append(activations_relu)\n", + "\n", + "all_activations_relu = np.concatenate(activation_batches_relu, axis=0).flatten()" + ] + }, + { + "cell_type": "markdown", + "id": "I5W9yY5DvOFr", + "metadata": { + "id": "I5W9yY5DvOFr" + }, + "source": [ + "We can compute the Z-score for a layer using the formulas provided in the introduction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "WDx-LQSyxpDK", + "metadata": { + "id": "WDx-LQSyxpDK" + }, + "outputs": [], + "source": [ + "optimal_thresholds_relu = {}\n", + "\n", + "# Calculate the mean and standard deviation of the activation data\n", + "mean = np.mean(all_activations_relu)\n", + "std_dev = np.std(all_activations_relu)\n", + "\n", + "# Calculate and store the threshold for each Z-score\n", + "for zscore in z_score_values:\n", + " optimal_threshold = zscore * std_dev + mean\n", + " optimal_thresholds_relu[f'z-score {zscore}'] = optimal_threshold" + ] + }, + { + "cell_type": "markdown", + "id": "XRAr8L5mvuLd", + "metadata": { + "id": "XRAr8L5mvuLd" + }, + "source": [ + "### Distribution Plots\n", + "In this section, we visualize the activation distribution from the constructed model along with the corresponding Z-score thresholds.\n", + "From this list, we randomly select layers and evaluate their corresponding thresholds." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "mse_error_thresholds = {\n", + " z_score: data[\"quantized_model\"].layers[53].activation_holder_quantizer.get_config()['threshold'][0]\n", + " for z_score, data in quantized_models_dict.items()\n", + "}\n", + "print(mse_error_thresholds)" + ], + "metadata": { + "collapsed": false + }, + "id": "dd8a1bef743d9711" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "VPb8tBNGpJjo", + "metadata": { + "id": "VPb8tBNGpJjo" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(10, 6))\n", + "plt.hist(all_activations_relu, bins=100, alpha=0.5, label='Activations')\n", + "for z_score, threshold in optimal_thresholds_relu.items():\n", + " random_color=np.random.rand(3,)\n", + " plt.axvline(threshold, linestyle='--', linewidth=2, color=random_color, label=f'{z_score}, z-score threshold: {threshold:.2f}')\n", + " z_score_1 = int(z_score.split(' ')[1]) # Splits the string and converts the second element to an integer\n", + " error_value = mse_error_thresholds[z_score_1] # Now using the correct integer key to access the value\n", + " plt.axvline(error_value, linestyle='-', linewidth=2, color=random_color, label=f'{z_score}, MSE error Threshold: {error_value:.2f}')\n", + "\n", + "plt.title('Activation Distribution with Optimal Quantization Thresholds - First ReLU Layer')\n", + "plt.xlabel('Activation Value')\n", + "plt.ylabel('Frequency')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "qbA6kFmw0vaf", + "metadata": { + "id": "qbA6kFmw0vaf" + }, + "source": [ + "The impact of the Z-score on the error threshold is clearly visible here. A lower Z-score, such as 3, decreases the error threshold for the given layer." + ] + }, + { + "cell_type": "markdown", + "id": "4c967d41-439d-405b-815f-be641f1768fe", + "metadata": { + "id": "4c967d41-439d-405b-815f-be641f1768fe" + }, + "source": [ + "## Model Evaluation\n", + "Finally, we can demonstrate how varying Z-score thresholds affect the model's accuracy.\n", + "In order to evaluate our models, we first need to load the validation dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "val_dataset = get_dataset(batch_size=50, shuffle=False)" + ], + "metadata": { + "collapsed": false + }, + "id": "edb94bd69d88e1a2" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ebf7d04-7816-465c-9157-6068c0a4a08a", + "metadata": { + "id": "8ebf7d04-7816-465c-9157-6068c0a4a08a" + }, + "outputs": [], + "source": [ + "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", + "float_accuracy = float_model.evaluate(val_dataset)\n", + "print(f\"Float model's Top 1 accuracy on the Imagenet validation set: {(float_accuracy[1] * 100):.2f}%\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613", + "metadata": { + "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613" + }, + "outputs": [], + "source": [ + "#prepare quantised models and evaluate\n", + "evaluation_results = {}\n", + "\n", + "for z_score, data in quantized_models_dict.items():\n", + " quantized_model = data[\"quantized_model\"]\n", + "\n", + " quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=[\"accuracy\"])\n", + "\n", + " results = quantized_model.evaluate(val_dataset, verbose=0) # Set verbose=0 to suppress the log messages\n", + "\n", + " evaluation_results[z_score] = results\n", + "\n", + " # Print the results\n", + " print(f\"Results for {z_score}: Loss = {results[0]}, Accuracy = {results[1]}\")" + ] + }, + { + "cell_type": "markdown", + "id": "GpEZ2E1qzWl3", + "metadata": { + "id": "GpEZ2E1qzWl3" + }, + "source": [ + "We observe only minor improvements when adjusting the Z-score threshold. This pattern is common for most simple models. However, our testing shows that transformer models tend to benefit more from outlier removal. It is advisable to experiment with these parameters if the quantized accuracy is noticeably lower than the float model’s accuracy." + ] + }, + { + "cell_type": "markdown", + "id": "14877777", + "metadata": { + "id": "14877777" + }, + "source": [ + "## Conclusion\n", + "In this tutorial, we demonstrated the use of Z-score thresholding as a critical step in the quantization process. This technique helps refine activation ranges by removing outliers, ultimately leading to improved quantized model accuracy. You can use the provided code as a starting point to experiment with selecting optimal Z-score thresholds for your own models.\n", + "\n", + "Our testing indicates that the optimal Z-score threshold typically falls between 8 and 12. Setting the threshold above 12 tends to show negligible improvement, while values below 8 may distort the distribution. However, finding the right threshold will require experimentation based on the specific characteristics of your model and use case.\n", + "\n", + "By applying Z-score thresholding thoughtfully, you can mitigate quantization errors and ensure that the quantized model's performance remains as close as possible to that of the original floating-point version." + ] + }, + { + "cell_type": "markdown", + "id": "BVHmePYJe7he", + "metadata": { + "id": "BVHmePYJe7he" + }, + "source": [ + "## Appendix\n", + "Below are selected code samples used to identify the most suitable layers for plotting thresholds and distributions.\n", + "\n", + "**Listing Layers Affected by Z-Score Adjustments**\n", + "The following code snippet provides a list of layers that are impacted by Z-score thresholding, helping to determine which layers to focus on when visualizing distributions:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cn-Ac9br9Ltz", + "metadata": { + "id": "cn-Ac9br9Ltz" + }, + "outputs": [], + "source": [ + "# Initialize a dictionary to hold threshold values for comparison\n", + "thresholds_by_index = {}\n", + "\n", + "# Try to access each layer for each quantized model and collect threshold values\n", + "for z_score, data in quantized_models_dict.items():\n", + " quantized_model = data[\"quantized_model\"]\n", + " for layer_index in range(len(quantized_model.layers)):\n", + " try:\n", + " # Attempt to access the threshold value for this layer\n", + " threshold = quantized_model.layers[layer_index].activation_holder_quantizer.get_config()['threshold'][0]\n", + " # Store the threshold value for comparison\n", + " if layer_index not in thresholds_by_index:\n", + " thresholds_by_index[layer_index] = set()\n", + " thresholds_by_index[layer_index].add(threshold)\n", + " except Exception as e:\n", + " pass\n", + "\n", + "# Find indices where threshold values are not consistent\n", + "inconsistent_indices = [index for index, thresholds in thresholds_by_index.items() if len(thresholds) > 1]\n", + "\n", + "print(\"Inconsistent indices:\", inconsistent_indices)\n" + ] + }, + { + "cell_type": "markdown", + "id": "0YPqhQOh_N2r", + "metadata": { + "id": "0YPqhQOh_N2r" + }, + "source": [ + "\n", + "Next, we want to verify which layers correspond to the indices based on the layer names in the original float model. For example, index 52 has no matching layer, as it represents a quantized version of the previous layer. However, checking index 51 reveals that it aligns with the layer named `conv_dw_8_relu`, which we can use to plot the distribution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "rWGx5-6uu5H-", + "metadata": { + "id": "rWGx5-6uu5H-" + }, + "outputs": [], + "source": [ + "target_z_score = 9\n", + "\n", + "for index, layer in enumerate(float_model.layers):\n", + " search_string = str(layer.name)\n", + "\n", + " # Check if the target_z_score is in the quantized_models_dict\n", + " if target_z_score in quantized_models_dict:\n", + " data = quantized_models_dict[target_z_score]\n", + " # Iterate over each layer of the target quantized model\n", + " for quantized_index, quantized_layer in enumerate(data[\"quantized_model\"].layers):\n", + " found = search_string in str(quantized_layer.get_config())\n", + " # If found, print details including the indices of the matching layers\n", + " if found:\n", + " print(f\"Float Model Layer Index {index} & Quantized Model Layer Index {quantized_index}: Found match in layer name {search_string}\")\n", + " else:\n", + " print(f\"Z-Score {target_z_score} not found in quantized_models_dict.\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "AW_vC22Qw32E", + "metadata": { + "id": "AW_vC22Qw32E" + }, + "outputs": [], + "source": [ + "data[\"quantized_model\"].layers[51].get_config()" + ] + }, + { + "cell_type": "markdown", + "id": "01c1645e-205c-4d9a-8af3-e497b3addec1", + "metadata": { + "id": "01c1645e-205c-4d9a-8af3-e497b3addec1" + }, + "source": [ + "\n", + "\n", + "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_export.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_export.ipynb index 3ec13eea0..0ea59fa7d 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_export.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_export.ipynb @@ -1,292 +1,316 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Export Quantized Keras Model\n", - "\n", - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_export.ipynb)\n", - "\n", - "\n", - "To export a TensorFlow model as a quantized model, it is necessary to first apply quantization\n", - "to the model using MCT:\n", - "\n", - "\n", - "\n" - ], - "metadata": { - "id": "UJDzewEYfSN5" - } - }, - { - "cell_type": "code", - "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "! pip install -q mct-nightly" - ], - "metadata": { - "id": "qNddNV6TEsX0" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "import numpy as np\n", - "from keras.applications import MobileNetV2\n", - "import model_compression_toolkit as mct\n", - "\n", - "# Create a model\n", - "float_model = MobileNetV2()\n", - "# Quantize the model.\n", - "# Notice that here the representative dataset is random for demonstration only.\n", - "quantized_exportable_model, _ = mct.ptq.keras_post_training_quantization(float_model,\n", - " representative_data_gen=lambda: [np.random.random((1, 224, 224, 3))])" - ], - "metadata": { - "id": "eheBYKxRDFgx" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "\n", - "\n", - "### keras\n", - "\n", - "The model will be exported as a tensorflow `.keras` model where weights and activations are quantized but represented using a float32 dtype.\n", - "Two optional quantization formats are available: MCTQ and FAKELY_QUANT.\n", - "\n", - "#### MCTQ\n", - "\n", - "By default, `mct.exporter.keras_export_model` will export the quantized Keras model to\n", - "a .keras model with custom quantizers from mct_quantizers module.\n", - "\n", - "\n" - ], - "metadata": { - "id": "-n70LVe6DQPw" - } - }, - { - "cell_type": "code", - "source": [ - "# Path of exported model\n", - "keras_file_path = 'exported_model_mctq.keras'\n", - "\n", - "# Export a keras model with mctq custom quantizers.\n", - "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", - " save_model_path=keras_file_path)" - ], - "metadata": { - "id": "PO-Hh0bzD1VJ" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "Notice that the model has the same size as the quantized exportable model as weights data types are float.\n", - "\n", - "#### MCTQ - Loading Exported Model\n", - "\n", - "To load the exported model with MCTQ quantizers, use `mct.keras_load_quantized_model`:" - ], - "metadata": { - "id": "Bwx5rxXDF_gb" - } - }, - { - "cell_type": "code", - "source": [ - "loaded_model = mct.keras_load_quantized_model(keras_file_path)" - ], - "metadata": { - "id": "q235XNJQmTdd" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "\n", - "#### Fakely-Quantized" - ], - "metadata": { - "id": "sOmDjSehlQba" - } - }, - { - "cell_type": "code", - "source": [ - "# Path of exported model\n", - "keras_file_path = 'exported_model_fakequant.keras'\n", - "\n", - "# Use mode KerasExportSerializationFormat.KERAS for a .keras model\n", - "# and QuantizationFormat.FAKELY_QUANT for fakely-quantized weights\n", - "# and activations.\n", - "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", - " save_model_path=keras_file_path,\n", - " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)" - ], - "metadata": { - "id": "WLyHEEiwGByT" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "Notice that the fakely-quantized model has the same size as the quantized exportable model as weights data types are\n", - "float.\n", - "\n", - "\n", - "\n", - "### TFLite\n", - "The tflite serialization format export in two qauntization formats: INT8 and FAKELY_QUANT.\n", - "\n", - "#### INT8 TFLite\n", - "\n", - "The model will be exported as a tflite model where weights and activations are represented as 8bit integers." - ], - "metadata": { - "id": "-L1aRxFGGFeF" - } - }, - { - "cell_type": "code", - "source": [ - "tflite_file_path = 'exported_model_int8.tflite'\n", - "\n", - "# Use mode KerasExportSerializationFormat.TFLITE for tflite model and quantization_format.INT8.\n", - "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", - " save_model_path=tflite_file_path,\n", - " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", - " quantization_format=mct.exporter.QuantizationFormat.INT8)" - ], - "metadata": { - "id": "V4I-p1q5GLzs" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "Compare size of float and quantized model:\n" - ], - "metadata": { - "id": "SBqtJV9AGRzN" - } - }, - { - "cell_type": "code", - "source": [ - "import os\n", - "\n", - "# Save float model to measure its size\n", - "float_file_path = 'exported_model_float.keras'\n", - "float_model.save(float_file_path)\n", - "\n", - "print(\"Float model in Mb:\", os.path.getsize(float_file_path) / float(2 ** 20))\n", - "print(\"Quantized model in Mb:\", os.path.getsize(tflite_file_path) / float(2 ** 20))" - ], - "metadata": { - "id": "LInM16OMGUtF" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "\n", - "#### Fakely-Quantized TFLite\n", - "\n", - "The model will be exported as a tflite model where weights and activations are quantized but represented with a float data type.\n", - "\n", - "##### Usage Example" - ], - "metadata": { - "id": "9eVDoIHiGX5-" - } - }, - { - "cell_type": "code", - "source": [ - "# Path of exported model\n", - "tflite_file_path = 'exported_model_fakequant.tflite'\n", - "\n", - "\n", - "# Use mode KerasExportSerializationFormat.TFLITE for tflite model and QuantizationFormat.FAKELY_QUANT for fakely-quantized weights\n", - "# and activations.\n", - "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", - " save_model_path=tflite_file_path,\n", - " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", - " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)" - ], - "metadata": { - "id": "0OYLAbI8Gawu" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "\n", - "\n", - "\n", - "\n", - "Notice that the fakely-quantized model has the same size as the quantized exportable model as weights data types are\n", - "float.\n" - ], - "metadata": { - "id": "voOrtCroD-HE" - } - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bb7e1572" - }, - "source": [ - "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", - "\n", - "Licensed under the Apache License, Version 2.0 (the \"License\");\n", - "you may not use this file except in compliance with the License.\n", - "You may obtain a copy of the License at\n", - "\n", - " http://www.apache.org/licenses/LICENSE-2.0\n", - "\n", - "Unless required by applicable law or agreed to in writing, software\n", - "distributed under the License is distributed on an \"AS IS\" BASIS,\n", - "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - "See the License for the specific language governing permissions and\n", - "limitations under the License.\n" - ] - } - ] + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Export a Quantized Keras Model With the Model Compression Toolkit (MCT)\n", + "\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_export.ipynb)\n", + "\n", + "## Overview\n", + "This tutorial demonstrates how to export a Keras model to `.keras` and TFLite formats using the Model Compression Toolkit (MCT). It covers the steps of creating a simple Keras model, applying post-training quantization (PTQ) using MCT, and then exporting the quantized model to `.keras` and TFLite. The tutorial also shows how to use the exported model for inference.\n", + "\n", + "## Summary\n", + "In this tutorial, we will cover:\n", + "\n", + "1. Constructing a simple Keras model for demonstration purposes.\n", + "2. Applying post-training quantization to the model using the Model Compression Toolkit.\n", + "3. Exporting the quantized model to the `.keras` and `TFLite` formats.\n", + "4. Using the exported model for inference.\n", + "\n", + "## Setup\n", + "Install the relevant packages:" + ], + "metadata": { + "id": "UJDzewEYfSN5" + } + }, + { + "cell_type": "code", + "source": [ + "TF_VER = '2.14.0'\n", + "\n", + "!pip install -q tensorflow=={TF_VER}" + ], + "metadata": { + "id": "qNddNV6TEsX0" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "\n", + "float_model = MobileNetV2()" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [ + "## Quantize the Model with the Model Compression Toolkit\n", + "Let's begin by applying quantization using MCT. This process will prepare the model for export.\n", + "\n", + "### Representative Dataset\n", + "For post-training quantization with MCT, a representative dataset is required. In this example, we use a random dataset for demonstration purposes." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import numpy as np\n", + "import model_compression_toolkit as mct\n", + "\n", + "# Quantize the model.\n", + "# Notice that here the representative dataset is random for demonstration only.\n", + "quantized_exportable_model, _ = mct.ptq.keras_post_training_quantization(float_model,\n", + " representative_data_gen=lambda: [np.random.random((1, 224, 224, 3))])" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [ + "## Keras export\n", + "The model will be exported as a tensorflow `.keras` model, where both weights and activations are represented as dtype float32.\n", + "There are two optional formats available for export: MCTQ and FAKELY_QUANT.\n", + "\n", + "#### MCTQ\n", + "\n", + "By default, `mct.exporter.keras_export_model` exports the quantized Keras model to a `.keras` model using custom quantizers from the mct_quantizers module. " + ], + "metadata": { + "id": "-n70LVe6DQPw" + } + }, + { + "cell_type": "code", + "source": [ + "# Path of exported model\n", + "keras_file_path = 'exported_model_mctq.keras'\n", + "\n", + "# Export a keras model with mctq custom quantizers.\n", + "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", + " save_model_path=keras_file_path)" + ], + "metadata": { + "id": "PO-Hh0bzD1VJ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Note that the model's size remains unchanged compared to the quantized exportable model, as the weight data types are still represented as floats.\n", + "#### MCTQ - Loading the Exported Model\n", + "\n", + "To load the exported model with MCTQ quantizers, use `mct.keras_load_quantized_model`:" + ], + "metadata": { + "id": "Bwx5rxXDF_gb" + } + }, + { + "cell_type": "code", + "source": [ + "loaded_model = mct.keras_load_quantized_model(keras_file_path)" + ], + "metadata": { + "id": "q235XNJQmTdd" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "#### Fakely-Quantized Format\n", + "To export a fakely-quantized model, use the `QuantizationFormat.FAKELY_QUANT` option. This format ensures that quantization is simulated but does not alter the data types of the weights and activations during export." + ], + "metadata": { + "id": "sOmDjSehlQba" + } + }, + { + "cell_type": "code", + "source": [ + "# Path of exported model\n", + "keras_file_path = 'exported_model_fakequant.keras'\n", + "\n", + "# Use mode KerasExportSerializationFormat.KERAS for a .keras model\n", + "# and QuantizationFormat.FAKELY_QUANT for fakely-quantized weights\n", + "# and activations.\n", + "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", + " save_model_path=keras_file_path,\n", + " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)" + ], + "metadata": { + "id": "WLyHEEiwGByT" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Note that the fakely-quantized model has the same size as the quantized exportable model, as the weights are still represented as floats.\n", + "\n", + "### TFLite\n", + "There are two optional tflite serializations available for export: `INT8` and `FAKELY_QUANT`.\n", + "\n", + "#### INT8 TFLite\n", + "\n", + "The model will be exported as a tflite model where weights and activations are represented as 8bit integers." + ], + "metadata": { + "id": "-L1aRxFGGFeF" + } + }, + { + "cell_type": "code", + "source": [ + "tflite_file_path = 'exported_model_int8.tflite'\n", + "\n", + "# Use mode KerasExportSerializationFormat.TFLITE for tflite model and quantization_format.INT8.\n", + "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", + " save_model_path=tflite_file_path,\n", + " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", + " quantization_format=mct.exporter.QuantizationFormat.INT8)" + ], + "metadata": { + "id": "V4I-p1q5GLzs" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Compare size of float and quantized model:\n" + ], + "metadata": { + "id": "SBqtJV9AGRzN" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "\n", + "# Save float model to measure its size\n", + "float_file_path = 'exported_model_float.keras'\n", + "float_model.save(float_file_path)\n", + "\n", + "print(\"Float model in Mb:\", os.path.getsize(float_file_path) / float(2 ** 20))\n", + "print(\"Quantized model in Mb:\", os.path.getsize(tflite_file_path) / float(2 ** 20))" + ], + "metadata": { + "id": "LInM16OMGUtF" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "#### Fakely-Quantized TFLite\n", + "\n", + "The model will be exported as a tflite model where weights and activations are quantized but represented with a float data type." + ], + "metadata": { + "id": "9eVDoIHiGX5-" + } + }, + { + "cell_type": "code", + "source": [ + "# Path of exported model\n", + "tflite_file_path = 'exported_model_fakequant.tflite'\n", + "\n", + "\n", + "# Use mode KerasExportSerializationFormat.TFLITE for tflite model and QuantizationFormat.FAKELY_QUANT for fakely-quantized weights\n", + "# and activations.\n", + "mct.exporter.keras_export_model(model=quantized_exportable_model,\n", + " save_model_path=tflite_file_path,\n", + " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", + " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)" + ], + "metadata": { + "id": "0OYLAbI8Gawu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Note that the fakely-quantized model has the same size as the quantized exportable model, as the weights are still represented as floats." + ], + "metadata": { + "id": "voOrtCroD-HE" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bb7e1572" + }, + "source": [ + "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n" + ] + } + ] } diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_gptq.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_gptq.ipynb index 02a78af2e..dba3eb617 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_gptq.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_gptq.ipynb @@ -48,9 +48,23 @@ "source": [ "TF_VER = '2.14.0'\n", "\n", - "!pip install -q tensorflow=={TF_VER}\n" + "!pip install -q tensorflow[and-cuda]~={TF_VER}" ] }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + }, + "id": "b681426ed5a2e48" + }, { "cell_type": "code", "execution_count": null, @@ -58,16 +72,37 @@ "source": [ "import tensorflow as tf\n", "import keras\n", - "import importlib.util\n", - "\n", - "if not importlib.util.find_spec('model_compression_toolkit'):\n", - " !pip install -q model_compression_toolkit" + "import importlib.util" ], "metadata": { "collapsed": false }, "id": "2c13aff20d208c51" }, + { + "cell_type": "markdown", + "source": [ + "Load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." + ], + "metadata": { + "collapsed": false + }, + "id": "fc105d5cff93e87c" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from keras.applications.mobilenet_v2 import MobileNetV2, preprocess_input\n", + "\n", + "float_model = MobileNetV2()" + ], + "metadata": { + "collapsed": false + }, + "id": "bcf3c42006a0590c" + }, { "cell_type": "markdown", "id": "0c7fed0d-cfc8-41ee-adf1-22a98110397b", @@ -76,8 +111,9 @@ }, "source": [ "## Dataset preparation\n", - "\n", - "**Note** that for demonstration purposes we use the validation set for the model quantization and GPTQ optimization. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", + "### Download the ImageNet validation set\n", + "Download the ImageNet dataset with only the validation split.\n", + "**Note:** For demonstration purposes we use the validation set for the model quantization routines. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", "\n", "This step may take several minutes..." ] @@ -105,7 +141,7 @@ { "cell_type": "markdown", "source": [ - "Rearrange the extracted data into folders per label " + "The following code organizes the extracted data into separate folders for each label, making it compatible with Keras dataset loaders." ], "metadata": { "collapsed": false @@ -147,97 +183,85 @@ }, { "cell_type": "markdown", - "id": "028112db-3143-4fcb-96ae-e639e6476c31", - "metadata": { - "id": "028112db-3143-4fcb-96ae-e639e6476c31" - }, "source": [ - "### Representative Dataset\n", - "\n", - "GPTQ is a gradient-based optimization process, which requires representative dataset to perform inference and compute gradients. \n", - "\n", - "Separate representative datasets can be used for the PTQ statistics collection and for GPTQ. In this tutorial we use the same representative dataset for both.\n", - "\n", - "A complete pass through the representative dataset generator constitutes an epoch (batch_size x n_iter samples). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ed56f505-97ff-4acb-8ad8-ef09c53e9d57", + "These functions generate a `tf.data.Dataset` from image files in a directory." + ], "metadata": { - "id": "ed56f505-97ff-4acb-8ad8-ef09c53e9d57" + "collapsed": false }, - "outputs": [], - "source": [ - "def imagenet_preprocess_input(images, labels):\n", - " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels" - ] + "id": "51636a72dcd7fa3a" }, { "cell_type": "code", "execution_count": null, - "id": "0408f624-ab68-4989-95f8-f9d327882840", - "metadata": { - "id": "0408f624-ab68-4989-95f8-f9d327882840" - }, "outputs": [], "source": [ - "def get_representative_dataset(n_iter=10, batch_size=50):\n", + "def imagenet_preprocess_input(images, labels):\n", + " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels\n", + "\n", + "def get_dataset(batch_size, shuffle):\n", " dataset = tf.keras.utils.image_dataset_from_directory(\n", " directory='./imagenet/val',\n", " batch_size=batch_size,\n", " image_size=[224, 224],\n", - " shuffle=True,\n", + " shuffle=shuffle,\n", " crop_to_aspect_ratio=True,\n", " interpolation='bilinear')\n", - " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)))\n", - "\n", - " def representative_dataset():\n", - " for _ in range(n_iter):\n", - " yield [dataset.take(1).get_single_element()[0].numpy()]\n", - "\n", - " return representative_dataset\n", - "\n", - "representative_dataset_gen = get_representative_dataset()" - ] + " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)), num_parallel_calls=tf.data.AUTOTUNE)\n", + " dataset = dataset.prefetch(buffer_size=tf.data.AUTOTUNE)\n", + " return dataset" + ], + "metadata": { + "collapsed": false + }, + "id": "1358c187cfd473f7" }, { "cell_type": "markdown", - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", + "id": "028112db-3143-4fcb-96ae-e639e6476c31", "metadata": { - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5" + "id": "028112db-3143-4fcb-96ae-e639e6476c31" }, "source": [ - "## Model Gradient-Based Post-Training quantization using MCT\n", + "## Representative Dataset\n", "\n", - "This is the main part in which we quantize and our model.\n", + "GPTQ is a gradient-based optimization process, which requires representative dataset to perform inference and compute gradients. \n", + "\n", + "Separate representative datasets can be used for the PTQ statistics collection and for GPTQ. In this tutorial we use the same representative dataset for both.\n", "\n", - "First, we load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." + "A complete pass through the representative dataset generator constitutes an epoch (batch_size x n_iter samples). " ] }, { "cell_type": "code", "execution_count": null, - "id": "80cac59f-ec5e-41ca-b673-96220924a47c", + "id": "0408f624-ab68-4989-95f8-f9d327882840", "metadata": { - "id": "80cac59f-ec5e-41ca-b673-96220924a47c" + "id": "0408f624-ab68-4989-95f8-f9d327882840" }, "outputs": [], "source": [ - "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "batch_size = 16\n", + "n_iter = 5\n", "\n", - "float_model = MobileNetV2()" + "dataset = get_dataset(batch_size, shuffle=True)\n", + "\n", + "def representative_dataset_gen():\n", + " for _ in range(n_iter):\n", + " yield [dataset.take(1).get_single_element()[0].numpy()]" ] }, { "cell_type": "markdown", - "id": "8a8b486a-ca39-45d9-8699-f7116b0414c9", + "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", "metadata": { - "id": "8a8b486a-ca39-45d9-8699-f7116b0414c9" + "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5" }, "source": [ - "Next, we create a GPTQ configuration with possible GPTQ optimization options (such as the number of epochs for the optimization process). MCT will quantize the model and start the GPTQ process to optimize the model’s parameters and quantization parameters.\n", + "## Model Gradient-Based Post-Training Quantization using MCT\n", + "\n", + "This is the main part in which we quantize and our model.\n", + "First, we create a GPTQ configuration with possible GPTQ optimization options (such as the number of epochs for the optimization process). MCT will quantize the model and start the GPTQ process to optimize the model’s parameters and quantization parameters.\n", "\n", "In addition, we need to define a TargetPlatformCapability object, representing the HW specifications on which we wish to eventually deploy our quantized model." ] @@ -306,9 +330,9 @@ "id": "5a7a5150-3b92-49b5-abb2-06e6c5c91d6b" }, "source": [ - "## Models evaluation\n", + "## Model Evaluation\n", "\n", - "In order to evaluate our models, we first need to load the validation dataset. As before, let's assume we downloaded the ImageNet validation dataset to a folder with the path below:" + "In order to evaluate our models, we first need to load the validation dataset." ] }, { @@ -321,18 +345,7 @@ }, "outputs": [], "source": [ - "def get_validation_dataset():\n", - " dataset = tf.keras.utils.image_dataset_from_directory(\n", - " directory='./imagenet/val',\n", - " batch_size=50,\n", - " image_size=[224, 224],\n", - " shuffle=False,\n", - " crop_to_aspect_ratio=True,\n", - " interpolation='bilinear')\n", - " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)))\n", - " return dataset\n", - "\n", - "evaluation_dataset = get_validation_dataset()" + "val_dataset = get_dataset(batch_size=50, shuffle=False)" ] }, { @@ -342,9 +355,7 @@ "id": "9889d217-90a6-4615-8569-38dc9cdd5999" }, "source": [ - "Let's start with the floating-point model evaluation.\n", - "\n", - "We need to compile the model before evaluation and set the loss and the evaluation metric:" + "Let's start with the floating-point model evaluation. We need to compile the model before evaluation and set the loss and the evaluation metric." ] }, { @@ -357,7 +368,8 @@ "outputs": [], "source": [ "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", - "results = float_model.evaluate(evaluation_dataset)" + "float_accuracy = float_model.evaluate(val_dataset)\n", + "print(f\"Float model's Top 1 accuracy on the Imagenet validation set: {(float_accuracy[1] * 100):.2f}%\")" ] }, { @@ -380,17 +392,10 @@ "outputs": [], "source": [ "quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", - "results = quantized_model.evaluate(evaluation_dataset)" + "quantized_accuracy = float_model.evaluate(val_dataset)\n", + "print(f\"Quantized model's Top 1 accuracy on the Imagenet validation set: {(quantized_accuracy[1] * 100):.2f}%\")" ] }, - { - "cell_type": "markdown", - "source": [], - "metadata": { - "collapsed": false - }, - "id": "e316c34cadd054e7" - }, { "cell_type": "markdown", "id": "ebfbb4de-5b6e-4732-83d3-a21e96cdd866", @@ -398,18 +403,9 @@ "id": "ebfbb4de-5b6e-4732-83d3-a21e96cdd866" }, "source": [ - "You can see that we got a very small degradation with a compression rate of x4 !" - ] - }, - { - "cell_type": "markdown", - "source": [ + "You can see that we got a very small degradation with a compression rate of x4 !\n", "Now, we can export the model to Keras and TFLite:" - ], - "metadata": { - "id": "6YjIdiRRjgkL" - }, - "id": "6YjIdiRRjgkL" + ] }, { "cell_type": "code", @@ -433,18 +429,8 @@ "id": "14877777" }, "source": [ - "## Conclusion" - ] - }, - { - "cell_type": "markdown", - "id": "bb7e1572", - "metadata": { - "id": "bb7e1572" - }, - "source": [ - "In this tutorial, we demonstrated how to quantize a pre-trained model using MCT with gradient-based optimization with a few lines of code. We saw that we can achieve an x4 compression ratio with minimal performance degradation.\n", - "\n" + "## Conclusion\n", + "In this tutorial, we demonstrated how to quantize a pre-trained model using MCT with gradient-based optimization with a few lines of code. We saw that we can achieve an x4 compression ratio with minimal performance degradation.\n" ] }, { diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_mixed_precision.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_mixed_precision.ipynb index 73563d9c4..6eeec058d 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_mixed_precision.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_mixed_precision.ipynb @@ -7,26 +7,21 @@ "id": "f8194007-6ea7-4e00-8931-a37ca2d0dd20" }, "source": [ - "# Post Training Mixed Precision Quantization using the Model Compression Toolkit - A Quick-Start Guide\n", + "# Mixed-Precision Post-Training Quantization in Keras using the Model Compression Toolkit (MCT)\n", "\n", "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_mobilenet_mixed_precision.ipynb)\n", "\n", "## Overview\n", "\n", - "\n", - "This tutorial demonstrates a pre-trained model quantization using the **Model Compression Toolkit (MCT)** with **Mixed Precision**. \n", - "\n", - "Mixed Precision enables quantization of different layers with different bit-width precisions, to fit the model into a set of hardware restrictions. \n", - "\n", - "As we will see, mixed-precision quantization is a simple yet effective quantization scheme for compressing a model to a desired model size.\n", + "This quick-start guide explains how to use the **Model Compression Toolkit (MCT)** to quantize a Keras model using post-training mixed-precision quantization. This method assigns different precision levels to various layers based on their impact on the model's output, helping the model meet hardware constraints. Mixed-precision quantization is an effective approach for compressing a model to a desired size while maintaining performance.\n", "\n", "## Summary\n", "\n", "In this tutorial we will cover:\n", "\n", - "1. Post-Training Mixed-Precision Quantization using MCT.\n", - "2. Loading and preprocessing ImageNet's validation dataset.\n", - "3. Constructing an unlabeled representative dataset.\n", + "1. Loading and preprocessing ImageNet’s validation dataset.\n", + "2. Constructing an unlabeled representative dataset.\n", + "3. Applying mixed-precision post-training quantization to the model's weights using MCT.\n", "4. Accuracy evaluation of the floating-point and the quantized models.\n", "\n", "## Setup\n", @@ -44,12 +39,24 @@ }, "outputs": [], "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "!pip install -q mct-nightly" + "TF_VER = '2.14'\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" ] }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + }, + "id": "aa9574240d461e7a" + }, { "cell_type": "code", "execution_count": null, @@ -61,10 +68,33 @@ "source": [ "import tensorflow as tf\n", "import keras\n", - "import model_compression_toolkit as mct\n", - "import os" + "import model_compression_toolkit as mct" ] }, + { + "cell_type": "markdown", + "source": [ + "Load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." + ], + "metadata": { + "collapsed": false + }, + "id": "366579d0f3dec00a" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "\n", + "float_model = MobileNetV2()" + ], + "metadata": { + "collapsed": false + }, + "id": "cc1b963d133bd98d" + }, { "cell_type": "markdown", "id": "0c7fed0d-cfc8-41ee-adf1-22a98110397b", @@ -73,10 +103,9 @@ }, "source": [ "## Dataset preparation\n", - "\n", - "Download ImageNet dataset with only the validation split.\n", - "\n", - "**Note** that for demonstration purposes we use the validation set for the model quantization and mixed precision routines. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", + "### Download the ImageNet validation set\n", + "Download the ImageNet dataset with only the validation split.\n", + "**Note:** For demonstration purposes we use the validation set for the model quantization routines. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", "\n", "This step may take several minutes..." ] @@ -90,12 +119,15 @@ }, "outputs": [], "source": [ + "import os\n", + " \n", "if not os.path.isdir('imagenet'):\n", " !mkdir imagenet\n", - " !wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", - " !mv ILSVRC2012_devkit_t12.tar.gz imagenet/\n", - " !wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", - " !mv ILSVRC2012_img_val.tar imagenet/" + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", + " \n", + " !cd imagenet && tar -xzf ILSVRC2012_devkit_t12.tar.gz && \\\n", + " mkdir ILSVRC2012_img_val && tar -xf ILSVRC2012_img_val.tar -C ILSVRC2012_img_val" ] }, { @@ -105,7 +137,7 @@ "collapsed": false }, "source": [ - "Extract ImageNet validation dataset using torchvision \"datasets\" module" + "The following code organizes the extracted data into separate folders for each label, making it compatible with Keras dataset loaders." ] }, { @@ -117,111 +149,119 @@ }, "outputs": [], "source": [ - "import torchvision\n", - "if not os.path.isdir('imagenet/val'):\n", - " torchvision.datasets.ImageNet(root='./imagenet', split='val')" + "from pathlib import Path\n", + "import shutil\n", + "\n", + "root = Path('./imagenet')\n", + "imgs_dir = root / 'ILSVRC2012_img_val'\n", + "target_dir = root /'val'\n", + "\n", + "def extract_labels():\n", + " !pip install -q scipy\n", + " import scipy\n", + " mat = scipy.io.loadmat(root / 'ILSVRC2012_devkit_t12/data/meta.mat', squeeze_me=True)\n", + " cls_to_nid = {s[0]: s[1] for i, s in enumerate(mat['synsets']) if s[4] == 0} \n", + " with open(root / 'ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt', 'r') as f:\n", + " return [cls_to_nid[int(cls)] for cls in f.readlines()]\n", + "\n", + "if not target_dir.exists():\n", + " labels = extract_labels()\n", + " for lbl in set(labels):\n", + " os.makedirs(target_dir / lbl)\n", + " \n", + " for img_file, lbl in zip(sorted(os.listdir(imgs_dir)), labels):\n", + " shutil.move(imgs_dir / img_file, target_dir / lbl)" ] }, { "cell_type": "markdown", - "id": "028112db-3143-4fcb-96ae-e639e6476c31", - "metadata": { - "id": "028112db-3143-4fcb-96ae-e639e6476c31" - }, "source": [ - "Define the required preprocessing method for the pretrained model,\n", - "and create a generator for the representative dataset, which is required for mixed precision quantization.\n", - "\n", - "The representative dataset is used for collecting statistics on the inference outputs of all layers in the model.\n", - " \n", - "In order to decide on the size of the representative dataset, we configure the batch size and the number of calibration iterations.\n", - "This gives us the total number of samples that will be used during PTQ (batch_size x n_iter).\n", - "In this example we set `batch_size = 50` and `n_iter = 10`, resulting in a total of 500 representative images.\n", - "\n", - "Please ensure that the dataset path has been set correctly." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cf5e859077a736f4", + "These functions generate a `tf.data.Dataset` from image files in a directory." + ], "metadata": { "collapsed": false }, - "outputs": [], - "source": [ - "def imagenet_preprocess_input(images, labels):\n", - " \"\"\"\n", - " Use the keras applications preprocess function.\n", - " Args:\n", - " images: input image batch.\n", - " labels: input label batch.\n", - " Returns:\n", - " preprocessed images & labels\n", - " \"\"\"\n", - " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels" - ] + "id": "1b2a1839a0cca729" }, { "cell_type": "code", "execution_count": null, - "id": "0408f624-ab68-4989-95f8-f9d327882840", - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ - "def get_representative_dataset(n_iter=10, batch_size=50):\n", - " \"\"\"\n", - " Download the ImageNet validation set locally and create the representative dataset generator.\n", - " Returns:\n", - " representative dataset generator for calibration\n", - " \"\"\"\n", - " print('loading dataset, this may take a few minutes ...')\n", + "def imagenet_preprocess_input(images, labels):\n", + " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels\n", + "\n", + "def get_dataset(batch_size, shuffle):\n", " dataset = tf.keras.utils.image_dataset_from_directory(\n", " directory='./imagenet/val',\n", " batch_size=batch_size,\n", " image_size=[224, 224],\n", - " shuffle=True,\n", + " shuffle=shuffle,\n", " crop_to_aspect_ratio=True,\n", " interpolation='bilinear')\n", - " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)))\n", - "\n", - " def representative_dataset():\n", - " for _ in range(n_iter):\n", - " yield [dataset.take(1).get_single_element()[0].numpy()]\n", - "\n", - " return representative_dataset\n", - "\n", - "representative_dataset_gen = get_representative_dataset()" - ] + " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)), num_parallel_calls=tf.data.AUTOTUNE)\n", + " dataset = dataset.prefetch(buffer_size=tf.data.AUTOTUNE)\n", + " return dataset" + ], + "metadata": { + "collapsed": false + }, + "id": "8bc12415c234e197" }, { "cell_type": "markdown", - "id": "4a1e9ba6-2954-4506-ad5c-0da273701ba5", + "source": [ + "## Representative Dataset\n", + "For quantization with MCT, we need to define a representative dataset required by the PTQ algorithm. This dataset is a generator that returns a list of images:" + ], "metadata": { "collapsed": false }, + "id": "c5747150a2052fb" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], "source": [ - "## Model Post-Training Mixed Precision quantization using MCT\n", + "batch_size = 32\n", + "n_iter = 10\n", "\n", - "This is the main part in which we quantize our model.\n", + "dataset = get_dataset(batch_size, shuffle=True)\n", "\n", - "First, we load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." - ] + "def representative_dataset_gen():\n", + " for _ in range(n_iter):\n", + " yield [dataset.take(1).get_single_element()[0].numpy()]" + ], + "metadata": { + "collapsed": false + }, + "id": "ac2f38f151896ed9" }, { - "cell_type": "code", - "execution_count": null, - "id": "80cac59f-ec5e-41ca-b673-96220924a47c", + "cell_type": "markdown", + "source": [ + "## Target Platform Capabilities (TPC)\n", + "In addition, MCT optimizes models for dedicated hardware platforms using Target Platform Capabilities (TPC). \n", + "**Note:** To apply mixed-precision quantization to specific layers, the TPC must define different bit-width options for those layers. For more details, please refer to our [documentation](https://sony.github.io/model_optimization/docs/api/api_docs/modules/target_platform.html). In this example, we use the default Tensorflow TPC, which supports 2, 4, and 8-bit options for convolution and linear layers" + ], "metadata": { - "id": "80cac59f-ec5e-41ca-b673-96220924a47c" + "collapsed": false }, + "id": "aaa928cd96e04989" + }, + { + "cell_type": "code", + "execution_count": null, "outputs": [], "source": [ - "from keras.applications.mobilenet_v2 import MobileNetV2\n", - "float_model = MobileNetV2()" - ] + "# Get a TargetPlatformCapabilities object that models the hardware platform for the quantized model inference. Here, for example, we use the default platform that is attached to a Keras layers' representation.\n", + "target_platform_cap = mct.get_target_platform_capabilities(\"tensorflow\", 'imx500', target_platform_version='v1')" + ], + "metadata": { + "collapsed": false + }, + "id": "8b4708ad0203629" }, { "cell_type": "markdown", @@ -230,17 +270,12 @@ "id": "8a8b486a-ca39-45d9-8699-f7116b0414c9" }, "source": [ - "Next, we need to define a **mixed precision quantization configuration** with possible mixed precision search options.\n", - "MCT will search a mixed precision solution (namely, bit-width assignment for each layer)\n", - "and quantize the model according to this configuration.\n", - "**Note** that you can skip this part if you prefer to use the default quantization settings.\n", + "## Mixed Precision Configurations\n", + "We will create a `MixedPrecisionQuantizationConfig` that defines the search options for mixed-precision:\n", + "1. **Number of images** - Determines how many images from the representative dataset are used to find an optimal bit-width configuration. More images result in higher accuracy but increase search time.\n", + "2. **Gradient weighting** - Improves bit-width configuration accuracy at the cost of longer search time. This method will not be used in this example.\n", "\n", - "In addition, we need to define a `TargetPlatformCapability` object, representing the HW specifications on which we wish to eventually deploy our quantized model.\n", - "The candidates bit-width for quantization are defined in the target platform model. \n", - "\n", - "Finally, we need to set the **hardware constraints** which we want our quantized model to fit into.\n", - "These are defined using a `ResourceUtilization` object.\n", - "In this example, we set a **weights memory** constraint, by computing the size of the desired model's parameters under a compression of the model to 75% of its fixed-point 8-bit precision." + "MCT will determine a bit-width for each layer and quantize the model based on this configuration. The candidate bit-widths for quantization should be defined in the target platform model." ] }, { @@ -252,28 +287,42 @@ }, "outputs": [], "source": [ - "# Enable Mixed-Precision config. For the sake of running faster, the hessian-based scores are disabled in this tutorial\n", - "mp_config = mct.core.MixedPrecisionQuantizationConfig(\n", + "configuration = mct.core.CoreConfig(\n", + " mixed_precision_config=mct.core.MixedPrecisionQuantizationConfig(\n", " num_of_images=32,\n", - " use_hessian_based_scores=False)\n", - "core_config = mct.core.CoreConfig(mixed_precision_config=mp_config)\n", - "# Specify the target platform capability (TPC)\n", - "tpc = mct.get_target_platform_capabilities(\"tensorflow\", 'imx500', target_platform_version='v1')\n", - "\n", - "# Get Resource Utilization information to constraint your model's memory size. Retrieve a ResourceUtilization object with helpful information of each resource metric, to constraint the quantized model to the desired memory size.\n", - "resource_utilization_data = mct.core.keras_resource_utilization_data(float_model,\n", - " representative_dataset_gen,\n", - " core_config=core_config,\n", - " target_platform_capabilities=tpc)\n", + " use_hessian_based_scores=False))" + ] + }, + { + "cell_type": "markdown", + "source": [ + "To enable mixed-precision quantization, we define the desired compression ratio. In this example, we will configure the model to compress the weights to **75% of the size of the 8-bit model's weights**. To achieve this, we will retrieve the model's resource utilization information, `resource_utilization_data`, specifically focusing on the weights' memory. Then, we will create a `ResourceUtilization` object to enforce the size constraint on the weight's memory, which applies only to the quantized layers and attributes (e.g., Conv2D kernels, but not biases)." + ], + "metadata": { + "collapsed": false + }, + "id": "af1a0ca127d59767" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "# Get Resource Utilization information to constraint your model's memory size.\n", + "resource_utilization_data = mct.core.keras_resource_utilization_data(\n", + " float_model,\n", + " representative_dataset_gen,\n", + " configuration,\n", + " target_platform_capabilities=target_platform_cap)\n", "\n", - "# Set a constraint for each of the Resource Utilization metrics.\n", - "# Create a ResourceUtilization object to limit our returned model's size. Note that this values affects only layers and attributes\n", - "# that should be quantized (for example, the kernel of Conv2D in Keras will be affected by this value,\n", - "# while the bias will not)\n", - "# examples:\n", "weights_compression_ratio = 0.75 # About 0.75 of the model's weights memory size when quantized with 8 bits.\n", + "# Create a ResourceUtilization object \n", "resource_utilization = mct.core.ResourceUtilization(resource_utilization_data.weights_memory * weights_compression_ratio)" - ] + ], + "metadata": { + "collapsed": false + }, + "id": "38e16383bec13fbd" }, { "cell_type": "markdown", @@ -282,8 +331,8 @@ "collapsed": false }, "source": [ - "### Run model Post-Training Quantization\n", - "Finally, we quantize our model using MCT's post-training quantization API." + "### Run Post-Training Quantization with Mixed Precision\n", + "Now, we are ready to use MCT to quantize the model." ] }, { @@ -299,18 +348,8 @@ " float_model,\n", " representative_dataset_gen,\n", " target_resource_utilization=resource_utilization,\n", - " core_config=core_config,\n", - " target_platform_capabilities=tpc)" - ] - }, - { - "cell_type": "markdown", - "id": "7382ada6-d001-4564-907d-767fa4e9ec56", - "metadata": { - "id": "7382ada6-d001-4564-907d-767fa4e9ec56" - }, - "source": [ - "That's it! Our model is now quantized." + " core_config=configuration,\n", + " target_platform_capabilities=target_platform_cap)" ] }, { @@ -320,9 +359,8 @@ "id": "5a7a5150-3b92-49b5-abb2-06e6c5c91d6b" }, "source": [ - "## Models evaluation\n", - "\n", - "In order to evaluate our models, we first need to load the validation dataset. As before, let's assume we downloaded the ImageNet validation dataset to a folder with the path below:" + "## Model evaluation\n", + "In order to evaluate our models, we first need to load the validation dataset." ] }, { @@ -335,23 +373,7 @@ }, "outputs": [], "source": [ - "def get_validation_dataset():\n", - " \"\"\"\n", - " Generate validation dataset\n", - " Returns:\n", - " the validation dataset\n", - " \"\"\"\n", - " dataset = tf.keras.utils.image_dataset_from_directory(\n", - " directory='./imagenet/val',\n", - " batch_size=50,\n", - " image_size=[224, 224],\n", - " shuffle=False,\n", - " crop_to_aspect_ratio=True,\n", - " interpolation='bilinear')\n", - " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)))\n", - " return dataset\n", - "\n", - "evaluation_dataset = get_validation_dataset()" + "val_dataset = get_dataset(batch_size=50, shuffle=False)" ] }, { @@ -361,9 +383,7 @@ "id": "9889d217-90a6-4615-8569-38dc9cdd5999" }, "source": [ - "Let's start with the floating-point model evaluation.\n", - "\n", - "We need to compile the model before evaluation and set the loss and the evaluation metric:" + "Let's start with the floating-point model evaluation. We need to compile the model before evaluation and set the loss and the evaluation metric." ] }, { @@ -376,7 +396,8 @@ "outputs": [], "source": [ "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", - "results = float_model.evaluate(evaluation_dataset)" + "float_accuracy = float_model.evaluate(val_dataset)\n", + "print(f\"Float model's Top 1 accuracy on the Imagenet validation set: {(float_accuracy[1] * 100):.2f}%\")" ] }, { @@ -399,17 +420,10 @@ "outputs": [], "source": [ "quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", - "results = quantized_model.evaluate(evaluation_dataset)" + "quantized_accuracy = quantized_model.evaluate(val_dataset)\n", + "print(f\"Quantized model's Top 1 accuracy on the Imagenet validation set: {(quantized_accuracy[1] * 100):.2f}%\")" ] }, - { - "cell_type": "markdown", - "id": "e316c34cadd054e7", - "metadata": { - "collapsed": false - }, - "source": [] - }, { "cell_type": "markdown", "id": "ebfbb4de-5b6e-4732-83d3-a21e96cdd866", @@ -417,17 +431,7 @@ "id": "ebfbb4de-5b6e-4732-83d3-a21e96cdd866" }, "source": [ - "You can see that we got a very small degradation with a compression rate of x4 !" - ] - }, - { - "cell_type": "markdown", - "id": "6YjIdiRRjgkL", - "metadata": { - "id": "6YjIdiRRjgkL" - }, - "source": [ - "Now, we can export the model to Keras and TFLite:" + "Now, we can export the quantized model to Keras and TFLite:" ] }, { @@ -439,9 +443,11 @@ }, "outputs": [], "source": [ - "mct.exporter.keras_export_model(model=quantized_model, save_model_path='qmodel.tflite',\n", - " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", - " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)\n", + "mct.exporter.keras_export_model(\n", + " model=quantized_model,\n", + " save_model_path='qmodel.tflite',\n", + " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", + " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)\n", "\n", "mct.exporter.keras_export_model(model=quantized_model, save_model_path='qmodel.keras')" ] @@ -453,18 +459,9 @@ "id": "14877777" }, "source": [ - "## Conclusion" - ] - }, - { - "cell_type": "markdown", - "id": "bb7e1572", - "metadata": { - "id": "bb7e1572" - }, - "source": [ - "In this tutorial, we demonstrated how to quantize a pre-trained model using MCT with mixed-precision with a few lines of code. We saw that we can achieve more than x4 compression ratio with minimal performance degradation.\n", - "\n" + "## Conclusion\n", + "In this tutorial, we demonstrated how to quantize a classification model using the mixed precision feature with MCT. \n", + "MCT can deliver competitive results across a wide range of tasks and network architectures. For more details, [check out the paper:](https://arxiv.org/abs/2109.09113)." ] }, { diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_network_editor.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_network_editor.ipynb index 457a61cf3..28e880cab 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_network_editor.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_network_editor.ipynb @@ -7,7 +7,8 @@ }, "kernelspec": { "name": "python3", - "display_name": "Python 3" + "language": "python", + "display_name": "Python 3 (ipykernel)" }, "language_info": { "name": "python" @@ -17,15 +18,22 @@ { "cell_type": "markdown", "source": [ - "# Network Editor Usage\n", + "# How to Use the Network Editor to Easily Modify Quantization Configurations in the Model Compression Toolkit (MCT)\n", "\n", "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_network_editor.ipynb)\n", "\n", - "## Introduction\n", + "## Overview\n", + "In this tutorial, we will demonstrate how to utilize the Model Compression Toolkit (MCT) to quantize a simple Keras model and modify the quantization configuration for specific layers using MCT’s network editor. The example model comprises a `Conv2D` layer followed by a `Dense` layer.\n", "\n", - "In this tutorial, we will demonstrate how to leverage the Model Compression Toolkit (MCT) to quantize a simple Keras model and modify the quantization configuration for specific layers using the MCT's network editor. Our example model consists of a Conv2D layer followed by a Dense layer. Initially, we will quantize this model with a default configuration and inspect the bit allocation for each layer's weights. Then, we will introduce an edit rule to specifically quantize the Conv2D layer with a different bit width, showcasing the flexibility of MCT in customizing quantization schemes per layer.\n", + "## Summary\n", + "In this tutorial, we will cover:\n", "\n", - "First, we install MCT and import requiered modules:" + "1. Quantizing the model using the default configuration and inspecting bit allocation for each layer.\n", + "2. Applying a custom edit rule to adjust the bit-width for the `Conv2D` layer.\n", + "3. Showcasing MCT’s flexibility for layer-specific quantization.\n", + "\n", + "## Setup\n", + "Install and import the relevant packages:" ], "metadata": { "id": "C_BBKEpTRqp_" @@ -39,31 +47,41 @@ }, "outputs": [], "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "! pip install -q mct-nightly" + "TF_VER = '2.14'\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" ] }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "code", "source": [ "import model_compression_toolkit as mct\n", "import numpy as np\n", - "import tensorflow as tf\n", "from tensorflow.keras.layers import Input, Conv2D, Dense\n", "from tensorflow.keras.models import Model" ], "metadata": { "id": "vCsjoKb7168U" }, - "execution_count": 2, + "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ - "Now, we create a simple Keras model with a Conv2D layer and a Dense layer:" + "Next, we will create a simple Keras model consisting of a `Conv2D` layer followed by a `Dense` layer." ], "metadata": { "id": "bRPoKI-WSQn2" @@ -82,13 +100,14 @@ "metadata": { "id": "uOu8c7n_6Vd4" }, - "execution_count": 3, + "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ - "In this tutorial, for demonstration purposes and to expedite the process, we create a simple representative dataset generator using random data. This generator produces a batch of random input data matching the model's input shape." + "### Represenatative Dataset\n", + "In this tutorial, for demonstration purposes and to expedite the process, we create a simple representative dataset generator using random data. This generator produces batches of random input data that match the model’s input shape." ], "metadata": { "id": "rDAMPxKhSYfx" @@ -99,18 +118,19 @@ "source": [ "batch_size = 1\n", "def representative_data_gen():\n", - " yield [np.random.randn(batch_size, *input_shape)]\n" + " yield [np.random.randn(batch_size, *input_shape)]" ], "metadata": { "id": "LvnQmku02qIM" }, - "execution_count": 4, + "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ - "Let's define a function that takes a Keras model, a representative data generator, and a core configuration for quantization. The function utilizes Model Compression Toolkit's post-training quantization API:" + "## Model Quantization with MCT\n", + "Let’s define a function that takes a Keras model, a representative data generator, and a core configuration for quantization. The function will use the MCT’s post-training quantization (PTQ) API to apply quantization to the model." ], "metadata": { "id": "VecsI-kDe9RM" @@ -119,25 +139,52 @@ { "cell_type": "code", "source": [ - "\n", "def quantize_keras_mct(model, representative_data_gen, core_config):\n", " quantized_model, quantization_info = mct.ptq.keras_post_training_quantization(\n", " in_model=model,\n", " representative_data_gen=representative_data_gen,\n", " core_config=core_config\n", " )\n", - " return quantized_model\n" + " return quantized_model" ], "metadata": { "id": "uIyyoMv93Bt7" }, - "execution_count": 5, + "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ - "In this section, we start by setting a default core configuration for quantization using Model Compression Toolkit's CoreConfig. After quantizing the model with this configuration, we examine the number of bits used in the quantization of specific layers. We retrieve and print the number of bits used for the the layers' attribute called 'kernel' in both the Conv2D layer and the Dense layer. By default 8-bit are used for quantization across different types of layers in a model." + "We define a function to inspect the bit-width used for quantizing specific layers. The function retrieves and prints the bit-width for the `kernel` attribute in both the `Conv2D` and `Dense` layers." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "def print_model_weights_by_layer(model):\n", + " conv2d_layer = model.layers[2]\n", + " conv2d_nbits = conv2d_layer.weights_quantizers['kernel'].get_config()['num_bits']\n", + " \n", + " dense_layer = model.layers[4]\n", + " dense_nbits = dense_layer.weights_quantizers['kernel'].get_config()['num_bits']\n", + " \n", + " print(f\"Conv2D nbits: {conv2d_nbits}, Dense nbits: {dense_nbits}\")" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [ + "### Quantization\n", + "In this section, we start by setting a default core configuration for quantization using MCT’s `CoreConfig`. With this configuration, the model is quantized using the default 8-bit precision for all layer types. Next, we print the bit-width settings to verify the quantization of both the Conv2D and Dense layers." ], "metadata": { "id": "Xqmg7vWNgsqc" @@ -148,15 +195,8 @@ "source": [ "# Use default core config for observing baseline quantized model\n", "core_config = mct.core.CoreConfig()\n", - "\n", "quantized_model = quantize_keras_mct(model, representative_data_gen, core_config)\n", - "conv2d_layer = quantized_model.layers[2]\n", - "conv2d_nbits = conv2d_layer.weights_quantizers['kernel'].get_config()['num_bits']\n", - "\n", - "dense_layer = quantized_model.layers[4]\n", - "dense_nbits = dense_layer.weights_quantizers['kernel'].get_config()['num_bits']\n", - "\n", - "print(f\"Conv2D nbits: {conv2d_nbits}, Dense nbits: {dense_nbits}\")" + "print_model_weights_by_layer(quantized_model)" ], "metadata": { "id": "Z5VDv6Bz4cqN" @@ -169,11 +209,11 @@ "source": [ "## Edit Configration Using Edit Rules List\n", "\n", - " Now let's see how to customize the quantization process for specific layers using MCT's network editor. An `EditRule` is created with a `NodeTypeFilter` targeting the Conv2D layer type.\n", + " Now, let's customize the quantization process for specific layers using MCT’s network editor. We create an `EditRule` with a `NodeTypeFilter` targeting the `Conv2D` layer type.\n", "\n", - " The action associated with this rule changes the quantization configuration of the 'kernel' attribute to 4 bits instead of the default 8 bits. This rule is then included in a list (`edit_rules_list`) which is passed to the `DebugConfig`.\n", - " \n", - " The `DebugConfig`, with our custom rule, is then used to create a `CoreConfig`. This configuration will be applied when quantizing the model, resulting in the Conv2D layers being quantized using 4 bits while other layers follow the default setting." + "The associated action changes the kernel attribute’s bit-width to 4 bits instead of the default 8 bits. This rule is then added to an `edit_rules_list`, which is passed to `DebugConfig`.\n", + "\n", + "The custom `DebugConfig` is used to create a `CoreConfig`, enabling `Conv2D` layers to be quantized at 4 bits while other layers retain the default configuration." ], "metadata": { "id": "FyBwtQuMhQMt" @@ -190,24 +230,22 @@ "]\n", "\n", "debug_config = mct.core.DebugConfig(network_editor=edit_rules_list)\n", - "core_config = mct.core.CoreConfig(debug_config=debug_config)" + "core_config_edit_weight_bits = mct.core.CoreConfig(debug_config=debug_config)" ], "metadata": { "id": "7YynVSSh3Mk-" }, - "execution_count": 7, + "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ - "In this final part of the tutorial, we apply the customized quantization process to our Keras model.\n", - "\n", - "By calling `quantize_keras_mct` with the `core_config` containing our edit rule, we specifically quantize the Conv2D layer using 4 bits, as per our custom configuration.\n", + "Now we will apply this customized quantization configuration to the Keras model.\n", "\n", - "The `quantized_model` now reflects these changes. We then extract and display the number of bits used for quantization in both the Conv2D and Dense layers.\n", + "By calling `quantize_keras_mct` with the `core_config` containing our edit rule, we quantize the `Conv2D` layer using 4 bits as specified. The resulting `quantized_model` reflects these changes, which we verify by inspecting the bit-width used in both the `Conv2D` and `Dense` layers.\n", "\n", - "The output demonstrates the effect of our edit rule: the Conv2D layer is quantized with 4 bits while the Dense layer retains the default 8-bit quantization." + "The output confirms the effect of the edit rule: the `Conv2D` layer is quantized with 4 bits, while the `Dense` layer retains the default 8-bit setting." ], "metadata": { "id": "ftkeDjZPiahd" @@ -216,14 +254,8 @@ { "cell_type": "code", "source": [ - "quantized_model = quantize_keras_mct(model, representative_data_gen, core_config)\n", - "conv2d_layer = quantized_model.layers[2]\n", - "conv2d_nbits = conv2d_layer.weights_quantizers['kernel'].get_config()['num_bits']\n", - "\n", - "dense_layer = quantized_model.layers[4]\n", - "dense_nbits = dense_layer.weights_quantizers['kernel'].get_config()['num_bits']\n", - "\n", - "print(f\"Conv2D nbits: {conv2d_nbits}, Dense nbits: {dense_nbits}\")" + "quantized_model = quantize_keras_mct(model, representative_data_gen, core_config_edit_weight_bits)\n", + "print_model_weights_by_layer(quantized_model)" ], "metadata": { "id": "7p6qFWoEQBS5" @@ -235,16 +267,11 @@ "cell_type": "markdown", "source": [ "## Edit Z-Threshold for Activation Quantization\n", + "In model quantization, the Z-Threshold helps manage outliers in activation data, which can negatively impact the efficiency and accuracy of the quantization process. It sets a boundary to exclude extreme values when determining quantization parameters, improving robustness and model performance.\n", "\n", - "In the context of model quantization, the Z-Threshold helps in handling outliers in the activation data. Outliers in the data can hurt the quantization process, leading to less efficient and potentially less accurate models.\n", + "Adjusting the Z-Threshold is useful for fine-tuning model accuracy and handling outliers. A higher Z-Threshold includes more data, potentially accounting for outliers, while a lower value effectively filters them out.\n", "\n", - "The Z-Threshold is used to set a boundary, beyond which extreme values in the activation data are considered outliers and are not used to determine the quantization parameters. This approach effectively filters out extreme values, ensuring a more robust and representative quantization.\n", - "\n", - "Adjusting the Z-Threshold can be particularly useful during the debugging and optimization of model quantization. By tweaking this parameter, you can fine-tune the balance between model accuracy and robustness against outliers in your specific use case.\n", - "\n", - "A higher Z-Threshold means more data is considered during quantization, including some outliers, which might be necessary for certain models or datasets.\n", - "\n", - "The following code demonstrates how you can customize the Z-Threshold for a specific layer type (Conv2D) in a Keras model using MCT's network editor functionality. This feature allows you to set different Z-Threshold values for different layers. By default, all layers use threshold of infinity (thus, no outlier-removal occurs)." + "The following code demonstrates how to customize the Z-Threshold for specific layer types, such as `Conv2D`, using MCT’s network editor. By default, all layers have an infinite threshold, meaning no outlier removal occurs." ], "metadata": { "id": "2TqXTB48jKHx" @@ -262,8 +289,8 @@ "]\n", "\n", "debug_config = mct.core.DebugConfig(network_editor=edit_rules_list)\n", - "core_config = mct.core.CoreConfig(debug_config=debug_config)\n", - "quantized_model = quantize_keras_mct(model, representative_data_gen, core_config)" + "core_config_edit_z_threshold = mct.core.CoreConfig(debug_config=debug_config)\n", + "quantized_model = quantize_keras_mct(model, representative_data_gen, core_config_edit_z_threshold)" ], "metadata": { "id": "VBRfQqZVjN3J" @@ -274,6 +301,10 @@ { "cell_type": "markdown", "source": [ + "## Conclusion\n", + "In this tutorial, we explored how to leverage the Model Compression Toolkit (MCT) for quantizing Keras models and customizing the quantization configuration for specific layers using the network editor. We started by applying the default 8-bit quantization and inspecting the results. Then, we demonstrated how to use the network editor to modify the bit-width for individual layers and fine-tune activation quantization using Z-Threshold adjustments.\n", + "\n", + "\n", "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", "\n", "Licensed under the Apache License, Version 2.0 (the \"License\");\n", diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_post-training_quantization.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_post-training_quantization.ipynb new file mode 100644 index 000000000..f576d7ee2 --- /dev/null +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_post-training_quantization.ipynb @@ -0,0 +1,456 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Post-Training Quantization in Keras using the Model Compression Toolkit (MCT)\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_post_training_quantization.ipynb)\n", + "\n", + "## Overview\n", + "This quick-start guide explains how to use the **Model Compression Toolkit (MCT)** to quantize a Keras model. We will load a pre-trained model and quantize it using the MCT with **Post-Training Quatntization (PTQ)**. Finally, we will evaluate the quantized model and export it to a Keras or TFLite files.\n", + "\n", + "## Summary\n", + "In this tutorial, we will cover:\n", + "\n", + "1. Loading and preprocessing ImageNet’s validation dataset.\n", + "2. Constructing an unlabeled representative dataset.\n", + "3. Post-Training Quantization using MCT.\n", + "4. Accuracy evaluation of the floating-point and the quantized models.\n", + "5. Exporting the model to Keras and TFLite files.\n", + "\n", + "## Setup\n", + "Install the relevant packages:" + ], + "metadata": { + "collapsed": false + }, + "id": "37caa075419872cc" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "TF_VER = '2.14'\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" + ], + "metadata": { + "collapsed": false + }, + "id": "2227c2812088b426" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + }, + "id": "1849396447aa75e8" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import keras\n", + "import tensorflow as tf" + ], + "metadata": { + "collapsed": false + }, + "id": "96817134aaa61465" + }, + { + "cell_type": "markdown", + "source": [ + "Load a pre-trained MobileNetV2 model from Keras, in 32-bits floating-point precision format." + ], + "metadata": { + "collapsed": false + }, + "id": "f0d72559f34c030a" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "\n", + "float_model = MobileNetV2()" + ], + "metadata": { + "collapsed": false + }, + "id": "14f37bd9e1421650" + }, + { + "cell_type": "markdown", + "source": [ + "## Dataset preparation\n", + "### Download the ImageNet validation set\n", + "Download the ImageNet dataset with only the validation split.\n", + "**Note:** For demonstration purposes we use the validation set for the model quantization routines. Usually, a subset of the training dataset is used, but loading it is a heavy procedure that is unnecessary for the sake of this demonstration.\n", + "\n", + "This step may take several minutes..." + ], + "metadata": { + "collapsed": false + }, + "id": "b8fac30930c364bb" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import os\n", + " \n", + "if not os.path.isdir('imagenet'):\n", + " !mkdir imagenet\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz\n", + " !wget -P imagenet https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", + " \n", + " !cd imagenet && tar -xzf ILSVRC2012_devkit_t12.tar.gz && \\\n", + " mkdir ILSVRC2012_img_val && tar -xf ILSVRC2012_img_val.tar -C ILSVRC2012_img_val" + ], + "metadata": { + "collapsed": false + }, + "id": "b4796f00822e1abf" + }, + { + "cell_type": "markdown", + "source": [ + "The following code organizes the extracted data into separate folders for each label, making it compatible with Keras dataset loaders." + ], + "metadata": { + "collapsed": false + }, + "id": "f1c42d68573f3534" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "import shutil\n", + "\n", + "root = Path('./imagenet')\n", + "imgs_dir = root / 'ILSVRC2012_img_val'\n", + "target_dir = root /'val'\n", + "\n", + "def extract_labels():\n", + " !pip install -q scipy\n", + " import scipy\n", + " mat = scipy.io.loadmat(root / 'ILSVRC2012_devkit_t12/data/meta.mat', squeeze_me=True)\n", + " cls_to_nid = {s[0]: s[1] for i, s in enumerate(mat['synsets']) if s[4] == 0} \n", + " with open(root / 'ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt', 'r') as f:\n", + " return [cls_to_nid[int(cls)] for cls in f.readlines()]\n", + "\n", + "if not target_dir.exists():\n", + " labels = extract_labels()\n", + " for lbl in set(labels):\n", + " os.makedirs(target_dir / lbl)\n", + " \n", + " for img_file, lbl in zip(sorted(os.listdir(imgs_dir)), labels):\n", + " shutil.move(imgs_dir / img_file, target_dir / lbl)\n" + ], + "metadata": { + "collapsed": false + }, + "id": "b50b55c50a41999d" + }, + { + "cell_type": "markdown", + "source": [ + "These functions generate a `tf.data.Dataset` from image files in a directory." + ], + "metadata": { + "collapsed": false + }, + "id": "65372a40dc9ce89c" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "def imagenet_preprocess_input(images, labels):\n", + " return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels\n", + "\n", + "def get_dataset(batch_size, shuffle):\n", + " dataset = tf.keras.utils.image_dataset_from_directory(\n", + " directory='./imagenet/val',\n", + " batch_size=batch_size,\n", + " image_size=[224, 224],\n", + " shuffle=shuffle,\n", + " crop_to_aspect_ratio=True,\n", + " interpolation='bilinear')\n", + " dataset = dataset.map(lambda x, y: (imagenet_preprocess_input(x, y)), num_parallel_calls=tf.data.AUTOTUNE)\n", + " dataset = dataset.prefetch(buffer_size=tf.data.AUTOTUNE)\n", + " return dataset" + ], + "metadata": { + "collapsed": false + }, + "id": "70e23b77b41fc6e1" + }, + { + "cell_type": "markdown", + "source": [ + "## Representative Dataset\n", + "For quantization with MCT, we need to define a representative dataset required by the PTQ algorithm. This dataset is a generator that returns a list of images:" + ], + "metadata": { + "collapsed": false + }, + "id": "ab88ee0beaff2186" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "batch_size = 32\n", + "n_iter = 10\n", + "\n", + "dataset = get_dataset(batch_size, shuffle=True)\n", + "\n", + "def representative_dataset_gen():\n", + " for _ in range(n_iter):\n", + " yield [dataset.take(1).get_single_element()[0].numpy()]" + ], + "metadata": { + "collapsed": false + }, + "id": "c164088f1882bad8" + }, + { + "cell_type": "markdown", + "source": [ + "## Target Platform Capabilities\n", + "MCT optimizes the model for dedicated hardware. This is done using TPC (for more details, please visit our [documentation](https://sony.github.io/model_optimization/docs/api/api_docs/modules/target_platform.html)). Here, we use the default Tensorflow TPC:" + ], + "metadata": { + "collapsed": false + }, + "id": "d7cf37cd66fca511" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import model_compression_toolkit as mct\n", + "\n", + "# Get a TargetPlatformCapabilities object that models the hardware for the quantized model inference. Here, for example, we use the default platform that is attached to a Keras layers representation.\n", + "target_platform_cap = mct.get_target_platform_capabilities('tensorflow', 'default')" + ], + "metadata": { + "collapsed": false + }, + "id": "259e2cf078cd3dfe" + }, + { + "cell_type": "markdown", + "source": [ + "## Post-Training Quantization using MCT\n", + "Now for the exciting part! Let’s run PTQ on the model." + ], + "metadata": { + "collapsed": false + }, + "id": "c19234f699c75374" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "quantized_model, quantization_info = mct.ptq.keras_post_training_quantization(\n", + " in_model=float_model,\n", + " representative_data_gen=representative_dataset_gen,\n", + " target_platform_capabilities=target_platform_cap\n", + ")" + ], + "metadata": { + "collapsed": false + }, + "id": "a791d320d064f950" + }, + { + "cell_type": "markdown", + "source": [ + "Our model is now quantized. MCT has created a simulated quantized model within the original Keras framework by inserting [quantization representation modules](https://github.com/sony/mct_quantizers). These modules, such as `KerasQuantizationWrapper` and `KerasActivationQuantizationHolder`, wrap Keras layers to simulate the quantization of weights and activations, respectively. While the size of the saved model remains unchanged, all the quantization parameters are stored within these modules and are ready for deployment on the target hardware. In this example, we used the default MCT settings, which compressed the model from 32 bits to 8 bits, resulting in a compression ratio of 4x." + ], + "metadata": { + "collapsed": false + }, + "id": "877eef17e44c57c3" + }, + { + "cell_type": "markdown", + "source": [ + "## Model Evaluation\n", + "In order to evaluate our models, we first need to load the validation dataset." + ], + "metadata": { + "collapsed": false + }, + "id": "bac59bdc7eb51d15" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "val_dataset = get_dataset(batch_size=50, shuffle=False)" + ], + "metadata": { + "collapsed": false + }, + "id": "e8af62e22913de3e" + }, + { + "cell_type": "markdown", + "source": [ + "Let's start with the floating-point model evaluation. We need to compile the model before evaluation and set the loss and the evaluation metric." + ], + "metadata": { + "collapsed": false + }, + "id": "9455ac334c8c23da" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "float_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", + "float_accuracy = float_model.evaluate(val_dataset)\n", + "print(f\"Float model's Top 1 accuracy on the Imagenet validation set: {(float_accuracy[1] * 100):.2f}%\")" + ], + "metadata": { + "collapsed": false + }, + "id": "15a98cc475926458" + }, + { + "cell_type": "markdown", + "source": [ + "Finally, let's evaluate the quantized model:" + ], + "metadata": { + "collapsed": false + }, + "id": "3085f431ccc6fdee" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "quantized_model.compile(loss=keras.losses.SparseCategoricalCrossentropy(), metrics=\"accuracy\")\n", + "quantized_accuracy = quantized_model.evaluate(val_dataset)\n", + "print(f\"Quantized model's Top 1 accuracy on the Imagenet validation set: {(quantized_accuracy[1] * 100):.2f}%\")" + ], + "metadata": { + "collapsed": false + }, + "id": "c427527160845924" + }, + { + "cell_type": "markdown", + "source": [ + "You can see that we got a very small degradation with a compression rate of x4 !\n", + "Now, we can export the quantized model to Keras and TFLite:" + ], + "metadata": { + "collapsed": false + }, + "id": "959526e5ae914e6b" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "mct.exporter.keras_export_model(\n", + " model=quantized_model,\n", + " save_model_path='qmodel.tflite',\n", + " serialization_format=mct.exporter.KerasExportSerializationFormat.TFLITE,\n", + " quantization_format=mct.exporter.QuantizationFormat.FAKELY_QUANT)\n", + "\n", + "mct.exporter.keras_export_model(model=quantized_model, save_model_path='qmodel.keras')" + ], + "metadata": { + "collapsed": false + }, + "id": "6d431b13e8ac5e4d" + }, + { + "cell_type": "markdown", + "source": [ + "## Conclusion\n", + "\n", + "In this tutorial, we demonstrated how to quantize a classification model in a hardware-friendly manner using MCT. We observed that a 4x compression ratio was achieved with minimal performance degradation.\n", + "\n", + "The key advantage of hardware-friendly quantization is that the model can run more efficiently in terms of runtime, power consumption, and memory usage on designated hardware.\n", + "\n", + "MCT can deliver competitive results across a wide range of tasks and network architectures. For more details, [check out the paper](https://arxiv.org/abs/2109.09113).\n", + "\n", + "## Copyrights\n", + "\n", + "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n" + ], + "metadata": { + "collapsed": false + }, + "id": "78c7a00d0acb623d" + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_pruning_mnist.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_pruning_mnist.ipynb index de99d8b5c..71e2d84dc 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_pruning_mnist.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_pruning_mnist.ipynb @@ -1,444 +1,448 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Structured Pruning of a Fully-Connected Keras Model\n", - "\n", - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_pruning_mnist.ipynb)\n", - "\n", - "Welcome to this tutorial, where we will guide you through training, pruning, and retraining a fully connected Keras model. We'll begin by constructing and training a simple neural network using the Keras framework. Following this, we will introduce and apply model pruning using MCT to reduce the size of our network. Finally, we'll retrain our pruned model to recover its degraded performance due to the pruning process.\n", - "\n", - "\n", - "## Installing TensorFlow and Model Compression Toolkit\n", - "\n", - "We start by setting up our environment by installing TensorFlow and Model Compression Toolkit and importing them." - ], - "metadata": { - "id": "UJDzewEYfSN5" - } - }, - { - "cell_type": "code", - "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "!pip install mct-nightly\n" - ], - "metadata": { - "id": "xTvVA__4NItc" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Q2bAksKtM0ca" - }, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import tensorflow_datasets as tfds\n", - "import model_compression_toolkit as mct\n", - "import numpy as np\n", - "from tensorflow.keras.datasets import mnist\n", - "from tensorflow.keras.models import Sequential\n", - "from tensorflow.keras.layers import Dense, Flatten" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Loading and Preprocessing MNIST\n", - "\n", - "Let's create the train and test parts of MNIST dataset including preprocessing:" - ], - "metadata": { - "id": "tW1xcK_Kf4F_" - } - }, - { - "cell_type": "code", - "source": [ - "# Load the MNIST dataset\n", - "(train_images, train_labels), (test_images, test_labels) = mnist.load_data()\n", - "\n", - "# Normalize the images to [0, 1] range\n", - "train_images = train_images.astype('float32') / 255.0\n", - "test_images = test_images.astype('float32') / 255.0\n" - ], - "metadata": { - "id": "fwtJHnflfv_f" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Creating a Fully-Connected Model\n", - "\n", - "In this tutorial section, we create a simple toy example of a fully connected model to demonstrate the pruning process using MCT. It consists of three dense layers with 128, 64, and 10 neurons.\n", - "\n", - "Notably, MCT's structured pruning will target the first two dense layers for pruning, as these layers offer the opportunity to reduce output channels. This reduction can be effectively propagated by adjusting the input channels of subsequent layers.\n", - "\n", - "Once our model is created, we compile it to prepare the model for training and evaluation.\n" - ], - "metadata": { - "id": "m3vu7-uvgtfC" - } - }, - { - "cell_type": "code", - "source": [ - "def create_model():\n", - " model = tf.keras.models.Sequential([\n", - " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", - " tf.keras.layers.Dense(128, activation='relu'),\n", - " tf.keras.layers.Dense(64, activation='relu'),\n", - " tf.keras.layers.Dense(10)\n", - " ])\n", - " model.compile(\n", - " optimizer=tf.keras.optimizers.Adam(0.001),\n", - " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", - " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],\n", - " )\n", - " return model" - ], - "metadata": { - "id": "If3oj5jSjXen" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Training Dense Model on MNIST\n", - "\n", - "Now, we can train our model using the dataset we load and evaluate it." - ], - "metadata": { - "id": "Q_tK6Xknbtha" - } - }, - { - "cell_type": "code", - "source": [ - "# Train and evaluate the model\n", - "model = create_model()\n", - "model.fit(train_images, train_labels, epochs=6, validation_data=(test_images, test_labels))\n", - "\n", - "model.evaluate(test_images, test_labels)" - ], - "metadata": { - "id": "jQ3_9Z1WllVV" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Dense Model Properties\n", - "\n", - "The model.summary() function in Keras provides a snapshot of the model's architecture, including layers, their types, output shapes, and the number of parameters.\n" - ], - "metadata": { - "id": "ZQHxLrsvcLKH" - } - }, - { - "cell_type": "code", - "source": [ - "model.summary()" - ], - "metadata": { - "id": "oxdespw2eeBW" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "Let's break down what we see in our model summary:\n", - "\n", - "- First Dense Layer: A fully connected layer with 128 output channels and 784 input channels.\n", - "\n", - "- Second Dense Layer: A fully connected layer with 64 output channels and 128 input channels.\n", - "\n", - "- Third Dense Layer: The final dense layer with 10 neurons (as per the number of MNIST classes) and 64 input channels.\n", - "\n", - "The total parameters amount to 109,386, which roughly requiers 427.29 KB." - ], - "metadata": { - "id": "GymibwxQehOL" - } - }, - { - "cell_type": "markdown", - "source": [ - "## MCT Structured Pruning\n", - "\n", - "### Create TPC\n", - "\n", - "Firstly, we'll set up the Target Platform Capabilities (TPC) to specify each layer's SIMD (Single Instruction, Multiple Data) size.\n", - "\n", - "In MCT, SIMD plays a crucial role in channel grouping, affecting the pruning decision process based on channel importance for each SIMD group of channels.\n", - "\n", - "We'll use the simplest structured pruning scenario for this demonstration with SIMD=1." - ], - "metadata": { - "id": "RKatTp55emtF" - } - }, - { - "cell_type": "code", - "source": [ - "from model_compression_toolkit.target_platform_capabilities.target_platform import Signedness\n", - "tp = mct.target_platform\n", - "\n", - "simd_size = 1\n", - "\n", - "def get_tpc():\n", - " # Define the default weight attribute configuration\n", - " default_weight_attr_config = tp.AttributeQuantizationConfig(\n", - " weights_quantization_method=tp.QuantizationMethod.UNIFORM,\n", - " weights_n_bits=None,\n", - " weights_per_channel_threshold=None,\n", - " enable_weights_quantization=None,\n", - " lut_values_bitwidth=None\n", - " )\n", - "\n", - " # Define the OpQuantizationConfig\n", - " default_config = tp.OpQuantizationConfig(\n", - " default_weight_attr_config=default_weight_attr_config,\n", - " attr_weights_configs_mapping={},\n", - " activation_quantization_method=tp.QuantizationMethod.UNIFORM,\n", - " activation_n_bits=8,\n", - " supported_input_activation_n_bits=8,\n", - " enable_activation_quantization=None,\n", - " quantization_preserving=None,\n", - " fixed_scale=None,\n", - " fixed_zero_point=None,\n", - " simd_size=simd_size,\n", - " signedness=Signedness.AUTO\n", - " )\n", - "\n", - " # Create the quantization configuration options and model\n", - " default_configuration_options = tp.QuantizationConfigOptions([default_config])\n", - " tp_model = tp.TargetPlatformModel(default_configuration_options)\n", - "\n", - " # Return the target platform capabilities\n", - " tpc = tp.TargetPlatformCapabilities(tp_model)\n", - " return tpc\n" - ], - "metadata": { - "id": "wqZ71s70jXhH" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "### Create a Representative Dataset\n", - "\n", - "We are creating a representative dataset to guide our model pruning process for computing importance score for each channel:" - ], - "metadata": { - "id": "SnKxedEgqdSm" - } - }, - { - "cell_type": "code", - "source": [ - "import random\n", - "\n", - "def representative_data_gen():\n", - " indices = random.sample(range(len(train_images)), 32)\n", - " yield [np.stack([train_images[i] for i in indices])]" - ], - "metadata": { - "id": "SCiXV1s9jswp" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "### Create Resource Utilization constraint\n", - "\n", - "We're defining a resource_utilization limit to constrain the memory usage of our pruned model.\n", - "\n", - "By setting a target that limits the model's weight memory to half of its original size (around 427KB), we aim to achieve a compression ratio of 50%:" - ], - "metadata": { - "id": "nylQtALnr9gN" - } - }, - { - "cell_type": "code", - "source": [ - "# Create a ResourceUtilization object to limit the pruned model weights memory to a certain resource constraint\n", - "dense_model_memory = 427*(2**10) # Original model weights requiers ~427KB\n", - "compression_ratio = 0.5\n", - "\n", - "resource_utilization = mct.core.ResourceUtilization(weights_memory=dense_model_memory*compression_ratio)" - ], - "metadata": { - "id": "doJgwbSxsCbr" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "### Prune Model\n", - "\n", - "We're ready to execute the actual pruning using MCT's keras_pruning_experimental function. The model is pruned according to our defined target Resource Utilization and using the representative dataset generated earlier.\n", - "\n", - "Each channel's importance is measured using LFH (Label-Free-Hessian)\n", - "which approximates the Hessian of the loss function w.r.t model's weights.\n", - "\n", - "In this example, we've used just one score approximation for efficiency. Although this is less time-consuming, it's worth noting that using multiple approximations would yield more precise importance scores in real-world applications. However, this precision comes with a trade-off in terms of longer processing times.\n", - "\n", - "The result is a pruned model and associated pruning information, which includes details about the pruning masks and scores for each layer." - ], - "metadata": { - "id": "xSP6815rsCnc" - } - }, - { - "cell_type": "code", - "source": [ - "num_score_approximations = 1\n", - "\n", - "target_platform_cap = get_tpc()\n", - "pruned_model, pruning_info = mct.pruning.keras_pruning_experimental(\n", - " model=model,\n", - " target_resource_utilization=resource_utilization,\n", - " representative_data_gen=representative_data_gen,\n", - " target_platform_capabilities=target_platform_cap,\n", - " pruning_config=mct.pruning.PruningConfig(num_score_approximations=num_score_approximations)\n", - " )" - ], - "metadata": { - "id": "x4taG-5TxBrp" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "### Pruned Model Properties\n", - "\n", - "As before, we can use Keras model's API to observe the new architecture and details of the pruned model:" - ], - "metadata": { - "id": "iPd6ezZN2DNp" - } - }, - { - "cell_type": "code", - "source": [ - "pruned_model.summary()" - ], - "metadata": { - "id": "xZu4gPwz2Ptp" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Retraining Pruned Model\n", - "\n", - "After pruning models, it's common to observe a temporary drop in the model's accuracy. This decline directly results from reducing the model's complexity through pruning." - ], - "metadata": { - "id": "pAheQ9SGxB13" - } - }, - { - "cell_type": "code", - "source": [ - "pruned_model.compile(\n", - " optimizer=tf.keras.optimizers.Adam(0.001),\n", - " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", - " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],\n", - ")\n", - "pruned_model.evaluate(test_images, test_labels)" - ], - "metadata": { - "id": "Vpihq5fpdeSA" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "However, to recover the performance, we retrain the pruned model, allowing it to adapt to its new, compressed architecture. The model can regain, and sometimes even surpass, its original accuracy through retraining." - ], - "metadata": { - "id": "IHORL34t17bA" - } - }, - { - "cell_type": "code", - "source": [ - "pruned_model.fit(train_images, train_labels, epochs=6, validation_data=(test_images, test_labels))\n", - "pruned_model.evaluate(test_images, test_labels)" - ], - "metadata": { - "id": "q00zV9Jmjszo" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bb7e1572" - }, - "source": [ - "Copyright 2023 Sony Semiconductor Israel, Inc. All rights reserved.\n", - "\n", - "Licensed under the Apache License, Version 2.0 (the \"License\");\n", - "you may not use this file except in compliance with the License.\n", - "You may obtain a copy of the License at\n", - "\n", - " http://www.apache.org/licenses/LICENSE-2.0\n", - "\n", - "Unless required by applicable law or agreed to in writing, software\n", - "distributed under the License is distributed on an \"AS IS\" BASIS,\n", - "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - "See the License for the specific language governing permissions and\n", - "limitations under the License.\n" - ] - } - ] + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Structured Pruning of a Fully-Connected Keras Model using the Model Compression Toolkit (MCT)\n", + "\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_pruning_mnist.ipynb)\n", + "\n", + "## Overview\n", + "This tutorial provides a step-by-step guide to training, pruning, and finetuning a Keras fully connected neural network model using the Model Compression Toolkit (MCT). We will start by building and training the model from scratch on the MNIST dataset, followed by applying structured pruning to reduce the model size.\n", + "\n", + "## Summary\n", + "In this tutorial, we will cover:\n", + "\n", + "1. **Training a Keras model on MNIST:** We'll begin by constructing a basic fully connected neural network and training it on the MNIST dataset. \n", + "2. **Applying structured pruning:** We'll introduce a pruning technique to reduce model size while maintaining performance. \n", + "3. **Finetuning the pruned model:** After pruning, we'll finetune the model to recover any lost accuracy. \n", + "4. **Evaluating the pruned model:** We'll evaluate the pruned model’s performance and compare it to the original model.\n", + "\n", + "## Setup\n", + "Install the relevant packages:" + ], + "metadata": { + "id": "UJDzewEYfSN5" + } + }, + { + "cell_type": "code", + "source": [ + "TF_VER = '2.14.0'\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" + ], + "metadata": { + "id": "xTvVA__4NItc" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Q2bAksKtM0ca" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import model_compression_toolkit as mct\n", + "import numpy as np\n", + "from tensorflow.keras.datasets import mnist" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Loading and Preprocessing MNIST\n", + "Let's define the dataset loaders to retrieve the train and test parts of the MNIST dataset, including preprocessing:" + ], + "metadata": { + "id": "tW1xcK_Kf4F_" + } + }, + { + "cell_type": "code", + "source": [ + "# Load the MNIST dataset\n", + "(train_images, train_labels), (test_images, test_labels) = mnist.load_data()\n", + "\n", + "# Normalize the images to [0, 1] range\n", + "train_images = train_images.astype('float32') / 255.0\n", + "test_images = test_images.astype('float32') / 255.0\n" + ], + "metadata": { + "id": "fwtJHnflfv_f" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Creating a Fully-Connected Model\n", + "In this section, we create a simple example of a fully connected model to demonstrate the pruning process. It consists of three dense layers with 128, 64, and 10 neurons. After defining the model architecture, we compile it to prepare for training and evaluation." + ], + "metadata": { + "id": "m3vu7-uvgtfC" + } + }, + { + "cell_type": "code", + "source": [ + "def create_model():\n", + " model = tf.keras.models.Sequential([\n", + " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", + " tf.keras.layers.Dense(128, activation='relu'),\n", + " tf.keras.layers.Dense(64, activation='relu'),\n", + " tf.keras.layers.Dense(10)\n", + " ])\n", + " model.compile(\n", + " optimizer=tf.keras.optimizers.Adam(0.001),\n", + " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", + " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],\n", + " )\n", + " return model" + ], + "metadata": { + "id": "If3oj5jSjXen" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Training Dense Model on MNIST\n", + "Next, we will train the dense model using the preprocessed MNIST dataset." + ], + "metadata": { + "id": "Q_tK6Xknbtha" + } + }, + { + "cell_type": "code", + "source": [ + "# Train and evaluate the model\n", + "model = create_model()\n", + "model.fit(train_images, train_labels, epochs=6, validation_data=(test_images, test_labels))\n", + "model.evaluate(test_images, test_labels)" + ], + "metadata": { + "id": "jQ3_9Z1WllVV" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Dense Model Properties\n", + "The `model.summary()` function in Keras provides a comprehensive overview of the model's architecture, including each layer's type, output shapes, and the number of trainable parameters." + ], + "metadata": { + "id": "ZQHxLrsvcLKH" + } + }, + { + "cell_type": "code", + "source": [ + "model.summary()" + ], + "metadata": { + "id": "oxdespw2eeBW" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Let's break down the details from our model summary:\n", + "\n", + "- **First Dense Layer:** A fully connected layer with 128 output channels and 784 input channels.\n", + "- **Second Dense Layer:** A fully connected layer with 64 output channels and 128 input channels.\n", + "- **Third Dense Layer:** The final layer with 10 neurons (matching the number of MNIST classes) and 64 input channels.\n", + "\n", + "The model has a total of 109,386 parameters, requiring approximately 427.29 KB of memory." + ], + "metadata": { + "id": "GymibwxQehOL" + } + }, + { + "cell_type": "markdown", + "source": [ + "## MCT Structured Pruning\n", + "\n", + "### Target Platform Capabilities (TPC)\n", + "MCT optimizes models for dedicated hardware using Target Platform Capabilities (TPC). For more details, please refer to our [documentation](https://sony.github.io/model_optimization/docs/api/api_docs/modules/target_platform.html)). First, we'll configure the TPC to define each layer's SIMD (Single Instruction, Multiple Data) size.\n", + "\n", + "In MCT, SIMD plays a key role in channel grouping, influencing the pruning process by considering channel importance within each SIMD group.\n", + "\n", + "For this demonstration, we'll use the simplest structured pruning scenario with SIMD set to 1." + ], + "metadata": { + "id": "RKatTp55emtF" + } + }, + { + "cell_type": "code", + "source": [ + "from model_compression_toolkit.target_platform_capabilities.target_platform import Signedness\n", + "tp = mct.target_platform\n", + "\n", + "simd_size = 1\n", + "\n", + "def get_tpc():\n", + " # Define the default weight attribute configuration\n", + " default_weight_attr_config = tp.AttributeQuantizationConfig(\n", + " weights_quantization_method=tp.QuantizationMethod.UNIFORM,\n", + " )\n", + "\n", + " # Define the OpQuantizationConfig\n", + " default_config = tp.OpQuantizationConfig(\n", + " default_weight_attr_config=default_weight_attr_config,\n", + " attr_weights_configs_mapping={},\n", + " activation_quantization_method=tp.QuantizationMethod.UNIFORM,\n", + " activation_n_bits=8,\n", + " supported_input_activation_n_bits=8,\n", + " enable_activation_quantization=None,\n", + " quantization_preserving=None,\n", + " fixed_scale=None,\n", + " fixed_zero_point=None,\n", + " simd_size=simd_size,\n", + " signedness=Signedness.AUTO\n", + " )\n", + "\n", + " # Create the quantization configuration options and model\n", + " default_configuration_options = tp.QuantizationConfigOptions([default_config])\n", + " tp_model = tp.TargetPlatformModel(default_configuration_options)\n", + "\n", + " # Return the target platform capabilities\n", + " tpc = tp.TargetPlatformCapabilities(tp_model)\n", + " return tpc\n" + ], + "metadata": { + "id": "wqZ71s70jXhH" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Representative Dataset\n", + "We are creating a representative dataset to guide the model pruning process. It is used to compute an importance score for each channel. This dataset is implemented as a generator that returns a list of images." + ], + "metadata": { + "id": "SnKxedEgqdSm" + } + }, + { + "cell_type": "code", + "source": [ + "import random\n", + "\n", + "def representative_data_gen():\n", + " indices = random.sample(range(len(train_images)), 32)\n", + " yield [np.stack([train_images[i] for i in indices])]" + ], + "metadata": { + "id": "SCiXV1s9jswp" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Resource Utilization\n", + "We define a `resource_utilization` limit to constrain the memory usage of the pruned model. We'll prune our trained model to reduce its size, aiming for a 50% reduction in the memory footprint of the model's weights. Since the weights use the float32 data type (each parameter occupying 4 bytes), we calculate the memory usage by multiplying the total number of parameters by 4. By setting a target to limit the model's weight memory to around 214 KB, we aim for a 50% compression ratio." + ], + "metadata": { + "id": "nylQtALnr9gN" + } + }, + { + "cell_type": "code", + "source": [ + "# Create a ResourceUtilization object to limit the pruned model weights memory to a certain resource constraint\n", + "dense_model_memory = 427*(2**10) # Original model weights requiers ~427KB\n", + "compression_ratio = 0.5\n", + "\n", + "resource_utilization = mct.core.ResourceUtilization(weights_memory=dense_model_memory*compression_ratio)" + ], + "metadata": { + "id": "doJgwbSxsCbr" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Model Pruning\n", + "We are now ready to perform the actual pruning using MCT’s `keras_pruning_experimental` function. The model will be pruned based on the defined resource utilization constraints and the previously generated representative dataset.\n", + "\n", + "Each channel’s importance is measured using the [LFH (Label-Free-Hessian) method](https://arxiv.org/abs/2309.11531), which approximates the Hessian of the loss function with respect to the model’s weights.\n", + "\n", + "For efficiency, we use a single score approximation. Although less precise, it significantly reduces processing time compared to multiple approximations, which offer better accuracy but at the cost of longer runtimes.\n", + "\n", + "MCT’s structured pruning will target the first two dense layers, where output channel reduction can be propagated to subsequent layers by adjusting their input channels accordingly.\n", + "\n", + "The output is a pruned model along with pruning information, including layer-specific pruning masks and scores." + ], + "metadata": { + "id": "xSP6815rsCnc" + } + }, + { + "cell_type": "code", + "source": [ + "num_score_approximations = 1\n", + "\n", + "target_platform_cap = get_tpc()\n", + "pruned_model, pruning_info = mct.pruning.keras_pruning_experimental(\n", + " model=model,\n", + " target_resource_utilization=resource_utilization,\n", + " representative_data_gen=representative_data_gen,\n", + " target_platform_capabilities=target_platform_cap,\n", + " pruning_config=mct.pruning.PruningConfig(num_score_approximations=num_score_approximations)\n", + " )" + ], + "metadata": { + "id": "x4taG-5TxBrp" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Pruned Model Properties\n", + "As before, we can use the Keras model API to inspect the new architecture and details of the pruned model." + ], + "metadata": { + "id": "iPd6ezZN2DNp" + } + }, + { + "cell_type": "code", + "source": [ + "pruned_model.summary()" + ], + "metadata": { + "id": "xZu4gPwz2Ptp" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Finetuning the Pruned Model\n", + "After pruning, it’s common to see a temporary drop in model accuracy due to the reduction in model complexity. Let’s demonstrate this by evaluating the pruned model and observing its initial performance before finetuning." + ], + "metadata": { + "id": "pAheQ9SGxB13" + } + }, + { + "cell_type": "code", + "source": [ + "pruned_model.compile(\n", + " optimizer=tf.keras.optimizers.Adam(0.001),\n", + " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", + " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],\n", + ")\n", + "pruned_model.evaluate(test_images, test_labels)" + ], + "metadata": { + "id": "Vpihq5fpdeSA" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "To restore the model's performance, we finetune the pruned model, allowing it to adapt to its new, compressed architecture. Through this finetuning process, the model can often recover its original accuracy, and in some cases, even surpass it." + ], + "metadata": { + "id": "IHORL34t17bA" + } + }, + { + "cell_type": "code", + "source": [ + "pruned_model.fit(train_images, train_labels, epochs=6, validation_data=(test_images, test_labels))\n", + "pruned_model.evaluate(test_images, test_labels)" + ], + "metadata": { + "id": "q00zV9Jmjszo" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Conclusion\n", + "In this tutorial, we explored the process of structured model pruning using MCT to optimize a dense neural network. We demonstrated how to define resource constraints, apply pruning based on channel importance, and evaluate the impact on model architecture and performance. Finally, we showed how finetuning can recover the pruned model’s accuracy. This approach highlights the effectiveness of structured pruning for reducing model size while maintaining performance, making it a powerful tool for model optimization." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bb7e1572" + }, + "source": [ + "Copyright 2023 Sony Semiconductor Israel, Inc. All rights reserved.\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n" + ] + } + ] } diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_qat.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_qat.ipynb index 8720b8dc5..9ab4ade70 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_qat.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_qat.ipynb @@ -7,44 +7,52 @@ "tags": [] }, "source": [ - "# Quantization Aware Training using the Model Compression Toolkit - example in Keras\n" - ] - }, - { - "cell_type": "markdown", - "id": "af1a972f-01a5-4b56-8ce7-ecfdb6daf942", - "metadata": {}, - "source": [ + "# Quantization Aware Training using the Model Compression Toolkit - example in Keras\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_qat.ipynb)\n", "## Overview\n", - "This tutorial will show how to use the Quantization Aware Training API of the Model Compression Toolkit. We will train a model on the MNIST dataset and quantize it with the Model Compression Toolkit QAT API.\n", - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_qat.ipynb)" - ] - }, - { - "cell_type": "markdown", - "id": "80481dd9-1e3c-4677-9d94-33f144ec540c", - "metadata": {}, - "source": [ + "This tutorial will demonstrate how to use the Quantization Aware Training (QAT) API of the Model Compression Toolkit (MCT). We will train a neural network on the MNIST dataset and apply quantization using the MCT QAT API to optimize the model for efficient hardware deployment without sacrificing accuracy.\n", + "\n", + "## Summary\n", + "In this tutorial, we will cover:\n", + "\n", + "1. **Training a Keras model on MNIST:** We'll begin by constructing a simple neural network and training it on the MNIST dataset. \n", + "2. **Configuring Target Platform Capabilities (TPC):** Define the quantization settings for weights and activations.\n", + "3. **Preparing the Model for QAT:** Convert the floating-point model into a QAT-ready model using MCT. \n", + "4. **Training the Model with QAT:** Perform quantization-aware training to preserve model accuracy.\n", + "5. **Evaluating and Exporting the Quantized Model:** Finalize and export the optimized quantized model for deployment.\n", + "\n", "## Setup\n", - "Install relevant packages" + "Install the relevant packages:" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "b380c492-3c53-4ec1-987e-de693a1ec1d9", "metadata": {}, "outputs": [], "source": [ "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "! pip install -q mct-nightly" + "!pip install -q tensorflow[and-cuda]~={TF_VER}" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + }, + "id": "ee8ecbde24b55fbf" + }, + { + "cell_type": "code", + "execution_count": null, "id": "d49c27b1-65f9-4fd3-be3e-733f4c60124a", "metadata": {}, "outputs": [], @@ -52,25 +60,129 @@ "import tensorflow as tf\n", "from keras import Model, layers, datasets\n", "import model_compression_toolkit as mct\n", - "import numpy as np\n" + "import numpy as np" ] }, { "cell_type": "markdown", - "id": "fcc817e1-5c21-4283-8ec8-8c2aff5feeea", + "source": [ + "## Loading and Preprocessing MNIST\n", + "Let's define the dataset loaders to retrieve the train and test parts of the MNIST dataset, including preprocessing:" + ], "metadata": { - "id": "fcc817e1-5c21-4283-8ec8-8c2aff5feeea" + "collapsed": false }, + "id": "d2c524e5d4985e47" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], "source": [ - "## Create TargetPlatformCapabilities\n", - "For this tutorial, we will use a TargetPlatformCapabilities (TPC) with quantization of 2 bits for weights and 3 bits for activations.\n", + "num_classes = 10\n", + "input_shape = (28, 28, 1)\n", "\n", - "You can skip this part and use [get_target_platform_capabilities](https://sony.github.io/model_optimization/docs/api/api_docs/methods/get_target_platform_capabilities.html) to get an initilized TPC." - ] + "# Load the MNIST dataset\n", + "(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()\n", + "\n", + "# Normalize the images to [0, 1] range\n", + "train_images = train_images.astype('float32') / 255.0\n", + "test_images = test_images.astype('float32') / 255.0\n", + "\n", + "# Add Channels axis to data\n", + "train_images = np.expand_dims(train_images, -1)\n", + "test_images = np.expand_dims(test_images, -1)\n", + "\n", + "# convert class vectors to binary class matrices\n", + "train_labels = tf.keras.utils.to_categorical(train_labels, num_classes)\n", + "test_labels = tf.keras.utils.to_categorical(test_labels, num_classes)" + ], + "metadata": { + "collapsed": false + }, + "id": "729d91394f1ded4a" + }, + { + "cell_type": "markdown", + "source": [ + "## Creating a Keras Model\n", + "In this section, we create a simple Keras model to demonstrate the QAT process. The model consists of two convolutional layers, two dense layers, and dropout layers for regularization." + ], + "metadata": { + "collapsed": false + }, + "id": "fb31c629993369f7" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "def create_model():\n", + " _input = layers.Input(shape=input_shape)\n", + " x = layers.Conv2D(16, 3, strides=2, padding='same', activation='relu')(_input)\n", + " x = layers.Conv2D(32, 3, strides=2, padding='same', activation='relu')(x)\n", + " x = layers.Flatten()(x)\n", + " x = layers.Dropout(0.5)(x)\n", + " x = layers.Dense(128, activation='relu')(x)\n", + " x = layers.Dropout(0.5)(x)\n", + " x = layers.Dense(num_classes, activation='softmax')(x)\n", + " model = Model(inputs=_input, outputs=x)\n", + " model.summary()\n", + " model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n", + " return model" + ], + "metadata": { + "collapsed": false + }, + "id": "5c6f97097cbf81f9" + }, + { + "cell_type": "markdown", + "source": [ + "## Training the Model on MNIST\n", + "Next, we will train the dense model using the preprocessed MNIST dataset." + ], + "metadata": { + "collapsed": false + }, + "id": "5a31cff183889d31" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "epochs = 6\n", + "batch_size = 128\n", + "\n", + "# Train and evaluate the model\n", + "model = create_model()\n", + "model.fit(train_images, train_labels, epochs=epochs, batch_size=batch_size, validation_data=(test_images, test_labels))\n", + "model.evaluate(test_images, test_labels)" + ], + "metadata": { + "collapsed": false + }, + "id": "37e6f320b23217c1" + }, + { + "cell_type": "markdown", + "source": [ + "## Preparing the Model for Hardware-Friendly Quantization Aware Training with MCT\n", + "## Target Platform Capabilities\n", + "MCT optimizes the model for dedicated hardware. This is done using TPC (for more details, please visit our [documentation](https://sony.github.io/model_optimization/docs/api/api_docs/modules/target_platform.html)). In this tutorial, we use a TPC configuration that applies 2-bit quantization for weights and 3-bit quantization for activations.\n", + "\n", + "If desired, you can skip this step and directly use the pre-configured [`get_target_platform_capabilities`](https://sony.github.io/model_optimization/docs/api/api_docs/methods/get_target_platform_capabilities.html) function to obtain an initialized TPC." + ], + "metadata": { + "collapsed": false + }, + "id": "8f7e6ec541426aa5" }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "8bb6f84b-9775-4989-9f74-688958f3a1d3", "metadata": { "id": "8bb6f84b-9775-4989-9f74-688958f3a1d3" @@ -166,128 +278,80 @@ }, { "cell_type": "markdown", - "id": "bf7c811e-cba8-44f3-888f-e7452a68087d", - "metadata": {}, - "source": [ - "## Init Keras model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "690ff5ae-4474-4876-835f-ab2a2bbcb139", - "metadata": {}, - "outputs": [], - "source": [ - "num_classes = 10\n", - "input_shape = (28, 28, 1)\n", - "\n", - "_input = layers.Input(shape=input_shape)\n", - "x = layers.Conv2D(16, 3, strides=2, padding='same', activation='relu')(_input)\n", - "x = layers.Conv2D(32, 3, strides=2, padding='same', activation='relu')(x)\n", - "x = layers.Flatten()(x)\n", - "x = layers.Dropout(0.5)(x)\n", - "x = layers.Dense(128, activation='relu')(x)\n", - "x = layers.Dropout(0.5)(x)\n", - "x = layers.Dense(num_classes, activation='softmax')(x)\n", - "model = Model(inputs=_input, outputs=x)\n", - "\n", - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "id": "7094f140-f86a-4d76-9042-83a0c99a796e", - "metadata": {}, "source": [ - "## Init MNIST dataset" - ] + "## Representative Dataset\n", + "For quantization with MCT, we need to define a representative dataset required by the PTQ algorithm. This dataset is a generator that returns a list of images:" + ], + "metadata": { + "collapsed": false + }, + "id": "a73bebf51aaf672c" }, { "cell_type": "code", "execution_count": null, - "id": "464f2afd-0e80-4a80-86dd-1a26c7d3ea6a", - "metadata": {}, "outputs": [], "source": [ - "# Load the data and split it between train and test sets\n", - "(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()\n", - "\n", - "# Normalize images\n", - "x_train = x_train.astype(\"float32\") / 255\n", - "x_test = x_test.astype(\"float32\") / 255\n", - "\n", - "# Add Channels axis to data\n", - "x_train = np.expand_dims(x_train, -1)\n", - "x_test = np.expand_dims(x_test, -1)\n", + "n_iter = 10\n", "\n", - "# convert class vectors to binary class matrices\n", - "y_train = tf.keras.utils.to_categorical(y_train, num_classes)\n", - "y_test = tf.keras.utils.to_categorical(y_test, num_classes)\n" - ] + "def representative_data_gen():\n", + " def _generator():\n", + " for _ind in range(n_iter):\n", + " yield [train_images[_ind][np.newaxis, ...]]\n", + " return _generator" + ], + "metadata": { + "collapsed": false + }, + "id": "a82f6b9bae8269a7" }, { "cell_type": "markdown", - "id": "b00ab0db-ec7d-4d55-9c52-3440289e4ae1", - "metadata": {}, "source": [ - "## Train a Keras classifier model on MNIST" - ] + "### Creating a QAT-Ready Model with MCT\n", + "The MCT converts a floating-point model into a quantized model using post-training quantization. The returned model includes trainable quantizers and is ready for fine-tuning, making it a \"QAT-ready\" model." + ], + "metadata": { + "collapsed": false + }, + "id": "f4a247d3bde88990" }, { "cell_type": "code", "execution_count": null, - "id": "2a75d82e-e2a0-4204-a4b5-31263bc4b117", + "id": "2c171d2d-6f0d-474d-aab6-22b0b0c9e71e", "metadata": {}, "outputs": [], "source": [ - "# train float model\n", - "batch_size = 128\n", - "epochs = 15\n", - "\n", - "model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n", - "model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2)\n", - "\n", - "# evaluate float model\n", - "score = model.evaluate(x_test, y_test, verbose=0)\n", - "print(f\"Float model test accuracy: {score[1]:02.4f}\")\n" + "qat_model, _, custom_objects = mct.qat.keras_quantization_aware_training_init_experimental(\n", + " model,\n", + " representative_data_gen(),\n", + " target_platform_capabilities=get_tpc())\n", + "qat_model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"], run_eagerly=True)" ] }, { "cell_type": "markdown", - "id": "6fd0d525-4bc1-4958-ac67-d114bd25a001", - "metadata": {}, "source": [ - "## Prepare model for Hardware-Friendly Quantization Aware Training with MCT\n", - "The MCT takes the float model and quantizes it in a post-training quantization fashion. The returned model contains trainable quantizers and is ready to be retrained (namely, a \"QAT ready\" model)." - ] + "Lets evaluate the performance after the basic post-trainig quantization." + ], + "metadata": { + "collapsed": false + }, + "id": "d38ba814d794cd57" }, { "cell_type": "code", "execution_count": null, - "id": "2c171d2d-6f0d-474d-aab6-22b0b0c9e71e", - "metadata": {}, "outputs": [], "source": [ - "n_iter = 10\n", - "\n", - "\n", - "def gen_representative_dataset():\n", - " def _generator():\n", - " for _ind in range(n_iter):\n", - " yield [x_train[_ind][np.newaxis, ...]]\n", - " return _generator\n", - "\n", - "\n", - "qat_model, _, custom_objects = mct.qat.keras_quantization_aware_training_init_experimental(model,\n", - " gen_representative_dataset(),\n", - " core_config=mct.core.CoreConfig(),\n", - " target_platform_capabilities=get_tpc())\n", - "\n", - "qat_model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"], run_eagerly=True)\n", - "score = qat_model.evaluate(x_test, y_test, verbose=0)\n", + "score = qat_model.evaluate(test_images, test_labels, verbose=0)\n", "print(f\"PTQ model test accuracy: {score[1]:02.4f}\")" - ] + ], + "metadata": { + "collapsed": false + }, + "id": "976a5942ac5fa9c6" }, { "cell_type": "markdown", @@ -304,12 +368,23 @@ "metadata": {}, "outputs": [], "source": [ - "qat_model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2)\n", + "qat_model.fit(train_images, train_labels, epochs=epochs, batch_size=batch_size, validation_split=0.2)\n", "\n", - "score = qat_model.evaluate(x_test, y_test, verbose=0)\n", - "print(f\"QAT model test accuracy: {score[1]:02.4f}\")\n" + "score = qat_model.evaluate(test_images, test_labels, verbose=0)\n", + "print(f\"QAT model test accuracy: {score[1]:02.4f}\")" ] }, + { + "cell_type": "markdown", + "source": [ + "## Finalizing the QAT model: \n", + "Remove the 'QuantizeWrapper' layers to retain only the layers with quantized weights (FakeQuant values)." + ], + "metadata": { + "collapsed": false + }, + "id": "d34761c03296a31a" + }, { "cell_type": "code", "execution_count": null, @@ -317,14 +392,23 @@ "metadata": {}, "outputs": [], "source": [ - "## Finalize QAT model: Remove QuantizeWrapper layers and leave only layers with quantized weights (FakeQuant values)\n", "quantized_model = mct.qat.keras_quantization_aware_training_finalize_experimental(qat_model)\n", "\n", "quantized_model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n", - "score = quantized_model.evaluate(x_test, y_test, verbose=0)\n", + "score = quantized_model.evaluate(test_images, test_labels, verbose=0)\n", "print(f\"Quantized model test accuracy: {score[1]:02.4f}\")" ] }, + { + "cell_type": "markdown", + "source": [ + "Now, we can export the quantized model to Keras:" + ], + "metadata": { + "collapsed": false + }, + "id": "52158ce9c8ded4bb" + }, { "cell_type": "code", "execution_count": null, @@ -332,17 +416,28 @@ "metadata": {}, "outputs": [], "source": [ - "# Export quantized model to Keras\n", - "mct.exporter.keras_export_model(model=quantized_model, \n", - " save_model_path='qmodel.keras')" + "mct.exporter.keras_export_model(model=quantized_model, save_model_path='qmodel.keras')" ] }, + { + "cell_type": "markdown", + "source": [ + "## Conclusion\n", + "In this tutorial, we explored how to perform Quantization Aware Training (QAT) using the Model Compression Toolkit (MCT) with a Keras model. We began by constructing a simple neural network and preparing it for quantization by configuring the Target Platform Capabilities (TPC). Then, we converted the model into a QAT-ready format and demonstrated how to train and fine-tune it using hardware-friendly quantization settings. This approach can significantly reduce the model size and improve inference speed while maintaining high accuracy, making it ideal for edge AI applications.\n", + "\n", + "Feel free to experiment with different configurations to see how they impact your models." + ], + "metadata": { + "collapsed": false + }, + "id": "8c4089ae72fb2c6d" + }, { "cell_type": "markdown", "id": "db77d678-1fa7-4dc0-a6f3-bac10ba2d8ed", "metadata": {}, "source": [ - "Copyright 2022 Sony Semiconductor Israel, Inc. All rights reserved.\n", + "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", "\n", "Licensed under the Apache License, Version 2.0 (the \"License\");\n", "you may not use this file except in compliance with the License.\n", diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_xquant.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_xquant.ipynb index 04bbb881b..229b3bce6 100644 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_xquant.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_xquant.ipynb @@ -1,211 +1,207 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Quantization Troubleshooting with XQuant\n", - "\n", - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_xquant.ipynb)\n", - "\n", - "This notebook demonstrates the process of generating an Xquant report. The report provides valuable insights regarding the quality and success of the quantization process of a Keras model. This includes histograms and similarity metrics between the original float model and the quantized model in key points of the model. The report can be visualized using TensorBoard.\n", - "\n", - "## Steps:\n", - "1. Load a pre-trained MobileNetV2 model and perform post-training quantization.\n", - "5. Define an Xquant configuration.\n", - "6. Generate an Xquant report to compare the float and quantized models.\n", - "7. Visualize the report using TensorBoard." - ], - "metadata": { - "id": "ag0MtvPUkc8i" - } - }, - { - "cell_type": "markdown", - "source": [ - "## Install" - ], - "metadata": { - "id": "EonIXpPQlR_6" - } - }, - { - "cell_type": "code", - "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "!pip install -q model-compression-toolkit" - ], - "metadata": { - "id": "kCLHJUhTlPDi" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Import necessary libraries" - ], - "metadata": { - "id": "UUrYYDITle3z" - } - }, - { - "cell_type": "code", - "source": [ - "import model_compression_toolkit as mct\n", - "import numpy as np\n", - "from functools import partial\n", - "from model_compression_toolkit.xquant import XQuantConfig\n", - "import tensorflow as tf" - ], - "metadata": { - "id": "NKKHNppSllmU" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Define data generator\n", - "For demonstration only, we will use a random dataset generator for the representative dataset and for the validation dataset:" - ], - "metadata": { - "id": "-4kQtkZLlnJj" - } - }, - { - "cell_type": "code", - "source": [ - "# Function to generate random data. If use_labels is True, it yields data with labels;\n", - "# otherwise, it yields only data.\n", - "def random_data_gen(shape=(224, 224, 3), use_labels=False, batch_size=2, num_iter=1):\n", - " if use_labels:\n", - " for _ in range(num_iter):\n", - " yield [[np.random.randn(batch_size, *shape)], np.random.randn(batch_size)]\n", - " else:\n", - " for _ in range(num_iter):\n", - " yield [np.random.randn(batch_size, *shape)]" - ], - "metadata": { - "id": "-xM1K6tVlna8" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Quantize MobileNetV2\n", - "\n", - "We will start by quantizing MobilNetV2 using `keras_post_training_quantization`:" - ], - "metadata": { - "id": "naWFGx_vl6tX" - } - }, - { - "cell_type": "code", - "source": [ - "# Load the pre-trained MobileNetV2 model and perform post-training quantization using\n", - "# the representative dataset generated by random_data_gen.\n", - "from keras.applications.mobilenet_v2 import MobileNetV2\n", - "float_model = MobileNetV2()\n", - "repr_dataset = random_data_gen\n", - "quantized_model, _ = mct.ptq.keras_post_training_quantization(in_model=float_model,\n", - " representative_data_gen=repr_dataset)" - ], - "metadata": { - "id": "RlAuiXAzl7Ef" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Generate report\n", - "\n", - "First, we will create an XQuantConfig object with the directory to use for logs and with custom similarity metrics to compute between key points of the model. Here, we use the `./logs` directory for saving the generated logs, and add MAE similarity metric to compute (in addition to the default similarity metrics that are implemented: MSE, CS and SQNR):" - ], - "metadata": { - "id": "6alpyrD8mEm2" - } - }, - { - "cell_type": "code", - "source": [ - "# Define the validation dataset and Xquant configuration, including custom similarity metrics.\n", - "validation_dataset = partial(random_data_gen, use_labels=True)\n", - "xquant_config = XQuantConfig(report_dir='./logs', custom_similarity_metrics={'mae': lambda x, y: float(tf.keras.losses.MAE(x.flatten(), y.flatten()).numpy())})\n", - "\n", - "# Generate the Xquant report comparing the float model and the quantized model using the\n", - "# representative and validation datasets.\n", - "from model_compression_toolkit.xquant import xquant_report_keras_experimental\n", - "result = xquant_report_keras_experimental(\n", - " float_model,\n", - " quantized_model,\n", - " repr_dataset,\n", - " validation_dataset,\n", - " xquant_config\n", - " )" - ], - "metadata": { - "id": "e8m0CNs6mE93" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "## Visualize in TensorBoard\n", - "\n", - "In the TensorBoard, one can find useful information like statistics of the float layers' outputs and the graph of the quantized model with similarities that were measured comparing to the float model. Currently, the similarity is measured at linear layers like Conv2D, Dense, etc. (may be changed in the future). When observing such node in the graph, the similarities can be found in the node's properties as 'xquant_repr' and 'xquant_val' (the similarity that was computed using the representative dataset and the validation dataset, respectively).\n", - "Make sure to choose 'xquant' from the 'Run' dropdown menu on the left side of TensorBoard.\n", - "\n", - "![tb_keras_xquant.png](data:image/png;base64,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QgghhBBCCCGEEEK0I2bPnm3PPfecHXjggU58y4bKyko7++yznajGX6aFEEKIfECClRBCCCGEEEIIIYQQeU5NTY0Tp8466yzbeOON7eSTT7YPP/ww/DVzJk2aZB999JEbHzJkiJWWlrpxIYQQoq2RYCWEEEIIIYQQQgghRB5SV1dnP//8s/3f//2fbbjhhnbwwQfbo48+agsWLAiXyJ433njDxo4da6uuuqqtv/764VwhhBAdjWuvvdYN7QkJVkIIIYQQQgghhBBC5CEVFRV29dVX20033WQzZ84M5zadefPm2dtvv+3Gt9hiC+vTp48bF0II0bG49dZbk4IV4+0FCVZCCCGEEEIIIYQQQuQ5a6yxhl100UX27LPP2jrrrBPOzQ48qwgHWFxcbNtss40VFRWFvwghhOgoIFD9/e9/D6fMjbcX0UqClRBCCCGEEEIIIYTIGASTYcOGueHmm292Xjt33HGHbb/99tavXz83MP7II49YZWWlW4ewduedd54NGjTI/b766qvboYceau+8844Le5eO8ePH25VXXmmbbLJJctuMM4/fGgLvpPvvv7/ece2555722muvWW1tbbhUejiub7/9tt5x+21wbpx3S4OwtMcee9ibb77pyv2oo46yZZddtslC0+uvv26//fabrbvuuk0WvYQQQuQvN9xwQ1KsWn755d0AzOO3tuTTTz9tdJBgJYQQQgghhBBCCCEyZu7cufbZZ5+54f3337fjjz/eLrvsMue942H8z3/+szOOkTNp//33twceeCAZ1q66utreffddJ8A899xzbl4UBCVEoR133NFuvPFGmzJlSviLuXHmIeQ8/fTTsYLX9OnT7eyzz7bzzz+/3nF98cUXdsIJJ9jll18ezomnpqbGiV177bVXveMGtsG5nXTSSfbrr7+Gc1uGkpISJ7hhcCwoKAjnNo0ZM2YkwwFuu+221r17dzcuhBCiY4AX1VVXXeXGl1tuOff84lnGOPBbvntaSbASQgghhBBCCCGEEE0CbyWEp7XXXttOPPFEJzCVlZWFvyZ6eiPsICANHjzYiVtbbrllchmEq+HDhzsxJcrzzz/vPJsWLFjgpgmHx/aPOeYY6927t5uHiESIPPYfBbHpv//9rxOzPH379nXr7rzzzrbEEkvY6NGjw18WBQHs8ccft4svvji5/4022shOPvlk23vvva1r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YSXanNmzZ9vHH3/sXqJwze8ojBw50rp16ya3e7FYIA8rIYQQQggh2paO7mHVnsE768EHH0z2MM8ERKYNN9wwnBJCCCHaL9l4WLWJYMULE67YxAPOx6SUmfDuu+/aO++8Y3vuuaetttpq4dz2wcSJE12CUmI177777uHctmHmzJl23333WU1NjR1xxBEdxiDNx8Frr73m6gl1ZJ111gl/EaJjIsFKCCGEEEKItkWClRBCCCHykbwUrHhJQuBh4EUJCgoKbJlllrFdd93V+vfv76bbC4gRI0aMsAMPPNDWWmutcG77YPz48Xb33Xfb6quv3qx4yM0FkYoeRlOmTHFJUHv06BH+0jHg/J588kn77rvv7Mgjj7Tlllsu/EWIjocEKyGEECK3zJtXYVOnzbAZM2cH308VVh28W4a2aNFC8DlKh8rOncqtW9elbOkeXW2Jzp3CX4XIfyRYCSGEECIfyTvBCm+qBx54wMaMGWNdu3Z14lTPnj2dcPL999+7pJXbbrutbb311u1GtJJg1XwImfe///3Phg0b1mE9kKZNm+bKetlll3V1pb16FArRGBKshBBCiNwwb36FTZw01X4c94tNmvybE6wqFlRabV2dFQT/RMtSGHyPlpYWW9cuS1rv5ZaxlVfsY32CvxKuRHtAgpUQQggh8pG8E6w++OADe+aZZ5xAcsABB9RLcIlB/7///a/LY4SXzcorrxz+kt9IsGoec+bMsTvvvNMlPuW6d6TcVam8+OKL9t5779lBBx3kylyIjogEKyGEEKL5zJw1x776dqx99c0YmzFrnpWUllunzktYaWmpS5wffL4lFhQtRm1tjetQWTF/ni2omGddl+psA1fva2sO6Oe8roTIZyRYCSGEECIfyTvB6uGHH7bPP/88rbhDmMDnn3/etthiC9t5553DuQl4yZo3b57768IzdO6c1guLFzEfbrCxZYGQbWybj7/UZfEK40MFEFWiIhukClZ+eb+txAdl5vAiybFwTI0duz9u1snkPFOP7ZdffmlQsOJllgHizj1KY+WUDirn448/7sJBbrrppuHcRfHbT912tAz4gC8vLw9/WZRszgey2XYmTJo0yYlz5AyjvOVlJToiEqyEEEKI5jFr9hz77ItvbdSXP1hVjVmPpZcJnn3dg/fXzlZUXBwuJVqDmppqqwi+K2fNnG7Tpk21ooJaW3tg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IRrjvffes8MPP9wNt99++yJiVNeuXe3ggw+2srIy69mzp/P4YLyteeKJJ5LHzXgqa665pjtW2HLLLW2LLbZw40K0NXQewkOqKXzwwQd20UUXJYWqNdZYw04//XQnUu25557JexOxCs9IwgUK0RwkWAkhhBBCCCGEyAnk7Pj111/DKbNZs2bJw0oIIURWFBQUOOEH76t33nnHNt988/CX/KZz5872j3/8w3mH3XXXXdarV6/wFyHalgULFiSF4fXXX98+/vhjGzNmTOzw2GOPWffu3d2yeGVRl71YxX356KOPOsFq2LBhds0119i///1vKy4udr/TUembb75x40I0FQlWQgghhBBCCCFygkICCiGEyBUYwYuKisKp9gMeJ4huQuQLc+bMSYpOK6ywQsYeixMmTLBRo0a58WWXXdaOO+44J8x6qOcIyttuu62bJvQg+UyFaA4SrIQQQgghhBBC5ASFBBRCAPc+ojU98BnuuOMOZ8iMMn78eLvyyitdwn6f7H/77be3W265JTZ5/6effprcHmGnpk2bZjfccIMNGjTIrfv444+HSybw2996662T22fZP//5z/bFF1+4vCzpiDu2TNfNFjxRr7/++uS+Vl99dTv00EOdZxGG36OOOip5znhJeJ599tl65RH9zXPzzTcnl2E8Fc6DXEznn39+vXNlnG3GhRBjP/zmt8t1mTp1qgsP5q8F50DnBQzdvqyi61133XVuHrz++usu9w3zOSdP9Nij83/66adkmWQycHypZFM3CG922mmnuW3hWeJhPHUf0WU5Ro41jrj6xTjz+C2O1PqP58ubb75pBx54YL1t3HTTTU3OVeTBW/r44493+0KgQLSIQvnceeed7veTTjqpnmc18PuNN96YPF48dqA17uHofUEdom7iBeTL2tfNDz/8cJH1U+v2J5984vbz+9//3gYOHJjc/yWXXOLylTUE1+CRRx5xIfOix37eeee5ey5136l1h3v/tddes1133dWte+aZZ8be45ny22+/Ja/jkksuaSUlJW68MbhG1Afo3bu3E61SQcBaZZVVwqnEOkI0h1YTrAqqZlrp28dZpweXt87/XaLVB/Zb+s7vguOYFR6REEIIIYQQQohcUl5e7oxc3sNq3333DX8RQiwukMfkggsucCGnPvvsM+vfv78TJHzIKAy1r7zyimsfMGqTsN+DkZaQanHJ+zHWsj2GF154wRnKr7rqqqTXgBfE2D4G8h133NFtf9y4cW4+sCxGZMJaDR8+3GpqasJfFoJQFHds0XVvu+222HWzhfBbGM8Re/y+OA8EP4zW//rXv5LliOG9trbWLQNz585Nlkfqbx6O2S/jy8nD8f/nP/+x3Xff3e6///5658o4IuNee+1lL730Uj3jOvthf367b7zxhhNNEN2i1wIxhXPjXCC6Xuo1IfQf8zknT/TYo/Orqqrshx9+SP7W2BA18jelbrAOwgnbSi2j1H1El+UYOdYolAH78PtP3R7z9thjD3v66afrlTlE6z/3yd/+9rek8OJhG//3f//n8g01R7Sio8kSSyzh9sX1TRXRZs+eba+++qr7nXs51aOG37nu/P799987wQVa4x6O3hcIPryTUM99Wfu6iSiM6Bgt59S6TSg88pU9//zzyWvM/u+++263fmob5eF42a8X1jys+8ADD7j7CnEuuu9o3aHMub4nnHBCMrwexx13j2dKtD5wfTMVrAYPHuzaIAbaBPLLpYIn/eTJk8OphLAlRHNoHcGqrtbKXhxqxWPut4LKtkm8xn6Lf7jXSl89IJiq3+gLIYQQQgghhBBCiOaBpwXGcm/AxqsBo200hBSGbLwFvAGZBP4nnniiMwD37NnTzcMQfPHFFzuvgDjwFIga6qOw/UsvvTRpYN5yyy2dEf/vf/+7bbTRRm4exl9EIh/qyoPIcOGFFyaPjXXJz4LRHCMzohvr4vWBwb05YEC+9tprnYEa2PZmm21mJ598su29995OMEC4iIo1uQLjOAZzPJ04H/aNcMW5IjZyTQADO4JCVDBIBVGN3zl2riN/vTjJ+rfeeqsTMJg3ZMgQ50WCJ51ntdVWc8IF8/HSbQwM7Yig66233iLDOuusU8+gzvaWWWaZcKppdaO0tNSVDceH8d7DOPMYfL1tDIQPPGz8/n3dP+aYY5JGfsqMe8gLfXEgFt13331uv9w30XsHnnrqKSfKNJVOnTo5TySgPEaPHu3GPVxv8nQBvyOwRMUX7lvvncc5rrTSSm48Skvdw1Hef/99d38NGDDAlTECmA+Fx/qXX365ffDBB246Du4/xBj2jwC19tprh78kxPW4Noo2kDbPXz/qI9eH6+zX57w4v4b2jRDIMeYKhDgPbQ85qLzXGAOeYJyvz3Pl4X4jnxUDQldh4aJSAtcSQQuWX355dx8K0RxaRbAqnPKeFU5b1AW3LSia/KYV/vZJOCWEEEIIIYQQIleMHDnSGXt9SECMsYS5EUJ0fDDUnnXWWc5IDIhVtAG9evVy00B7QJgujPJwyimn2JNPPukMvBhwMZiyHmDwxdspHSuvvLITkjB6YyxFVMAQjGeG3z5CCF4B++23n/MCIowZHizAMi+//HI9QzuGdy+2sQ7h1dgu+fgQbjBaA4bkF1980ebPn++mmwLHTQhVQMzBo+Lee++1M844w66++moX2syXRa7h3B988MGkQZwwaFwrzhXDPp4lG2ywgfsN8dBf0zgQhR566CHn7cJ15BzwtvKiFR4miBcYvinTP/zhD7bTTju53wCjOfWA+RtuuGE4Nz1cd44PwS11OPvss8OlEmWK+Ie4BU2tGwiHlAnHt/HGG7vfgXHmMXgPoobAA4W678s8WvcRCRFAESqB/VOGDT0/8b4hnCL3DQP1EUEG2Md7773XLC9Arr+/hl9++WVSPAJC5UWFGjzkECU9P/74Y1KwShURo7TEPRyF48dj83//+58rY8qfcvJ1m/XZV6pI46FuU6/wqDr33HPd9WIb/nxS2yiOg+1F20DuY64P15ltIXBCY/tGWKNuvfXWW65s/vrXvzov9qYSFZ3vuece19ZGryn3KSJWtt55HD/3ow83yL2difAsREO0jmA158dwLLh5l1zJ5h0+t9UH9uspnPl1OCaEEEIIIYQQIlfQ43zo0KEuBwMhATF+KIeVEB0fDJx4QHivDgyWGFijYhXg7eA9DzBk43mAB4uH5THEe/AyiBOFyKNCmC+EpKWXXtr1/scrpKCgwIUT/O9//+uGY4891oqKisK1ErlW8PLxYGTFg8LjPasAzxy26WE7hAr0XjXrrrtuk0N0ISQQrsyLF7SZeDhw/B48bgh71hJgyEcYo4zw1KHdju6b8vWeLJAa8i0KIt76668fTpnbDs8ChChA2JgzZ44bb0kQSMgt5IUO8g7hFedpbt1oLnToQNgBxC5CzUXrPnmFEHzXWmstN42I473vUuHeodyjAgYiyrbbbhtOmcsDl04MyQTEJO9l9fXXXyfzynE/fvTRR27cg4BFeEuP974CzjVazp6Wuoej7LLLLk4Ei3oFrbjiiq5ueDEOccmLLalQxnhneTi27bbbrt59iWjohR9E+6gIjVdVNDwe58G5rbnmmm4asSsuTxycc845duqpp1qfPn1c2XTp0qXePZoNCGlRcYpj896cqd55iM8IWulEwCgsgzcf6wDt/iGHHBJ7vYXIhlYLCZhX5NvxCCGEEEIIIUQHAaMKCcXJxRA1WgkhOiYYQvGSwFsAMH7iUUCot1TwFPAizaabbrqIoAUYlAkrBQglcb39MQL7ZaIgAOCls8UWW7ihR48e4S+ZEfUMwAOB0GtRLxU8abxXDV43eN80BcL8EX7QQ1lExYuWBnGEfVJG/GW6qcQZpxEIWtNoTR0hnKHPKUQIN3KARY+huXWjOVCHouHf8PCJhir0cD94LzPuEx9mLRXOKy40Wy7LHBEJURZ++uknmzRpkhtH1PXCG8Ltqquu6uozohUgaPEOANyjce0AtNQ9HIUyihN5EFO9GIdghNAUR1x5Mi8qmCHU+TYqGiqRfURDCHoQFikzQChLt2+EsqYKVHHQXuG1h0BFDjA8IhGtaavpGOC9+4C2PDVvWSqIVXRQIKwidZXzYlveo1GI5tA6gpUQQgghhBBCiMUC3zscY4fvYS+E6LgQyoyQXR48Iui9nwqG7Kg3Afl88FTAuyg64FXgE/hPmzYt6dmRDXg+4aFCiLitt946maeFIRo2LhW8J/yxY0zmXDA6/+53v3PeHszLxPOgMRAwol5HeFG0BXjg4OlF2DXCl0XLiXCI7QHK8rbbbksKpoiOhH9L593b1LrRHCjnaD1eZZVVYsUIxBDvfQPcL80JO9kcCOE4aNAgN44g5cVAwgMiJCM2EYLQL4M3GMeKh9v333/v5nEuUQ+jbGjJ60THGrbjSefllI4VVlgheV4IeD48IuXiBXm2iUiU2r7hYYVXliedd1cuoa7h0bbrrrs6UckLkR4Ea0R4L9hz/fw1TAeesnjRc73x2Dr//PNj230hmkKbC1bFX11nJZ9dnnYomPNTuOTiTVVVVT33TSGEEEIIIYTIRzBmAQYdeVgJsfiBt1XUmyQdeCNg5E4dvvnmm6TRtykgBBFOi3w35NKL5m5pDLxKyOVEuDYfMgxbzEsvvWR/+ctfnOfOYYcdZqNGjWqWcEVuIsQ4wPDdmt4+nokTJ7qQZxjVER2j4RDbE4R0I68RcM3wGknn1dOcutEcqENRYSLOsygfQXDinoDRo0c74c3f2wi5CBzeIwxvMM4RTyw8smC99dZrkhdiS18nBJw4D7VMyWR9hBw80VLbN+b5sJX5BIKWFx+BPGTpIEQk+Uqj4TcR43LpESYWb9pcsCr5+norGfW3tEPh3OxU7vYCyexwT25oIKHfrFmznGspSQLpIeJ7GQkhhBBCCCFEPkKv3OWWW84JVvKwEmLxAKGAPCuAEfNf//pX2lBXnu233z6ZDyrdQD6UpZZaKlyjcfC2wduLkFdAHh4ENPIHEYKP8F1XXHGF+y0dhGojF9Lbb7/t8nJttdVWLtyVB8+CI488MpmLqyng/eNFKoSi1jZg4wlzzTXXJHOOka/q3nvvdcZ0yoiB/Dv5Dtc01XBOTqQ4clE3mkpZWVk9kaq92PYIz+mf49gxKSe8noDcVOSTQuTg3BCr8MJCzMAjC6K5zTKlLa9TLkE0xXMxrl2LDtEwpG0JdTQaojWdgM01JveVz2tHzkHailyGoxRCIQHbGBr1nXbaKXaIxjDm5Q93XAYPPQ6uuuoqu/322zPyvsp2eSGEEEIIIYTIBgxKGLg+/fRTGzFihOv5jieBEKLjgr3ib3/7m/3vf/9LhgTl3r/vvvuc8dmDfcOLWoCh2+eDSjdg8KXnf6b88ssv7jgAz45//vOfTsBAIMq29z+5uPbbbz+766677KOPPnIGdIQdQCAhRGBcfq1MwLjr80bhTTZ79mw33lrgxfbcc8+5cQzmV155pW2++eZNzsnVFlD2CBnecI4djRCO6Qznuawb2cI9grjjSfdcxGsvGoqNUJGdOnUKp1ofxOJ11lnHjeNxQyg78lNRft4bh2P0uZpefPFFd+8DeZp4H8iW1rhO1B1fbyBbjzfEeO8xh/Ds27VoXjLaLUKJxrVr0cF7qLUkeHMiwDMgSkfbZQ+RvaL1Mi6vHV6ZF110UbLsCOmK6FZeXu6mhcgVeSVY1XZZzWqX3bLeUFe6sBdLR4Qkf/QYihv22msvd9PzUMPbihfAqJs48VyJk5ppT5xslxdCCCGEEEKIbCAnBL1yyQPDQE6UdHlEhBAdg1122cWGDh3qQtudddZZSdHjhhtusDfeeMONQ2p+Hoyn6Qz32C/ijKqNgc0Doyrg4ZCN9wJeLwggeIfxN+oFw7EPHjzYGWt9iDS8PXzummyhjPr37x9Omb3zzjtNOt+mQhl5LxgECcS59gRldcstt9TLW0UowIa88ZpTN5oLnc+jdZ+wenFiJ/Y6PJk8XixqKxCIvKBC+V1//fVOYEWs8jmgsFnibQXPPPOME62A840KOJnSGteJkIV4agFiVdSzqDEQFT/55JNwKlH3vBiJQOfFL5ZpKA8UAlFrwbkeffTRLtQp3qNxdmFEc8RIT2q5I9L96U9/SgqSiFV//etf6wmxQuSKvBKsqtc+0yp2er7eUNu9fiI40bLQ8OKJRShC/jYlJjPeW6zP0JgnFy8ZNIosy8tSY/urqKhwy6Y27NHtsExDRM8xk31Gty3PNCGEEEIIIdKDOJUuHJMQomNCLhfv+bDFFls4LxfAsE16g59/XpjqARHbG0IJqUfoL/LiROEbHO8sjKPTp08P52YGQlCXLl3cOKGrol4UgNHVixyp4MnCMf373/924fLI2ZMKx+Zh+aYaaxHAvJEf8N7yhmAPgkbqvChRMcDnD4qC0d+Hb0slGuIQj4vU8F+UHXmtWgo8jjyEJ0SgzAbK5e6773bjXHPyi6XLW+VpTt3wpB53tD40BqElfd1/5ZVX7Nlnn61nj6IMmOdDTSJWIZK2NXhKMYAXObmPo+IgdRkhl3uecgHyVzXFOywX18lDPYkKgMB9RfvizwXvMLzE4sALMVWURoSK7h9Bz5/nSiut5DwVge3juejFtyh4oR9xxBHub2sQDe2IJ/zLL79cr+4xzjx+A+qp95YFbKi05b492nHHHZ1jhcQq0VIUnX/++ReH4y1G4fRRVjQu4c5ppV2teuApifEAclgVVCaU3ZoV97DaHi0jULXWfjKFBpYeNDQCjcV0RSThhempp55yDwGmL774Ypd4kEaDXj+4y6KY8zCLPkABoaWx5WmcSI5MY8qLEo0yD0p6PNFw09umMddbGn1eGG666Sa3rt8GLz4DBgyoF86Q/fHiRNzZJ598MrksD5I11lgj6Xrqj52XL3pAXHfddW45lqEHBNuhwSSudHQ7JHnEe40YrB6Wxe2dsIiUhV+WeSzLQxH8Pnlp42HL8n7bDGyT69acBI1CdDT8Bwb3Xq4hBwZE72chhBBC5C8YabxnAt8R3vAkhGg9+P4F76nEt202uaAaAzEHAyfwfb7DDju4b36+k/G84HsaAYVQVHxjDxkyxP1Oe8C396uvvuqODU8Tvul51586daoz1l922WU2fPhw19vfr4vdgu09+uijbp98IxCVJtUgjhCErWX8+PGuoys2DbZNJ1S+/8877zyXY8eDgZlQcoQrZDnKifPi2Ah/xl9CezEfGwZGW29A32OPPdx5N9U2QPtIOSLoYechnxTHjICHIRtvLsrJEy1noEzeeustV8acH3YTzh8bzEMPPeREnKiHB4Z1BEWgfnB+eLgxcB2ww9B2P/jgg27d6Lcdxustt9zSnStlgeCCLQUwXkeN20BHYmxYfhuEViSvoYfnxOOPP+7Kl/PnOnPe2JV8CEiuHaEYIboPPNsQM/222S7Ribg+77333iID3iQILs2pGx726T2ICJHHeVJ+LEOHjeh5U9f33nvvZKQk/yz09Ypry7FwHdkWtjQGfmMe50gISm+Ly6T+p7svmwPnNmrUqOT15thOOeWUetfTl78Xp7nHySfmv+U9LX0PQ7QMqGeUN3+pX5999lm9+4pzOeecc5xNEFLrNtfFi77UI2yp3BteHKZOnn766cm2lWNfZZVV3DFTL1gOOyLnwT3+1Vdf2c0332x///vfnY2Te3brrbd2AnJj90xz4N6mDAnVTP167bXX6tU9PErxiOU3OOqoo1yOQe53BEi8srxIx/XaYIMNXNsSd7/5AZttNASsEN4JxNfxhpDFvR1C44AbJ4nteCCSgJAHAS9LNDapZLI8jfZ//vMf14jSGwoBiL9MM5/fG8L3gOKhsu2227rGl0acFyJeoFJjV9NI8iDmeE499VT30rf//vu7WLVXX321e1GNQqNOKAEEOx5ENHq8YPEQwg2cRpyHDPtl/7zw8oLL8Xs4B3pJ8bD2++QBwMsmx4KYFwUBD2Frt912c3FlKUPKkpcq7zoshBBCCCGEEEKIhWCo5Jvbe/FghMXQzDc8xvdhw4Y5g7e3R2AQ9t/c9Nr3BmKMouSwwtCaKdgYTj755OS+MRhfeOGFbtvYOfB28N4igOEsGqWF73+MtYCBmg6s22yzjRMOjj766KRtBA+T448/3hmomwrHesEFFyS9bhCa2B/HSnkgWvmOtXFgBzn00EPDqYShnvLDloNRHO+0aNjBKHhcULb+GrAu++TcsY9g4I+ui5eJNzbmAq7BZptt5sYRCcgHxvF4oaAhsBdFvW68TYeO3nGDv2bNrRtAnfSeXNQP7GVsMxMDLHX/wAMPdLY54LzpMM71YmCceVwT7g/uk8Y6jrcG2MHwlvLgqYMoEwUxjjz8HsQyhKSmkIvr5OHYuQ+oB9Rtf195sI3i+ZYO7j+W575i/9yf3huR42M+oVCjUD8uvfTSZJhNjpfjZn3qOIId9xLrE0K1KXm+mgLioG9309U9OOCAA+y4445Ltm2UbVT4RsDCxpt6n6UOqV6bQmSDBKs2BoWfniSpA+KJ7xGVCoILsWBxW6XxpZHj4UGjGPey1Njy9FJAhOE3enDQa4YXTP4yzXxeMFMFnSg0RLzgsB+EJxpsXrp4IOBdxW++seJF56WXXnLLsH0e+PSs4MWQF0BePhC+otAbgF4UJ554osvvRUxYev48//zzricESf7YD9vkd0QrXFm9sMSxcw6cOw+o6D733Xdft1yqKEcPEWIg77rrrs4Ljt4FNNy+V4QQQgghhBBCCCEWBUGH73vAEHrttde68F6AHQLD6T333JMULaLwXY+QQwSXphhzCcmFAJK6bQzIeArgTeAN3tgC8HTwEOKKfROqEBtKKmzjz3/+s91+++1Z5b1JB3aZO++803XMjYLtguOgY246EDMOO+wwZwz3xnEPggGdezE8x8G62EJuu+02t2wUOjljcCYijhfM6NCb2rG4OXixDiGwNWlO3QDqI2IEZdQUsDNRf6hfqeUOlAd1i/ujOWJoriFnla8LRGqKy02FYOWXIZwhdbipNPc6efDMu/fee2O3w32DYNVQOSNIIVKlilJcJ9qnuPYLOH6EKUSqVMGdaWyLRHLi+FpLlPTtLvUr7r7DhkuZKC+VyAcK5s6d23ACnxxQ/MO9VvrO79x43ZIr2fxhC439xV9dtzBU30p7NCtnlQs9+PPTbrwuJfRgp8cHWsGchGtq5eY3W3X/w9x4W0HoOxq9dNAY0jDSSwGBhMSGCD5+HiBs4VFEQ0vvg8Z6HaVbHld9PI+INU+jGW0sEc1wJceT6cwzz4x9oAI9GmjYiFmLO6wP6Qeo8Xg60eDRQHpPJxL07bnnnuFSCThGesZwjPQUYt1054iL7a233up6NXm3dg8CGeVL7xXOi146TPMw4Byj0FuDFzEewAhsCHjp9onrOWETeSgdeeSR4VwhhO+N0xIxmH3YVN/2CSGEECK/Ifw53xh8S2CMJbwTYWaIuEB4Gd6vfa9+IUTu8J1e+cs9x18fiope8enytLQ1HJv3kMBmQHitXBlxfSgwtsd2sxUB/PrANvgmSQ0BiC0EO0amYAfB5kDn4Chxx0rUl7PPPtv9nm49oH3FlsE1z7YMWYd12Ua6c2wpqKfYgTiG1t53c+pGc8o7SrR+EdKuIY+6poJ3DOIxtq9Muf/++53onA9ke53S3TOZbIe2CLsrHd4BWyGd8qP1NNvrHa0rTalrHjzF8IbKxubijz+OaN1rTh0WIlO4hyCTOtzmHlaISlXrne+G5ohVUDhtlJWM+lti+Pr6cG5+Q68DPH5SB1T4uJeQlgCxicaXONOpjRPTzOclN5ooNRXEHR5mCDr0AOLhhkjEizE9SKINMh+wENcjhZcTepvwMI3GCY7Du6QS8xV31OhA+ED2592yOXbOgeNLXZb4wxjbafx9Y50Ojkkf10IIIYQQQiwK7/50smPwhhmiK9D7mYE8Cbxz85sQQniwfRD2nwGbQC6NpggAbBePnqYYif36fhstKaY051hZnvWaUoYsyzqtcY6psC9/3K2977Yq7yjR+sW4WJTmXKcozdlOtJ5me72jdaW555BLonUv1+2uEM2lzQWrxR3caPEeSB0IrdfcxIjZkk4gy0Q4o8HFcwn3UrysCPlHLwbca3Ex9ypqlFw10oT+Q3SKDiT4i+av8iCipS5LAkYSewohhBBCCCGaD8IVIExNmzbN5amlIxm9efnGUQcwIURHgpQLpCnIdBgyZIjaQdFq0IGc1BlxdTHdQKd0kV/QgX733XePvV7pBp8fT4j2RpuHBMwlDe0nX0MCkmupsdByLR0SEHFp+PDhbl5cHFMfeo8QfYTUywTEovHjx9sLL7xgH3zwgUvISL4qQgX6/f3xj3+sl7gxjobOkXixJGPFI6uxZI652ue4ceOcSy3lpJCAQixEIQFFPkC4BcI40AmBZyfew0IIIVoXRCq+W2bMmFGvty7jfAv06NGj0UgKQoim4b0X+evfg/g2J5IIIfc23nhjN0+0HzINCSiESNCceyZdSEAhRPPxziyZ2A0lWLUR+SRY+fxOO+ywwyI5rDD+IQy9++67jeawYkC9jyZWZH3ELsL2+fV9zqy9997bPTyi8BKNyIVr6tZbb+0eFunO0YtQxxxzjG211Vbh3HgaytOVigQrIbJHgpVoS3xc8MmTJzsDKT34JVgJIUTrwvs1ERTwGvDtb/Sdm3cF2mshRMsRDbfJfcg0950XrUg9INoXEqyEyA4JVkLkJ4uFYFUw5ye33SiF00dZ0bj/ufHFSbAiBB+h+MgV1RDplp8zZ45dffXVLlwHHkjR3FI//fSTXXnllbbiiiva6aefnnYfCFIcI+eDq7EP98fL8R133OF+P+uss6x///7OqMi58yDAO4qwiB7C+9144402bNgwGzp0aIPi0cSJE93Dg/Ig7xe9NT2s984779jmm2/ufvf7nDlz5iLnSPm++uqrNnjwYOvVq1eD+5RgJUQ8EqxEW0FHBzpMkESYvCgYR+n0QO/91oyBL4QQizO8B+Ddyl8EK9pfvgcYmMdf3qlpo6MGdSFEbol6WPmBexDBiu9ewkmJ9sVHH31kb731lhtfYYUVbK+99mr19BFCtCeac8/QVj755JMuYhQQvnPDDTd040KI5oG9HTq0YFU0+U0re3GXcGpRFgfBCiPdtdde6xIY77bbbi7sHh5MUYElSkPLczzsAwPfrrvuasstt5wThJ555hknOiHcrL322uGWFoVt33TTTTZq1CgXZsCHGqAS8qDA4Py73/0ueWzMR5jCG4tj4e+3337rhCOEIi9ANSQe8fL98ssv2/333+9i8vrjRpTiuOlBFhWn/D75gKbcV199dSea4amFofOkk05yxynBSojskWAl2gKePT///LP98MMPrg7SAYKksQhWtN0SrIQQomXBg4P3ad6/eYfmuwXoycz7Pe/rzGd62WWXVShAIVoY7jn/13tY8Y7Evcl7U0Pf9EIIIYQQLYUEq4DFQbCCzz77zAlFfCj27t17kd9TaWj57777zu69917nVeVB7Dn22GMbzREF9Kp8/PHHbcSIEclwH/Sm3GyzzVwYvuhx8eL85Zdf2l133WVTp0518+KWbUg8ArbzySef2H333ZfcDqQ77rhzxMB51FFH2VprreV6fUqwEiJ7JFiJ1oY6R5v81VdfuWcBvefwkm3M21gIIUTzod2lcxhRDAjFSsQG3v8RpOhI1q1bN5evihCtvFvzDGeIhggUQuQe7k3/N06wGjhwoPtdCCGEEKI1WSwEK8L/lX7453BqUeo6LWsLtrw7nMo/wSqX4LKKAIWwkiroxNHY8rzI8gGa6fZS4WMV8Qo6d+7shKiG8Puj52VTXdt5EWef7DuT4/b75KNaxk0hmo8EK9Ha/Pbbb67zBy89dE6gE4bCowghRMvDMx8hCqEKwQpDOO/7eLfiVcXzmndxxCmW4/2c3xr7JhBCNB8JVkIIIYTIRxYLwSpbOrJgJYQQbY0EK9Ga0PHi+++/d6EA8YbFq7YpHSyEEEJkDoZvH/6PgXHm0fmLZzReVXRWi4ZjjUZdEEK0PBKshBBCiI4D79J+oDNYNE9se0OCVQwSrIQQouWQYCVaE3r1411FCKr+/fu70K5CCCFajtTwfzz38Wol/B9eVfyVl6sQbY8EKyGEEKJ9wDs1A53A/ED0MP4iUPnneBxR8YqIZXQa468fCM3NkE9IsIpBgpUQQrQcEqxEazJ+/HiXB5GXslVXXVWhXYUQooXgY5kPZ4QqvKowevNxTPuLRxXPZtpg5aYSIj+QYCWEEELkH0SJmTZtmnufnj59unu3Zl5LQhocOpbxzs7Qo0ePNu1glneCVdHEV6zs5T3DqbZnwY7/s5rltg2nhBBCNBcJVqI1IRQgghV5q/r161cv/JQQQojmg5Eb4zYflnxQI1ph/Cb8qg//p7xUQuQfEqyEEEKI/IAIBZMmTbLJkye7IR9YdtllbbnllnN/EbRak7wTrKx6rnV6cn0rmPdLOKPtqFtiRZu/5ydmxZ3COUIIIZqLBCvRmnz33Xc2evRoW3HFFa1v377hXCGEELmA3p6EJ0GoIgwg08XFxS6sCEIV4f9a+wNXCJEZbS1YEcYIAx0gaCNsL44emJT73Llzk6GaRPuAe4R7BTp6/c3nOsp7B22JOsaI9sqUKVNs7Nix9uuvv4ZzMofOuNyTvHtT/6MDRHNaMfCM537hmZ8tvXr1cvYU8oK3BvknWAUUTvvUyl49wArmTQjntD51S65iC7Z9yGq7rRXOEUIIkQskWInWBMHqq6++coLVKqusEs4VQgjRHPjQ9eH/+KDEcIehjo9mwokwMK7wf0LkL20hWLGPb7/91p544glnpIuCwD106FDbYIMNFiuPeMrjjjvucCFTf/e737moAPnOSy+9ZC+88IL79jrssPgUGj/++KM7L4yjO+64o+2www4d4roSveGpp56yX375JXkPAfV3m222sSFDhnQ44SRf6yhi1T333OO+9TbddFPbb7/9wl9aB9rJ2267zdX1vffe2137VHhPuv76613nnmOPPdaFqE/l66+/tjvvvNPZME4++WTX4Ud0fPCiQqiaOnVqOCc93Hvdu3d3dYP3a5+DimgGTYHnvM9/xUDYQcIPMt4Y5ARHuMLrqiXJS8HKUzj9cyuonBFOtR51pd2ttvva4ZQQQohcIsFKtCYSrIQQIrfwkevD/9Hjmh6bPu49A72c6ekphMhvWluwYvsjRoxwQgf7w9i28soru/bip59+cl6asOGGG9r+++/foYz+EyZMsPvuu8/1TD/44IPrGRkxWN56661uHmIA4ZfyncYEq3Hjxtndd9/tnhMd5XpSf9944w177rnn3H3i6y+GZK4hxl5Ya6217KCDDnK/tyfefPNNe/31123rrbe2LbfcMpyboK3r6GOPPeYiZiBIDRgwIJyb8B6599577fPPP7ctttjChg0bFv7Sejz99NOu3AYNGmSHHHLIIh11vBjFse68885OvE3F309rrrmmHXnkkR1O8BT14fk6atSoBj2qaD8QhJZeeumkSNUaIFjRbv/2229OUGtIwMLjat1113VtYEuQ14KVEEKIjocEK9GaSLASQojcwPObHsIY5fiIJJQXRhUEKj6mefY2pacnH+7ff/+9G6fncWMfvhwHy3McLM/HfKZgJMcYz3ErVKFY3GltwQoDHaINYLjFMO49btg372sPPPCAM5DttNNOziOno3hp/vzzz3bLLbc4Q/9xxx23SDvHOXOuLWX4yzUNCVYYOhE38BpYb7317IADDmiyF0A+Qf1EhEN4wJOKOlpSUuJ+o/4iTDz44IPuObnZZpvZPvvs067qr7+m6USVtqyjiFLYDo444ghnII/C9eDY8DhpCw8+2rX//ve/1qdPHyfmcRxRvKAFq6++uh199NHJegMcP/UKQS5d2YuOAyIQdYbnbCrcW9QjL1TlA164wqOU94JUaNu5J1vC2yobwUpZyoUQQgghhBBiMQJDNp5U9ASdOHGi+3glDA+9PfEW4OOaD+umGiT5AP7iiy/cEPcxnAoGdQyDH3zwgU2bNi2c2zAYswhphDEODw8+vIUQrQf34KuvvuruX8JmYfCPGpcxhONdsNdee7n57733nmtrFhdoT9uLWNUQXGdEG8Sqfv36OY+YjiBW8cxDdKD+4jG2yy671BMdqL8IvIhUeAx+9tln7nnZkcjXOkoHFPJmtlW4Sd6D6LhDJxrvZefhnQbvUeoEZTdp0qRFluGe4X7hPOhgKTouY8aMsQ8//HARsQqRE89MOmnwHMwXsQo4Fo6JY+MYUwVZzoVz4tzaEnlYCSGEaDa86IM8rERrIA8rIYRoGvQYx4uKMF2EB6HXOD2BMdKRqwOvKoxEUaNdU2Dbzz//vBvHCNhY7gYMQCxPyCmWX2211cJf4kGc+uSTT5yHA2G5ON7dd9/d5ckRYnGGe9z/bWkPKx8WizbjpJNOcjkw4mC/cTlhMOq++OKLbny77bZz3giEZ0PUQhAhTBjtATk+4mC7hDz76KOPXJtDG4bxjW0RytTjhQkMyJtvvrlrZ1577TUn2uPd4cORYXRG/P7yyy9dG4kRj/BweEhE8/vwO+HKWB/RHKM/bRbGaUKY8X7KObAPjNp47aSGfooeO/vlfMkfkrov8MfPcoiCtOF4eHAeXFs6GFBOeKdGvX+45rwzU37LL798ODc9cR5WXCOuMYZLru/xxx+f1vBKXcOQzzXl2IDwUttuu60zjkbFB35/++233TbXXntte+aZZ1weqf79+7t9Ux7UX+oEoiidKzhX9r3xxhs7b6e451Q26/iQeFyjE0880ZVjHJT/7bff7ryAOZfddtstOd/XK3/dozRWBxA6XnnlFbdd8s5Qf/HWwRsntc77OrfOOuu4MuI64dHBM5znK+fGMXB+0ePiWcnAuTFwDP5Y4o7P35P8bYiVVlrJ3UueTMs9un3qFB1UOB/Ol7qAhybLvvPOO+75zvlyT0eJ1jOe/9Rz9rXJJpvE1gtf1zjmjTbayI2/++67rs2g7cKThPsuKtxF2yzqo7dHAKLlzTff7NoY9st1Ofzww+t5iXF81C3K1Oev8udO2VB2vMMgCnBfHHPMMcl7NNN2CKLnxv65h+koFFcvPNH2hPLG08Z3+qEuUI/32GOPtDnNWH/kyJHJtppzpO3ZfvvtFwkr6estx8d2H3/8cVd+CMT77rtvuFT7hfOnLqVCnaU9b0/QHnK9UqEOUc9zRTYeVkXnn3/+xeG4EEII0SR4SQVevHONf/HpCD35RG7g44aPMD4UGjOCCiHE4g7GHYxhGD5IwIxx7JtvvnHjhNDD2IABBQMHyzKdGloPwyyGIW8c4pmMYcPDewBtM0Yatsv2MKRgPI2GBGQfzMcwglDGfIy8LM9x8SGbSUhA/xxgOY4FAwrGgXQGRyEWR7ifgfuT+437DM+BXPHxxx+7+xaD86abbprWG4K2gnYBAzXLYFjlL+0Swsv48ePddjBS09ZwvNzTGDYxdnJvRwUo4Lcbb7zRGWdpk/CGoH3ByI0xlXX8OyLbwlCMQZ32B5EI4zFlglhC2COMZxihMVAzn+1xfHzbYFSmrfEGXDxtEJtogyhjBCSWo11bY4013Pb4DRGGtgrjbNQYzjFw7BgHMYxjkOYc2Mb777/vyobj9+KTP37abY77iSeesClTprjrSVlheOaY2G80hBOiBsvSySuuF30qXB9EI769uEaUA3mGOE7EhGOPPTatKMmy5IF6+OGHnRHXG8gpB44NcQCx1NcRnhUsj7jB9eDZwjYQEAYPHuzOGaEMQzrPBcqPdalHlAPGVa5d1BDP+o888ojbLvvjN1/34tZBMEB0pawx6vMsioP5HAPiH89GyoZ50Xrlr3uUdHWAOsN5ERKPesy2+I1nNPcC91W0/oKvc+wTkYvjps6wLeoEwinHSBlTL/xxsU3gL/WTZfyxxB2fvyepCyyfbqAuISYB+8/0WkW3z3rAcmyT4yZnFNcMQYX7mDKlffFwjZ988klXL6lnwDuA3xftAQJ0tK77usa9xr3MwL4pO8qQNoNlOB//XsNf5nM9ENO4vh7uJ+oO9xQDwiHvTYiyHq4H1wyhBtGOa+zPnX1xrNxXtB3c59R52rhs2iHw58b5036y39R6wbqUia/30faEckdk5H6hLeEaUK6cH2IzQxSuL+It++K4KGfKle1wfLQPUdHK11uOAQ966hz7YbmowNceoaw4Z8rTQ/vFvdQe30W9aExdoF56qFuIjb7tbi7UT6BONIYEKyGEEM2GFw/I5MGTLRKsRCreUCnBSgghGgejB0YLDAwYczAMe88kfvNiFIYZDBhM9+jRwxlgeL6zLOtiXGE5DJp8wNIbHGMK28CQR29bjGgYUtkWhhTaaTwPMPIxj5BgbIdxDFZ8uNKOY8zJRrBivxj0GFiHfWIYkmAlxEIwWgL3MfcpBrZcClbcz7z7433QmFckYhKGXe5dlscgzP2PEdMb1Q899FA7+OCDnbcHxl/aFdoaDGheJACWv+OOO5xhld7feMfQu3+rrbZyy9L2IISwDvvhvDF+8xvtGwZF9sU6tBl4GAwfPtwthwfYkUce6TyZ8D6g7DC4IyywPb5HMKBzjBiBMciusMIKduaZZ9rQoUOTogUiEsID+8fzw4sVHMNdd93l3mXZ3qmnnurCMuEVRptKW03bGBWf/PGzDsfBcZEzi/1x/lwD2kDOjfxSvpw4L7ZHG8tyjeX4iwpWGOLxesV7AKM0HiQNeWnh5YFARpuPsDVs2DDnjURZIZzQ5mP89t91HBtlRx3gvPG2IHQkhnvKCsM+v+NZgocKHmRsj+PinDCQYxyORlqgjPAw4RioE1zL1HUwxHovQ46ZsmMblFtDUOc4Hu4pjpF6EK1XrJ8qWKWrAzwnEVzYBuVKPjDq25Zbbum+bygrrnX0Wvprw3WmDMmrxPlRh9k+dZR1ODcMz4gk1FHEENbDOwcvSO4Rfxxxx0cd4fxYjnoWHRA82A/1getLOVMeTz31VMbXin2wbY6Ne5Tyx8uRcuCYORagreA33geighXiCgPvJ6xz0EEHuX3hOeXfa7hHouKTr2tcJ84PL0HCWuLJRp3kvYd2huOPto/UFY6Da+DbEs4XMY3rQJlyzVkG0Ybr5UUh3oc4DsoSrznw7R1CDyIH15zjpzx45+F8s2mHwJ8b7SvHT7vg6wX3Fe9VlDPj/A7R9oRjIeQl14DrxvEiqNO2pu6LY+b4qE+0z7///e9dGVD+1DP2Rflz3bk+4Ost5UNZ0+7uuuuu7vr4smqvICpStz2UE8I3Zd1e4brRvnBe1BPgunPfpHp9NpVsBKu2CQgqhBBCCCGEEKJFweCCUQLDL0YNxumdi7EAwzGGMwwefKDSAxqjEsZFPsQxkGDEocc/hgjWYxk+WhG+6IGLgRQDG0YYjCIYlzBcY9jBgMI2AEMRvegxKCEsYdDAWMExYdDwy2UK6/IB7T0QhBCtCwZI7mvIpOe1X4Z1vMHKw/2M0d574HBf06P7kEMOcQZu2ghEKA/GVtotDMF77rln0qDKX0QPhBWMrrRjqWAcZl8YmjG4s2+MrLRZtG8Yvv2x8hsGSAQfjps2rrkgkmDsxni8//77J8UD9omohHCFoRCjvPdAicLxY/D154xxFIMxx0pbjAHagwBy6aWX2p/+9CfX3mcKRnm8ZQgXxzj7bCgEN50G6NSAYR/hyXuHMfBMIFwrbTzPiag3AhDyHSM7IibXg2cQdYsyouME5xo1lHJtuUaAIRwh1sNzjuNFOEBE9LAOoiBwrdl+lHReY1E4Nq4V58E+mgP1kvNEoMHw759jbB+Bgr/UNQSlVDgXhAx/zJQ54eV4hnPtqQPNgXpIneJ8owPvAoiX3CeIVT78IXW0KdeqKXBu1DOOkfs8Wnbsl/aC46C94B0lFeoaofc4dtZjOwgy1FGOjboRhTaC68R+vajuO/iwLcqcsuEvAo8ve+oX41wbLxJFYd+UIYIzQhXbYtnmtEMI74hfqfWC9oT6yvtXtG3wEN7Se4AB6/typI3Fm8zD/cW7IOVC2+WFGdbl/uJ6UA68Q6ZCXTjhhBNcWVNmXtBqz/A+HYV2x7fn7RnOgfsiSuq5thYSrIQQQgghhBCiA4HxBQMLBgd6MSIeYRTBKIhxE+MCBhHm0XsZgyTGUgwXGEcwiGBYxOjLNhCYWI9e2PTcRXTCgMxvGFkwZvGxzjJsB0MpBk4MLhhL2A49NvFIoLewX4Z90Ws41YAohFh8wOAZZ+jDsNyvXz/XFtFOAGIXXpoQ9WjwIMx4A3RU5PLQdnkjt4e28IILLnC5alK3x3FhYOUY4gy+2UA758+DtjTVaMtx4eHA/hAB4gzTccePVwjnzfZTRQ6O3xu+MwWPE8LOeWHmrbfequdJkArtOwZ6DNlxBnquIcZtnhcY/KNgGE/1SMCDBw+p8847z13LVNgPcD2iAhjiAuChlPpM4dl21VVX2SmnnNIko3JqmTcHhB3qG0JeKlx7jo/OJnH1zV/rKJSX9wyijHMNIsmDDz7ojod7JZrPqanXqilQBxFHEYi8l1wUxB/aBOotokmqsBhX12h7vPiWWnZcCwbfMQeoW4gydOBhW7QXCLTUNzrkAO9DLMN1ihNDEZs5h1Sa0w7RgQexK4pvT3jPiwpqUeKEbMrRh3vEQ85DByPaVd7j4sqR90RAMEwt+7h6296Jijhc09Twie0ZzsV3igAJVkIIIYQQQgghmgxGAno8Y5jAuMNfDLwYLjB20MsVwwGGPYwHGHDomYyxAzCSsA2MLxjMvAGH3ureuIqhgu2wHIYZhDE+bDFM+e1gxGI5DKV4C7AdwstgaCb/BHlO6L2PgYf1m2vIEkK0D2gTMjX+YwSlrQHfFtE2YTzjN/JbPfDAA4sMeAIAok820FYS3os8SH5bjz76aKyhtymwfYz/GJ/jDNZA20ybHCc+tRZe7MEDBGM8HR7IhRXn8QU8a/yzh/Bw0WvB8Oyzz7ptcv4IDpnCNrnuhPmLbg8vtTgI9YhxHm+eK664wj1r8GbKxfOFY8k1CCF4nT300EPJc+OY4wSJtgKBgtCQ3EsIj9SJuPs322vVFNg+++EdhneMOLz4RD2jvjUH9sF9ShkgygJtC9N4d9IGAfmtuKcRd/iN9olry7q8d2VLLtuhaHtC25MpvhxZh3UZEL0A0S56jf1AeEnIRdkLARKshBBCCCGEEKKdg1EOAQmPKgw7GBkxDvtewhhfEJ28kQUaMhxjGEJsYvloT0vWQdjirw+PxHR0mSh+O35f3vjBsdFL+v/ZOw94Kaqz/x96l96bdBEVpChiQcWGCCo2jBpb1BhjTeJr/ibRvG8SjUZj7BqxV2yo2EBRRBBQVMSGiPTepQlY/vf7sOc6d5ndnd27d+/ee39fPsPunZ05c+ZMO/P8zvM8hJFJtK4QIj/BQOvziEYJ6emXQVDwwnYUEnkHYRgmXBWhruKnZN5AYXCPQvz6+9//7h5++GELg4qXEeGv8BbgfpUNEKBSlRVsVy/S5Ro8NfACwmOW0GUYvWkHxBTaPREY6sOOB8Z3BkCkA6INub7wiiI3Ft4dHA+mRLlP8HohJxieHggGEydOdLfffru7+uqr3T333GODJsKIIgT4Y8e5G3yGZgLXAgM2/va3v5lYRRshdrBvCGw+d0w+QD0RIjgHyI0UFsotk2OVCVGuB64driGElmyIJj5/FoIV+4nXJm0RzKuFFxVeSZxfDMDxHkacj/GeUskoqftQsn5eIhLddwFBOP4aZ2J+RYIBXx7OtWyEjM0X2Jfg9RPc11wiwUoIIYQQQgghyigYvxCnMOZgHEK0wuCFB5VPco+3U7pGC4xyPuwL5WNMAYQxjEFsA8MQBjzmBZcJQjkYeKgLYbBIdk7+AyaMocGk3kKIsoMPQ0ZY0GRCBngPBQSrbFzv3HvIR/PnP/854UQ+pShgaH3iiSfsXkp+q+uvv95dc801Fp7rD3/4Q5F8SMWBQQOpxDqMhN4LKRPvjGzAIALCxPLMIDcO+YIQsT7++GMTnxKBUBR2HPx05ZVXFnrMJYNziRB0eOTivXLVVVe56667zo4HU7LjijfJ2WefbUZ/cmMRfpZnIZ4x//nPfyz3ood9A56ZqcQNL5YgiBT3/MW4//LLL1u9zj33XDvf/vKXv9i+XXrppXaN5AOIZxMmTLBnOOeAb68gxTlW6RLlekAw4ljStumIRYlgnxHpEDW5z/GJQMV55uG6xiOJ65b7HMIV1w4eaemQq/tQcaHvFnZ9++mss86qEH26eBEHoTZbgxtKE/Yh/j4vwUoIIYQQQgghRGQwzBCmBQMJIXsIyYRBlNG+jO71oXOSjZZNBEYqjDV84snAiEtEKsLBkIcFMQsRigkDCzkjMOrxsssyeDlgzGJ9RDM+GSmMUQdDEgIXRi5GLLO+EKJsQb4irmufxy4R3JfwEACMuFHFcwRw7xXjjdVsz4vkQQ/SsCnMGyQMhBg8gBDUyXXENkoCRDYm6p4o7JsX/6lDaQkXtGvwGJGz6NBDD7X7//PPP29CRhDfztSd503YsWBif6K0Lc8angssj1dPWB6gVPCMIdcOggkG/4MPPtjq/8477xSGNiTcIecSAz18uLMw2C/vPcI6xRFCKIvzjXP7iCOOMC/jTJ7PJQ2DUnzeqgMOOKBI3qog2ThWUfEiEXWiHcPgPkTbZkuwwlDPhBD25Zdf2rXJfY/rOAghAunH4BFF29E/8vm7olIS9yH6Y7QJbcG1GRV/32Ud1vX3XaDtw65vPzFAKd0BUmUR8glynnnoj0+ZMqXU8j1lA+rOPgSFN/aRfS0NJFgJIYQQQgghRBkCwxshijC0MSECYSDAaISRxOdOiE/CnS4IVoya5yXW554i5A+Q3BxhjGUYWY1AhTHzueees1A2wfwrjKqPL4dcJ59++mlCw60QIr/BcMv1z7WOJ0aYhyUgZnN/4J6EiBAVjMTeW4FtAeII9zjEcMJnhW0Tw3Eqj68g3jgXb4QG7rXphrNLBIY/BI9kdSevH+IJ93Lu4/kA7X/ggQea2Mj9+qWXXiqSz4r7O8ZsBiokyhtGOyY6P+LBIM7yCDlhogPh/uLhHCTEHuIUAkoQjO148nJ8Oaf88cRjBUMs+/TWW28lPGd4TiHSYbznORZG2KCLsP1lG377YecbRu90zt2SgO0H81YNGjQooQCRybHKFOrCMUh0nlEXjhUUV1j0cL9hUA7HDEGJMhEZ4+E+iEiFqEV/DJEL4SYdSuI+xH0XkY26RBUTaUcGJQGeY1w/7Lf3jqSNWSYeznfqWVGgf819JQhtPXny5ML2K0tQZ+rOPgRhH4v7LpEpEqyEEEIIIYQQogyAQQDjGsYaDLkYNjEcYFTBGIFXFSJSMBwLhqRdd93V7b333kXCemBg6d27t316+J2RvRiVeUHFOMTI6v3339/KZfssj/GSZTBiYISlHEZhsz7rkd/h8MMPN1EL4wvL9OnTx5ahHIx7LMt6nTt3tvpSHttmWUKrIHwhbAUnxC4MQt4o4veNEcnB/RBClDzcd/AS4ZpHpH711VeLGDK5XxBaCCGba37AgAGhRlMMtZMmTSqyLkbzV155xe51GIwxQAPGU+5HCCTk1mE0eFAYYD3qQTgtH4YwFd5AzL0lKKBTL+5DqXJi4cEQHJGeCIz+3KvYHnX/8MMPi9SdfUXIZx+4F/pcVpmC+IFxGQ+44sKxPuWUU+z4IQgF81kh+nTp0sXa7tlnny0MaejhWXXjjTe60aNHF66TDJ4rnFOIS+R28m3EJ+InxzcenlU8/zgOGF3jz0PagPZAVPCeImznqKOOsnURIxBp4tdje5y/PHN4frEND88t7/VDqMHgvlEPRNz48yLoqcK1Edwe5xFeTex3tuEYBM+1RLDM+PHj7fxENCX8G8c+EZkcq3i8N08qEKoRizjPOCbBa5X7C6IjnnD0MehvZAMvlnNsEUU53mFCMmI88/Gu4piHeWGlojj3IUQ8PNaDx5j+ob+f0L+ijvGQ5y24LdYnbxntiMgVFGi5J3FO8NvYsWOLnO+sx70Y0diLhhUBzjVCqMbDseA6KgvCFXWkrtQ5HvaNfSwtqlx99dXXxr4LIYQQGeFHlWUzsarHdworQixkEQ1G6BNDnI53cV/mhRCirMDoWgwmGCEwbGF8w1jEvZDQfwhAGJbiR0LzN/dKDG0Y5jwY7vyoYA+/M+oco6QPU4RxjXXxouLlFcMHBmSMVB62y3r8xjKMhMaIGVwuvhwMTzzj2Qe2xTYpg+UJLUioIfYZQ6GfgJdnXz+/b6wX3A8hxA4jItBPx7jINeTzTmULrkWubYyYTIRcw/CF0RJjKfl62Hbfvn3d0UcfXXhfAe5h06ZNs0/eIRC9MLyyLmIV5XE/GDZsWKGHFWA05tonxCjhSvFWwjMJAYD1MJRzX8TAyj2N/UYcwpiMiB4fqot7CGUgGL377rvmTfPee+9Z/akXdaYtuXcFczBRB7ZJv5RQYBj+2B73Yu7VGP2pvxepAIMvUHf206/3/vvvuzFjxtjodsSfoUOH2r0RUtXftyPLYaj3hmm8YRGJaCMMz8H7fxiEbaTNuS/Hew4A6zOggPIQgPib40L7cL8nTxTzOY4cDwzvGLERLfDIog4+JCT3eAYm0PYMXAg+TzCU06aUwbFk36kbnl2Ux/nM8fADIWgnhCDanTZlPQQoBEvORYzrtC/LDBkyxLxGPGyf84l9Cp6/1J3jz74gKrEd1qUMD/tBG3AOcJ4gWrFN1kFQ8XmvOPb+HGB91uF8Q4DgPEMARGyhnbzYR9kca/YJUh0bXwcGgDBgxMO5wW88TzmvKYNjxXt12DlKnTlnWI92Zl3aJH7i2PEcp37pHisP/RhELtrMTwxAoT5h+8N5Rp+F84z7BO3M+cZ2ERtZh/IJTegFbkh2rkGqtqX+lM31Reg/9oPjE4TjSjtQDr+RAy7qderJ5D7k9w04b/29kPsu90LOJ+7RhMb013/wfoLQiMDrr1euFV/eIYccYueg31eOIXX214o/34PXGM8CziX2BVK1bXmA+wftQt88KOJx3+BY0raIjhw/fwxKG+rK+cWxRjAOCufA/YFrJXivzBZcB8A5nQp5WAkhhBBCCCFEnoLBB6MChgle8DAyMA+jHgYRDAEYB4KGoJIAgwzb4KU7DIwaGIKCBr0wUpWD0QzDxvDhw210d3Ai8TuiWLzBSQhROnDdDxw40F166aVm3MIYihET4yfhwBCYR4wYYddvonsDxrETTzzR7mMY0DCmYlBDhD7ttNN2yp/DNsmpdO6555oxFoMbBlrWwwiPOHbRRRdFHhmOEfzss882MQ/DHXVHRMIQed5555nRFhAWMBh7EJ+OPPJIu59xf0YkCXorhBFfd8qk7hh9aR88fs4555ykXi1RoX5sj7KyUR5wLAgRB+PGjTOjJ9DWF198sevfv7+dAwhH7BdtiTH3zDPPtP2mPqlgGURKPHlpEwapIRhwPu23337uV7/6lT0nEDx4HnoQOzjuCH78xvlAHTg/aGuOcVguJuZdcsklth4GZ85f6u89nXhWcS6EPbMQU7wYwDnLNtlnzmXO3XhRAniG8RvnN+cL20K8QoT47W9/ayIg52E2POMQNzA8c94iDjHRf0gEg0S88ZpP2jds4jqjnEyPFSAo0+Zsh/Mfw37w+gojeJ75MH0cYwQ57j8cx7BjXBzYpheaqW+ic9iHIUTYyWRgQKb3IWDf6R8heNMenFMIA5xLrJvoXogwzjmM6OevFe7HxxxzTGgoSH+tsD0EOn+Ncf9DzOPYBAcXVBToi3MNMEgrHsQqhDvExzfffNOODe0cDKta0rAttsm2qQN1oU7xHqDAPrAv8YJraVCp4EaS/I4ghBBCpIAXE6DTmG18p9N3FIVgZB2ju+gs83IqhBDlEQwSGBwYIYuhBwMQBiKMCTwTMYhhGElkBBZCVDy8IZNP7hd80k/nXoJxKiz/SjbB0OpFG+5VGKsTgdH7tttus3qdf/755vnBd+qKOMD9LZGwHQRjHMZrjKvFvSf6svAUiCry+H1Op84ev71M1o0C7cm+ZLvcZCD68Lzi3EunHcPwZUE6xzZ4HmZyLIH18BLCU41rCO+w008/PfSdlGvNP6Ojbo/2YR32MdW1UlwyOa/TJZNjVZw2CJ5nJd1+uSbq8UIcfPjhh+19GHGQdvDtmWhd7gn33Xefic2//OUvbYCQP+/TuYf6ezUg2Jb0oKmyAuIdQiPibSo4Poja9OdpQ/5myvRc5phw7jBxPL24zN+pQNRHdC1pocp7kUaxG0qwEkIIUWwkWIlcIsFKCFHe4bnKSFleNhnljeECAwJeVbzY8kzEGCGEEEEw3vrP0hCs0iFMsBIi3yBs4xNPPGHPZO+xUp7EEVF2iResopyXYYKVyD6EA0S4wvsvXRhggHDloxYEJ0CQDE484xGleOani88Rme1wwYlIR7DK3TALIYQQQgghhBAJwbjMqEhecAnfQcgVRr4y8pKXSnJAkTNCYpUQQghR8hBWj1Bn/fr1c2eccYbEKiFEShCACHt5xBFHhOYeTIb32GRQB+8BiF+EBCdMKBPfmcdvLMOy6YhV1AWhkrpRx1yJVekiwUoIIYQQQgghShm8qHj5RKjiRRThihArCFQIVQhWJREySgghhBCJIQfQKaecYh7OQggRFQaYERUGwZuch3ySCw2RKBeDz3iPYFvkGAvWAY/mfB/8prcdIYQQQgghhCglGBVJqCHi3iNWEQaQeSRkZxRkixYtLMY9oUGEEKK8gPjOvY3JhzoSQggRDQQHRFTCRZN/Kgos58NLy1s/tyAe0a/Ha3Pfffc1D6eDDz7Y9e3b1/Xo0cPy5DFAjWcix4bnYrLjym8sw7Ksw7qUQVmUSdkIVGwLwYptl6VcY8phJYQQotgoh5XIJcphJYQoL5BXhnAeiFR4VBGLnnBDPPMwJsijSgiRDmUph5UQQgghkuNzVflnus9nVRYHeiiHlRBCCCGEEELkKRiQEaqIQ49n1YYNG2ykJCIVHlWMgsTDSmKVEEIIIYQQFRPvRcWAtlq1ahV6X5V39AYkhBBCCCGEEDmAkZF4UpGjivB/q1evdtu3b3e1a9e2GPOE8yBnlcK0CCGEEEIIISoiEqyEEEIIIYQQooRBmFq7dq15Va1YscJt2rTJ8lIhUCFUNWvWzISrqHkIhBBCCCGEEKK8kbeCVdU5j7raj9RJObGcEEIIIYQQQuQjxJzfuHGjhf5DrCJfFfNIek3oP0IAkiwZ8UoIIYQQQgghKjLysBJCCCGEEEKIEmDr1q0W9o/wf6tWrXJbtmyxcH+NGzc2r6omTZpYTHp5VQkhhBBCCCGEBCshhBBCCCGEyCo//PCD+/bbb82rionvsMsuu5hXFRPfK0LSZCGEEEIIIYSIigQrIYQQQgghhMgSQa8qPrdt2+Zq1arlmjZt6lq1amXeVTVq1IgtLYQQQgghhBDCI8FKCCGEEEIIIYoJXlXr16+3PFV4VZG3qnLlypafijxVzZo1c3Xq1LF5QgghhBBCCCF2Rm9LQgghhBBCCJEhP/30k+WmWrlyZaFX1fbt213t2rVNpCJXVcOGDV21atViawghhBBCCCGECEOClcgas2bNcldddZV79913Y3NKD0a0/utf/3IjR460sCz5DEaOTZs2WZ35LoQQQggh8hf6a+vWrXNfffWVW7BggQlUeFWtWLHC+nRVq1Y1gQqhijCACFeVKlWKrS2EEEIIIYQQIhGVCl6q8tJCXnXOo6765AtifyVm24B73PedTo/9VXb49NNPTVAJQmz7Nm3auP79+7v999/f1axZM/ZL2cDv02mnneYOP/zw2NzSgcTW1113nRkJLrrooqR5AsaNG+cee+yx2F8/wzqMiuV4DBo0qMjx8Pvarl07d9lll7lGjRrFfvkZhLI77rjDffPNN+5//ud/XNu2bWO/7ABDx5gxY9zEiRMLRTUSb+++++7WhoSOEaKs8P3339vnxx9/bJ/ZpFevXvZJcnohYPbs2e6LL76w++quu+4amyuEELnhu+++c4sWLXJLliyxMID0GZkI9Ud/vkGDBjYxT0KVECKX+AGQfP7444/2ST+d903uXd27d7ffhRBCCCFyCbZ6iGI3lIdVKdO6dWt3xBFH2ITRjXj3jzzyiLv66qtt1KbIHd26dSs8Fkx05slD8PTTT7trr73WLV68OLbkzzCqduzYsWasSIeFCxe6//u//3Pjx4830eukk05y5557ruvRo4f7/PPP3V//+lc3Y8aM2NJCCCGEEKI0wfC7atUqE8vnzp1r4f+8QRgPKwzCDGDyXlUMdJJYJYQQQgghhBDpUeqCVeW1M12V5RN3miqtnxVbIjksF7Y+5ZYFunbt6n7xi1/YhBfOf/7zH3fFFVfYCKg777zTzZ8/P7akKGn69u1beCyY8Jy66aabTEwixMtTTz0VGl7wrbfeMpEpKps3bzaPLkIAnn/++e7//b//54YMGeIOPPBAO/YXX3yxGT+eeeYZt3bt2thaQgghhBCitNi2bZsJVoT+w7uKQWa+n4Y4Rdg/vOPxBsZjXgghhBBCCCFE+pS+h1Xlqq762yNcjbFHFZmqfXZzbIHksFz8upRHuWURRmLutdde7pxzzrEY+K+88oolbQ4Dl37c6ZgSLZNN8CLasGGDbS9MuElFcH32zYcrSATb8PvHvibDL0v56Xo7JYPk2IQDxPuK0H4IV0Hq1q1rn4hLhPiLAiNz8Z7r16+fTfGjb3v27OkOPfRQ88L6+uuvY3OFEEIIIUSuoW85Z84c67vRD6TfhiBFP5Z+IlPz5s1dq1atFAJQCCGEEEIIIYpJqQtWP9bv7rYe9Yb7qXqD2JziQTmUR7llGULDEZLus88+s5GcQdasWWOeP7/5zW/cJZdcYtNvf/tbN3r06CLC1YsvvmjC18yZRb3NZs2a5c477zzzGAqKRohIhKK75pprCoWlP/7xj+7f//635Vm69NJLzfuH7bHt1157LZI4xDbeeeedIuuTV4owe4TUiwcPpPvvv7/I/vH91ltvtToFYfvUwy9L+WxnypQpKQWxqDBqlhGzeEQRIjBI79693SGHHGKecG+8UXAeR9jml19+aR5UiFVhI3AxdJADDA8v5bESQgghhCgdfLg/BhEtXbrUwgDiZUV/m0FLhP/r1KmThXdu2LBhbC0hhBBCCCGEEJmSFzmsCkWrGo1jczKD9cuDWAWM0OzcubOJJEHBCrHqlltusRB0eP5cd9117qqrrnIdOnQwwYp8S15EwisIQYQ4+0EQrHjRRjhBHPJQNi/ibNd7DgGiGeUStg4R5YwzzrCE0s8//7x5HSUDAQch58EHH7Tk0whK119/fWGYvZtvvrlI2EM8pe677z43adIk8zJi/5gQhUjKRii9oCj39ttvu1GjRrnGjRu7s88+2+pH/inqFi/0ZQrbQ8xDuGK/g9C+Rx11lGvfvr0bN26ctW0y2D9CyNC+5DlIBL/16tXLtW3bNjZHCCGEEELkAjz76a8hTjGIi/xU9APxpqKPTp+Wvl/Hjh0tHy1/V66s1MBCCCGEEEIIUVzy5s1qh2j1Zsai1Q6x6s1yIVZ5vDjiQ80h/iCKEDd/xIgRlmeJkZ277babCTUIHBMmTHCzZ8+25fHOIekzYeV8CL8tW7aYAMVL95IlS6wsD95OCFi77757kXAmLPu73/3ODR482LaBUHbyySdbmYS3Swai0csvv+zatGlj+Zn69Olj9UL8uuCCC6w+wbCH8+bNM4+w/v372z6yf0wIXAhwbM+H5WPEK+3RpEkTd+WVV7qBAwda/YYNG2ZlY1DIBoyqRSAk3EuzZs1ic38GI8WJJ55o3xENgyJgIhCs6tWrF/tLCCGEEELkA/S3EakYlEUYQAaPIWAx0bekH9ulSxcTrOrXrx9bSwghhBBCCCFENsiroYA/7tIlI9GqUKwqWL88Qzi8GTNmmNcNgk68qISnD6FLPvnkE5tH0mfCCiJK+aTQCEgIMEOHDrWXbO8RxMs5L+aIP7yAB2H0aHxoOkaTsk1fbiI+/fRTE9wOO+ywnTyKCHu45557msCG+ASIUv/9738tZGEwXB7bog7sHxMguCFeIYLhYRWEOifzYAqDdsKLy0/vvfeeu/vuu93f//53E9SOP/74hCITIh+CGV5r48ePTxgaEJEPLzaOXXAkLl5xtENw+0xB7zMhhBBCCFFyeLGK/i1eVXwiWNHPZGIAFv1kBispX5UQQgghhBBCZJ+8i11RKFrV3NmTJQyWqwhiFSBYMfGyXLt27djcn0FsIn4+wgvCCC/ReF8R6g+RCvC2wruH/EmMDsXbCi8nvIIQrHbddddIo0WrV6/uqlatGvsrMYhKiE0IXPEQVoWY/9SPkCtB+BvPLMIfEvKQibxUQRDfEK9oj2wYDPBOY3t+uueee9y0adPMMIGHWc+ePWNL7owPDch+4jGWKFQi7YbBA4Fq27ZtsbnOjCIvvfRSke0zEfJQCCGEEEKUDPSD6a/Sr2QgFH1lBhfRf61Tp44NMMLLnkFVDIiiv63wf0IIIYQQQghRMuTl2xbi03dHjU8pWvE7y5VXsYoXaGAUZxBEj6D3kSdsPt5YeBoR0gQvITyqEKUQtgifh5DFC7rPX4WIhZCUTRC2qFsY8TmhEHJee+019z//8z9uzJgxNm+vvfayKZHHVLbCsRDW79Zbby2cbrvtNvP2+stf/uK6du2aUhSjfieccIK1M6EB/fEL4j2rEAiDv9M+hDH0277wwgtjvwghhBBCiJLAe1HRFyY0Nv1kBKvFixdbn5RBS/SNEanwsqffKrFKCCGEEEIIIUqOvH3j+qleh6SilRerWK48goeU94aKD8eHZw4v0fEggvhcVR6EKTyQeAnH8wrPHzyFEKUQsxg9ynb4nZd2Ro5mG8oNehMFiQ8pSP2ef/55CxV40003WW4ucnUxIRqFsX79+ti34kFoF8Io+gnDRJgwmAza9qCDDrI8XHhsxYcGZBuM0iW8DMYRD0IWo3j9tvkuhBBCCCFKDvpp9KmZCAVIn5K+H/1n+t/0oYkGQN9MCCGEEEIIIUTJk9dDBAtFq9qtYnN2wN/lWawCQvV98cUXFtLPC1Z48DRt2tSEJ8SpeBgNSr4oXq4RRoBPyuC3iRMnWgg9L0oRmq5z586W84pcU4wibdWqaFsXF8onSTXbj4f5c+fOtf1i5CrMmzfPRLdDDjkkNOxhEMLvMcqV9kiUMyrXYOQYPHiwa9asmXv11VdDQwOScwvBkOMRLzAKIYQQQoiSB494Qm3TH/UDweiTkmO1b9++1i/2/WkhhBBCCCGEELmh0qZNm/LD0p+EShsXuJqvD3KVNi/ZIVYd+ab7qW672K9lEwSif/3rXybMnHnmmbG5O0Z68hv5kwild/nll9sLs//t2WeftRxJp556qjvssMMKw9Txsn3HHXe4OXPmuD/84Q+uQ4efxTzm3XjjjbYMofUuuuiiwhfwSZMmuQcffNC2RV1OPvlkmw+8xF933XUmkgXXAUIJ/vOf/7RcWL7+fp9OO+00d/jhh9s8vIjYNh5DeEsFw/p9+OGH7q677nL77beflYHYM378ePfwww9beL4hQ4YU7t/8+fPdv//9b/PWIlwg3mGMhGV7jIaNb6epU6e6e++91+2xxx471T2ecePGuccee6xIvVOR6Ph5yH119913m0CIl5yvMyBScXw//vhj288jjzyyiCcX9SdfF8skKl+IfINrEzivsw3hS0Ej3IVn9uzZNqiD+yphboUQIir0swjLjJc/fUj6x0CfkzDcDBSLD1kthBBlBe5x/pN3UT7pp/MOyv2OQatCCCGEELmGKG8QxW5YJoKwI04hUv3YpG+5EKuCkFvq8ccft2nkyJHuyiuvtFB4cN555xWKMMCLNCIVYtSTTz5pwg6iz3vvveduuOEG88oaOHCghS4Jwot3y5Yt7Tuh9oLiDd5WiEl0YLt37x6bmz3Y9jHHHGMeVghXhMnjxBw1apQJMhigg4LN7rvvbp1owgLed999tm+0yz/+8Q/zHsOzDKEKCNmHqIWwdvPNN1vuK9qDdiH3FB300gIvqgEDBsT+Kgrtf/rpp5uRlXb4+9//bt5WtAuf7Cv1x2hy8MEHx9YSQgghhBDFAaMtItXSpUstdyvCFXlEGZxFnxsP+UR5V4UQQgghhBBClDxlJmuwiVaDJ5QrsQoQcsaOHWsT3k6EijvppJNMgCIkSTyIGJdeeql5Jb3zzjvu1ltvNeFnxYoV7qyzzjIPqaC3DhBaD2GKT0L0BSEUH/P49KJWtkF0wcuJ0CsPPPCAu+WWW0xcIifV1VdfbaH9PAhcv/71r60utAf79sEHH1ibsG+IUMHwgnh4nX322RbKBRGP9iB/1K9+9asi5eYajgFCXaIRbHiaIU6yDEYTRDnahU/yiR166KHu2muvLSJYCiGEEEKI9MHDAM+CVatWWb8L0Yp5DH4ityhCFX0zBnHF96OFEEIIIYQQQuSOMhESUISDAMTIUF6sEaN8+Lx8BcMAHlKIS4RaQZxLhF8WgYp9S2U8oEyWJ6dVWWiLIOxrwXVo+1pWjqUQ8SgkoMglCgkohIgK/Sv6WWvWrDGhiv4zXlQ8U7xIRf9RCCHKA7xb+k/uf3wqJKAQQgghSptyFxJQhIPgw8s2L9plQeCgjtSVOicTq8Avy8jXKCNdWYZly0pbBKG+5LkqS8dSCCGEECLf2bZtmwlVeFXxidGWPhdeVXj103eUWCWEEEIIIYQQ+UOpe1jVmHimq7Rleeyv7PFTreZu64EPxf4SQghRksjDSuQSeVgJIZLhPfXXrl1rXlV4FVStWtUEKrwLEK2iDIgSQoiyhjyshBBCCJGPpONhVeqCVa3nu7tKGxfE/soe5LracvwXsb+EEEKUJBKsRC6RYCWESATPow0bNphHFZ+EjeblqGHDhjbxXd7sQojyigQrIYQQQuQjCgkohBBCCCGEqDBglMUYu2rVKrds2TLzrGIegx0I/9e0aVPLoSqxSgghhBBCCCHyl1L3sKr6xe2u0rb1sb+yx0/V67vvu/829pcQQoiSRB5WIpfIw0oIEQQvAkIArl692oSq7du3u+rVq7v69eu7Ro0audq1aytXlRCiQiAPKyGEEELkI2UqJKAQQoiyjwQrkUskWAkhPD4EIJ5VGzduNOMsAhVCFYJVjRo1YksKIUT5R4KVEEIIIfIRhQQUQgghhBBClGswwOJVRQhARCvC/SFSEQIQo6zEKiGEEEIIIYQoW0iwEkIIIYQQQpQZ8BjYtGmTW758uVuxYoWFAyQEYJMmTUysQrSqUqVKbGkhhBBCCCGEEGUFCVZCCCGEEEKIMgEhrvCmQqxas2aN5auqU6eOa968uWvWrJl9x9NKCCGEEEIIIUTZQ4KVEEIIIYQQIu/54Ycf3Lp16ywE4Pr1683TivyGLVu2tJxVeFkJIYQQQgghhCi7SLASQgghhBBC5DXbtm2zfFV4VuFhVblyZdewYUMLAYhopRCAQgghhBBCCFH2kWAlhBBCCCGEyFu2bNniVq5cWZivqkaNGpavijCACgEohBBCZAc8lwm9mynFXV8IIYQACVZCCCGEEEKIvASBCqFq1apVbuvWra527dqWq6pp06auVq1aEquEEEKILEBOyCeeeMKNHj06Nid9vvvuO/ePf/zDTZkyxcQrIYQQIhMkWAkhhBBCCCHyCgxdmzZtMrFq7dq1NmK7Xr165lXVuHFj5asSQgiRFPIezpgxw3344Yc24MHz0ksvuf79+9vEb2KHJ/Ptt9/ubr31Vjdnzhz3/fffx375GcQo8kcyffvtt6GeVITsZf0rr7zSvfrqqxKthBBCZIQEKyGEEEIIIUTe4MUq8lWtW7fO/iZPFfmqGjRooHxVQgiRhyAQ/ec//zEh6IADDnDvvfde7JfSYcKECe6CCy5wv/nNb9zTTz8dmyvi4RlL+zz11FPuqKOOsvaqWrVq7FdnAtW///1vd8QRR7gjjzzSJr4fd9xx7pVXXrHj7sED+i9/+Ys9r2+55RY3ffr02C9CCCFEdCRYCSGEEEIIIfICDGcbN240sQojGdSvX988q/CwqlxZry9CCJGPLFu2zE2aNMm+46GDYBUUM+L57LPP3DnnnGPTm2++GZv7M6l+T4dk9ShJtm3bZsIN+/CnP/3JPJPyDdr50UcfNZHpl7/8peWG9ODh/P/+3/8zMYt9CYIH9P/+7/+6Bx98sEj7dujQwZ111lkW0veBBx6wMoQQQoh00BufEEIIIYQQotQhvBDhhBCrMOqRn8qLVRjQlK9KCCHyl88//9wtWLAg9pezPEaIWIkgTB/rMCFuxJPq91QceOCB7uabb3Z//etf3cknnxybm1t4rq1Zs8b2YenSpXkXIo8wf6NGjbJnLh5TiE1Bxo8fX+glddJJJ7mxY8eaEPnf//7XtWvXzuaT82ru3Ln23YOHXZ8+fWzdcePG5d1+CyGEyG8kWAkhhBBCCCFKlaBnFaIV4hTh/wgvVLt2bYlVQgiRx5ADyXtB1a1b1/IMIl6VZo6oatWquQEDBlgIu1q1asXmiiCzZ8927777rmvatKmJTMFnLR5VeF8B4tSIESMsPC/L7Lnnnu6MM86w31auXGnlBGG5Y445xr6Ty2rVqlX2XQghhIhClauvvvra2HchhBAiI3zS3WSjKDOF8BRQo0YN+xSCkaq8+OJ5gUFbCFH2IWcV4YUY5U2OqoYNG0qsEkKIYuC9WuinE7KNMH3cU0uC+fPnu0ceecQ8ociBhFg0b948u5/vv//+9reHZcmZ9PHHH7uvvvrK5lFX5uOFRP6kZ555JuHvHTt2NM+gZ5991rx9GORQs2ZN989//tPddNNNtp+9evUq3A6iGWX6dwrKnDhxon0/+uij3cKFC92//vUvy9OE6EbZnTp1KlJnRBnq9P777xfWIRiidsaMGe6ll16ybTVp0sREO/I7kUfro48+snyMwMCMTz75xJYJ9mG3b9/u3nrrLXfrrbeaV9jLL7/svv76a9eqVStbLv45yPHEe+m2225zd955p3v44Yftb+a3adOmSN0TQZsiJtGGiFVDhgwpkruKOlH/OXPmWJlDhw61dvbw3KaewPrdunWz7x6OPWIY50Hfvn0LPbKEEEJUTPwzJordUB5WQgghhBBCiFIDAyfGQC9WybNKCCHKDggfCBPcxxElCMWHSAXTpk1z33zzjX33rF692o0cOdKNGTMmNsfZ+sxjeQYvJPsdQQoxhVBzzEOUuvzyy+1vykZIAb8dpmCowiA33niju/TSSy18IXkTv/zyS8s59bvf/a6IVxBlPv/880XqEITy/bbYLr+z3EMPPVQYLo/2eeyxxwqX8bCd3//+95bjinrwLETkIdQeuaAQlbz4CHizXX/99e7iiy92b7/9tluyZImVN3nyZMspddVVV0XyaEI88x5wPXr0KCJGAYZF75lGexOiMUhwHxo1ahT79jM8x7t27WrfEemC+yCEEEIkQ4KVEEIIIYQQolRgJDuGNQyFQBghQhMpfJMQQpQN8HDC8wh69uxpQgUh4/BoYkACvwXFCryT8Ay67LLLYnOcO+2002zeqaee6rp06ZL093jvITyLEIUaN27sdt99d8t5GJVFixZZyEAEIMQehBtAyEFcwmMpE6gjdcXji1xOgJh33XXX2X7QBoD4hIfU1KlTTSBiHQSza665xryaCMvH3z40H+C59dJLL9nyhOnD04yJ78yjLEQxRKZkrF271i1evNi+41EWD2XRNjyX8Up76qmnrL6AVxpCIbB/tHs8PMfbtm1r37/44gsTyIQQQogoSLASQgghhBBC5BwMcYzQJlQSIavq1atnYlVJhawSQgiRfRBTCIkH++yzj4k1rVu3dv369bN5hJULevzgRctv3vsGdt11V5vXvXt3E56S/Y4nbhAEFQQnRJz777/fnXnmmbFfUsOyf/nLX9zBBx/sjjjiCAsr2Lt3b/tt0qRJGYc7p47UFTGH/QGecZTNfvhwgIQ9HDt2rH2/5JJLbOrfv78bPHiwu+GGG0z0w+OKUIWIZwzy8G2NOHjOOedYWzOdf/75lrMLOCYIUsngmCBYEYKXuoVBaEXqRE4yBLxDDjnE6nfSSSeZ11SHDh3MO4wy4sFDmuMGeM0hbAohhBBRkGAlhBBCCCGEyCkY3hCqMKgROol8H4hV6YyMF0IIUbpwLycHEvdxxAnvoYRohXgFs2fPtnxMJQUCClMwp1RUEJSCAhi5pRCLgDB/hOYrKWgzQvrxifcVYRSDYXDxsPLiGQIUYQnZRzyfALEpKKgx2OPaa691r7/+urv99tsLhbJELF++3D7JE5woVzDb22OPPWwKY9CgQYW5wcLwdUVoY5CKEEIIEQUJVkIIIYQQQoicQWgoQgOtWbPGcmKQNwMjISO8lbNKCCHKDggm5F0CBKrmzZvbdyBMHEIMgsz48eNThqjLF/BW8vCcKikIl+jzW8ELL7zg/vvf/xZO5L8i9B7gZcVzE08nhC2EINr+V7/6lbvyyist3xe5rHie1q9f37zO4j3R4uG4pILQiBdddJF94vFG2ERCFJ5xxhlWl/vuu8/ygPlQgfH484G6lmRbCiGEKF9IsBJCCCGEEELkDEQqPKsw1mF0I5QQxrVMRscLIYQoPRAy8EQC7uP8Tc4qJryT8JwFwtgRFq6s4QWjkoDBGz5HFm348MMPW+6p4DRz5kz7PeihRFg+whjiQcW8d955x/3tb39zw4cPNyHprbfesjC7xQURatSoURa6d6+99rJ8XIRNxJvtN7/5jfvzn/9sz3Byar3xxhuxtYQQQojio7dCIYQQQgghRE7woQAZLQ54VTEa3IcNEkIIUTZA0CDPkwdvm4svvrhw+t3vfuemT59uvyHIeE+sskTQ26okIRcU+bTOPffc0On4448vDJnL4A6Eo+eee87deuut7uSTT3atWrWy3+bMmeP++Mc/ugceeKBQDMsUvKI+//xz+07oRC8+At7Qffv2dV26dLG/P/roo9CQf97zioEpCvkrhBAiKhKshBBCCCGEEDmBHBwIVoSGqlWrlmvUqJF9CiGEKFt88803btq0abG/UjN16lTzrM13eEZ5CHtXUpDny+eZIo/jqaee6s4777zQCTErKBgBeacIw3jFFVe4Z5991j366KOuW7du9tu4ceMKc1QlIpUYhye094pr0KCBfQZBOPOe0YQXDPPq8mEAk+XJEkIIIeKRYCWEEEIIIYQocTBo4VnFiGs8qjCAYaRT3iohhChbEM6OsH8+tOudd95pHlTxEx5YCDHwwQcfmAdQPkG4uyAMpnjvvffsO15BHTt2tO94AvM3EJ4vKM7QFgzGSBcGa5DnC7744gv37rvvWllB8JKizfz2PvvsM3fooYdaWL6nnnrK5gHP0c6dO7t9993X/g6GEEwEHk/sU6L8UuSW9KIW26XMICtXriwUtNiXME9pX26zZs1sgIoQQggRBQlWQgghhBBCiBIHwyZJ4zG8YShTKEAhhCibrF+/vjAcYPfu3QuFnXiqVKliXkDc63kGBEUZPG5q165t3/G+QvzYsGFD5N+zwR133GF18t6/jzzyiHv11Vftt549e7p27drZdwSZtm3b2neEt7Fjx9o6tMOYMWPc/fffb7/Fw357L+K5c+e6Tz75xNZhAAci08EHH2zb4G/C+1EWgzp4Ti5atMjdcMMN5l31/PPPm3hFHWhvwKuKHFe+PZYuXeo+/fRT+x4lBF/z5s1dmzZt7HtYri5Eph49etj38ePHu8cff9wGnVC3+fPnu7vuustEK/bRH+MgCGYsB4Q89MdSCCGESIUEKyGEEEIIIUSJgkENYyUjtDFg4llVs2bN2K9CCCHKEngEMcH+++9vAxASgcDiRRZCCK5atcq+B8WXN954ww0bNszdeOONbuvWrTYv1e/FBYEFker3v/+9GzRokDvqqKPcvffe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NGLECBN+SoOvvvrKvfzyy65nz57u0EMPjc11bu7cue7FF180AwChhxCyli1b5r7++mvzqurTp4875JBDYks7E7Hefvttd9BBB7l+/frF5haf8ePHFxHIoHr16tZe1JmpWrVqsV8yx7cDBosmTZrYcWFf+F5SfPLJJ3ZO0JbBthdClA0UElDkEoUEFJnw4SdfuU9nLbAcVvUbNIrN3RnEm89nTHPfrl/jOnTp4dasXu42rFvjdu28u2vesp0JOXgyLVu6wFWpUtW1arOra9CoqXlfrSuYtm3b6nap38jVqVPPrVi2yG3YsM7+btGqvatbr777bstmt2zJPLd65TJXs3bdHes3bOIqVapcsM21bvaXH7tli+e51u06u2677+1qFSyDcLSxoJyli+bZZ8PGzV2TZi2tjJkfvecqV67sevY5wFWvUdPqV7tg25s3b3Q1a9W2beO19d2WTa5O3fpu47frrP4oRs1atC2oexMTqmZ+uKOcXn0PLFivjttesB/sV7Vq1W355csWusoFdWzeqq1r3LSl+377dmubTRu/NU8sPNdatengGhXUrVJBOfEUOrYVvHkke/mgrEUL5rp6tau6ffrs7po1aRj7RQghRCr8QAM+sV/wWVIhAbMhUAkRhPN1xYoV1tfv37+/q1q1auyXssPatWstYhOpQhiYL4Qon+TLM7C8hgSscvXVV18b+14iIEjtt99+RSYEIDyZrr/+enfyyScXzueGjgBTGuANNW7cOBNpDjvsMFerVi2bz0FBvNmyZYsbPHiwO/DAA12rVq1c165dXbNmzexB+u2337pu3bq5GjVq2Drkr0LMWrJkievcuXPWTh7abenSpa5hw4auTZs2th06n4Qu/Oabb9znn39udatXr15sjcyYMGGCeboNHDjQDRkyxHXv3t3Vrl079mvJgFfbnDlzrP4dOnSIzXXmcfXSSy/ZPjVt2jQ2VwiRb3gvAMT8bNOiRQv79PdYIXhGEXq3fv36yhkpIrN0+Wq3YvV6t0v9hgV9sx39vDDwLkKgWb9+tYkxCD1td+3qWrRu7ypXqmTCDSH7tm/bVtBP3GxhA2vUqGVeWfO/+dJVKvhXo6B8RCIEHdiwfo37qeBfnXq7uOVLFrili+fZfXNzQfl81tuloatStap5VX23eZOr37BJwfwfCvrFNVzdeg3cls0b3aL5X1t5GHMo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eu7000+3T+Daev/99920adOKCGJsq2PHju6II45wdevWjc39mZUrV7pXX33VLV++fKf9Pfzww61/Fk+m24qHcp5//nnrC7Zu3dqdeOKJhd72s2bNci+88IJ9j8Kxxx7runXrFvsrs+PIfWr69Olu8uTJRfaLkNXYAQYOHOiqVq0am7szrM/xnjJlivVnTzjhhITRA4q7LU+yNgxj/fr1duw+++wzO/+CbRaENps3b55788033Zo1a2JznatUqZKF8h4yZIhr3LhxbO7PsC9vv/22+/TTT61/76FO++67r9tnn33sPEkE+/P5559bHdeuXWvtFH9so4JQ9uSTT9qguFNPPdU1bNgw9ktR5syZ40aPHm3vIccdd1zCEOXs2zPPPOO+/fbbItdeSUFbsD0iUnBc27VrF/ulKFH3s6TrLw8rIYQQQgghRJmGlyVeRL13FTmtmCeEEEIIURogcjz99NNmIEZw6devnzvggAPMMI/RHmPvsmXLYkunBvHppZdeMg8VBJKDDz7YxAg8zL/66isTGoJiRa1atcyInGzyRlaM0iwPGPXHjh3rJk6caEZuRKODDjrI7bbbbiacfP3112bQjveqWLx4sXviiSdsnxByEBSYmjZtan20Z5991n3zzTexpXeQ6bbCYNAfokgYlBW2/8GpTp06JqDQJkEjfSbHEYEGoQmxhb5pp06dbL/4BMQl9pv9D8J6iH6Ijf/+979NZIsX/+IJ29Yhhxxibcj+sC1EzqDgk4hkbeihn41R/t5773X33HOP+/DDD4ucd2Fw7j733HN2HnDuDhgwwO29996ufv361nZPPfWU7XcQhATWmTFjhh2/PfbYw9qQc4RzhXNm/PjxCduG43X//fe71157zd4LuE44zpSVCZwfbdq0MUGH8zIRCHDsF9cD200FdfJRIkoSBEvODS/iJWq3qPvpyVX9yxNVrr766mtj34UQQoiM8J3IdF4motKiRQv7VJ4V4eGlZ9WqVdbJbdCgQWyuECIZvHBxj2aUJ8YW/uaFnRcoriUhhBDlC29oo59e9b4H7XuQHy84N/ZNiNJj6tSpZvAlcgKeCl26dLHviEwMqsGgvmXLFpufzEsEMN6/8cYbJtzsv//+5tWDURkDNN4iCEErVqwwoahZs2a2Dr8hriSaevfubWIIggxCgF8Pbxk8dehHjRgxwpZlW2yHurIt1kHYYX+A+r388ss2f7/99nPDhg1zHTp0MC8TH1Vk/vz5ZgRHSPH7m8m2wuAd6pVXXikMCU0Ek913373QqwgBKrjvYVPt2rXteLHtvfbaq7COmRxHxBcEKe5VeA/RvuwXdWJdPKc4Xi1btiwijrEPrMf7IJ45/EbZ8fsThPbBcwkhwm8L7yj2Ay8atkV9+J4sskuqNgT62w899JB5rCFS0c9GFGPbHNcmTZrElvwZRCq80+ibH3nkke6www4zTzvOT0QrfqcNuZ8zj/Jg0qRJJqwgcJ1xxhmue/fuhW3I+tSBdkLAQmQJgliEQMr5xjl4/PHHm4jHcQ62dzp4MRPxDdGY9g07Hog3XKec79h5EkVNQUBk/yg30bHNNpzjnA+cM3hlepE6SNT9LOn6V773/ti3n6l80QWxb9mDczcb+P2PYjeUh5UQQgghhBAVAAwdTN7DihdEXraEEEIIIXINAg6eKogOhC0L9kkQNfr27WvzMNRH8QhH3EB0wNiOmOKN+sAgN8QTxBGM+FE8aYDwdoR+Q6jyRnXWpQzK6tmzZ6GI5cGraM8997TvixYtKjT2YgBHeMADCU+YoABHXbt27WrGckQR7y2V6bbiQehA3CBMIiJZJnC8PvroIzM6Uxcfxi3T48h+si4DVBFUgiDAILyw//HGbfYFYYmwdZdddpl5cqWCkNi0KSIVolkQtkXb0z9GqEhE1DbkWCFyIPycf/757qyzzgoN5RcELyOEI8Qs6hc8d2nDHj16WPsinnpPLfrytClwvsf36fFiQuyjjePbkPMEEZTfOBcJf4eXX3C7mUI5nKcIZUyJoM15F1mwYIHVI1/gXsG5x/FA1EtE1P0UmSHBSgghhBBCiHIOL6C8gDESlBcwDCYYDTAWMCpVCCGEECKXIODg+Y1IEy/EAH0WvFPop9BvSQXGewzxGJLjvUkAAz5iC9tNFZ4NEB7IC4SQgWeMFwTYhjewJxIi/HzW9eIYdSJHFfmmGEAUD+UjSrCOLz/TbcVDGDtCIiK64emRCRjvvceTj4ICmR5H+qBAW8RHU6EdOI4Qf+zxnMPTDK+WoOiXDAQrQIiI93Khj4xoBQieiUS/qG3IefarX/3KvJWiRjFAZD3mmGMsj1ZYOD4EMOqNNw/HGdh3BMKhQ4eGCmgs789Z+v5B8GxCKKKu1DNqO0aBY+kFQK4frqMwOL5sn3MqkTDEeYCYSXsHzxHKZJ1Ro0a52267zd10001u5MiR7oMPPgg9fmHLE65xwoQJO90LOB/YHm1C/ROdD1H2M1H9ER4RR72nntgZCVZCCCGEEEJUAHgB4+WLl1defHlJYkRg/EusEEIIIURJ443vCB1hRnoM7vRXEGGiGHYRTQCBJMxThLIIRUZZiYSdIIgXCBQM+MEw7cHwfNppp7krr7zSRJMwfF4ePGa8oRphhpBthBmLF02A/hh1Y3m8sCDTbQVBUMKbht8QRMK2nQqM9u+//759x1MtWEamxxHRC4M+glS8hw3L0v4QFMeAddKBuuMVBZwbYdDelJvo3EinDelrh51/yUB05NxADAvbPwaZUTfq73MhUQfCA7JemACKEINXGXWJFzsJ38h+IqRwbGgjluVYJhKY0oFznDrheZfoPYP6492F51qifFEsQ/hMwiJ6WJ7wjo8//riVz7nHuw0CKPm6yOcW3CblErKS3HHB5blfMP/hhx+24xsETzzEV4Qlfx6GkWo/w+rP+U7eMfLpvffee7G5Ih4JVkIIIYQQQlQAeGHzL6J+xCUvxcleuoUQQgghSgIMxxjN6YeEGfiZ7/sr3hsnGd5TIky0AcryokSUwTp41CCkIBSlk+8TTyK8J9gWBu0osJ233nrL9gFvLi9YpSLVtmhfjOIY5AnNF+YBFQVCyhEekfXj8w1lehzx1EJkw8Nm+vT/z957wMlRXenbRzmHCZqgiBIiiiCEyDnnaLINxjYGbAPeXXb/y/qzvV57d72OGIONMQbbBJNzDkIgISQkoYxyQGE0GmkUZpQlvn7O9B2VWt09PVET3md+9eue6qpbN1U67z3nTnIhAnhOZW4gRADEwkzrMBXkjTxCqr6BaEM+EW3oH1Hqqg5rCnU2ZswY/07ov1RliEJd4m2E1yH5JYRigD6GCBPaBfHkN7/5jT3wwAN233332f333+/zpiUTkDIFYY32pT7x5koFwhB9nXCWiaJRKsgboSmph8svv9zuuusuu/322+2WW25xTznKjOcU7QZ4VtF+iKmXXXbZXtsjIIX5zQLUC3VGXSFapyLTckZBcGThXEkloAoJVkIIIYQQQrQIMGYQcoSRgLxY8QLHyEFErGAkEEIIIYRo6WDExusDwzUeLJmCkX/y5Mn+fEWYtlRzHSFQYSR/7bXX7JlnnnGRgOcyjnXcccdl5KGTybEQfSgHofDwjKoJGP4RPxB9oqERawsiEeH9eDZlbigEE+rij3/8o9cLggS/V0csrA/qog6rA8LNW2+95XWAF9Ff/vIX9wY65phjfC6rVCDisM9LL73kdUidUrfUIXUdQJDjPYB2ffPNN23hwoUeng9vKwRCvNFef/11T6+m8M7B3GpVhdXjePRb8oPXV1Vw3nz22Wf+nVCGeJiFcwXxh3Cb9E/mnQviKGIYfZf241jR7U866SQX7hBNE0Okcy6SFoJwKoE703JGITToTTfdZHfccccenldiTyRYCSGEEEII0QLgBY1RjLy8EhqEUYW8pPFiHEYlCyGEEEK0dDCeY0THIJ5q7qhk4Bk0fvx4f9465ZRT3JCdDAzoeG5g5EYwwNCNAR3jd7Kwesmo6lgID6NHj/ZnPQzzNRWaCDnIfEeJoRHrAp5JmeMHwz/5pS4If4cYx/owj9W+oq7qsDognODdR99AbEFYYq4nxMJU/QmYp4t96Bf0XfKMwEUdR0H0IU3qGPHk2muvta997Ws+hxZzbx1//PH+G+HyEucPqw54TwUPulQekrybIJSR1wULFlQp+JAW3mEMvkv09IPs7GwbOXLkHkIWoSqBPDBILwpeVN///vft1ltv3SusIuc9ZUAsRBRORSblTIR2DKEdRXIkWAkhhBBCCNFCQJjiRZhRq7yYYSDIZDSgEEIIIURLAG+KqVOnunB02GGH+bNSJiAYvP322/4d7w+M56lAKPjqV7/qhvKbb77ZvaoQEvAwQihAMEhHVcdif+acQmwijB2DlGoC6eDFRd6qGxqxKkjz2Wefde+tfv36VdYH3icIDoR+I1wd2+0L6qoOqwviFH2Curjxxhs9DCBiyN/+9jcXo1KBdxH7sCA+0VYffvih13G0DnnuR7CiX7NPtFwIKSNGjPB5wxC9EBBrCuIeohLHRoBLBSELESYJOUnoyXTwDkP+eYdJJvggfDFn1LnnnusiEtCXOAbi28MPP+zeY5SrqsF61A99nigU06dP9zpLRqblFNVDgpUQQgghhBAtBIQqRgwy2jAYQ3jR0ig/IYQQQgjzcGIYt5mbBsN9JhDO7/nnn3fPqXPOOce9YdKBMIBoheGd57ITTjjBLr30UjeSM58TIkkqMjkWghYh3RA/jjzyyEpvk+pCPWDc51mxOqERMwFBCs8tBJOLLrrI65r6QLygLigX5cCLrCoBrz6oqzqsLvQNvOaoC4QW2hhhCcFk3Lhxe4WuC9BG7MOC1xKeU+SdOk4mpPAukGw+LtIhfB5UJSBVRQirh8diondTgN9pa/ozfSId6c6LVHCeXXPNNS4+I3YhPiEM33vvvfboo4/63FOp+hdCFB5qeLql857KpJyiekiwEkIIIYQQooXAyxSGAIwCjDzkJYwXRMKvaB4rIYQQQjQUzKuDRwRG5GQGY+baISQbZBKWD0M9pPKcIC2eeRikgyCQDLwkmCMH0YDQYuSvKgitzNxBHBfvDsSCmogbiAs8o5HPVIb5TI7Fb3jWUFbCmT3yyCM+P1RYmB8JECPwOGFdKk8ajPt4nBEKMFV4vpq0I9sSAo7t8SDi+TQK9U84OwQ8tksl0mQCeQvpp+sb5JOwjPSPuqzDugDhhD6L1xN9IBNoF7yLqGPEtwB1gfcgZQvtkggD3CCVV1Gm4PnHOwd5xoMqFZQPAY18ppovCtJ5LaaD8px99tl211132fXXX+/nNh5ohPp76qmn7OOPP07ad6lzvP8QoZjLLBWZllNkjgQrIYQQdQaTkNb1IoQQom7hJbykpMRfsnmx4sWQl3QhhBBCiIYCgzriAEbzZIIEA2l4PkFwYNuqQGwAPCGSGdpJC6EEw3iqeaIwShN+Dc8T5qapCp6jCLnGJ2H9jjnmmJRiFYZsxCaM4+QjGWHfZMJKpseinAxEAgQ4RI7oEuqaOgrrEC8SQaiZM2eO19UhhxySslw1aUeOHY4ZxJFE2JZ92Lc2wgmiVxAoUwmBCBIIFog54Zh1UYeZgmcOfQOPrnRE6418vfvuuy6e0SeSgfAH7BPqkPpmYV0qb6DQ/1K1TaZQl4iqVYXVQ/DBqwuPvnTCEP2M9kwljlYF9YFHH2E0v/nNb9qZZ57p6wgBmqoOEU45BwjHSJ0nI9NyisyRYCWEEEIIIUQLgpepYFTgBYtQGbygh5daIYQQQoj6Bo8ovBx4JiHMXSIMrkF8QmDCI7wq8FDCsIzgFMSGKIT6w9CNcTyZIZ7f8K7C2EyIskSvn0QwXjMfDiIIRm08ntI9S1FOQp6xJDN8Y4AnD1GBJVCdY1GvzGN09913J10uvvhi3w5B7o477vB1zNWTyNy5c92IX1VoxJq0I8+foX5TiUi0IcJROoExUygrghuh3RLrnvYO3lGUlfqvqzrMFOpoxowZLhAmEzODQINgE0Q/1iF0IZCkqsMgPNGfKBewP/mm3LRxovBDungeAfVRW0JYvRUrViQ9L4G8HXrood6nqYNUgg/p0B/oT9RZIrQtYf5++9vf+vEo/2OPPWY///nP95r/i/4wZMgQT49+luycBPo+9bB69Wq/tqQik3KKzNFbqRBCCCGEEC0IXsx4QSNMCC+weFgxirYmIxWFEEIIIWoCgkUIWca8TQgeAYzmkydPdi+QEA4twG+EicNTPPrsQsg6PKPwdsFThQE6AQz6GKwxjKcK2cdcNgguCFpVzddEHvBuIYQZ3kfMM1TVwB8M3xi08SLBoyOaP8pBeTGI9+zZ08W3QE2OVVtoi2nTpnl9VRUasSbtSLr8TztQF4lCAM+mEyZM8DTZrirxsCoI64aoRp+hH0T7DQIDbc8xeD7eFwwaNMiPT/9DsInmj36CVx51Qr8Ioh8DzgYMGODizieffLKX4EJaiFnUdbRc1DnzOSHaIp5GhRyOS73T1+iHpA+kXZU3VyrIJ95T5B+BLRWUjTYi36kEOPJEX6M/jRkzZo8yU0/0P/oS53AQpsO5RD9MrCNEL9YhBKbqY/R9jklfnjVr1h5tEyXTcgKC4Lx581woE8lpc8899/wo/l0IIYSoEdGH7fqitu7oovkQRlTxQMtDqxCievCiimjFqEMmYualkJdf5rRKZsARQgjR9AhGNZ7T2z70iH+PsuuWm+PfhNh3IDIhGLBgXA+GXIzReMPwfMLcM8GrBBCjXn31VTfsR0UQDMvMkcT+PN/wOwIFnivMR4SQgncSAkzi8w5Gf7bhHYM5lZizKR0Y9T/99FNPh3QxhvN/sgUDPwbv4B2DMRuBBOM3YQL5f+zYsZ5fxIXTTz/dw5YFanKsdPDcx7EIoYh4l0yMwvOG9sDYT+jBdIIV1KQdERRoHwQG9mFfwsHRXqNHj/ayIPKddtppaW0BmZQHMYJnX+oasRNvO/KFWDZu3DgXIygnXlKZPAtncswAfYu2RkjFc4/n7UTIG9dq+i31Rv3TNzjGBx984OvZhjrkHRjIJ2nhHUYd4h3IPpSNctGnKBd9/qijjtqjXJwz0eOF+gj9EEH0jDPOcAEGiMrw/vvve7tSR2G+uEzguNQ/whghCNk/WX1xflBHnBu0N+d2IqSFdxh9JbQfeaJNQ97Z9/zzz/f+BXyGOqJv0efYnvOKhXrgmjB06NCUbU/dU0/0ScS/aD8OZFpOBOunn37a8859Olk5M6X1gw/Hv+2m9e23xL/VHfSjuiDUB21QFfKwEkIIIYQQogXCyygvIIxSZHRh4qhDIYQQQoj6BAPvhRde6EZgvA0w9mLcx/MbseKyyy7ba4Aa/yPsJPOKwJhNuDaM1IgKGKgxNPO8w/zIGOGTeScFQz/pVeVdBWHAJgZnRKQwj1GyJTqvE2lfd911LgRRRspKHhHKWHfDDTe4qBGlpseqKTwPIgpyvExCI0JN2pF9Lr/8cjvxxBPdkI2oEG0vvICuuuqqaokj6aAseKchPiB4cCyOybHJQ7r5x+objkuYx0svvdQFKcLPkT/qkPBy1OtXv/rVPYRMoE7pM3jeUWfUXSgX9Ut5EbkS+3w43nnnnefiC15N7MdxERdpr8R+CJx3yUSYqgjej/RzllQgFCM4IaSlei+hXOSP/sE7DH2NvJMuAhvnF9eBAHV0zTXXuLBImmF7ykzZqaOq2p40gvcU+6Uik3Jy3WLheGHePbE3rWIXu+S+bEIIIUSG1NWIi3ToZi4CPIjPnj3bQzvUZkSSEC0dXqR4oeVFmBHJhCMJozaFEEI0PYJXFZ8YufnkOb3jqJN9fZQdk8bGvwnROKCvBsEFg246rxpEEQzn6ULjYZzGoI1hGJEi3bb7AjzdQ0iwqsrblKhOOwa4VrEP3ki0E0JCfbVXQx6rpoS+C+QvE5GIaz6ePZQPYYn90okwgWh9MFdYMoESgQ+vIIQbRMRk21TFxIkT3UsLD0ZEtGR5o+8888wzLgpdcsklVXoLRsucSV+raR0BXlkvvPCCi2FXXHFFyjbJpJzkg7KS59rQdsTx8W+7aTtzUvxb3ZFKPKwuod/gDVgVEqyEEELUGm629Y0EKxGQYCVE7cFAQjgGRhMjWDGakvOJUYG1fXkSQgixb8AIFz4lWAkhhKgLCEvIPFmjRo2yk0/e+36SCYgehHxEFOOdA8EoGXh5MagOcaywsDC+dt/DvZT8I+wxt1cq0S7TctYFzVmwalwSshBCCCGEEKLeQbAidAyjNxlVyv8sQgghhBBCCAG8LzA3FNEYmAurpiBWEGYQr6l0Ig5h9Qid2ZjEKsCjitCMzE2VzsMs03KK9EiwEkIIIYQQooWBFxUvnngqEpOdUYy8YNUkLr0QQgghhBCi+cEcYjfeeKNdf/311qVLl/haIeqXfSZYMVHZunXrGiSMVHUhNAqT2T3wwAPxNUIIIYQQQjQfgmDFpOSErCBsFN5WjfHZXAghhBBCCLFvyGR+KCHqkgYVrMrLy+1Pf/qTHX300Zafn+8TlbHccMMNHr8wxFve1/CiPnfuXFu/fn18jRBCCCGEEM0LhKquXbtWhrUgJGCY4FkIIYQQQgghhGhoGkywKi4utm9/+9t25513Wv/+/e0Xv/iFPfXUU3bLLbfYp59+ahdccIE988wzjUa0qi1MSPaf//mfdvvtt7snmRBCCCGEEI0NRkyyAGKV5rESQgghhBBCCLGvaBDBCo+l+++/39566y3/fPLJJ+3WW2+1888/30WdF154wScu++Uvf2nz58+P79W0QXgrKSmxZcuW2a5du+JrhRBCCCGEaDwwGTCeVnwiViUKVjzH6llWCCGEEEIIIURD0CCC1bx58+yll16yiy66yC677LK9JnMeNmyY3XXXXTZ9+nQbM2ZMfO2eIABt2LBhr3mvwvq1a9f6ksmoULapz+3rAwwFlJ08MP9XOqLbUjfNxWtNCCGEEELUPQhWLDt37vQoAYTFLi0t9QgJq1at8rDeep4UQgghhBBCCFHfNIhgNXPmTJszZ46deuqp1q1bt/jaPeE3PLCY34qXZUDoOuaYY+z//b//Zz/+8Y+tsLDQzjnnHFu0aJH/zjxT1157ra/v16+fL4cddpg99thje4haCDcXX3yxe3Px26BBgyq353iIaclewhGn2J40o9u//fbbKV/aN2/ebN/73vcsNzfX/vznP9s777zj+3F8Xvr/4z/+w+fv+vjjj+N7VECZf/KTn9jgwYM9RCL8z//8j+9HGmeddZbP90VabENZMB5EIU+TJ0+2Cy+8sHJb6uZb3/qWe3oJIYQQQggRhTCALDxHsjDYqaioyFauXOmfiFfh2VwIIYQQQgghhKhPGkSwCmH+Bg4c6J/J6N69ux1//PF26KGHekiSKPfee6+99tprdvfdd9v111/v25ImQszy5cvtiSeecBHrgw8+cIHr+9//vr3xxhvxvXfzv//7v/a3v/3Nfve73/nvpAv/+q//ah999JF/j/Lwww/b448/bj/72c8qt9+6dauHLkwlADEHwDe+8Q0XwRCORo4caU8//bTdc8891qNHDzvjjDN8OzzJoqIXHlGTJk1yQYzwiAHEqu9+97suXJEH5v068cQTvSx//OMf9xDmKMN1111nnTp1sldffdVmz55t9913n69H9NNcWkIIIYQQIpHw7N2qVSsfsIU3P4OwEKq6dOniC78JIYQQQgghhBD1Savy8vJ6j++Bp9Bzzz1nf//7323//fePr60aPKxuuOEG9xZi7is8kwKITv/2b/9mL7/8sp122mnxteYiDaLNySefbP/93/9tHTt2dA+rm266yUMRJqaDyPX1r3/dhaRf/epX/kKe6rgITBwX8SfxuInwko8QtmTJEvvLX/5i2dnZvn7NmjV28803+3c8sHJycvw7HleXXHKJC1sIVBgFqLc//elPLpxRngChWW677TYX6fAAO/DAA12MYj/mzSLd3r17+7bk+R//+IcfE7GLecOEEKKuiYrn9QWDFYQA7tPc7/Ek3m+//eJr6w5Com3aVG6bY587dmy3nbvkXSKaN61ifxs3bLTt2/e8lvMc2alLJ+vcqZN9GfsTQjQOOGfD/HOdO3W2zp07x763j/8qWjJhUCyfTBXAJ8/pHUftticEdkwaG/8mROOGvrxp06bK/s0g7cSpRqoDz/p4lwODzjt06ODf08Gxw2AeqG0e0lHT8nKuk0fgHsF+zW3AEXUDrVvXvf9FTds4Wu/UN/fk+shfbYj2+ebaN1oibUccH/+2m7YzJ8W/1R30n7oAjQY+++wz/0xHvQtWQbiZMGGCezcNHTo0/ot5mEDC5EXBC+nggw/2EygIRwg5iFOZEMSpAQMGuBcSJ2GydYGQP0LpPfroox5uL91x33vvPfecQkS66qqr4mv3JqSbKFhxAUT0+ulPf2ovvPCCHXvssZXrfvvb39ozzzxjRxxxhG+LYMU2ifUGiFAIbeT5iiuusClTpvjnnXfe6cJVlAULFtjXvvY1O/fcc+3f//3fdVESQtQ5EqxEQ1JfgtXWrVts7bpSKy2tmC9y2/ZtsXt0xUuREM0VngvbtGpjbdu0i31vvcdz4s5dO2zbDp0HQjRGeIds26atG1p79Ohp2VnZ1q1bd2vXtl18C9ESCQZuPiVYiaYOfZhIROPGjfNoRwHshYcffrgP7K6OaMRA71deecXDHodzBWGBKEdMPxKMqVHYjncPpgaJTsuRaj+iLX3++efx/9LDlClEkQpTp3CuTpw40e2nieUlGtUpp5ziAlsiGJOJyEQkqiDoAAPyzzzzTLcnJtoB8ah/9tln7Ysvvoiv2ZvE/CWD+qFuMECn2r62x6JMRLlioD9tyNQwidvRpgzSj9ZbOk444QQ77rjj4v+ZrVixwiN7YT8OVNXPONbo0aNtxowZe4TP5r48atQoj6CVTriivWfNmuVtztyxlJPoWsOGDYtvUWE3f/HFF+P/VU3i/sn6PGCjPu+88yqdHaC2xxINjwSrWsAJQUg9Lhx4Ax1yyCHxXyoEGeZtioInUBCVqhKsOJmnTp1qH374oQtOXFhQjKdPn26XXXZZRoIVkI9f//rX7jXFBSXdcblA4o1VU8EKmKOKfQlpSJjDjRs3uscU4NEVjLLpBKuQD+b2+ud//udKAevqq692wS8KeeHmwAU5WfmFEKK2SLASDUl9CFbl5WW2smilFZes8v95CercpbO179DeWrdqXCPkhKgLeI7eVL7JNpUxknRXpccGfX5X7KW7dZvW1rV7F2vTds9Q3UKIxsCXbhzbumWrD7BgJH779h2tIK/A8nrlZ+QtIJonwSDJJ9d5PiVYiaYIfRe719ixY11sYYqR/v37u+EdYYZ+jYjDfO88v1QFhnum60AY4Dmf9wjOkcWLF7sxlv8vvfTSvUQr3jkQMtiWOeIRqRh4T8QjBIvE/RBvwrQoqcBuyTEpDwPPEUNIH9EJ8YP/mXu/oKDAIyyRR47FAHtEgqh4QjrPP/+8i0Hk4YADDnAPH96XiMCEYIIwQWSmKKRHfSDUpCKdiBRYunSp2xspU6rta3os5lFFzJk5c6anAamOQT0hzCCOpYI+xf2S/oS9l/oEppqhDNQlUbBoZ75T7/Qz7NgIk1HxKbHe6RfYfRHWsAPTnjgjnH766XuJhUBdkF/6JZAGXtNnn322t31g4cKF9uabb8b/Sw7Holzc+7EJ5+Xl+frEPk/fYBv6NNG/OOZXvvIV72dQm2OJfYMEq1oShCnmY8KjKOCjl+MXEy72t956q89BlYlgxQn3n//5n/bggw/6nE6kywmYTJzJRLCK5q++BSsms0agovyE7+MCz00K76cQLhAyEax+8IMfeB6DYJWOqBgohBB1iQQr0ZDUtWBVvqncvli21NaWrrUuXTpZr/w8y+rZ0zp17pTRC7AQTY3t27bb+nUbbO2aUivbUBa7hu90oapndo/YOdDZNqzf6CN4C/vkW9t2mY9cFkI0LBgIy8vK3fC0qqjYdu3cZYUFvX2RaNUykWAlmgvY/J588kk3jicKLkFgQLi/8sorrW/fvvFfksN2iEEIH4kCU9Son+h1g82OPPAbc+5jLwziA9ddIiQhqiBKjBgxwtdXBXlhsDyRkJiyAxEBEKpef/11f+fFPhimDwHyiM2P/ESFFkDQef/99y0rK8vromfsHQY4/xH7sB2S1jXXXONCVoCB80zbwjWC39i/umD3xDkBsQhSiUk1Odb48eN97n/gfYxoXNQ1ZahKREsFYhJtjchCHXOfRAijHelTicJU6Gfca6NtBUwv88knn7iHEmmF/gTsR5r0lWSiTlQg41321FNPtdzc3KTCViaEvnPQQQd5/sP7a8hjYp+nbwRxlGl7iCKW6TtvqmOJfUNzFqwaZMgwSjPg6hila9euLuSwcFFO5yqZCBfrxx9/3AUfRjv88Ic/tO9///suenEyVhcU5egFpj6hrFyQuHHMnTvXvcO4+EZvjJmCi28U1HDclJMt9957r8QqIYQQIgIPXytWLre1pWssK7unDR462Pr06W1du3XVA7holuCRsbq4xIqWr7L1pRtcrOrcpZMVFOZZYe9865HVw7r36G7de3aTWCVEI4fR2D2zelq//v1tv0H7WbsO7WxF0XIrWbPaduys/8FEQghRX+C5gtDB3PKJA7gRCTC0IyQwkK0qGDTOYHIECsLqRW1/CDzMT89zPwPiEMgC7IctDXEEb66ooIAIFOboR4DIFDzEGLCPiBEdeEf+EHRIMypWAXlkW8QuBrwH2D54LRFpKYhVgH0VAQa7K0IXYk8UhGz2p9zcS6oL+2LLRKxCMEw3SKImx2L7Xr16+dQmTHuCYFSd8I+JUHdEuyIvhx12WGV+yT8LdlqcIaJ2afoeIiX7Tps2zfcFHC9CvQ8fPnwvW3J+fn6ll1ZRUVF8bQWkQYhLfqN9ELsoZ03FKtJhihjqhnKF91fW4yHG/0QSi+aRMh511FG+jnLQzzMh1bGEqA8aRLDiRBg5cqSLKatXr46vrTmo+IhfpImXUXWErkS4cOOuy8U/8aZQnyBOcfEjvi2jHigL7sCZEsS/4CrKvtyIuGFwYRdCCCFEehhdhlC1enVx7B7aJXYv7ecDSGrzXCFEYwXPi7KNZVa0stiKi0ps06bN1qp1K+uZ1cP69Ottufm51qFjB2sbe/ns0bObdem6exSuEKJx0759O8vL62V9+/Zxo9eq4lVWHnvPFUKIpkqY7wgxJFGo4DoX5t7BxhiEhFTgIYUdEUEnmXcPAkMQdkKINkAwwwMHwSrZ3FHBcwZRK10ougC2OjxUENrw1gkiAu8kiBd4uvCZjOBRRJ4CHJM8QzJ7JgPWKRfbkccoiA/kg99rIlghdCAAcVwEkXTU5FikedNNN7lQmKzuqwsecYh9tH9UKAz9B9Eo6oEWwCGCdmJ/+hDwrkj+aC9CVSZCfw1tG9ongDBJPuhzODLU9r0TsZQQlQhkIbQf0I+DR1qysH0IdLz3UibOj0xIdSwh6oMGschwguO2+uqrr9qf/vSnypM8ChfdZOuTwc0JJZcLZFSt5uJPWD9cR5PByIvEE5EJHHGfPfLII/2CUdegxHPzSYQLJO7GTzzxhNcLAlaitxQw8iI6ggJQ//EqQ+QK81XhHs2okOeee869tqJQr8wfhvurEEIIISrg5YkwgExRlZef515VQjRHCAFI+L8Vy4psTfEa27Z1m7Vr385ycrOtT//elpXTM/ZyXTFKkrmrCA9Ym1GsQoiGh3M2t1ev2P2sl23esslK11dM4C6EEE0NBIQgsGBYTwbiB3ZBxBjsbulALGEbrpPJPFkQUUgPcSoqCBENCoM/hv+o51UA4z2wXSaiCuII9jqEs+CdBYgWTGGCXQ/hJBFsnQgmQOi4AF5C4f/g8RMFWyCCCcIV4kSUILIhrFAv1DnbZnLf4B2KcH3sg8daMltmlJocqy69d6g/BveTb0LZ0daBMDcWfSDZMSkbv0XFQcpAWEbaK1lowtCP6GuJQiIOE/RF8kG7UBdsS/+qrvMB+xISEg4//HDPV4D06Pf032QiIdtyfPJC2aoi3bGEqA8aRLDipP/mN79pt99+u/30pz/1GJ4INR9++KHHzSSU30UXXeQnCTFXqwpbx0WOGLGou8wFhQiGpxJzOOEqykWE38KFJ8AFlWMTS5Rj/+53v7M77rjDbyzEUU3nwlpdSJMbDSc0811xPObSClBGysANC0U+VThAyvK1r33NfvnLX3oaTOr3rW99y+uNuuKmBtzwqAvELObWomyhftn+v/7rv1z8EkIIIUQFZeVlsReoMn8RZrSdPKtEc2SvEICxF1PmZ8sv6OVzVMmTSojmQ4cO7f1+hnHKB4RuyWxAqBBCNCYwomNsh1R2OmxqGM251lVlcMcmiXiA0b06ogBiA55c2OUI48b+ATzApk+f7vkjLFwmEHIQ0WTYsGF7CUipIL9EWELoQmiJzqMEiCZc88lL8EoD8kqeyTs2x+i8+hDqAjsl8+7/6le/svvvv99tj3/961/dVpkK5p9hQDyiS9RbKRW1OVZdgLcR9lDEpehcaBDe/4KoWVsQ4fA8Q0DEsykaSQsbNWWl32LXxuHgN7/5jT3wwAN23333eZ0wz1qmfRQHDkJMJoaXhKpE2pAHiNqqU5HuWELUBw1mmUGV/slPfuIXJ0YnfOMb3/AJ2i6//HKfpO/aa691cYWYoZnAvogyxNq88847XXDiRvXCCy/YjTfe6IJV4kWPifkQtRBv2P/f/u3f3EhFno444oj4VnUDN0TEMdxXf/zjH9u//Mu/VI6ICBDzEy8pXElTTRLJ/lzMme+KPFMGvMJYRx1GLzzUHXN7cQGmbKF+EbEoIx5dQgghhKhgy9bNtn3HduvStYt17LRn7HEhmjrJQgDyUk4IwN79CqxXQS/1eyGaIZ1j792du3S2LVs2u2FUCCFaOohDCFwY5ktKSuJrd4NxP1nEJ56bzjrrLI8ahZCAoID9krn0sb0hxJx55pkZhUcj2hPCEyJBomiSCF44RFV65ZVX7KGHHvLvCGPM55QoPJE3BsOTF/JE3shjED8QTPg90XsoiBTkCxstYk7wlEKcwMkAu2oieJUhyDBonvmdknklJVLTY9UVzD+FvRjhLjrPFyDAUAbKlWwuJ/pFEE9TwbxOtBGOFH/84x992hcGj5x33nl7OGQgrJIPhCSmzFm4cKE7OiD8kS880V5//XVPrypIg3Ygb9HwkvVBQx5LiECDDiXmAvuVr3zFQ/ChzKL+c1Ei5N3Pf/7zSm+hABMrEt4P8SUR1GDS4qQhDdJ7+umn/YL5+9//3vdLnJiR4+N9hCso+7CMHj3ajjnmmD2En3THJX0uIqRTFaSDCMdxCFWYmB8ufFwQuXmk8ypDTMMrDOGJOuOidssttyQdacLIDi72YVs+33rrrb3KKIQQQrR0eOhm/Fr72P1U3lWiOZEsBCBz3OT0yrY+/QotOwcPDIXyEKI5QkhPFu5xO3akN7IJIcS+Ak8UvH8w4EeXxEhJdQEiD4PEuS4SiSgq5iMivPfeeym9TAipRvg+vJjYb/HixT4YnfwzLz3pZmJrQ4SifISSq2r+fMQT5rpC4ELkIX3siWHerij8hiiFaEaeyBt5JK/kmWlEkoUrJO+IXSNGjPBIVbfeeqtHxSI6FtOlsD/1Eq0rRLEPPvjA24goUYniTypqcqy6gj7G9DDYT3EaSGwr6hTRirbBUSAappB9sadWlS9sr7TX559/7ulgr6beE+dLIx3EHzyoEOxw3CCi1gUXXOAOCccff7z/9sknn+w1nU0itDO2dNogGl6yPmjIYwkR2CfWGS4QeDZx06DD18ZIxIWANEgvk5sE+OjS2D61PXYmhPxFY6QCF6G3337b881FMxNII9PYuGHbxOMKIYQQouIlmXsxjw4Sq0RzIjEE4M6duzwEIB5VBb0JAdgl42dmIcS+pVXsr3Wr1imXZOdym9g9jYV7XNTwJoQQjQkGV+MNRDi06EJEoboGDxqiG+EZgrhABCK8l/CIYYoRxKRkdjauoXjCIKZg1yOKEmIL024wWJy08Goi5Fw6ED6mTp3qAhL2v6q8khB2OA4LUZMQVdj/73//+17HIvQc6xnEz0B18hb2QxRhED0D8rknRMFhgEhVDKCPlp1y4slFXSGcRefGIqQhYhiiRVVeYlFqcqy6gjwjRpIHhKlEOPZRRx3lbYLoRN/AW4rpWOifiDVVtRdeeKG9EJ/w6EMYffbZZ/cS/BCsSI99ogIk76O0O8IjoheOCqmgLcOcXNUJL1kTGvJYQkSRhaaBYfQGLsiELuRmzAWbkQZCCCGEEELUlGQhANu0iYcA7Ftgefm51rFT3c3XKoSof9q0bmPt23a0Dm07JV3att57InV3Hc58ihYhhNgnEGUI0eOQQw7ZY0kmKtQFePlcccUVLpIgCOC9hEcMnjeXXHKJ5ebm+ncGlQeY94jtWHfppZe6JxPh7Ejj7LPP9ghMeMIgaKUbIEA6bFdYWJhR+EDywXFY8MhCKBsyZIiLJ0SZCiCAEH5u06ZNLlYxTQh5C/sRlYq847GDuJYpeIBRX4grCEmA6IMIgwiGJ1BdDfhLdqy6gqhWtB8CEdOtpBKeCHN34YUXunhFHSNcIWKSN9odLzuEtlQOAewX2ovwfnhO4TmGVxKCWSKkl0o8C9PFECoxFfQlBC22r45wWBMa8lhCRJFg1cAwWgRln7moUPEJ7VeVWi+EEEIIIZLDy+iaNWs9ZHN09CgvvuvWrbeS1SVVhvJoCMhbeVm5LV60xOZ8PtdWFRV7qL66IGkIwA7tLScvxwr7FlhWTk9r1z6JYTsBBC/yRV3WF9QD7VK8qjjWLnUX9idVP2B96dpS/wx4W8S2Y/vo+ubErl1fukGuaGWRrVi+onJZVbRqjzoiPNLq4tU2d848W7RwcWyfMt9XNBJaVXhYtWqdYpG3pBCiiYKwgpcJ8/xEF4QZIhVhIIdUIQK5lzEgHEEmkyhEgEcLYei+853vuDcMnzfffLOHbmO6DgSJqAcJogXPk3gUkd8oXH9Zj/iAZxBCRzJ4Bv3ss89c4MHLi7JVF/ZFCAE800KdICbwP/nm98R7Anneb7/9/F6fTDhJBTZKvMEAIY46IFwenmKUB6+yqFfcc889521Bm/ztb3+rlqdc4rHqkgULFrgIhiCWOAVNlNCW9AdCFdI3CF2I3RZ4VkS8SjeVSxS2QzDkWSsqFNKnKSvtQV0lI0z9Qp2nYvr06d4W5Jk5sJJBHuhriJrR5+JAaC9IF6Iyk2MJUR+0CMGKi/Sjjz5q//Vf/1V509tXcJLjkjtmzBh78MEH044e4WLJtkwMKIQQQggh9mblipU2ftx4W7xwceWLLi9nC+YvtDGjP/RP/t+XIMzMnDHLXnrxFXvxhZfstVdetxeee9Hee+d9z3+yF8lMIe1oCEDEhi5dO1s+IQAL86xrty5JR8Eini1d8oWVlKzx41N3iGljPxwbW7+0VnkKkAbpcxyOB7TFnNlzbOxH49zIUlcgSk0YP8Fmz/q8sr29TLF+Mfr9D7wfhJd/fmc7tme/5sj27du8zz3/7Iv2jyeeqVxee+WNynNl7Zq19lGsvV99+TX7aMxYe/ft97xvzv18jhtTxL5n166dtnXHFtu6fXPSZcdOtZMQovmBiBG8WVIJQXgV8ZyBja86IhDiBCIT3jB88j/CFEZ57HNRUSIIQ0FESIRjk1eeL1I9axJCD9GEtBFOksG+CEKEoiO0XzKCGMW24RmN7xyb31LVAeWEqPCH6IR3GZ4zyUQi0o8+B3KcEIqQ7wyIiS5hIAxpUY+sC8er7rHqCo5PGEXAcy+TPsLzMh5k1BltS77w0KLMeD6FNCjTu+++6/NbpQoHGZ69eZ4Kz5/0IxbW0X+TUVWfW79+vc2ZM8eFL8oV+kUi9GOEXNom2eAs2gLRijKlEuIyPZYQ9UGLEKy4UCBaMfJiX59gKNe46RKbNNVFIcANmnxX5+YrhBBCCNGSWLu21OZ+Ps+KV62ueFneWSFSjBk9xr1LevTssU8HLPGSO2/uPPvgvQ9s9api69+/n+0/bKh17tLZpk2bbh+PHe/CQXXh5XfjhjJbtWLV7hCAbdt4CMDCPgWWm59rHTqmDgGIAWjKpCl7CH3Mb9Urr5cbcOoC0iV9jhMMTjyLd+/RvTL0Tl1B2y9ZvNTFMOoC8DSbP2+BffjBWJvz+Ryf3ws2b95i8+bMcyGtPowkjQHKvmTREvcwzMnJst59Cn3JL8iL9b0ubqSYNm2GfTbpMzdo0Cf79uvjYuX4jz/x/cS+Z9eXu2znrh0pF34XQojmCOIOzwzLli1zgSAKz0Bhjh/C7NUmahFiEmH2MMozv1TUZhjEHp5hkj0vIM5wP2XfZM+aPAPiXUV+CTuX6nnUn5cWL/ZQdJQ3GUHICJ4zQHocmzyQl0TIc3j+CmUBBJP333/f5/FiypJEEDlWr17t9UoIQ57XrrvuOrv77ruTLjfccINvwzHwTmLdcccd52lV91h1BfVIWD285/Ayqwn0MQQbbLO0X4B2ReTE+yiVoBrai31D/6TtQvjDuXPn7tWnSDcM5qJfJ4P9EMmqCi9JW+AtSP0uX748vnY3tAVhHnnmp46SkemxhKgPFBJQCCGEEEI0C3jxW7FipX304TgjtNnRo46ywUMGVb7Y8yJYVLTKZkyfafPmzrf16ys8kgAD/7rSdVYaW774YpktWrjIvYJIk5GiCB9TP5vmXkiJIxUxpCxd+oVNmzp9r3R50ftsylTbuWuXnXXuWXbRJRfa+ReeZ5dcdpEdcughtnjxEt+HvJEHXh45Xtifl9oNsfRY+A5bY9t9sWSZTfzkU/t04mT30mK+ql55OVbQJ9/adWgby3uZh/hb9sVymz5tRmW+SYMRk8uXrfBjI9qsKVnjBoVeebl2wEEHuGiF8YTtSDsaUo7/Wb87L1tjx1hm0z6b7qEOCfdH3ikL6ZI+x+F47Ae9+/S2Aw8+MPaCvDu8DuUnTCBeQZ/PnuMiHuIjkB51Ql3ySVkoE2XDSAPdunePvZh393bfuGGDr1sf+yxZs8a3Wb8uVofx9fzOdmzfNfZCT5qE1SG/C2LtXLRylZcvVdmA/PI/ZcLQMmvm7BptE6BtQrnoS8E4R//D2EC/JIThwgWLYnW53NsrHZSZ/A/Zf3Csr11sV11zpS/nXXCuDRy0n/eNxbE+np2b4/3yhJOOt1NPP8UOPuTg2LHIrwQrIYQQ+w7mesfgjuiAh07UuE8IviVLlrhgQwjBKDxHITIEwSAV3CenTJliTz75pIs9o0aN2mt+eeasQmxAuAgCWYD9x48f78ch1GB07qsAeUQsyM7OTjv/DwNHQjkQuChDFJ5/mIcKMY1Qc+G5FlGCMG3kgbyEZ6JAyDei1tChQ+NrK+ZQomw8a0ycONGfVwI8/1Ev5IEB9MzFVBsa8lgBjjF58mR/lkOEDN56mcIzGVGxXnzxRU/r1FNP9TYM4IVFiEHSp10SBVXaHDGLvhPtn7Qf+UHcmzlzpvfrAP17woQJHkKQukgWwpDnwWnTpnm6VYWX5NwIYQkJz8i+gVA/PEsi5iWrn+oci/6JtxleZ4l1IURNaXPPPff8KP5dCCGEqBE8bNY3dTkSXzRteKlhVBgvsTzQ1wQe3kvXlVpZeZll52THXjJ3jzoUTQsEqqWLl1p+YX7sOtHeQ9ph2D/m2FEuCIVrB8aIqVOm2SfjJ7jnCfP1IL4w2pG+hKAwYfxEm/TpZBdNEAhycrN9bqiPP/rYZs/+3MWLBfMX2MYNG2N9r4e/hNMffb+Jk11AIfQc6XbuXJHukiVLbcbUGbbfwAE2YuSRlfMskK927dq6ALF92zYXEdavW+/pbCrfbHn5ef6SyEszQhgjgHN75boQNC1Wjg/HfGTz5y7w+YcYjdmxcwcbNGSQdeve1UUX0mH058JYfhDEMN7wgopxY+WKIpsxfYZ9sfQL2xZ7We3SpbO/rCKEUPZOnTp6vcycPsvra+6cuTZ/3nybNWu21wMv3Pl5eS6iTZjwqU2eNMXLvmgBZS/ysgMiH+nhrcOAZY7BsebMrkiP+iE/CEafTZ7qnj20zZLFFQv79Iid45yvM6fPtMmxtkH8Il3mXFoQKx+RFHJi5zD1isjiYXfy8110W7JosXtd4TlGfWdnZ/l6vIjmx9qxb/++sXbZz2bP/Nw+HvdJ7HO2i2XM/0V6k2LlSlY28k2eJ8bKjmi4dGmFwMm+tD2GjEy3sVgZEeqoZ/onYunCWN4Q1/gdL7n5sfYbH8vf9Fg/oj6hsHdBZV9KBn0Ur7K2bdpaQWFhhcj6pVnbWJ+j/Xbu2Glt27bz8vfp07sydA19ALFwwH4DLL+gbgxHomHhfOG6VFZWbllZ2datq+5vLRX6AvCc3vahR/x7lF233Bz/JkTjA4M7z1k8yzAX0aJFi9xrhjBv48aN82eaY445xoYNG+b3NSDM2tNPP+0iCM99TMkRBSP8U089ZR988IF99NFHLuZwfpAOHkHhXhjgPYP7MWH6EBdCHpgPCq8hxDSeY5iLi88oiBkffvihv7MMHz58r7wkQjQmhDie6Sgj34PXFeIJ5UHEIGJTEA/IL94x1BH7IZKQJ+oL8QOBiHwcfvjhduihh1aWj09CFFL+pUuXujDBfvPmzfO6IT2eQU877TQX46qCvCHAsA9ljb6319Wx0h0jEeoOAY9nrZNOOsmfaauC+mNuLvoF/Yt2Ju9nnnmmHXzwwZV9DPhOpADKxHMnIiN9hP5B240dO9b7J/sdddRRe+zLszB9jrqgDkKfYh+e1TnmGWec4SEIE8HjiTZG2KPPphORADGTumBhP8rIMelPHJO+c/bZZyetn+oci0FftCXCFaED07WNqFtaP/hw/NtuWt9+S/xb3UF/rgtCP+IaUBXysBJCCCGEEE0evGM+/OAj91I5/IjD7LAjhlvHThWhV3jIJgQcYlSb1m3s4EMPcgFp+RfLPFwdxgg8bmbOnOVCVk5ujgtIePhMnzrdBYYBA/rbYYcPd+PJ1ClTXQRiJCuf/I/Ic+hhh8ReMPu4YIS4gmCB1xZhuxCbEl/gGI3LS+KGDRtty+YtngeEGF4imbsGGP2IwEJovdI1pbFyLLAJ4z+1ktVrrF+/vp4nwgBi1Fi1qshfggmPiKcOQlFh70I7+JCDvCyIQsXFq10IyYm9aCPk4OWE4MPoW/YjvCJhFjEIEE6xsLDAPaKysrOsJLYvghL1iQGEvBKCD0+l4Ycd6gLQwgULY3X6mW9DuqTPcTieCzRWEd6HfSkv2/H9k48nuIhy0MEHeng6vNQQkXihZxv2oUzsQ1sccOAwF8w+m8xI5FJ/AUKMIn36AqON8aYjTCJ1RPmKVhX7eubVwnaQF9u+deuK/NDOzAc2cPAgF7ERJlOVrXxTuY8gpe0RzxDh8Bgj5B7i3sRPJnqfymQbjGeTY2kiZCFSHjr8EK93hKnZs2a7QEm7IFquX7fO9ttvgPWJ9THKkw7KQl0xVxfzUjGXFQvpkC/CMiKgHnjQAZUvj/RXBFDymm4CbiGEEKIhIAzbOeec489eGN0RbxAJuG8h3GBIj4oBDOQIU4Ek83jiGYl7Hc8CiFF4jnzzm9/0tIKYE4V1GPTJA89reM6QB8QrBoLgPUOovGSeQUHAQHhL510VYLsrr7yyUhygnBwLgQHI4+WXX+7bRUHk+epXv+p5IU/kjf3IK3km73gI8VwXhfJfddVVe+zHfE2IDngTXXHFFRnlOxMa8lg8nxLikefngQMH+rEzgb6BKMZ+PAMhdBHeEHEs2scCpEsoRAQaf8+ItVPon7QR9U7fSexXpHXsscfaeeedt0efYuAcAtJll122R/jBAM9uCLEMREgXXjIK21x44YVe77yzhHrH858QfxwrWf3U5FjA+ZfYz4SoKa1iL0l7xqMQQgghqgkPafVNspcO0TLhhYCRjYTtqGlMcl5KFi5eYEXFK23I0CHuYSCaJp9OnGSvv/KGG/5Z/GXvyktjL5iHWus2FS+JvJixDcLQueefY/3693Vjxfvvjnavl1NPP9VfKN96420XZ84+50wXWRAUELAQoxjV2qp1K/egeu+d92Jp9LPTYvt99OFYFwFOPuUkFwC2bdtun8/+3L6M9TH61uRPp3hIwBNPOcGOGjnC8xPgRf3F516Kvbxv8RCB5O/1V9+w/gP6eT55QWSb12J5L9tQZkceeaSVbSz3UWmIakOGDrIeWT2MObIQQA497FA75rhRNu7Dj435sU448Tg74sgj/Fjjxn7sdXXsccfY0ceMdCHlww8+tEGDBnne4MPRHyXNKy/veDiN/ehjKygssJNPPdGvyYsXLXahbcDA/dzzKOSV7S+8+AIXrEiTl/cTTz7RhShegikjoQIpI3Mqvfby61a6ttTOveAc9/j5cteXNnPGTHv/vQ9s8JDBdnysHO+/+759sXSZnXPe2TZ0/4oX73ffes8WLFhoZ5x1ugsveIyRNoLTcSccFzv2h264OO6EY2P1M8nLcsJJx3ldrClZGzv+2S5yhfxUpD3UdsbuaRiZ0pWN9n35xVf9N/5HAMJD7vXX3rRVRas8LcSuqrbhxf7tN9+xgoJ8Oyve7/AUe/Xl16xt7Lezzz3bZkybYVOnTvN6OHLEERkZA1YsJzTmWBfvEMKoB4RU+tTZ555pBxx4QOX5AZQVbzD6MgIdfUQjZJsmiNN4MBLactDAwVZYoPtbSyJ4VfHJsw6fPKd3HHWyr4+yY9LY+DchGjf0Y4QO7mU8r2HoTyYwAf2ee3V93MN4hiFtRAdEtFR5qC2UgfLyWVV5o7A9XmbUFwNbMhUauEZwPEB0qM/7f0Meq6GI1jvPaLRXMpErkWi/rk571YT6rHeEsJdeeslDEF5yySUSrRqQtiOOj3/bTduZFe88dQnXvrog9HG8Equifq6uQgghhBBCNBAIVRjcETLwDsGTiFCBvAgCnjh42yCwIHz844mn3dsEjx3CBzKiEhCmsnr29DBsQHgXPKbwZnr5xVdcXJrwyUQXAYLRhNBpiGSEdCNNPKsQHw474jDr2q1rhSgQe2flZTbkJ1PYfOuWbV628rJNLlYR3qSgMN9KS9d6+JB333nPRQbELp/zKX6Irl27+LxOHJ8Fb7NWsT9eOMhLppBn5q6aOGGSv9yOPHqEjzzlZbdvv77WKlYHo98bbc8/84K9985o+2LJF/5SjKCTCQg4hBJhLiXEI17wyW9B70IXeDasX2/btlbMQ9EtVp+E72SbYBCgLOElqnuPHh5qhXB4hG9kPZ5tpJuVk+Uv6oT3o65oG7YPkC4CEx5X7dq3y6hsbdu2sc6x/kYIQegWSwOvN/IW+lS6bcgnHk1FK4vcy4w+Rt9849U3XVwinwirvl8sv3ioZWoEIJzlSSefaF+5+gq79LKLfTntjFO9TphHa8vW3S+erKMPMbfbgP362yGHHtwsDEhCCCGaB0Eg4rmM56B04g2/1dc9DGMreeBZIxMBqaaQNuXMpLxR2I68sV91xA88utiHpb7v/w15rIYiWu/000zEKoj26/oUq6C+6p33IQQrykJ4TolVoq6QYCWEEEIIIZo0XWIviSNGjrDLrrjUjj3+WPdewVsEgz/wMoXwwgslggMGeoQAPE+OOOJwF5iSgYcVXknMY7Rp02ZrFx+R2Dr+MoawMnjIIDvplBPd0F+2caN7wrzx2ps29bNp7gXUqXMnP3Z5WbnnIwrh3tgGgaRtQoi3nTt3VQgaq0qsbEO5CzPMP7Rz1w4Pk0ccegQVhKP2sf0zMWaQBqJWdYSzNWvW2KcTJrlodNTIIz3EIC+ljDCeNXO2fTx2vK0uLvEXVOrG50hCocuQUCeUg5fpAN5F7WL/fxn725Umv5QnpIGAhecZbUU4P+gdyy/rC2Jt/eWXu1ys2Rz7He8v1iejpmWjXmhLtk9Vx9FtaA/Pe2wd67fG+gJ9kxCSQ/Yf4h5zCLA1gfwibFIf9FOOiWchc68RDmn7tu2+HWUlHCH9HGHv6FEjrWdWzeYGFEIIIYQQLQfm8OK9hKgnyUIZClFTJFgJIYQQQogmTdcuXdwTinB1zFc0dNhQnydo2tRp7p3UsVMnH/k4ZOhgO//C8+yqa66sXM44+3QXYZKxckWF5wuix6WXX+xh+046+QSf1wkQm4pXFXsYt7PPOSu2zSV2zLGjfP4lPK1KS9f5pMyE+cBLiTmFArt2felzE5WXb/JJkREm2rVr6wtiwtqSUluxrMjWril1UQFBJzunp23bvtVFpAMOGmZXXHmZXXzphTYqdkwEmLoGj6SpU6bZksVL7KBDDvIwcmHupDLmR5o523bt3Omh7C694lIPpTh06JDKbTKBkaWIK5s3bbKtWyq8iQAPpbKycmvbtt0eQlY6qLvc3BwX12g39sPDCjEPMaZdu/YePpF2Yzu2T0Z1yhbVpRCf2BdRNLpdqm3wumLkdHZ2lh1+5GF2eaw9Q7/8ytVX2qhjRronWHXhGMzBhdCIN2AURE7qJYi3hLhkXi76z7HHjar0chNCCCGEECIdhYWF9q1vfcsuvfTSjJ/XhcgECVZCCCGEEKLZQBg5vETy8vJ8/qj58xe4KII3FfMWIb5U0Mrnp5o5fZaHDEwGhv8d23fYzl0V8yGsXVvq3ijLl6/w33fs2OnCyEdjxvpk4IgL++03wAWI7ey3Y0fsuL18Xqbly1bYpImTPAQhce4JT4gXGJ42zHXVoUNH69QJ0aq9b7tw/iJbG8tv8apVHjKvU5eOltMrx0WOnTt3uHfOtu3bPKQcXkPFsc/qsnXrNg+niECW6BEUPG8IE0d4vv0P2J8qcw8gfvO6iZVvR+yT/FAm5pNauHBRZRi7AHN08XuFd1d8ZRxC5OUX5LvwN+fzOZ4+YtXsWZ/bpljemF8OQSsTEFpycnOtTeyFmTpDSAzzHxL+j5B/zEWFWMN2qYQZPLoyKRseUUyqThtQJ4QhRBDrEGsjJhGvahtCKyIQ0T/pi0y4zcs+wt2smbNs3pz5lZ5Q1YW+zlxdnAPUJ/W6ONb3KQsiHoLa4tgxx330cawezI4YcYRlxfJM+bbEjk9eq+OJJ4QQQgghWh6EM5RYJeqaNvfcc8+P4t+FEEKIGoHhtL7J1GApmj9r1661kpISn8+lZ8+aha7CEFu6rtTKysssOyfb568RTRPmqlq6eKl7VxGWDwEIbyrmbFq4YKELBYgevXrl2to1a1xgWrRwkc2aMduFHsSNvv36GGHkli5Z6vNRkQ6iRpvYUhLbh/mEFi9aYvPnzXexCq8VPFLw5EK4Yf3cz+fZwvkLXeBZV7rehh2wv+0/bH8XTcgP4f3mzJnraRGujrmw8LoaftihPt8Vcx1tLt/sYtW8ufP9t6KiIluzdo2Vx/ppn7697aBDDoy9FHayolWr/JgIDvPnLbSVy1fa+vXrvQ76D+jvaSDYML8WIeGS1ROCBGLe/Fh+CEGHsEP4O+b64nfmwBoz+kOb+tl0F3bwBps5Y5YvFV5huS7YIbwtXLDIBR3qj3CMeIPhzUZdritd5+VetnS5X8c519hn/foNPucYYhUvupzTc2Jtgyg0Y9pM+2LpFzZo8CA74qjDjbnFKC+iC/sgDHLfoTwhv71jbey0Mk+fEIwjjjrC+oe2bNPa58tCsMRjDo8mjoswlZg225bH2iJd2RB8ENWYf2rD+o32eez7pE+n2KZY3Rw58khPizSr2ob+Qf1+4ULWfO9DzK22PPZ/VnaW5cXqZ/my5Xu1ZzooL3W9LlZePA0pw+yZn3v6eXm9bETs2Jwf48d94mEPt8fqYP26DbG8zvb2RThEqM3OydrDU0w0Dbi/cZ/EQzErK9u6ddX9raUSRGeul20fesS/R9l1y83xb0IIIYRoarR+8OH4t920vv2W+Le6g/eluiAIm7zjVoUEKyGEELVGgpVoSCRYiT1pZd26d7W+/fpaVlZPN/63ah1b5xMLd7XOXTq7F0vvPoUeBo7fCRPYOrbNgIH7uWCU2yu2PvZ/p86dPTxgSKdjh47Wo2d3n7sIAz4iDkLU4CGDXSApLChwTx36DwIQHksIAQcdfKCn26NnD08HwQoPLwSSbbHtAoSmax+7tnG8HTt22bo16+zLXV9amzZtrU3bNp6vYQfubwccOMwGDhpo+bE08CBDXGIuJcQy9h120DAbFPu90MtY4WHEPESFvQvce6eCPeuJ4/oEz7H8UU8IR527dLGe2T2tX79+sf06eV5Ih4U64CWDBbEO0QfRijrjJYb1eJeRVwRAwiZS7g6xYyDyxA7j51qv/F7+P/uyXcVk0109zdA2HGv//YfakSOOcG8g1iPC8J0ysb+XKLY+5BdPLWjTuo0fs9+Afh7CL4TUY1v2y8rJciGMtkPchMS0KQveWOnKxjUEcY380xcQp7rF2uWIIw+3Qw492EP94dlU1TZen7nZfj3Dm4o+xLxnB8b60IEHHeChIr2ckfYM84qN/3hCpYgYlpUrVvrcXL3y8mJ1mhWry3Ye2pH+jbB31MijrE/fPp5/PMjoS7SLz6MWywtL+9g+1AdtxP+iaSHBSgQkWAkhhBDNl+YsWLUqLy9XrAchhBC1oq5uYOkIYZ2EmDdvns2ePduN1EzwWhMw3ixcvMCKild6ODY8cETLwA318WsWD82IAVVBf0EcqvDUqRA5EvFtdux0YSCdkZ9js+2GDRttyqQp7uVFX+7fr7/t2B7bP5afTp07Wo+sHpadm+XCUTIIr7dz104XaFq3qVmUb+qCcnHMVOWqikzqk/KSX+ovXV5r0jb1Sbr84DX1+qtvuJB0znlnV7Z5dLtMtonibUo/i9VRuvZYvbrEpk6ZWhmaMkpuTo4ddsRwFyahsdWpqH/oR3gNFq1cZYMGDrbCAt3fWhKc8+GTa2+4BnQcdbKvj7Jj0tj4NyGEEEI0NdqOOD7+bTdtZ06Kf6s7GHRXF/hgyRifffaZf6ZDc1gJIYQQQogWAwZ7wpyxZGq8R2hh+3Qigm8T91JJB7+7p09WTxt+2HAbPny4derQ2bZu2Rb7rY1l5fS03v0KraB3XkqxChA1yFNNxSqg/OSnpmIVZFKf1A1eU1XltSZtU59kmp9MtstkG2/TWB+qqj3wRjvplBPtqmuu3Gs58+wzrHfv3QJFJscVQgghhBBCiMaCBCshhBBCCCEaEMIHlq5ZZ+vXbrAunbt6aEvmacrNy7XCPvkeSrAq4UvsWwjnR1g/5qFK1VaZbFMTEAARPRmlmLi079C+ViKmEEIIIYQQQuxL9DYjhBBCCCFEA7F1y1ZbvWqNFa1YZevXbfB5orp07WL5hXmWV9jL59xifi3RuGFurMOPPNwOOPCAlGJUJtsIIYQQQgghhNiNBCshhBBCCCHqGeaVKdtYbqtWFltx0WrbVL7ZQ7/1zOphhX3zLTcvxzp0aB/fWjR2Qqi9dEJUJtsIIYQQovZs3brVHnvsMXvggQds48aN8bUCxo0bZz//+c9tzpw58TU1h3nxNm3a5HXMkuncNmwX9qGtagtphPTIT5i/Lx3M51fdfZoC0XKVlZX5/IWZEG2TmtSHz1Fbg2PV1XxIyUjsn2Ee1/qAslPftTlWdeqwpdGqvLy8eZyhQggh9hn1+SAQ6N69e/ybaOnMmzfPZs+ebf369bP99tsvvrZ68GC4cPECKypeaUOGDrE+fTQpvag/tm/fYRvWbbC1JaW2cUOZXzMRp7JysywntnTq3MnDvAkhRG1BHJ8/b74VrVxlgwYOtsIC3d9aEsHgyCfPOnxyz+k46mRfH2XHpLHxb0I0PBh6n3zySdu2bZtdc801lpWVFf9lTxYsWGAvvPCCP/NfcsklKed5RMB45plnbMOGDXb99ddbt27d4r80LThfKceKFSvsiiuusP79+8d/2ZNM6w8QrD766CO7+OKLbdiwYfG11YNryeLFi+3dd9+1tWvXxtdWDM7Jz8+3888/33JycuJrd7Nu3Tp75ZVXbOXKlZXXJ555hwwZYuecc46HM64Oq1evttdff91WrVpVmR4QhvmUU06xgw46yPMUhTr94IMP7LPPPrOdO3fG15plZ2fbeeedt8fcn8lg/1mzZtnEiROttLTUr63VqcvQhzl2VftV51j0+dGjR9uMGTP2KFeHDh1s1KhRdvTRRyd9v0jWJpBpfaxfv97zN3PmTG/DVOVJ1WeAY5155pk2YMCA+JrklJSU2Mcff2yLFi1yoatPnz5+XlDGRDhnXnvttT2OxfXi8MMPt5NPPjnpADLOI4RuypSKxGPSRpR/woQJe4ivHOvQQw/1fkjo7lTQpsuWLfNy0RbXXnttja9XbUccH/+2m7YzJ8W/1R11JTKG851zsSr0ZiyEEEIIIUQ9sXXrNispXmMrl6+KvZSst527dnrYv7zCPA8DSDhAiVVCCCGEaEkgMPTt29cNxvPnz4+v3RvEkB49etjy5cttzZo18bWpwfCbzljc2MGoPnjw4ErhIiooRMm0/gIY22sj4n3++ef23HPPuYiCoHHcccfZEUcc4W1TVFRk//jHP1xMioIx/umnn3YhoWvXri4mHXDAAd4+c+fOteeff75ahnD6wBNPPOHH47gcn3z06tXLvWoQKz755JP41hUgDrz11ls2adIkF7IQyg455BAX1xA2EAdJNxXk/eGHH7Y33njD+x95px7xoM+EzZs3u1gYFZRSUZ1jUW+0x9SpU/13ynTSSSfZoEGDvO98+OGH9t577+3VfxLbZOTIkXbCCSfsUR/UbyIIo4gMDz74oP3xj3+0yZMn7yHWJCPaZ2gjRDSOx9y94VipvP4oA0LXI4884gNVOT757dy5816CJNCGpEe6lIX6oK3ZlranD9AXEqF+kq1PRehP1C9tuv/++3u9I9px7lJHL7/8suc/EUSxd955x373u9+52LxkyZJqHbul0eaee+75Ufy7EEIIUSMa4kabbBSNaJnwIMpoK15UeOCtCTyclq4rtbLyMsvOybbu3ZvmKEzReGFuKsL+rS4usTXFa2zL5i3Wtk3bWL/tbnkFuZaVkxV7Ec3sZVcIITKF+xv3ybKycsvKyrZuXXV/a6kEQyXP6W0fesS/R9l1y83xb0I0PBiSGW2PURuxIRh8E8FoT7gtjLu8D6aKroDxGIGHdBFGmnI4XozyRJRAXMDo3qlTp/gvu8m0/uCLL75wgQIjfk1EKwQHPHK2b99uZ599tp1xxhnuGYOwhmjE76TPtYZ15I32eP/9923p0qUeFQMvMNqFfLIsXLjQvaQQW/i9KhBoXn31Va8TPIcuvfRSrxs80A477DC/3lFO8kL6wXaAIIKHGf9feeWVLpoMHTrUvW7wxiPf3DOT1R8iyLPPPuuiIP2OY5566qkuuqTzaAuQp7Fjx7o4F0Cwy83Njf+3m+oei3Tp74iHN9xwgx144IEuYFLHtA3l5n0ZAQtxM4Cgh8AZ2oS64Hu0PhDZWB8G1CFgPfroo54mIhXv4LQxokyq8kT7zOmnn+6eWJRr4MCB3l78jsBJeRPrnn705ptvuhjH+U89XHjhhXbMMcd4ORO9LMkTYiVp0sdpZ4QktqV/cC7R1xCyEvNK20+bNs3X33zzze6Jdfzxx++xDB8+vDJ/eJXRn6gDPKOOPPJIr3fqgYW6LS4utsLCQvciC4wfP97FO7zagDZFhKP/k35NbV2tH3w4/m03rW+/Jf6t7kgmwNWEUI/JRNFENJxTCCGEEEKIOmTnjp22ft0GK1q+yr2r8LJq36G95eZlW2HfAsvK7hl7QUluVBBCCCGEaAngdZGXl+eGdZZUYHzGoIv4UVehqRozDMgL3lPpvH8yrb/agrcPecGoj5CBWBFA1Dj44INdREAUCF43iB9BZCREWjT0H+U77bTTfB+8ZxDcqgIRAIGDaQJGjBixR3QCviO48Ft5eXmlpxeiGQIDn0cddZSHdguwD54xiAoYzxPrGQM9wgT9DRGEkHDUd7TsVYH4g+hCedMJXNU9FkIHaQNiR2JYRbwSEUxILyoM8D8h+qh3RL/oftQHdcQ60qb9AghviKaIZ9/61rfsxhtvTBr+MQriIUJzQUHBXmEaES1Ii76ByBQ9FhD+j35BXqgLRCGEq1TQ71ho/xNPPHGPvkGbH3vssd4HEKYShRcENX4j/eh+qaBPUx9ckxLrgHZGlCM9rlVR2Ic2Pffcc+273/2uh9BMFEjFnrRIwWrZyk32j5eW2j3/M9Wu/844u+CrH/jC93//78/8N7YRQgghhBCiOmzbtt3WlKy1lcuLrHTtOhevOnfpZHkFvTwEYNduXax1G40ZE0IIIUTLBoM1hl+MxszDg1E3GRh6McIjWqQScDDC402CcTx4K5Ae2z/11FMehuuXv/ylhzRjPqNU4czw7sCw/ec//9m3//3vf++ePRjVp0yZ4p4cwUsCEAEIXcbCdwzaf//73+1Xv/qV3XvvvX7sxFB5GM2ZvyakRXi1P/zhD/brX//aPY8w7lMODOjUSyrvhkzrD1ELISQqmmDgx/ME8aMq2O+CCy5w75Nk4ekQMzC+IzyRF0CIwFMnlVhDexLiDSEMr6mqIC3qIVXIR9bxG2JByANtTNrkDQEwEY6PsMM+QQAK0I6IDuQTD59MxIwo9AU8zMgzwhhec6mo7rH4HcEJryM8lhKhvEGMon4D1AVh6cgLfSIRBB88h6hr2i9Avr7xjW943vg9E8JxaZNwPkah7mkz6j7av/nO/FCchxwvKjKmgvOL/bhOJKtnPMioD4RXyhYl9Cu80NKJYkCeOI+odz6TETwYEeui0F433XSTz3FV1XFEBS3qbRkR6ue/n2Xf+pcJ9uhTC23KjFJbu25brNMRs/JL//7ZzHX+G9uwrYQrIYQQQgiRCVu3bLWSVSVWtKLYNm4os1atW1mPnt2toHe+9crPsQ4dFdpUCCGEECJAWDeMvHh+RI3rUTDAYyDGYJxqXie2wZOCEHXANoQ/Y84j0kbEwGiNwZ71f/3rX/cSSjBcE8YszCEUvEI45l/+8heftwZhKOoRQrqEfCM0H/PTIFAhfpBW8GgJ8y4FMNIjTJEWoc8Qu0iTtILYgqEeUQFhKVHwipJJ/bENYdmCiIEYQXgy5pBCOKsKPEkIr4b3SGI4NiDvCF8IHsEYTzkoJ+2SzFMI4QvRAlEp0bifDMLG3X333XbdddclFUA4PukgWIRQbByf9eQ5mdAGQUwjNFwUQruxP8IhghztSfqIcqmEwQC/I0IiRiJQJBOVolT3WNQpoRdpkyCQRAl1Sr1HvYCCoEgdJasP0uX4od4CCGTJ2jAdzC1Ge1100UXxNXtCX+UY9IGoCEbfxFuQdqHeKD/5pjzUSzKC+EyZkvVPxCh+43iJ50gQ5kI9khZeelxrEqEeCLdIvSOOJUJeuW5AYujBZPkS6WkxgtUb76+0b//rRBv9cXF8TdWwLfuwrxBCCCGEEMngpaa8bJOtWllsxatKfL6qdu3bWU5uPARgDiEANV+VEEIIIUQURA68XDBI42mSCgQcjNvLli3LyCMHzyrEGJ6/LrvsMrvrrrvs9ttvt1tuucXn/cFQjVAUNYITvo15ehBEMLTfeeedvs9tt93mHjoIUKnAyI1wxfxO//zP/+zGeubEwXDNfp999llS8QHjPGIc2956660uRADiEvPvYECPzoGUSKb1FwVRiQURgv1rA0LPmDFj/Ht0Lh4M9KRP/SYrd12DYEcd4A0URCiOj8iAABOEwEygzhEJEXBoB8S93/zmN/bAAw/YfffdZ/fff7+HGkxVLkTGTz/91POBiJqO2h4rEd5JODaiKYInfShQlYgY8gCJAl5dQlnCfFh4PyGSBRB8EKioO0Rdyk89UB/UC/WTKDoFj7RQvuoQzn9CGOJN+dvf/tY/8ZDkWInhClNBmRC2OVe5TjGflagdLUKwIsTfvX+e415UgWNH5Nq/3HqgPfzrY+zlR0+yV/56sn+/+7aD/LcA+7AvaQghhBBCCBFlR3y+KkIAlhSvtW1bt1nHTh0sLz/X8nsTArCrRtUJIYQQQiSBZyS8UDA6pwt/R2g5PC4QJfBIqQqELQzYCE3sFwz0CDSEaMM4T4jBECIMI3kQlfAOweAcDOF4aDD3TLIwagHSP/PMM93DK+yHdwvzAgGG+KjXSoDfzznnHN8WLw/yFcCTAwGB0H2pvKcyrb8olOemm26yO+64o9IjLVMQC9966y0PZ/j444+75xlea8ccc4zPZRXAawYhAuEj2fxatE1ieLaaQp6YA4q6GzVqVGUdUncIH9QJ8yIlQlsnEyRoJ/oZ4gcecAgneNTgAUU/RJx8/fXXPURkIhwLTzzKd/zxxyf1gIpSm2MFQqjKl156yf74xz/a2LFjvdznnXfeHmJQYwExDXEYYYf+HxXPglBGe1Ef1AvzphHuk+0495955hmvlwDnJecB53Oy9qSf0R7JCMfDAxIBjfaizhD+ONY//vGPlAI5v1PveGU+9NBD/h3BlmtF8PITNafZC1Z4RxHiLzBkYDf7n3sOsx/cdYideny+FfTqGOvYrWMX91b+/ZTj8vw3tmHbAGnI06r28BDw17/+1V2lhRBCCCGaMrxkrlm91lYuK7J1a9f7yw0CFXNV9SrIjb3wdIy9XMU3FkIIIYQQe4H3FJ5IGJxTeXZgrMaIjxixYMGCKoWZMJcN6WGHioLXyfe//333aAqCAkZpRCGM6ITQSwSDeDpveTyWEsOAAeIDRuwQNi8RvKOiBvsoiFjUDYIQXjupyKT+EkHgqslcOhj/Z8+e7eIYoiCCAl5NUYEPMNgjFiIUIOBEvdOoh/feey/jvKaDdBF0qCPENzx2AvQV+gz1i0ASnf8MsYp1eC8lQpqUi20Q96699lr72te+5vN4MZcTQhS/EVoyOtcTkCbeXswtRhjDqqjNsQJ4B9EehKVE/KLciIfB06wxwXmGsEMfOPHEE/cSdsg/UObDDz/cvRsvvfRSu+KKK1xkpUz0c7zIAnhMIlqxL16V0XB+nNMIrNH+FwUhjP1POeUU96jkmvDd737Xrr/+er82UOejR4/2NkqEfFDveFaxHf0McY30RO1p1oIV80/d95fdrrN4Tv3mx0fa8AOrPmnZhm2j3lakVddzWnFh+fGPf+wnx4gRI+xb3/qWTwCZ7GRoDnBRIh7w9OnT42uEEEIIIZoeW7ZstdWr1tiqlausbGO5D4Ai9F/vvgWW0yu7RkYAIYQQQoiWBp4wzI+EURkxJBUYpRGAmBsoOidUMgitx/YYkh9++GEXNfBewYsiGRi7+Q0PrCB27WsQyRA9MMBjQ0tlJ8y0/uoCxKkQvvDGG2/0MIAY7v/2t7+5YBIg7yNHjvS8YffEEwtPFLyA/vSnP7l3Sm2flREtCetI+ghVeHklin+IjyGcI94yhHlDMHnkkUd8IH2yPJAudU0ZzjrrrD0ECEQ5bLcFBQXeZ+hTAQQ4hCX6EGJMVMBLRU2PFYX9aA8WhC682xAJn3322ZRCzb6AvFD3nJMIalGPvEA4P2nPU089tdJbDhC3CLFIG9N/ghBNH8NTizpEQKKvcRzmaPvzn//s3o38lgzCcSJOHX300Xu0F+1AvbIfwmwycZW2CfV++eWX+z4Iln//+99TemWJzGnWgtXjzy32kH6At9Q9dxwc64AVF6+t23bZc699Yd/7wSS7+KYxvvCddfwGbMs+wdOKtEizruBCdtVVV7nbMSfIv//7v/uFBbfc//u//9trFIgQQgghhNi3YDQo31huq1YU2+oi5qvaah06tLfcvFwr7JNv3Xt23+PlSgghhBBCpCeEv4saohPhdzx58NpJ5hkTBW+Va665xg477DAXBRB8CCV277332qOPPurzPeHFkUgqb6d9BUIUXiWpjOaBTOqvLsCojxca3icIgoQzxLCP6EJYvmiYPzy/8IwhtB2CC54oiFp4nF1yySXuFcb3msyjxfM4njP0AwQpvHAofyKs4zeEK/JI/SBq4PF28skne/+AZN5xCJeUMRHS5JgQhFPygycOoeoIKUmZq0N1jpUI29AeLHiU4aWFsLh06dJ6FzAzBbEKAYl+jFBFn0kn6OEFmex9ij7FuU09R8P/cV248MILvS4QqGhj2hovRdqf+kWcpO9mSvBcpE/jwZcIfTfUOwL51Vdf7f2M40c9wETNaLaCFZ5Qoz8ujv9n9o1rB1WKVcVrtth3/n2iPfT4Apu/aGPsZrfLF76zjt/YBtiHfQOkWRdeVowA+NnPfuaeVY899pi7eqLI/vznP7f//u//diVcYfOEEEIIIRoPGDzWla63FcuLPBTg9h3brXOX2AtmYV5s6eXfw/OmEEIIIYTIDLwn8CTBMwEPqlQg4GB8xqaWal6nAAbls88+2+666y4fJI7HD4PECa/31FNPefiwZKJVYwIDO94miFCEmktFpvVXH9Am5BNRKtGzBK+Tb37zm/ad73zHPVH4xEMLEQ7Bgf1ok+pAm40fP97FqjBXE0JFKvjtsssus+9973ueB8LMEfbtyCOPtNWrV7sXDXUXYHvCPyKMRudKikLfguD1NnfuXJ93CcET76YHHnigcsHDL4hNiGysQ7whAlVNjlUVzMGEgEI9cZ4EWI8IxPtMsn5PfkIeEHrqCsQ8QkAGT7jTTz895eA+xB9IFf6Q/ahj8h8tA+sIw0j/uv32272dQ2g/QHSiTNWZ04s0OR7HyaTuEeAQDIFrTCpvTpEZzVawGjtx96R+hPULYQDxnrrnv6fa8qLUk/vxG9sETyv2jYYGjKZdU5gEj4s5LrRRd2NOCE5eRim8/PLLvg1wY2ISNzr9pEmT7A9/+IP9/ve/dy8tTv6q4ObGaBL2YTQJsVsRxF544QW/MLLwnYWLCNuE34CbDu6z7M+xyUP0uDXJXzRN3IdRoYUQQgghGiPbtm6zkmLmq1pl60sZ0fel9ejZw72qcvNyYi+TCgEohBBCCFETMAxj7MV+lC78XZgbCYN2OgEnCoZkhBNCjCGenHnmmb6O8F1BYAnGfDxBMhUGGgo8UhA18E5KFeIt0/qrCXiqEGJtypQp8TXJ4ZjBhhgFOyd2T8QIPvmfNBEc8SqqjoiAeICdEW8uvJgY+J+pN1PwiEEko/2xQWIbxWOHUJMBtmOhLKm81YIYEcQkvN8oP/VPubDlRpfQHggn/E+6lKUmx6IPEAoR8StRIAwE7yXSDcemnvEyQpSKesIFyDuiFX2pOm2SDtJ88803q/SECwRvO/KIsJZIENsQGclnIpSb9qSdOQ7b4tnHfhw/ug/tgAcaNnC2S0Z0PWkgcnMupBKF6duQShQUmdNsBaupM3e7yp44ardb5avvLE8rVgXYhm0DJxy9++I1bVZypTdTuNhMmzbNY2UG184oXEBwS8VFGbUf+PzNb37jN9d77rnHY5dygWJkAup8upsR+6Iw47k1Z84cF5SYxO8Xv/iFX+Q5kVj4/rvf/c6uu+46j/nJzYj13Axw133yySf94kXeE49b3fyFPCDckSf2/Zd/+Ze0Ls5CCCGEEPuCLZu3WPGqElu1stjKy8qtTds2Pk8V81VlZfe0du0UAlAIIYQQojaE8HcrVqzYI9xXFAzVhx56qBumsSUls4VhcyOSERGMovMqAQZlwnYhnGDfCgIQx2UdAkAqY/S+MkDj/VNYWOh2N+aLSkUm9VcTSkpKPMQa9Y2NMJFgnMeWmYnQQRkImYYIh+0zGPkzgfbEjsix8KxCwKwJtD3p0P6Ek4uGiqMMhIOjb+E5ldjulJfB+kC7AGEA77777qQL076QHlx88cW+DrsrAlRNjsU6BD+EyVQD/4PIRbnC/E2IOHizIQYh1CVCO2OT5TygH9UWyoInHH0HUbEqTzjAA4tt8EhLZh9mHWIbZWGpCmzT9FvqgXaOgmCF6Ieglsy7jTCAoT7oZ4hviOSUh9CGyQj1TrsmE9RE5jRbwWrp8t3K9AFDd8dDjYYJrIrotgfuv9tFdcmy5G6amcIFEQWXi01QyBMZMGCA32QSLz6MCGGSQm68Tz/9tLs54g3FhSoZXCBwNUX8Yjvi9bL88Y9/THrycOL/9Kc/dXfNH//4x77/E0884RPQccPHlRqPKMSlF1980dONkmn+eAhgnq6QHxZOehYhhBBCiMbArp27bOOGMitivqpVJbZ1y1br0LGD9crPtfzCPOvarYu1btNsH6eFEEIIIRoMPCMY1I2HCgb5VDA/D4Z3jO7JDPbY2dgGJk+evJdXEoZ51iF6BAM6Bu1Bgwa5cIA9LOq5gl2MueeDcNDQYLsjxBtCBd4iiaJGINP6A8oyb948F26qgnqhnqhvjP/R42PEx+uEY1Ln6YQOjsXAeAbDs/2oUaNcoIhCesy9xML3KNhR3377bRe68KwKIlB1COlj56T8HP+YY47ZQzTjO0Ia/QjPoKjoSdknTJjgeUGEwXZbG2pyLNqZ7/RVHAwS+zfthA0WoQpxNkAbhlCBOBFERRr6FucKHlkhxGNt4Bj0VfoGeb/yyisz8oQjbB95pEw4QUTLxjnJuUm5hw4dmlb8wrY9ZswYt1tTNmzVieImx2KOKrw18baM9jf2QWzj+KFfc70I9cn1IFFQI3+0B21KGWorWGXq2dhcaXPPPff8KP69WfHwkwtjJ0jF929eN7jy4vOHv82PdcLkF/dENpbvsGsuqbggdOrY2p54oUKcIVTgtZfu599rAh3+lVde8QsMKnwyEKs4sfBs4iIc/ifmKpPPASNKEL2Y2A9lecSIEb4+CqMqCM/HBZi0glsoai8XQ+DEBdLhYs0EfZyIwAWOPBKmEFUZqEtU47///e8+UV518kfZX331VTv22GPtggsuqGwXLgaEKMTVmckihRBNi8SHyfoglcAvWh48HPKiyYtqJg++yeAhunRdqZWVl1l2TrZ17171CC3RstixfYetX7fBiotKfN6qnTt2VsxXVZBrub1yXLgSQojGBvc37pNlZeWWlZVt3brq/tZSoS8Az+ltH3rEv0fZdcvN8W9CNA6wD2GExmhPeLRhw4YlNfpir8I7ggHUvCNiYE8E4zTeFXjzMDAaj40FCxa4AMDCecGcVhi+OS4LBmz2wYDNPnhaMS8RnjhBSOC8wlMDQzeEKEQY0bFnJXp9IMxge8O2Nnz4cM8v22LMpwzRtNKBPQ6BBaM4RvNknkyZ1h/lY4A5RnrKk6z+onDsIPSQBzyBqBvEqw8++MDXsw3zhSXOR4Uo8tRTT/l2H330kdcvaWGjxNYYbJQB6ps5/al/PMuCyEA9Pvfcc5UiC+ngpZVsoT2wU0ZFF4QuPGkQMRBzSAf754UXXlhp64zCvtEyky+8akKUKPJ9xhlnJI2alUhV7V3dY9HOpBH6N+JJ6Ku0KfthY6U/HnXUUb59gNCH2G9ZqIcgXFIvHBNhhnZM1r8CmfRf0sXuHUJEsn2ytmKhjAg8nNeUlTCRlI00wrnL/uSRfkC7nXbaaXv1bbZn2hn6GRHEKA/pEQKUuojWA7A/53yYf4xjUI+cPwhjfOd8oj6CzYHtqTuORV3zPXhdhfxh6z/xxBPTClbJrguJkA/qh3rhXE5G6wcfjn/bTevbb4l/qzvoT3VBqJMwp1s6WsSQ0PCgVhsSO3ZdwEle27xxsiDwYLgjvUQYbcKJxEUkuIGmg3JGy8rJTQxRTsL777/fvv71r9s111xj//mf/xnfIj2p8kde6qNOhRBCCCFqi89XtXqNrVxeZBvWbYg9TJr16NnN56vK6ZVj7TVflRBCCCFEnYNBHYM1NiSWVOy///5u5MXIH/XCCGBgxnbFvE78jvEXozLeJxjjmTc+0bMmeIIw3xVCFIZ89kH8wUCOgLKvIG/BeypZOLdAJvWHAZyFsoc5g9LBdgw6Z/4hBClCE1IvGPgZJI+A9tWvftXrLRGEGIQNBr1TBkRCphLBoI+9MRHEG9qV/EU9aLCdkhZgPCfNVAt1FLYN4HHDetJGpLz66qvtqquuSulJFMpMGDv6C3VOmSk7os5ll13mdta6oCbHoi5vuOEGn2qG+gh9FaGHeqN/I7Qk1jG/IdLRZvRxzgvakfB39G+ORdq1hfYK9m7Ov2TtFF2i7cXxOXfJI+1GHikf5cQbjTxG+0aANGhjRDJs0SeddJJH/UIQip7nURA2ORZlpw6oC47HOc86QjdGPfk4LtcIrh2IL9Q39U7+gH6N91+y/NWUZGJWS6BVeXl57dWcRsj13xlna9dVuLY+/OtjrKBXRWf53g8m2fxFG/17VQwZ2M3u/UmF11LR6i329bvG+/fsnu3t7/cl94zKBE64H/7wh37yEnYvmZr/8ssv229/+1sP3YfSPHHiRLvpppt8biku8IGQFicKn4kdmZPn29/+tp+k3FwCYT8gDxD9P6jp5BHPqZ/97Gd+UWAEBDcOFGjC/oX8ZJo//r/tttt8G8ILBlLlUwjRNKirERfpyORhWrQMeCBkglRGV1U1IjAVPNAuXLzAiopX2pChQ2IPonu/YImWB+9VzFe1ZvVaW1Oy1kMAEnakZ3YPn7OqS9fOGQ0AEkKIfQWhTOfPm29FK1fZoIGDrbBA97eWRDAQ8smzDp88p3ccdbKvj7Jj0tj4NyEaF9iX3n//fTc0Y3RPZmymXz/zzDNu3CeaEHazVHAuYIDmfOA5DntXKgN2AIEFg37Ynu/heMxDlMrjoT7BQ+yFF15wA/oVV1yR0oMjk/qjTqhD7HvVBQEieM5QN6nyUVOCbaGu060p9BtsmQzC572gLsWIRGpyrJr0b6CeORbQDxqjMBLySHmwnScTOeuKcM5DJv2aeidvfJIv9qmr/NGWTLeD9xniI+dyMtqOOD7+bTdtZ06Kf6s7kg0KqAmhP+MVWBXN1sNqQN8u8W9ms+euj38zO+XYvPi3qolu+/m83RMW9u+zt8BUHejEKPoY25LF2+XChEIbdX9NBScTboqMokh2cSG2KUbedCNT0sHN+OGHH7bvfOc79q//+q+uUKMkZxq2r6r8CSGEEEI0Bnbu3GVlG8usaGWxrS6umK8KT6rcvBwr6J1n3brvnrRYCCGEEELUD4ceeqhddNFFbjfDGJwMjMlMXYFXSrJB4FEwIuNJQ7g+ts3EmI/9qjrbNwSEGkMsO+KIIypFnWRkUn/USU3EKsDoTN2w1IeoRJqNRayCIJZQ3voUq6Amx6pJ/wbqOLRjY7XXhjxSvroSg1IRznmWTPof+cHmzvZ81mX+CP1JpDPSZpBuS6TZClbDD9o90d9HE1bHv5mdf0Yf61OQOhZngG3YNvDhJ8Xxb2aHHZxeRMqEk08+2RVwFNPEUH4oqMRXZW6pRFdMXCWjEGeT7YnHmQzcRxGXEMBwjQyg1maikCI4sR3pRC96ifkIVDd/QgghhBD7Gl7615eu9xCAa0vW+qjRTp07Wl5BL5+zqlPnzEYqCiGEEEKI2oGhnhBoeE2lGyzEwGjsXcyd3hLAiE6YNLy70okZmdafEKJxQlhC5lk7+uij3R7fEmm2gtXxI3dP+vbxpBKbNrvUv3do39p++v8OSyta8RvbsC2wL2kEomnXFEY6fO9737NHHnnEw+0xKSCeSLgY33nnnT5yghERicaR//mf/7HRo0e72ooL3f/+7/96zFIm0ksGIyZIB5fgX/ziFz4ZHAvh/JhEriqI+0m4pccff9w++eQTz+Njjz1m//Ef/xHfYk+qmz8hhBBCiH3J9m3bbW1Jqa1cscrWr9tgX+760rp162r5vfOtV16OdegoD3EhhBBCCCGEEPUPkc2YNufII4+Mr2l5NFvBqm9h5z1C+j30+ELbtasinnNeTke772cj7RvXDvZ5qtq1a+0L31nHb2wD7MO+AdIk7dqCEIWQ9Ktf/comT55s1157rZ155pn23//93+7W/Otf/9pHiyTC5G7ME3XCCSfY9ddf74LU//f//X9pQwciFv3gBz9wIemCCy7wCeA4PvNRVQUTKv77v/+7H+fmm2/2PL711lsuWBGycNmyZfEtK6hJ/oQQQggh9gVbt26zkuI1VrSi2Mo3llub1m0sK7uHFfYpsOycLGvXvl18SyGEEEII0VLBhhZCtTG3kBBC1BdcbwiDmOjE0pJoVV5eXqHiNEOWrdxk3/7XiZVC1bEjcu2eOw621q0za3D2++lvZ1Z6V7HfH/53ZJ0IVokQHpDwM3TIZC67eEjddNNNLgYhQIXwftXpwIQeZD9usoS++eEPf+jrf/zjH/u8WukghGC6Y9ZF/oQQTZd0MbTrCubjEwLmzZvn80ASzxkv4JpAPPeFixdYUfFKGzJ0iPXpo0npWxpbNm9xsWrN6rUuXLVv386ycrJ8zirCAdZ3nHQhhKgPdu3cZfPnzbeilats0MDBVlig+1tLgvf28MmzDp88p3ccdbKvj7Jj0tj4NyGEEEI0NdqOOD7+bTdtZ06Kf6s7MplSKBNCKFMislVFs34TR1j6zk37x/+rCA145w8nV4YHTAfbsG00FCBp1YdYBYhIeDNlEl8WAShMBJeJGLRgwQJ78803fVuOwWiQ5cuXewfBvbAqsQqqc8zq5k8IIYQQoiFwA97OXVZetslWrSy21cVrXKwi7F+v/FzLL8yzLl07S6wSQgghhBBCCCH2Ac3+bfycUwvta18ZFP/PbP6ijfZvP51qP/n1DBs9rtiKVm9xT6qdO3f59/fHrvLf2IZtA6RBWk2RkpISDzWIB9S9995rP/nJT+yrX/2qj0on/KAQQgghRHOGUearV5fYnNlzbdbM2bZg3kL3rNqxfYd17tLJ8gt7uWDVsZPmqxJCCCGEEEIIIfYVzTokYJQ33l9p9/1lrotT1YEwgHhW7WuxavHixfbqq6/a+eefX6PwR+vWrbPXX3/dxowZYx06dLBzzz3XTj755Ep3vNpS2/wJIZo2CgkoGhKFBBTVZfu27TZ/3gJbtnS5bYt9/zL2PJidnWU5uTmWm5dtPXr2sLbt2sa3FkKIpotCArZsFBJQCCGEaBk055CALUawAua0evy5xTb64+L4mvSccmyeXXvZfvUWBlAIIZoLEqxEQyLBSmQK4lTJ6hKfW7OkuMTWrV1v7dt38IduPKqGHbi/deuefP5QIYRoikiwatlIsBJCCCFaBprDqpmA8HT37QfZg/93tIf4O/zgnpbds717UbHw/YhDsvw3tmFbiVVCCCGEEE0PjHRr16y1FctX2rIly61oRbGtW7feNm7caG3btbGe2T0kVgkhhBBCCCGEEI2IFuVhJYQQon6Qh5VoSORhJdIRRpPjZbBk8VIrWrHKv69Zs9bD/hUU5lt2bpbl5fXyUIBCCNGckIdVy0YeVqKlsnXrVnvmmWdsw4YNdv3111u3bt3iv4hx48bZRx99ZBdffLENGzYsvlYI0dSRh5UQQgghhBBNgI0bNtqqolW2eNESKy4qttK166y8fJN169bVevcptAMOGmZD9x8isUoIIYQQYh9BuOaHHnrI7r//fistLY2v3ZsFCxbYL3/5S3v22Wdt586d8bXNm4kTJ9rPf/5ze//99+Nr9gYh+sknn7Rf/epXtnTp0vhaIYRoHkiwEkIIIYQQzQbC/q1cscqKi1Zb8aoS27Fzh3Xs1MF6FfSyPv0KrVPnipFdQgghhBBi39ClSxfr27evC1fz58+Pr92b/Px869Gjhy1fvtzWrFkTX5saPKvat28f/69pMmDAAPdEQKyjfpLRtm1bGzx4sAtXs2bNqvSuTEWHDh3kdSaEaDJIsBJCCCGEEE2etWtLbfnyFbZ1y1bbuH5j7HObde7cybKyetrAwfvZfgP7W05uTpM3YgghhBBCNHVatWplhxxyiLVr184+//zzlCGnunbtakOHDvXfCQleFaTb1MnJybH+/fu759nixYvja/dmyJAhLkItWrTI1q1bF1+bmuZQN0KIloEEKyGEEEII0aTZtm2brS4usTmz5trK5UW2c8cuH5H6ZewvNy/H8vJ7WVZ2lo8uFUIIIYQQ+55evXpZXl6elZSU+JKK/fff35/hCH1XV3OpNGbatGljBx54oH/H+yxVKMSePXtWeqnhgSaEEM2FNvfcc8+P4t+FEEKIGsGkzvWNDM0isHbtWn+pJTwIL2o1gbAZpetKray8zLJzsq17d4XIaMps2bzF1q/bYOtK18c+11vHTh2toDDfcnvl+Gf3Ht01qlQI0SLg/sZ9sqys3LKysq1bV93fWiohRBjP6W0fesS/R9l1y83xb0LsGwhrt3XrVg99x3MaIe6SPa916tTJxaqioiLr06ePZWdnx3/Zk82bN1thYaGLOIDYM378eE+TY73zzjv29ttv24cffujeWqxDNAPSf+WVV2z06NE2duxYzxPvGizJ8sS7yLvvvutpkt7UqVN9HSEMU723Er5vxowZfhzmp5oyZYqtWrXKPao6d+4c36qCEBKQNKkXQigmEso1Z84cF/IOOOAAa916b78E6pg8IfyxPeCRhfcWx8XLTQjR9Gj94MPxb7tpffst8W91B9euuiBcf7iWV4UEKyGEELVGgpVoSCRYiSjbt++wFctXWnFRibVv196vFZ27drL9Bg2w/QYOsM5dOic1NAghRHNEgpUISLASTQEEk3nz5tn69etdcEn2zhdEGLajXyO8JD7bsU2/fv1csAoQavDTTz91Ieujjz6ylStXxp4bt3sarEMQ4hPj6RtvvGEbN250wyznDN8Rtbp37+4iVIB9P/nkE3vppZds9erV7g1Fnjdt2uTiE4IUghn7RcEL6plnnnGRCnEJQQohqbi42KZPnx67XmdZbm5ufGvzENbkYcmSJR4S4/X7AAD/9ElEQVQWkbIlg/pjG96NBg4cmHSeKgS+QYMGVRqLOf7zzz9vkyZNcuGKkIvJhC4hROOmOQtWuiIJIYQQQogmBS/4SxYvtZnTZ9mMqTNsyqSpNnfOXBcg+/TrbYOHDrTOXTrFtxZCCCGEEI0RhB1EpiDOpALPKoSbZcuWZTRfUxTSHT58uN15551299132/e//30bNWqU/4aANG7cOBs5cmTl73wedNBBLlxNmDDBxajAwoUL3QMLQenyyy+37373u3bbbbf557Bhw1wMwuMqauDl++uvv24rVqxwbym2/853vmN33XWXHXfccR7yb8yYMS7aRWFbvJ8Q1lKFQkT4Yr4rno3nzp0bX5sejMbsB9QpopsQQjQmJFgJIYQQQogmxbrSdbbsi+W2YP4iW7RgiW3etNk9qfILell+YZ7l9spNGjpFCCGEEEI0HhBLDj30UPfwwTsp1Uh+oirgQYSwRai/6oB30UknneQiEyDYIFgxfxYgDEV/5/P44493MQfPqKiQxFxReDUhgEVDGOJldfTRR/snXq7kM4BgRshBQv+dc845lc+olBnBinQQ4RLLVVBQ4GIeXljp5qhivisEKDzQyG9VUH7EtjvuuMPOOOOM+FohhGg8SLASQgghhBBNih07dlqHdh08BCAjTwcNHmQjR42wAw4eZt26d41vJYQQQgghGjt4TxEOD2EGsScZCEN4PSG24HFUnRBVPCsmhrxjHYIUIAwl/s5xkoWURti69dZb7ZRTTomv2Q3pIXYRdjDqEUVoQryoEM4SB1Rx3CFDhvh3vMdCKE8gD5SZfUM4xGQghFGHCGuEJcwEjpss/KIQQjQGJFgJIYQQQogmw5bNW2z71h3WKvYY27FDR+vUuZPl5sVe1Pv11ou3EEIIIUQTA++g/fbbz0Ue5o1KBR5RvXr18rmoMpkDJR14diFa1RTmvmLuKea+eu2113x577339grdR6i+EMKQPIdto8vMmTP9d7yjtm3b5t8DzF3FvFSLFi1KGQqRshCOkBCG5AmBSwghmjISrIQQQgghRJNg65attnpViZWuXecv4zm52T5fVa+8nFoZHYQQQgghxL4jhLUjLF50zqgo/H7AAQe4B1MQeRqaMK/VAw884PNSEcZw8eLFHvaPsH3pxKIvvvjCt09cWJ+KaChE5s9KBYJfVlaWe2ml8lITQoimggQrIYQQQgjR6Nm2dZuVFK+xNSWltn3bduvYqaPlFfSyfv37WlZ21l6hXIQQQgghRNMgOzvbQ/PhRYQHVSoQZphDCpEnk/ma6hqEsg8++MA6derk80B9//vft9tuu83DBN5www1p51Bl/iq2S7VceumllfNoBQhLuP/++7sXFWEBU4VCJBwh3liIfQhoQgjRlNGbvRBCCCGEaNQgUK1ZvdZKYgvCVYeOHdyrKjsny9q2axvfSgghhBBCNEXCfE1VhbVD2Orbt6+VlpY2uDCDWETIQuaSOv74423w4MFVDpiKhh7EM4zwfqkWhLhk82b17t3bwyFWFQrx4IMP9mMxZ1ZiaEIhhGhKSLASQgghhBCNlh3bd9jaNaW2uniNhwRs376d5fbKtpzY0i72XQghhBBCNH1CWLsVK1bYhg0b4mv3BAHo0EMPdaFozpw5DTpfE8dCdIJk86Yy/xSCWxSEuPz8fP+eykMKASxdOaKhEEkjFXioFRYW2urVq624uDi+Vgghmh4tUrBav369TZo0yV566SV75JFHPPYsC99Zx29sI4QQQggh9h07d+y00tL1Pm/Vls1bXKBCqMrJy7H2HfYMmSKEEEIIIZouhNPDe4pQf8xllQoEoB49evicUWvWrImvrX+i3lKIZVHxCYGNOa3Ky8vja3aDwEbIPsIYjh07dg9RC7Fq6tSpbpNMJ0YNGDDAhasFCxakDIWIOIbXF/maNWuWp50KQi/iiZVqvjAhhNiXtCjBChHq7bfftscee8w++eQTn4yQizMXcRa+s47f2IZtJVwJIYQQQjQ8u3busg3rN7pYtWnT5kqxqld+buyFfe9RrUIIIYQQoulCOLxDDjmkyrB2iD9Dhw713wnR11AgCI0YMcKFK/J3//332/PPP2+PPvqoPfjggx6ujzJEPbGAMIannXaa74e98aGHHrJXXnnFXnvtNR84j+0R0s1/lZOTY/37968yFOKQIUM8vOCiRYtclEoG9fbyyy/7gP233nqrQb3UhBAiE1qMYMXogscffzztiIVE2JZ92FcIIYQQQjQMDCQqKyuvEKvKNrnhIic32/IQqzp1jG8lhBBCCCGaE7169fL5mkpKSnxJxf777+9h+ZYuXdqg8zUNGjTILrzwQheXOC52Q8LvkefrrrvO55vCw2nVqlXxPSogpN8NN9zgYfsYGI+dccaMGe4hRijE66+/3vdNBWLXgQce6N/xPkslMvXs2bPSSw0PtGQgvOGtBYh/pC2EEI2JVuXl5al9RJsJhPhjFEOUgQMHuqssNwsu0MAFnRERuNgyGiHKqFGjfCSFEEKIvUkWi7uu6d69e/ybaOnwYshoyn79+vkLXk0gFMfCxQusqHilDRk6xPr0Sf2CKBqeTeWbbOXyVbZu7Tpr3bqN5fTKsryCXhKrhBCiCvBOnT9vvhWtXGWDBg62wgLd31oSIQQYnzzr8MlzesdRJ/v6KDsmjY1/E6JxMXHiRHv//fdt+PDhdvbZZ7vXUiL062eeecZFmUsuucTtew0J59bmzZtdOGrfvn3SOa1SsXXrVp/vCjp16uQCUiZgs3zyySc9OtTVV1/tIlkysGm+8MILsfebPnbFFVckTZ/rA15g1cm3EKJx0XbE8fFvu2k7c1L8W91RV4MCglD+2Wef+Wc6mr2HFaMWomIVF3RuZueee66PyMAAymSNLHxnHb+xTfTiTxrytGr8EDf4vffeS+si3Zjg4ebTTz/1RW7YQgghROwlfstWKylea+tLN1ir2PNZdm6W9ZJYJYQQQgjRImDOp4suusjD/kXne4qCCHP66afbeeedZ507d46vbTgQ0Tgu4feqK/qwPfuxZCpWAYPtsVeeeeaZab2imO/q4osvtiOOOCLlwFJsoBKrhBCNlWYtWOFm+8EHH8T/Mx+Ffdlll6V1sw2wDdtGR26TVl3PaYWb8LPPPmv/9V//Zf/2b/9mv//9711pbAhvheYII1wQF1evXh1f07hBpMJTgEWClRBCiJbO9u07bG1Jqa1dU2pfxv6ysntaXkGudZJYJYQQQgjRImAUPiH08JpKJ8wQPpAweYWFhfE1zR+8pigzc1qlAhGMuayGDRtW6dEghBBNiWYtWE2YMKHSJR5vqXPOOcdHEWQK27JP8LQiLdKsC0gLjy0maVy5cqWdddZZduONN3p4o6eeesonbsRNuDlBbN4///nPNm3atPgaIYQQQogKGEG7cf1GF6sIk9KlaxfLzcuxTp07xbcQQgghhBBCCCFEc6bZClZ4QuG1EjjuuOOqJVYF2Id9A6RZF15Wa9eutddff90OOugg++Y3v2lHH320jyBh8kYmW5w6darNmTMnvnXzAK8xJqNsbkKcEEIIIWrP5k1bXKzik9Gg2Tk9rXMXiVVCCCGEEEIIIURLoc0999zzo/j3ZsXMmTN98kUYOHCgHXnkkf69JhBXtqSkxNatW+f/E6c2k7CC6Zg8ebJPhMhcWT179oyv3R0Hd+nSpR7eDhfeILQh+CCYhX35n33D74SU47cVK1ZYjx49vA6mT59uS5Ys8f+ZzDFKVekFSktLfY4lBDQEJ1yP27Vr578hPn388cfuMcYStqO+8EzDfTtsw3ryQj4R7IILM79t3LhxjznDmItq7NixXh/R+mFySY7BZPuLFi2q/D1MwlleXm5TpkyxQYMGuat0Ksgr/QOPufnz53vZySt5IS5wly5dPKwgeeD7smXLvJ6Y54z/2Z95siZNmuT7J9ZLaAvKSXohz3jTZWdn+6ScYTvWA/GZq2ozIRorqWKL1yWKsS0CXFu5z3CdjN4jqgPX8dJ1pVZWXmbZOdmx63u3+C9iX7Bt6zYrKV5jpWvXxZ5DWllur2zLycuuvK8KIYTIDO5v3CfLysotKyvbunXV/a2lQl8AntPbPvSIf4+y65ab49+EEEII0dRo/eDD8W+7aX37LfFvdQc287ogzNlXVFTkn+lotoIVAgGiBxx11FFp47tmAg97Cxcu9O+IIwhJNYUwN+PHj3fhY+TIkXtNssj/BQUF1rdvXxdIOB6CzuOPP24fffSRCyAIN2+99ZaLUwgdCCB0IH7//PPPXUhBRGEdwglCCNtxTEDY+cc//mFjxozx9BDH3n//fRdx2A4DEWVm34ceeshFJ0Y7T5w40dMmHi77UZY33njD1/Hb9u3b3QMN4Yf6op5Ih3mlEH0oB3liv/33399FIvZHJOO4AcTBV155xeshCE8IQ3/605983i9EH8r+5ptvevqIktRTJoIV29M/Hn30Uc8rohD5Yz/Eo4MPPjj2cpflxyE8I2LeuHHjPE/kEUGRkI2vvvqq1wFlYP9ovYS2YD1tTf2WlZV5fRISMWwXBCvaqqo2E6IxI8FKNCQSrJoXO3bs9HmrVhev8Xtgj6we1iu/l+atEkKIGsD9TYKVAPoCSLASQgghmh/NWbBqtiEBeUgPIHrUlmga0bRrAqIOaSAyBc+gKIg3iFUsfOcBEzGJfW677Ta7+uqr7ZprrrHvfve7LnAgjESNxWx33nnn2be+9S277rrr7NZbb/XONXfuXP+dB1c8i9g3pMdyyy23uGBFOEKgAyEmXXTRRfbtb3/bvcE4Jh5nCF3RDouwdvvtt9tNN91kN998s3396193byKOg8BDPlgwLp5++um+TXVERAQzvJ0QpjgO5WPOL0IoIvTgDZUp1M/o0aPt2GOPtbvuusuuvPJK+6d/+icbPny4C2mJ0A4/+MEP7F//9V/9+HhWzZgxw49PO5AH8kR7IjSFFwOgfdmO8lI31Dck1l9VbSaEEEI0R7hnlm8s91CAW7ds9UEkWTk9rVNniVVCCCGEEEIIIURLo9kKVni0BPBkqS3RNKJp1wREjKioURVr1qxxLxwElvz8/PjaChGNUIf8hudSAM+l/fbbr1IMQ0xCZAoeZ3hnzZo1yw455JA9wvCR3ogRIzwEIGIJ6bIf82yFtPj/iCOO8JB10WMi5CBGBTg+6RO2b8uWLfG1NQcx6IorrvAleFmQp8LCQs8vnlWZguBEG+J5F9RdhEG8npLBdlEvJ8p6991377E9BjbqEi8sBMkA9ZCbmxv/z3wb2iyx/qpqMyGEEKI5smXzFltTstY2lW+O3evb+bxV3Xt08/uyEEIIIYQQQgghWhayBjQBEDYQrRLnzULcGDBggIdFIrRdoCojD6HpEEIQUoJAAux31llnuacPHluExEN8wbOJ8INhQWxhfTJvpABCUP/+/f1Y6bbLFPKJpxbi1Ntvv21//OMf7Xe/+509++yz8S0yJ4QUJOxfJiTWJ+IZIRPxRCOsIvn4wx/+4KEYqyK0GaIhS0CGOSGEEC2N7du2eyjA9esqBmcQCjArJ0vzVgkhhBBCCCGEEC2UZmslx+MlgGhSW6JpRNOuCYg5tZ1TK4DQgSAUDS9XlyBszZs3z+bMmVO5IPjgKRS8k1JB3gjlVxeCFR5pzDt13333uXfUySefbOeee64dc8wx8S0aDgTEhx9+uDJEIflA6EsUFFNBvSBWRT2xhBBCiJYEcziuK11va9esc+Gqc5dOlp2TZR07aa46IYQQQgghhGjKLFiwwOfwr6m9urb7i6ZNsxWs8KAJZDKZV1VE04imXRMYOcwk8Qg/ycILIvI8+uij7r3DiYkwhFdPMuEHjyM8haIh66oieAhF571KpE2bNr4doeqYv4q5q6JLJnNQMS8T+apO3lJBqL0PPvjAzj77bJ8z6oADDvCQfH369IlvkTmE2yNMIfVcEyZOnOiC0w033GBHH32052PQoEGebibQZoRPrK3wKYQQQjRVCAHIvFWEBOzQob3PW9WlW+c9PL+FEEIIUX+0HXF8/JsQjQPsNAwQZsHmUp2pNBLB3sXUESG9TI3e2InCPuyfzm62LyA/DKivbrmidVsX03akgjaj7WpzLMrY2OodalKH0fbisz7LRV8I+avO+RPt85mWK1oXyY5FORGc3nzzTR/wv3Llyvgve8L+DzzwgL300kuej8cee8y/Z7p/S6a538NbxS7ANb8DNGImTZpkn3zyiX8PXjC14fXXX/f5mGDUqFE+11NtWLp0qf35z392z5zjjjtuDwMNcyw99NBDdv755/u8VdwkOWmZY+qCCy6oDB/HyfzMM8/4Renqq6/2NEKIvMsvv9wFJ+DiwQmOqEK4P4SvZNuF9fx/ySWX2IQJE+y9996zr33ta9a3b1/fBkI4QISokDbC0cUXX1yZt5BnRC3SQgBDoGPbM844w0aOHOnbUYYnn3zS5wgL28Hy5cu9fmg3tg37Ul/RumcurkceecRFNcqX7BiJUL9/+ctf7JprrnHhK0BIP/YNaS1cuNBD/YX/A6+99pr3hRtvvLFSjEN4pBwdO3b0OgXqkos4bRPEKdrq+eef9xCO1113nZc3kzYTorGT6YNybchUFBbNHzx/mWexX79+Pv9fTeAheOHiBVZUvNKGDGUARGZesqL2bN2y1YpWFltJ8RprFfvLzcux/N55LlwJIYSoHbt27rL58+bHrrOrbNDAwVZYoPtbSyIYDfnkWYdPntN57+5x0ln+W5Qdk8bGvwmx72CA8iuvvOJG6ajhm8Hi2EMyjWYD9HcGGWPPot8HsFVhX8GmlGyee2w3b7zxhs2fP38PUQGbz5lnnmlDhw5NO7AKwzs2SKISYQ9jTvLrr7/ePxPhGNiFEo38UU444QS3FQZSlQub0qGHHmqnnHJKpT0pQPrYv959910fUB6FuqVcTFkRIO8vvvhi/L+qwQY4bNgw/57qWNQZc/Fj36xq0Dt2Mso4c+ZMO+eccyrTTgf1gl2Q/RgcTttF8xUFwQg7ZXRKlUSwbUbnzq9uHQZoo9GjR9uMGTM8skQgXXvB+PHjbcyYMfH/kpNYPuqAAf6fffbZHseq6vypyXm3evVqt49je03cJ7Eu+J224bzClnPllVe680YUzpu///3vfm5SJ9i4OWcuuuiijPZvySQTrNrOnBT/VrdkKmRWBTZzoK9WRbP1sMLrJYC4sGLFivh/1Yd9g1gF0bRrCgLQ8ccfby+//LLPycSFghOVRsOzavDgwTZ8+HDflhskoe+4Mb3zzju+LQvzSc2dO9fTCRfTTOCiiOiGwS8cm4WLKeuOOOIIv4hy/F69enl+OA4iChelxx9/3MUZ/g9wY0bcogzcJMgbolNICzgunl1cDAk1iOjFOuoCN08WbuzcvFHUo2EYeaAgDOG4ceP8d/JLSD7yVl246B588MH+gDB9+nTPM5/8nwnklzJwfPLBzYv6wHiaCOu4uFInHIc6Zu4r6kUeVkIIIVoaO7bv8DCApbEFo2rXbl0sO7enxCohhBBiHyAvK7Gvwaby9NNPu90Nuw8DjxFrEDcQCDBgZxo1CbECW9SHH37oRnyM4CeddJIPVMYWhS0J2w22mSgYY7EHYffCRnX44Ye78RzbEXYv7Hb8lgyOia3uT3/6k02ePNm3x4aH0T0M6E6EvEWN/VURLReCBJGQKBeiBRGZsCOSR9KNwqDs5557zu1R2PawA1K/GP1D3SJSBagj8p1uoWyIUBieo/PCR49FvSG2YfciuhDth+0OsSMR7ILk/8EHH/S56qnDqCCXDvoMA72xuTHvP21HHilHMqjzqBiZCdWtQ6A/sQ+2P9qHdqK9sPMC5WXgerJyJrZhVYS+gdMG7YK9+pBDDtnj/ME2m0iy8y6xXIn78f8TTzzh7YlARV2wUC/UD2Vi4H+A/HDuUW5+R3xKBe2WSHX2b2m0hHt3s/WwAsQYBBhA7LjssstS3jBSwcnPhaa4uNj/Z1QFqnFdQNpTpkxxF0cuFsDFDHHq9NNPr/TeAS6slIWbKBdiCB5XYaRHKs+pZN46IT3U9HDzJ71LL73UR6uTHiAsceND0CG/1B+jAQjLh8Id0uZiiADDaAC24zfydthhh1Wmxfr333/f24XvwXMJkYo65hjAvsxRRd3gYcZFE7i5cdEM4iGec9QV6j5twnaZeFhB4jEp+0EHHeSiW1UeVuQdsYrjcjOhzQhVyEWdiz2eV9wgg4cVo0k++uijym3xGkNkpC6r02ZCNGaq+2BVE7g2CAHcv+Rh1fTg2YN5q1Z8UWTlZeXWqXMnK+yT7+EAw+AWIYQQtUMeVi2bYAQPhlk+eU7HMJrMwwrkZSX2JXiGMACa53rsUWEEPv0XIQIPFQQabFBVPS+yLXYaDPDYV7ADBrCjYU/CuybReynsh7E+6sXB+fPxxx+7/QebEb+F/EH0d+w7wehf1eBkBmJjI2LbU089Nb42NSF/vA/j/RP1VMKWiBjEgG+iFgVRBAN/GGh+2mmnuQgXbHNcE4gchBiT6FFUFSEv2M/wgqJNosfCgw3BJGoHfPXVV/3djUHx2M7Cb9gin3rqKbebsY7yca3i/1ReUgHEk2Bz432QeszNza1MOxkMPOd4tO9VV121R1smo6Z1GPp0YWGh9+moR98XX3zhtkhsgXgRJZaRwfukSd0GJ4Z0sC31iw2SPh+mTYmeP8m8xrBD4zSQeN5Fy0W9YkfHjkk9I3BRh9hpg00TSI8+zXnQv39/Pxb7BDgOeYmmF0A8xsOK6VboN5yjCJ7R8yLd/i2VhvSuAtq/Lgj9LBMPq2YtWHEjwhuIkwfo3Jz0mYpW4QTHgwa4MF177bU+QqAuIX80Psfr3Dn9/A1hW6Ch022bCZmmxygObhxcGIKoAonCChddQgZyg05Vz6RDWROPx3oujunqoK7LH80LQlgygSoVoU646Cc+OCUKUfyealshmgOcu/WNBCsRkGDVNNm8abOtXFbkHlZt2raxvIJelpefa+3aJx8FKYQQovpIsGrZBNsHnzzr8MlzOu+ivEfnn3WR/56IRCuxL6BPIraUlJTsIbYEGDiOYIAdiikdoh49iWCfeeGFF3zem0RBKhCEoqjhO7ofRvLEgc8IQeSBwdwY4jHIB8gfAgjnF/awAw88MP5LehjITQg7vG4YhF0VCBKEyUslcCE+4M0T/T0Y+VMJUkG8wT6FeIOXTFXQXogWtBfiXZg6JIQ4RCBMJgQxGJzfEZSiv5MHBtHjFXTkkUf6+uDZk06w4ppGetjwEDkytfMyNQvpIyRFB4ynoiZ1GPo0fSOZIMU1mTLzLssAfwS8QOiL1BciUlXRvarq86HvYhsnvWDnpL8G8SlZHkM9YdcNYS2DuJjqXMTBgHLTDom/h1CTyeoxCFYIgpyXHBfnhGhZ0u3fEknlXdXcBKvquRs1MRCW8NQJIDyhZOMFUxVsw7ZBrALSqmuxChBduBAE19p0hG1ZaivWQKbpcQFGSKrqgs7vlCPdzYKLS7Ljsb6qOsg0v+ngwZ2HAy7aIS/cNLgIcsPlJpoJoU4yEaCqs60QQgjR3Ni2dZutWV0au/du9Pt3z6welp3TU2KVEEII0YCkEqYUGlDsC/AOwi6DrSTqDRVgwCI2OOYMx9slHYgYwaiaaq6ksJ5B1hj7gbQRYLANYRBPBHsRxnfSj4a0w4YUQgAyz3p0fvSqCCEJ0wlwAexXiDJ4mPGZjBBOLRrqMEyxwW/JDPx4/WC/ox4yHXyKkIQQg+CDx1mAchBhCZtpsnB81CFCB3VF3QeIRvSNb3zDRbbq2FqXLFniogr7s2+mTgm0NWXF7liVbRNqUoeUj3KyPtmAW96DQj9EOIoS+nCwq1YF+3MOUbdBPIxC/mgr8he1gzPAnr6SKo+0BW1GWYhOBeSHyFZ40CUL34cQgb2TfaojbtB29B/ySt1wLYh6pIk92Rdi1b6iWQtWgJsqMTUDXFxRoHFhJQYtoyS4AbDwnXX8xjZsGyAN0hJNHy6gCJG/+tWvfFQGIyaIlUs8YNxak118hRBCCFEztjNvVUmprSlZa9u3bbfOXTpZdk6Wdey05+hLIYQQQuw7JFqJhiYIGBipkwkdGOIxnGNwx8ieDgSF6667zu6+++6Unjlheg0GKQcBAhGDPHB8jpUIRvhgQGfbAN8RcDDUYyvE2I6hHiEgUYiIQjkQAULZEL6oh1RGfgz6AwYMcO+tZF5Q7B8tVwAPFeoCD5pkIMaQF8qWiViEmMLAbyA0HvkPIMCQPzxkkg3SDnPYI45EhSLKVpOB6Hh00Seod+qQvFHv1CP1kYogegabH+1EW2APTkZN6pC0b731VrvjjjtcLEok2l6JAin9kDTpi/Qr8kX+UvWncF5Q58nOHwiiKFOYBKgz2ox0k80rhohM/0akCoIW5aKN8fqKtn0g1AXnVXUEJ45x9dVXe13QN/AEyyQUYkukpd2jm71gBYx2YMLE6IUQ19F33nnHXQ8JA8fCd9aFOZKAfdiXNMTecGHEjTXqFt3Y4QKKGylzTXGDxH2WB4Dvf//77oZckxtmItQLc4uxJLthCyGEEC2BnTt22rq1662keI1t3bLVRaqcXtnWpVvVXuVCCCGEqHvShf+TaCUaEgz0GN0xgCd7LmR9CCEVNbjXBAzwhBXHPhMNtYbYQR44fjJDPASBI5oHPFsw0mPQR4B46KGH7N5777UHHnjAP//6179WChNRECw4HjBomoHU9913n+/z29/+1ufECt46VUFas2bN8oH3iASZenmxHxGGECwIsZ5MqEuEkHCEkMMTrjoh2amzMWPG+HeEiGSeStUhiCyhbxAZ6ze/+Y3XO/V4//33e/jEZMJVqFfmkfr973/v9c0nbUA6CGuZUpM6BEQzjo9Iy35RSBORivOCMJDkK5pP5uCPimv0WWya9Cf2yRTqDvGJ/ZlrK9qvEU7DHPxsQz6rgn0Ic0ld0AerI1iJzEh3b26O3lXQIgQrQHln/ikEhExhW/aRZ1VquNmceOKJKV2TGytcmImLSlzc22+/3eMNVzVBY3XgIeioo47yRYKVEEKIlggvVBs3lLlYtXnzFuvYqYPlFeRaVnbP2IuS7o1CCCHEvqIq0UrClWhOIAQQvm/VqlVuB2KpLcGTinCCzEmE2MEcQdgR8RRB4GFOn0QPFrxQ2BdBAA8ttkUQQ0QgPUSst956K6XXD95Fr732mh8TkYzv2OXOPfdcy87Ojm+VHsLDMecVwgI2q6rsYAgin376qYsiCBJBREwGQh75J1+PP/64/eUvf3GPHebqOvjgg+Nb1ZxQf+SJubuY7wnPM+y2PXv2dI8komZNmTIlvsdugjBD21DX1DtCE3VNvdJe5D8TqluHwHHGjh3rQic21ESPueClRN4QB8kbecSmSLmIDjV+/PhKMY52COEqo44XAbZLJcLRFrQJbUMbIbA+8cQTLvjRLw899FA7+uij41vvCQLVu+++623MnFNhHwQuvNIS6wLvM/LKsfCCqy613b8pU9X9uDnPP9liBCugkxNzEzdhQvwR4xO1mJOJhe+s4ze2YdtMXGOFEEIIIcRueEEqLyu31cUl/tm2XVvLyc227NiieauEEEKIfU9Vhi6JVqK58Pnnn7uhH3GBCEp4pdQWxAVAhECouu222zySDyHNbrnlFrctsg0CRfCoAgQqQhb27t3bB8h/5zvf8RByd955p88BhTiBhxCeU8lg6pIZM2b473jrYMtEJCO9TECQQWhAGGHweSYiF55izBmFILT//vvH1yYHT7bZs2d7HpctW+ZlZ64phK66qHfEEtLkXYNwctTh1772NZ9Di/mwmOaD3/AcSpz3jHainugD1Df1/t3vfteuv/56F4bYfvTo0Xu0VzJqUofkiT5IX6Q+sDsnCjv0T7z/iAD19a9/3QfXh/CCRxxxhG9DuRCHAJEzhKNEPAvrgeOxjr6UDNqCfoPNm/Ii4uH5hfhFvdJHUw2+R7jEq482RjBkHzwNEbmShSbEKw+RmPMBoQvhkPxlSm33b6pUdQ9uzmIVtLnnnnt+FP/eYkCZ5SLFCUjs1ZEjR/rC93DjSDdiQAghxJ6kGgFWl9Q2fIBoPvCQymhGHrB5caoJPOSWriu1svIyy87Jjj1ka/7CumRT+WYrXrna1pdWjOpjzqq8gl7WoaPOYyGEqE+4v3GfLCsrt6ysbOvWVfe3lkow6PGcjkESo2JieKddt9xsrR98OP7f3vAbC9sJUdcghBBWDWM3hvdkIfn4ned+pqFIDKGWCRjhCa/GeXDWWWftNZ0FRnCM+hjnU4WsIw0EG6LyhPmxmBeddYgVl1xyyR7nFuXA8wVxAs+YwYMHuwgQfsP4zrEodxAt+GQeHzxi8ARDFOBYiSIPxnumssCGibDB9oQ6xEMIQSadLROx56WXXnLRCw+fZN4wiXAdIUQcYgjTgYTyp4JyIlzgdcQxqHfqatq0aV4n0Xm2EuE6hRCHBxUCV7JtKS9CCZx//vleBwHKQv3QLvQtjhcV8viNeqeeo+VGrKIdEWHw4Im2VyI1rUPKhRiGYIm4lkzkou8hCJJutD/RBygnbYCoxv8hrCV9CG8v7vsIhXhm4W2FUEq/Jk2u/dG+C/RNwiBS56eeeqqdffbZ3qfw+kKEYl/qL9m8aYhSeGjRxvQJPME4R2gXzqPE+uU7fZ5zgfMZb0fSTdcXotR2/6YGQlW6+zJExapk1826hj5UF4S8IpBWRYvysBJCCCGEEPUHLz2EASwuWm3rSjf4C1rP7B4eCpD5q4QQQgjRuMhklLa8rURTBAP/888/7+LPOeeck/EcT9UBESTZnD0Y0xEl8DgilFkmYJgPwh3CBOJIIggQCCwsCCtXX321ixcINITtSwVpURd4PSE2IN5l4vFEPhAwEMII+VYVpEl9kD/qhnrnWLwjjBs3zuujLkDQIf1EyCfebZCJUTyAyEKbpWuvmtYh4hDh/BB68MDjWNWFPhGmq0GcwrsLKC9p0geoY4RLhCOEPTz2EJQgKu4g/CBo8Z52xhlnuAAa+hRi4+WXX+7HY14qjpUIZUbQY/ucnBw74YQTPA+IVZMmTUo6dxui84IFC3xfPMwQ2qpDbfdvCnCfzeRe29w9qwISrIQQQgghRK3ZtnWbrVm91lZ8sdLWrin1EZU9ena3gsI869I1+ShFIYQQQux7MIBVZQTL1JgmRKbgmYFhnNH7wSMwCkZ5jOuAYbw6hLBtzAd07LHHVoZOSwSDP0ICx0/lRRBCy0WN/kGkIn9BPIjCsSgb6SIkZAp5wfDPc3SyOkkEA34QMvDMoryJkNZ7773nXjB4qZ1++umet0yYPn26e6Hh+ZPM2yYT9ttvP68vPKcynSMqFaG9ECFD30gkeMlVp96raq+a1iGi6dtvv+3fmXamJl6CgVCuxL5BnVx22WX2ve99z0MIEp6SUIcIUcyhRn8qKCiIb13RT2gH+jOiZyIIQoWFhd7uyebGSgb70D9ok0TBinXMK0bfZK41QjiSfqbUdv/GTnWEqpYiVoEEKyGEEEIIUWN4aSov2+ReVUUrVtn69RusdeylLyu7p+UjVnWTWCWEEEI0BTIxhkm4EnUFghUh0jBIJ/O84RkTMQhhgG0zBWP8s88+65+EbDvmmGOSilWACMCC9wyCSiKIF8HTKepJxXeEAELIJRO6ggDGNggsAQQMQrelEm4SRSrS+Pjjj118I9xbMkLZkgl/1OGbb77pId7wPMITBoEjE/A0IgQb+SdMXao6xKuH/E2ZMiW+JjnUJUJTbQjtRTrUfTKCaBcEHqBtqXcEp8Q6CqRaX9M6JFRfph5+1A2hE/HGSlWuVPkLUF68nuibCJkIR/Q3vKGiYiP54XicV8nalPWhfKEu6Xu0MX0xlbAb0koUTckHfYlQ/oT2qy613b+xUp17aUsSqgISrIQQQgghRI3Aq2ptSamtXF5kq1eVxF7ot8ZecDpYr/xcK+iTb127d0n5ciuEEEKIxkemo7iDsU3ilagpGNeZkxbBCsN6IoQBIyQZ4d+YTycTEJfwxsDITdg2vKsw3qcCIz/eWxjhk3mTEFqN+YrYLmr0JxwdeUd4SiYksR9GdoS2aN45xssvv2zjx49PKkBQDxj8yRP7IpYgZBDmjVB0yQgCQfBYC5A+x2FfjP3nnXdexmIVMKcT5cObJeqhkwjtxDEQt5KJGUFIQ5ysjvCYDPYnpB6CC/lLrEOOhQcRRL1wEKzeeustF57ob4nQVqGvReeXqmkdUm/MnYYQm87DL0AfnTp1qs+PhTCWCPmgHwCeUVExLhkIvYT943xAKIuKraGfUCfJvAPpT0G8DftRZ+SLJQi4UcgfdY9AGz0WUAf8Rr3xe3Wp7f6NjeoKVS1RrAIJVkIIIYQQolrw0rBh/UYrWlnsYlXp2nW2K/ai0qNHdyvonW95Bb2sS9fOaQ0EQgghhGi8VMdIJuFK1AQM0IQkw9jN3DdRIYFnzcmTJ7s3SAgpF+A35rNhjqKoYMH6d999171o8AjCq6WqZ1EM4Bj0+cQYj/gSQCxCqMB4H0KeBcgPIgTCCaHioh5TGPTJB58DBgzYY74dyovYgNiSKEAhslFmhA22Q1RA5GF+Ivjss8/2mlOI437yySd77APUy6xZs9wjBqHlyiuv9M9MoS2mTZvm9TJy5Mg9hLBEBg0a5G2J2IZoFW0T6pA8EF6OOsxUeEwF5WReJuqQ9sIjKcBxJ0yY4O1PWan7AAIgQg/hHRGGyFeAfoMoRXtF81jTOiQdvJFom+OPP94Fq6oG8PH7sGHDvL6TtTN9hbrl99AfkkG5li5dak888YTNmzfPQxAmehhSF4itiKqcd9G6CGXm3EJQDiEMESypl2T1xz70W4Rd6oc6FHsS7pESqjKnVewilN6nUAghhKgCHvLqm+Y4saaoGTx8E9KBB2heYGsCD9kLF8dedItX2pChQ6xPn97xX0Q6qLctm7fYutINtr50vW3atNl2xV7UeWnsmd3TsnJ6WucunfxlSgghRMOza+cumz9vvhWtXGWDBg62wgLd31oSwVDMJ/dsPnlOZ8Q8RlQMlTWhJmJUSze2icygXxI2DZEB0YNne0Qmwqlh8MdInigUYGRHEGL7r3zlK5XeP4gOY8aMceM8njLpxCqM/swpBJwrb7zxhotTCDPkgbTx1EHA4jn38ssvd8+eKNG8s03//v39GZj/EXyS5Z1zEgEE7xfyiRcQ2xEGbsmSJS6A8Y4TDTsXPQ7pI8RQPs5rxAk+WXfxxRdX7oPg8NRTT/m+rIuGJUwEYYLjETouQF3gqUbdUoaQbjKiZQKEIUQL6jW0I/llnqXevVPfkyjHM88848IXZUHASUaqOgztRbvjCXXggQfG96iAdAkVSZ3QJuSFPIb2oozRdq5pHeJZhZhGPih3VCxK5Oijj7YRI0b492g/jLYzIhFefPyeSohlnizekelHbAf0owsvvHAvjydA6ENU4/4Q6oI0o3V4yimnVOYNeP9mH/posn3IM/WeGPoQoe3FF1/0er3iiiv8XKkOtd1/X1HTQRzVvXemOzfrCs6BuiDkFVG2KjTsVQghhBBCpIUXw61bttqa1WttxRdFtmplsW3cUGatYn89evbw8H/5vfOsW/eKeP5CCCGEaD7UZLR3dUeUi5YJBkyM6ghIhCfDkI6HByHaEEsQOaKCD/A/z5t4H0WNtcFQz3MrAgSeUamW6JxZGN3POOMMO/zww31f5mRCNFi9erULIYgniWIVcGwEDvbD8I9gQP5Jm/JcddVVe+Ud8QKPF0QHQrMhonCshQsX+u+kRZrRcvEd0Yj9ENTYln04Hpx44ol77UM5WABjc7I6iC6h7oDtmY+K/REfoukmgzLhRYRgg+cO9Ub+aEe8eKiLr371q2nFquoQjoc4Eq3D0F70mWTzRdGG11xzjfcr+hf5C3NGse66667bo51rWocIOsD/eJYl2zYsiHQB+uFZZ53l7RltZ8qHWHbSSSel9Bqkz3EsxJyhQ4fa1Vdf7f0vmVgF1M8NN9ywR10k1uGRRx4Z37oCBEDqCDEyug9iFetIL1m9tyRqet8L99jq3mebM/KwEkIIUWvkYSUaEnlYNSzbtm238o3ltn7dBtsQW7ZurYh13rFT3KsqtnTq3DxiigshRFNHHlYtm2Bc5ZNnHT7rwsMqkdqKUDLKiWTQV4OQhBiVzpMCcQujfjLjfW3gvEHA4NxBJKhKrAlE9wtzBFUF21JeBA7KwX5VlYfjsA+fme7T0HCtIZQjZFoXNSVah9VpL66JYf6m+s5jTYi2M+9Y5DGdp1ZtqM55F4jWX1X7jBs3zj766CMXvC644IJql6O2+9cnjeFemGmfrw2c03VByGsmHlYSrIQQQtQaCVaiIZFg1TDs2L4j9uK92YWq9aUbPBQg9daufTv3pOqZ1cO69+zmLylCCCEaBxKsWjYYb8Mn92w+60OwilJbgx1IwBJCiOYHno5PPvmkh4U8//zzq+2BVdv965q6uN9BXd7zJFgJIYQQKZBgJRqShhKs6NcYehhx15hGctU3jFDcvGlLpUcVotXOHTutbbu21qVLZxepevTsbh07dWx0IzqFEKKlI8GqZbMvBKtAXRnyoCEErLrMrxBCiIahoQY41PU9or7yLcFKCCGESIEEK9GQNIRgRZ+eN3e+7di+3X/v1LlT/JfmC0IVXlQb15fZ+vUbbVNZuW3fvsPatm3j5e/es7v16NnNQ1K0ia0TQgjR+JBg1bLZl4JVlPoSg9IZ/CRACSGESEZVYtG+uGfVFRKshBBCiBRIsBINSUMIVlu3bLV33n7XP0878zTr2bNH/JfmB95TmxGqNmx0saq8fJNt37a9Il56547WvUc3F6s6d2l88d2FEELsiQSrlk1jEayiSEgSQgjRUmgoD7CABCshhBAiBRKsREPS0ILVyaed7PGz8T7KL8izDes3ujGQfj94yKDYvn2sqKjIVq0qdsNQdna2fy5d8oWHEhw4aID1H9DfhaGFCxfZksVLfN6nwUMH+3ETRSD2XV282j28EJK6dutiBQX57tnEhLg9evZ0AW3liiLbvn2bFRYWWvsO1Z9HagdC1abNtnFDmYtVm8o2+wTJCFWE++vWo6v16NHNOnft7JMYCyGEaPxIsGrZ8AwRPhuLYJWIBCwhhBDNhYYWqBJproKVJh4QQgghhEgBxh4EphnTZlhpaamLRJ9/PsfWrVtvG9ZvsM9nz7ElS5b65+RPp9j62PqilUW2YP4C27RpU2yb9TZ3zjzf74svltn8ebH15ZtsTckaWxD7zvaJbNy40WbP+ty337lzhy1dvNTFqxUrVnpapWvXevi+pbHjzpu7wDZv2RzfMzMwXCFSFa8stuVfrLSiFatsfekG+/LLXdate1fLL+xlffoXWkHvfOuR1UNilRBCCCHqDIx7YRFCCCGaEtF7mO5j9UeLFKzWr19vkyZNspdeeskeeeQRe+CBB3zhO+v4jW2EEEII0XJhVDKi0bTPpvlooMGDB7nnE2LT0KGD7YCDDrCyjWW2dOkXtmnTZuvWvZsddvhwGxTbDq8rvK+69+hhxauKrbi42J8tEKP6DehnI0cd5V5XbZKE2EPcWr9+g6d12hmn2oCBA6xV69YuNOEBhWcU8P+OHdtj+fR/q4Qwf+vXbbBVK4pt+dIVVrSy2DbE/gfC/uUX5lmffoWW3zvfemb1sPbtJVQJIYQQou7Auyq6CCGEEE0J3ccahhYlWGEoevvtt+2xxx6zTz75xJYtW+ajnzFIsfCddfzGNmwr4UoIIYRomezcucvFqZLYgmBFmLyysjIPo7dhw0Yr27jRuvfobt26dbXWrVtbp9g2HWJL69atbMvWLf47HlIhJE+/fn1tv/0GuGg0f/5CF6/atm0TP9puCD9IGllZPd27qVPHTta+hl5OHHfLlq1WumadrVyxyoWqVQhV6zdaq9hfj57drQChqn9vy++d53NVtWuneaqEEEIIUXtk2BNCCNGc0X2ufmgxgtWsWbPs8ccf93kvMoVt2Yd9hRBCCNGyYP6pPn37+BxXq1eX2BdLl1nbdu2sQ8cO1jOrp/Xt188OPPhA69+/n7VpU/FItXPHDlu8aIktX7bCCgoL3MuqR48eLlpt3brNcnvl2v4HDHUhaV48VGAiiGO7dn3pwhXb7YiLXmGuK7ysWE9YQBbg9yCM8cl8WWVl5Vayeo2tXFZky79YYcVFq31d6zZtrGd2DyvoExeqCvM8FGDiXFpCCCGEENWlvgx3iWGYEhchhBAiGcnuGWGpa+rrHtjSaFVeXp5hIJmmCyH+8JqKMnDgQBs8eLAVFBRY165dfR2jppk0fcGCBbZo0SJfFxg1apSNGDEi/p8QQogohCarb7p37x7/Jlo6DCiZPXu29evXz/bbb7/42uqBqLNw8QIrKl7pglSfPntOSr91y1Z75+13/fOoUUfZ3M/n2datWyw7O9tWLF/hwlCnzp1cjOq/X3+bPnW6b3vKaSfbwoWLbNaMWda5c2fbGTsO81Qddvih1rVbt1g6cz2837atW10gOvKoI2y/gXuWYc2atTZp4iT37MLLqmR1ieXk5tgBBw7zua3Wxn7Pys6yZV8st/z8PBs5aqRt2LDBOnRoH0t3m5WXb3bBal3pOuvWtZu1a9c+9sRnsd87WOcunVyc6tqtq3Xs1MHatNnbw0sIIUTTZdfOXTZ/3nwrWrnKBg0cbIUFe97fRPOG55PwGQay8Jy+NfbcwaTpOTk5/ntdUh/CVH0hA6IQQjQv6uueUR/3i/rIK4Nd6xueH+qCkNfPPvvMP9PR7AUrvKNGjx4d/88sLy/PjjvuOOvdO/2D+4oVK2zcuHE+50TglFNOsYMOOij+X9ODkIdTp071EESELhowYIAb+sJk6hi7Pv30Uxs0aFCNDYBCiJaJBCvRkDSEYIUXE55SfA4cuJ+tW7fO1q4ttaysLCstLbWlS5bG+v1Oy8vv5XNblZau820HDRpo5bH77ZzZc9wrCxGJgTGIUswTNX/eAhe8uA8zz1Xbdm1t5coi275tmx+3Xfv27rFFqMCFCxf7etLOycm2EUcd6d8XzF/gBijEpt69C613LO/LEdF2fWllG8t9AM7O7bv8s1evXpabm2NdunVxoapL187uIcbxhRBCND8kWLVsGlKwqitjXn0KVC2FOXPm2IsvvmgHHHCAXXTRRfG1TYttsWfeN9980z7//HPr2bOnfeUrX/Hn1b///e/+zHz22WfbM888Y926datRGTkH2B+uuOIKPxa2Mb4zqCsVoW4vvvhifx996qmn7JxzzrFhw4bFt6iA823s2LE+WL597HmedKuyO1aXkJcTTjjB7ZqiAmy3H330kbdRYrsIUZc0xvueBKsmCPNPEdIvPLRh1OLGkqmRhhvOG2+8YYsXL/b/CQ107bXX+mjq2jJt2jT74IMP4v/tpn///jZ8+HDPK8erK7gRMy/X0qVLLT8/39dRvhtvvNGNb7Bq1Sp7+OGH7YwzzrCRI0f6OiGEyAQJVqIhaQjBqirYH1I9U/DswcK9PPF+zr6sI5zfksVLbBHCWESwGjhwgA3Yb4ALUqQxfeoMf6YZfvjw2At8RXjBkCYeVZs2bbayDeVWtpH5tbb4+ci+zLnVrXsX64pQ1aWzte/Qvk6fLYQQQjQ+JFi1bILtg0+eF/isS8Gqtsa6pixOYVNhznPeSRBQGhNNXbCinzKHPEZMnu8vvfRSN2xS5whWDKpmAHldCFYM2L7sssvstddey1iweuWVVzxPnTp1SilYEdnpvffec7Htyiuv9M+JEyfa+++/7/a1U089Nb7lnnB+ki8GzZMXbIKpaA6CVablZeDdk08+6ULmNddcU2m3TIYEK7Ev2df3xeYqWDXr4bUTJkyofGDDs6o6YhWwLfuwL5AWadYF3CwRiPr27esXVJahQ4f6RfuBBx7wm3UwhtUFeFYxIvx73/ue3XHHHZULN1EhhBBCVA+eEdI9UyAM8XsygSisJyTg4CGD7YwzT7Nzzz/HF76zjt9CGr3yelnffn2sQ/v2vj+PNghTa1avsRXMT7V0pc9PtXFDmf+OJ1V+YS/r07/QCvoUWHZOlntVSawSQgghRE3AIFdToxzGuLA0ZbDVvPzyyy5MiLqFSAbz5893Y+bpp5++lwEWkaquIO3qztvK9ohVqcCYO2PGDH9uP+200yrtbEQ14nhMO4IAkwx/Hxg82IUcIkQFG2Y6CFHeVMm0vF26dHF7KfVG36gKRMe67CdCZEpt73G1ub82Z5qtYMVIZEZgBxh9kM6wlAr2iY5cIE3Srgu4AJP2WWed5Qvi2Le//W0f7cHIjGj+awvh/nBHjo5KCAYzIYQQQtQfrco3WWvCAM6db22mTrM2H39ibd8dbW3fesc/+Z/1refMs9bLllursvL4nhUUFOZb/wH9rW27dh7yb/Wq1bb8ixW24osiKyleY5tIv01r65nVwwp651mffr0tv3e+/9++fUXYXyGEEEKI6lITQ1rUeFdTA55oWTAVB8IEQkyyiEZRD6jaihLRtDIVr4hcELZLJl4xOBzRjflrw4B3wKMRDyJ+D5GbkjFkyBAvF3Ppk05VNHU7XiblpYyHHHKIe8QRJjITDw/ZN8W+pjb3v3C/lXhVQbMVrKIK/MCBA2sVO5Z9SSOQibpfU7jAHnjggVZQUFB5Q+MTAWvNmjU2ZcoU/44AFeDm9+GHH9pbb73ln/wfYDu250ZQUlLi35mnijBEpMv2eHulg5EPuB6T/jvvvONpZTLqQwghhGiRxO6rrb9YZm3HfGTt/vqYtf/Fr63DT/+nYvmv/7UOP4sv/xX7v/J7/DO2Ddu3e/Qxa/vBh9Z66RfWevt227ljp3tULV+6wlYuX2Wla9bFDrPNPadyemVb774F7lGVX5hn3Xt2i73cVW/kqBBCCCFEoLpGs6iBbu3atT4/EFFjooN9iSBDSOe//e1vHlWGT/5ne2wN2DoCGLFZ9/HHH7s9IgqG63fffdeXRCM2Id4IwfanP/3Jj8GUB0zHkJhGSJ9j8huRdMI+hHzDmyqwcuVKDx83efLkPf5PlrdUIMakyjNwPNLEeytE2sHmsnz5cnv++ec9XyFvrGtu9phgw0IISiYgMR9sIF34vkyICl6IIYhRVeGhtuNeXwz8DvPAB8rLyz10HYJV9Df2w74H2BGxwyUDj6zgTUT7NncyLS9z8SIAYstkEaKpEb03VgcJV7Hr5z333POj+PdmBaJMEHWOOuqoWsdq5oFg4cKF/h1RqbZxUXkgIb0jjjhij5svcBMjniPeUIQJxNOKubRwMeaBCoFp//33dw8tHpoeeughfzAjlvL06dN9biz2Za4qbpzjx4+31atX2+bNm33hBsqIBtySeSA6/PDDfR3bkj7xgUNMZtJlHjDiwVKHjHzh4ZP6QMTTCAYhBNRlCNNU1PblRDQfMGzw0sIIzJqGtuU+Vrqu1MrKyyw7Jzt2D619CIlW69ZZm08nW7uXX7N2z71obfl86VVrhxfVpCnWZtZsaz1vvrVetNg9qVqvWFnxyf+x9fzeZup0aztxkrWZHNt+xkxrM31G7PcltmX9BltVvsU2bNsRy7xZ5y6dLCsny3J7Zbtg1b1HNz9HauJNLoQQovnA/Y37ZFlZeeydMNu6dVWIpJZKEDV4TsfGgLiCQT0dGMhaP/hw/L+q+dlVF9uuW272eYewDXAsRBlsF3iWYDcJ67FpYFfA7oAogV1j5syZbshnbijWBTsLAgZ2DbbB4B8VMbBpIEoxoBcPjPCOgN0EQYd5uzkmz0TYM1hP+thWQjohfcQnBK25c+e6uICYxPlDvrCn4PGD7YaBvsG+RJ6wi1CniXlLBWlj48FTBEN9NPIN7cQcPNQZc1BxXOqLwcaIfuQVew3b8fyLzYfykU6wx1AXDDLOzc2tta1qX0CbhfnWg8AD9FnW03bYvxh0zeDuMC87dUL70LeoL/oX9YgQUlhYuEfbUKfsT7+knkiX8yHMh8vvDM5mX2xroW5pd4RX8oUohcBCHUfPJexttC3vJQcffPAexw0hAWk7QuFRjkQ4FvvQhvRB+kGyZ/rt27f7eo5PumxLPybflJd+zHxbnB/YROmniD4IgfRbtsWeN2bMGJ82hLJh+0vWh9keIff111+30aNHu+2Q4yD48Q4W6idKdB/ywDGoO/IQfZfPtLxsQ5rUH/tQf6mOS/rYSUNZmIKF85v8ZiJKClHfcK9kqc49lm3ZJx3Jzt+6JtPBGVUR8lpUVOSf6Wi2ghWjXbiYA2H3amvo5AGBBxmgoRB5akM6wYqbKA8sRx55pN882JaHkmOPPda+/vWv2zHHHOP7cKN89tln7fjjj/dJCLnIM5kj+eOBios1NwbS4abLhfqrX/2q32i5GZAuaZCHZIIVN2w8qnj4ueWWW7zMLNyEeQhlu5oaCoUQzQuuF/VNba/jovnQ6ASrWP8nnF/7J592j6p2z79kbcZPsNZLllorjBspRlPG3rjiXxKIbd9qw0b3rmozbbq1mTLV2i1YaB1i9/I2ebnWbeAAy83PtZzcLOvavau1bVcx35UQQgjB/U2ClQD6AvCcnolglelobkaKY0Bbe9XlLjZ98cUXbvTHRoHBHFsMXhFnn3222xkAAQgbB89uV111lZ166ql29NFH+0BajNaIUFGxBfsF+5Dfgw46aA+DHKJBsM0MHz7c3xEwimOop4wXX3yxT7eAbQRbCDYPFkQIjPoQ0t+0aZPbPq6//nq3t4waNcrrDTGD45AfbCrYXMgfecXugl2GY2dqKMT+QjsgnlEnlDuAHYa6QVQ44YQTrH379n4cbDoIM9ddd52vp74QW0gDYzz2mNCeTV2wog9R54n5py4QJWm74K0UFas++eQT90wLHlqIOLQtAiV9EYEjeEaF/TkG8FsQq4D+8NJLL7nwhADLMQFxMYhQ9HHaPfE8CvXPPon9lTIgnC5ZssT3J+1kkCbb8I7D4PCoJ1iAddEyBfEWwYz6Q6SiT9PXOBdIi3qgDC+++KLbIOnX1B2fCDrsh+0wnKuAB+I//vEPLxNiEH2T7aln5p3ivSMqmAJ5eOKJJ7x/si37kBfsjuzD9tEyZVJeYDvS5Bzn3EtmE0BY5nwI9U4+n376aRfMKGu0nYXY1wThKlPxim3SCVeZ3odqA9eTuiDkNRPBqtkOw+XCHUgUhGpCNI1o2rUBQY2bAw95LNxIcEtnVBAPItzoAhjkgrAU4IbK6AweqsJoBBofjzI+uajXBm4I3Kx5yAtxhLkhkS+8rYLHmRBCCNGSYf6pDvf+3tr//g/WdvQYa7V2bfyXGLzsHnqo2fnnm331q2a33GJ2111m99xj9sMfVnzy/7e/XfH7BRdgfbHYjTeeQOzeG3vp6jDuY8t78ikb9Nzz1nfVCuuZ1d3aaX4qIYQQQtSSTEMPJYY1wkaBkIJdA8EFoYDoLtgmEKQwWAOGLgzWgPATBAfg+8knnxz/r+aQB4QARKdoJBgM+9gzMFojiiSCoRthLQgA5B2jOEZyjPYY6+uKAQMGuFEeMQVDfgDxCdsLBv3gfYPggLhy0kknVQonwDakg8iFSNKSQYREHMVGxjzwd8Wep2+//XYfbM20HogWDLTO1NBKf6X9EZhCf6grEJnIJ55CyUJCAsfEDkifwzZYHegP9KEbbrjB/uVf/sXuvvtu+9rXvuZ2PM7L5557zvtU+J3l6quv9mMiWoXzExC38aiifyGsfu973/N6vfPOO+3MM8/0OqLeEZsCHB+xD48tBrmHffjEfkh/R1iLnk+ZljcIzUH0ywTakIXrQPT8EaKxUZ1wgZneq5sLzVawagpw40D1f/DBB30htB8i1Iknnug3kqircHTkAjBigZFzPOCFB8EAD0HcoHnw4WZTU7jB40LMgx1CWlhwH+aBMNWNVgghhGgptJ6/wNo98ndr+9wL1mpVccXK7GyzE04w++Y3KwSpH/2oYkGgin4PS7L/2Q9x66STmLHZk229erV1fOVV6/S3x6z13PqbT1MIIYQQLYOaCFVREFXwziBUGHMtYYNgoG3Ui4QBvxi/GQSM2JJIoq2jJuA1c+6557oXUmL4r3TpY0uJDgoGDOmkgc2lNvaURCg/nh4IYdHR5QxeBuox5BUj/3nnnbdXffF7XdRXYwIxMYRbTOVlkwyEP+xSiHhRkRKBAqGPQdzYszIdcI6o9N3vftduvfXWSi+sTAn5p+8k83YgjCGiC/lBaEsF5xNpMPgce2GmcEyEV44R6gFbIQIu0Mc5P8LvLIhFhzKoLkY0T9QX53EYDB88mhCq8C6jD3Ne4DkVQPDiHOe30047zcUi4PP000/3vNDnE8ueSXk5F8knxyfcYyYCJLbUm266ye644w6/HgnR2KmucNUSaLaCVVTEqc6FPhXRNBIFopqCW+4//dM/2c9//vPKhVEhjDCq7TG4mNfVAxajGHAFDgsPVNx4Et2ghRBCiJZGm48/sbZvveMh/GI3X7NDDrHYm+5u4QnvqcsuY0JNs0GDeGOt8LoKxhE++Z/1/M52l15asV8QsG6/3eyww3gbtVZl5bHjvRs77viK/YUQQgghqkkmI7UzMaBhd8BrCvsFnhoYpokAExVVsKVgm0CMCIbs+gAPEgYA//nPf7Zf/OIXlTYWQqE1BqgT5mKCEA0HzxOEFwQSBh1HwfMED6Hf//73e9iMiILTXEB8YF522g3hAgEjU4I9ioHcUY81QIz5/ve/7+JTdUQw+id9OlNCmEc8jhBWCF+YKJgC4g8iJPY5tkekSwaRjAhRibcUolGmcMxkofLwguTY1G103rRAsn3C9rQN53Q0rxzn8ssvdw8upl4Bzu0guhLOkf2jcG2gPRJFLsi0vGzDOYLgR3tnAu1Yn9cbIeqDTIWrliBaNVvBCtfuQCaxEasimkY07X0FNwouvtwcEm92jDLhIo77b20u0Nxo2P/SSy/1kSaJyymnnBLfUgghhGiBxO7BzDPVesXKiv+Jj37jjWbf+57ZGWeYYXhIGLWbMbzsMc/CaadZ7KZrdvPNFYJWDDy5Wi9eYral7sLUCCGEEKJlkKlXVaZgkA7RYRAREj2WAlERq65BOHjjjTfs1VdfdcM4835feOGFvowYMSK+1b4HDxdEhBAWEDsTHld4piASBFj317/+1ecYx6hPKLZQnkRhq6lCiLc//elPLsohLjDvGJ5ImYJHFHOlERno4Ycfttdff92nrajLMI7p4DjM2YRnITY4wmPiJZcKvA4Rz/BGpH2TgZ0P0Yf+zDz2tR2AzrmYTEBLB/0weDQRXemRRx6xSZMmuY2RfCVCPVAejoMYx5xiiUsI5ZcoNmVaXvLEOUKUp9mzZ8fXCtF8yUS4au6iVbMVrFDgA8SJrS3RNKJp7yu4sHOD5kGHyQ2j4GbLyAN+rw08SPEAgHtv4o2Jh4tkNyshhBCiRcGgkTBwBEMML4XVGJmZEaRLmiHdFKMyhRBCCCHSURdeVVEYPPvJJ5+4dwRi1eLFi23q1KnxXyvA2IzhHGNzbQ3wqeC4GLIxajN3D+IB3joshIxrLFBHgwYNco+SkpISN+QjDCTabqhTRACi71x11VUe1iyUp7nMyUOfQMRhoDSCD1461bExIZJec801dthhh7k3EILHM888Y/fee689+uijXrepPJnqAmxy2Abp3/TrqsQy7GuELsSWlm4+ePow3lDY+jL1Jqpr6G94UpEP7I2Iikxh8rvf/c6/JysndYDdlLB9iQv2yVRkWl76PnVNP0n0qBOiuVLVPbk5i1bNVrBicsAAIxgSXU+rA/uSRiCa9r4Ed3JGoDCiI1y0mawQl3fcjbnw1wYehHDvnzBhgo9W4YGJyRQnTpzoN6pp06bFtxRCCCFaIO3b267+/WxXYXw06OLFZn/5i8VukmajR1vs7Yy3t4rfqgsv7AxI+eADs9//3uzhhxk94z99mZ9nX8aOax33DuMhhBBCCJGM/LMuin9LTnWEqgDzXeMFRChAIrMgIhAeLWqgDh5YzPNTXwZ4PJUwmCNOJQtz1pjAjoO3GYb8pUuX+iDhXr16xX+t8FhBzCLaDeWpT8+0fQniwwUXXGBf//rXXbAgLCCDpasDbc3cTUytcf3119vIkSM90hAC6lNPPeV9sb5EK4Q2og5961vfcuGNcwGhMRW0Ix5YwRMp1VxMzHVGetj3EGL3BeQVce0b3/iG3XbbbT7/FaIqecbbCu+/RC8x2gKRizCMqZazzjorvvVuMi0vka6wf3JcQhUK0ZJId3/ecXDj8SKuS5qtYMVNKsQHhnHjxtXII4h92DdAmqTdGOCh7+qrr/aLO6MdfvSjH7m7Li613Pjr4kHtyCOPtCuuuMJHSf3sZz+zH//4x/b222/7BKCMZBFCCCFaMjuPGWU7zjjNvuzWtUKcYjAHAhPzV7H89rdmzJ3w2WdmS5ealZSYlZfvFrL4ZJQg6/md7V5+uWI/9o/dd10AmzyZmL/2ZZfOfrwdxx5Tsb8QQgghRC2oagR3KjZv3mzvv/++20wIwYe3CfNXsf6DDz6oNMiHcF540SBuRe0yfE8WEQcjNoLNmjVr3BspgPiAJ03iPOXB9oFwFU0fry4M7HUBQgOGfMpRG08xxClEKgQrhBVEjKjthuPgfcT0DwhXURBF9pWIUV/geYT3DG0bQsdVF7zUCJV46qmn2je/+U0Pocg67FiJwkpdQ//GIwkY7E67pYI80vYILummLjn44IO9DzBfGX14X8K5SIhAxKhbbrnFw1oShjF4UtJfOVc53zk/CHuYaqGukpFJeREIGZjP+V0X4RKFaGq0NNGqzT333POj+PdmB5Py8RAAeAZxs2dUQKYjVLgQEgeZEHvAfsTVTXWRrQ48zJ144ol+8a+KdNtyYzjggAP8xsw23Ji52bM+CkIbNxluJgHSPfroo/3GAKRPGqwPUGZGMeBSz2+4pJ922ml+k8q0HoUQzZ/oi2F9URcivGgeMDqXezoDSHjJrQm8FJeuK7Wy8jLLzsm27t0zn5A5ypfZWfZl7MWz1abN1jr24tmqfBMWHIu9cZt9+qnZhAkWe6MzmzKl4vvY2IMmA2E+/rji+/vvm739ttk771QssecOF7hYPvywwmsrHvbiy9hzzY5zz7JtX/+a7Tp8eEWoQCGEECIC9zfuk2Vl5ZaVlW3dutbs/iaaPsGzhOf0rsef7t8TqYlQBaQ9NvYcQ4QX7BEIVtgHmG8J+wmeQ4S/C/MtsZ4waAgueJcABvs333yzUoDBfsPgW8A4TSgyDPsIWngdETKMcGRz5szx4/NuMHz4cP/EGE76HJvfSRtb0HvvvVcpeGHvIH2EDAQvPHrII0ZwjhdAcAjRZEL6gIGctBHRCOvGJ3mO7psJbE95KDe2JWwtYQ4wIH9sQz0RSYdyI+QQ+Wb8+PHenpQf76tQv+SFvEXrsClBGekz9JNM8k/9/eMf/3B7HftQ7gD9kLYmRCRtSXr0j/ok1D/HSexPUVhPnujTtD1eTMmgX3KuIGgOGDAg5aD50Ffpm4g+ieUM/Rw7YLQvBzgG9R7tN5SDOcGIMsW6aFmwM2JbZR+Oxe/0V9Lh3Yxtk9lcQ59NZUPMtLxsR90hQiL04r0pREti1y03W+sHH47/tye77n/QWt9+S/y/uiWVR2h1CdeTdIJ9oNl6WAEXOQSWAA8Ezz33XEbhAdmGbaOjV0irsXhXJcINiIt3VJCqS7ixBFf+VDcZIYQQosURuyfuPPJw23rH7bbt29+0nSccZ19GRTRGdSJWIUAR1g/vq//7P7Of/KTCe4pP/r/vvorfX3ihwpuqtDSegNmXsWePnccdE0v/G7bpu7dZWeyFdNPmLVa2sdw2biiz9es22LrS9Va6Zl3s/422fXvdPFAKIYQQounTcdRum0iUmopVgHEZbymEAaYRwGgNGMRPOukkN2wTji0YpTBuE7kFgQXDNlFb3nnnHbdfINgkwvrTTz/dp2PA6E7Um48++sjDhjGANtEwz/+EJCQ0IeIBYhViD6LOJZdc4vlCyMX7q6Zg1D/qqKPc8I5IMDn2vIa3VU3AKI9gweBgQp0lgjGewdLUIzap4I1FXSMOAjYr8tISoT1pa6AdEr1y6GOso/4yHXCOqBJE1fqs19D2CC+JnoKBIPxgJCZMYkO2MwIgdj/6G+dQ9NjkJ4TjC7ZRzlUiMzEQHnEMz6voPtTrhx9+aA8++GDKUH6Zlpd8cU5Tb+QtHeQf0Tedx5sQTZGW4mnVqry8vOGufPsIXMATY8kykoELIg8IwXOJix4PVNw4onNWAa7tI0Y0z7iQQghRW+pqxEU6mssEw6L28PLBqElC4tZ0vkZ/KV28wIqKV9qQoUOsT5+KEaq1odXatdZm+kxr8+lka/35HGu9aLG1XrzEWq0u8XB+GRN74fsyN8d27TfAdg3cz3YdMMx2jjjCdhz6/7N3HvBVXGfefukIBEICIToGA67YuGODe+/GvSeOk3VsxxsnmzjFu1l/u/t9yXo3idPsxHFsx3EvuHfjjm1scO9g0xESVSABAgHffY7uEaNh7tXcq3Yl/R9+wx3NnXLazD3z/s/7nt1sVeeuTpjaXLPZtmzdYlu3bE18JrpyiaVnXk8r7N/P8vvkJ06R2WhfIYQQ7YMtm7fYnNlzbGlpmY0etaMNHtT43zfRdvCGXj69V0OqSdkbI1g1BoQEhB4M3Bju8ehgHm48tU45Zft5tvCmweiMYZxBtA0NoPXnR6wIe5Q0BT49nB9bE0JaQ5x66qmxPIfCUIeIbNQjA5S9MNje8IJkqjYQBV42DzzwgAtPh5DBewHCB38jjFBmCHwHHnhgrEHXiILM3c45zjrrLCeMxMW3YaIVIcyma3d4Qz3++OPufYa5oXbffffkN/UhH/fee69bZyoQ5vkKg6ffnXfe6drj2Wef7SIhBaEc7r//ftdWmeMrLPRGlTvlhtiMByXlxjm5Nu/7iHl4WPE3ZeQjXXAMNlfOxTriLoIi7RdhlbpCCCOsYKroGHHyC3jjUe9cgzRECZL+XJQPttygI4MQ7YVUv+1dP2maMLhBUoXqzBR/v77PNAgN0K5DAnoYxcMPWDAeLg9MRk8wMmbmzJluYZ1twRi3PKCZSFHzNQkhRGrojDY3zfHCKdomuRQSsB55eU5k2rz3XrZlrz1tyx67u2XzTuNs6+hRtmXH0bYVEWroENs6sNiFEtw6fJhtGTumVpRi/333tpojD7OaU06qXU4+wWqOONztszVx/o0bNzlvqoqKNVa9vtqqqzfaxsRCfvoW9LHC/oWJl9LaUL9CCCE6HvweKCSgANpCrolVgCBAv55PaCicnd8fgSuO8BA+f1MTPD/iFUIa8xKlWxhgFRYL4kB+ERtY4uS9rYLAgMcMgiRtgDJtCAyf7IuAgjcNISTLy8udSIG4h4cenj9xRT6Oox1StxMmTHDniAuef8y/BITmo75SQXqoS67FJ9N3RKWR/DGgHsEH8Yd2FKY5QgKSJsQ6PP+C5cq7F9dh4D/iVjD6FMcg1mF7RSTjnuYYjkU8Jm2Itt5ZIIo4+QXygG2Xc+OIEDWoFdsEgxsxsjNlSljIE6I9kCo8YHOEBmyqAer+dzlOSMAO4WHlIXYxcX99zOSG4IeDOZ5yNQygEELkCvKwEi1JrnpYpaLT2krnfcVcVMx15T4ZpYTXVaLThhCVeCtOfPas/ezf37b2iX6hI914WJUuXmrrqraFtenarav1zu/tRKve+b0sr1eevKyEEKIDIg+rjg0ilf+kz9Bl74Pc30FaU6yKoiEPK9H+YeD4ww8/7AainXfeeRmJRUBbRzSi3cf1xIsCAQiDaqaebIgnzKkF55xzjhUXF7v1VCAk4QFEmvEmSiXOEP3pkUceqfPcai4RNh3eYxEo1zhp8MdQB5l4BsbN7zvvvGMvvfSSE+GOPfbYyLqmTWCjSCceCtEeiBqY0tReVvKwamYoGEYDEA+YhyYPNR5gLP5BipKPAo9XFZMl+sIUQgiRGjqEzU14RJjouOSsh1UqenS3rf0KbGvxANs6ZLBtHTnCeVs5zyq8rhJ/u+2Jl1s3/1Vi/1TQX+neo9aDasOGahcakG2EBtywfoOtq1pn6xOfG6trv4MunbtYp87td1SuEEKIbfD7Jg8rAZ33OjC5Vh9GZecSDXlYifYPQgheM7QF2kEqAScVrn/cvTYEZFxPvCgQu7I51nsHsfjwhOnOQ1qxPeLJhFdUKoGOAZtMY8K+rLeGYMU1KVeWuMKTPyZTz8C4+SW8IPsgDPI+GJUurhvHU0+Itk6Ul5U8rIQQQogE8rASLUlb87BqDggDWLZ0mS0vW27dunezHj17WPWGjYml2oXr4MWtR8/uzgDQu09vy+/Tq3ZUpLyuhBCiXSMPq45N0MOq04SJbj1IrnlXAaHYmJeGvj6eFaJjgmj55JNPOpHhiCOOcGHkMvV0ak0wwD744IMuTOTEiRPd3EmtITAJIToWCOY1u+2T/GsbTell1RoeVm3n6S+EEEIIIRzde3S3AcVFVlBYYL1697LikgE2dPhgGzio2Pr0zXcv+OvXbbCVK1a58IGLF5Ta0tJyq1i1xs2DJYQQQgiRC+BhQpQbiVUdG7zrzj//fCdcTp8+3c1N1ZbAM+jCCy90XlOzZs1yYQKFEEJkhwQrIYQQQog2SM+8nk6oyu/T24XcKOzfzwYNLbGhI4bYoCEDrV9hgRO2CA24pmKtlZWW2+KFS2zp4qW2cvkq27C+2rZskaO9EEIIIYRofRB9vvnNb9oll1xi+fnR87nmMoQqZw6ryy67zIWsE0IIkR0SrIQQQggh2iDEZkeswsvKh/rrlvjsW9DHSgYPdMLVkGGDrP+AIsvrlefmuapcW2XlS5fb4oWltmRRqa1YtsLWVa13IaSEEEIIIYRoTejfMv9RJnMf5RqZzPckhBBie/QEFUIIIYRoo9S+1He37t27JbfU0qVrF+ud38sGDOxvQ4YPSoYLrPXG6tS5k61ft95WLFtpSxYtdV5X5UuXWeXayhaZj04IIYQQQgghhBAiCglWQgghhBDtFEZ3EjqwaEChDRpaK1wNGjzQCvr1dRNBV2+otlUrVlvp4jI3z1VZ6TJbW7FWwpUQQgghhBBCCCFaHAlWQgghhBAdALywCB9YMmRgrXA1tMTNe9WzZw8nUFWsXmNlS5jnqjTpcVXl5r8SQgghhBBCCCGEaAkkWAkhhBBCdCDwrMrvm28DBxXXznM1fLALHdird55t2brF1lSsrRWuFiyx8rJlVlW5TnNcCSGEEEIIIYQQotmRYCWEEEII0QHp0qWz9eqVZ/2Li2zIsEFOuCoeOMDyEts2b97iPK6WLim3JQtLbVn5cltXtd62bJFwJYQQQgghhBBCiOZBgpUQQgghRAemU6dO1qNnDyss6ufCBCJeFRUXuW01m2ps1craOa6WLCq1FctW2oYN1bZ169bk0UIIIYQQQjSeDRs22Nq1a92ybt26RvU3GWRVVVVVd77q6urkNx0T8u/LgnKOAyHD/TGNrY/mIpt85TqUM+XdEvnK9lpNea82B1988YVdf/319sYbbyS3tC3aevqbgk6JB7gsDkIIIRoFndnmpm/fvsk10dGZPXu2ffbZZzZ8+HDbYYcdklszg5fYr+d9ZUvLS23M2DE2dOiQ5DeCF47qDdUuNGDF6rVWubbSNm3cVCts9ehufQr6WEFhX8vvk+/mxRJCCJE7EMJ1zuw5trS0zEaP2tEGD9LvW0fCGw357DRholsPUjNrenJNiNxh9erV9sQTT1hpaWk9w3dRUZGdcMIJNmRI/OcYx/Ou8PzzzzvBytO5c2cbM2aMHXfccdazZ8/kVrPHHnvMPv/88+Rf6enTp49deOGFVllZaffff39sEWzy5Ml20EEHZXUtPmHjxo320EMP2cKFC93fUYSPgWzKlnf7V155xd5//33bvHnbfLZx64PjP/30U3vnnXds1apV7r3r1FNPtZ122im5R61B/tFHH03+1TDh4zPJV2Ov5YmTr3R89dVX9sgjj7gyjTqOfMybN8+mTZtmK1euTG6tHVxYUlJiJ554ovXv3z+5NT3Nda1ly5bZ008/bWVlZduV+9FHH20jR45MbskMyvSll16y/fbbzw4//PDk1vpQ/g8++KAtWbLEzjzzTBsxYkTym+3xde7vveYmTvoh7n6ZpJ/nWc1u+yT/2kbXT2Yl1xpPU4mm/tnLs6Uh5GElhBBCCCHq4EWlZ15PG1Dc34YOH2SDhpRYQb++1rVrl0Rntdp5WREmsKy03NauqbTNNdteZIUQQgghhIgLwsMDDzzgjND5+fnOkIuRFmM5hnQM1EuXLk3u3TAIQo8//rjz+kC0OOyww2zChAnWvXt3+/LLL+3hhx+uJzTl5eU5gSfd4o2shYWFbn/EL9Iata9f+J79unTp4gQAyOZaHsSBoHgUh6iyZenXr19d2S5evDi5dy2IMM8995zNmjXLvRMg8u2+++716iN8TBCudeutt9ozzzxjK1ascOVOvrp1qz/Ijb/DeQ8vvXv3rn0vSZQJ5eHJNF+NuZYnbr5SsX79env99dfT1iFtd+rUqU4Mo+0iVOy1115WUFDg7oH77rvPCUYN0VzXokzvuece9z0C1QEHHOCW4uJidx4E1a+//jq5d2YgdFH2CG0IwlEwD/OOO+5YJxwGBbNUkM6WIE76Ie5+npZKfy4iDyshhBCNhk5DcyMPK+GRh1XLgiC1fv0GN6fVmsSybt16t42Xhl6986xfYYEVJBZCCHbu3Cl5lBBCiNZAHlYdG2/A41MeVqItgCfPjBkzXL9+ypQpzpgL9NURBz7++GMbN26cnXzyyU78SQdeAAgZGNQnTZpkBx54oBMhwIscfB5//PFOhIkDRn8EMAzMeJ3svPPOyW/Ss2jRIne9gQMHOm+QHj16JL9JTbprEXrtzjvvdPf2eeedFymqBGG/Z5991j788MPtypZ396eeesqJFrxLnX766a5fD2x78sknnRBzxhlnJN6RhrrtwfpgW1SeEDQQLagHzosHyYABA+rqIFO4Ft48u+66q/OMo/6zzVdDRF3L09h8kWba+dtvv53csr0XF4LPvffe64TWY445xrVPf37Knjrh/XePPfawY489NuW1m+ta/t7Co437ivsLQRa4JqHrpk+f7ryeaBtxy93j2z7v+enuT592OPfcc1PeB95DKRMPuMYQN/1x98sk/bR/eVgJIYQQQogORZeuXSy/T28rGVRsQ4cPtoElAyyvV55t3rLZhQ1cuqTclixaaqtWrLKNGzcljxJCCCGEECI1GEEJS4Y4sP/++9cZMwFj+L777uu24d2yZs2a5DepKS8vd14hGLExtgeN+njf4GmFcR1jMIbjOGCgnzt3rhOe4g6U49wzZ850Asqee+4ZS6yCdNfiXKSdsorj1UMIweXLl7sy2HvvveuVLWICZcEn3kJ45ADp/uSTT9wnZe/FKqA+DjnkEOfxgSAY9rIifYgW1ClGeEQLPG9SCSsNwXnee+89l0bK0AtI2eSrIVJdC5oiX7TfDz74wLXBVAIL6cXjBiFs7Nix9c5P2e+2224uXYTiSxeKsrmuhdCLWIRHG+XgxSrgeETlXr16OQ83xNVM4Xq77LKLW58zZ07K+5N8DRs2zKU/3AZbk7jpj7ufkGAlhBBCCCFi0LVbV+vbr6+VDCmxIcMGWf8BRda9R3f34rhyxUonWpUvXWbr17WPCY+FEEIIIUTzgRG8oqLCGboRacIQYYMQZQgPGMsbAmM9AgOCAiHewhCaD1GC68aZfwqBCM+bTZs2OW+noDiSDgSBBQsWOMEgrsjV0LUQTPgOwSCuYIVwQOi6qEgllCshBzmnn+uLMqFsKCNEgTBce/Dgwc7ITlkHmT9/vsszZYwHUlDQyAbECARIrjdo0KDk1uzy1RCprgWNzRf1xpxFtEsEP9p6FLSVk046yQ499NDI+iVP1AteUeQtiua8FvcTc1ThkUUoxDC0V8QY9icd2YBAStoob+6hKBDH8IKjHrhfyGsUtA3ESx+O00MbR4C8+eab7de//rX94Q9/cGFCU4VajNofDy/aBfdskDjphzj7RaWfto9nFkJiR0CClRBCCCGEiE337t2ssH+hDR6anN+qsK97QVm/br0tW7rMShcvdZ5XhKUSQgghhBAiCm8Qx7AeZTjHaI7xHIEEY21DIH4Bxt4oDxjOhdDBueJ4NmDEZt4rvDrwIIkDRux3333XGe0xrCPyxKGhayG+kG6EAcoFQz1eJoRwi4K8Mu8UBvcoYzxlhRCIEOGFH1/O9OtTiWIY2gFPmiDeW4Q8c23Sh7BEHYcN+w3Bse+8845b9x5TnmzylY5014LG5Mu3BTznxo8fb6NGjUp+sz3kCc8bBE7KPwwehtQNeaINh2nuayFScQxzmoXLCGiLHIM3Ydw2H4bj8Pji3qHcU4Hgg8CNcJNKaEJ8RFzjfvJQNsxDxvxetBPuJZ4/iEB33HGHC1MXrFPEW8JwhvdHaLr//vvtzTffrLd/3PTH2S8q/VwPcc3PPdbekWAlhBBCCCEygrmq8nr1tOKS/jZ0+JDE5wA3h9WmTTW2cvkqW7yw1FauWOX+FkIIIYQQIgzGX8QADOBRAhPbvadRWCCJAhEDUoXg814gGNYxsDcE8/hgVGYOGTx34oCRm7B+3sAfl4auhVCCcZxyuO222+w3v/mN3Xjjjc7rA2N72HBP2XF9ypU5woLlx3UwwnNO9vGeOOyL5wp1Qt3ExYtHvr4wqN9www1200032R//+EeXTkINBo376SDkIOJCVGjEbPKVjnTXamy+EFQIDYnIx7xP2UIeX331VbdOqMuo9t2S1wpDuePZRXnhHZitYAU77rijE0uZx43zRkFdMFcW10PkjQMi5nPPPefERu6xf/7nf7Yrr7zSrr76auc5Bsz9RXsA7oGXX37ZeUAh0oX35z5BQMLTKkic9EPc/YJQrrR76sQ/F9szEqyEEEIIIURW8NLv57cqGVxsvXrnuZe2tRVrnafV8vLlVr2h4ZArQgghhBBC5Ap4MHz66afOMJyJ8PThhx86ozgeLkHviHTEuZYXZtgXbw8EMR/2ECP7Pffcs92cPsxFNHHiRLc/IhfCFvshtLAvnjjMHebh+ggeCD6IbmHo40fNJYYASJ4x8j/77LP29ddfu7CMeCVRBniHPf30026eqIbgHAgvCGapwjBmmq9UNHStxuSLMnzttdfcuSdNmhQZRi8ViJ6IK0899ZTdfffdLo/klTyT9zAteS1AYJk2bZo75sEHH6wrd9ruQQcdFCk+x4WQjHgXEaIx3J6DcC3qC++oOOIzwhDnJMQenkteiEN4wrOOvCKAcf8CAhciIGIl87kF90fIQ9ykXYRDY8ZNf9z9guyzzz5OOPvmN7/pvP3aOxKshBBCCCFEo2Auq/7F/W3I8CFWUFjgOvPMZVVWukyeVkIIIYQQok1BqC7ECjwhCKEWBwznGNAxbu+5556xDfdxrkUYtOHDhzuj9VVXXWWXX3658/j4zne+44zwiAgvvvhiPW8N+uOEHsNjC+M6wtbChQudwIHYhadJMCQcxnnEGNL9wQcf1DOkI1axDY+iMFyT87MP5z3//PPtG9/4hpsn6dvf/rYTUfgOj6iGQpn5+b8QhFKFYcw0X6lo6FqNyRdlNW/ePHde0pMJiCV43DFH06JFi1waqGNENfIepiWvBQhjeDZxDCIe5U74QITCVKEk4+LbIOngXqJ8o+A+4Z5AXGtoTifO9cUXX7hz0W7CYg/tnft19913t6KiIhdm03vVkTc88ILpoG2dccYZds011ziBLkjc9MfdLwzPllT10t6QYCWEEEIIIRpNt25drbConw0ZNsj6Fxe5ua42Vm+05eUrXJhAiVZCCCGEECLXQXhCBMD4jiE7jvgBGP7xhBo5cqQLMReHuNfinOedd54deeSR9eYwQmw5/vjjnXEdb42gx8fnn3/uvGaYb+moo45yIhcL+2OIZz4c9glC+LNhw4Y5sea+++5zYfDwpLn99tvthRdeiJw/iXNheCfteK8MGTIk+U2tuITIhkcJohwCRyow2vv5vxBeUoVhzCZfYeJcK9t80QYQsRBxDj744IwFBgSjSy+91OUJbxo8eqjbf/zjH9vlqyWv5UG8u/jii90xHItoQznibUVa4oovqUCYxUsMLz88wKKgTqg3xKWPPvrI1VMqqEfSB6kEYbydTjjhBNtvv/1cGXI/IcCxTohE2v+sWbNceaeaN84TJ/0Qd7+OigQrIYQQQgjRJDCQlBCBg4ciWvV3L7V4WpUvLZdoJYQQQgghch4MyHjMYMRGkIgDniqE9cOQjqE7lfAUJptrhfHeJhjtERuAcHXTp0934gGizt577+2M4yykDw8RvDyYe8iHGwQM9VOmTHHCFefD+wtPGkIBHnrooU5UgwEDBrjPIMwZFSXUcU5EMPBzBEVBOSD8sH+q0IjZ5itMnGt5MskXYgZzH5FOhBwExUxBJGG+IvLEdY877jgnmFEfb7zxhmtr0JLXCsIxiFYcQ9ubPHmyazO0eUQdPNcaA/kgpGZDAidh+QhhiWdYuromtGNUKMuG2GuvvVx74hrMZUYYxFtuucX+8Ic/uHVCCEYRN/1x9+uoSLASQgghhBBNSs+8HlY8aIAVFRe6EaO1otUyW72qIu0IOCGEEEII0TEgNBfiAh4QUV4ZGJoxxkMqz4ggGNAhlSGZcxHOjAFVGOmjwBPj/fffd0Z5vC1IXxz8HDkIR3hDxSHba4VBKPCh2Lz3B2HS8NpAWCLUYBg8axDJ8PBCNAuCEHP66ae7+XLworniiitcGELEIQz3XC8orrE/16dsfX2F8XMApXsPwFOG9BDajrmiomhMvoLEuVY2+SJUHtclzBzzSt100011y6233lonbDFvFNvwBqOdNwTiDG0WccN747TktRqCcqccKafGClbkh3qhnREuj+dDFKQRLyU87QiJmArud/9syATSgaBE+EfuATz4aHOkB2GOudOiyidu+uPu11GRYCWEEEIIIZqcnj17WPHA/tavsK/riDNCb8WylbauavuRekIIIYQQomOBYIUxGSN3lCcH4gsGdoSc8LwzURAWDfC2iBJGOBdGYTxmvMATBsM3whPeJohPcUAgI6wfMA9OXOEp7rUQtgjPhhdGVDgyxL6w4IfIQhmQFgzjYdiOIAOpBD7EGAz9CAOIaggRzGuFd01Q5GE/Fq6JeBCFv4YXeMIwFxHzDFEvlGFUmqEp8hX3Wtnky7c96glBDNEnuPh2SXvnb85L3eHJRujF9957z32fCo4nPdCS12IeJ45588030wowkKrcM4Hwi9wXXDedV95uu+3m6pH7w4f9C8N7qA9lmW3auAe8B99ll13mRFG89Px9HyZu+uPu1xGRYCWEEEIIIZqFnnk9rai4yHrn93J/V1VW2coVq6x6Q+NfZIQQQgghRNsFMYS5gxCsEELCLF++3BnlEZgIy9UQeHlgvEYEigoBhjcKxvaioqJI4YTv8HjCUL/zzjvXCR8NQUgyjM2kEe+UOGRyLUQDQtw98cQTrkzCUH5hzyfvvYZQEeVVg+Ge7wBjfENwDkLxIQqQ3uAxXMuHJMTrJyyekVc8owBDfxQch7dKQ6ERmyJfmVwr03wRmu+aa66JXL7//e/XCZOnnnqq23bBBRe4tki9EnoRIY3zhmEb10d48eJtS16LNvbJJ5+4JUoYYn+Oow3GaU8Nwf1AO6Pt432UCuqPsqf9+3CYYWgvPBsA0Zf6DPPhhx/a9ddfb48++qjLC2XD33feeed2Ihf58959iJ9RxE1/3P06IhKshBBCCCFEs8BIu/z83lY0oNB1yDfXbLZVK1Y70UrzWQkhhBBCdFzoG2L4xUBMiC2M4h6M3++++64z5PoQZR6+IwQfIhHHevD6wVsBwQLvkaA3Et5BeGFgUN91110jvWrmz5/vhDMErYbmNfL4dGIEZ36nuMb6TK6FYDdixAgnFLzzzjvumh7ySF4R9pgTxxvmCaGIGIhwR9kGy4IyY74tyg/RkLBqqeC4BQsW2D333OMM6uw7ceLEeuXHOnlHDEHQoJw9XOvtt9+2hQsXuvRFhUuk3hEMqJuGQiM2Nl+ZXKux+cqE0aNHu/uBNoFYEmzX5BHPJryoqN844m06srkWwhDr3qsoXO7cAwhGwTYIcb25oqBMSSf3OumJgvrzYfqo+2BegnCPcR9xLuoxuB/3zowZM1x9cy4+aWd4EiJIkofg/lwLjyigLaYiTvoh7n4ItNyDXiRt73S59tprr0uuCyGEEFkR7LA0F1Gj4ETHhE4lI8PoINIpzgY6natWr7LKqkor6l9kfftmHtdaxIMQIt26d0s8J7YmXrSrbdPGTU646t6ju/VIdM6DL7xCCCEaB79v/E5WVlZZYWGR9cnX71tHpdOfb0mubWPLZZcm14TIDRCZlixZ4hbmFcIYi1H21VdfdZ5LGMmPPfbYOk8PwPj95JNPOmN7UMzCeI2hmeMRWfge8QJvEub4QawghBhCRbj/ieDEPrxj7LHHHm5umTiQ7rfeessZtw855JB66UxFpteiL40Qh3cI+UJwIV/k85VXXnEGdQSYI444woUYA7xjvIEeUQVjPkZ29sVTijKhDCZNmuQEjDDPP/+8Pfvss64eqBfKDgHo5JNPducNQx1gEyB9pAtvNuqPa1EP5OGoo46yYcOGJY/YBt5LXAOhAzEsnYjU2Hxlci1oTL7CUO+kF0EVrxrm4fKQp+B1SCf54hrUMdvZh3shnUjiaepreW8ryhmxNVzuHEsbPPLII+vaICAOzZw50x2/0047JbfGAxGH5wHCmhejoyCt5AOvuTFjxkTeg9yfiJg+v74e/bMBoYjwkAceeKBrP5wDYYqyII+E72T/zz77zF588UWXLp5N3HOkM4q46Y+73+uvv24vvPCCew4E80kb3nLjzW49SOcrL0uuNZ6gSN4Y/P3G86shJFgJIYRoNBKsREsiwartwQtM125drWZTjROt+IS8vB5OzBJCCNE0SLASHglWoi2AAXPUqFHOc4P+PaG9WAjDhVcH4czwQgrCnDwYnTHYTpgwoZ7BmHmsOA5jOs9CvD74BLxlMDBHiRQITxjeMawffvjhzsDdEIgCL7/8sksvokC6+ZCCZHMt8jh27FhnlPdlxILXFeWDkIQROwgiBdswDuNhxv6UB3MZccyJJ57oPE+i0oxHEenkutTPMccc40LQpXon5xyINrybYXjneuFrkZbwtUj/tGnTnLCCkBjHUynbfGVzrWzzFUU6EclfByEt2HbJG541eP5MmTKl3jHpaI5rIaYgAlLuHOPLnfuRczG/U7hMERURfQhPGG6fDYEYSFoRw/ik/bMtDG2UNNFeSUcqwYf8ED6QPJNuFvJBGNGDDz7YCc7+/L6MqGPEJJ9XnlGULWV0yimnpBUP46Y/7n60PYQzhLe99trLpRvaq2DVqaqqKtpfTgghhIhJU/2ApcNPoisEI6MY3cQov7hx4sMgsn497ytbWl5qY8aOSXSit40EE80DRtSKVWtsyaKlVrm2MtHJ7moDSgZYyaBi520lhBCi8WzZvMXmzJ5jS0vLbPSoHW3wIP2+dST4rfWfnSZMdOtBamZNT64JkXvwTonxGxBz0g1YxLCO8TPKsOtBoCCkIEZgvDDS7duWyKScPNkcky08f7gWhn2M6kFBsalpr/nybRcQZqNE1qYim2shKPs5xFKVO+X12GOPOSHmuOOOc96EmYLn07333usEwnPPPTelGIXH3SOPPOKEsTPPPLPBPPg880wgzw09G7Ktj7jpj7sf5U7bC6aXdliz2z7Jv7bR9ZNZybXGQ/6bAn/PMH9fQ7SPp7UQQgghhMhpMBbk962dz6pHzx6JTn+NrVy+ylauWN0iorcQQgghhMhdMALjPcDSkPCAkbwhIzPGUc5FWLf2IlZBJuXkyeaYbPECIddqTlEH2mu+fNtliSuOZEs216Ks/TGpyh1vQLye2CfdPGnp4N49/vjj7eijj3YRO1KBZxfemHgexXmv9HnGuzHOsyHb+oib/rj7Udbt6VmWDglWQgghhBCiRaCDX9S/nxOt8LCq3lBtK5evtLVrKlsktKgQQgghhBBCiOaF+auY+2z//fd38z1lC15ThHhkfrpU8I5JyEHmyWpuMTFT4qQf4u7XUZBgJYQQQgghWgzC//UfUGh9+/V1I8TWVa23lctW2vp1TRNqQAghhBBCCCFE6zFx4kT77ne/a3vvvXdyixDxkWAlhBBCCCFalJ55PZ2XVa/eec6zqqJirfO0wuNKCCGEEEIIIUTbxYWDz893n0JkigQrIYQQQgjRouBZ1advfu18Vj26W01wPqvEuhBCCCGEEEIIIToeEqyEEEIIIUSLQ6zxwv6FTrTqynxW1RttRfkKiVZCCCGEEEIIIUQHRYKVEEIIIYRoFfCuQrDqW9Cndj6rdeutfOkyW72qwjZv3pzcSwghhBBCCCGEEB0BCVZCCCGEEKLVyOuVZwOKi6x3n94uxvm6deusfOlyW1Ox1rZu3ZrcSwghhBBCCCGEEO0dCVZCCCGEEKLVqJ3Pqo8VD+zvxCvbalZVWWXlpcts7ZrK5F5CCCGEEEIIIYRo70iwEkIIIYQQrUqXrl2sX2GBFZf0t555PZ1nFR5WZUvKrXJtVXIvIYQQQgghhBBCtGckWAkhhBBCiFana7euVtS/0AYOGmA983o40api9RonWq2rWpfcSwghhBBCdCS2bNlilZWVtnbtWrfU1NQkv8mODRs21J2ruro6uTU99EsJW91UaWhuKDOWhmCfqqqqjMuD/fwxHJ/NtZqzDLOpr/AxtJM4cG5/DO00Tlm0JNm2XfLh77tczJdo33RKPCw0OYAQQohG0RId9r59+ybXREdn9uzZ9tlnn9nw4cNthx12SG7NDDrcX8/7ypaWl9qYsWNs6NAhyW9Ea7Nx4yZbUb7CysuWW/WGauvSpYv1KyqwksEDrXd+LzfPlRBCiGi2bN5ic2bPsaWlZTZ61I42eJB+3zoSGCb9Z6cJE916kJpZ05NrQuQ+9NdnzZplb7zxRj0hhb7hhAkT7NBDD7WuXbsmtzbM6tWr7YknnrDS0tK6e4XQ1GPGjLHjjjvOevbs6bYFYT/ePZ5//nkntngaOm7OnDn28MMP110nismTJ9tBBx3k0nP//ffHFov8cWEor0WLFtmbb77p8nr++edbnz59kt/WJ9t8IeI888wzLn9BAaN379529NFH29ixY7frq2MreOedd+ztt9+ul0euNXr0aDvmmGMsPz8/uTU1pJn0vv/++y5fF1544Xb5yyZfHDNv3jybNm2arVy5MrnVXD5KSkrsxBNPtP79+ye3boO8vPzyy/bxxx/b5s2bk1vNevToYQcccIDtv//+7rqpoFw+/fRTVzarVq1y5XnqqafaTjvtlNzD7IsvvrBHH300+VfDhI9fsmSJPfXUU/Xy1dD9kypfHDd+/Hg77LDDrHv37smtorWhPdfstk/yr210/WRWcq3xxBVvG8Lfe9zDDdHl2muvvS65LoQQQmRFsLPaXNDxEwLocC9fvtwKCgqsX79+ya2ZwYvJqtWrrLKq0or6F1nfvtEvc6Ll4WWoR4/alyAEq5pNNe7TLYkXqM2ba9zLFfsJIYSoD79v/E5WVlZZYWGR9cnX71tHpdOfb0mubWPLZZcm14TIbXiWvfXWW/baa6+5d02EDYzsGDwx7i9evNh5fbA9nSjgQcB54IEHbNmyZU7kQLxAhMB7pKyszBn2EVvCBvzPP//cnnzySdu4caMNGTLE9tprL8vLy7M1a9ZYeXl5yuP4DrEhHSNGjHAD8PB+QTDhHLzzRi0IBAgc5HXfffe1oqKi5FnMKioq7PXXX3di3AcffOD+Zv899tjDHRtFOF/77LOPe6+ibH15jBs3rl6+MFojws2dO9edd/fdd7edd97ZnYPjEIoo0wEDBiSPqLUTPPvsszZz5kz396hRo5zo4cuQ+vjqq69cGaZKq2fhwoX2yiuvuHOyb1T+sqkvjnnsscds/fr17hjSRx74m3dO8sUgSUQ5jy+LL7/80qWBcmDh/YSymD9/vtuH/EYNtiMd9913nxOFuA7nIJ2UeWFhYXIvc+km33yfaunWrZtrG9wb++23X106uUceeugh18aplx133NENAqZ98B3b2RZMXzBftCHuk912282VF/cQ4irHhtuGaD2ohy033pz8axudr7wsudZ4mmqAum8zS5cudZ/pkIeVEEKIRtNUP2DpkIeV8PDSIA+r9g8C1aqVq215+Qo3jxVGia2Jf0UDCm3osMFWPLBYopUQQoSQh1XHBiO//5SHlWjLYPS/9957nZhzwgkn2C677JL8ZpshHu+Ps846y4YNG5b8Jhr2wyvok08+ce8PU6ZMqRvp74Usrhf2XKLvSRr4btKkSXbggQfWGfdXrFhhDz74oDP+H3nkkU7wCYJXGCISAsLhhx+e3Jo9eE6RzoEDB9qZZ57phApA1Hv11VfdOv1iBvSRpl69ekV6IAGiBOfCaBzOly8PPo8//ngnSnkQV55++mknbFHufuAgzxu8uqZPn26DBg1y3/ny9cfgQXXGGWe49HuCZZjKa8yDqIMXGmIaRHlYZVNfwXaGpxf59cfwvoj4xXsn4tixxx5b9x3C2YwZM5zARX34/ALtk2ux77nnnlsvz+DbL/XAuyztA4HMnztTfBnvuuuuzoOMdsAgP9LAtcgT272w66+/adMm5z2G0Obx+Ro8eLC7T4KebwhnU6dOdWLgKaecUs+TS7QetL326GGlOayEEEIIIUTO0aNnDxswsL8NGlJinbt0soo1FbaxeqMtW7rMFi1Y7MJ8IJZ745wQQgghhGgfYBzHA2To0KHOIyYIIgEeHhjcGcjWEHip4PGCyEM4s6C4gOhyxBFHOCM/wgTChYfj6G8iiuB1ExQU8FghDYAAEMaHvsNrprEguOGhRL93zz33rBOrgH5wcXGxE5euuuoqJ0A05PmCpxGeTXjyIMQE80V54MnGefEQ8yHh+ORvtvO9F6uA4zkP5+O8nB+Cx5DusHBDGVKugCCXahAsx7/77rtOrEKcDOY/SDb1hZCF0IVgRDsLHoPAg3cRbYNr+zpFsMFDCsh3sD0BYQQRfDDyhz1JyCNiJt8hJCF2UX/B62YC53nvvfdcnVPGfjAf6WVh0O/BBx9czwuRewoxj/r58MMP68qdc+HpR1oIZxgO00jZ49FIfbCfEM2JBCshhBBCCJGT8PLVr7DAevfpZQX9CiyvV17iZarazW/15edz7Ks5X9uK5SvdCEghhBBCCNE+QLACjORhAQaDOqIVIJCkEjo8eNHgoYPIEgy35kFgwDiPcIFnkQfBDJECASRqzh4vwCCSIGIE4ViIul6mIKosWLDAnSscXQJh4ZJLLnECTdx5hRBbKDOEkmCYOw/lQZlTFl6k8eHxEIsQPMIgzJE+zkudAOveMwPBKAq/HfHRi2NhSC+CHfuS31RkU1+k+aSTTnLzORFaLwz5oiwQMkkjIP6QjpNPPtmF/AvD/l7Eok0FQTilLiljPKuCQlI2IL4hECKQ4d3m8fcFdYy3XRg8DUkjbYu6BfJHPim7qOg23He+vny7EKK5kGAlhBBCCCFyls5dOlthUWHi5bN34kW2xnrm9bQN6zfY/LkL7OvZ82z2F7NtyeLSxAtW7cuWEEIIIYRou2BoR1SAVGHhEZjwJkF4SCV0eLwYgpAQ5cmCUMH5MMJ7oQmYJwpjP2Hkgp5XHu9JxH5BgYQ0kX6uh+CBRwrHe/EmE7x3EccS8i3s9eI9ajKB/ABlG1UepJn8BMsWUYNypKyivMZIh0+bF0AQty644AK75pprUoaPQzABPJyiPKfINyEPaRN4x0UJbJ5s6gsBhnCTCIFRZYnXFuVAWfljqFfmfuK4YEhCj29HQYHHM2fOHFem1CXlSL7Yl/RS15nAse+8845bx+uNdHm8oER9ReWLcuQ78uZFNfJy+eWX2/e//30ngIUhfb6+okRLIZoSCVZCCCGEECJnYeQhgtXgoYNth9Ejrf+AIvfitXXLVvdCXLmmyhYvXGLzvp6XeIlamfHLnhBCCCGEyB0w6HtvllTh37znC8Z+jO7poN+IeICBP5N+ImIDnlwY9AnjxvEePMA++ugjlz7CwgXhGl7oee211+w3v/mN/fGPf7Tf//739rvf/c7N9xQ8Vzrwcpo7d64TE4LzeDUGL2akKls8byizoJhBeskT5RgURoJ48WblypXusyHoxxPSkWuNGTMmubU+zHVDuEAEnobmLs62vlJBPvz8YByTqryCEPUBbzC8wvDoGjFiRPKb2nLH84nyo4yZD+qGG26wm266ybWPG2+80c2zFreNEm6wtLTUXSdcNt5zy4u1TQGeipQjoiAeWkI0Jx1KsHriiSfcxHDE92wP8CDkQSzDjBBCCCHaM3l5PW3EyOG249gdXYjA7j2729bEP+a0qqpaZ+VLl1np4qW2euVq27Rxk/pGQgghhBDCUVBQ4AQuBAjC2oXBqO+9goJg9D/mmGOccR4hAUHh/vvvt7/97W923333OUHk6KOPrheKDRB6ENL4npBteOYg5iBUIFogYj333HOxQlozxxDnIvRccN6otg59dT8vFXmLCq2HRxTiD/lmzqUoT6Eg2daXB3GQennqqafs7rvvtttuu815a02cONHNZZUKbMwc89hjj9lf/vIXmz59ugs1eMIJJ9TzRvPtAgHp2Wefta+//tqF7EOMI4945T399NOxbNacg7Kh7e68887bzaOFiEV5UYZ4iYXxHnNxoa2SL2zQzL1FuoVoTlpEsGL0AO6G55xzTp0LZhhuln/+5392D4I4kyZmAzf/tGnTsnLDzUVuvvlm54bKg04IIYQQor3TuXMnGzhooI3beYzztios6medEtt4Qe3WrbutXllhc778ylatXJ14EU4eJIQQQgghcgo/ABsDfnDx3j9NCSHgmAsLAz1iUdAmiIjw4osvpvQKwptk3LhxLnwax82bh0f/Cpd+wqJx3nBYPQQqQuDh7XP++efb9773PRdq7eqrr3ZzJSEkIKh8+umnySOioXywj+LZs+eee253nbbM559/bm+99ZYLI0ioP+8R5EFceuWVV1x7OOigg2KLddnUlwe79GeffWYff/yx8+pCFGKuKQShcPqC4HXEMeSJNowwicAVnr+M9HBOxDps5LSNb3zjG24OrW9/+9s2adIk992MGTOcN1M6yBNzYVEu5DcMbQ/RivRgkw+Ko7QrhLm4tnHSRF2RP8rjgAMOaFdtUeQmLephhYcTKnVTuSN2BFD4r7zySvuP//iP7R4m/MjxcOeBLIQQQgjRESgo6Gs7jhltO+86zgYNHWR5vXpar969rGuXrla2tNzmfjXfli4pt4rVa6xmU7xwK0IIIYQQouXAswbPF8KhBZdZs2Yl92g6sJ3tt99+zgsFcQHPGeyTeMT89a9/dfMK+fmJgmDkZ4A4ghbCwLnnnuuEp3/6p39yIeI4F5472O2CIDAdccQRduGFF9YTSBA99t9/fydmIAIgWAXD1oVBPEFIGzlypBMf2guU2/PPP+/WDz/8cCcohiHviE2IMXFDIWZbXx7EmEsvvdQd881vftMdg9PFP/7xDyfWpAKvLo5hQXzCow9h9KGHHqpnx6WusYfTHjkGUclD29hnn32c9xciE95XqfDeaZwbYZTrhaGt77vvvu5aiGm0ebzAHn74YXffIXjxXUP4doroRbs+6qij6nmNCdFctHhIQNwj33777eRfoiF44KLs47bMgyLId77zHfvqq6/skEMOSW4RQgghhOgYMDJx6LAhNmKH4TZk2CDr2r2LexHkZWrN6jU2+/PZtnDBYltXta7eqEIhhBBCCNG6YPRGiCC8WHBpLmEG75ozzzzTCRkIAhjhESHoN5522mk2YMAAt963b9/kEebmjmI/tk2ZMsXNR0RoP85x7LHHujB1eMIgkMTtayJeEQIOLxyOTeXlgrcP10ZUGD9+fCxxoS1AiEREE7zdjjvuOOe9FAaRDsGHvj5eR+m8m4I0tr64Dk4BHEM7JH0IS4hMzIkVFTYSEIc4hoW6xXMK8QsPKIS3MDgdRLVzzoPACcxPlQrygKDF/unEPMr25JNPdvshUCFcIc4y1xflQzoQaslzKrhHnnnmGeexxjHcR0K0BC0qWPGQBSYajIob2xA8HHhwsaR6UHh4+KCasy/ujnFgP/bnuHSjHFKRSfoAAYpYouzPZ1iQaiw+PywNTUIJmaQn07wKIYQQQjQlvFQOGNDfdt5lJxcesGu3Ltala2fL65VnlVWV9sXnX9qst2fZ55/OtqVLymzlipWxQ18IIYQQQojmAxEBMYB5foLLmDFjnJiDkR1ShQhkyg/sXIgTUd5RUeDRwsBvH6KPTzxqCN2GDQzDfdBbBeM+YgVePqQ3CMIT2zH6L1myxAkCccH4jwCF3TKV3Y3B6Xj3IBDgYdWUIKxAurJFUAqKGdQH6Sa9qeylPowd4l8U2Frx8uG6iEeIO+HQcpQ33jzYM+m34xEV9MCbOnWqq3fSiOdT0CuvOeprhx12cGWAyJnKMysMYizTt1BWeHV5fBlStqQ/CkRTIB+p+Oijj1z5kJ90c0n5PNPOidxFm7/qqquc5x9gy0W8SuUxhbjoPeGY+4u5wYRoKVpUsDrxxBPtsssuc263PHTSCSJBuBH/8z//08aOHetuEBbW2cZ3YVCxL7jgAvdgZ18eFD/60Y9Szp+FeMb37Mf+HIf7LvFS46Qxk/SRb+bp4qZHdR88eLDbn88rrriiTshDCDr11FPddy+88IJz2eShzzxfXiDiXIw44GEeBNdqHkg+PyzEu8XVOfyD9Ktf/comT57sRhgQOzWYnh/+8Id1Pzge8nPddde5h7Y/N+tsi6oLIYQQQojmplOnzjawZKCN3XmMDR85NLFenHjh657oM22wlctXujCB8+YutIrVtRNgCyGEEEKI3AQxxwslqYSFdevWOXsdIgACV1ww4iNaINrwyd8IHdiz8HoJGu+9/cyLCGG4NmlFXAj2LzH041mTSuBoyM7IdT/44AO3jtdZJvmLg/ciw+4YJYwgCJEfygeBBSgDFkQkxJswnMcPDIvy2KEsCJHHJ3NSYRcNi1XAdX25sc61ggtCD+WH2Eedsc3XUzb1Rd0jor333nvu71RwDEITkM9p06a5eaBS1bH3CuMYX8a+DNlG+42ioTxUVFTYF1984eqFthFVhmFIC7Zj2jxlQPnhiUYZ4NEV1b4Q9RryhBOiOWlRwYobCiX3lFNOsT/+8Y8NPhCAh9G//du/uf0vvvhie+edd9zCOtv4LqhMI/j85Cc/cQLMT3/6U3vyySftnnvucTc1f4dBxEJpRhS6/vrr3Y8Kx6DGf/e7320wjZmmD1DDKQdGE3Ctxx9/3IlXd9xxh/3f//t/3f48TK699lp74IEHXKxd3DgR+piIL93oEfKDqPXII4/YNddc4yZyRHhDlGKCxz/96U91D2YPkzgyygSRzafn7LPPtptvvtmJYh6O+9///V83guFf/uVf3LnJ6yWXXGL/8z//474Ln1sIIYQQornp3r2bDRs+1MbtNNaGjRhmY8btaBP22dOGJ9Z58cO7qnJNpa1YttKWlS23dVXrY4duEUIIIYQQLQsDyTHGM0VG2EMeAcDP8cNg68aEy8OGNnPmTGevZKB3UADwnkiIZlEiE4IJ4g7HIgR4CE2HXe2tt96KPA5Bi/5pKu8W8kxIODy/GCDe1BCujjSTdzzLwpB+bHvMLeWFEz5JL9v5Pgzn4XzsF/b6of6efvppV47M34V3VaowfxyPAwL2zKjloosucvtQN3gMsQ0BDLKpL2zIhMpDBIqyZ7KNc2GH9XXFNoQubLupBFUvPCHe+fbJ8bRr2u+XX365XRo5Lw4IQLuOguMQyfie+a6ygXuH/JK2KCGK82MbxlkilSecEM1NiwpW4L2EAOEDNTwdCEkIJ4hQ//Ef/+FuFBbW2Xb33XfbSy+9lNzb3E2FsIPn0L/+67/aYYcd5rylbrjhBjfRXhAeDghCL7/8sv361792HkbEOOUYBBhcge+//373QEtFpunz/O53v9sufQg/7I8IxAOYyRgZdUA6GOnBQ5hJ/1L9GJOfe++91+XnN7/5jfOQ4seNifZ8/vGy+vDDD5NH1MJDG6EsmJ5///d/d0IZP9x8DyjsxJEl7i8eXJybvCKsIbjxHfsIIYQQQrQWnTt3sl6982zkDiOsf3GRde7SyXr37mVdu3R1olXZknIrXbzUVq5YlbaPJ4QQQgghWgei+WALQ7hhHp2gcR+70/z5853oQAjBIHgNYYz3gkEq6AMyQB0bGjavAw44wF0zCPZB7G8Y+L1A5uF4BCmuQ6jB4NxXRDvCpoe4gPgUBIHj3XffdQIA+4W9WxAt+B5RAwEtylupsSAoYWPEHksZBAdxkT7Km3xj7/NCBX8jbvDJ4PXgNC8cj+jD+RDDgoIV+cEbidB4eAThrZNKrGos2dTX6NGjXTtCRKTdBNsZ+fLhCckXAiLgYECYRupoxowZ2wmqnAsxi7QE2ydlSZ3SNihDytnDdd9++21XTjhQRIWBxLkBey7nxV6bqecdAtSrr75qjz76qKuXww8/3ImSQcgLHmeIVswfhmDVkFjFvnibUc/hshAiW7pce+211yXXmw0e0HgPHXrooc7TByWYm4O5rBA9JkyY4P5G/OHGPv30051yz82EGMRN+LOf/azejcQDjvNMnz7dPUQOOeQQ9wDiOuz/gx/8oO5hAqjheFlxY+L9xA8RD9O//OUv7kcCMYeHhocfBR5WPECOP/545wobJtP0+Qc7aUC0C/4Ykj7Sy4/lqFGj6kYIcA3254FFzFBGAnj8uXx++GFGCCNG6fe///16IzU4P2IhHlMo+vwYw+uvv+7C/uFlRpl7yBMPy2XLljnvLs7ly4+yIC1+RALlhsh11llnuXM014+PECJ3CXZym4vgM1p0bPi94yWJl9hwfPK48FKwavUqN9dRUf+ixEtL7Yg80X7o3KWz63vx7Mjvk+8+t27Zaps21biXqQ3rql3/k5ewLl27qP8ihGgX8PvG72RlZVXi/bLI+uTr962j0unPtyTXtrHlskuTa0LkNtibsD3hycJ8Tnj1YFskVN4bb7zh+nAM8N5pp53qDOqEWWNQOiIMIgO2sSAY/BmUThQibGGIGrzHch5scOG+IO8ZeA6VlpY626BPA5GZGJiOmIZXD3Nxee8ewJ7Iedkfu10w7VwbOx82POyEYdEBMQ5hBVGE76M8sNJBvrkmfWAGvEe9Q3NNbHdEW2JKFWyf5AXRiYHolBOeUIgiQbECmyd2QfKCIEO5kDfsnohz1BmCVPD9DLsiA+E5D+dFjOPvqAXhA/tsOtLlL5v6oo1RV5QD5UE+OJ4yoa7Yzj7HHnts3fxm5AX7Ku0Hr7L333+/riyoY8qD9kkZ4kAQLEPfNvz1fBo5hmvSBo866igXqi8MaaPcEc9os+G2EwUeW9iBae/cN1yLa2DTJX3BtMGzzz7r7jf2QbxkfrCoumJhH8Q/bMqUFfWHKCm7TctCO9hy483Jv7bR+crLkmuNh/bcFPg2y73YEK3yZk4CcfHkQfaHP/zBPWyi4CHOqAkU6ahJ+9jGdzx8eGj5/bmxwypxFNy4/PhRUHh74ZXklxtvvNGdC4NYeB4nT6bpawj2R6xCtMtGlebFhLzwoxz8sfQgVBH2j4ciaU8HD/+wSMfxzKuF2s4D/re//a3rCHAuHrr8OMR5YAohhBBCNDe8gCFGDh0+xAYNHWTDRgyxgYOKrXd+7XwF69etd+EBFy9YYuVLCRO4rkXEdyGEEEII0TB49GA3xDaFkIOggkiA3enggw/ebh4kBmrjOcO2oMeTh34eA9fxssF+hSDD9BicKyxWAdsQKkgDwhG2OtKAGIIdDHsftk0EhCBcn7SFj/NePwzaP+OMM+oGgXvw2EEIYN4gbINB4aep8fY9bKcIE6QPWyGGadKHaBIuE/5mO98zOAJ7Kscx0J0B+JyP8wbxfWv2R7Ci/FMtDdkpGyKb+qKu8CKaMmWKE6TIC8cwxxPiF8fgJIAwE4S6ITwhAg1lRtn5OvbCHWkJl6G/3gknnFAvjb4MceCICtOHjRj7K+XI9+G2kwrKH3s0bQqREhGUUIqIfcF7x0MbBH9cVD35JezFyP2HLVmIpqBT4oGxfWDPJgYXSh5qzOcUnEcKBfZb3/qW82C67rrrXBg91Pd//OMfTlhBgLnkkkucK+R///d/bzeygAcOYfcQjW677Ta3Ld3+qMpcD08uHhA8UHjAoFCnYvz48XXpCZNp+vghCKchiE8PoQD9+dJdI1V+TjvttMj5uqLORehE5rsK5zEq7cBDC2UeQY8RCjzAeKgytxZeXUGvNiFEx6GpRlykI+qlQ3RM+L1jMAgjE7ON687v2dfzvrKl5aU2ZuyYxMtV/ZcQ0T7ZtHGTVVWus4pVFVaxek3iRWuje/Hr1r2b9emTbwWFfa2gX1/r3iP1fKFCCJHLbNm8xebMnmNLS8ts9KgdbfAg/b51JPhN85+dJkx060FqZk1PrgnRdqA9Y6PCmI4AgC0rLAR46ONjnG8OLw9EA86NoR8RLVUagmSS9tYim3xRzni0uX50aA6vXCGbfPljgLqKMyg/WBYINhwXJQaFCbaNXC3DOCAIMjUP3nHYoyVatSy0m5rd9kn+tY2un8xKrjUe7oumwLdxvBIbolWfksTDJBQfggiiCTd5FNz4XuUNwkMEESYM2/wDJg4///nPnfCC2h9ecMWNEquCZJq+huBB2pgb3D/wwpBHlsbAAx5FntCFxFZlvi1GG+ChRphDXECFEEIIIXIRhKl+hQU2aGiJDR46yPoVFbhtCFmrVq620sVltnRJuROzajY1vxAvhBBCCCHS4wUHIgkRKi+d8MB3zRWSDGMraSDCUBzxAzJJe2uRTb7Yj/05LleFlmzy5Y9hiRtBKlgW1HUcsQqCbSNXy7AhsD0jWJEXwnNKrBJNRas+Kbn58QhCACE0IOJQEG74XXbZxbmZBif08+A6iZsm+7AvNzoT5hGTM45QhNfQoEGDnPslcVgzJdP0NQQCEN5euNDiSpkpuLXirkpcU9wzw+CaSl4R4FD8M4UYq8SzxV0YSCOTMOIZhxs18VCJvyqEEEIIkbMk3iF79Oxh/YuLbMiwwVYyuNj69E28yHbpbBvWb6gNE7iw1MqWLrPKtVWRg4CEEEIIIYQQoiPDHF7Yiol6EhXKUIhsaXVpnzigP/rRj9zcS4T3CYIgMnnyZLd96tSp9UJOsY7LIaIQsUHZF0X6sMMOc14/4f0RpJ5//vnkX7UgWB1xxBH24osv2nPPPefcMT2sE7IQgSa4PUim6QuCAh08L95cnAMBLRwqEDCWpEqHB1WeY6Pyw/kffPBBJ4YRnjEbELzOPPNMu+WWW+rlFSUdFR1RDjdWIYQQQohcB4GK+ayY12oo81uVDLBevfNc/6lyTaWVl5Y74WpZ2Qo331WqSABCCCGEEEII0dEYPHiwi5zGHGBxPdKEiEOXa6+99rrkerOBx9Mdd9xhhx56qBN4wowYMcKFscNDBy8hJpljMjhgfgrCzP3pT39yyi2CCF48eGT99re/dTfGhRdeWCeUIMgwGeOtt95atz+xEf/93//dCUhACDvOi9DCRIYIToS0QzRjf+ZtuvPOO+3HP/6x+545pVK5j2aavk8++cQeffRRe/XVV23VqlVO6EG8+p//+R+766673JxU55xzTt2NjnFk+vTp9vLLL7v5Wyin4uJidz5/rmB+8DBDWPrzn/9sGzdurHPP/OUvf2mPP/64C9vHnGE+P8xHxffBMgcEKebGQugjBikeWVyXiQBvvvlmt520z5s3z6WbOa3YD0HL51UI0XFoCUNuc4V2EG0PvKjxbGZi3GwnI0aUWLV6lVVWVVpR/6LEb2yf5Deio0GfCI+rvF55bu4qhKzNm7fYxk2brHp9ta1ft8E2Vm90z7muXbu4/g99LiGEyEX4feN3srKyygoLi6xPvn7fOiqd/nxLcm0bWy67NLkmhBBCNB7s13FDLoqmh/LfcuPNyb+20fnKy5JrjSfotNIYvNaB/tIQOdGiSPAll1wS6VmEUHLdddfZL37xC3vqqafs5JNPdsuzzz5rN9xwgwtHFwxvh5cR4sxZZ53lRCf2veqqq5zohKgUZuDAgU7cufzyy+2+++5z+5944ol2991323/913/ZlVdeWVegUWSaPs/vf/97J/5wrTPOOMMdi0B27bXX1jPKEuOWsIlsQ2y6/vrrnWiVigEDBrjrfvvb33b59ef/4osvnND0ve99L+uYoqTlP//zP+2aa65xAiTnZvnLX/7iyu9f//VfI/MqhBBCCJHrdO/ezYr6F9qQoYNs8NASKyzq5+a3YgDQyhWr3PxWLKtXViS2xZ8rVQghhBBCCCGEEPHoVFVVlT7OXA6BoldZWenW8TZqSMFlX4wMhKoLh+SLgn05hvPGOX+YOOlDFMOLCu8lBDrEJxaEnnRij09bQ/sF8ccguCHkNeVo4GBeKd90op4Qov3TVCMu0sFzVQiYPXu2847Gu5h42dmAt8zX876ypeWlNmbsGBs6dEjyGyFq2wfzWVWsWmMVq9fYuqr17jlH365nXk8rKOxrBf36Wq9eeda1m/pAQojcYcvmLTZn9hxbWlpmo0ftaIMH6fetI+GnBeCz04SJbj1IzazpyTUhhBBCtHWYHqlmt32Sf22j6yezkmuNZ8OGDcm1xkFagUh4DdGmfPYQRQj9wxJHTEJIYZ6qOGIVsB/7xz1/mEzTB4hPXLMhEcqnLa5YBf4YjLxNHbommFeJVUIIIYRoT9CP69W7lxUPGlA7v9XgYuud3zvRnzJbV7XOypcus8ULllhZ4rNybZULwSyEEEIIIYQQQojG0aYEKyGEEEIIIVoKBuX06ZtvJYOLbeiIwVZcMsDNdbV1y1Zbu6bSykvLbfHCUlu2dLlVVa1zc18JIYQQQgghhBAiOyRYCSGEEEIIkYZu3bpZv8ICGzSkxIYMG2RFxYXWo2cP21RTYxWrKqx0SZktWVhqy8uXu/CBhBQUQgghhBBCCCFEZkiwamFOOeUUW7hwoe2zz/bxJYUQQgghRO7SvUd3KxpQaEOGDrLBQ0ussKifdevezTZt3GSrVqy20sVltmQRwtUKW79ug4QrIYQQQgghhBAiAyRYtTB+zqq482oJIYQQQojcgXlBe+b1tAED+9uQ4YOd11VBYV/r1q2rbazeWE+4WrFspW1Yv6FuEnwhhBBCCNH0VFdX21133WU33XSTrV27NrlVwBtvvGHXX3+9ffHFF8kt2UOfdt26da6MWTZs2JD8pmWpqampSwPpidPXZiBZVVWVO6aysrJZB5Zxbq7h00h6G6Ily7Y1rxWnLKAl6yvYnuJeK5g+Fp5BounolChcvUELIYRoFHE7HY2hb9++yTXR0Zk9e7Z99tlnNnz4cNthhx2SWzODDubX876ypeWlNmbsGBs6dEjyGyEyY/Pmzc6bak1F4mUlsTCXVc2mGids9ejR3foU5Fvfgr6W36e389BiuxBCNBdbNm+xObPn2NLSMhs9akcbPEi/bx0Jb7Tls9OEiW49SM2s6ck1IVoXjML33nuvbdy40c477zwrLCxMflOfr776yh555BHX5z/ttNOsS5cuyW/qg7H4wQcftDVr1tiFF15offr0SX7TtuC9mnwsWbLEzjzzTBsxYkTym/rELT9AsHr99dft1FNPtZ122im5NTN4psybN8+mTZtmK1euTG6tHchVUlJiJ554ovXv3z+5NTWc5/nnn7f333/f1VGmdYWw8swzz9icOXPqiQq9e/e2o48+2saOHbtdX5v9Zs2a5cohKCrQliZMmGCHHnqom7cWfDtavHix+7shhg4d6uqpR48e7u9MruXJtmxpA4i0FRUVyS3bE05fU9Tj8uXL7c0337S5c+e6+ghfIwjt+Kmnnqp3rXRlAS1ZXxz/8ssv28cff+ze6Tx8f8ABB9j+++9vnTvX9/WhDLFH0I4RrDzsN2bMGDvuuOOsZ8+eya3boM0+/PDD7vhUTJ482Q466KDkX/HgWjW7bR/Fresns5JrjaepBE1fLtz/DSEPKyGEEEIIIbKElyfEqJJBxTYUj6vBA61vQR+3fcOGalu+bKWb36p08VJbtWJV4sVoY9oXFSGEEEKI9g4Cw7Bhw5zRHUNuKjCiFxQUOIP0ihUrkltTg/jRliMaYYjfcccdnXD16aefpuwzxi0/Dwb4xoh4n3/+uU2dOtVWrVplQ4YMcUb1vfbay9XN0qVL7b777rNly5Yl904NU6R88sknyb8yA6M5Bv8vv/zS1THiBekoLi52HjyPP/64S2cQyu+tt95yosSmTZtc2R5yyCHuExBGnnvuuTrxC+GmV69erqzSLV4wQdzx7S3qWocffrjtvPPO7rxcC5EjKIxAtmXL9YKiXRwaU4+0SYSu22+/3Q0eRSzNz8935RUWCYF7FjEJsYpy2n333Z2g48siWO6elqwv2hNl8cEHH7j5ikkf1xo9erTL62uvvWYvvvjidvcgZUhbo81Rhocddphri5yXtkkbDQptHs4ZPpdIjTyshBBCNBp+fJsbeVgJjzysRC7D89B5XK1e47yu1q9bn9i22Y2669GzhxOz+vbrk3jB6+3mvxJCiKZEHlYdG28M41MeViLXWbRokT3wwAM2YMAAO+ussyK9EuCVV16xGTNmOI8HvCui8J4WkMrbo62AmID3FJx77rkpvafilh+eKu+8846dffbZNnjw4OTW+Pj0YKA/5phjnGHfCxS8Uz355JPu3WyPPfawY489NlK8gPXr19v9999vZWVl7m+EhEw8rMjDSy+95MqD/Pbr189tJw3Tp093Xj8IEnicIWJAeXm5SzvixwknnGC77LKL2w6IZwgW9N2nTJnihIo4IHRQ7ggxwTINllP4Wog3Dz30kBOrSDtiIzSmbEtLS115Ug7nnHNOyvr3NOZafI9nG55I3FsHH3ywOz6VOBz0fGI/vI68p5IvC+oEjy4EPU9L1pd/riA68cwIlp8X2ygD7sGBAwe67f5ciHuTJk2yAw88sK6cVq9e7b7j8/jjj3f5DuI9Hffbbz8nZDYVpFseVkIIIYQQQoiUMIKvT998Kxk80IaOGGIDBxU7DyxeZhCvlpUvr/W4WlJmq1dW2KaNm5JHCiGEEEJ0HPCMwRBMiDGWVIwbN84ZyRcsWNBkhtNcBgHCe09hOE9F3PJrLHi2kRaEsXDIPUSI3XbbzUUWQIiK8iwBRPR3333X7UPeMhUUOZ7wcsD1vFgFpAFxAG8f0hkMkYdIQZsZNGjQdgIHQgVpQURCgIgLHm3sP3LkyDohAxBUmMuIsHOUUxCuRTtGiGHwpacxZcu5SDuikReD0tGYaxH+DzELwQFxZ++9904pVgHnYGHQMeJWMH2UD0IPaf/www/rDX5uqfrCO8y3JwS6sNiHZyfCFmkJXgtBDQ80RFOOC5YhbRJPK9oq88WRziC+TPPy8tynSE+HEqxoNOkWIYQQQnQM6FzyT30A0Vx07dbVeVOVDBloQ4fXCle983u7dldVuc6WLV1mixcusaVLyqxi1Rr30imEEI2l/u/aNkOKEELkGogW3oiP50aqPjnCDAZkjMWpBBwM7Ri4d9111zoxhPOxP14of/jDH+zXv/613Xzzzc6zIpWwgicJRvS//e1vbv8//elPzvOEubHee+89Nx8Pni0eDNqESWNhff78+XbnnXfab37zG/v973/vrh0OsYaBHm8gfy6EnD//+c/229/+1r7++mv3nkI+MPJTLkGDfpC45YeRHkEn6KmFmIBwguG+ITjupJNOct5thE4LgwGeAVt47qTqzyIOzJw503lAMS9QppBOxBbgHGFIA4IV+wXnFUIAAby4wiIZbYa2BXgfxYG6oKypm/Hjx7tzeBCsAFHFh6DzUKcILkB78HXamLLFY43zEB4ynXjkyfZaXAPvNu4NPIMQnBrC55Hy9d5uQYiUgkiEiEY+PC1VX/xNOzz55JNt1KhRblsQysGLWL7dAe3Y54tyD8NzimPxsgo/YxAzIXgfitS0a8HKd9b90hCZ7i+EEEKItgkvDV26drGtW7ZazabmD2kpOi68EBYU9rVBCFcjBlvxoAHWq3cvo6eJcFW+dLkTrsqWlLswgmqPQojGsKmmxi0YTFiEECKXYU4bjNPz5s2rZxgOwrMMwQWDeap5ndgHrw3m4wH2IdzXPffc486NAR4DNN43bL/jjjucUTkIhugnnnjChT7DkO69J7jmbbfd5ua0wfiNeOXhvMxbw7w2L7zwghOovFEbAYtrk4aglwaeFwhTnOvZZ591Yhfn5FxeKEAUQGhCWEo1pxDEKT/2OfLII+sM8Bj7Ca3GXDsIZw2BQERoNkKxBwUaD2lHKMKbJko4oRxeffVVVybM9xNl6G8IxAs8g8B7xgRB9CD/iC7Mx+TBU4c0k2fSEYR68GXLfnFAkEQEZX+EKQ9580JZqqkMENRIC2XlvW8aU7ZetPEhFRFISAP3SRTZXovr4MGH0IK4w72FqIUAQ76j8GIN70FR16IN8B3XC7bblqovnhfMi0V5+PILQvrJH8+AoEDqvfcoI/98CEL7o+yCdQz8Td1wXfbxZRjOo9hGuxSsqPjgD5j/O+7iCf8thBBCiPZDj+49XKeRFxw6kUI0J8xX1a+wwAYNKXHC1cASL1xttcq1VVbmPK5Kray03M19leoFUAgh0sFvGkv3xG9cjxgjroUQojXB8EvoLYzDGJdTgYCDwZ95m8JCUxQYqRFjMIqffvrp9oMf/MCuvPJKu+yyy5ynCwZxhKJgf+uDDz5wobwQR0455RS7+uqr3TFXXHGFM3anMy5jjEa4Ouqoo+xHP/qRXXPNNXbppZc6kYXjmLMlyr6IEIAYx76XX365M6ID4tKIESOc4ZzzpiJu+QXBoM6CwZ3jGwMeMYhRQIi0sFcMkHfqDa+xbOcfBsQF6vOjjz6q82YC6pD5gRA+EFSKioqS35grG+oA77xZs2bViTnUBSIjQh+h3BD1GgIBgmtzjj333LNeXvnOi41RZQDeg4m6ivPu2VDZ+rZLWeAJ+Lvf/c594t2HIBkUVhsi3bUQbxFXEKwQWm+88Ub74x//aDfddJPdcMMN7lphsdSHAKRMgsJNQ7RUfaWD/fEGRBhFNOY+9HghLtW5uG+9KBksE9LvywHhmzqiDPHCpN54Vundrz7tSrCiAfgfAL/uFxqcX2gkwSX4Xfi44LmEEEII0X7o3Tvf8nrmuc48Lw5CtATdu3ezwqJ+NmhoiQ0dPtiKByJc5Tlvv7VrKq2s1AtXy9zfNTXxX/KEEB0b3m0rVlfYuqp1ls9vXN72YXiEECKXwLhLqK6Gwt9hpEaMoM/OnDQNgUCCsRyhieO8NwQCzSGHHOKEA4ziPhwZBnkvKh100EG288471xnd8QY5/vjj681XFIbzH3300c7Dyx+HZ8a+++7r1jH6R4kUfH/ccce5ffH0IF0eBBoM4ITuCwsCnrjlF4T8XHLJJfb973+/ziMtLoiFzz33nAtnePfddzvPM7xOJk6c6OZACkMZY/yn/vCAi/K2iQth5PAUI4/33XefC9uIRxsCyieffOKEBb4PXgOR6IQTTnBiy/Tp053I8uCDD9pf/vIXlweEB74PemWlgvCNzOXEuRojvKUi07L14fPw3kNIof2QX2zb3COUUSpxN5Nr+euQdzwC6WswBxYhOGn3XIsyDYZi5F6hHqj/KOGM+84LfEFaq758uM/HHnvMXYtrcxzXIk2NhXufZxdtFzEdwdjf79QdIhb1Qd2JWtqFYBUlLrFQ0UFhiobBkm7dL2HxKnhuIYQQQrR9EKsKCvpZ9YZqW75suVzyRYvCi0q/ogIbPLTEhiBcOY+r2pfMtRVrnafV4gWlVr50mfPA2izhSgjRAJVrK23F8uXWpUtXZ8xhJLoQQuQ6eE95rwpvHA+DYRwPHQy8X331lbPhpcPPm8P5EKOCIGz88Ic/dB5NPhwYBnxEIby4orw3ML6ne6bSr/Mh64Iw1w1Gdh9uLQweJV5MC4OIRdkgJBAaMBVxyi8MAhdpzhSEhs8++8yJY4iC2E+Ztyco8HmoIz9fGCIgolVjoJyoO8K70V9GBMTjhnc46gahJSpPCA+IK9QhogpeQtQH9l22+3mR0sG+5BmRhXZIO2lqMilbIO14CxJmEW9A2vNVV11lF154oWvXeBG+/PLL7jxhMrmWH9hJGUyYMMF5HE6ZMsXOPPNMJ3xSvl6Y9JAuRCuOxXsoKMRwnyHOpHr3bo36wkuN/fHiIs08Z2hPpKUpoF3utNNOrlzOP/98+973vufqi3pjTjHyiuhK+FFRS5drr732uuR6m4RG6GE9uHBDsHgBKrweXILH+XOFCf6IpPpBEUKIjgjP0eYmrgu3aP/wIkb4DIxxjXnxoWPYpXMX9xLLS2rnzp2sV16veiMbhWhO6E8yl1rPvDzL651nPXv2cH9vSc6txovc+nXrbcP6DVazuca9QHbp0jnypVUI0bGpqqyyhQsX2do1a614wEAbWFw78bfouHT68y3JtW1suezS5JoQuQPPKkQZQtrxzpfKG4LvECgwjo8cOTJtODsM1JwPUYOwYBjv6fsjZEU9Gwn/hcEY4QejfHgfbIkYkzFmY9T34hQi1Icffui+x8DtBTAPxnnOy7V9qLVU5wpDf4/3bDysEH/waonqA8Ytv6YA7yw8uvAM8/OKUSeUAcb9YF7INyIGhnoEK29HjSqTOFBH3mvogAMOcN4v+++/v2sLiC6ck/LBq85fi740c3UhzrAfoR5JC3mg/Am3iMcLZZvuN5O5kxDf8LY5/PDDt/O6iVOnDeU7k7IFBCHOg2AZtFHTBgmLSN54zyXMJOcOksm1yBfv3oiFJ554Yr1yohzIB15WiGDkHfGQfRBpEJcRWwm1iScYohAiGvsC9RW8b1qqvsJwrb333tv2228/J4hyPOIVbQ4B21+LfPiywOMvTKrnAcfj6Ul98dzy9cUn9YcgRzkhsHG/ZPKux7m33Hhz8q9tdL7ysuRa42logEBcfDkG5/RLRZt+2w2KS9xcfqFhUJgsVDYLjQZVn8W9/CduDhbW/Xb28fv74zlX8NzpBC0hhBBCtC3oRA4qGeSEq0ULF7vRVXQY+f0XoqXgnaVHj+5W2L9f0uNqkA0YWGR5vXom2uIWq1i9xpYuweNqiZUvXW5VletsS2K7EELw7rpi+QqbO3ee+yzoU2CDBg6KbQAUQohcwIe/w/Ad9ojy8D0GcZ57GP7TgUH+vPPOc3PXYNtDtCK0GHPG/P3vf3fiTkMD1XMBxCcEBASZdN5TccqvKcCQjhjIOxSCCeEMjznmGPfuxDxSXoggrYQ5ox4mTZqUkQE+CuqQMG3kjbB1Bx98sBu4SDoQZM4++2wnBMyYMaPe/Fa0kwULFjjPFsQPxAiOwUsHLyHaE/u/9dZbKe28bEe0wX6M6NBYT7FUxC3bOHivO45BzAyTzbUQaaJEIq5FPeMNxXu0h7I9+eSTXbtEOEason3iOUjZIx4jagW9n1qrvkgj12HBIwsvKDzOSAviWXPCM8d7jyKsk26RKJdEg2qTyotvmHyyBEUlv3CjedGJxW/zxwANgwWFmxuWTxYait8WXvwx/nghhOjo8Kxtbho7IaxoPzDKkI4jo5qaYgQhL73LVyy3JUsXW3X1Buud39t1bPlkvqHOneTNIlqWRE/VNlZvtMq169xcNNUbNro+bGKzdUu0yd75vVz77Nmzu/PIUn9UiI4FzwhEawZdrl1baatWrkysb7Siwv42bMgwy8/vo+dCByVoJ+k0YaJbD1Iza3pyTYjcgvfJqVOnOmP0aaed5kSIKPB8wMsGA/O5555bz9idCmyBjOjHO4L3CDx0eEYipDCvEut89+ijjzrjO6HOwqI/z1sEL7w7Tj31VOcFAXh93HnnnW4APKIJIf6CMI8O8yxhmPeh2lKdKxXMG/TBBx84TxE8QKKIW37NQbgMEECeeeYZJz5gWw17t1AfCE+UO6IFn3hK7bPPPsk9tsfXOzZZhMioUG2+nBApjz322LoywXMIQQbvljCEm8Ojh3c/zutDSQZBRLj33nvdOyNtjvyFoZ/+yCOPOI+iVNdCrOFaiDFRbSyKhtpXKjJtY5DqWi+99JK98847zmMID6swDaWR+kYA4xPvK+5dhCDShzfc6aef7tpJS9ZXHF5//XUn3iGSIZ6BLwvuQ+7HMDxnuN/Jp7/f4xD1nIgL5Vmz2/b3TtdPZiXXGk9TiWikFZgvsCHapGAV7ITR4PkMClIsNEwau/9E7aUh86D07ong9+Hm4YGJIsx3fh8+vYjFg5FPHqZeuAL/KYQQHRWepc2NBCvhaWrBCug7rFm7xpYtL090clfaxk0bnTAgwUq0JvR4N9dsceEBt27Zal06d63rgxIasCvtM9E8N29J9H8TS6JTXHugEKJdw52+JfG7hUhFCFHmZOxf1N8GDixxoW1Fx0WClWjL4IHx9NNPu3BfeGZgfwtDn/3xxx937wPHH3+8C2eWCdwbGEtffPFFZyPEoI344Q3ohByPMoS3pmCFd9UDDzzgPGbOOuusOqNvmDjllw0ILYRiI2977bVXcus2fBlgV0WIwTPF5y8ukydPdqHfUhHHoI+4gMjgBYY45ZzJeceNG5e2XL1glkrMIFQcQh5iIqIi58m0bPFy8ttpFwi2wRCIHvJOmyGknc97tteaNWuWTZs2zb13e3EpCALRPffc42zy55xzToNzTHEPUlaUR7DeW7K+EGDw2ON5glga5YXlzxOsL18WwW1B/HMELzLKwt+r5AnvM8o+6lrUE/UlwWobbc4CE+yABcUqFgym/EhQkNxgLFQyDYkbmBieCFbBm4t1tvEd+7Avx/jjORfn5Nz+OsFrg/8UQgghRNuEzmZhv0IbOXwHGz1qjA0bOtz65hdY187drJN10aKlVZbOiaVb126ur0r/tE+ffLdOeyVUYPX6aqtau84tG9ZVW82mLYmOaefIc7HwHfuwRH2vRYuWtrHwbOjeraf1LxpgI4aNSPxu7WhDhwyTWCWEaNP48HcYb4OhxYLQB2I+Gwbw4BWFjS4Mhu+77rrLrr/+ejcPTRAM+8xJgyDl7YfAddmG9xVG8Shay/ZHWDQM3XgZMX9XKuKUXzYwZw9iGOUdNVCVbZQNxnb6qXgOXXDBBXbNNddELhdddJHbh77t5Zdf7ralE6sAQzcOBdQZc0GF4fqEnQNv7Mfe6w3k/rswlBPnpO45fxiuRXg53+7CAkUQP5cUQlLYwE87xTsIqEt/nkzL1oO49NxzzznhB8eLMIQBJCwj+cLeDdlei0GilCPeQ1FhKdnm7e++7NNBOZAGxDbERU9L1hd5RcAjVGiqa/EcAdLpz4MYy3W5D6Pusblz57pzU+ZBDzq2I7SnCmWIoMX1ELqCZd+RaVMeVr5S+UwlVrFQyTQoGlJY+Y0L52PCMxo7jYwbloXz0VBZeBDJ00oIIWqfmc2NPKyEpzk8rMLQz6Bdb6rZ5NaFyAXwsqI90telj0p0APq+rk/apbP16N7DveTk98l3L1P0Uz30m3mh5aWMyAO8EKnvKkTbpFPiX+fOndz7aZcuXXUvizqCNhN5WIm2Bu3We16kC39HH4iQX/SDUoX8euGFF+zdd9+tCznmDeGA8ZjwbWzzHlZc+/nnn3cj//kbTybvCcF3b7/9tvO2wP7Y0h5WQBgywpERJo1wd1HP/bjlB9g7MbiPHDnSpS0dGOd9iDVCtTHfjr8+/VK8hhBCmC+IeYYassOm85LhfAg+QN35vizvZYSCo+7wICM0XTDdhOJ74okn3PHUHccCHjF402EjPuOMM+q1FdoR5yQ9BxxwgB166KHJb7bhj+e9E6+jdHlDJCJsIZ9HH320C03oy4lQjYS74+9gm822bH0bQpxE7CO0ZbCsnnrqKSfWBo/L9lq0eR/ikXLgO38/IfDiGYSXVUNecohatOOZM2e6tnrCCSe4udeCtFR9Be+VqGcE9+ZDDz3kyioYYjN47+6777522GGH1ZU771h8RzrDYTl9m6e8KT/S5/HHcT8eccQRdaExG/KI85BuhQRsRWhM/pOFmyksVtFwKETcD3GVbQpQoBnFQKF64YoG70UrL1j5m9x/CiFER0KClWhJWkKwEiKXoS9MnxcjCS9FLLxQ0Q+lv8pLHi//fPrRh4hVjIzkZQixipefhgwUQggh2hZBu4kEK9EWiRv+7pVXXrEZM2akNFwHDekM1OG9AVsef2M85h4JzmEVPob+FCHR+ETc8V4Y2CJbQ7AiTYgN4EW2KOKUnz8XaU9VfkEoqzfffNOFUAPOjYMAZYFgQrnh8YLRn/mZGiKqTDx+jiLOjWEfbzgP10L0QahMVad77723ExG8Rwz9ZeYmmz9/vtuGQEdaqQPCt/GJBxvXCqYDOJaypP8cN/wk76iIRaSftoCnDenl+mwLt7nGlK0XVUgn4irfcxziGP1+6h7RB88vaMy1ou4n7PG+DPk7KGR5uHcQEkkP6QTq7KijjnIeUGEbekvWV6r7PVhfnAOBODgIMFju/p0qmD6OQRAMHhMse/LMMdzD/lqUZbgMwyEuU8H+7VGw6nLttddel1xvM1DRNJygWEXhsVDpNJimghvDPwCBhpVq8d8LIURHg2dyc0PnQQgg7AADSogxHxUDWoj2Dv1NhCi8qej4s8423y/2oa0Rseg388k9g1jF37wAcqyeq0II0X7p9Odbkmvb2HLZpck1IXIT+iYYcBk4jqdHqkGL7EdYMfo9CD7Y7YLQP2I7hnKM5j6cHiINdr4jjzzSiRtBozLH4BWB+IGXDCIVx9DHOuSQQ1zfiuMxIGPsB66Plwb2yd122207IzqDivBMoe+FdxTpZl/CloXPlQ7ShiEeYQGRIcqrDOKUH+/uCCvYUPFwCYtsYcg/Xihcl7LhXYxy4RrknzLD0B4nHxBVJh76rNQr9cJ3wfRTtpQXQgPXjqpT5iPivB7aBcfwSdrpD3OMD23HNU466SR3fBg8lLzHHd5DcQZ6UQa8oyJq+HLCnsyxeB8hEAbbXGPKlrIZPXq0axe0VY4hf7wPIOogVnFeT2Ou5e8n8uLLPliGCETsE4a6ee+991yaEO/w+qO8SQfpCdOS9UV6uWd5RnANfy3y6NtT0HPNQ7lTvsEy9OnDqw4vqfDziLwiHNI2uIf9s4VrcX6Ow+MseC8gPCKCcVxQuA3DtbbceHPyr210vvKy5FrjaaoB6r5caLMN0SY8rHix9p88WFkoLB7yqJc8ZPnhwLOqocndsgX3X9wFMQiwUMg0Kh6ENLzgjRZ103k41jdufjxS/cgIIURboql+wNIR1dkWHRN5WAlRH/rG9IUxAGBgYZ3nMn1VXtb4pM9M3xnYhnEirmFBCCFE2yBoO5GHlWirxAl/Rz/HeymFw2+FoZ+EJ0Nw0E46ux3Qb8KI7/dnPVOvqKaGsHeEMsSAnS7cWZzy83bVOCJMGGywCEtA2aRKR7Z420K68wbrFDtrlFgShn3pI9Mfpm9M2vlsDrK9VrZl69srxD0u22tRP+SNdoWwk2tlmA3ZPCPAl2EmZREnX+zz2GOPOfEWby3u5VTQ9hUSsJWgooAGxEKlcoNwM3JT0qioYFwFmxN+GIjnyQOdG5mFRsVC4/SNOU6j9mBsIz6lnwRPCCHaIr5T2ZxIsBIeCVZCREM/mRcgPKkY0ch61POZviuDphCtwi9IQggh2i7edsKnBCvRVsE4Om/ePCdE0NcPeswE8R4lRFxoyEuosWB7bG3Bij4d5YJNFPtnKpEmbvkJIXITPK/ihACF9ipY5fwbarDDxRIWrfjR4NPH5GxOjjnmGPeg53o+HT5dQcJ/pwMXP4QwjG9CCCGEEEJkC+ITceUJ9UHseV5uGGgVHFTl1xn45UdVCiGEEELkChg1CQuG11Q6sYUIS3FC2rUXGDRPaDDEslRiFcQtPyFEbkJ4Q0IVEuIynVjVnmlTQyqDohWikX/RpvLiui42Btz7Jk6cWCeW8enTlIlIFcVrr73WaNGKEDA//vGP7bzzzku7XH/99U7oy1WYJJLJKpmEUQghhBBCZAbCVX5+vgv5hxGHvjIGC/qrjLYlfjr75HJ/UAghhBBCCCE6GmgP3/3ud908ex2VNiFYBUUh713FgljFi3ZzzVsVBRPkcV0vVnkvK/Cf2YJo5SdqywYMEOPHj3eTy7EQapDJJTFQ+G0s48aNy/nwL/3793eGltaGyTMR+fgUQgghhGhLMNgK0YpJqv0IWzywmEuVMKsKByiEEEII0TB4qNOvok+F7U0IIZoLnjfYxH1kjI5ITs9hFRSCvFDlwwASPxH3OMKc4BLbktx9991uskOuzQ8VCy/8LMHGlE3DYj6Oo48+OvlX41i9erVdccUVtt9++9kPfvCD5FaRCUxWeckll9htt93mylEIEQ3P5uZGc1gJj+awEiIzGMBUWlrq+tSIVSz0q6ElohQIIYRoGYI2FM1hJYQQQrRv2uscVl2uvfba65LrOQ2CVVi0YmGEAxMstiQIZRjLGKnKgjAVXDzZCFZMks18XIx+bSw0qCeffNKd78ADD0xurYUJGO+66y4rKiqyTz75xJ544gk3+TZlSTm/++679thjj9mMGTNs7ty5NmzYsO1i5BKS8Y033nDHIuxQH4Sd8SN4PQhnjz76qL3yyivOwIhHXDrDc3l5ud1zzz1unfPh0fb444+7GJ78PW3aNHv++eftgw8+cGkmrA2sW7fOHUcbIQ8PP/ywTZ8+3RYsWOAMmn4UTPB8wZi+/ngm7kTJZp38sx91SajCsWPH1p2HyTb9NcgXeaL8sql3Ido63HPNTY8ePZJroqODNzITLPP8b+k+gBBtDfpFhI1eu3at68Nw39DP9IOthBBCtE86/fmW5No2tlx2aXJNCCGEEG0dBh9uufHm5F/b6HzlZcm1xtNUA9T9QMmlS5e6z3S0mZCA/pMlKFzl5eW571oSBCDSwOLT5AmuZwsCUXODKHPTTTfZD3/4Q7vqqquc6LRixQon2lx33XX2T//0T/b11187ce6vf/2rXXjhhc6rzIOx8Ec/+pH95Cc/sYULF7qF9WuuucYJVB4En9NOO83uvfded65HHnnEzjrrLLc9FZWVlW7+qvnz57u/qWeEMQS2Sy+91B566CH3HV5Pl19+eV15IaA988wz9tOf/tS+8Y1v2Ntvv+1ErV/+8pd25ZVXujyDPx9L8Kbzx3/00UdO7EOE43jgk+2IXUD6yQeCIPnik78RwpqiDQghhBBCNAX0b1gAwYoIAUIIIYQQQgghRC6S84KVN/57YYjFC1YsxI9taZhfKSxW+c+mII7S2FTsuuuuzvPp6aefdnNe4Vn1wgsv2O9//3u7/vrrnQB15513OmHQizEseBYhaP3jH/+wX/3qV2659dZb7dNPP3WiD+Ap9Zvf/MZOPfVUu++++9y5EJ0OO+ww+8tf/uJG+2YCHk2ENvzb3/7m0nbHHXc4A8zrr7+e3KOWkpISl+Y//elPdvPNN9uNN95oX3zxhUtz3HoaMWKES+MvfvEL9zef//M//+NGJTNC+ZZbbrETTjjBeWH5MjrzzDNd/rwwJoQQQgjR2jDYxgtWPpy1EEIIIYQQQgiRi7QZD6uoBdEoHKauJUC8CacF/GdjISxgSzFlypS6kHqAaIV4NXHitnjXfD9q1ChbsmSJ8zzCg+qll16yo446ykaPHp3cy1y4PLypCJ1HeEBiUiLenHjiiXWjeQnhiID18ccf13lQxWXSpEm211571YXcYxJxFsJCBdl7773d3AwejjnyyCOdxxTeW42FdheO30n+rr76aieQIWgKIYQQQuQCiFXeQ5z+ijyshBBCCCGEEELkKm0ucD2iEIKBX28tmlqkCuKNCi1BeO4CxDhG3uIl9fOf/9zOO+88++Y3v1nPi2nVqlXOe2rkyJH15mtiLqgrrrjChQpkrhnmxgLmwsLbyS/MPwWIWpnAtbKZHwrDzJ577unSTcjDxsJcVYT/w2OL8sHTi3CJXAdxLzyHlxBCCCFEa0A/lX4lIZDpn9DHUz9FCCGEEEIIIUSu0iYFq+Dn+vXr3WdL4q/ZXKJVa4ZqwSOK+Z4IbYe31fe//333984775zcIzMI+8d8TwhefkHI2nHHHZ2o1VJgnGGuqaZoL4hmJ598spuPi/CGfOI1xjZCKgohhBBCtDYM8GKwTmlpqQtnTP9F4QCFEEII0R5hQDR2LOZqp98jtsH87UyrwVQZQgjRFmhzgpX3sPGfvIi3ND4EXTgtTQUePK0F4gsh/5h76owzznChAffbbz8Xes+DJxGhGJlDLB35+fk2ZswYNxcUcz2Flz322CO5Z/NDmMLCwkLr169fckvjoM6HDx/uPMqmTp1qL774ou2+++72X//1X26uLSGEEEKI1oQwyAxEwrscIw79OwbvNPVAKyGEEEKITKGfwtzgzDmezq5HNJtf//rX9tBDDzVog2ovMJ0FAhNTcaQC7/l7773X2e4WLFiQ3CqEEO2DNilY+TB2rK9YscKttyQLFy5014amFqsgOP9SS0OnAaGJ0IAefggxcHiYowmPq7fffruexxLr11xzjV133XUu/Mwuu+xiX3/9tZuvKgidjPC8U00JaQ12ZPDyeu+992zcuHHWu3dvJ7ghXtEpIm8ejDl+UvJ04EU1YcIEe/XVV5NbzAYOHGjHHXecK79MQx0K0d75xje+EXsRQgjRNCBU0Qeir8pAI9+f6yjGHiGEEELkLthmhg0b5mwoc+bMSW7dnpKSEjf1AgOD49j/+vTp0+bn62T6DfpuiHWUTxRdu3Z1kYvo33366acNDkgiwhFlI4ToGLz//vuNXlqTNiFY8aIdtSBcNcWcRJnCj2k4LeA/G8uoUaOSay3Prrvuap9//rndeeedLoQMDfQnP/mJvfLKK8k9aue5Yg6nt956y/74xz+6/VhuvfVWt+3EE090IWcIKXjsscfaL37xC3vqqads5cqVztPpV7/6lX3nO99xwl9z8OCDD9pf//pXN6qY6/3+9793efLpIjwgc1oxagXvKPbjB/7//b//5/YLwo96r1697LPPPnMi24YNG1ynYP/993eu5oQ7ZMQyx3PdHXbYwQl6Qoht/P3vf0+upSfufkIIIRqGAUj0YzB0EBqHdbz4m6q/KoQQQgiRLfRHiFKDjQY7DLaWKOjPjB071n2PXaYh2kM/B5vSiBEj3CDrefPmJbduDxGNEKHmzp3r7FINoT6gEKKtkPOClX+g8ukXhCpEBxZ+tFpyHitGpjIHE2nw6QH/2VgIM4e3Tmtx1FFH2VVXXeXEp6OPPtouvfRSJ86ce+65tmTJkrpOxL777mu//OUvXSxc9mN54YUXnDsy3wHC1s9+9jMnFP3bv/2bHXLIIc4LiVEi//u//+vy2hwgkjHyhjRxvWnTprnr+3QBc0+df/759tvf/tYOP/xwu+iii5zXGPkPQsfo+OOPd+7Y7E8ZMLqH0H+k/7LLLrPJkyfb2Wef7TpaeJfxvRCiPg2JURKrhBCi6WC0LSIVC15W5eXlrq9KaGT6z0IIIYQQrU1xcbGzfzE4OF0UHqLlMPCG0HephK32BH01IhYBA+ZTecfTr/NeapqaQgjRnuhUVVWVs4HsvUsrnzygWQg1R8g1PKsQj3gRJ7wbnkEtwXPPPefiyPJjyYKrMa64/KAgYvlwhZCNiHXaaadZUVFR8q/Wg3KmfHHTTjdBN3XjXZQZ+ZIqz9Qd+3EuPJaaA0aUMKcUc2794Ac/cEImIf5IVyrjTJx9fB75Ppx2X060hWAYRSE6GsHwmumICvsXV6xqzfn9RG4xe/ZsN8KSgQN4tgoh6kPfhLDMjMqlr0M/hfAyjMSlzyOEEKJ9ErShdJow0a0HqZk1PbkmRG5A5BtsbMxxzuDjKJsS75pEtEGUwWZG1Jsw7MO5CKW31157uW2IPV9++aUTvBDGXnvtNdc3QvRC7MF2hJcX10QM43siA3Eu9j/44IOdp1NUmhDY3nzzzToRDVsR7yWTJk1K+d7KeYnOQzqxX5FWzn/ggQfWmzcesEExRxW2TwaQpxrYzoBw5qIfOnSonXnmmc4+GYZymD9/vksb1wSuv3TpUnf95rLRCSGaHxf6fbd9kn9t4+O7/pZcyx6mw4GmGijgnz9xwg22mTms+IFg8aIQD2EWBBBGjbbEKAte/gmNh3DhBSqfJp++xsCPYS6IVUC58gOeTqwC8owLMku6/FNeeB615A8hAhLXTCVEQZx9fB6j0u7LSWKVEPEIi1PyrBJCiKaHPjJ9E/ou3nCB8dIbMoUQQgghcgEf1g4hyQ+GDkNfBmFpy5YtKedrYh+EHy9WAbZC5lRnHvLbb7/dRUvCrseAaqLyPPvssy4iD5GD7r///rqoQghLrD/wwAPbzcnOtZkKg/MxgI5z0efivB999JHbHuXt5AWoZ555xoliDCbiWpzjjjvu2G56imAoxHRzfCFUIWaVlZW56S6ioIyPPPLIOmMx53z88cftsccec4PyyYMQQuQSOS1YBQUQ1v2CuMCPEQuCAX8z2rq54WHOg9yLZlyXTwimFcJ/NwRiFT9GQgjR3vEilcQqIYRoHjBEYAwhKgHGCUb6Mh+CBtgIIYQQIpegjzJ48GAXPQkvoFQgzCDiME95nPmagnBePLiuvvpqu+aaa+yHP/yhHXDAAe679957zwlWeFv57/kkihMC2dtvv11v7nw82KdPn+6iLZ1xxhluSg0i/fC50047uT4YnlqIXh7Wn376aSeC4R3G/t/73vdcZKCDDjrI2RlfffVVF8Y5CPti88SLivNGQT8PLyn6fHiTxQFbqhev0kUbEkKI1qJNeFgFxSovFLHw4Pah+RhJwESDzQU/OLNmzaonkvn0eHHKf2YC4YxwaZZY1XjoMDBn1fjx45NbhBC5isQqIYRoHjCKYPTBuMI6BomSkhLnUU4/VgghhBAiV8C2hg0H2xreTEGhJwiRbUaNGuX6OOk8jqIYPXq0m1MdmxHQH0Kw8mH2EIaC3/NJ+DzEHDyjgkIS3lN4sCOAcZy3A2KXZP53Phk0RDo9CGaEDmTwEDYrpt4A8oxgxXkQ4cL5GjRokBPz8BRLN0cV813R32MgfyovtSDkH7Ht+9///nbzuAshRC7QZkICAj8EXiTiAcuPCOIRD2b/cGa0RVMzc+ZMe/jhh921uC4/qP7Tp8n/SDUE5+BHarfddrOTTjrJjj766JwJA9jWodNw8cUX6wdXCCGEEB0WQtUwCpe+Kh5VGC5WrVrl5uwUQgghhMg18J5iDieEGcSeKLC54fVE/waPo1TCVhTY4bAjBmGbn9cTYSj8PdeJsvMhbF1++eV22GGHJbdsg/Nhp2Su86BHFOH+8KJCOPNilYfrErIPsGcGwx2SBvLMsdg7U4V2xsZIGSKsERowDlwXcU0IIXKRTlVVVTkfzN4/lHHHZeFhzY8TL964vTKClIWYsSx4KzFCoSngh5AfBn5UWBBFWHiw80PkhSse9v4HLq54JYQQ7YVMXhiyJdXktaLjwe8y8d7xUmZyYyHENugrE3KGhfX169c77yqMIXqOCiFE+8bbTvjsNGGiWw9SM2t6ck2I3IL54mfMmOE8nw499NDk1vogAjGv1PLly+2ss86yYcOGJb+JhlB/r7/+uu288852yimnJLdug2k/EJMmT57sPJ2C4CF15513Orvj2Wef7TydgtC/wiMKzyf6W4BQRchAbIP+GGyWDz74oNuPdxf6ZGEQmhYuXOhEpzPPPLOekMSgI+a+gnPPPdcKCwvdehi80wg7iD305JNPdnZKIUT7Bweemt32Sf61jY/v+ltyLXsmTJjgPlOFJM0U0grvv/+++0xHm/WwYmFEBAsPczLtRSVEJiZV5IchWziWc3Auf16uwbX8dX06fLqEEEIIIYRoTTCs0C+l38rAKkYNM7eB5q8SQgghRK7iw9ohAgXnjArC94hPCEOffPJJcmvLgjjFvFY33XSTE4gQiubNm+fC/iFKMcA+FYhS7B9e2J6KYChExLBUMIgPMQsvrVReakII0VZoE4KVF4OCYpX3agoKVixeXOIBPW3aNDcCOxPhin05hmM5R1CsYvGCVTANLME0CiGEEEII0RoQbaC0tNSWLl3qvKzoz9I/RbwSQgghhMhFmCqDQTbM5UQ/JhUIM0Q9QuSJM19TU4NQhjcYA4GYB+qHP/yhXXHFFS5M4EUXXeTsh6lg/ir2S7VMmTKlbh4tD324cePGOfsjUSZSRTYhHCEeXIh9CGhCCNGWaVMeVh4vXPHA5uWbBzpiEj8YLPx48bD2P2LPPfecvfXWW+7hzks7ohQu8iyss43v2Id9OSZ4Dn9erhEOAyiBSgghhBBC5Aq+jwr0Wf1AKyGEEEKIXIU+C/M14cH00UcfpfRUQtgiFCCh8lpamEEsYoA7tsRJkya5qUga6mPRL6MvBniG9enTJ+WC/THKxjhkyBAbOHBg3YCkVDBXPtcizGFThfASQojWoM28vfqHNp9+4cEfFK3wfgoKVjzw/ScjLwjvRwzbZ5991h599FG3sM42vmOf4DFBwYpzB8UqlmBafNqEEEIIIYRoLfygLkb4MtKWuasIEaN+qhBCCCFyGR/WDg/xNWvWJLfWhz7O+PHjXX/niy++SBuCr6nhWohOgI0wDGGZ/XxWHmyIJSUlbj2VhxQCWLp8MHjeh0LkHKnAQ415s5YtW2bl5eXJrUII0fZoU8Mtg8IQP058evGIHwEfGtCLTHwiPDHBtF+Y4JBP4sCyBLf5hWOC5/ChAMNilU+DT5MQQgghhBCtCQYPjDyMwiU8YEMjf4UQQgghcgEG2+A9xWBy5rJKBQIQdjzmjFqxYkVya/ODLdB7SyGWBcUn+l7MaUXfKwwCGwPiieY0ffr0eqIWYtUHH3zg5sRKJ0aNHDnS2Sb9YPsosFni9UW6Pv30U3fuVBB6EU+sVPOFCSFEa9Lm3mCDAlGUaBUMD8iPHYITn/w4eEEqKFAF19kneAzn4FxRnlUSq4QQQgghRK6B4YGJuTFmIF7RjxVCCCGEyHWwre2+++4NhrXDdjd27Fj3PSH6Wgrsgvvss4+zC5K+G2+80R5++GH7+9//bjfffLML10cegp5YQBjDI444wh03Y8YMu+WWW+yJJ56wp556ym6//XZ7/vnn3X7YIVPRv39/GzFiRIOhEPGsZxD+3LlznSgVBeX2+OOP22OPPeamRUnn3SWEEK1BmxxyGRSKEI5YvJjEDwg/bl608uJTcOHHLbiEv/feVZyDcwXFKn+9YBo8jF5ItwghhBBCCNEcMFoXr6ovv/zSGR4ICTNgwIDIkDVCCCGEELlIcXGxm69p+fLlbknFuHHjXB9nwYIFLTpf0+jRo+3kk092tkOui1cU4fdI8wUXXODmm8LDqaysLHlELYT0u+iii1zYvoqKCucB9fHHHzsPMUIhXnjhhe7YVGCP3GWXXdw63mepRCYiSXkvNTzQosDGib0TsIlybiGEyCU6zZw5U0qKEEKInIfRbEIAL4aMpmR+Hl7whBDmQtAwmhbDDUYMRvMSFoawOcEBVkIIIdovfqAsn50mTHTrQWpmTU+uCZG7vPPOO/bSSy/ZHnvsYccee2xkPwZR6MEHH3SizGmnneb6PC0J99j69etdn8vPqR+X6upqN98VMFgeASkOiFD33nuv86Y/99xznUgWBWEDH3nkERs6dKideeaZkednoBNeYBrYJETbBvG5ZrftbWUf3/W35Fr2TJgwwX021aAAL5S///777jMdncrKyiRYCSGEyHlSdchFx0OClRDbg2CFhxUjdTFoYADh/uDZGdcQIoQQom0jwUq0BzCOEvaOiEf0ZVJ5AC1btsx5YeFVhGd5RwCBjvmy6N8RJjAKxDzKDzHNz30lhGiftFfBSrMwCyGEEEII0cZBoCI8DSNlmaMV441GzQohhBCirYFRkxB6eE2lC1dH+EDC5HUUsQrwmiLPqcQqYKASc1nttNNOEquEEG0SCVZCCCGEEEK0cZhjlZA0GCkIncOE2whX8q4SQgghhBBCCNFWkGAlhBBCCCFEG4fwT8xFwMJoZC9eCSGEEEIIIYQQbQUJVkIIIYQQQrRxmKeACbyZRBuhinkfhBBCCCGEEEKItoQEKyGEEEIIIdo4iFV4VwHeVRKshBBCCCGEEEK0NSRYCSGEEEII0cZBsGIBxCpEKyGEEEIIIYQQoi0hwUoIIYQQQog2Dt5VCFadOnWSh5UQQgghhBBCiDZJp7Kysq3JdSGEECJnGThwYHJNdHRmz55tn332mQ0fPtx22GGH5FYhOi7MW1VaWmqJfr116dLFBg8erGemEEJ0QLZurTXv8NlpwkS3HqRm1vTkmhBCCCHaOj179rSa3fZJ/rWNrp/MSq41ng0bNiTXGgdphffff999pkOClRBCiDaBjK/CI8FKNBVbtmy16uqNtrZqXaIjvtE21dTUGfvaEjWJdK9atcrWrl3rvKsKCwutd+/eyW9zD7zAunTpbD179LA+vfMSLy/dndAmhBCicUiwEkII0ZQgVrz77rs2btw4GzBgQHJrfBp7vEiPBCshhBCiFZFgJTwSrERTsLZynS0uXWalZSts1eq1tm79BttUs7lNClaAl5UzUHbqVLfkMl27dLa8nj2sX0EfKxlYaCOGllhB3/ycT7cQQuQyEqxEWwajKCGOgYEseXl5WfcL6BetX7/efQLn6tq1q1uPiz+2c+fmmU2lurq6bv7RxuZXmG3evNnVVUNlGGwb7NurV68G65hnKsdwDSD0tje+5wrZ5AuC7TAqX0RwePDBB92599prLzv88MMjz/vGG2/YO++8Y2effbatWbPGnnnmGbfOvnGOF9khwUoIIYRoRSRYCY8EK9EYeIlbsXKNffHVAluwqMyqN262nnm9XQe6a9duMhS0AFsT/zbX1CRekDfYuqoq69J5qw0bUmzjdhxuJcVFiZflzAxKQgghapFgJdoiq1evtieeeMKFN/ZtGIqKiuyEE06wIUOGJLc0DF7nGM3ffvttZ4j3YCAfPXq0HXPMMZafn5/cuj30ExctWmRvvvmmS9f5559vffr0SX5bH4z8Dz30kC1cuDC5ZXs49sILL6x3jmXLltnTTz/thIBgfvGOP+yww2zXXXeN1R8tLy+3+++/39atW2eTJ0+2gw46yG0n3wgEixcvdn83xNChQ+3MM8+0efPm2aOPPprc2jCnnnqq7bTTTsm/tkEdfPrpp64eiABAmabat7Ky0u666y6rqKhIbtken74ePXokt2yDc/Nu+NZbbzmx5YwzzojcD9h31qxZTlgJtg3EwgkTJtihhx66nahJ/VAu06ZNs5UrVya31kYLKCkpsRNPPNH69++f3Jqer776yh555BEneqUqjzCU5cMPP2xz585NWQ7Z5Asyue8QLKZOnera1KRJk+zAAw/cro1yfTypzjnnHFdWXrAiVHmc40V2SLASQgghWhEJVsIjwUo0hvLlq+yDT+ZYadlK696jl/Ur7G+98/smXv56KixdC8LL9UYE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hBBCCCGEELmEBCshhBBCCCHaGcxXxcS2hATE06pXr15uffPmzVZVVeUm3xdCCCGEEEIIIXIJCVZCCCGEEEK0c/CwYgEEKxZCBAohhBBCCCGEELmCBCshhBBCCCHaOd26dXOCVffu3W3Tpk1OsNq4cWPyWyGEEEIIIYQQovXpVFZWpqGVQgghcp6BAwcm10RHZ/bs2fbZZ5/Z8OHDbYcddkhuFUI0BPNXLVmyxFavXu3CBQ4ZMsTNcSWEEKJ94D1n+WSuQj5ramqsurrahYLt37+/+74pKC0ttffeey/51zYYHLHrrru6azF3YktB/p588kmX31NOOcXy8vKS3wjRduHe9QOMunTp4to1YZ/bIzyz6KsSypow1rkEzxWeMYTYbsnnmhDtCd4/4f3333ef6ejy4x//+LrkuhBCCJGz+FBWQqxcudKWL19uBQUF1q9fv+RWIURDYOjAu2rdunXuxRtvK714CyFE+8SLVxiBmb+Q5z7P/KaCARCvvfaalZeX11sWL17sjFFfffWVDR06tMX68PQN33rrbC7RFwAAGtJJREFULedBPGbMGMvPz09+I9oqb7zxht1zzz22YsUK22mnnZJb60N7u/322+3VV191fw8bNqxdCDoLFy60Rx55xF588UV75513bObMmfb222/bBx984PI3ePDgdidc8dy477773ODEnXfe2UUHyAV4dj766KP23HPP1T1fWhJES8rlmWeeqRtwFmbt2rV22223ufuA5y7vyWG+/vpru/XWW+3DDz9091OuiYKi/YMYDUuXLnWf6dDbqRBCCCGEEB0AhCkMh4zOxZDJSzfilRBCCJEtGJavueYat/zoRz+ySy+91MaPH2/Lli1zYgOCQktQUlJiU6ZMcQvrov2Dl99jjz3mPF922203O/DAA9v8IBz6ZwhU999/v5WVlTlRYfTo0e4+69Onj+u7vfTSS07MIt9tjVmzZtlNN93kPsN4gQohrqXFOMr1zjvvdAvrQUgLg77Af7YktAEvUjFQwA9GCMLzlnQjri1atCi5tT6IBAxeKC4ubtLBC0I0BxKshBBCCCGE6CAgVrHwUsvo988//9xWrVqV/FYIIYTIHsQCQgEed9xxdvzxxzuv3hdeeMGF+WpuMCoTLpqlvXmeiO0hvPETTzzhPEsQc4466qh24TGOFwxeMnhGHnDAAXbFFVfYmWee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)" - ], - "metadata": { - "id": "6QnODkANmU2J" - } - }, - { - "cell_type": "markdown", - "source": [ - "Now we can run TensorBoard:" - ], - "metadata": { - "id": "OAhYMxgzWF1A" - } - }, - { - "cell_type": "code", - "source": [ - "%load_ext tensorboard\n", - "%tensorboard --logdir logs" - ], - "metadata": { - "id": "X6yk2kI6kSEf" - }, - "execution_count": null, - "outputs": [] - } - ] + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Quantization Troubleshooting with the Model Compression Toolkit (MCT) Using the XQuant Feature\n", + "\n", + "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_xquant.ipynb)\n", + "\n", + "## Overview \n", + "This notebook demonstrates the process of generating an Xquant report. The report provides valuable insights regarding the quality and success of the quantization process of a Keras model. This includes histograms and similarity metrics between the original float model and the quantized model in key points of the model. The report can be visualized using TensorBoard.\n", + "\n", + "## Summary\n", + "1. Load a pre-trained MobileNetV2 model and perform post-training quantization.\n", + "5. Define an Xquant configuration.\n", + "6. Generate an Xquant report to compare the float and quantized models.\n", + "7. Visualize the report using TensorBoard.\n", + "\n", + "## Setup" + ], + "metadata": { + "id": "ag0MtvPUkc8i" + } + }, + { + "cell_type": "code", + "source": [ + "TF_VER = '2.14.0'\n", + "\n", + "!pip install -q tensorflow[and-cuda]~={TF_VER}" + ], + "metadata": { + "id": "kCLHJUhTlPDi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "import importlib\n", + "if not importlib.util.find_spec('model_compression_toolkit'):\n", + " !pip install model_compression_toolkit" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "source": [ + "import model_compression_toolkit as mct\n", + "import numpy as np\n", + "from functools import partial\n", + "from model_compression_toolkit.xquant import XQuantConfig\n", + "import tensorflow as tf" + ], + "metadata": { + "id": "NKKHNppSllmU" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Define a Random Data Generator\n", + "For demonstration purposes, we will use a random dataset generator to create both the representative dataset and the validation dataset. This will allow us to simulate data for quantization and validation without using an actual dataset." + ], + "metadata": { + "id": "-4kQtkZLlnJj" + } + }, + { + "cell_type": "code", + "source": [ + "# Function to generate random data. If use_labels is True, it yields data with labels;\n", + "# otherwise, it yields only data.\n", + "def random_data_gen(shape=(224, 224, 3), use_labels=False, batch_size=2, num_iter=1):\n", + " if use_labels:\n", + " for _ in range(num_iter):\n", + " yield [[np.random.randn(batch_size, *shape)], np.random.randn(batch_size)]\n", + " else:\n", + " for _ in range(num_iter):\n", + " yield [np.random.randn(batch_size, *shape)]" + ], + "metadata": { + "id": "-xM1K6tVlna8" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## MobileNetV2 Quantization using MCT\n", + "\n", + "We will begin by quantizing MobileNetV2 using the `keras_post_training_quantization` function from MCT:" + ], + "metadata": { + "id": "naWFGx_vl6tX" + } + }, + { + "cell_type": "code", + "source": [ + "# Load the pre-trained MobileNetV2 model and perform post-training quantization using\n", + "# the representative dataset generated by random_data_gen.\n", + "from keras.applications.mobilenet_v2 import MobileNetV2\n", + "float_model = MobileNetV2()\n", + "quantized_model, _ = mct.ptq.keras_post_training_quantization(in_model=float_model,\n", + " representative_data_gen=random_data_gen)" + ], + "metadata": { + "id": "RlAuiXAzl7Ef" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Generating an XQuant Report\n", + "\n", + "We will start by creating an XQuantConfig object, specifying the directory for logs and adding custom similarity metrics to be computed between key points of the model. In this example, we use the ./logs directory for saving the generated logs and include the MAE (Mean Absolute Error) similarity metric, in addition to the default metrics: MSE (Mean Square Error), CS (Cosine Similarity), and SQNR (Signal-to-Quantization-Noise Ratio)." + ], + "metadata": { + "id": "6alpyrD8mEm2" + } + }, + { + "cell_type": "code", + "source": [ + "# Define the validation dataset and Xquant configuration, including custom similarity metrics.\n", + "validation_dataset = partial(random_data_gen, use_labels=True)\n", + "xquant_config = XQuantConfig(report_dir='./logs', custom_similarity_metrics={'mae': lambda x, y: float(tf.keras.losses.MAE(x.flatten(), y.flatten()).numpy())})\n", + "\n", + "# Generate the Xquant report comparing the float model and the quantized model using the\n", + "# representative and validation datasets.\n", + "from model_compression_toolkit.xquant import xquant_report_keras_experimental\n", + "result = xquant_report_keras_experimental(\n", + " float_model,\n", + " quantized_model,\n", + " random_data_gen,\n", + " validation_dataset,\n", + " xquant_config\n", + " )" + ], + "metadata": { + "id": "e8m0CNs6mE93" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Visualization using TensorBoard\n", + "\n", + "In the TensorBoard, one can find useful information like statistics of the float layers' outputs and the graph of the quantized model with similarities that were measured comparing to the float model. Currently, the similarity is measured at linear layers like Conv2D, Dense, etc. (may be changed in the future). When observing such node in the graph, the similarities can be found in the node's properties as 'xquant_repr' and 'xquant_val' (the similarity that was computed using the representative dataset and the validation dataset, respectively).\n", + "Make sure to choose 'xquant' from the 'Run' dropdown menu on the left side of TensorBoard.\n", + "\n", + "![tb_keras_xquant.png](data:image/png;base64,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QgghhBBCCCGEEEK0I2bPnm3PPfecHXjggU58y4bKyko7++yznajGX6aFEEKIfECClRBCCCGEEEIIIYQQeU5NTY0Tp8466yzbeOON7eSTT7YPP/ww/DVzJk2aZB999JEbHzJkiJWWlrpxIYQQoq2RYCWEEEIIIYQQQgghRB5SV1dnP//8s/3f//2fbbjhhnbwwQfbo48+agsWLAiXyJ433njDxo4da6uuuqqtv/764VwhhBAdjWuvvdYN7QkJVkIIIYQQQgghhBBC5CEVFRV29dVX20033WQzZ84M5zadefPm2dtvv+3Gt9hiC+vTp48bF0II0bG49dZbk4IV4+0FCVZCCCGEEEIIIYQQQuQ5a6yxhl100UX27LPP2jrrrBPOzQ48qwgHWFxcbNtss40VFRWFvwghhOgoIFD9/e9/D6fMjbcX0UqClRBCCCGEEEIIIYTIGASTYcOGueHmm292Xjt33HGHbb/99tavXz83MP7II49YZWWlW4ewduedd54NGjTI/b766qvboYceau+8844Le5eO8ePH25VXXmmbbLJJctuMM4/fGgLvpPvvv7/ece2555722muvWW1tbbhUejiub7/9tt5x+21wbpx3S4OwtMcee9ibb77pyv2oo46yZZddtslC0+uvv26//fabrbvuuk0WvYQQQuQvN9xwQ1KsWn755d0AzOO3tuTTTz9tdJBgJYQQQgghhBBCCCEyZu7cufbZZ5+54f3337fjjz/eLrvsMue942H8z3/+szOOkTNp//33twceeCAZ1q66utreffddJ8A899xzbl4UBCVEoR133NFuvPFGmzJlSviLuXHmIeQ8/fTTsYLX9OnT7eyzz7bzzz+/3nF98cUXdsIJJ9jll18ezomnpqbGiV177bVXveMGtsG5nXTSSfbrr7+Gc1uGkpISJ7hhcCwoKAjnNo0ZM2YkwwFuu+221r17dzcuhBCiY4AX1VVXXeXGl1tuOff84lnGOPBbvntaSbASQgghhBBCCCGEEE0CbyWEp7XXXttOPPFEJzCVlZWFvyZ6eiPsICANHjzYiVtbbrllchmEq+HDhzsxJcrzzz/vPJsWLFjgpgmHx/aPOeYY6927t5uHiESIPPYfBbHpv//9rxOzPH379nXr7rzzzrbEEkvY6NGjw18WBQHs8ccft4svvji5/4022shOPvlk23vvva1r165uHl5PGP/mz5/vpvOdb775xj788EN3/ptttlmzBTAhhBD5QzQMIALVww8/7Do7rLDCCvbQQw8lRat8Dw8owUoIIYQQQgghhBBCNAnEG8ICPvnkk87riPFHH300GYIIQaqwsND+85//OOPZueeea3fffbfdfvvtSeEHEeX777934zB58mS3HdaFU045Jbn9Cy64wF544QUnHAGi1fXXX19P8Pruu+9cj3IP6+PFxbp4ZhFaj7CC6Rg3bpwz5rF/QvL94x//cNs744wz7Oqrr3aGPwQwYLtfffWVG89nEPFefvlld06EN1x11VXDX4QQQrR30olVnvYkWkmwEkIIIYQQQgghhBBNAm+pLbbYop63Dt5QO+ywQzhlNnToUBeCLrrMeuutZxtvvLEbR0RBJPKMHDnSPv/8czfOMocffriVlpa6aVhyySXtrLPOsrXWWstNI3gRntCDxxWiF+BJhGdVdH08tE499dRwalEIYYjoBYTj23333Z3o5llttdXssMMOc+OER3zllVcazMOVD0ydOtU++OADN77TTjtZly5d3LgQQoj2zccff5wUq8hxiDAVFas8iFYPPvhgPdGK522+IcFKCCGEEEIIIYQQQjQJhJzU0HJFRUXWqVOncMps6aWXricYAetFl/HeVHgCeWEFNthgA1tmmWXCqYX06tXLNtxwQzfOuhjsoKqqKik2Aet369YtnFoIxxgHIQBJ+u7ZeuutrXPnzuHUQtZcc81wLOGRle9hAQmBiAiIMdOXmxBCiPYPzznC7SJEkfsRYSodK664YtLTCo9nQvXmGxKshBBCCCGEEEIIIUReUFlZ6fJdeVZZZZXYXEsITlHR6Oeff3aiEeLVvHnzwrkJ41w2sO6YMWPCKXOhC4cNG7bIQHhBz/jx45O5rvIRypScYEAoxJVXXtmNCyGE6BggPj3zzDOxnlWpIGjxTEDkykckWAkhhBBCCCGEEEKIvADhZ8KECeGUZWR8i9Lc9VP54YcfXLjB1IH57YVJkybZRx995MYJcRj1bBNCCNEx6N69ezjWOPkcFlaClRBCCCGEEEIIIYTIC8rKyuqJTD4XVaY0d/1U9ttvPzvttNMaHMhxlRryMJ94//33bezYsda3b1+XO0wIIYTIVyRYCSGEEEIIIYQQQoi8oLi4uF7OqBkzZoRj9amrq7Pvv/8+nDLr06eP8xzKdP10IDz17NkznDLbdttt7Q9/+EODwzHHHGNLLLFEuEZ+QYjDESNGuHHCAfbu3duNCyGEEPmIBCshhBBCCCGEEEIIkReUlJTUy031wQcf1MtJ5Zk5c6Z98cUX4ZTZOuus4/6y/mqrrebGId366UDsWnXVVcMps9dee83lgIqjpqbGDfkMub0+/fRTJ+TtvPPOrnyEEEKIfEWClRBCCCGEEEIIIYTIG7baaisXvg5eeeUVe/bZZ51Hlae2ttbNe/fdd900YtXgwYPdOAwaNCjp8RS3PgLWww8/HE7Vp6CgwOV58us//vjj9sQTT7h9RqmoqLArr7zSDYznK3hXERZx4MCBNmDAgHCuEEIIkZ9IsBJCCCGEEEIIIYQQecOKK65oRxxxhBuvrq628847z84++2x79dVX3XDOOefYxRdf7H7Hc+jwww+3Xr16uWnAQ2uvvfZy46x/4YUX2rnnnuvWffDBB+2www6zxx57zP0eB3mejj32WDfO+hdccIH9/ve/txdeeMHefvttu+OOO2zYsGF2yy23uOGuu+7KS08rwiFyvDBkyJB6ZSSEEELkIxKshBBCCCGEEEIIIUTegJfTgQceaCeccIKbRjR65JFHnIjEwDjzEKtOOeUUJx6xjoc8VKeddprL2QQLFiywhx56yK2LcEWIvP79+1vXrl3d76kUFRW5fR9wwAFumn29+OKLdtJJJzlx7LLLLrNvvvnG/bbHHnu4Y2WdfGPMmDE2atQo5y2G11i0jIQQQoh8RIKVEEIIIYQQQgghhMgrysvL7c9//rPzZlpjjTXCuQvZaKON7Pbbb3eCVZxYhDfRf/7zHycwIWx5ysrK7Mwzz7Q777wzGXYwDnJZ/fWvf7Wbbropdv/Mu/baa11IwO7du4dz8wdCIBIOce7cubbuuutav379wl+EEEKI/KUgeHAtDOIrhBBCNAF6HAI9FXPN+uuv7/526dLF/RVCCCGEEEIsis/RxF/yLfG3qqrKeRfNnz/f+vTp435vryC8VFZWunE8qHyOqUzg/H2eqSWXXNJKSkrceDY0Z//Tp0933l3ZfC9dccUVtv/++4dT2UPeKrzEPv/8cxcS8eijjw5/EUIIIVqXWbNmub+ZPAflYSWEEEIIIYQQQggh8hoEIjyZGLIRi6BTp07JdZsiVkFz9t8W/Pjjj1ZYWGibbbaZy18lhBBCtAfkYSXanNmzZ9vHH3/sXqJwze8ojBw50rp16ya3e7FYIA8rIYQQQggh2paO7mHVnsE768EHH0z2MM8ERKYNN9wwnBJCCCHaL9l4WLWJYMULE67YxAPOx6SUmfDuu+/aO++8Y3vuuaetttpq4dz2wcSJE12CUmI177777uHctmHmzJl23333WU1NjR1xxBEdxiDNx8Frr73m6gl1ZJ111gl/EaJjIsFKCCGEEEKItkWClRBCCCHykbwUrHhJQuBh4EUJCgoKbJlllrFdd93V+vfv76bbC4gRI0aMsAMPPNDWWmutcG77YPz48Xb33Xfb6quv3qx4yM0FkYoeRlOmTHFJUHv06BH+0jHg/J588kn77rvv7Mgjj7Tlllsu/EWIjocEKyGEECK3zJtXYVOnzbAZM2cH308VVh28W4a2aNFC8DlKh8rOncqtW9elbOkeXW2Jzp3CX4XIfyRYCSGEECIfyTvBCm+qBx54wMaMGWNdu3Z14lTPnj2dcPL999+7pJXbbrutbb311u1GtJJg1XwImfe///3Phg0b1mE9kKZNm+bKetlll3V1pb16FArRGBKshBBCiNwwb36FTZw01X4c94tNmvybE6wqFlRabV2dFQT/RMtSGHyPlpYWW9cuS1rv5ZaxlVfsY32CvxKuRHtAgpUQQggh8pG8E6w++OADe+aZZ5xAcsABB9RLcIlB/7///a/LY4SXzcorrxz+kt9IsGoec+bMsTvvvNMlPuW6d6TcVam8+OKL9t5779lBBx3kylyIjogEKyGEEKL5zJw1x776dqx99c0YmzFrnpWUllunzktYaWmpS5wffL4lFhQtRm1tjetQWTF/ni2omGddl+psA1fva2sO6Oe8roTIZyRYCSGEECIfyTvB6uGHH7bPP/88rbhDmMDnn3/etthiC9t5553DuQl4yZo3b57768IzdO6c1guLFzEfbrCxZYGQbWybj7/UZfEK40MFEFWiIhukClZ+eb+txAdl5vAiybFwTI0duz9u1snkPFOP7ZdffmlQsOJllgHizj1KY+WUDirn448/7sJBbrrppuHcRfHbT912tAz4gC8vLw9/WZRszgey2XYmTJo0yYlz5AyjvOVlJToiEqyEEEKI5jFr9hz77ItvbdSXP1hVjVmPpZcJnn3dg/fXzlZUXBwuJVqDmppqqwi+K2fNnG7Tpk21ooJaW3tg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IRrjvffes8MPP9wNt99++yJiVNeuXe3ggw+2srIy69mzp/P4YLyteeKJJ5LHzXgqa665pjtW2HLLLW2LLbZw40K0NXQewkOqKXzwwQd20UUXJYWqNdZYw04//XQnUu25557JexOxCs9IwgUK0RwkWAkhhBBCCCGEyAnk7Pj111/DKbNZs2bJw0oIIURWFBQUOOEH76t33nnHNt988/CX/KZz5872j3/8w3mH3XXXXdarV6/wFyHalgULFiSF4fXXX98+/vhjGzNmTOzw2GOPWffu3d2yeGVRl71YxX356KOPOsFq2LBhds0119i///1vKy4udr/TUembb75x40I0FQlWQgghhBBCCCFygkICCiGEyBUYwYuKisKp9gMeJ4huQuQLc+bMSYpOK6ywQsYeixMmTLBRo0a58WWXXdaOO+44J8x6qOcIyttuu62bJvQg+UyFaA4SrIQQQgghhBBC5ASFBBRCAPc+ojU98BnuuOMOZ8iMMn78eLvyyitdwn6f7H/77be3W265JTZ5/6effprcHmGnpk2bZjfccIMNGjTIrfv444+HSybw2996662T22fZP//5z/bFF1+4vCzpiDu2TNfNFjxRr7/++uS+Vl99dTv00EOdZxGG36OOOip5znhJeJ599tl65RH9zXPzzTcnl2E8Fc6DXEznn39+vXNlnG3GhRBjP/zmt8t1mTp1qgsP5q8F50DnBQzdvqyi61133XVuHrz++usu9w3zOSdP9Nij83/66adkmWQycHypZFM3CG922mmnuW3hWeJhPHUf0WU5Ro41jrj6xTjz+C2O1PqP58ubb75pBx54YL1t3HTTTU3OVeTBW/r44493+0KgQLSIQvnceeed7veTTjqpnmc18PuNN96YPF48dqA17uHofUEdom7iBeTL2tfNDz/8cJH1U+v2J5984vbz+9//3gYOHJjc/yWXXOLylTUE1+CRRx5xIfOix37eeee5ey5136l1h3v/tddes1133dWte+aZZ8be45ny22+/Ja/jkksuaSUlJW68MbhG1Afo3bu3E61SQcBaZZVVwqnEOkI0h1YTrAqqZlrp28dZpweXt87/XaLVB/Zb+s7vguOYFR6REEIIIYQQQohcUl5e7oxc3sNq3333DX8RQiwukMfkggsucCGnPvvsM+vfv78TJHzIKAy1r7zyimsfMGqTsN+DkZaQ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xQURatSoURa6d6+99rJ8XIRNxJvtN7/5jfvzn/9sz3Byar3xxhuxtYQQQojio7dCIYQQQgghRE7woQAZLQ54VTEa3IcNEkIIUTZA0CDPkwdvm4svvrhw+t3vfuemT59uvyHIeE+sskTQ26okIRcU+bTOPffc0On4448vDJnL4A6Eo+eee87deuut7uSTT3atWrWy3+bMmeP++Mc/ugceeKBQDMsUvKI+//xz+07oRC8+At7Qffv2dV26dLG/P/roo9CQf97zioEpCvkrhBAiKhKshBBCCCGEEDmBHBwIVoSGqlWrlmvUqJF9CiGEKFt88803btq0abG/UjN16lTzrM13eEZ5CHtXUpDny+eZIo/jqaee6s4777zQCTErKBgBeacIw3jFFVe4Z5991j366KOuW7du9tu4ceMKc1QlIpUYhye094pr0KCBfQZBOPOe0YQXDPPq8mEAk+XJEkIIIeKRYCWEEEIIIYQocTBo4VnFiGs8qjCAYaRT3iohhChbEM6OsH8+tOudd95pHlTxEx5YCDHwwQcfmAdQPkG4uyAMpnjvvffsO15BHTt2tO94AvM3EJ4vKM7QFgzGSBcGa5DnC7744gv37rvvWllB8JKizfz2PvvsM3fooYdaWL6nnnrK5gHP0c6dO7t9993X/g6GEEwEHk/sU6L8UuSW9KIW26XMICtXriwUtNiXME9pX26zZs1sgIoQQggRBQlWQgghhBBCiBIHwyZJ4zG8YShTKEAhhCibrF+/vjAcYPfu3QuFnXiqVKliXkDc63kGBEUZPG5q165t3/G+QvzYsGFD5N+zwR133GF18t6/jzzyiHv11Vftt549e7p27drZdwSZtm3b2neEt7Fjx9o6tMOYMWPc/fffb7/Fw357L+K5c+e6Tz75xNZhAAci08EHH2zb4G/C+1EWgzp4Ti5atMjdcMMN5l31/PPPm3hFHWhvwKuKHFe+PZYuXeo+/fRT+x4lBF/z5s1dmzZt7HtYri5Eph49etj38ePHu8cff9wGnVC3+fPnu7vuustEK/bRH+MgCGYsB4Q89MdSCCGESIUEKyGEEEIIIUSJgkENYyUjtDFg4llVs2bN2K9CCCHKEngEMcH+++9vAxASgcDiRRZCCK5atcq+B8WXN954ww0bNszdeOONbuvWrTYv1e/FBYEFker3v/+9GzRokDvqqKPcvffe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NGLECBN+SoOvvvrKvfzyy65nz57u0EMPjc11bu7cue7FF180AwChhxCyli1b5r7++mvzqurTp4875JBDYks7E7Hefvttd9BBB7l+/frF5haf8ePHFxHIoHr16tZe1JmpWrVqsV8yx7cDBosmTZrYcWFf+F5SfPLJJ3ZO0JbBthdClA0UElDkEoUEFJnw4SdfuU9nLbAcVvUbNIrN3RnEm89nTHPfrl/jOnTp4dasXu42rFvjdu28u2vesp0JOXgyLVu6wFWpUtW1arOra9CoqXlfrSuYtm3b6nap38jVqVPPrVi2yG3YsM7+btGqvatbr777bstmt2zJPLd65TJXs3bdHes3bOIqVapcsM21bvaXH7tli+e51u06u2677+1qFSyDcLSxoJyli+bZZ8PGzV2TZi2tjJkfvecqV67sevY5wFWvUdPqV7tg25s3b3Q1a9W2beO19d2WTa5O3fpu47frrP4oRs1atC2oexMTqmZ+uKOcXn0PLFivjttesB/sV7Vq1W355csWusoFdWzeqq1r3LSl+377dmubTRu/NU8sPNdatengGhXUrVJBOfEUOrYVvHkke/mgrEUL5rp6tau6ffrs7po1aRj7RQghRCr8QAM+sV/wWVIhAbMhUAkRhPN1xYoV1tfv37+/q1q1auyXssPatWstYhOpQhiYL4Qon+TLM7C8hgSscvXVV18b+14iIEjtt99+RSYEIDyZrr/+enfyyScXzueGjgBTGuANNW7cOBNpDjvsMFerVi2bz0FBvNmyZYsbPHiwO/DAA12rVq1c165dXbNmzexB+u2337pu3bq5GjVq2Drkr0LMWrJkievcuXPWTh7abenSpa5hw4auTZs2th06n4Qu/Oabb9znn39udatXr15sjcyYMGGCeboNHDjQDRkyxHXv3t3Vrl079mvJgFfbnDlzrP4dOnSIzXXmcfXSSy/ZPjVt2jQ2VwiRb3gvAMT8bNOiRQv79PdYIXhGEXq3fv36yhkpIrN0+Wq3YvV6t0v9hgV9sx39vDDwLkKgWb9+tYkxCD1td+3qWrRu7ypXqmTCDSH7tm/bVtBP3GxhA2vUqGVeWfO/+dJVKvhXo6B8RCIEHdiwfo37qeBfnXq7uOVLFrili+fZfXNzQfl81tuloatStap5VX23eZOr37BJwfwfCvrFNVzdeg3cls0b3aL5X1t5GHMo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eu7000+3T+Daev/99920adOKCGJsq2PHju6II45wdevWjc39mZUrV7pXX33VLV++fKf9Pfzww61/Fk+m24qHcp5//nnrC7Zu3dqdeOKJhd72s2bNci+88IJ9j8Kxxx7runXrFvsrs+PIfWr69Olu8uTJRfaLkNXYAQYOHOiqVq0am7szrM/xnjJlivVnTzjhhITRA4q7LU+yNgxj/fr1duw+++wzO/+CbRaENps3b55788033Zo1a2JznatUqZKF8h4yZIhr3LhxbO7PsC9vv/22+/TTT61/76FO++67r9tnn33sPEkE+/P5559bHdeuXWvtFH9so4JQ9uSTT9qguFNPPdU1bNgw9ktR5syZ40aPHm3vIccdd1zCEOXs2zPPPOO+/fbbItdeSUFbsD0iUnBc27VrF/ulKFH3s6TrLw8rIYQQQgghRJmGlyVeRL13FTmtmCeEEEIIURogcjz99NNmIEZw6devnzvggAPMMI/RHmPvsmXLYkunBvHppZdeMg8VBJKDDz7YxAg8zL/66isTGoJiRa1atcyInGzyRlaM0iwPGPXHjh3rJk6caEZuRKODDjrI7bbbbiacfP3112bQjveqWLx4sXviiSdsnxByEBSYmjZtan20Z5991n3zzTexpXeQ6bbCYNAfokgYlBW2/8GpTp06JqDQJkEjfSbHEYEGoQmxhb5pp06dbL/4BMQl9pv9D8J6iH6Ijf/+979NZIsX/+IJ29Yhhxxibcj+sC1EzqDgk4hkbeihn41R/t5773X33HOP+/DDD4ucd2Fw7j733HN2HnDuDhgwwO29996ufv361nZPPfWU7XcQhATWmTFjhh2/PfbYw9qQc4RzhXNm/PjxCduG43X//fe71157zd4LuE44zpSVCZwfbdq0MUGH8zIRCHDsF9cD200FdfJRIkoSBEvODS/iJWq3qPvpyVX9yxNVrr766mtj34UQQoiM8J3IdF4motKiRQv7VJ4V4eGlZ9WqVdbJbdCgQWyuECIZvHBxj2aUJ8YW/uaFnRcoriUhhBDlC29oo59e9b4H7XuQHy84N/ZNiNJj6tSpZvAlcgKeCl26dLHviEwMqsGgvmXLFpufzEsEMN6/8cYbJtzsv//+5tWDURkDNN4iCEErVqwwoahZs2a2Dr8hriSaevfubWIIggxCgF8Pbxk8dehHjRgxwpZlW2yHurIt1kHYYX+A+r388ss2f7/99nPDhg1zHTp0MC8TH1Vk/vz5ZgRHSPH7m8m2wuAd6pVXXikMCU0Ek913373QqwgBKrjvYVPt2rXteLHtvfbaq7COmRxHxBcEKe5VeA/RvuwXdWJdPKc4Xi1btiwijrEPrMf7IJ45/EbZ8fsThPbBcwkhwm8L7yj2Ay8atkV9+J4sskuqNgT62w899JB5rCFS0c9GFGPbHNcmTZrElvwZRCq80+ibH3nkke6www4zTzvOT0QrfqcNuZ8zj/Jg0qRJJqwgcJ1xxhmue/fuhW3I+tSBdkLAQmQJgliEQMr5xjl4/PHHm4jHcQ62dzp4MRPxDdGY9g07Hog3XKec79h5EkVNQUBk/yg30bHNNpzjnA+cM3hlepE6SNT9LOn6V773/ti3n6l80QWxb9mDczcb+P2PYjeUh5UQQgghhBAVAAwdTN7DihdEXraEEEIIIXINAg6eKogOhC0L9kkQNfr27WvzMNRH8QhH3EB0wNiOmOKN+sAgN8QTxBGM+FE8aYDwdoR+Q6jyRnXWpQzK6tmzZ6GI5cGraM8997TvixYtKjT2YgBHeMADCU+YoABHXbt27WrGckQR7y2V6bbiQehA3CBMIiJZJnC8PvroIzM6Uxcfxi3T48h+si4DVBFUgiDAILyw//HGbfYFYYmwdZdddpl5cqWCkNi0KSIVolkQtkXb0z9GqEhE1DbkWCFyIPycf/757qyzzgoN5RcELyOEI8Qs6hc8d2nDHj16WPsinnpPLfrytClwvsf36fFiQuyjjePbkPMEEZTfOBcJf4eXX3C7mUI5nKcIZUyJoM15F1mwYIHVI1/gXsG5x/FA1EtE1P0UmSHBSgghhBBCiHIOL6C8gDESlBcwDCYYDTAWMCpVCCGEECKXIODg+Y1IEy/EAH0WvFPop9BvSQXGewzxGJLjvUkAAz5iC9tNFZ4NEB7IC4SQgWeMFwTYhjewJxIi/HzW9eIYdSJHFfmmGEAUD+UjSrCOLz/TbcVDGDtCIiK64emRCRjvvceTj4ICmR5H+qBAW8RHU6EdOI4Qf+zxnMPTDK+WoOiXDAQrQIiI93Khj4xoBQieiUS/qG3IefarX/3KvJWiRjFAZD3mmGMsj1ZYOD4EMOqNNw/HGdh3BMKhQ4eGCmgs789Z+v5B8GxCKKKu1DNqO0aBY+kFQK4frqMwOL5sn3MqkTDEeYCYSXsHzxHKZJ1Ro0a52267zd10001u5MiR7oMPPgg9fmHLE65xwoQJO90LOB/YHm1C/ROdD1H2M1H9ER4RR72nntgZCVZCCCGEEEJUAHgB4+WLl1defHlJYkRg/EusEEIIIURJ443vCB1hRnoM7vRXEGGiGHYRTQCBJMxThLIIRUZZiYSdIIgXCBQM+MEw7cHwfNppp7krr7zSRJMwfF4ePGa8oRphhpBthBmLF02A/hh1Y3m8sCDTbQVBUMKbht8QRMK2nQqM9u+//759x1MtWEamxxHRC4M+glS8hw3L0v4QFMeAddKBuuMVBZwbYdDelJvo3EinDelrh51/yUB05NxADAvbPwaZUTfq73MhUQfCA7JemACKEINXGXWJFzsJ38h+IqRwbGgjluVYJhKY0oFznDrheZfoPYP6492F51qifFEsQ/hMwiJ6WJ7wjo8//riVz7nHuw0CKPm6yOcW3CblErKS3HHB5blfMP/hhx+24xsETzzEV4Qlfx6GkWo/w+rP+U7eMfLpvffee7G5Ih4JVkIIIYQQQlQAeGHzL6J+xCUvxcleuoUQQgghSgIMxxjN6YeEGfiZ7/sr3hsnGd5TIky0AcryokSUwTp41CCkIBSlk+8TTyK8J9gWBu0osJ233nrL9gFvLi9YpSLVtmhfjOIY5AnNF+YBFQVCyhEekfXj8w1lehzx1EJkw8Nm+vT/z957wMlRXenbRzmHCZqgiBIiiiCEyDnnaLINxjYGbAPeXXb/y/qzvV57d72OGIONMQbbBJNzDkIgISQkoYxyQGE0GmkUZpQlvn7O9B2VWt09PVET3md+9eue6qpbN1U67z3nTnIhAnhOZW4gRADEwkzrMBXkjTxCqr6BaEM+EW3oH1Hqqg5rCnU2ZswY/07ov1RliEJd4m2E1yH5JYRigD6GCBPaBfHkN7/5jT3wwAN233332f333+/zpiUTkDIFYY32pT7x5koFwhB9nXCWiaJRKsgboSmph8svv9zuuusuu/322+2WW25xTznKjOcU7QZ4VtF+iKmXXXbZXtsjIIX5zQLUC3VGXSFapyLTckZBcGThXEkloAoJVkIIIYQQQrQIMGYQcoSRgLxY8QLHyEFErGAkEEIIIYRo6WDExusDwzUeLJmCkX/y5Mn+fEWYtlRzHSFQYSR/7bXX7JlnnnGRgOcyjnXcccdl5KGTybEQfSgHofDwjKoJGP4RPxB9oqERawsiEeH9eDZlbigEE+rij3/8o9cLggS/V0csrA/qog6rA8LNW2+95XWAF9Ff/vIX9wY65phjfC6rVCDisM9LL73kdUidUrfUIXUdQJDjPYB2ffPNN23hwoUeng9vKwRCvNFef/11T6+m8M7B3GpVhdXjePRb8oPXV1Vw3nz22Wf+nVCGeJiFcwXxh3Cb9E/mnQviKGIYfZf241jR7U866SQX7hBNE0Okcy6SFoJwKoE703JGITToTTfdZHfccccenldiTyRYCSGEEEII0QLgBY1RjLy8EhqEUYW8pPFiHEYlCyGEEEK0dDCeY0THIJ5q7qhk4Bk0fvx4f9465ZRT3JCdDAzoeG5g5EYwwNCNAR3jd7Kwesmo6lgID6NHj/ZnPQzzNRWaCDnIfEeJoRHrAp5JmeMHwz/5pS4If4cYx/owj9W+oq7qsDognODdR99AbEFYYq4nxMJU/QmYp4t96Bf0XfKMwEUdR0H0IU3qGPHk2muvta997Ws+hxZzbx1//PH+G+HyEucPqw54TwUPulQekrybIJSR1wULFlQp+JAW3mEMvkv09IPs7GwbOXLkHkIWoSqBPDBILwpeVN///vft1ltv3SusIuc9ZUAsRBRORSblTIR2DKEdRXIkWAkhhBBCCNFCQJjiRZhRq7yYYSDIZDSgEEIIIURLAG+KqVOnunB02GGH+bNSJiAYvP322/4d7w+M56lAKPjqV7/qhvKbb77ZvaoQEvAwQihAMEhHVcdif+acQmwijB2DlGoC6eDFRd6qGxqxKkjz2Wefde+tfv36VdYH3icIDoR+I1wd2+0L6qoOqwviFH2Curjxxhs9DCBiyN/+9jcXo1KBdxH7sCA+0VYffvih13G0DnnuR7CiX7NPtFwIKSNGjPB5wxC9EBBrCuIeohLHRoBLBSELESYJOUnoyXTwDkP+eYdJJvggfDFn1LnnnusiEtCXOAbi28MPP+zeY5SrqsF61A99nigU06dP9zpLRqblFNVDgpUQQgghhBAtBIQqRgwy2jAYQ3jR0ig/IYQQQgjzcGIYt5mbBsN9JhDO7/nnn3fPqXPOOce9YdKBMIBoheGd57ITTjjBLr30UjeSM58TIkkqMjkWghYh3RA/jjzyyEpvk+pCPWDc51mxOqERMwFBCs8tBJOLLrrI65r6QLygLigX5cCLrCoBrz6oqzqsLvQNvOaoC4QW2hhhCcFk3Lhxe4WuC9BG7MOC1xKeU+SdOk4mpPAukGw+LtIhfB5UJSBVRQirh8diondTgN9pa/ozfSId6c6LVHCeXXPNNS4+I3YhPiEM33vvvfboo4/63FOp+hdCFB5qeLql857KpJyiekiwEkIIIYQQooXAyxSGAIwCjDzkJYwXRMKvaB4rIYQQQjQUzKuDRwRG5GQGY+baISQbZBKWD0M9pPKcIC2eeRikgyCQDLwkmCMH0YDQYuSvKgitzNxBHBfvDsSCmogbiAs8o5HPVIb5TI7Fb3jWUFbCmT3yyCM+P1RYmB8JECPwOGFdKk8ajPt4nBEKMFV4vpq0I9sSAo7t8SDi+TQK9U84OwQ8tksl0mQCeQvpp+sb5JOwjPSPuqzDugDhhD6L1xN9IBNoF7yLqGPEtwB1gfcgZQvtkggD3CCVV1Gm4PnHOwd5xoMqFZQPAY18ppovCtJ5LaaD8px99tl211132fXXX+/nNh5ohPp76qmn7OOPP07ad6lzvP8QoZjLLBWZllNkjgQrIYQQdQaTkNb1IoQQom7hJbykpMRfsnmx4sWQl3QhhBBCiIYCgzriAEbzZIIEA2l4PkFwYNuqQGwAPCGSGdpJC6EEw3iqeaIwShN+Dc8T5qapCp6jCLnGJ2H9jjnmmJRiFYZsxCaM4+QjGWHfZMJKpseinAxEAgQ4RI7oEuqaOgrrEC8SQaiZM2eO19UhhxySslw1aUeOHY4ZxJFE2JZ92Lc2wgmiVxAoUwmBCBIIFog54Zh1UYeZgmcOfQOPrnRE6418vfvuuy6e0SeSgfAH7BPqkPpmYV0qb6DQ/1K1TaZQl4iqVYXVQ/DBqwuPvnTCEP2M9kwljlYF9YFHH2E0v/nNb9qZZ57p6wgBmqoOEU45BwjHSJ0nI9NyisyRYCWEEEIIIUQLgpepYFTgBYtQGbygh5daIYQQQoj6Bo8ovBx4JiHMXSIMrkF8QmDCI7wq8FDCsIzgFMSGKIT6w9CNcTyZIZ7f8K7C2EyIskSvn0QwXjMfDiIIRm08ntI9S1FOQp6xJDN8Y4AnD1GBJVCdY1GvzGN09913J10uvvhi3w5B7o477vB1zNWTyNy5c92IX1VoxJq0I8+foX5TiUi0IcJROoExUygrghuh3RLrnvYO3lGUlfqvqzrMFOpoxowZLhAmEzODQINgE0Q/1iF0IZCkqsMgPNGfKBewP/mm3LRxovBDungeAfVRW0JYvRUrViQ9L4G8HXrood6nqYNUgg/p0B/oT9RZIrQtYf5++9vf+vEo/2OPPWY///nP95r/i/4wZMgQT49+luycBPo+9bB69Wq/tqQik3KKzNFbqRBCCCGEEC0IXsx4QSNMCC+weFgxirYmIxWFEEIIIWoCgkUIWca8TQgeAYzmkydPdi+QEA4twG+EicNTPPrsQsg6PKPwdsFThQE6AQz6GKwxjKcK2cdcNgguCFpVzddEHvBuIYQZ3kfMM1TVwB8M3xi08SLBoyOaP8pBeTGI9+zZ08W3QE2OVVtoi2nTpnl9VRUasSbtSLr8TztQF4lCAM+mEyZM8DTZrirxsCoI64aoRp+hH0T7DQIDbc8xeD7eFwwaNMiPT/9DsInmj36CVx51Qr8Ioh8DzgYMGODizieffLKX4EJaiFnUdbRc1DnzOSHaIp5GhRyOS73T1+iHpA+kXZU3VyrIJ95T5B+BLRWUjTYi36kEOPJEX6M/jRkzZo8yU0/0P/oS53AQpsO5RD9MrCNEL9YhBKbqY/R9jklfnjVr1h5tEyXTcgKC4Lx581woE8lpc8899/wo/l0IIYSoEdGH7fqitu7oovkQRlTxQMtDqxCievCiimjFqEMmYualkJdf5rRKZsARQgjR9AhGNZ7T2z70iH+PsuuWm+PfhNh3IDIhGLBgXA+GXIzReMPwfMLcM8GrBBCjXn31VTfsR0UQDMvMkcT+PN/wOwIFnivMR4SQgncSAkzi8w5Gf7bhHYM5lZizKR0Y9T/99FNPh3QxhvN/sgUDPwbv4B2DMRuBBOM3YQL5f+zYsZ5fxIXTTz/dw5YFanKsdPDcx7EIoYh4l0yMwvOG9sDYT+jBdIIV1KQdERRoHwQG9mFfwsHRXqNHj/ayIPKddtppaW0BmZQHMYJnX+oasRNvO/KFWDZu3DgXIygnXlKZPAtncswAfYu2RkjFc4/n7UTIG9dq+i31Rv3TNzjGBx984OvZhjrkHRjIJ2nhHUYd4h3IPpSNctGnKBd9/qijjtqjXJwz0eOF+gj9EEH0jDPOcAEGiMrw/vvve7tSR2G+uEzguNQ/whghCNk/WX1xflBHnBu0N+d2IqSFdxh9JbQfeaJNQ97Z9/zzz/f+BXyGOqJv0efYnvOKhXrgmjB06NCUbU/dU0/0ScS/aD8OZFpOBOunn37a8859Olk5M6X1gw/Hv+2m9e23xL/VHfSjuiDUB21QFfKwEkIIIYQQogXCyygvIIxSZHRh4qhDIYQQQoj6BAPvhRde6EZgvA0w9mLcx/MbseKyyy7ba4Aa/yPsJPOKwJhNuDaM1IgKGKgxNPO8w/zIGOGTeScFQz/pVeVdBWHAJgZnRKQwj1GyJTqvE2lfd911LgRRRspKHhHKWHfDDTe4qBGlpseqKTwPIgpyvExCI0JN2pF9Lr/8cjvxxBPdkI2oEG0vvICuuuqqaokj6aAseKchPiB4cCyOybHJQ7r5x+objkuYx0svvdQFKcLPkT/qkPBy1OtXv/rVPYRMoE7pM3jeUWfUXSgX9Ut5EbkS+3w43nnnnefiC15N7MdxERdpr8R+CJx3yUSYqgjej/RzllQgFCM4IaSlei+hXOSP/sE7DH2NvJMuAhvnF9eBAHV0zTXXuLBImmF7ykzZqaOq2p40gvcU+6Uik3Jy3WLheGHePbE3rWIXu+S+bEIIIUSG1NWIi3ToZi4CPIjPnj3bQzvUZkSSEC0dXqR4oeVFmBHJhCMJozaFEEI0PYJXFZ8YufnkOb3jqJN9fZQdk8bGvwnROKCvBsEFg246rxpEEQzn6ULjYZzGoI1hGJEi3bb7AjzdQ0iwqsrblKhOOwa4VrEP3ki0E0JCfbVXQx6rpoS+C+QvE5GIaz6ePZQPYYn90okwgWh9MFdYMoESgQ+vIIQbRMRk21TFxIkT3UsLD0ZEtGR5o+8888wzLgpdcsklVXoLRsucSV+raR0BXlkvvPCCi2FXXHFFyjbJpJzkg7KS59rQdsTx8W+7aTtzUvxb3ZFKPKwuod/gDVgVEqyEEELUGm629Y0EKxGQYCVE7cFAQjgGRhMjWDGakvOJUYG1fXkSQgixb8AIFz4lWAkhhKgLCEvIPFmjRo2yk0/e+36SCYgehHxEFOOdA8EoGXh5MagOcaywsDC+dt/DvZT8I+wxt1cq0S7TctYFzVmwalwSshBCCCGEEKLeQbAidAyjNxlVyv8sQgghhBBCCAG8LzA3FNEYmAurpiBWEGYQr6l0Ig5h9Qid2ZjEKsCjitCMzE2VzsMs03KK9EiwEkIIIYQQooWBFxUvnngqEpOdUYy8YNUkLr0QQgghhBCi+cEcYjfeeKNdf/311qVLl/haIeqXfSZYMVHZunXrGiSMVHUhNAqT2T3wwAPxNUIIIYQQQjQfgmDFpOSErCBsFN5WjfHZXAghhBBCCLFvyGR+KCHqkgYVrMrLy+1Pf/qTHX300Zafn+8TlbHccMMNHr8wxFve1/CiPnfuXFu/fn18jRBCCCGEEM0LhKquXbtWhrUgJGCY4FkIIYQQQgghhGhoGkywKi4utm9/+9t25513Wv/+/e0Xv/iFPfXUU3bLLbfYp59+ahdccIE988wzjUa0qi1MSPaf//mfdvvtt7snmRBCCCGEEI0NRkyyAGKV5rESQgghhBBCCLGvaBDBCo+l+++/39566y3/fPLJJ+3WW2+1888/30WdF154wScu++Uvf2nz58+P79W0QXgrKSmxZcuW2a5du+JrhRBCCCGEaDwwGTCeVnwiViUKVjzH6llWCCGEEEIIIURD0CCC1bx58+yll16yiy66yC677LK9JnMeNmyY3XXXXTZ9+nQbM2ZMfO2eIABt2LBhr3mvwvq1a9f6ksmoULapz+3rAwwFlJ08MP9XOqLbUjfNxWtNCCGEEELUPQhWLDt37vQoAYTFLi0t9QgJq1at8rDeep4UQgghhBBCCFHfNIhgNXPmTJszZ46deuqp1q1bt/jaPeE3PLCY34qXZUDoOuaYY+z//b//Zz/+8Y+tsLDQzjnnHFu0aJH/zjxT1157ra/v16+fL4cddpg99thje4haCDcXX3yxe3Px26BBgyq353iIaclewhGn2J40o9u//fbbKV/aN2/ebN/73vcsNzfX/vznP9s777zj+3F8Xvr/4z/+w+fv+vjjj+N7VECZf/KTn9jgwYM9RCL8z//8j+9HGmeddZbP90VabENZMB5EIU+TJ0+2Cy+8sHJb6uZb3/qWe3oJIYQQQggRhTCALDxHsjDYqaioyFauXOmfiFfh2VwIIYQQQgghhKhPGkSwCmH+Bg4c6J/J6N69ux1//PF26KGHekiSKPfee6+99tprdvfdd9v111/v25ImQszy5cvtiSeecBHrgw8+cIHr+9//vr3xxhvxvXfzv//7v/a3v/3Nfve73/nvpAv/+q//ah999JF/j/Lwww/b448/bj/72c8qt9+6dauHLkwlADEHwDe+8Q0XwRCORo4caU8//bTdc8891qNHDzvjjDN8OzzJoqIXHlGTJk1yQYzwiAHEqu9+97suXJEH5v068cQTvSx//OMf9xDmKMN1111nnTp1sldffdVmz55t9913n69H9NNcWkIIIYQQIpHw7N2qVSsfsIU3P4OwEKq6dOniC78JIYQQQgghhBD1Savy8vJ6j++Bp9Bzzz1nf//7323//fePr60aPKxuuOEG9xZi7is8kwKITv/2b/9mL7/8sp122mnxteYiDaLNySefbP/93/9tHTt2dA+rm266yUMRJqaDyPX1r3/dhaRf/epX/kKe6rgITBwX8SfxuInwko8QtmTJEvvLX/5i2dnZvn7NmjV28803+3c8sHJycvw7HleXXHKJC1sIVBgFqLc//elPLpxRngChWW677TYX6fAAO/DAA12MYj/mzSLd3r17+7bk+R//+IcfE7GLecOEEKKuiYrn9QWDFYQA7tPc7/Ek3m+//eJr6w5Com3aVG6bY587dmy3nbvkXSKaN61ifxs3bLTt2/e8lvMc2alLJ+vcqZN9GfsTQjQOOGfD/HOdO3W2zp07x763j/8qWjJhUCyfTBXAJ8/pHUftticEdkwaG/8mROOGvrxp06bK/s0g7cSpRqoDz/p4lwODzjt06ODf08Gxw2AeqG0e0lHT8nKuk0fgHsF+zW3AEXUDrVvXvf9FTds4Wu/UN/fk+shfbYj2+ebaN1oibUccH/+2m7YzJ8W/1R30n7oAjQY+++wz/0xHvQtWQbiZMGGCezcNHTo0/ot5mEDC5EXBC+nggw/2EygIRwg5iFOZEMSpAQMGuBcSJ2GydYGQP0LpPfroox5uL91x33vvPfecQkS66qqr4mv3JqSbKFhxAUT0+ulPf2ovvPCCHXvssZXrfvvb39ozzzxjRxxxhG+LYMU2ifUGiFAIbeT5iiuusClTpvjnnXfe6cJVlAULFtjXvvY1O/fcc+3f//3fdVESQtQ5EqxEQ1JfgtXWrVts7bpSKy2tmC9y2/ZtsXt0xUuREM0VngvbtGpjbdu0i31vvcdz4s5dO2zbDp0HQjRGeIds26atG1p79Ohp2VnZ1q1bd2vXtl18C9ESCQZuPiVYiaYOfZhIROPGjfNoRwHshYcffrgP7K6OaMRA71deecXDHodzBWGBKEdMPxKMqVHYjncPpgaJTsuRaj+iLX3++efx/9LDlClEkQpTp3CuTpw40e2nieUlGtUpp5ziAlsiGJOJyEQkqiDoAAPyzzzzTLcnJtoB8ah/9tln7Ysvvoiv2ZvE/CWD+qFuMECn2r62x6JMRLlioD9tyNQwidvRpgzSj9ZbOk444QQ77rjj4v+ZrVixwiN7YT8OVNXPONbo0aNtxowZe4TP5r48atQoj6CVTriivWfNmuVtztyxlJPoWsOGDYtvUWE3f/HFF+P/VU3i/sn6PGCjPu+88yqdHaC2xxINjwSrWsAJQUg9Lhx4Ax1yyCHxXyoEGeZtioInUBCVqhKsOJmnTp1qH374oQtOXFhQjKdPn26XXXZZRoIVkI9f//rX7jXFBSXdcblA4o1VU8EKmKOKfQlpSJjDjRs3uscU4NEVjLLpBKuQD+b2+ud//udKAevqq692wS8KeeHmwAU5WfmFEKK2SLASDUl9CFbl5WW2smilFZes8v95CercpbO179DeWrdqXCPkhKgLeI7eVL7JNpUxknRXpccGfX5X7KW7dZvW1rV7F2vTds9Q3UKIxsCXbhzbumWrD7BgJH779h2tIK/A8nrlZ+QtIJonwSDJJ9d5PiVYiaYIfRe719ixY11sYYqR/v37u+EdYYZ+jYjDfO88v1QFhnum60AY4Dmf9wjOkcWLF7sxlv8vvfTSvUQr3jkQMtiWOeIRqRh4T8QjBIvE/RBvwrQoqcBuyTEpDwPPEUNIH9EJ8YP/mXu/oKDAIyyRR47FAHtEgqh4QjrPP/+8i0Hk4YADDnAPH96XiMCEYIIwQWSmKKRHfSDUpCKdiBRYunSp2xspU6rta3os5lFFzJk5c6anAamOQT0hzCCOpYI+xf2S/oS9l/oEppqhDNQlUbBoZ75T7/Qz7NgIk1HxKbHe6RfYfRHWsAPTnjgjnH766XuJhUBdkF/6JZAGXtNnn322t31g4cKF9uabb8b/Sw7Holzc+7EJ5+Xl+frEPk/fYBv6NNG/OOZXvvIV72dQm2OJfYMEq1oShCnmY8KjKOCjl+MXEy72t956q89BlYlgxQn3n//5n/bggw/6nE6kywmYTJzJRLCK5q++BSsms0agovyE7+MCz00K76cQLhAyEax+8IMfeB6DYJWOqBgohBB1iQQr0ZDUtWBVvqncvli21NaWrrUuXTpZr/w8y+rZ0zp17pTRC7AQTY3t27bb+nUbbO2aUivbUBa7hu90oapndo/YOdDZNqzf6CN4C/vkW9t2mY9cFkI0LBgIy8vK3fC0qqjYdu3cZYUFvX2RaNUykWAlmgvY/J588kk3jicKLkFgQLi/8sorrW/fvvFfksN2iEEIH4kCU9Son+h1g82OPPAbc+5jLwziA9ddIiQhqiBKjBgxwtdXBXlhsDyRkJiyAxEBEKpef/11f+fFPhimDwHyiM2P/ESFFkDQef/99y0rK8vromfsHQY4/xH7sB2S1jXXXONCVoCB80zbwjWC39i/umD3xDkBsQhSiUk1Odb48eN97n/gfYxoXNQ1ZahKREsFYhJtjchCHXOfRAijHelTicJU6Gfca6NtBUwv88knn7iHEmmF/gTsR5r0lWSiTlQg41321FNPtdzc3KTCViaEvnPQQQd5/sP7a8hjYp+nbwRxlGl7iCKW6TtvqmOJfUNzFqwaZMgwSjPg6hila9euLuSwcFFO5yqZCBfrxx9/3AUfRjv88Ic/tO9///suenEyVhcU5egFpj6hrFyQuHHMnTvXvcO4+EZvjJmCi28U1HDclJMt9957r8QqIYQQIgIPXytWLre1pWssK7unDR462Pr06W1du3XVA7holuCRsbq4xIqWr7L1pRtcrOrcpZMVFOZZYe9865HVw7r36G7de3aTWCVEI4fR2D2zelq//v1tv0H7WbsO7WxF0XIrWbPaduys/8FEQghRX+C5gtDB3PKJA7gRCTC0IyQwkK0qGDTOYHIECsLqRW1/CDzMT89zPwPiEMgC7IctDXEEb66ooIAIFOboR4DIFDzEGLCPiBEdeEf+EHRIMypWAXlkW8QuBrwH2D54LRFpKYhVgH0VAQa7K0IXYk8UhGz2p9zcS6oL+2LLRKxCMEw3SKImx2L7Xr16+dQmTHuCYFSd8I+JUHdEuyIvhx12WGV+yT8LdlqcIaJ2afoeIiX7Tps2zfcFHC9CvQ8fPnwvW3J+fn6ll1ZRUVF8bQWkQYhLfqN9ELsoZ03FKtJhihjqhnKF91fW4yHG/0QSi+aRMh511FG+jnLQzzMh1bGEqA8aRLDiRBg5cqSLKatXr46vrTmo+IhfpImXUXWErkS4cOOuy8U/8aZQnyBOcfEjvi2jHigL7sCZEsS/4CrKvtyIuGFwYRdCCCFEehhdhlC1enVx7B7aJXYv7ecDSGrzXCFEYwXPi7KNZVa0stiKi0ps06bN1qp1K+uZ1cP69Ottufm51qFjB2sbe/ns0bObdem6exSuEKJx0759O8vL62V9+/Zxo9eq4lVWHnvPFUKIpkqY7wgxJFGo4DoX5t7BxhiEhFTgIYUdEUEnmXcPAkMQdkKINkAwwwMHwSrZ3FHBcwZRK10ougC2OjxUENrw1gkiAu8kiBd4uvCZjOBRRJ4CHJM8QzJ7JgPWKRfbkccoiA/kg99rIlghdCAAcVwEkXTU5FikedNNN7lQmKzuqwsecYh9tH9UKAz9B9Eo6oEWwCGCdmJ/+hDwrkj+aC9CVSZCfw1tG9ongDBJPuhzODLU9r0TsZQQlQhkIbQf0I+DR1qysH0IdLz3UibOj0xIdSwh6oMGschwguO2+uqrr9qf/vSnypM8ChfdZOuTwc0JJZcLZFSt5uJPWD9cR5PByIvEE5EJHHGfPfLII/2CUdegxHPzSYQLJO7GTzzxhNcLAlaitxQw8iI6ggJQ//EqQ+QK81XhHs2okOeee869tqJQr8wfhvurEEIIISrg5YkwgExRlZef515VQjRHCAFI+L8Vy4psTfEa27Z1m7Vr385ycrOtT//elpXTM/ZyXTFKkrmrCA9Ym1GsQoiGh3M2t1ev2P2sl23esslK11dM4C6EEE0NBIQgsGBYTwbiB3ZBxBjsbulALGEbrpPJPFkQUUgPcSoqCBENCoM/hv+o51UA4z2wXSaiCuII9jqEs+CdBYgWTGGCXQ/hJBFsnQgmQOi4AF5C4f/g8RMFWyCCCcIV4kSUILIhrFAv1DnbZnLf4B2KcH3sg8daMltmlJocqy69d6g/BveTb0LZ0daBMDcWfSDZMSkbv0XFQcpAWEbaK1lowtCP6GuJQiIOE/RF8kG7UBdsS/+qrvMB+xISEg4//HDPV4D06Pf032QiIdtyfPJC2aoi3bGEqA8aRLDipP/mN79pt99+u/30pz/1GJ4INR9++KHHzSSU30UXXeQnCTFXqwpbx0WOGLGou8wFhQiGpxJzOOEqykWE38KFJ8AFlWMTS5Rj/+53v7M77rjDbyzEUU3nwlpdSJMbDSc0811xPObSClBGysANC0U+VThAyvK1r33NfvnLX3oaTOr3rW99y+uNuuKmBtzwqAvELObWomyhftn+v/7rv1z8EkIIIUQFZeVlsReoMn8RZrSdPKtEc2SvEICxF1PmZ8sv6OVzVMmTSojmQ4cO7f1+hnHKB4RuyWxAqBBCNCYwomNsh1R2OmxqGM251lVlcMcmiXiA0b06ogBiA55c2OUI48b+ATzApk+f7vkjLFwmEHIQ0WTYsGF7CUipIL9EWELoQmiJzqMEiCZc88lL8EoD8kqeyTs2x+i8+hDqAjsl8+7/6le/svvvv99tj3/961/dVpkK5p9hQDyiS9RbKRW1OVZdgLcR9lDEpehcaBDe/4KoWVsQ4fA8Q0DEsykaSQsbNWWl32LXxuHgN7/5jT3wwAN23333eZ0wz1qmfRQHDkJMJoaXhKpE2pAHiNqqU5HuWELUBw1mmUGV/slPfuIXJ0YnfOMb3/AJ2i6//HKfpO/aa691cYWYoZnAvogyxNq88847XXDiRvXCCy/YjTfe6IJV4kWPifkQtRBv2P/f/u3f3EhFno444oj4VnUDN0TEMdxXf/zjH9u//Mu/VI6ICBDzEy8pXElTTRLJ/lzMme+KPFMGvMJYRx1GLzzUHXN7cQGmbKF+EbEoIx5dQgghhKhgy9bNtn3HduvStYt17LRn7HEhmjrJQgDyUk4IwN79CqxXQS/1eyGaIZ1j792du3S2LVs2u2FUCCFaOohDCFwY5ktKSuJrd4NxP1nEJ56bzjrrLI8ahZCAoID9krn0sb0hxJx55pkZhUcj2hPCEyJBomiSCF44RFV65ZVX7KGHHvLvCGPM55QoPJE3BsOTF/JE3shjED8QTPg90XsoiBTkCxstYk7wlEKcwMkAu2oieJUhyDBonvmdknklJVLTY9UVzD+FvRjhLjrPFyDAUAbKlWwuJ/pFEE9TwbxOtBGOFH/84x992hcGj5x33nl7OGQgrJIPhCSmzFm4cKE7OiD8kS880V5//XVPrypIg3Ygb9HwkvVBQx5LiECDDiXmAvuVr3zFQ/ChzKL+c1Ei5N3Pf/7zSm+hABMrEt4P8SUR1GDS4qQhDdJ7+umn/YL5+9//3vdLnJiR4+N9hCso+7CMHj3ajjnmmD2En3THJX0uIqRTFaSDCMdxCFWYmB8ufFwQuXmk8ypDTMMrDOGJOuOidssttyQdacLIDi72YVs+33rrrb3KKIQQQrR0eOhm/Fr72P1U3lWiOZEsBCBz3OT0yrY+/QotOwcPDIXyEKI5QkhPFu5xO3akN7IJIcS+Ak8UvH8w4EeXxEhJdQEiD4PEuS4SiSgq5iMivPfeeym9TAipRvg+vJjYb/HixT4YnfwzLz3pZmJrQ4SifISSq2r+fMQT5rpC4ELkIX3siWHerij8hiiFaEaeyBt5JK/kmWlEkoUrJO+IXSNGjPBIVbfeeqtHxSI6FtOlsD/1Eq0rRLEPPvjA24goUYniTypqcqy6gj7G9DDYT3EaSGwr6hTRirbBUSAappB9sadWlS9sr7TX559/7ulgr6beE+dLIx3EHzyoEOxw3CCi1gUXXOAOCccff7z/9sknn+w1nU0itDO2dNogGl6yPmjIYwkR2CfWGS4QeDZx06DD18ZIxIWANEgvk5sE+OjS2D61PXYmhPxFY6QCF6G3337b881FMxNII9PYuGHbxOMKIYQQouIlmXsxjw4Sq0RzIjEE4M6duzwEIB5VBb0JAdgl42dmIcS+pVXsr3Wr1imXZOdym9g9jYV7XNTwJoQQjQkGV+MNRDi06EJEoboGDxqiG+EZgrhABCK8l/CIYYoRxKRkdjauoXjCIKZg1yOKEmIL024wWJy08Goi5Fw6ED6mTp3qAhL2v6q8khB2OA4LUZMQVdj/73//+17HIvQc6xnEz0B18hb2QxRhED0D8rknRMFhgEhVDKCPlp1y4slFXSGcRefGIqQhYhiiRVVeYlFqcqy6gjwjRpIHhKlEOPZRRx3lbYLoRN/AW4rpWOifiDVVtRdeeKG9EJ/w6EMYffbZZ/cS/BCsSI99ogIk76O0O8IjoheOCqmgLcOcXNUJL1kTGvJYQkSRhaaBYfQGLsiELuRmzAWbkQZCCCGEEELUlGQhANu0iYcA7Ftgefm51rFT3c3XKoSof9q0bmPt23a0Dm07JV3att57InV3Hc58ihYhhNgnEGUI0eOQQw7ZY0kmKtQFePlcccUVLpIgCOC9hEcMnjeXXHKJ5ebm+ncGlQeY94jtWHfppZe6JxPh7Ejj7LPP9ghMeMIgaKUbIEA6bFdYWJhR+EDywXFY8MhCKBsyZIiLJ0SZCiCAEH5u06ZNLlYxTQh5C/sRlYq847GDuJYpeIBRX4grCEmA6IMIgwiGJ1BdDfhLdqy6gqhWtB8CEdOtpBKeCHN34YUXunhFHSNcIWKSN9odLzuEtlQOAewX2ovwfnhO4TmGVxKCWSKkl0o8C9PFECoxFfQlBC22r45wWBMa8lhCRJFg1cAwWgRln7moUPEJ7VeVWi+EEEIIIZLDy+iaNWs9ZHN09CgvvuvWrbeS1SVVhvJoCMhbeVm5LV60xOZ8PtdWFRV7qL66IGkIwA7tLScvxwr7FlhWTk9r1z6JYTsBBC/yRV3WF9QD7VK8qjjWLnUX9idVP2B96dpS/wx4W8S2Y/vo+ubErl1fukGuaGWRrVi+onJZVbRqjzoiPNLq4tU2d848W7RwcWyfMt9XNBJaVXhYtWqdYpG3pBCiiYKwgpcJ8/xEF4QZIhVhIIdUIQK5lzEgHEEmkyhEgEcLYei+853vuDcMnzfffLOHbmO6DgSJqAcJogXPk3gUkd8oXH9Zj/iAZxBCRzJ4Bv3ss89c4MHLi7JVF/ZFCAE800KdICbwP/nm98R7Anneb7/9/F6fTDhJBTZKvMEAIY46IFwenmKUB6+yqFfcc889521Bm/ztb3+rlqdc4rHqkgULFrgIhiCWOAVNlNCW9AdCFdI3CF2I3RZ4VkS8SjeVSxS2QzDkWSsqFNKnKSvtQV0lI0z9Qp2nYvr06d4W5Jk5sJJBHuhriJrR5+JAaC9IF6Iyk2MJUR+0CMGKi/Sjjz5q//Vf/1V509tXcJLjkjtmzBh78MEH044e4WLJtkwMKIQQQggh9mblipU2ftx4W7xwceWLLi9nC+YvtDGjP/RP/t+XIMzMnDHLXnrxFXvxhZfstVdetxeee9Hee+d9z3+yF8lMIe1oCEDEhi5dO1s+IQAL86xrty5JR8Eini1d8oWVlKzx41N3iGljPxwbW7+0VnkKkAbpcxyOB7TFnNlzbOxH49zIUlcgSk0YP8Fmz/q8sr29TLF+Mfr9D7wfhJd/fmc7tme/5sj27du8zz3/7Iv2jyeeqVxee+WNynNl7Zq19lGsvV99+TX7aMxYe/ft97xvzv18jhtTxL5n166dtnXHFtu6fXPSZcdOtZMQovmBiBG8WVIJQXgV8ZyBja86IhDiBCIT3jB88j/CFEZ57HNRUSIIQ0FESIRjk1eeL1I9axJCD9GEtBFOksG+CEKEoiO0XzKCGMW24RmN7xyb31LVAeWEqPCH6IR3GZ4zyUQi0o8+B3KcEIqQ7wyIiS5hIAxpUY+sC8er7rHqCo5PGEXAcy+TPsLzMh5k1BltS77w0KLMeD6FNCjTu+++6/NbpQoHGZ69eZ4Kz5/0IxbW0X+TUVWfW79+vc2ZM8eFL8oV+kUi9GOEXNom2eAs2gLRijKlEuIyPZYQ9UGLEKy4UCBaMfJiX59gKNe46RKbNNVFIcANmnxX5+YrhBBCCNGSWLu21OZ+Ps+KV62ueFneWSFSjBk9xr1LevTssU8HLPGSO2/uPPvgvQ9s9api69+/n+0/bKh17tLZpk2bbh+PHe/CQXXh5XfjhjJbtWLV7hCAbdt4CMDCPgWWm59rHTqmDgGIAWjKpCl7CH3Mb9Urr5cbcOoC0iV9jhMMTjyLd+/RvTL0Tl1B2y9ZvNTFMOoC8DSbP2+BffjBWJvz+Ryf3ws2b95i8+bMcyGtPowkjQHKvmTREvcwzMnJst59Cn3JL8iL9b0ubqSYNm2GfTbpMzdo0Cf79uvjYuX4jz/x/cS+Z9eXu2znrh0pF34XQojmCOIOzwzLli1zgSAKz0Bhjh/C7NUmahFiEmH2MMozv1TUZhjEHp5hkj0vIM5wP2XfZM+aPAPiXUV+CTuX6nnUn5cWL/ZQdJQ3GUHICJ4zQHocmzyQl0TIc3j+CmUBBJP333/f5/FiypJEEDlWr17t9UoIQ57XrrvuOrv77ruTLjfccINvwzHwTmLdcccd52lV91h1BfVIWD285/Ayqwn0MQQbbLO0X4B2ReTE+yiVoBrai31D/6TtQvjDuXPn7tWnSDcM5qJfJ4P9EMmqCi9JW+AtSP0uX748vnY3tAVhHnnmp46SkemxhKgPFBJQCCGEEEI0C3jxW7FipX304TgjtNnRo46ywUMGVb7Y8yJYVLTKZkyfafPmzrf16ys8kgAD/7rSdVYaW774YpktWrjIvYJIk5GiCB9TP5vmXkiJIxUxpCxd+oVNmzp9r3R50ftsylTbuWuXnXXuWXbRJRfa+ReeZ5dcdpEdcughtnjxEt+HvJEHXh45Xtifl9oNsfRY+A5bY9t9sWSZTfzkU/t04mT30mK+ql55OVbQJ9/adWgby3uZh/hb9sVymz5tRmW+SYMRk8uXrfBjI9qsKVnjBoVeebl2wEEHuGiF8YTtSDsaUo7/Wb87L1tjx1hm0z6b7qEOCfdH3ikL6ZI+x+F47Ae9+/S2Aw8+MPaCvDu8DuUnTCBeQZ/PnuMiHuIjkB51Ql3ySVkoE2XDSAPdunePvZh393bfuGGDr1sf+yxZs8a3Wb8uVofx9fzOdmzfNfZCT5qE1SG/C2LtXLRylZcvVdmA/PI/ZcLQMmvm7BptE6BtQrnoS8E4R//D2EC/JIThwgWLYnW53NsrHZSZ/A/Zf3Csr11sV11zpS/nXXCuDRy0n/eNxbE+np2b4/3yhJOOt1NPP8UOPuTg2LHIrwQrIYQQ+w7mesfgjuiAh07UuE8IviVLlrhgQwjBKDxHITIEwSAV3CenTJliTz75pIs9o0aN2mt+eeasQmxAuAgCWYD9x48f78ch1GB07qsAeUQsyM7OTjv/DwNHQjkQuChDFJ5/mIcKMY1Qc+G5FlGCMG3kgbyEZ6JAyDei1tChQ+NrK+ZQomw8a0ycONGfVwI8/1Ev5IEB9MzFVBsa8lgBjjF58mR/lkOEDN56mcIzGVGxXnzxRU/r1FNP9TYM4IVFiEHSp10SBVXaHDGLvhPtn7Qf+UHcmzlzpvfrAP17woQJHkKQukgWwpDnwWnTpnm6VYWX5NwIYQkJz8i+gVA/PEsi5iWrn+oci/6JtxleZ4l1IURNaXPPPff8KP5dCCGEqBE8bNY3dTkSXzRteKlhVBgvsTzQ1wQe3kvXlVpZeZll52THXjJ3jzoUTQsEqqWLl1p+YX7sOtHeQ9ph2D/m2FEuCIVrB8aIqVOm2SfjJ7jnCfP1IL4w2pG+hKAwYfxEm/TpZBdNEAhycrN9bqiPP/rYZs/+3MWLBfMX2MYNG2N9r4e/hNMffb+Jk11AIfQc6XbuXJHukiVLbcbUGbbfwAE2YuSRlfMskK927dq6ALF92zYXEdavW+/pbCrfbHn5ef6SyEszQhgjgHN75boQNC1Wjg/HfGTz5y7w+YcYjdmxcwcbNGSQdeve1UUX0mH058JYfhDEMN7wgopxY+WKIpsxfYZ9sfQL2xZ7We3SpbO/rCKEUPZOnTp6vcycPsvra+6cuTZ/3nybNWu21wMv3Pl5eS6iTZjwqU2eNMXLvmgBZS/ysgMiH+nhrcOAZY7BsebMrkiP+iE/CEafTZ7qnj20zZLFFQv79Iid45yvM6fPtMmxtkH8Il3mXFoQKx+RFHJi5zD1isjiYXfy8110W7JosXtd4TlGfWdnZ/l6vIjmx9qxb/++sXbZz2bP/Nw+HvdJ7HO2i2XM/0V6k2LlSlY28k2eJ8bKjmi4dGmFwMm+tD2GjEy3sVgZEeqoZ/onYunCWN4Q1/gdL7n5sfYbH8vf9Fg/oj6hsHdBZV9KBn0Ur7K2bdpaQWFhhcj6pVnbWJ+j/Xbu2Glt27bz8vfp07sydA19ALFwwH4DLL+gbgxHomHhfOG6VFZWbllZ2datq+5vLRX6AvCc3vahR/x7lF233Bz/JkTjA4M7z1k8yzAX0aJFi9xrhjBv48aN82eaY445xoYNG+b3NSDM2tNPP+0iCM99TMkRBSP8U089ZR988IF99NFHLuZwfpAOHkHhXhjgPYP7MWH6EBdCHpgPCq8hxDSeY5iLi88oiBkffvihv7MMHz58r7wkQjQmhDie6Sgj34PXFeIJ5UHEIGJTEA/IL94x1BH7IZKQJ+oL8QOBiHwcfvjhduihh1aWj09CFFL+pUuXujDBfvPmzfO6IT2eQU877TQX46qCvCHAsA9ljb6319Wx0h0jEeoOAY9nrZNOOsmfaauC+mNuLvoF/Yt2Ju9nnnmmHXzwwZV9DPhOpADKxHMnIiN9hP5B240dO9b7J/sdddRRe+zLszB9jrqgDkKfYh+e1TnmGWec4SEIE8HjiTZG2KPPphORADGTumBhP8rIMelPHJO+c/bZZyetn+oci0FftCXCFaED07WNqFtaP/hw/NtuWt9+S/xb3UF/rgtCP+IaUBXysBJCCCGEEE0evGM+/OAj91I5/IjD7LAjhlvHThWhV3jIJgQcYlSb1m3s4EMPcgFp+RfLPFwdxgg8bmbOnOVCVk5ujgtIePhMnzrdBYYBA/rbYYcPd+PJ1ClTXQRiJCuf/I/Ic+hhh8ReMPu4YIS4gmCB1xZhuxCbEl/gGI3LS+KGDRtty+YtngeEGF4imbsGGP2IwEJovdI1pbFyLLAJ4z+1ktVrrF+/vp4nwgBi1Fi1qshfggmPiKcOQlFh70I7+JCDvCyIQsXFq10IyYm9aCPk4OWE4MPoW/YjvCJhFjEIEE6xsLDAPaKysrOsJLYvghL1iQGEvBKCD0+l4Ycd6gLQwgULY3X6mW9DuqTPcTieCzRWEd6HfSkv2/H9k48nuIhy0MEHeng6vNQQkXihZxv2oUzsQ1sccOAwF8w+m8xI5FJ/AUKMIn36AqON8aYjTCJ1RPmKVhX7eubVwnaQF9u+deuK/NDOzAc2cPAgF7ERJlOVrXxTuY8gpe0RzxDh8Bgj5B7i3sRPJnqfymQbjGeTY2kiZCFSHjr8EK93hKnZs2a7QEm7IFquX7fO9ttvgPWJ9THKkw7KQl0xVxfzUjGXFQvpkC/CMiKgHnjQAZUvj/RXBFDymm4CbiGEEKIhIAzbOeec489eGN0RbxAJuG8h3GBIj4oBDOQIU4Ek83jiGYl7Hc8CiFF4jnzzm9/0tIKYE4V1GPTJA89reM6QB8QrBoLgPUOovGSeQUHAQHhL510VYLsrr7yyUhygnBwLgQHI4+WXX+7bRUHk+epXv+p5IU/kjf3IK3km73gI8VwXhfJfddVVe+zHfE2IDngTXXHFFRnlOxMa8lg8nxLikefngQMH+rEzgb6BKMZ+PAMhdBHeEHEs2scCpEsoRAQaf8+ItVPon7QR9U7fSexXpHXsscfaeeedt0efYuAcAtJll122R/jBAM9uCLEMREgXXjIK21x44YVe77yzhHrH858QfxwrWf3U5FjA+ZfYz4SoKa1iL0l7xqMQQgghqgkPafVNspcO0TLhhYCRjYTtqGlMcl5KFi5eYEXFK23I0CHuYSCaJp9OnGSvv/KGG/5Z/GXvyktjL5iHWus2FS+JvJixDcLQueefY/3693Vjxfvvjnavl1NPP9VfKN96420XZ84+50wXWRAUELAQoxjV2qp1K/egeu+d92Jp9LPTYvt99OFYFwFOPuUkFwC2bdtun8/+3L6M9TH61uRPp3hIwBNPOcGOGjnC8xPgRf3F516Kvbxv8RCB5O/1V9+w/gP6eT55QWSb12J5L9tQZkceeaSVbSz3UWmIakOGDrIeWT2MObIQQA497FA75rhRNu7Dj435sU448Tg74sgj/Fjjxn7sdXXsccfY0ceMdCHlww8+tEGDBnne4MPRHyXNKy/veDiN/ehjKygssJNPPdGvyYsXLXahbcDA/dzzKOSV7S+8+AIXrEiTl/cTTz7RhShegikjoQIpI3Mqvfby61a6ttTOveAc9/j5cteXNnPGTHv/vQ9s8JDBdnysHO+/+759sXSZnXPe2TZ0/4oX73ffes8WLFhoZ5x1ugsveIyRNoLTcSccFzv2h264OO6EY2P1M8nLcsJJx3ldrClZGzv+2S5yhfxUpD3UdsbuaRiZ0pWN9n35xVf9N/5HAMJD7vXX3rRVRas8LcSuqrbhxf7tN9+xgoJ8Oyve7/AUe/Xl16xt7Lezzz3bZkybYVOnTvN6OHLEERkZA1YsJzTmWBfvEMKoB4RU+tTZ555pBxx4QOX5AZQVbzD6MgIdfUQjZJsmiNN4MBLactDAwVZYoPtbSyJ4VfHJsw6fPKd3HHWyr4+yY9LY+DchGjf0Y4QO7mU8r2HoTyYwAf2ee3V93MN4hiFtRAdEtFR5qC2UgfLyWVV5o7A9XmbUFwNbMhUauEZwPEB0qM/7f0Meq6GI1jvPaLRXMpErkWi/rk571YT6rHeEsJdeeslDEF5yySUSrRqQtiOOj3/bTduZFe88dQnXvrog9HG8Equifq6uQgghhBBCNBAIVRjcETLwDsGTiFCBvAgCnjh42yCwIHz844mn3dsEjx3CBzKiEhCmsnr29DBsQHgXPKbwZnr5xVdcXJrwyUQXAYLRhNBpiGSEdCNNPKsQHw474jDr2q1rhSgQe2flZTbkJ1PYfOuWbV628rJNLlYR3qSgMN9KS9d6+JB333nPRQbELp/zKX6Irl27+LxOHJ8Fb7NWsT9eOMhLppBn5q6aOGGSv9yOPHqEjzzlZbdvv77WKlYHo98bbc8/84K9985o+2LJF/5SjKCTCQg4hBJhLiXEI17wyW9B70IXeDasX2/btlbMQ9EtVp+E72SbYBCgLOElqnuPHh5qhXB4hG9kPZ5tpJuVk+Uv6oT3o65oG7YPkC4CEx5X7dq3y6hsbdu2sc6x/kYIQegWSwOvN/IW+lS6bcgnHk1FK4vcy4w+Rt9849U3XVwinwirvl8sv3ioZWoEIJzlSSefaF+5+gq79LKLfTntjFO9TphHa8vW3S+erKMPMbfbgP362yGHHtwsDEhCCCGaB0Eg4rmM56B04g2/1dc9DGMreeBZIxMBqaaQNuXMpLxR2I68sV91xA88utiHpb7v/w15rIYiWu/000zEKoj26/oUq6C+6p33IQQrykJ4TolVoq6QYCWEEEIIIZo0XWIviSNGjrDLrrjUjj3+WPdewVsEgz/wMoXwwgslggMGeoQAPE+OOOJwF5iSgYcVXknMY7Rp02ZrFx+R2Dr+MoawMnjIIDvplBPd0F+2caN7wrzx2ps29bNp7gXUqXMnP3Z5WbnnIwrh3tgGgaRtQoi3nTt3VQgaq0qsbEO5CzPMP7Rz1w4Pk0ccegQVhKP2sf0zMWaQBqJWdYSzNWvW2KcTJrlodNTIIz3EIC+ljDCeNXO2fTx2vK0uLvEXVOrG50hCocuQUCeUg5fpAN5F7WL/fxn725Umv5QnpIGAhecZbUU4P+gdyy/rC2Jt/eWXu1ys2Rz7He8v1iejpmWjXmhLtk9Vx9FtaA/Pe2wd67fG+gJ9kxCSQ/Yf4h5zCLA1gfwibFIf9FOOiWchc68RDmn7tu2+HWUlHCH9HGHv6FEjrWdWzeYGFEIIIYQQLQfm8OK9hKgnyUIZClFTJFgJIYQQQogmTdcuXdwTinB1zFc0dNhQnydo2tRp7p3UsVMnH/k4ZOhgO//C8+yqa66sXM44+3QXYZKxckWF5wuix6WXX+xh+046+QSf1wkQm4pXFXsYt7PPOSu2zSV2zLGjfP4lPK1KS9f5pMyE+cBLiTmFArt2felzE5WXb/JJkREm2rVr6wtiwtqSUluxrMjWril1UQFBJzunp23bvtVFpAMOGmZXXHmZXXzphTYqdkwEmLoGj6SpU6bZksVL7KBDDvIwcmHupDLmR5o523bt3Omh7C694lIPpTh06JDKbTKBkaWIK5s3bbKtWyq8iQAPpbKycmvbtt0eQlY6qLvc3BwX12g39sPDCjEPMaZdu/YePpF2Yzu2T0Z1yhbVpRCf2BdRNLpdqm3wumLkdHZ2lh1+5GF2eaw9Q7/8ytVX2qhjRronWHXhGMzBhdCIN2AURE7qJYi3hLhkXi76z7HHjar0chNCCCGEECIdhYWF9q1vfcsuvfTSjJ/XhcgECVZCCCGEEKLZQBg5vETy8vJ8/qj58xe4KII3FfMWIb5U0Mrnp5o5fZaHDEwGhv8d23fYzl0V8yGsXVvq3ijLl6/w33fs2OnCyEdjxvpk4IgL++03wAWI7ey3Y0fsuL18Xqbly1bYpImTPAQhce4JT4gXGJ42zHXVoUNH69QJ0aq9b7tw/iJbG8tv8apVHjKvU5eOltMrx0WOnTt3uHfOtu3bPKQcXkPFsc/qsnXrNg+niECW6BEUPG8IE0d4vv0P2J8qcw8gfvO6iZVvR+yT/FAm5pNauHBRZRi7AHN08XuFd1d8ZRxC5OUX5LvwN+fzOZ4+YtXsWZ/bpljemF8OQSsTEFpycnOtTeyFmTpDSAzzHxL+j5B/zEWFWMN2qYQZPLoyKRseUUyqThtQJ4QhRBDrEGsjJhGvahtCKyIQ0T/pi0y4zcs+wt2smbNs3pz5lZ5Q1YW+zlxdnAPUJ/W6ONb3KQsiHoLa4tgxx330cawezI4YcYRlxfJM+bbEjk9eq+OJJ4QQQgghWh6EM5RYJeqaNvfcc8+P4t+FEEKIGoHhtL7J1GApmj9r1661kpISn8+lZ8+aha7CEFu6rtTKysssOyfb568RTRPmqlq6eKl7VxGWDwEIbyrmbFq4YKELBYgevXrl2to1a1xgWrRwkc2aMduFHsSNvv36GGHkli5Z6vNRkQ6iRpvYUhLbh/mEFi9aYvPnzXexCq8VPFLw5EK4Yf3cz+fZwvkLXeBZV7rehh2wv+0/bH8XTcgP4f3mzJnraRGujrmw8LoaftihPt8Vcx1tLt/sYtW8ufP9t6KiIluzdo2Vx/ppn7697aBDDoy9FHayolWr/JgIDvPnLbSVy1fa+vXrvQ76D+jvaSDYML8WIeGS1ROCBGLe/Fh+CEGHsEP4O+b64nfmwBoz+kOb+tl0F3bwBps5Y5YvFV5huS7YIbwtXLDIBR3qj3CMeIPhzUZdritd5+VetnS5X8c519hn/foNPucYYhUvupzTc2Jtgyg0Y9pM+2LpFzZo8CA74qjDjbnFKC+iC/sgDHLfoTwhv71jbey0Mk+fEIwjjjrC+oe2bNPa58tCsMRjDo8mjoswlZg225bH2iJd2RB8ENWYf2rD+o32eez7pE+n2KZY3Rw58khPizSr2ob+Qf1+4ULWfO9DzK22PPZ/VnaW5cXqZ/my5Xu1ZzooL3W9LlZePA0pw+yZn3v6eXm9bETs2Jwf48d94mEPt8fqYP26DbG8zvb2RThEqM3OydrDU0w0Dbi/cZ/EQzErK9u6ddX9raUSRGeul20fesS/R9l1y83xb0IIIYRoarR+8OH4t920vv2W+Le6g/eluiAIm7zjVoUEKyGEELVGgpVoSCRYiT1pZd26d7W+/fpaVlZPN/63ah1b5xMLd7XOXTq7F0vvPoUeBo7fCRPYOrbNgIH7uWCU2yu2PvZ/p86dPTxgSKdjh47Wo2d3n7sIAz4iDkLU4CGDXSApLChwTx36DwIQHksIAQcdfKCn26NnD08HwQoPLwSSbbHtAoSmax+7tnG8HTt22bo16+zLXV9amzZtrU3bNp6vYQfubwccOMwGDhpo+bE08CBDXGIuJcQy9h120DAbFPu90MtY4WHEPESFvQvce6eCPeuJ4/oEz7H8UU8IR527dLGe2T2tX79+sf06eV5Ih4U64CWDBbEO0QfRijrjJYb1eJeRVwRAwiZS7g6xYyDyxA7j51qv/F7+P/uyXcVk0109zdA2HGv//YfakSOOcG8g1iPC8J0ysb+XKLY+5BdPLWjTuo0fs9+Afh7CL4TUY1v2y8rJciGMtkPchMS0KQveWOnKxjUEcY380xcQp7rF2uWIIw+3Qw492EP94dlU1TZen7nZfj3Dm4o+xLxnB8b60IEHHeChIr2ckfYM84qN/3hCpYgYlpUrVvrcXL3y8mJ1mhWry3Ye2pH+jbB31MijrE/fPp5/PMjoS7SLz6MWywtL+9g+1AdtxP+iaSHBSgQkWAkhhBDNl+YsWLUqLy9XrAchhBC1oq5uYOkIYZ2EmDdvns2ePduN1EzwWhMw3ixcvMCKild6ODY8cETLwA318WsWD82IAVVBf0EcqvDUqRA5EvFtdux0YSCdkZ9js+2GDRttyqQp7uVFX+7fr7/t2B7bP5afTp07Wo+sHpadm+XCUTIIr7dz104XaFq3qVmUb+qCcnHMVOWqikzqk/KSX+ovXV5r0jb1Sbr84DX1+qtvuJB0znlnV7Z5dLtMtonibUo/i9VRuvZYvbrEpk6ZWhmaMkpuTo4ddsRwFyahsdWpqH/oR3gNFq1cZYMGDrbCAt3fWhKc8+GTa2+4BnQcdbKvj7Jj0tj4NyGEEEI0NdqOOD7+bTdtZ06Kf6s7GHRXF/hgyRifffaZf6ZDc1gJIYQQQogWAwZ7wpyxZGq8R2hh+3Qigm8T91JJB7+7p09WTxt+2HAbPny4derQ2bZu2Rb7rY1l5fS03v0KraB3XkqxChA1yFNNxSqg/OSnpmIVZFKf1A1eU1XltSZtU59kmp9MtstkG2/TWB+qqj3wRjvplBPtqmuu3Gs58+wzrHfv3QJFJscVQgghhBBCiMaCBCshhBBCCCEaEMIHlq5ZZ+vXbrAunbt6aEvmacrNy7XCPvkeSrAq4UvsWwjnR1g/5qFK1VaZbFMTEAARPRmlmLi079C+ViKmEEIIIYQQQuxL9DYjhBBCCCFEA7F1y1ZbvWqNFa1YZevXbfB5orp07WL5hXmWV9jL59xifi3RuGFurMOPPNwOOPCAlGJUJtsIIYQQQgghhNiNBCshhBBCCCHqGeaVKdtYbqtWFltx0WrbVL7ZQ7/1zOphhX3zLTcvxzp0aB/fWjR2Qqi9dEJUJtsIIYQQovZs3brVHnvsMXvggQds48aN8bUCxo0bZz//+c9tzpw58TU1h3nxNm3a5HXMkuncNmwX9qGtagtphPTIT5i/Lx3M51fdfZoC0XKVlZX5/IWZEG2TmtSHz1Fbg2PV1XxIyUjsn2Ee1/qAslPftTlWdeqwpdGqvLy8eZyhQggh9hn1+SAQ6N69e/ybaOnMmzfPZs+ebf369bP99tsvvrZ68GC4cPECKypeaUOGDrE+fTQpvag/tm/fYRvWbbC1JaW2cUOZXzMRp7JysywntnTq3MnDvAkhRG1BHJ8/b74VrVxlgwYOtsIC3d9aEsHgyCfPOnxyz+k46mRfH2XHpLHxb0I0PBh6n3zySdu2bZtdc801lpWVFf9lTxYsWGAvvPCCP/NfcsklKed5RMB45plnbMOGDXb99ddbt27d4r80LThfKceKFSvsiiuusP79+8d/2ZNM6w8QrD766CO7+OKLbdiwYfG11YNryeLFi+3dd9+1tWvXxtdWDM7Jz8+3888/33JycuJrd7Nu3Tp75ZVXbOXKlZXXJ555hwwZYuecc46HM64Oq1evttdff91WrVpVmR4QhvmUU06xgw46yPMUhTr94IMP7LPPPrOdO3fG15plZ2fbeeedt8fcn8lg/1mzZtnEiROttLTUr63VqcvQhzl2VftV51j0+dGjR9uMGTP2KFeHDh1s1KhRdvTRRyd9v0jWJpBpfaxfv97zN3PmTG/DVOVJ1WeAY5155pk2YMCA+JrklJSU2Mcff2yLFi1yoatPnz5+XlDGRDhnXnvttT2OxfXi8MMPt5NPPjnpADLOI4RuypSKxGPSRpR/woQJe4ivHOvQQw/1fkjo7lTQpsuWLfNy0RbXXnttja9XbUccH/+2m7YzJ8W/1R11JTKG851zsSr0ZiyEEEIIIUQ9sXXrNispXmMrl6+KvZSst527dnrYv7zCPA8DSDhAiVVCCCGEaEkgMPTt29cNxvPnz4+v3RvEkB49etjy5cttzZo18bWpwfCbzljc2MGoPnjw4ErhIiooRMm0/gIY22sj4n3++ef23HPPuYiCoHHcccfZEUcc4W1TVFRk//jHP1xMioIx/umnn3YhoWvXri4mHXDAAd4+c+fOteeff75ahnD6wBNPPOHH47gcn3z06tXLvWoQKz755JP41hUgDrz11ls2adIkF7IQyg455BAX1xA2EAdJNxXk/eGHH7Y33njD+x95px7xoM+EzZs3u1gYFZRSUZ1jUW+0x9SpU/13ynTSSSfZoEGDvO98+OGH9t577+3VfxLbZOTIkXbCCSfsUR/UbyIIo4gMDz74oP3xj3+0yZMn7yHWJCPaZ2gjRDSOx9y94VipvP4oA0LXI4884gNVOT757dy5816CJNCGpEe6lIX6oK3ZlranD9AXEqF+kq1PRehP1C9tuv/++3u9I9px7lJHL7/8suc/EUSxd955x373u9+52LxkyZJqHbul0eaee+75Ufy7EEIIUSMa4kabbBSNaJnwIMpoK15UeOCtCTyclq4rtbLyMsvOybbu3ZvmKEzReGFuKsL+rS4usTXFa2zL5i3Wtk3bWL/tbnkFuZaVkxV7Ec3sZVcIITKF+xv3ybKycsvKyrZuXXV/a6kEQyXP6W0fesS/R9l1y83xb0I0PBiSGW2PURuxIRh8E8FoT7gtjLu8D6aKroDxGIGHdBFGmnI4XozyRJRAXMDo3qlTp/gvu8m0/uCLL75wgQIjfk1EKwQHPHK2b99uZ599tp1xxhnuGYOwhmjE76TPtYZ15I32eP/9923p0qUeFQMvMNqFfLIsXLjQvaQQW/i9KhBoXn31Va8TPIcuvfRSrxs80A477DC/3lFO8kL6wXaAIIKHGf9feeWVLpoMHTrUvW7wxiPf3DOT1R8iyLPPPuuiIP2OY5566qkuuqTzaAuQp7Fjx7o4F0Cwy83Njf+3m+oei3Tp74iHN9xwgx144IEuYFLHtA3l5n0ZAQtxM4Cgh8AZ2oS64Hu0PhDZWB8G1CFgPfroo54mIhXv4LQxokyq8kT7zOmnn+6eWJRr4MCB3l78jsBJeRPrnn705ptvuhjH+U89XHjhhXbMMcd4ORO9LMkTYiVp0sdpZ4QktqV/cC7R1xCyEvNK20+bNs3X33zzze6Jdfzxx++xDB8+vDJ/eJXRn6gDPKOOPPJIr3fqgYW6LS4utsLCQvciC4wfP97FO7zagDZFhKP/k35NbV2tH3w4/m03rW+/Jf6t7kgmwNWEUI/JRNFENJxTCCGEEEKIOmTnjp22ft0GK1q+yr2r8LJq36G95eZlW2HfAsvK7hl7QUluVBBCCCGEaAngdZGXl+eGdZZUYHzGoIv4UVehqRozDMgL3lPpvH8yrb/agrcPecGoj5CBWBFA1Dj44INdREAUCF43iB9BZCREWjT0H+U77bTTfB+8ZxDcqgIRAIGDaQJGjBixR3QCviO48Ft5eXmlpxeiGQIDn0cddZSHdguwD54xiAoYzxPrGQM9wgT9DRGEkHDUd7TsVYH4g+hCedMJXNU9FkIHaQNiR2JYRbwSEUxILyoM8D8h+qh3RL/oftQHdcQ60qb9AghviKaIZ9/61rfsxhtvTBr+MQriIUJzQUHBXmEaES1Ii76ByBQ9FhD+j35BXqgLRCGEq1TQ71ho/xNPPHGPvkGbH3vssd4HEKYShRcENX4j/eh+qaBPUx9ckxLrgHZGlCM9rlVR2Ic2Pffcc+273/2uh9BMFEjFnrRIwWrZyk32j5eW2j3/M9Wu/844u+CrH/jC93//78/8N7YRQgghhBCiOmzbtt3WlKy1lcuLrHTtOhevOnfpZHkFvTwEYNduXax1G40ZE0IIIUTLBoM1hl+MxszDg1E3GRh6McIjWqQScDDC402CcTx4K5Ae2z/11FMehuuXv/ylhzRjPqNU4czw7sCw/ec//9m3//3vf++ePRjVp0yZ4p4cwUsCEAEIXcbCdwzaf//73+1Xv/qV3XvvvX7sxFB5GM2ZvyakRXi1P/zhD/brX//aPY8w7lMODOjUSyrvhkzrD1ELISQqmmDgx/ME8aMq2O+CCy5w75Nk4ekQMzC+IzyRF0CIwFMnlVhDexLiDSEMr6mqIC3qIVXIR9bxG2JByANtTNrkDQEwEY6PsMM+QQAK0I6IDuQTD59MxIwo9AU8zMgzwhhec6mo7rH4HcEJryM8lhKhvEGMon4D1AVh6cgLfSIRBB88h6hr2i9Avr7xjW943vg9E8JxaZNwPkah7mkz6j7av/nO/FCchxwvKjKmgvOL/bhOJKtnPMioD4RXyhYl9Cu80NKJYkCeOI+odz6TETwYEeui0F433XSTz3FV1XFEBS3qbRkR6ue/n2Xf+pcJ9uhTC23KjFJbu25brNMRs/JL//7ZzHX+G9uwrYQrIYQQQgiRCVu3bLWSVSVWtKLYNm4os1atW1mPnt2toHe+9crPsQ4dFdpUCCGEECJAWDeMvHh+RI3rUTDAYyDGYJxqXie2wZOCEHXANoQ/Y84j0kbEwGiNwZ71f/3rX/cSSjBcE8YszCEUvEI45l/+8heftwZhKOoRQrqEfCM0H/PTIFAhfpBW8GgJ8y4FMNIjTJEWoc8Qu0iTtILYgqEeUQFhKVHwipJJ/bENYdmCiIEYQXgy5pBCOKsKPEkIr4b3SGI4NiDvCF8IHsEYTzkoJ+2SzFMI4QvRAlEp0bifDMLG3X333XbdddclFUA4PukgWIRQbByf9eQ5mdAGQUwjNFwUQruxP8IhghztSfqIcqmEwQC/I0IiRiJQJBOVolT3WNQpoRdpkyCQRAl1Sr1HvYCCoEgdJasP0uX4od4CCGTJ2jAdzC1Ge1100UXxNXtCX+UY9IGoCEbfxFuQdqHeKD/5pjzUSzKC+EyZkvVPxCh+43iJ50gQ5kI9khZeelxrEqEeCLdIvSOOJUJeuW5AYujBZPkS6WkxgtUb76+0b//rRBv9cXF8TdWwLfuwrxBCCCGEEMngpaa8bJOtWllsxatKfL6qdu3bWU5uPARgDiEANV+VEEIIIUQURA68XDBI42mSCgQcjNvLli3LyCMHzyrEGJ6/LrvsMrvrrrvs9ttvt1tuucXn/cFQjVAUNYITvo15ehBEMLTfeeedvs9tt93mHjoIUKnAyI1wxfxO//zP/+zGeubEwXDNfp999llS8QHjPGIc2956660uRADiEvPvYECPzoGUSKb1FwVRiQURgv1rA0LPmDFj/Ht0Lh4M9KRP/SYrd12DYEcd4A0URCiOj8iAABOEwEygzhEJEXBoB8S93/zmN/bAAw/YfffdZ/fff7+HGkxVLkTGTz/91POBiJqO2h4rEd5JODaiKYInfShQlYgY8gCJAl5dQlnCfFh4PyGSBRB8EKioO0Rdyk89UB/UC/WTKDoFj7RQvuoQzn9CGOJN+dvf/tY/8ZDkWInhClNBmRC2OVe5TjGflagdLUKwIsTfvX+e415UgWNH5Nq/3HqgPfzrY+zlR0+yV/56sn+/+7aD/LcA+7AvaQghhBBCCBFlR3y+KkIAlhSvtW1bt1nHTh0sLz/X8nsTArCrRtUJIYQQQiSBZyS8UDA6pwt/R2g5PC4QJfBIqQqELQzYCE3sFwz0CDSEaMM4T4jBECIMI3kQlfAOweAcDOF4aDD3TLIwagHSP/PMM93DK+yHdwvzAgGG+KjXSoDfzznnHN8WLw/yFcCTAwGB0H2pvKcyrb8olOemm26yO+64o9IjLVMQC9966y0PZ/j444+75xlea8ccc4zPZRXAawYhAuEj2fxatE1ieLaaQp6YA4q6GzVqVGUdUncIH9QJ8yIlQlsnEyRoJ/oZ4gcecAgneNTgAUU/RJx8/fXXPURkIhwLTzzKd/zxxyf1gIpSm2MFQqjKl156yf74xz/a2LFjvdznnXfeHmJQYwExDXEYYYf+HxXPglBGe1Ef1AvzphHuk+0495955hmvlwDnJecB53Oy9qSf0R7JCMfDAxIBjfaizhD+ONY//vGPlAI5v1PveGU+9NBD/h3BlmtF8PITNafZC1Z4RxHiLzBkYDf7n3sOsx/cdYideny+FfTqGOvYrWMX91b+/ZTj8vw3tmHbAGnI06r28BDw17/+1V2lhRBCCCGaMrxkrlm91lYuK7J1a9f7yw0CFXNV9SrIjb3wdIy9XMU3FkIIIYQQe4H3FJ5IGJxTeXZgrMaIjxixYMGCKoWZMJcN6WGHioLXyfe//333aAqCAkZpRCGM6ITQSwSDeDpveTyWEsOAAeIDRuwQNi8RvKOiBvsoiFjUDYIQXjupyKT+EkHgqslcOhj/Z8+e7eIYoiCCAl5NUYEPMNgjFiIUIOBEvdOoh/feey/jvKaDdBF0qCPENzx2AvQV+gz1i0ASnf8MsYp1eC8lQpqUi20Q96699lr72te+5vN4MZcTQhS/EVoyOtcTkCbeXswtRhjDqqjNsQJ4B9EehKVE/KLciIfB06wxwXmGsEMfOPHEE/cSdsg/UObDDz/cvRsvvfRSu+KKK1xkpUz0c7zIAnhMIlqxL16V0XB+nNMIrNH+FwUhjP1POeUU96jkmvDd737Xrr/+er82UOejR4/2NkqEfFDveFaxHf0McY30RO1p1oIV80/d95fdrrN4Tv3mx0fa8AOrPmnZhm2j3lakVddzWnFh+fGPf+wnx4gRI+xb3/qWTwCZ7GRoDnBRIh7w9OnT42uEEEIIIZoeW7ZstdWr1tiqlausbGO5D4Ai9F/vvgWW0yu7RkYAIYQQQoiWBp4wzI+EURkxJBUYpRGAmBsoOidUMgitx/YYkh9++GEXNfBewYsiGRi7+Q0PrCB27WsQyRA9MMBjQ0tlJ8y0/uoCxKkQvvDGG2/0MIAY7v/2t7+5YBIg7yNHjvS8YffEEwtPFLyA/vSnP7l3Sm2flREtCetI+ghVeHklin+IjyGcI94yhHlDMHnkkUd8IH2yPJAudU0ZzjrrrD0ECEQ5bLcFBQXeZ+hTAQQ4hCX6EGJMVMBLRU2PFYX9aA8WhC682xAJn3322ZRCzb6AvFD3nJMIalGPvEA4P2nPU089tdJbDhC3CLFIG9N/ghBNH8NTizpEQKKvcRzmaPvzn//s3o38lgzCcSJOHX300Xu0F+1AvbIfwmwycZW2CfV++eWX+z4Iln//+99TemWJzGnWgtXjzy32kH6At9Q9dxwc64AVF6+t23bZc699Yd/7wSS7+KYxvvCddfwGbMs+wdOKtEizruBCdtVVV7nbMSfIv//7v/uFBbfc//u//9trFIgQQgghhNi3YDQo31huq1YU2+oi5qvaah06tLfcvFwr7JNv3Xt23+PlSgghhBBCpCeEv4saohPhdzx58NpJ5hkTBW+Va665xg477DAXBRB8CCV277332qOPPurzPeHFkUgqb6d9BUIUXiWpjOaBTOqvLsCojxca3icIgoQzxLCP6EJYvmiYPzy/8IwhtB2CC54oiFp4nF1yySXuFcb3msyjxfM4njP0AwQpvHAofyKs4zeEK/JI/SBq4PF28skne/+AZN5xCJeUMRHS5JgQhFPygycOoeoIKUmZq0N1jpUI29AeLHiU4aWFsLh06dJ6FzAzBbEKAYl+jFBFn0kn6OEFmex9ij7FuU09R8P/cV248MILvS4QqGhj2hovRdqf+kWcpO9mSvBcpE/jwZcIfTfUOwL51Vdf7f2M40c9wETNaLaCFZ5Qoz8ujv9n9o1rB1WKVcVrtth3/n2iPfT4Apu/aGPsZrfLF76zjt/YBtiHfQOkWRdeVowA+NnPfuaeVY899pi7eqLI/vznP7f//u//diVcYfOEEEIIIRoPGDzWla63FcuLPBTg9h3brXOX2AtmYV5s6eXfw/OmEEIIIYTIDLwn8CTBMwEPqlQg4GB8xqaWal6nAAbls88+2+666y4fJI7HD4PECa/31FNPefiwZKJVYwIDO94miFCEmktFpvVXH9Am5BNRKtGzBK+Tb37zm/ad73zHPVH4xEMLEQ7Bgf1ok+pAm40fP97FqjBXE0JFKvjtsssus+9973ueB8LMEfbtyCOPtNWrV7sXDXUXYHvCPyKMRudKikLfguD1NnfuXJ93CcET76YHHnigcsHDL4hNiGysQ7whAlVNjlUVzMGEgEI9cZ4EWI8IxPtMsn5PfkIeEHrqCsQ8QkAGT7jTTz895eA+xB9IFf6Q/ahj8h8tA+sIw0j/uv32272dQ2g/QHSiTNWZ04s0OR7HyaTuEeAQDIFrTCpvTpEZzVawGjtx96R+hPULYQDxnrrnv6fa8qLUk/vxG9sETyv2jYYGjKZdU5gEj4s5LrRRd2NOCE5eRim8/PLLvg1wY2ISNzr9pEmT7A9/+IP9/ve/dy8tTv6q4ObGaBL2YTQJsVsRxF544QW/MLLwnYWLCNuE34CbDu6z7M+xyUP0uDXJXzRN3IdRoYUQQgghGiPbtm6zkmLmq1pl60sZ0fel9ejZw72qcvNyYi+TCgEohBBCCFETMAxj7MV+lC78XZgbCYN2OgEnCoZkhBNCjCGenHnmmb6O8F1BYAnGfDxBMhUGGgo8UhA18E5KFeIt0/qrCXiqEGJtypQp8TXJ4ZjBhhgFOyd2T8QIPvmfNBEc8SqqjoiAeICdEW8uvJgY+J+pN1PwiEEko/2xQWIbxWOHUJMBtmOhLKm81YIYEcQkvN8oP/VPubDlRpfQHggn/E+6lKUmx6IPEAoR8StRIAwE7yXSDcemnvEyQpSKesIFyDuiFX2pOm2SDtJ88803q/SECwRvO/KIsJZIENsQGclnIpSb9qSdOQ7b4tnHfhw/ug/tgAcaNnC2S0Z0PWkgcnMupBKF6duQShQUmdNsBaupM3e7yp44ardb5avvLE8rVgXYhm0DJxy9++I1bVZypTdTuNhMmzbNY2UG184oXEBwS8VFGbUf+PzNb37jN9d77rnHY5dygWJkAup8upsR+6Iw47k1Z84cF5SYxO8Xv/iFX+Q5kVj4/rvf/c6uu+46j/nJzYj13Axw133yySf94kXeE49b3fyFPCDckSf2/Zd/+Ze0Ls5CCCGEEPuCLZu3WPGqElu1stjKy8qtTds2Pk8V81VlZfe0du0UAlAIIYQQojaE8HcrVqzYI9xXFAzVhx56qBumsSUls4VhcyOSERGMovMqAQZlwnYhnGDfCgIQx2UdAkAqY/S+MkDj/VNYWOh2N+aLSkUm9VcTSkpKPMQa9Y2NMJFgnMeWmYnQQRkImYYIh+0zGPkzgfbEjsix8KxCwKwJtD3p0P6Ek4uGiqMMhIOjb+E5ldjulJfB+kC7AGEA77777qQL076QHlx88cW+DrsrAlRNjsU6BD+EyVQD/4PIRbnC/E2IOHizIQYh1CVCO2OT5TygH9UWyoInHH0HUbEqTzjAA4tt8EhLZh9mHWIbZWGpCmzT9FvqgXaOgmCF6Ieglsy7jTCAoT7oZ4hviOSUh9CGyQj1TrsmE9RE5jRbwWrp8t3K9AFDd8dDjYYJrIrotgfuv9tFdcmy5G6amcIFEQWXi01QyBMZMGCA32QSLz6MCGGSQm68Tz/9tLs54g3FhSoZXCBwNUX8Yjvi9bL88Y9/THrycOL/9Kc/dXfNH//4x77/E0884RPQccPHlRqPKMSlF1980dONkmn+eAhgnq6QHxZOehYhhBBCiMbArp27bOOGMitivqpVJbZ1y1br0LGD9crPtfzCPOvarYu1btNsH6eFEEIIIRoMPCMY1I2HCgb5VDA/D4Z3jO7JDPbY2dgGJk+evJdXEoZ51iF6BAM6Bu1Bgwa5cIA9LOq5gl2MueeDcNDQYLsjxBtCBd4iiaJGINP6A8oyb948F26qgnqhnqhvjP/R42PEx+uEY1Ln6YQOjsXAeAbDs/2oUaNcoIhCesy9xML3KNhR3377bRe68KwKIlB1COlj56T8HP+YY47ZQzTjO0Ia/QjPoKjoSdknTJjgeUGEwXZbG2pyLNqZ7/RVHAwS+zfthA0WoQpxNkAbhlCBOBFERRr6FucKHlkhxGNt4Bj0VfoGeb/yyisz8oQjbB95pEw4QUTLxjnJuUm5hw4dmlb8wrY9ZswYt1tTNmzVieImx2KOKrw18baM9jf2QWzj+KFfc70I9cn1IFFQI3+0B21KGWorWGXq2dhcaXPPPff8KP69WfHwkwtjJ0jF929eN7jy4vOHv82PdcLkF/dENpbvsGsuqbggdOrY2p54oUKcIVTgtZfu599rAh3+lVde8QsMKnwyEKs4sfBs4iIc/ifmKpPPASNKEL2Y2A9lecSIEb4+CqMqCM/HBZi0glsoai8XQ+DEBdLhYs0EfZyIwAWOPBKmEFUZqEtU47///e8+UV518kfZX331VTv22GPtggsuqGwXLgaEKMTVmckihRBNi8SHyfoglcAvWh48HPKiyYtqJg++yeAhunRdqZWVl1l2TrZ17171CC3RstixfYetX7fBiotKfN6qnTt2VsxXVZBrub1yXLgSQojGBvc37pNlZeWWlZVt3brq/tZSoS8Az+ltH3rEv0fZdcvN8W9CNA6wD2GExmhPeLRhw4YlNfpir8I7ggHUvCNiYE8E4zTeFXjzMDAaj40FCxa4AMDCecGcVhi+OS4LBmz2wYDNPnhaMS8RnjhBSOC8wlMDQzeEKEQY0bFnJXp9IMxge8O2Nnz4cM8v22LMpwzRtNKBPQ6BBaM4RvNknkyZ1h/lY4A5RnrKk6z+onDsIPSQBzyBqBvEqw8++MDXsw3zhSXOR4Uo8tRTT/l2H330kdcvaWGjxNYYbJQB6ps5/al/PMuCyEA9Pvfcc5UiC+ngpZVsoT2wU0ZFF4QuPGkQMRBzSAf754UXXlhp64zCvtEyky+8akKUKPJ9xhlnJI2alUhV7V3dY9HOpBH6N+JJ6Ku0KfthY6U/HnXUUb59gNCH2G9ZqIcgXFIvHBNhhnZM1r8CmfRf0sXuHUJEsn2ytmKhjAg8nNeUlTCRlI00wrnL/uSRfkC7nXbaaXv1bbZn2hn6GRHEKA/pEQKUuojWA7A/53yYf4xjUI+cPwhjfOd8oj6CzYHtqTuORV3zPXhdhfxh6z/xxBPTClbJrguJkA/qh3rhXE5G6wcfjn/bTevbb4l/qzvoT3VBqJMwp1s6WsSQ0PCgVhsSO3ZdwEle27xxsiDwYLgjvUQYbcKJxEUkuIGmg3JGy8rJTQxRTsL777/fvv71r9s111xj//mf/xnfIj2p8kde6qNOhRBCCCFqi89XtXqNrVxeZBvWbYg9TJr16NnN56vK6ZVj7TVflRBCCCFEnYNBHYM1NiSWVOy///5u5MXIH/XCCGBgxnbFvE78jvEXozLeJxjjmTc+0bMmeIIw3xVCFIZ89kH8wUCOgLKvIG/BeypZOLdAJvWHAZyFsoc5g9LBdgw6Z/4hBClCE1IvGPgZJI+A9tWvftXrLRGEGIQNBr1TBkRCphLBoI+9MRHEG9qV/EU9aLCdkhZgPCfNVAt1FLYN4HHDetJGpLz66qvtqquuSulJFMpMGDv6C3VOmSk7os5ll13mdta6oCbHoi5vuOEGn2qG+gh9FaGHeqN/I7Qk1jG/IdLRZvRxzgvakfB39G+ORdq1hfYK9m7Ov2TtFF2i7cXxOXfJI+1GHikf5cQbjTxG+0aANGhjRDJs0SeddJJH/UIQip7nURA2ORZlpw6oC47HOc86QjdGPfk4LtcIrh2IL9Q39U7+gH6N91+y/NWUZGJWS6BVeXl57dWcRsj13xlna9dVuLY+/OtjrKBXRWf53g8m2fxFG/17VQwZ2M3u/UmF11LR6i329bvG+/fsnu3t7/cl94zKBE64H/7wh37yEnYvmZr/8ssv229/+1sP3YfSPHHiRLvpppt8biku8IGQFicKn4kdmZPn29/+tp+k3FwCYT8gDxD9P6jp5BHPqZ/97Gd+UWAEBDcOFGjC/oX8ZJo//r/tttt8G8ILBlLlUwjRNKirERfpyORhWrQMeCBkglRGV1U1IjAVPNAuXLzAiopX2pChQ2IPonu/YImWB+9VzFe1ZvVaW1Oy1kMAEnakZ3YPn7OqS9fOGQ0AEkKIfQWhTOfPm29FK1fZoIGDrbBA97eWRDAQ8smzDp88p3ccdbKvj7Jj0tj4NyEaF9iX3n//fTc0Y3RPZmymXz/zzDNu3CeaEHazVHAuYIDmfOA5DntXKgN2AIEFg37Ynu/heMxDlMrjoT7BQ+yFF15wA/oVV1yR0oMjk/qjTqhD7HvVBQEieM5QN6nyUVOCbaGu060p9BtsmQzC572gLsWIRGpyrJr0b6CeORbQDxqjMBLySHmwnScTOeuKcM5DJv2aeidvfJIv9qmr/NGWTLeD9xniI+dyMtqOOD7+bTdtZ06Kf6s7kg0KqAmhP+MVWBXN1sNqQN8u8W9ms+euj38zO+XYvPi3qolu+/m83RMW9u+zt8BUHejEKPoY25LF2+XChEIbdX9NBScTboqMokh2cSG2KUbedCNT0sHN+OGHH7bvfOc79q//+q+uUKMkZxq2r6r8CSGEEEI0Bnbu3GVlG8usaGWxrS6umK8KT6rcvBwr6J1n3brvnrRYCCGEEELUD4ceeqhddNFFbjfDGJwMjMlMXYFXSrJB4FEwIuNJQ7g+ts3EmI/9qjrbNwSEGkMsO+KIIypFnWRkUn/USU3EKsDoTN2w1IeoRJqNRayCIJZQ3voUq6Amx6pJ/wbqOLRjY7XXhjxSvroSg1IRznmWTPof+cHmzvZ81mX+CP1JpDPSZpBuS6TZClbDD9o90d9HE1bHv5mdf0Yf61OQOhZngG3YNvDhJ8Xxb2aHHZxeRMqEk08+2RVwFNPEUH4oqMRXZW6pRFdMXCWjEGeT7YnHmQzcRxGXEMBwjQyg1maikCI4sR3pRC96ifkIVDd/QgghhBD7Gl7615eu9xCAa0vW+qjRTp07Wl5BL5+zqlPnzEYqCiGEEEKI2oGhnhBoeE2lGyzEwGjsXcyd3hLAiE6YNLy70okZmdafEKJxQlhC5lk7+uij3R7fEmm2gtXxI3dP+vbxpBKbNrvUv3do39p++v8OSyta8RvbsC2wL2kEomnXFEY6fO9737NHHnnEw+0xKSCeSLgY33nnnT5yghERicaR//mf/7HRo0e72ooL3f/+7/96zFIm0ksGIyZIB5fgX/ziFz4ZHAvh/JhEriqI+0m4pccff9w++eQTz+Njjz1m//Ef/xHfYk+qmz8hhBBCiH3J9m3bbW1Jqa1cscrWr9tgX+760rp162r5vfOtV16OdegoD3EhhBBCCCGEEPUPkc2YNufII4+Mr2l5NFvBqm9h5z1C+j30+ELbtasinnNeTke772cj7RvXDvZ5qtq1a+0L31nHb2wD7MO+AdIk7dqCEIWQ9Ktf/comT55s1157rZ155pn23//93+7W/Otf/9pHiyTC5G7ME3XCCSfY9ddf74LU//f//X9pQwciFv3gBz9wIemCCy7wCeA4PvNRVQUTKv77v/+7H+fmm2/2PL711lsuWBGycNmyZfEtK6hJ/oQQQggh9gVbt26zkuI1VrSi2Mo3llub1m0sK7uHFfYpsOycLGvXvl18SyGEEEII0VLBhhZCtTG3kBBC1BdcbwiDmOjE0pJoVV5eXqHiNEOWrdxk3/7XiZVC1bEjcu2eOw621q0za3D2++lvZ1Z6V7HfH/53ZJ0IVokQHpDwM3TIZC67eEjddNNNLgYhQIXwftXpwIQeZD9usoS++eEPf+jrf/zjH/u8WukghGC6Y9ZF/oQQTZd0MbTrCubjEwLmzZvn80ASzxkv4JpAPPeFixdYUfFKGzJ0iPXpo0npWxpbNm9xsWrN6rUuXLVv386ycrJ8zirCAdZ3nHQhhKgPdu3cZfPnzbeilats0MDBVlig+1tLgvf28MmzDp88p3ccdbKvj7Jj0tj4NyGEEEI0NdqOOD7+bTdtZ06Kf6s7MplSKBNCKFMislVFs34TR1j6zk37x/+rCA145w8nV4YHTAfbsG00FCBp1YdYBYhIeDNlEl8WAShMBJeJGLRgwQJ78803fVuOwWiQ5cuXewfBvbAqsQqqc8zq5k8IIYQQoiFwA97OXVZetslWrSy21cVrXKwi7F+v/FzLL8yzLl07S6wSQgghhBBCCCH2Ac3+bfycUwvta18ZFP/PbP6ijfZvP51qP/n1DBs9rtiKVm9xT6qdO3f59/fHrvLf2IZtA6RBWk2RkpISDzWIB9S9995rP/nJT+yrX/2qj0on/KAQQgghRHOGUearV5fYnNlzbdbM2bZg3kL3rNqxfYd17tLJ8gt7uWDVsZPmqxJCCCGEEEIIIfYVzTokYJQ33l9p9/1lrotT1YEwgHhW7WuxavHixfbqq6/a+eefX6PwR+vWrbPXX3/dxowZYx06dLBzzz3XTj755Ep3vNpS2/wJIZo2CgkoGhKFBBTVZfu27TZ/3gJbtnS5bYt9/zL2PJidnWU5uTmWm5dtPXr2sLbt2sa3FkKIpotCArZsFBJQCCGEaBk055CALUawAua0evy5xTb64+L4mvSccmyeXXvZfvUWBlAIIZoLEqxEQyLBSmQK4lTJ6hKfW7OkuMTWrV1v7dt38IduPKqGHbi/deuefP5QIYRoikiwatlIsBJCCCFaBprDqpmA8HT37QfZg/93tIf4O/zgnpbds717UbHw/YhDsvw3tmFbiVVCCCGEEE0PjHRr16y1FctX2rIly61oRbGtW7feNm7caG3btbGe2T0kVgkhhBBCCCGEEI2IFuVhJYQQon6Qh5VoSORhJdIRRpPjZbBk8VIrWrHKv69Zs9bD/hUU5lt2bpbl5fXyUIBCCNGckIdVy0YeVqKlsnXrVnvmmWdsw4YNdv3111u3bt3iv4hx48bZRx99ZBdffLENGzYsvlYI0dSRh5UQQgghhBBNgI0bNtqqolW2eNESKy4qttK166y8fJN169bVevcptAMOGmZD9x8isUoIIYQQYh9BuOaHHnrI7r//fistLY2v3ZsFCxbYL3/5S3v22Wdt586d8bXNm4kTJ9rPf/5ze//99+Nr9gYh+sknn7Rf/epXtnTp0vhaIYRoHkiwEkIIIYQQzQbC/q1cscqKi1Zb8aoS27Fzh3Xs1MF6FfSyPv0KrVPnipFdQgghhBBi39ClSxfr27evC1fz58+Pr92b/Px869Gjhy1fvtzWrFkTX5saPKvat28f/69pMmDAAPdEQKyjfpLRtm1bGzx4sAtXs2bNqvSuTEWHDh3kdSaEaDJIsBJCCCGEEE2etWtLbfnyFbZ1y1bbuH5j7HObde7cybKyetrAwfvZfgP7W05uTpM3YgghhBBCNHVatWplhxxyiLVr184+//zzlCGnunbtakOHDvXfCQleFaTb1MnJybH+/fu759nixYvja/dmyJAhLkItWrTI1q1bF1+bmuZQN0KIloEEKyGEEEII0aTZtm2brS4usTmz5trK5UW2c8cuH5H6ZewvNy/H8vJ7WVZ2lo8uFUIIIYQQ+55evXpZXl6elZSU+JKK/fff35/hCH1XV3OpNGbatGljBx54oH/H+yxVKMSePXtWeqnhgSaEEM2FNvfcc8+P4t+FEEKIGsGkzvWNDM0isHbtWn+pJTwIL2o1gbAZpetKray8zLJzsq17d4XIaMps2bzF1q/bYOtK18c+11vHTh2toDDfcnvl+Gf3Ht01qlQI0SLg/sZ9sqys3LKysq1bV93fWiohRBjP6W0fesS/R9l1y83xb0LsGwhrt3XrVg99x3MaIe6SPa916tTJxaqioiLr06ePZWdnx3/Zk82bN1thYaGLOIDYM378eE+TY73zzjv29ttv24cffujeWqxDNAPSf+WVV2z06NE2duxYzxPvGizJ8sS7yLvvvutpkt7UqVN9HSEMU723Er5vxowZfhzmp5oyZYqtWrXKPao6d+4c36qCEBKQNKkXQigmEso1Z84cF/IOOOAAa916b78E6pg8IfyxPeCRhfcWx8XLTQjR9Gj94MPxb7tpffst8W91B9euuiBcf7iWV4UEKyGEELVGgpVoSCRYiSjbt++wFctXWnFRibVv196vFZ27drL9Bg2w/QYOsM5dOic1NAghRHNEgpUISLASTQEEk3nz5tn69etdcEn2zhdEGLajXyO8JD7bsU2/fv1csAoQavDTTz91Ieujjz6ylStXxp4bt3sarEMQ4hPj6RtvvGEbN250wyznDN8Rtbp37+4iVIB9P/nkE3vppZds9erV7g1Fnjdt2uTiE4IUghn7RcEL6plnnnGRCnEJQQohqbi42KZPnx67XmdZbm5ufGvzENbkYcmSJR4S4/X7AAD/9ElEQVQWkbIlg/pjG96NBg4cmHSeKgS+QYMGVRqLOf7zzz9vkyZNcuGKkIvJhC4hROOmOQtWuiIJIYQQQogmBS/4SxYvtZnTZ9mMqTNsyqSpNnfOXBcg+/TrbYOHDrTOXTrFtxZCCCGEEI0RhB1EpiDOpALPKoSbZcuWZTRfUxTSHT58uN15551299132/e//30bNWqU/4aANG7cOBs5cmTl73wedNBBLlxNmDDBxajAwoUL3QMLQenyyy+37373u3bbbbf557Bhw1wMwuMqauDl++uvv24rVqxwbym2/853vmN33XWXHXfccR7yb8yYMS7aRWFbvJ8Q1lKFQkT4Yr4rno3nzp0bX5sejMbsB9QpopsQQjQmJFgJIYQQQogmxbrSdbbsi+W2YP4iW7RgiW3etNk9qfILell+YZ7l9spNGjpFCCGEEEI0HhBLDj30UPfwwTsp1Uh+oirgQYSwRai/6oB30UknneQiEyDYIFgxfxYgDEV/5/P44493MQfPqKiQxFxReDUhgEVDGOJldfTRR/snXq7kM4BgRshBQv+dc845lc+olBnBinQQ4RLLVVBQ4GIeXljp5qhivisEKDzQyG9VUH7EtjvuuMPOOOOM+FohhGg8SLASQgghhBBNih07dlqHdh08BCAjTwcNHmQjR42wAw4eZt26d41vJYQQQgghGjt4TxEOD2EGsScZCEN4PSG24HFUnRBVPCsmhrxjHYIUIAwl/s5xkoWURti69dZb7ZRTTomv2Q3pIXYRdjDqEUVoQryoEM4SB1Rx3CFDhvh3vMdCKE8gD5SZfUM4xGQghFGHCGuEJcwEjpss/KIQQjQGJFgJIYQQQogmw5bNW2z71h3WKvYY27FDR+vUuZPl5sVe1Pv11ou3EEIIIUQTA++g/fbbz0Ue5o1KBR5RvXr18rmoMpkDJR14diFa1RTmvmLuKea+eu2113x577339grdR6i+EMKQPIdto8vMmTP9d7yjtm3b5t8DzF3FvFSLFi1KGQqRshCOkBCG5AmBSwghmjISrIQQQgghRJNg65attnpViZWuXecv4zm52T5fVa+8nFoZHYQQQgghxL4jhLUjLF50zqgo/H7AAQe4B1MQeRqaMK/VAw884PNSEcZw8eLFHvaPsH3pxKIvvvjCt09cWJ+KaChE5s9KBYJfVlaWe2ml8lITQoimggQrIYQQQgjR6Nm2dZuVFK+xNSWltn3bduvYqaPlFfSyfv37WlZ21l6hXIQQQgghRNMgOzvbQ/PhRYQHVSoQZphDCpEnk/ma6hqEsg8++MA6derk80B9//vft9tuu83DBN5www1p51Bl/iq2S7VceumllfNoBQhLuP/++7sXFWEBU4VCJBwh3liIfQhoQgjRlNGbvRBCCCGEaNQgUK1ZvdZKYgvCVYeOHdyrKjsny9q2axvfSgghhBBCNEXCfE1VhbVD2Orbt6+VlpY2uDCDWETIQuaSOv74423w4MFVDpiKhh7EM4zwfqkWhLhk82b17t3bwyFWFQrx4IMP9mMxZ1ZiaEIhhGhKSLASQgghhBCNlh3bd9jaNaW2uniNhwRs376d5fbKtpzY0i72XQghhBBCNH1CWLsVK1bYhg0b4mv3BAHo0EMPdaFozpw5DTpfE8dCdIJk86Yy/xSCWxSEuPz8fP+eykMKASxdOaKhEEkjFXioFRYW2urVq624uDi+Vgghmh4tUrBav369TZo0yV566SV75JFHPPYsC99Zx29sI4QQQggh9h07d+y00tL1Pm/Vls1bXKBCqMrJy7H2HfYMmSKEEEIIIZouhNPDe4pQf8xllQoEoB49evicUWvWrImvrX+i3lKIZVHxCYGNOa3Ky8vja3aDwEbIPsIYjh07dg9RC7Fq6tSpbpNMJ0YNGDDAhasFCxakDIWIOIbXF/maNWuWp50KQi/iiZVqvjAhhNiXtCjBChHq7bfftscee8w++eQTn4yQizMXcRa+s47f2IZtJVwJIYQQQjQ8u3busg3rN7pYtWnT5kqxqld+buyFfe9RrUIIIYQQoulCOLxDDjmkyrB2iD9Dhw713wnR11AgCI0YMcKFK/J3//332/PPP2+PPvqoPfjggx6ujzJEPbGAMIannXaa74e98aGHHrJXXnnFXnvtNR84j+0R0s1/lZOTY/37968yFOKQIUM8vOCiRYtclEoG9fbyyy/7gP233nqrQb3UhBAiE1qMYMXogscffzztiIVE2JZ92FcIIYQQQjQMDCQqKyuvEKvKNrnhIic32/IQqzp1jG8lhBBCCCGaE7169fL5mkpKSnxJxf777+9h+ZYuXdqg8zUNGjTILrzwQheXOC52Q8LvkefrrrvO55vCw2nVqlXxPSogpN8NN9zgYfsYGI+dccaMGe4hRijE66+/3vdNBWLXgQce6N/xPkslMvXs2bPSSw0PtGQgvOGtBYh/pC2EEI2JVuXl5al9RJsJhPhjFEOUgQMHuqssNwsu0MAFnRERuNgyGiHKqFGjfCSFEEKIvUkWi7uu6d69e/ybaOnwYshoyn79+vkLXk0gFMfCxQusqHilDRk6xPr0Sf2CKBqeTeWbbOXyVbZu7Tpr3bqN5fTKsryCXhKrhBCiCvBOnT9vvhWtXGWDBg62wgLd31oSIQQYnzzr8MlzesdRJ/v6KDsmjY1/E6JxMXHiRHv//fdt+PDhdvbZZ7vXUiL062eeecZFmUsuucTtew0J59bmzZtdOGrfvn3SOa1SsXXrVp/vCjp16uQCUiZgs3zyySc9OtTVV1/tIlkysGm+8MILsfebPnbFFVckTZ/rA15g1cm3EKJx0XbE8fFvu2k7c1L8W91RV4MCglD+2Wef+Wc6mr2HFaMWomIVF3RuZueee66PyMAAymSNLHxnHb+xTfTiTxrytGr8EDf4vffeS+si3Zjg4ebTTz/1RW7YQgghROwlfstWKylea+tLN1ir2PNZdm6W9ZJYJYQQQgjRImDOp4suusjD/kXne4qCCHP66afbeeedZ507d46vbTgQ0Tgu4feqK/qwPfuxZCpWAYPtsVeeeeaZab2imO/q4osvtiOOOCLlwFJsoBKrhBCNlWYtWOFm+8EHH8T/Mx+Ffdlll6V1sw2wDdtGR26TVl3PaYWb8LPPPmv/9V//Zf/2b/9mv//9711pbAhvheYII1wQF1evXh1f07hBpMJTgEWClRBCiJbO9u07bG1Jqa1dU2pfxv6ysntaXkGudZJYJYQQQgjRImAUPiH08JpKJ8wQPpAweYWFhfE1zR+8pigzc1qlAhGMuayGDRtW6dEghBBNiWYtWE2YMKHSJR5vqXPOOcdHEWQK27JP8LQiLdKsC0gLjy0maVy5cqWdddZZduONN3p4o6eeesonbsRNuDlBbN4///nPNm3atPgaIYQQQogKGEG7cf1GF6sIk9KlaxfLzcuxTp07xbcQQgghhBBCCCFEc6bZClZ4QuG1EjjuuOOqJVYF2Id9A6RZF15Wa9eutddff90OOugg++Y3v2lHH320jyBh8kYmW5w6darNmTMnvnXzAK8xJqNsbkKcEEIIIWrP5k1bXKzik9Gg2Tk9rXMXiVVCCCGEEEIIIURLoc0999zzo/j3ZsXMmTN98kUYOHCgHXnkkf69JhBXtqSkxNatW+f/E6c2k7CC6Zg8ebJPhMhcWT179oyv3R0Hd+nSpR7eDhfeILQh+CCYhX35n33D74SU47cVK1ZYjx49vA6mT59uS5Ys8f+ZzDFKVekFSktLfY4lBDQEJ1yP27Vr578hPn388cfuMcYStqO+8EzDfTtsw3ryQj4R7IILM79t3LhxjznDmItq7NixXh/R+mFySY7BZPuLFi2q/D1MwlleXm5TpkyxQYMGuat0Ksgr/QOPufnz53vZySt5IS5wly5dPKwgeeD7smXLvJ6Y54z/2Z95siZNmuT7J9ZLaAvKSXohz3jTZWdn+6ScYTvWA/GZq2ozIRorqWKL1yWKsS0CXFu5z3CdjN4jqgPX8dJ1pVZWXmbZOdmx63u3+C9iX7Bt6zYrKV5jpWvXxZ5DWllur2zLycuuvK8KIYTIDO5v3CfLysotKyvbunXV/a2lQl8AntPbPvSIf4+y65ab49+EEEII0dRo/eDD8W+7aX37LfFvdQc287ogzNlXVFTkn+lotoIVAgGiBxx11FFp47tmAg97Cxcu9O+IIwhJNYUwN+PHj3fhY+TIkXtNssj/BQUF1rdvXxdIOB6CzuOPP24fffSRCyAIN2+99ZaLUwgdCCB0IH7//PPPXUhBRGEdwglCCNtxTEDY+cc//mFjxozx9BDH3n//fRdx2A4DEWVm34ceeshFJ0Y7T5w40dMmHi77UZY33njD1/Hb9u3b3QMN4Yf6op5Ih3mlEH0oB3liv/33399FIvZHJOO4AcTBV155xeshCE8IQ3/605983i9EH8r+5ptvevqIktRTJoIV29M/Hn30Uc8rohD5Yz/Eo4MPPjj2cpflxyE8I2LeuHHjPE/kEUGRkI2vvvqq1wFlYP9ovYS2YD1tTf2WlZV5fRISMWwXBCvaqqo2E6IxI8FKNCQSrJoXO3bs9HmrVhev8Xtgj6we1iu/l+atEkKIGsD9TYKVAPoCSLASQgghmh/NWbBqtiEBeUgPIHrUlmga0bRrAqIOaSAyBc+gKIg3iFUsfOcBEzGJfW677Ta7+uqr7ZprrrHvfve7LnAgjESNxWx33nnn2be+9S277rrr7NZbb/XONXfuXP+dB1c8i9g3pMdyyy23uGBFOEKgAyEmXXTRRfbtb3/bvcE4Jh5nCF3RDouwdvvtt9tNN91kN998s3396193byKOg8BDPlgwLp5++um+TXVERAQzvJ0QpjgO5WPOL0IoIvTgDZUp1M/o0aPt2GOPtbvuusuuvPJK+6d/+icbPny4C2mJ0A4/+MEP7F//9V/9+HhWzZgxw49PO5AH8kR7IjSFFwOgfdmO8lI31Dck1l9VbSaEEEI0R7hnlm8s91CAW7ds9UEkWTk9rVNniVVCCCGEEEIIIURLo9kKVni0BPBkqS3RNKJp1wREjKioURVr1qxxLxwElvz8/PjaChGNUIf8hudSAM+l/fbbr1IMQ0xCZAoeZ3hnzZo1yw455JA9wvCR3ogRIzwEIGIJ6bIf82yFtPj/iCOO8JB10WMi5CBGBTg+6RO2b8uWLfG1NQcx6IorrvAleFmQp8LCQs8vnlWZguBEG+J5F9RdhEG8npLBdlEvJ8p6991377E9BjbqEi8sBMkA9ZCbmxv/z3wb2iyx/qpqMyGEEKI5smXzFltTstY2lW+O3evb+bxV3Xt08/uyEEIIIYQQQgghWhayBjQBEDYQrRLnzULcGDBggIdFIrRdoCojD6HpEEIQUoJAAux31llnuacPHluExEN8wbOJ8INhQWxhfTJvpABCUP/+/f1Y6bbLFPKJpxbi1Ntvv21//OMf7Xe/+509++yz8S0yJ4QUJOxfJiTWJ+IZIRPxRCOsIvn4wx/+4KEYqyK0GaIhS0CGOSGEEC2N7du2eyjA9esqBmcQCjArJ0vzVgkhhBBCCCGEEC2UZmslx+MlgGhSW6JpRNOuCYg5tZ1TK4DQgSAUDS9XlyBszZs3z+bMmVO5IPjgKRS8k1JB3gjlVxeCFR5pzDt13333uXfUySefbOeee64dc8wx8S0aDgTEhx9+uDJEIflA6EsUFFNBvSBWRT2xhBBCiJYEcziuK11va9esc+Gqc5dOlp2TZR07aa46IYQQQgghhGjKLFiwwOfwr6m9urb7i6ZNsxWs8KAJZDKZV1VE04imXRMYOcwk8Qg/ycILIvI8+uij7r3DiYkwhFdPMuEHjyM8haIh66oieAhF571KpE2bNr4doeqYv4q5q6JLJnNQMS8T+apO3lJBqL0PPvjAzj77bJ8z6oADDvCQfH369IlvkTmE2yNMIfVcEyZOnOiC0w033GBHH32052PQoEGebibQZoRPrK3wKYQQQjRVCAHIvFWEBOzQob3PW9WlW+c9PL+FEEIIUX+0HXF8/JsQjQPsNAwQZsHmUp2pNBLB3sXUESG9TI3e2InCPuyfzm62LyA/DKivbrmidVsX03akgjaj7WpzLMrY2OodalKH0fbisz7LRV8I+avO+RPt85mWK1oXyY5FORGc3nzzTR/wv3Llyvgve8L+DzzwgL300kuej8cee8y/Z7p/S6a538NbxS7ANb8DNGImTZpkn3zyiX8PXjC14fXXX/f5mGDUqFE+11NtWLp0qf35z392z5zjjjtuDwMNcyw99NBDdv755/u8VdwkOWmZY+qCCy6oDB/HyfzMM8/4Renqq6/2NEKIvMsvv9wFJ+DiwQmOqEK4P4SvZNuF9fx/ySWX2IQJE+y9996zr33ta9a3b1/fBkI4QISokDbC0cUXX1yZt5BnRC3SQgBDoGPbM844w0aOHOnbUYYnn3zS5wgL28Hy5cu9fmg3tg37Ul/RumcurkceecRFNcqX7BiJUL9/+ctf7JprrnHhK0BIP/YNaS1cuNBD/YX/A6+99pr3hRtvvLFSjEN4pBwdO3b0OgXqkos4bRPEKdrq+eef9xCO1113nZc3kzYTorGT6YNybchUFBbNHzx/mWexX79+Pv9fTeAheOHiBVZUvNKGDGUARGZesqL2bN2y1YpWFltJ8RprFfvLzcux/N55LlwJIYSoHbt27rL58+bHrrOrbNDAwVZYoPtbSyIYDfnkWYdPntN57+5x0ln+W5Qdk8bGvwmx72CA8iuvvOJG6ajhm8Hi2EMyjWYD9HcGGWPPot8HsFVhX8GmlGyee2w3b7zxhs2fP38PUQGbz5lnnmlDhw5NO7AKwzs2SKISYQ9jTvLrr7/ePxPhGNiFEo38UU444QS3FQZSlQub0qGHHmqnnHJKpT0pQPrYv959910fUB6FuqVcTFkRIO8vvvhi/L+qwQY4bNgw/57qWNQZc/Fj36xq0Dt2Mso4c+ZMO+eccyrTTgf1gl2Q/RgcTttF8xUFwQg7ZXRKlUSwbUbnzq9uHQZoo9GjR9uMGTM8skQgXXvB+PHjbcyYMfH/kpNYPuqAAf6fffbZHseq6vypyXm3evVqt49je03cJ7Eu+J224bzClnPllVe680YUzpu///3vfm5SJ9i4OWcuuuiijPZvySQTrNrOnBT/VrdkKmRWBTZzoK9WRbP1sMLrJYC4sGLFivh/1Yd9g1gF0bRrCgLQ8ccfby+//LLPycSFghOVRsOzavDgwTZ8+HDflhskoe+4Mb3zzju+LQvzSc2dO9fTCRfTTOCiiOiGwS8cm4WLKeuOOOIIv4hy/F69enl+OA4iChelxx9/3MUZ/g9wY0bcogzcJMgbolNICzgunl1cDAk1iOjFOuoCN08WbuzcvFHUo2EYeaAgDOG4ceP8d/JLSD7yVl246B588MH+gDB9+nTPM5/8nwnklzJwfPLBzYv6wHiaCOu4uFInHIc6Zu4r6kUeVkIIIVoaO7bv8DCApbEFo2rXbl0sO7enxCohhBBiHyAvK7Gvwaby9NNPu90Nuw8DjxFrEDcQCDBgZxo1CbECW9SHH37oRnyM4CeddJIPVMYWhS0J2w22mSgYY7EHYffCRnX44Ye78RzbEXYv7Hb8lgyOia3uT3/6k02ePNm3x4aH0T0M6E6EvEWN/VURLReCBJGQKBeiBRGZsCOSR9KNwqDs5557zu1R2PawA1K/GP1D3SJSBagj8p1uoWyIUBieo/PCR49FvSG2YfciuhDth+0OsSMR7ILk/8EHH/S56qnDqCCXDvoMA72xuTHvP21HHilHMqjzqBiZCdWtQ6A/sQ+2P9qHdqK9sPMC5WXgerJyJrZhVYS+gdMG7YK9+pBDDtnj/ME2m0iy8y6xXIn78f8TTzzh7YlARV2wUC/UD2Vi4H+A/HDuUW5+R3xKBe2WSHX2b2m0hHt3s/WwAsQYBBhA7LjssstS3jBSwcnPhaa4uNj/Z1QFqnFdQNpTpkxxF0cuFsDFDHHq9NNPr/TeAS6slIWbKBdiCB5XYaRHKs+pZN46IT3U9HDzJ71LL73UR6uTHiAsceND0CG/1B+jAQjLh8Id0uZiiADDaAC24zfydthhh1Wmxfr333/f24XvwXMJkYo65hjAvsxRRd3gYcZFE7i5cdEM4iGec9QV6j5twnaZeFhB4jEp+0EHHeSiW1UeVuQdsYrjcjOhzQhVyEWdiz2eV9wgg4cVo0k++uijym3xGkNkpC6r02ZCNGaq+2BVE7g2CAHcv+Rh1fTg2YN5q1Z8UWTlZeXWqXMnK+yT7+EAw+AWIYQQtUMeVi2bYAQPhlk+eU7HMJrMwwrkZSX2JXiGMACa53rsUWEEPv0XIQIPFQQabFBVPS+yLXYaDPDYV7ADBrCjYU/CuybReynsh7E+6sXB+fPxxx+7/QebEb+F/EH0d+w7wehf1eBkBmJjI2LbU089Nb42NSF/vA/j/RP1VMKWiBjEgG+iFgVRBAN/GGh+2mmnuQgXbHNcE4gchBiT6FFUFSEv2M/wgqJNosfCgw3BJGoHfPXVV/3djUHx2M7Cb9gin3rqKbebsY7yca3i/1ReUgHEk2Bz432QeszNza1MOxkMPOd4tO9VV121R1smo6Z1GPp0YWGh9+moR98XX3zhtkhsgXgRJZaRwfukSd0GJ4Z0sC31iw2SPh+mTYmeP8m8xrBD4zSQeN5Fy0W9YkfHjkk9I3BRh9hpg00TSI8+zXnQv39/Pxb7BDgOeYmmF0A8xsOK6VboN5yjCJ7R8yLd/i2VhvSuAtq/Lgj9LBMPq2YtWHEjwhuIkwfo3Jz0mYpW4QTHgwa4MF177bU+QqAuIX80Psfr3Dn9/A1hW6Ch022bCZmmxygObhxcGIKoAonCChddQgZyg05Vz6RDWROPx3oujunqoK7LH80LQlgygSoVoU646Cc+OCUKUfyealshmgOcu/WNBCsRkGDVNNm8abOtXFbkHlZt2raxvIJelpefa+3aJx8FKYQQovpIsGrZBNsHnzzr8MlzOu+ivEfnn3WR/56IRCuxL6BPIraUlJTsIbYEGDiOYIAdiikdoh49iWCfeeGFF3zem0RBKhCEoqjhO7ofRvLEgc8IQeSBwdwY4jHIB8gfAgjnF/awAw88MP5LehjITQg7vG4YhF0VCBKEyUslcCE+4M0T/T0Y+VMJUkG8wT6FeIOXTFXQXogWtBfiXZg6JIQ4RCBMJgQxGJzfEZSiv5MHBtHjFXTkkUf6+uDZk06w4ppGetjwEDkytfMyNQvpIyRFB4ynoiZ1GPo0fSOZIMU1mTLzLssAfwS8QOiL1BciUlXRvarq86HvYhsnvWDnpL8G8SlZHkM9YdcNYS2DuJjqXMTBgHLTDom/h1CTyeoxCFYIgpyXHBfnhGhZ0u3fEknlXdXcBKvquRs1MRCW8NQJIDyhZOMFUxVsw7ZBrALSqmuxChBduBAE19p0hG1ZaivWQKbpcQFGSKrqgs7vlCPdzYKLS7Ljsb6qOsg0v+ngwZ2HAy7aIS/cNLgIcsPlJpoJoU4yEaCqs60QQgjR3Ni2dZutWV0au/du9Pt3z6welp3TU2KVEEII0YCkEqYUGlDsC/AOwi6DrSTqDRVgwCI2OOYMx9slHYgYwaiaaq6ksJ5B1hj7gbQRYLANYRBPBHsRxnfSj4a0w4YUQgAyz3p0fvSqCCEJ0wlwAexXiDJ4mPGZjBBOLRrqMEyxwW/JDPx4/WC/ox4yHXyKkIQQg+CDx1mAchBhCZtpsnB81CFCB3VF3QeIRvSNb3zDRbbq2FqXLFniogr7s2+mTgm0NWXF7liVbRNqUoeUj3KyPtmAW96DQj9EOIoS+nCwq1YF+3MOUbdBPIxC/mgr8he1gzPAnr6SKo+0BW1GWYhOBeSHyFZ40CUL34cQgb2TfaojbtB29B/ySt1wLYh6pIk92Rdi1b6iWQtWgJsqMTUDXFxRoHFhJQYtoyS4AbDwnXX8xjZsGyAN0hJNHy6gCJG/+tWvfFQGIyaIlUs8YNxak118hRBCCFEztjNvVUmprSlZa9u3bbfOXTpZdk6Wdey05+hLIYQQQuw7JFqJhiYIGBipkwkdGOIxnGNwx8ieDgSF6667zu6+++6Unjlheg0GKQcBAhGDPHB8jpUIRvhgQGfbAN8RcDDUYyvE2I6hHiEgUYiIQjkQAULZEL6oh1RGfgz6AwYMcO+tZF5Q7B8tVwAPFeoCD5pkIMaQF8qWiViEmMLAbyA0HvkPIMCQPzxkkg3SDnPYI45EhSLKVpOB6Hh00Seod+qQvFHv1CP1kYogegabH+1EW2APTkZN6pC0b731VrvjjjtcLEok2l6JAin9kDTpi/Qr8kX+UvWncF5Q58nOHwiiKFOYBKgz2ox0k80rhohM/0akCoIW5aKN8fqKtn0g1AXnVXUEJ45x9dVXe13QN/AEyyQUYkukpd2jm71gBYx2YMLE6IUQ19F33nnHXQ8JA8fCd9aFOZKAfdiXNMTecGHEjTXqFt3Y4QKKGylzTXGDxH2WB4Dvf//77oZckxtmItQLc4uxJLthCyGEEC2BnTt22rq1662keI1t3bLVRaqcXtnWpVvVXuVCCCGEqHvShf+TaCUaEgz0GN0xgCd7LmR9CCEVNbjXBAzwhBXHPhMNtYbYQR44fjJDPASBI5oHPFsw0mPQR4B46KGH7N5777UHHnjAP//6179WChNRECw4HjBomoHU9913n+/z29/+1ufECt46VUFas2bN8oH3iASZenmxHxGGECwIsZ5MqEuEkHCEkMMTrjoh2amzMWPG+HeEiGSeStUhiCyhbxAZ6ze/+Y3XO/V4//33e/jEZMJVqFfmkfr973/v9c0nbUA6CGuZUpM6BEQzjo9Iy35RSBORivOCMJDkK5pP5uCPimv0WWya9Cf2yRTqDvGJ/ZlrK9qvEU7DHPxsQz6rgn0Ic0ld0AerI1iJzEh3b26O3lXQIgQrQHln/ikEhExhW/aRZ1VquNmceOKJKV2TGytcmImLSlzc22+/3eMNVzVBY3XgIeioo47yRYKVEEKIlggvVBs3lLlYtXnzFuvYqYPlFeRaVnbP2IuS7o1CCCHEvqIq0UrClWhOIAQQvm/VqlVuB2KpLcGTinCCzEmE2MEcQdgR8RRB4GFOn0QPFrxQ2BdBAA8ttkUQQ0QgPUSst956K6XXD95Fr732mh8TkYzv2OXOPfdcy87Ojm+VHsLDMecVwgI2q6rsYAgin376qYsiCBJBREwGQh75J1+PP/64/eUvf3GPHebqOvjgg+Nb1ZxQf+SJubuY7wnPM+y2PXv2dI8komZNmTIlvsdugjBD21DX1DtCE3VNvdJe5D8TqluHwHHGjh3rQic21ESPueClRN4QB8kbecSmSLmIDjV+/PhKMY52COEqo44XAbZLJcLRFrQJbUMbIbA+8cQTLvjRLw899FA7+uij41vvCQLVu+++623MnFNhHwQuvNIS6wLvM/LKsfCCqy613b8pU9X9uDnPP9liBCugkxNzEzdhQvwR4xO1mJOJhe+s4ze2YdtMXGOFEEIIIcRueEEqLyu31cUl/tm2XVvLyc227NiieauEEEKIfU9Vhi6JVqK58Pnnn7uhH3GBCEp4pdQWxAVAhECouu222zySDyHNbrnlFrctsg0CRfCoAgQqQhb27t3bB8h/5zvf8RByd955p88BhTiBhxCeU8lg6pIZM2b473jrYMtEJCO9TECQQWhAGGHweSYiF55izBmFILT//vvH1yYHT7bZs2d7HpctW+ZlZ64phK66qHfEEtLkXYNwctTh1772NZ9Di/mwmOaD3/AcSpz3jHainugD1Df1/t3vfteuv/56F4bYfvTo0Xu0VzJqUofkiT5IX6Q+sDsnCjv0T7z/iAD19a9/3QfXh/CCRxxxhG9DuRCHAJEzhKNEPAvrgeOxjr6UDNqCfoPNm/Ii4uH5hfhFvdJHUw2+R7jEq482RjBkHzwNEbmShSbEKw+RmPMBoQvhkPxlSm33b6pUdQ9uzmIVtLnnnnt+FP/eYkCZ5SLFCUjs1ZEjR/rC93DjSDdiQAghxJ6kGgFWl9Q2fIBoPvCQymhGHrB5caoJPOSWriu1svIyy87Jjj1ka/7CumRT+WYrXrna1pdWjOpjzqq8gl7WoaPOYyGEqE+4v3GfLCsrt6ysbOvWVfe3lkow6PGcjkESo2JieKddt9xsrR98OP7f3vAbC9sJUdcghBBWDWM3hvdkIfn4ned+pqFIDKGWCRjhCa/GeXDWWWftNZ0FRnCM+hjnU4WsIw0EG6LyhPmxmBeddYgVl1xyyR7nFuXA8wVxAs+YwYMHuwgQfsP4zrEodxAt+GQeHzxi8ARDFOBYiSIPxnumssCGibDB9oQ6xEMIQSadLROx56WXXnLRCw+fZN4wiXAdIUQcYgjTgYTyp4JyIlzgdcQxqHfqatq0aV4n0Xm2EuE6hRCHBxUCV7JtKS9CCZx//vleBwHKQv3QLvQtjhcV8viNeqeeo+VGrKIdEWHw4Im2VyI1rUPKhRiGYIm4lkzkou8hCJJutD/RBygnbYCoxv8hrCV9CG8v7vsIhXhm4W2FUEq/Jk2u/dG+C/RNwiBS56eeeqqdffbZ3qfw+kKEYl/qL9m8aYhSeGjRxvQJPME4R2gXzqPE+uU7fZ5zgfMZb0fSTdcXotR2/6YGQlW6+zJExapk1826hj5UF4S8IpBWRYvysBJCCCGEEPUHLz2EASwuWm3rSjf4C1rP7B4eCpD5q4QQQgjRuMhklLa8rURTBAP/888/7+LPOeeck/EcT9UBESTZnD0Y0xEl8DgilFkmYJgPwh3CBOJIIggQCCwsCCtXX321ixcINITtSwVpURd4PSE2IN5l4vFEPhAwEMII+VYVpEl9kD/qhnrnWLwjjBs3zuujLkDQIf1EyCfebZCJUTyAyEKbpWuvmtYh4hDh/BB68MDjWNWFPhGmq0GcwrsLKC9p0geoY4RLhCOEPTz2EJQgKu4g/CBo8Z52xhlnuAAa+hRi4+WXX+7HY14qjpUIZUbQY/ucnBw74YQTPA+IVZMmTUo6dxui84IFC3xfPMwQ2qpDbfdvCnCfzeRe29w9qwISrIQQQgghRK3ZtnWbrVm91lZ8sdLWrin1EZU9ena3gsI869I1+ShFIYQQQux7MIBVZQTL1JgmRKbgmYFhnNH7wSMwCkZ5jOuAYbw6hLBtzAd07LHHVoZOSwSDP0ICx0/lRRBCy0WN/kGkIn9BPIjCsSgb6SIkZAp5wfDPc3SyOkkEA34QMvDMoryJkNZ7773nXjB4qZ1++umet0yYPn26e6Hh+ZPM2yYT9ttvP68vPKcynSMqFaG9ECFD30gkeMlVp96raq+a1iGi6dtvv+3fmXamJl6CgVCuxL5BnVx22WX2ve99z0MIEp6SUIcIUcyhRn8qKCiIb13RT2gH+jOiZyIIQoWFhd7uyebGSgb70D9ok0TBinXMK0bfZK41QjiSfqbUdv/GTnWEqpYiVoEEKyGEEEIIUWN4aSov2+ReVUUrVtn69RusdeylLyu7p+UjVnWTWCWEEEI0BTIxhkm4EnUFghUh0jBIJ/O84RkTMQhhgG0zBWP8s88+65+EbDvmmGOSilWACMCC9wyCSiKIF8HTKepJxXeEAELIJRO6ggDGNggsAQQMQrelEm4SRSrS+Pjjj118I9xbMkLZkgl/1OGbb77pId7wPMITBoEjE/A0IgQb+SdMXao6xKuH/E2ZMiW+JjnUJUJTbQjtRTrUfTKCaBcEHqBtqXcEp8Q6CqRaX9M6JFRfph5+1A2hE/HGSlWuVPkLUF68nuibCJkIR/Q3vKGiYiP54XicV8nalPWhfKEu6Xu0MX0xlbAb0koUTckHfYlQ/oT2qy613b+xUp17aUsSqgISrIQQQgghRI3Aq2ptSamtXF5kq1eVxF7ot8ZecDpYr/xcK+iTb127d0n5ciuEEEKIxkemo7iDsU3ilagpGNeZkxbBCsN6IoQBIyQZ4d+YTycTEJfwxsDITdg2vKsw3qcCIz/eWxjhk3mTEFqN+YrYLmr0JxwdeUd4SiYksR9GdoS2aN45xssvv2zjx49PKkBQDxj8yRP7IpYgZBDmjVB0yQgCQfBYC5A+x2FfjP3nnXdexmIVMKcT5cObJeqhkwjtxDEQt5KJGUFIQ5ysjvCYDPYnpB6CC/lLrEOOhQcRRL1wEKzeeustF57ob4nQVqGvReeXqmkdUm/MnYYQm87DL0AfnTp1qs+PhTCWCPmgHwCeUVExLhkIvYT943xAKIuKraGfUCfJvAPpT0G8DftRZ+SLJQi4UcgfdY9AGz0WUAf8Rr3xe3Wp7f6NjeoKVS1RrAIJVkIIIYQQolrw0rBh/UYrWlnsYlXp2nW2K/ai0qNHdyvonW95Bb2sS9fOaQ0EQgghhGi8VMdIJuFK1AQM0IQkw9jN3DdRIYFnzcmTJ7s3SAgpF+A35rNhjqKoYMH6d999171o8AjCq6WqZ1EM4Bj0+cQYj/gSQCxCqMB4H0KeBcgPIgTCCaHioh5TGPTJB58DBgzYY74dyovYgNiSKEAhslFmhA22Q1RA5GF+Ivjss8/2mlOI437yySd77APUy6xZs9wjBqHlyiuv9M9MoS2mTZvm9TJy5Mg9hLBEBg0a5G2J2IZoFW0T6pA8EF6OOsxUeEwF5WReJuqQ9sIjKcBxJ0yY4O1PWan7AAIgQg/hHRGGyFeAfoMoRXtF81jTOiQdvJFom+OPP94Fq6oG8PH7sGHDvL6TtTN9hbrl99AfkkG5li5dak888YTNmzfPQxAmehhSF4itiKqcd9G6CGXm3EJQDiEMESypl2T1xz70W4Rd6oc6FHsS7pESqjKnVewilN6nUAghhKgCHvLqm+Y4saaoGTx8E9KBB2heYGsCD9kLF8dedItX2pChQ6xPn97xX0Q6qLctm7fYutINtr50vW3atNl2xV7UeWnsmd3TsnJ6WucunfxlSgghRMOza+cumz9vvhWtXGWDBg62wgLd31oSwVDMJ/dsPnlOZ8Q8RlQMlTWhJmJUSze2icygXxI2DZEB0YNne0Qmwqlh8MdInigUYGRHEGL7r3zlK5XeP4gOY8aMceM8njLpxCqM/swpBJwrb7zxhotTCDPkgbTx1EHA4jn38ssvd8+eKNG8s03//v39GZj/EXyS5Z1zEgEE7xfyiRcQ2xEGbsmSJS6A8Y4TDTsXPQ7pI8RQPs5rxAk+WXfxxRdX7oPg8NRTT/m+rIuGJUwEYYLjETouQF3gqUbdUoaQbjKiZQKEIUQL6jW0I/llnqXevVPfkyjHM88848IXZUHASUaqOgztRbvjCXXggQfG96iAdAkVSZ3QJuSFPIb2oozRdq5pHeJZhZhGPih3VCxK5Oijj7YRI0b492g/jLYzIhFefPyeSohlnizekelHbAf0owsvvHAvjydA6ENU4/4Q6oI0o3V4yimnVOYNeP9mH/posn3IM/WeGPoQoe3FF1/0er3iiiv8XKkOtd1/X1HTQRzVvXemOzfrCs6BuiDkFVG2KjTsVQghhBBCpIUXw61bttqa1WttxRdFtmplsW3cUGatYn89evbw8H/5vfOsW/eKeP5CCCGEaD7UZLR3dUeUi5YJBkyM6ghIhCfDkI6HByHaEEsQOaKCD/A/z5t4H0WNtcFQz3MrAgSeUamW6JxZGN3POOMMO/zww31f5mRCNFi9erULIYgniWIVcGwEDvbD8I9gQP5Jm/JcddVVe+Ud8QKPF0QHQrMhonCshQsX+u+kRZrRcvEd0Yj9ENTYln04Hpx44ol77UM5WABjc7I6iC6h7oDtmY+K/REfoukmgzLhRYRgg+cO9Ub+aEe8eKiLr371q2nFquoQjoc4Eq3D0F70mWTzRdGG11xzjfcr+hf5C3NGse66667bo51rWocIOsD/eJYl2zYsiHQB+uFZZ53l7RltZ8qHWHbSSSel9Bqkz3EsxJyhQ4fa1Vdf7f0vmVgF1M8NN9ywR10k1uGRRx4Z37oCBEDqCDEyug9iFetIL1m9tyRqet8L99jq3mebM/KwEkIIUWvkYSUaEnlYNSzbtm238o3ltn7dBtsQW7ZurYh13rFT3KsqtnTq3DxiigshRFNHHlYtm2Bc5ZNnHT7rwsMqkdqKUDLKiWTQV4OQhBiVzpMCcQujfjLjfW3gvEHA4NxBJKhKrAlE9wtzBFUF21JeBA7KwX5VlYfjsA+fme7T0HCtIZQjZFoXNSVah9VpL66JYf6m+s5jTYi2M+9Y5DGdp1ZtqM55F4jWX1X7jBs3zj766CMXvC644IJql6O2+9cnjeFemGmfrw2c03VByGsmHlYSrIQQQtQaCVaiIZFg1TDs2L4j9uK92YWq9aUbPBQg9daufTv3pOqZ1cO69+zmLylCCCEaBxKsWjYYb8Mn92w+60OwilJbgx1IwBJCiOYHno5PPvmkh4U8//zzq+2BVdv965q6uN9BXd7zJFgJIYQQKZBgJRqShhKs6NcYehhx15hGctU3jFDcvGlLpUcVotXOHTutbbu21qVLZxepevTsbh07dWx0IzqFEKKlI8GqZbMvBKtAXRnyoCEErLrMrxBCiIahoQY41PU9or7yLcFKCCGESIEEK9GQNIRgRZ+eN3e+7di+3X/v1LlT/JfmC0IVXlQb15fZ+vUbbVNZuW3fvsPatm3j5e/es7v16NnNQ1K0ia0TQgjR+JBg1bLZl4JVlPoSg9IZ/CRACSGESEZVYtG+uGfVFRKshBBCiBRIsBINSUMIVlu3bLV33n7XP0878zTr2bNH/JfmB95TmxGqNmx0saq8fJNt37a9Il56547WvUc3F6s6d2l88d2FEELsiQSrlk1jEayiSEgSQgjRUmgoD7CABCshhBAiBRKsREPS0ILVyaed7PGz8T7KL8izDes3ujGQfj94yKDYvn2sqKjIVq0qdsNQdna2fy5d8oWHEhw4aID1H9DfhaGFCxfZksVLfN6nwUMH+3ETRSD2XV282j28EJK6dutiBQX57tnEhLg9evZ0AW3liiLbvn2bFRYWWvsO1Z9HagdC1abNtnFDmYtVm8o2+wTJCFWE++vWo6v16NHNOnft7JMYCyGEaPxIsGrZ8AwRPhuLYJWIBCwhhBDNhYYWqBJproKVJh4QQgghhEgBxh4EphnTZlhpaamLRJ9/PsfWrVtvG9ZvsM9nz7ElS5b65+RPp9j62PqilUW2YP4C27RpU2yb9TZ3zjzf74svltn8ebH15ZtsTckaWxD7zvaJbNy40WbP+ty337lzhy1dvNTFqxUrVnpapWvXevi+pbHjzpu7wDZv2RzfMzMwXCFSFa8stuVfrLSiFatsfekG+/LLXdate1fLL+xlffoXWkHvfOuR1UNilRBCCCHqDIx7YRFCCCGaEtF7mO5j9UeLFKzWr19vkyZNspdeeskeeeQRe+CBB3zhO+v4jW2EEEII0XJhVDKi0bTPpvlooMGDB7nnE2LT0KGD7YCDDrCyjWW2dOkXtmnTZuvWvZsddvhwGxTbDq8rvK+69+hhxauKrbi42J8tEKP6DehnI0cd5V5XbZKE2EPcWr9+g6d12hmn2oCBA6xV69YuNOEBhWcU8P+OHdtj+fR/q4Qwf+vXbbBVK4pt+dIVVrSy2DbE/gfC/uUX5lmffoWW3zvfemb1sPbtJVQJIYQQou7Auyq6CCGEEE0J3ccahhYlWGEoevvtt+2xxx6zTz75xJYtW+ajnzFIsfCddfzGNmwr4UoIIYRomezcucvFqZLYgmBFmLyysjIPo7dhw0Yr27jRuvfobt26dbXWrVtbp9g2HWJL69atbMvWLf47HlIhJE+/fn1tv/0GuGg0f/5CF6/atm0TP9puCD9IGllZPd27qVPHTta+hl5OHHfLlq1WumadrVyxyoWqVQhV6zdaq9hfj57drQChqn9vy++d53NVtWuneaqEEEIIUXtk2BNCCNGc0X2ufmgxgtWsWbPs8ccf93kvMoVt2Yd9hRBCCNGyYP6pPn37+BxXq1eX2BdLl1nbdu2sQ8cO1jOrp/Xt188OPPhA69+/n7VpU/FItXPHDlu8aIktX7bCCgoL3MuqR48eLlpt3brNcnvl2v4HDHUhaV48VGAiiGO7dn3pwhXb7YiLXmGuK7ysWE9YQBbg9yCM8cl8WWVl5Vayeo2tXFZky79YYcVFq31d6zZtrGd2DyvoExeqCvM8FGDiXFpCCCGEENWlvgx3iWGYEhchhBAiGcnuGWGpa+rrHtjSaFVeXp5hIJmmCyH+8JqKMnDgQBs8eLAVFBRY165dfR2jppk0fcGCBbZo0SJfFxg1apSNGDEi/p8QQogohCarb7p37x7/Jlo6DCiZPXu29evXz/bbb7/42uqBqLNw8QIrKl7pglSfPntOSr91y1Z75+13/fOoUUfZ3M/n2datWyw7O9tWLF/hwlCnzp1cjOq/X3+bPnW6b3vKaSfbwoWLbNaMWda5c2fbGTsO81Qddvih1rVbt1g6cz2837atW10gOvKoI2y/gXuWYc2atTZp4iT37MLLqmR1ieXk5tgBBw7zua3Wxn7Pys6yZV8st/z8PBs5aqRt2LDBOnRoH0t3m5WXb3bBal3pOuvWtZu1a9c+9sRnsd87WOcunVyc6tqtq3Xs1MHatNnbw0sIIUTTZdfOXTZ/3nwrWrnKBg0cbIUFe97fRPOG55PwGQay8Jy+NfbcwaTpOTk5/ntdUh/CVH0hA6IQQjQv6uueUR/3i/rIK4Nd6xueH+qCkNfPPvvMP9PR7AUrvKNGjx4d/88sLy/PjjvuOOvdO/2D+4oVK2zcuHE+50TglFNOsYMOOij+X9ODkIdTp071EESELhowYIAb+sJk6hi7Pv30Uxs0aFCNDYBCiJaJBCvRkDSEYIUXE55SfA4cuJ+tW7fO1q4ttaysLCstLbWlS5bG+v1Oy8vv5XNblZau820HDRpo5bH77ZzZc9wrCxGJgTGIUswTNX/eAhe8uA8zz1Xbdm1t5coi275tmx+3Xfv27rFFqMCFCxf7etLOycm2EUcd6d8XzF/gBijEpt69C613LO/LEdF2fWllG8t9AM7O7bv8s1evXpabm2NdunVxoapL187uIcbxhRBCND8kWLVsGlKwqitjXn0KVC2FOXPm2IsvvmgHHHCAXXTRRfG1TYttsWfeN9980z7//HPr2bOnfeUrX/Hn1b///e/+zHz22WfbM888Y926datRGTkH2B+uuOIKPxa2Mb4zqCsVoW4vvvhifx996qmn7JxzzrFhw4bFt6iA823s2LE+WL597HmedKuyO1aXkJcTTjjB7ZqiAmy3H330kbdRYrsIUZc0xvueBKsmCPNPEdIvPLRh1OLGkqmRhhvOG2+8YYsXL/b/CQ107bXX+mjq2jJt2jT74IMP4v/tpn///jZ8+HDPK8erK7gRMy/X0qVLLT8/39dRvhtvvNGNb7Bq1Sp7+OGH7YwzzrCRI0f6OiGEyAQJVqIhaQjBqirYH1I9U/DswcK9PPF+zr6sI5zfksVLbBHCWESwGjhwgA3Yb4ALUqQxfeoMf6YZfvjw2At8RXjBkCYeVZs2bbayDeVWtpH5tbb4+ci+zLnVrXsX64pQ1aWzte/Qvk6fLYQQQjQ+JFi1bILtg0+eF/isS8Gqtsa6pixOYVNhznPeSRBQGhNNXbCinzKHPEZMnu8vvfRSN2xS5whWDKpmAHldCFYM2L7sssvstddey1iweuWVVzxPnTp1SilYEdnpvffec7Htyiuv9M+JEyfa+++/7/a1U089Nb7lnnB+ki8GzZMXbIKpaA6CVablZeDdk08+6ULmNddcU2m3TIYEK7Ev2df3xeYqWDXr4bUTJkyofGDDs6o6YhWwLfuwL5AWadYF3CwRiPr27esXVJahQ4f6RfuBBx7wm3UwhtUFeFYxIvx73/ue3XHHHZULN1EhhBBCVA+eEdI9UyAM8XsygSisJyTg4CGD7YwzT7Nzzz/HF76zjt9CGr3yelnffn2sQ/v2vj+PNghTa1avsRXMT7V0pc9PtXFDmf+OJ1V+YS/r07/QCvoUWHZOlntVSawSQgghRE3AIFdToxzGuLA0ZbDVvPzyyy5MiLqFSAbz5893Y+bpp5++lwEWkaquIO3qztvK9ohVqcCYO2PGDH9uP+200yrtbEQ14nhMO4IAkwx/Hxg82IUcIkQFG2Y6CFHeVMm0vF26dHF7KfVG36gKRMe67CdCZEpt73G1ub82Z5qtYMVIZEZgBxh9kM6wlAr2iY5cIE3Srgu4AJP2WWed5Qvi2Le//W0f7cHIjGj+awvh/nBHjo5KCAYzIYQQQtQfrco3WWvCAM6db22mTrM2H39ibd8dbW3fesc/+Z/1refMs9bLllursvL4nhUUFOZb/wH9rW27dh7yb/Wq1bb8ixW24osiKyleY5tIv01r65nVwwp651mffr0tv3e+/9++fUXYXyGEEEKI6lITQ1rUeFdTA55oWTAVB8IEQkyyiEZRD6jaihLRtDIVr4hcELZLJl4xOBzRjflrw4B3wKMRDyJ+D5GbkjFkyBAvF3Ppk05VNHU7XiblpYyHHHKIe8QRJjITDw/ZN8W+pjb3v3C/lXhVQbMVrKIK/MCBA2sVO5Z9SSOQibpfU7jAHnjggVZQUFB5Q+MTAWvNmjU2ZcoU/44AFeDm9+GHH9pbb73ln/wfYDu250ZQUlLi35mnijBEpMv2eHulg5EPuB6T/jvvvONpZTLqQwghhGiRxO6rrb9YZm3HfGTt/vqYtf/Fr63DT/+nYvmv/7UOP4sv/xX7v/J7/DO2Ddu3e/Qxa/vBh9Z66RfWevt227ljp3tULV+6wlYuX2Wla9bFDrPNPadyemVb774F7lGVX5hn3Xt2i73cVW/kqBBCCCFEoLpGs6iBbu3atT4/EFFjooN9iSBDSOe//e1vHlWGT/5ne2wN2DoCGLFZ9/HHH7s9IgqG63fffdeXRCM2Id4IwfanP/3Jj8GUB0zHkJhGSJ9j8huRdMI+hHzDmyqwcuVKDx83efLkPf5PlrdUIMakyjNwPNLEeytE2sHmsnz5cnv++ec9XyFvrGtu9phgw0IISiYgMR9sIF34vkyICl6IIYhRVeGhtuNeXwz8DvPAB8rLyz10HYJV9Df2w74H2BGxwyUDj6zgTUT7NncyLS9z8SIAYstkEaKpEb03VgcJV7Hr5z333POj+PdmBaJMEHWOOuqoWsdq5oFg4cKF/h1RqbZxUXkgIb0jjjhij5svcBMjniPeUIQJxNOKubRwMeaBCoFp//33dw8tHpoeeughfzAjlvL06dN9biz2Za4qbpzjx4+31atX2+bNm33hBsqIBtySeSA6/PDDfR3bkj7xgUNMZtJlHjDiwVKHjHzh4ZP6QMTTCAYhBNRlCNNU1PblRDQfMGzw0sIIzJqGtuU+Vrqu1MrKyyw7Jzt2D619CIlW69ZZm08nW7uXX7N2z71obfl86VVrhxfVpCnWZtZsaz1vvrVetNg9qVqvWFnxyf+x9fzeZup0aztxkrWZHNt+xkxrM31G7PcltmX9BltVvsU2bNsRy7xZ5y6dLCsny3J7Zbtg1b1HNz9HauJNLoQQovnA/Y37ZFlZeeydMNu6dVWIpJZKEDV4TsfGgLiCQT0dGMhaP/hw/L+q+dlVF9uuW272eYewDXAsRBlsF3iWYDcJ67FpYFfA7oAogV1j5syZbshnbijWBTsLAgZ2DbbB4B8VMbBpIEoxoBcPjPCOgN0EQYd5uzkmz0TYM1hP+thWQjohfcQnBK25c+e6uICYxPlDvrCn4PGD7YaBvsG+RJ6wi1CniXlLBWlj48FTBEN9NPIN7cQcPNQZc1BxXOqLwcaIfuQVew3b8fyLzYfykU6wx1AXDDLOzc2tta1qX0CbhfnWg8AD9FnW03bYvxh0zeDuMC87dUL70LeoL/oX9YgQUlhYuEfbUKfsT7+knkiX8yHMh8vvDM5mX2xroW5pd4RX8oUohcBCHUfPJexttC3vJQcffPAexw0hAWk7QuFRjkQ4FvvQhvRB+kGyZ/rt27f7eo5PumxLPybflJd+zHxbnB/YROmniD4IgfRbtsWeN2bMGJ82hLJh+0vWh9keIff111+30aNHu+2Q4yD48Q4W6idKdB/ywDGoO/IQfZfPtLxsQ5rUH/tQf6mOS/rYSUNZmIKF85v8ZiJKClHfcK9kqc49lm3ZJx3Jzt+6JtPBGVUR8lpUVOSf6Wi2ghWjXbiYA2H3amvo5AGBBxmgoRB5akM6wYqbKA8sRx55pN882JaHkmOPPda+/vWv2zHHHOP7cKN89tln7fjjj/dJCLnIM5kj+eOBios1NwbS4abLhfqrX/2q32i5GZAuaZCHZIIVN2w8qnj4ueWWW7zMLNyEeQhlu5oaCoUQzQuuF/VNba/jovnQ6ASrWP8nnF/7J592j6p2z79kbcZPsNZLllorjBspRlPG3rjiXxKIbd9qw0b3rmozbbq1mTLV2i1YaB1i9/I2ebnWbeAAy83PtZzcLOvavau1bVcx35UQQgjB/U2ClQD6AvCcnolglelobkaKY0Bbe9XlLjZ98cUXbvTHRoHBHFsMXhFnn3222xkAAQgbB89uV111lZ166ql29NFH+0BajNaIUFGxBfsF+5Dfgw46aA+DHKJBsM0MHz7c3xEwimOop4wXX3yxT7eAbQRbCDYPFkQIjPoQ0t+0aZPbPq6//nq3t4waNcrrDTGD45AfbCrYXMgfecXugl2GY2dqKMT+QjsgnlEnlDuAHYa6QVQ44YQTrH379n4cbDoIM9ddd52vp74QW0gDYzz2mNCeTV2wog9R54n5py4QJWm74K0UFas++eQT90wLHlqIOLQtAiV9EYEjeEaF/TkG8FsQq4D+8NJLL7nwhADLMQFxMYhQ9HHaPfE8CvXPPon9lTIgnC5ZssT3J+1kkCbb8I7D4PCoJ1iAddEyBfEWwYz6Q6SiT9PXOBdIi3qgDC+++KLbIOnX1B2fCDrsh+0wnKuAB+I//vEPLxNiEH2T7aln5p3ivSMqmAJ5eOKJJ7x/si37kBfsjuzD9tEyZVJeYDvS5Bzn3EtmE0BY5nwI9U4+n376aRfMKGu0nYXY1wThKlPxim3SCVeZ3odqA9eTuiDkNRPBqtkOw+XCHUgUhGpCNI1o2rUBQY2bAw95LNxIcEtnVBAPItzoAhjkgrAU4IbK6AweqsJoBBofjzI+uajXBm4I3Kx5yAtxhLkhkS+8rYLHmRBCCNGSYf6pDvf+3tr//g/WdvQYa7V2bfyXGLzsHnqo2fnnm331q2a33GJ2111m99xj9sMfVnzy/7e/XfH7BRdgfbHYjTeeQOzeG3vp6jDuY8t78ikb9Nzz1nfVCuuZ1d3aaX4qIYQQQtSSTEMPJYY1wkaBkIJdA8EFoYDoLtgmEKQwWAOGLgzWgPATBAfg+8knnxz/r+aQB4QARKdoJBgM+9gzMFojiiSCoRthLQgA5B2jOEZyjPYY6+uKAQMGuFEeMQVDfgDxCdsLBv3gfYPggLhy0kknVQonwDakg8iFSNKSQYREHMVGxjzwd8Wep2+//XYfbM20HogWDLTO1NBKf6X9EZhCf6grEJnIJ55CyUJCAsfEDkifwzZYHegP9KEbbrjB/uVf/sXuvvtu+9rXvuZ2PM7L5557zvtU+J3l6quv9mMiWoXzExC38aiifyGsfu973/N6vfPOO+3MM8/0OqLeEZsCHB+xD48tBrmHffjEfkh/R1iLnk+ZljcIzUH0ywTakIXrQPT8EaKxUZ1wgZneq5sLzVawagpw40D1f/DBB30htB8i1Iknnug3kqircHTkAjBigZFzPOCFB8EAD0HcoHnw4WZTU7jB40LMgx1CWlhwH+aBMNWNVgghhGgptJ6/wNo98ndr+9wL1mpVccXK7GyzE04w++Y3KwSpH/2oYkGgin4PS7L/2Q9x66STmLHZk229erV1fOVV6/S3x6z13PqbT1MIIYQQLYOaCFVREFXwziBUGHMtYYNgoG3Ui4QBvxi/GQSM2JJIoq2jJuA1c+6557oXUmL4r3TpY0uJDgoGDOmkgc2lNvaURCg/nh4IYdHR5QxeBuox5BUj/3nnnbdXffF7XdRXYwIxMYRbTOVlkwyEP+xSiHhRkRKBAqGPQdzYszIdcI6o9N3vftduvfXWSi+sTAn5p+8k83YgjCGiC/lBaEsF5xNpMPgce2GmcEyEV44R6gFbIQIu0Mc5P8LvLIhFhzKoLkY0T9QX53EYDB88mhCq8C6jD3Ne4DkVQPDiHOe30047zcUi4PP000/3vNDnE8ueSXk5F8knxyfcYyYCJLbUm266ye644w6/HgnR2KmucNUSaLaCVVTEqc6FPhXRNBIFopqCW+4//dM/2c9//vPKhVEhjDCq7TG4mNfVAxajGHAFDgsPVNx4Et2ghRBCiJZGm48/sbZvveMh/GI3X7NDDrHYm+5u4QnvqcsuY0JNs0GDeGOt8LoKxhE++Z/1/M52l15asV8QsG6/3eyww3gbtVZl5bHjvRs77viK/YUQQgghqkkmI7UzMaBhd8BrCvsFnhoYpokAExVVsKVgm0CMCIbs+gAPEgYA//nPf7Zf/OIXlTYWQqE1BqgT5mKCEA0HzxOEFwQSBh1HwfMED6Hf//73e9iMiILTXEB8YF522g3hAgEjU4I9ioHcUY81QIz5/ve/7+JTdUQw+id9OlNCmEc8jhBWCF+YKJgC4g8iJPY5tkekSwaRjAhRibcUolGmcMxkofLwguTY1G103rRAsn3C9rQN53Q0rxzn8ssvdw8upl4Bzu0guhLOkf2jcG2gPRJFLsi0vGzDOYLgR3tnAu1Yn9cbIeqDTIWrliBaNVvBCtfuQCaxEasimkY07X0FNwouvtwcEm92jDLhIo77b20u0Nxo2P/SSy/1kSaJyymnnBLfUgghhGiBxO7BzDPVesXKiv+Jj37jjWbf+57ZGWeYYXhIGLWbMbzsMc/CaadZ7KZrdvPNFYJWDDy5Wi9eYral7sLUCCGEEKJlkKlXVaZgkA7RYRAREj2WAlERq65BOHjjjTfs1VdfdcM4835feOGFvowYMSK+1b4HDxdEhBAWEDsTHld4piASBFj317/+1ecYx6hPKLZQnkRhq6lCiLc//elPLsohLjDvGJ5ImYJHFHOlERno4Ycfttdff92nrajLMI7p4DjM2YRnITY4wmPiJZcKvA4Rz/BGpH2TgZ0P0Yf+zDz2tR2AzrmYTEBLB/0weDQRXemRRx6xSZMmuY2RfCVCPVAejoMYx5xiiUsI5ZcoNmVaXvLEOUKUp9mzZ8fXCtF8yUS4au6iVbMVrFDgA8SJrS3RNKJp7yu4sHOD5kGHyQ2j4GbLyAN+rw08SPEAgHtv4o2Jh4tkNyshhBCiRcGgkTBwBEMML4XVGJmZEaRLmiHdFKMyhRBCCCHSURdeVVEYPPvJJ5+4dwRi1eLFi23q1KnxXyvA2IzhHGNzbQ3wqeC4GLIxajN3D+IB3joshIxrLFBHgwYNco+SkpISN+QjDCTabqhTRACi71x11VUe1iyUp7nMyUOfQMRhoDSCD1461bExIZJec801dthhh7k3EILHM888Y/fee689+uijXrepPJnqAmxy2Abp3/TrqsQy7GuELsSWlm4+ePow3lDY+jL1Jqpr6G94UpEP7I2Iikxh8rvf/c6/JysndYDdlLB9iQv2yVRkWl76PnVNP0n0qBOiuVLVPbk5i1bNVrBicsAAIxgSXU+rA/uSRiCa9r4Ed3JGoDCiI1y0mawQl3fcjbnw1wYehHDvnzBhgo9W4YGJyRQnTpzoN6pp06bFtxRCCCFaIO3b267+/WxXYXw06OLFZn/5i8VukmajR1vs7Yy3t4rfqgsv7AxI+eADs9//3uzhhxk94z99mZ9nX8aOax33DuMhhBBCCJGM/LMuin9LTnWEqgDzXeMFRChAIrMgIhAeLWqgDh5YzPNTXwZ4PJUwmCNOJQtz1pjAjoO3GYb8pUuX+iDhXr16xX+t8FhBzCLaDeWpT8+0fQniwwUXXGBf//rXXbAgLCCDpasDbc3cTUytcf3119vIkSM90hAC6lNPPeV9sb5EK4Q2og5961vfcuGNcwGhMRW0Ix5YwRMp1VxMzHVGetj3EGL3BeQVce0b3/iG3XbbbT7/FaIqecbbCu+/RC8x2gKRizCMqZazzjorvvVuMi0vka6wf3JcQhUK0ZJId3/ecXDj8SKuS5qtYMVNKsQHhnHjxtXII4h92DdAmqTdGOCh7+qrr/aLO6MdfvSjH7m7Li613Pjr4kHtyCOPtCuuuMJHSf3sZz+zH//4x/b222/7BKCMZBFCCCFaMjuPGWU7zjjNvuzWtUKcYjAHAhPzV7H89rdmzJ3w2WdmS5ealZSYlZfvFrL4ZJQg6/md7V5+uWI/9o/dd10AmzyZmL/2ZZfOfrwdxx5Tsb8QQgghRC2oagR3KjZv3mzvv/++20wIwYe3CfNXsf6DDz6oNMiHcF540SBuRe0yfE8WEQcjNoLNmjVr3BspgPiAJ03iPOXB9oFwFU0fry4M7HUBQgOGfMpRG08xxClEKgQrhBVEjKjthuPgfcT0DwhXURBF9pWIUV/geYT3DG0bQsdVF7zUCJV46qmn2je/+U0Pocg67FiJwkpdQ//GIwkY7E67pYI80vYILummLjn44IO9DzBfGX14X8K5SIhAxKhbbrnFw1oShjF4UtJfOVc53zk/CHuYaqGukpFJeREIGZjP+V0X4RKFaGq0NNGqzT333POj+PdmB5Py8RAAeAZxs2dUQKYjVLgQEgeZEHvAfsTVTXWRrQ48zJ144ol+8a+KdNtyYzjggAP8xsw23Ji52bM+CkIbNxluJgHSPfroo/3GAKRPGqwPUGZGMeBSz2+4pJ922ml+k8q0HoUQzZ/oi2F9URcivGgeMDqXezoDSHjJrQm8FJeuK7Wy8jLLzsm27t0zn5A5ypfZWfZl7MWz1abN1jr24tmqfBMWHIu9cZt9+qnZhAkWe6MzmzKl4vvY2IMmA2E+/rji+/vvm739ttk771QssecOF7hYPvywwmsrHvbiy9hzzY5zz7JtX/+a7Tp8eEWoQCGEECIC9zfuk2Vl5ZaVlW3dutbs/iaaPsGzhOf0rsef7t8TqYlQBaQ9NvYcQ4QX7BEIVtgHmG8J+wmeQ4S/C/MtsZ4waAgueJcABvs333yzUoDBfsPgW8A4TSgyDPsIWngdETKMcGRz5szx4/NuMHz4cP/EGE76HJvfSRtb0HvvvVcpeGHvIH2EDAQvPHrII0ZwjhdAcAjRZEL6gIGctBHRCOvGJ3mO7psJbE95KDe2JWwtYQ4wIH9sQz0RSYdyI+QQ+Wb8+PHenpQf76tQv+SFvEXrsClBGekz9JNM8k/9/eMf/3B7HftQ7gD9kLYmRCRtSXr0j/ok1D/HSexPUVhPnujTtD1eTMmgX3KuIGgOGDAg5aD50Ffpm4g+ieUM/Rw7YLQvBzgG9R7tN5SDOcGIMsW6aFmwM2JbZR+Oxe/0V9Lh3Yxtk9lcQ59NZUPMtLxsR90hQiL04r0pREti1y03W+sHH47/tye77n/QWt9+S/y/uiWVR2h1CdeTdIJ9oNl6WAEXOQSWAA8Ezz33XEbhAdmGbaOjV0irsXhXJcINiIt3VJCqS7ixBFf+VDcZIYQQosURuyfuPPJw23rH7bbt29+0nSccZ19GRTRGdSJWIUAR1g/vq//7P7Of/KTCe4pP/r/vvorfX3ihwpuqtDSegNmXsWePnccdE0v/G7bpu7dZWeyFdNPmLVa2sdw2biiz9es22LrS9Va6Zl3s/422fXvdPFAKIYQQounTcdRum0iUmopVgHEZbymEAaYRwGgNGMRPOukkN2wTji0YpTBuE7kFgQXDNlFb3nnnHbdfINgkwvrTTz/dp2PA6E7Um48++sjDhjGANtEwz/+EJCQ0IeIBYhViD6LOJZdc4vlCyMX7q6Zg1D/qqKPc8I5IMDn2vIa3VU3AKI9gweBgQp0lgjGewdLUIzap4I1FXSMOAjYr8tISoT1pa6AdEr1y6GOso/4yHXCOqBJE1fqs19D2CC+JnoKBIPxgJCZMYkO2MwIgdj/6G+dQ9NjkJ4TjC7ZRzlUiMzEQHnEMz6voPtTrhx9+aA8++GDKUH6Zlpd8cU5Tb+QtHeQf0Tedx5sQTZGW4mnVqry8vOGufPsIXMATY8kykoELIg8IwXOJix4PVNw4onNWAa7tI0Y0z7iQQghRW+pqxEU6mssEw6L28PLBqElC4tZ0vkZ/KV28wIqKV9qQoUOsT5+KEaq1odXatdZm+kxr8+lka/35HGu9aLG1XrzEWq0u8XB+GRN74fsyN8d27TfAdg3cz3YdMMx2jjjCdhz6/7N3HvBVXGfefukIBEICIToGA67YuGODe+/GvSeOk3VsxxsnmzjFu1l/u/t9yXo3idPsxHFsx3EvuHfjjm1scO9g0xESVSABAgHffY7uEaNh7tXcq3Yl/R9+wx3NnXLazD3z/s/7nt1sVeeuTpjaXLPZtmzdYlu3bE18JrpyiaVnXk8r7N/P8vvkJ06R2WhfIYQQ7YMtm7fYnNlzbGlpmY0etaMNHtT43zfRdvCGXj69V0OqSdkbI1g1BoQEhB4M3Bju8ehgHm48tU45Zft5tvCmweiMYZxBtA0NoPXnR6wIe5Q0BT49nB9bE0JaQ5x66qmxPIfCUIeIbNQjA5S9MNje8IJkqjYQBV42DzzwgAtPh5DBewHCB38jjFBmCHwHHnhgrEHXiILM3c45zjrrLCeMxMW3YaIVIcyma3d4Qz3++OPufYa5oXbffffkN/UhH/fee69bZyoQ5vkKg6ffnXfe6drj2Wef7SIhBaEc7r//ftdWmeMrLPRGlTvlhtiMByXlxjm5Nu/7iHl4WPE3ZeQjXXAMNlfOxTriLoIi7RdhlbpCCCOsYKroGHHyC3jjUe9cgzRECZL+XJQPttygI4MQ7YVUv+1dP2maMLhBUoXqzBR/v77PNAgN0K5DAnoYxcMPWDAeLg9MRk8wMmbmzJluYZ1twRi3PKCZSFHzNQkhRGrojDY3zfHCKdomuRQSsB55eU5k2rz3XrZlrz1tyx67u2XzTuNs6+hRtmXH0bYVEWroENs6sNiFEtw6fJhtGTumVpRi/333tpojD7OaU06qXU4+wWqOONztszVx/o0bNzlvqoqKNVa9vtqqqzfaxsRCfvoW9LHC/oWJl9LaUL9CCCE6HvweKCSgANpCrolVgCBAv55PaCicnd8fgSuO8BA+f1MTPD/iFUIa8xKlWxhgFRYL4kB+ERtY4uS9rYLAgMcMgiRtgDJtCAyf7IuAgjcNISTLy8udSIG4h4cenj9xRT6Oox1StxMmTHDniAuef8y/BITmo75SQXqoS67FJ9N3RKWR/DGgHsEH8Yd2FKY5QgKSJsQ6PP+C5cq7F9dh4D/iVjD6FMcg1mF7RSTjnuYYjkU8Jm2Itt5ZIIo4+QXygG2Xc+OIEDWoFdsEgxsxsjNlSljIE6I9kCo8YHOEBmyqAer+dzlOSMAO4WHlIXYxcX99zOSG4IeDOZ5yNQygEELkCvKwEi1JrnpYpaLT2krnfcVcVMx15T4ZpYTXVaLThhCVeCtOfPas/ezf37b2iX6hI914WJUuXmrrqraFtenarav1zu/tRKve+b0sr1eevKyEEKIDIg+rjg0ilf+kz9Bl74Pc30FaU6yKoiEPK9H+YeD4ww8/7AainXfeeRmJRUBbRzSi3cf1xIsCAQiDaqaebIgnzKkF55xzjhUXF7v1VCAk4QFEmvEmSiXOEP3pkUceqfPcai4RNh3eYxEo1zhp8MdQB5l4BsbN7zvvvGMvvfSSE+GOPfbYyLqmTWCjSCceCtEeiBqY0tReVvKwamYoGEYDEA+YhyYPNR5gLP5BipKPAo9XFZMl+sIUQgiRGjqEzU14RJjouOSsh1UqenS3rf0KbGvxANs6ZLBtHTnCeVs5zyq8rhJ/u+2Jl1s3/1Vi/1TQX+neo9aDasOGahcakG2EBtywfoOtq1pn6xOfG6trv4MunbtYp87td1SuEEKIbfD7Jg8rAZ33OjC5Vh9GZecSDXlYifYPQgheM7QF2kEqAScVrn/cvTYEZFxPvCgQu7I51nsHsfjwhOnOQ1qxPeLJhFdUKoGOAZtMY8K+rLeGYMU1KVeWuMKTPyZTz8C4+SW8IPsgDPI+GJUurhvHU0+Itk6Ul5U8rIQQQogE8rASLUlb87BqDggDWLZ0mS0vW27dunezHj17WPWGjYml2oXr4MWtR8/uzgDQu09vy+/Tq3ZUpLyuhBCiXSMPq45N0MOq04SJbj1IrnlXAaHYmJeGvj6eFaJjgmj55JNPOpHhiCOOcGHkMvV0ak0wwD744IMuTOTEiRPd3EmtITAJIToWCOY1u+2T/GsbTell1RoeVm3n6S+EEEIIIRzde3S3AcVFVlBYYL1697LikgE2dPhgGzio2Pr0zXcv+OvXbbCVK1a58IGLF5Ta0tJyq1i1xs2DJYQQQgiRC+BhQpQbiVUdG7zrzj//fCdcTp8+3c1N1ZbAM+jCCy90XlOzZs1yYQKFEEJkhwQrIYQQQog2SM+8nk6oyu/T24XcKOzfzwYNLbGhI4bYoCEDrV9hgRO2CA24pmKtlZWW2+KFS2zp4qW2cvkq27C+2rZskaO9EEIIIYRofRB9vvnNb9oll1xi+fnR87nmMoQqZw6ryy67zIWsE0IIkR0SrIQQQggh2iDEZkeswsvKh/rrlvjsW9DHSgYPdMLVkGGDrP+AIsvrlefmuapcW2XlS5fb4oWltmRRqa1YtsLWVa13IaSEEEIIIYRoTejfMv9RJnMf5RqZzPckhBBie/QEFUIIIYRoo9S+1He37t27JbfU0qVrF+ud38sGDOxvQ4YPSoYLrPXG6tS5k61ft95WLFtpSxYtdV5X5UuXWeXayhaZj04IIYQQQgghhBAiCglWQgghhBDtFEZ3EjqwaEChDRpaK1wNGjzQCvr1dRNBV2+otlUrVlvp4jI3z1VZ6TJbW7FWwpUQQgghhBBCCCFaHAlWQgghhBAdALywCB9YMmRgrXA1tMTNe9WzZw8nUFWsXmNlS5jnqjTpcVXl5r8SQgghhBBCCCGEaAkkWAkhhBBCdCDwrMrvm28DBxXXznM1fLALHdird55t2brF1lSsrRWuFiyx8rJlVlW5TnNcCSGEEEIIIYQQotmRYCWEEEII0QHp0qWz9eqVZ/2Li2zIsEFOuCoeOMDyEts2b97iPK6WLim3JQtLbVn5cltXtd62bJFwJYQQQgghhBBCiOZBgpUQQgghRAemU6dO1qNnDyss6ufCBCJeFRUXuW01m2ps1craOa6WLCq1FctW2oYN1bZ169bk0UIIIYQQQjSeDRs22Nq1a92ybt26RvU3GWRVVVVVd77q6urkNx0T8u/LgnKOAyHD/TGNrY/mIpt85TqUM+XdEvnK9lpNea82B1988YVdf/319sYbbyS3tC3aevqbgk6JB7gsDkIIIRoFndnmpm/fvsk10dGZPXu2ffbZZzZ8+HDbYYcdklszg5fYr+d9ZUvLS23M2DE2dOiQ5DeCF47qDdUuNGDF6rVWubbSNm3cVCts9ehufQr6WEFhX8vvk+/mxRJCCJE7EMJ1zuw5trS0zEaP2tEGD9LvW0fCGw357DRholsPUjNrenJNiNxh9erV9sQTT1hpaWk9w3dRUZGdcMIJNmRI/OcYx/Ou8PzzzzvBytO5c2cbM2aMHXfccdazZ8/kVrPHHnvMPv/88+Rf6enTp49deOGFVllZaffff39sEWzy5Ml20EEHZXUtPmHjxo320EMP2cKFC93fUYSPgWzKlnf7V155xd5//33bvHnbfLZx64PjP/30U3vnnXds1apV7r3r1FNPtZ122im5R61B/tFHH03+1TDh4zPJV2Ov5YmTr3R89dVX9sgjj7gyjTqOfMybN8+mTZtmK1euTG6tHVxYUlJiJ554ovXv3z+5NT3Nda1ly5bZ008/bWVlZduV+9FHH20jR45MbskMyvSll16y/fbbzw4//PDk1vpQ/g8++KAtWbLEzjzzTBsxYkTym+3xde7vveYmTvoh7n6ZpJ/nWc1u+yT/2kbXT2Yl1xpPU4mm/tnLs6Uh5GElhBBCCCHq4EWlZ15PG1Dc34YOH2SDhpRYQb++1rVrl0Rntdp5WREmsKy03NauqbTNNdteZIUQQgghhIgLwsMDDzzgjND5+fnOkIuRFmM5hnQM1EuXLk3u3TAIQo8//rjz+kC0OOyww2zChAnWvXt3+/LLL+3hhx+uJzTl5eU5gSfd4o2shYWFbn/EL9Iata9f+J79unTp4gQAyOZaHsSBoHgUh6iyZenXr19d2S5evDi5dy2IMM8995zNmjXLvRMg8u2+++716iN8TBCudeutt9ozzzxjK1ascOVOvrp1qz/Ijb/DeQ8vvXv3rn0vSZQJ5eHJNF+NuZYnbr5SsX79env99dfT1iFtd+rUqU4Mo+0iVOy1115WUFDg7oH77rvPCUYN0VzXokzvuece9z0C1QEHHOCW4uJidx4E1a+//jq5d2YgdFH2CG0IwlEwD/OOO+5YJxwGBbNUkM6WIE76Ie5+npZKfy4iDyshhBCNhk5DcyMPK+GRh1XLgiC1fv0GN6fVmsSybt16t42Xhl6986xfYYEVJBZCCHbu3Cl5lBBCiNZAHlYdG2/A41MeVqItgCfPjBkzXL9+ypQpzpgL9NURBz7++GMbN26cnXzyyU78SQdeAAgZGNQnTZpkBx54oBMhwIscfB5//PFOhIkDRn8EMAzMeJ3svPPOyW/Ss2jRIne9gQMHOm+QHj16JL9JTbprEXrtzjvvdPf2eeedFymqBGG/Z5991j788MPtypZ396eeesqJFrxLnX766a5fD2x78sknnRBzxhlnJN6RhrrtwfpgW1SeEDQQLagHzosHyYABA+rqIFO4Ft48u+66q/OMo/6zzVdDRF3L09h8kWba+dtvv53csr0XF4LPvffe64TWY445xrVPf37Knjrh/XePPfawY489NuW1m+ta/t7Co437ivsLQRa4JqHrpk+f7ryeaBtxy93j2z7v+enuT592OPfcc1PeB95DKRMPuMYQN/1x98sk/bR/eVgJIYQQQogORZeuXSy/T28rGVRsQ4cPtoElAyyvV55t3rLZhQ1cuqTclixaaqtWrLKNGzcljxJCCCGEECI1GEEJS4Y4sP/++9cZMwFj+L777uu24d2yZs2a5DepKS8vd14hGLExtgeN+njf4GmFcR1jMIbjOGCgnzt3rhOe4g6U49wzZ850Asqee+4ZS6yCdNfiXKSdsorj1UMIweXLl7sy2HvvveuVLWICZcEn3kJ45ADp/uSTT9wnZe/FKqA+DjnkEOfxgSAY9rIifYgW1ClGeEQLPG9SCSsNwXnee+89l0bK0AtI2eSrIVJdC5oiX7TfDz74wLXBVAIL6cXjBiFs7Nix9c5P2e+2224uXYTiSxeKsrmuhdCLWIRHG+XgxSrgeETlXr16OQ83xNVM4Xq77LKLW58zZ07K+5N8DRs2zKU/3AZbk7jpj7ufkGAlhBBCCCFi0LVbV+vbr6+VDCmxIcMGWf8BRda9R3f34rhyxUonWpUvXWbr17WPCY+FEEIIIUTzgRG8oqLCGboRacIQYYMQZQgPGMsbAmM9AgOCAiHewhCaD1GC68aZfwqBCM+bTZs2OW+noDiSDgSBBQsWOMEgrsjV0LUQTPgOwSCuYIVwQOi6qEgllCshBzmnn+uLMqFsKCNEgTBce/Dgwc7ITlkHmT9/vsszZYwHUlDQyAbECARIrjdo0KDk1uzy1RCprgWNzRf1xpxFtEsEP9p6FLSVk046yQ499NDI+iVP1AteUeQtiua8FvcTc1ThkUUoxDC0V8QY9icd2YBAStoob+6hKBDH8IKjHrhfyGsUtA3ESx+O00MbR4C8+eab7de//rX94Q9/cGFCU4VajNofDy/aBfdskDjphzj7RaWfto9nFkJiR0CClRBCCCGEiE337t2ssH+hDR6anN+qsK97QVm/br0tW7rMShcvdZ5XhKUSQgghhBAiCm8Qx7AeZTjHaI7xHIEEY21DIH4Bxt4oDxjOhdDBueJ4NmDEZt4rvDrwIIkDRux3333XGe0xrCPyxKGhayG+kG6EAcoFQz1eJoRwi4K8Mu8UBvcoYzxlhRCIEOGFH1/O9OtTiWIY2gFPmiDeW4Q8c23Sh7BEHYcN+w3Bse+8845b9x5TnmzylY5014LG5Mu3BTznxo8fb6NGjUp+sz3kCc8bBE7KPwwehtQNeaINh2nuayFScQxzmoXLCGiLHIM3Ydw2H4bj8Pji3qHcU4Hgg8CNcJNKaEJ8RFzjfvJQNsxDxvxetBPuJZ4/iEB33HGHC1MXrFPEW8JwhvdHaLr//vvtzTffrLd/3PTH2S8q/VwPcc3PPdbekWAlhBBCCCEygrmq8nr1tOKS/jZ0+JDE5wA3h9WmTTW2cvkqW7yw1FauWOX+FkIIIYQQIgzGX8QADOBRAhPbvadRWCCJAhEDUoXg814gGNYxsDcE8/hgVGYOGTx34oCRm7B+3sAfl4auhVCCcZxyuO222+w3v/mN3Xjjjc7rA2N72HBP2XF9ypU5woLlx3UwwnNO9vGeOOyL5wp1Qt3ExYtHvr4wqN9www1200032R//+EeXTkINBo376SDkIOJCVGjEbPKVjnTXamy+EFQIDYnIx7xP2UIeX331VbdOqMuo9t2S1wpDuePZRXnhHZitYAU77rijE0uZx43zRkFdMFcW10PkjQMi5nPPPefERu6xf/7nf7Yrr7zSrr76auc5Bsz9RXsA7oGXX37ZeUAh0oX35z5BQMLTKkic9EPc/YJQrrR76sQ/F9szEqyEEEIIIURW8NLv57cqGVxsvXrnuZe2tRVrnafV8vLlVr2h4ZArQgghhBBC5Ap4MHz66afOMJyJ8PThhx86ozgeLkHviHTEuZYXZtgXbw8EMR/2ECP7Pffcs92cPsxFNHHiRLc/IhfCFvshtLAvnjjMHebh+ggeCD6IbmHo40fNJYYASJ4x8j/77LP29ddfu7CMeCVRBniHPf30026eqIbgHAgvCGapwjBmmq9UNHStxuSLMnzttdfcuSdNmhQZRi8ViJ6IK0899ZTdfffdLo/klTyT9zAteS1AYJk2bZo75sEHH6wrd9ruQQcdFCk+x4WQjHgXEaIx3J6DcC3qC++oOOIzwhDnJMQenkteiEN4wrOOvCKAcf8CAhciIGIl87kF90fIQ9ykXYRDY8ZNf9z9guyzzz5OOPvmN7/pvP3aOxKshBBCCCFEo2Auq/7F/W3I8CFWUFjgOvPMZVVWukyeVkIIIYQQok1BqC7ECjwhCKEWBwznGNAxbu+5556xDfdxrkUYtOHDhzuj9VVXXWWXX3658/j4zne+44zwiAgvvvhiPW8N+uOEHsNjC+M6wtbChQudwIHYhadJMCQcxnnEGNL9wQcf1DOkI1axDY+iMFyT87MP5z3//PPtG9/4hpsn6dvf/rYTUfgOj6iGQpn5+b8QhFKFYcw0X6lo6FqNyRdlNW/ePHde0pMJiCV43DFH06JFi1waqGNENfIepiWvBQhjeDZxDCIe5U74QITCVKEk4+LbIOngXqJ8o+A+4Z5AXGtoTifO9cUXX7hz0W7CYg/tnft19913t6KiIhdm03vVkTc88ILpoG2dccYZds011ziBLkjc9MfdLwzPllT10t6QYCWEEEIIIRpNt25drbConw0ZNsj6Fxe5ua42Vm+05eUrXJhAiVZCCCGEECLXQXhCBMD4jiE7jvgBGP7xhBo5cqQLMReHuNfinOedd54deeSR9eYwQmw5/vjjnXEdb42gx8fnn3/uvGaYb+moo45yIhcL+2OIZz4c9glC+LNhw4Y5sea+++5zYfDwpLn99tvthRdeiJw/iXNheCfteK8MGTIk+U2tuITIhkcJohwCRyow2vv5vxBeUoVhzCZfYeJcK9t80QYQsRBxDj744IwFBgSjSy+91OUJbxo8eqjbf/zjH9vlqyWv5UG8u/jii90xHItoQznibUVa4oovqUCYxUsMLz88wKKgTqg3xKWPPvrI1VMqqEfSB6kEYbydTjjhBNtvv/1cGXI/IcCxTohE2v+sWbNceaeaN84TJ/0Qd7+OigQrIYQQQgjRJDCQlBCBg4ciWvV3L7V4WpUvLZdoJYQQQgghch4MyHjMYMRGkIgDniqE9cOQjqE7lfAUJptrhfHeJhjtERuAcHXTp0934gGizt577+2M4yykDw8RvDyYe8iHGwQM9VOmTHHCFefD+wtPGkIBHnrooU5UgwEDBrjPIMwZFSXUcU5EMPBzBEVBOSD8sH+q0IjZ5itMnGt5MskXYgZzH5FOhBwExUxBJGG+IvLEdY877jgnmFEfb7zxhmtr0JLXCsIxiFYcQ9ubPHmyazO0eUQdPNcaA/kgpGZDAidh+QhhiWdYuromtGNUKMuG2GuvvVx74hrMZUYYxFtuucX+8Ic/uHVCCEYRN/1x9+uoSLASQgghhBBNSs+8HlY8aIAVFRe6EaO1otUyW72qIu0IOCGEEEII0TEgNBfiAh4QUV4ZGJoxxkMqz4ggGNAhlSGZcxHOjAFVGOmjwBPj/fffd0Z5vC1IXxz8HDkIR3hDxSHba4VBKPCh2Lz3B2HS8NpAWCLUYBg8axDJ8PBCNAuCEHP66ae7+XLworniiitcGELEIQz3XC8orrE/16dsfX2F8XMApXsPwFOG9BDajrmiomhMvoLEuVY2+SJUHtclzBzzSt100011y6233lonbDFvFNvwBqOdNwTiDG0WccN747TktRqCcqccKafGClbkh3qhnREuj+dDFKQRLyU87QiJmArud/9syATSgaBE+EfuATz4aHOkB2GOudOiyidu+uPu11GRYCWEEEIIIZqcnj17WPHA/tavsK/riDNCb8WylbauavuRekIIIYQQomOBYIUxGSN3lCcH4gsGdoSc8LwzURAWDfC2iBJGOBdGYTxmvMATBsM3whPeJohPcUAgI6wfMA9OXOEp7rUQtgjPhhdGVDgyxL6w4IfIQhmQFgzjYdiOIAOpBD7EGAz9CAOIaggRzGuFd01Q5GE/Fq6JeBCFv4YXeMIwFxHzDFEvlGFUmqEp8hX3Wtnky7c96glBDNEnuPh2SXvnb85L3eHJRujF9957z32fCo4nPdCS12IeJ45588030wowkKrcM4Hwi9wXXDedV95uu+3m6pH7w4f9C8N7qA9lmW3auAe8B99ll13mRFG89Px9HyZu+uPu1xGRYCWEEEIIIZqFnnk9rai4yHrn93J/V1VW2coVq6x6Q+NfZIQQQgghRNsFMYS5gxCsEELCLF++3BnlEZgIy9UQeHlgvEYEigoBhjcKxvaioqJI4YTv8HjCUL/zzjvXCR8NQUgyjM2kEe+UOGRyLUQDQtw98cQTrkzCUH5hzyfvvYZQEeVVg+Ge7wBjfENwDkLxIQqQ3uAxXMuHJMTrJyyekVc8owBDfxQch7dKQ6ERmyJfmVwr03wRmu+aa66JXL7//e/XCZOnnnqq23bBBRe4tki9EnoRIY3zhmEb10d48eJtS16LNvbJJ5+4JUoYYn+Oow3GaU8Nwf1AO6Pt432UCuqPsqf9+3CYYWgvPBsA0Zf6DPPhhx/a9ddfb48++qjLC2XD33feeed2Ihf58959iJ9RxE1/3P06IhKshBBCCCFEs8BIu/z83lY0oNB1yDfXbLZVK1Y70UrzWQkhhBBCdFzoG2L4xUBMiC2M4h6M3++++64z5PoQZR6+IwQfIhHHevD6wVsBwQLvkaA3Et5BeGFgUN91110jvWrmz5/vhDMErYbmNfL4dGIEZ36nuMb6TK6FYDdixAgnFLzzzjvumh7ySF4R9pgTxxvmCaGIGIhwR9kGy4IyY74tyg/RkLBqqeC4BQsW2D333OMM6uw7ceLEeuXHOnlHDEHQoJw9XOvtt9+2hQsXuvRFhUuk3hEMqJuGQiM2Nl+ZXKux+cqE0aNHu/uBNoFYEmzX5BHPJryoqN844m06srkWwhDr3qsoXO7cAwhGwTYIcb25oqBMSSf3OumJgvrzYfqo+2BegnCPcR9xLuoxuB/3zowZM1x9cy4+aWd4EiJIkofg/lwLjyigLaYiTvoh7n4ItNyDXiRt73S59tprr0uuCyGEEFkR7LA0F1Gj4ETHhE4lI8PoINIpzgY6natWr7LKqkor6l9kfftmHtdaxIMQIt26d0s8J7YmXrSrbdPGTU646t6ju/VIdM6DL7xCCCEaB79v/E5WVlZZYWGR9cnX71tHpdOfb0mubWPLZZcm14TIDRCZlixZ4hbmFcIYi1H21VdfdZ5LGMmPPfbYOk8PwPj95JNPOmN7UMzCeI2hmeMRWfge8QJvEub4QawghBhCRbj/ieDEPrxj7LHHHm5umTiQ7rfeessZtw855JB66UxFpteiL40Qh3cI+UJwIV/k85VXXnEGdQSYI444woUYA7xjvIEeUQVjPkZ29sVTijKhDCZNmuQEjDDPP/+8Pfvss64eqBfKDgHo5JNPducNQx1gEyB9pAtvNuqPa1EP5OGoo46yYcOGJY/YBt5LXAOhAzEsnYjU2Hxlci1oTL7CUO+kF0EVrxrm4fKQp+B1SCf54hrUMdvZh3shnUjiaepreW8ryhmxNVzuHEsbPPLII+vaICAOzZw50x2/0047JbfGAxGH5wHCmhejoyCt5AOvuTFjxkTeg9yfiJg+v74e/bMBoYjwkAceeKBrP5wDYYqyII+E72T/zz77zF588UWXLp5N3HOkM4q46Y+73+uvv24vvPCCew4E80kb3nLjzW49SOcrL0uuNZ6gSN4Y/P3G86shJFgJIYRoNBKsREsiwartwQtM125drWZTjROt+IS8vB5OzBJCCNE0SLASHglWoi2AAXPUqFHOc4P+PaG9WAjDhVcH4czwQgrCnDwYnTHYTpgwoZ7BmHmsOA5jOs9CvD74BLxlMDBHiRQITxjeMawffvjhzsDdEIgCL7/8sksvokC6+ZCCZHMt8jh27FhnlPdlxILXFeWDkIQROwgiBdswDuNhxv6UB3MZccyJJ57oPE+i0oxHEenkutTPMccc40LQpXon5xyINrybYXjneuFrkZbwtUj/tGnTnLCCkBjHUynbfGVzrWzzFUU6EclfByEt2HbJG541eP5MmTKl3jHpaI5rIaYgAlLuHOPLnfuRczG/U7hMERURfQhPGG6fDYEYSFoRw/ik/bMtDG2UNNFeSUcqwYf8ED6QPJNuFvJBGNGDDz7YCc7+/L6MqGPEJJ9XnlGULWV0yimnpBUP46Y/7n60PYQzhLe99trLpRvaq2DVqaqqKtpfTgghhIhJU/2ApcNPoisEI6MY3cQov7hx4sMgsn497ytbWl5qY8aOSXSit40EE80DRtSKVWtsyaKlVrm2MtHJ7moDSgZYyaBi520lhBCi8WzZvMXmzJ5jS0vLbPSoHW3wIP2+dST4rfWfnSZMdOtBamZNT64JkXvwTonxGxBz0g1YxLCO8TPKsOtBoCCkIEZgvDDS7duWyKScPNkcky08f7gWhn2M6kFBsalpr/nybRcQZqNE1qYim2shKPs5xFKVO+X12GOPOSHmuOOOc96EmYLn07333usEwnPPPTelGIXH3SOPPOKEsTPPPLPBPPg880wgzw09G7Ktj7jpj7sf5U7bC6aXdliz2z7Jv7bR9ZNZybXGQ/6bAn/PMH9fQ7SPp7UQQgghhMhpMBbk962dz6pHzx6JTn+NrVy+ylauWN0iorcQQgghhMhdMALjPcDSkPCAkbwhIzPGUc5FWLf2IlZBJuXkyeaYbPECIddqTlEH2mu+fNtliSuOZEs216Ks/TGpyh1vQLye2CfdPGnp4N49/vjj7eijj3YRO1KBZxfemHgexXmv9HnGuzHOsyHb+oib/rj7Udbt6VmWDglWQgghhBCiRaCDX9S/nxOt8LCq3lBtK5evtLVrKlsktKgQQgghhBBCiOaF+auY+2z//fd38z1lC15ThHhkfrpU8I5JyEHmyWpuMTFT4qQf4u7XUZBgJYQQQgghWgzC//UfUGh9+/V1I8TWVa23lctW2vp1TRNqQAghhBBCCCFE6zFx4kT77ne/a3vvvXdyixDxkWAlhBBCCCFalJ55PZ2XVa/eec6zqqJirfO0wuNKCCGEEEIIIUTbxYWDz893n0JkigQrIYQQQgjRouBZ1advfu18Vj26W01wPqvEuhBCCCGEEEIIIToeEqyEEEIIIUSLQ6zxwv6FTrTqynxW1RttRfkKiVZCCCGEEEIIIUQHRYKVEEIIIYRoFfCuQrDqW9Cndj6rdeutfOkyW72qwjZv3pzcSwghhBBCCCGEEB0BCVZCCCGEEKLVyOuVZwOKi6x3n94uxvm6deusfOlyW1Ox1rZu3ZrcSwghhBBCCCGEEO0dCVZCCCGEEKLVqJ3Pqo8VD+zvxCvbalZVWWXlpcts7ZrK5F5CCCGEEEIIIYRo70iwEkIIIYQQrUqXrl2sX2GBFZf0t555PZ1nFR5WZUvKrXJtVXIvIYQQQgghhBBCtGckWAkhhBBCiFana7euVtS/0AYOGmA983o40api9RonWq2rWpfcSwghhBBCdCS2bNlilZWVtnbtWrfU1NQkv8mODRs21J2ruro6uTU99EsJW91UaWhuKDOWhmCfqqqqjMuD/fwxHJ/NtZqzDLOpr/AxtJM4cG5/DO00Tlm0JNm2XfLh77tczJdo33RKPCw0OYAQQohG0RId9r59+ybXREdn9uzZ9tlnn9nw4cNthx12SG7NDDrcX8/7ypaWl9qYsWNs6NAhyW9Ea7Nx4yZbUb7CysuWW/WGauvSpYv1KyqwksEDrXd+LzfPlRBCiGi2bN5ic2bPsaWlZTZ61I42eJB+3zoSGCb9Z6cJE916kJpZ05NrQuQ+9NdnzZplb7zxRj0hhb7hhAkT7NBDD7WuXbsmtzbM6tWr7YknnrDS0tK6e4XQ1GPGjLHjjjvOevbs6bYFYT/ePZ5//nkntngaOm7OnDn28MMP110nismTJ9tBBx3k0nP//ffHFov8cWEor0WLFtmbb77p8nr++edbnz59kt/WJ9t8IeI888wzLn9BAaN379529NFH29ixY7frq2MreOedd+ztt9+ul0euNXr0aDvmmGMsPz8/uTU1pJn0vv/++y5fF1544Xb5yyZfHDNv3jybNm2arVy5MrnVXD5KSkrsxBNPtP79+ye3boO8vPzyy/bxxx/b5s2bk1vNevToYQcccIDtv//+7rqpoFw+/fRTVzarVq1y5XnqqafaTjvtlNzD7IsvvrBHH300+VfDhI9fsmSJPfXUU/Xy1dD9kypfHDd+/Hg77LDDrHv37smtorWhPdfstk/yr210/WRWcq3xxBVvG8Lfe9zDDdHl2muvvS65LoQQQmRFsLPaXNDxEwLocC9fvtwKCgqsX79+ya2ZwYvJqtWrrLKq0or6F1nfvtEvc6Ll4WWoR4/alyAEq5pNNe7TLYkXqM2ba9zLFfsJIYSoD79v/E5WVlZZYWGR9cnX71tHpdOfb0mubWPLZZcm14TIbXiWvfXWW/baa6+5d02EDYzsGDwx7i9evNh5fbA9nSjgQcB54IEHbNmyZU7kQLxAhMB7pKyszBn2EVvCBvzPP//cnnzySdu4caMNGTLE9tprL8vLy7M1a9ZYeXl5yuP4DrEhHSNGjHAD8PB+QTDhHLzzRi0IBAgc5HXfffe1oqKi5FnMKioq7PXXX3di3AcffOD+Zv899tjDHRtFOF/77LOPe6+ibH15jBs3rl6+MFojws2dO9edd/fdd7edd97ZnYPjEIoo0wEDBiSPqLUTPPvsszZz5kz396hRo5zo4cuQ+vjqq69cGaZKq2fhwoX2yiuvuHOyb1T+sqkvjnnsscds/fr17hjSRx74m3dO8sUgSUQ5jy+LL7/80qWBcmDh/YSymD9/vtuH/EYNtiMd9913nxOFuA7nIJ2UeWFhYXIvc+km33yfaunWrZtrG9wb++23X106uUceeugh18aplx133NENAqZ98B3b2RZMXzBftCHuk912282VF/cQ4irHhtuGaD2ohy033pz8axudr7wsudZ4mmqAum8zS5cudZ/pkIeVEEKIRtNUP2DpkIeV8PDSIA+r9g8C1aqVq215+Qo3jxVGia2Jf0UDCm3osMFWPLBYopUQQoSQh1XHBiO//5SHlWjLYPS/9957nZhzwgkn2C677JL8ZpshHu+Ps846y4YNG5b8Jhr2wyvok08+ce8PU6ZMqRvp74Usrhf2XKLvSRr4btKkSXbggQfWGfdXrFhhDz74oDP+H3nkkU7wCYJXGCISAsLhhx+e3Jo9eE6RzoEDB9qZZ57phApA1Hv11VfdOv1iBvSRpl69ekV6IAGiBOfCaBzOly8PPo8//ngnSnkQV55++mknbFHufuAgzxu8uqZPn26DBg1y3/ny9cfgQXXGGWe49HuCZZjKa8yDqIMXGmIaRHlYZVNfwXaGpxf59cfwvoj4xXsn4tixxx5b9x3C2YwZM5zARX34/ALtk2ux77nnnlsvz+DbL/XAuyztA4HMnztTfBnvuuuuzoOMdsAgP9LAtcgT272w66+/adMm5z2G0Obx+Ro8eLC7T4KebwhnU6dOdWLgKaecUs+TS7QetL326GGlOayEEEIIIUTO0aNnDxswsL8NGlJinbt0soo1FbaxeqMtW7rMFi1Y7MJ8IJZ745wQQgghhGgfYBzHA2To0KHOIyYIIgEeHhjcGcjWEHip4PGCyEM4s6C4gOhyxBFHOCM/wgTChYfj6G8iiuB1ExQU8FghDYAAEMaHvsNrprEguOGhRL93zz33rBOrgH5wcXGxE5euuuoqJ0A05PmCpxGeTXjyIMQE80V54MnGefEQ8yHh+ORvtvO9F6uA4zkP5+O8nB+Cx5DusHBDGVKugCCXahAsx7/77rtOrEKcDOY/SDb1hZCF0IVgRDsLHoPAg3cRbYNr+zpFsMFDCsh3sD0BYQQRfDDyhz1JyCNiJt8hJCF2UX/B62YC53nvvfdcnVPGfjAf6WVh0O/BBx9czwuRewoxj/r58MMP68qdc+HpR1oIZxgO00jZ49FIfbCfEM2JBCshhBBCCJGT8PLVr7DAevfpZQX9CiyvV17iZarazW/15edz7Ks5X9uK5SvdCEghhBBCCNE+QLACjORhAQaDOqIVIJCkEjo8eNHgoYPIEgy35kFgwDiPcIFnkQfBDJECASRqzh4vwCCSIGIE4ViIul6mIKosWLDAnSscXQJh4ZJLLnECTdx5hRBbKDOEkmCYOw/lQZlTFl6k8eHxEIsQPMIgzJE+zkudAOveMwPBKAq/HfHRi2NhSC+CHfuS31RkU1+k+aSTTnLzORFaLwz5oiwQMkkjIP6QjpNPPtmF/AvD/l7Eok0FQTilLiljPKuCQlI2IL4hECKQ4d3m8fcFdYy3XRg8DUkjbYu6BfJHPim7qOg23He+vny7EKK5kGAlhBBCCCFyls5dOlthUWHi5bN34kW2xnrm9bQN6zfY/LkL7OvZ82z2F7NtyeLSxAtW7cuWEEIIIYRou2BoR1SAVGHhEZjwJkF4SCV0eLwYgpAQ5cmCUMH5MMJ7oQmYJwpjP2Hkgp5XHu9JxH5BgYQ0kX6uh+CBRwrHe/EmE7x3EccS8i3s9eI9ajKB/ABlG1UepJn8BMsWUYNypKyivMZIh0+bF0AQty644AK75pprUoaPQzABPJyiPKfINyEPaRN4x0UJbJ5s6gsBhnCTCIFRZYnXFuVAWfljqFfmfuK4YEhCj29HQYHHM2fOHFem1CXlSL7Yl/RS15nAse+8845bx+uNdHm8oER9ReWLcuQ78uZFNfJy+eWX2/e//30ngIUhfb6+okRLIZoSCVZCCCGEECJnYeQhgtXgoYNth9Ejrf+AIvfitXXLVvdCXLmmyhYvXGLzvp6XeIlamfHLnhBCCCGEyB0w6HtvllTh37znC8Z+jO7poN+IeICBP5N+ImIDnlwY9AnjxvEePMA++ugjlz7CwgXhGl7oee211+w3v/mN/fGPf7Tf//739rvf/c7N9xQ8Vzrwcpo7d64TE4LzeDUGL2akKls8byizoJhBeskT5RgURoJ48WblypXusyHoxxPSkWuNGTMmubU+zHVDuEAEnobmLs62vlJBPvz8YByTqryCEPUBbzC8wvDoGjFiRPKb2nLH84nyo4yZD+qGG26wm266ybWPG2+80c2zFreNEm6wtLTUXSdcNt5zy4u1TQGeipQjoiAeWkI0Jx1KsHriiSfcxHDE92wP8CDkQSzDjBBCCCHaM3l5PW3EyOG249gdXYjA7j2729bEP+a0qqpaZ+VLl1np4qW2euVq27Rxk/pGQgghhBDCUVBQ4AQuBAjC2oXBqO+9goJg9D/mmGOccR4hAUHh/vvvt7/97W923333OUHk6KOPrheKDRB6ENL4npBteOYg5iBUIFogYj333HOxQlozxxDnIvRccN6otg59dT8vFXmLCq2HRxTiD/lmzqUoT6Eg2daXB3GQennqqafs7rvvtttuu815a02cONHNZZUKbMwc89hjj9lf/vIXmz59ugs1eMIJJ9TzRvPtAgHp2Wefta+//tqF7EOMI4945T399NOxbNacg7Kh7e68887bzaOFiEV5UYZ4iYXxHnNxoa2SL2zQzL1FuoVoTlpEsGL0AO6G55xzTp0LZhhuln/+5392D4I4kyZmAzf/tGnTsnLDzUVuvvlm54bKg04IIYQQor3TuXMnGzhooI3beYzztios6medEtt4Qe3WrbutXllhc778ylatXJ14EU4eJIQQQgghcgo/ABsDfnDx3j9NCSHgmAsLAz1iUdAmiIjw4osvpvQKwptk3LhxLnwax82bh0f/Cpd+wqJx3nBYPQQqQuDh7XP++efb9773PRdq7eqrr3ZzJSEkIKh8+umnySOioXywj+LZs+eee253nbbM559/bm+99ZYLI0ioP+8R5EFceuWVV1x7OOigg2KLddnUlwe79GeffWYff/yx8+pCFGKuKQShcPqC4HXEMeSJNowwicAVnr+M9HBOxDps5LSNb3zjG24OrW9/+9s2adIk992MGTOcN1M6yBNzYVEu5DcMbQ/RivRgkw+Ko7QrhLm4tnHSRF2RP8rjgAMOaFdtUeQmLephhYcTKnVTuSN2BFD4r7zySvuP//iP7R4m/MjxcOeBLIQQQgjRESgo6Gs7jhltO+86zgYNHWR5vXpar969rGuXrla2tNzmfjXfli4pt4rVa6xmU7xwK0IIIYQQouXAswbPF8KhBZdZs2Yl92g6sJ3tt99+zgsFcQHPGeyTeMT89a9/dfMK+fmJgmDkZ4A4ghbCwLnnnuuEp3/6p39yIeI4F5472O2CIDAdccQRduGFF9YTSBA99t9/fydmIAIgWAXD1oVBPEFIGzlypBMf2guU2/PPP+/WDz/8cCcohiHviE2IMXFDIWZbXx7EmEsvvdQd881vftMdg9PFP/7xDyfWpAKvLo5hQXzCow9h9KGHHqpnx6WusYfTHjkGUclD29hnn32c9xciE95XqfDeaZwbYZTrhaGt77vvvu5aiGm0ebzAHn74YXffIXjxXUP4doroRbs+6qij6nmNCdFctHhIQNwj33777eRfoiF44KLs47bMgyLId77zHfvqq6/skEMOSW4RQgghhOgYMDJx6LAhNmKH4TZk2CDr2r2LexHkZWrN6jU2+/PZtnDBYltXta7eqEIhhBBCCNG6YPRGiCC8WHBpLmEG75ozzzzTCRkIAhjhESHoN5522mk2YMAAt963b9/kEebmjmI/tk2ZMsXNR0RoP85x7LHHujB1eMIgkMTtayJeEQIOLxyOTeXlgrcP10ZUGD9+fCxxoS1AiEREE7zdjjvuOOe9FAaRDsGHvj5eR+m8m4I0tr64Dk4BHEM7JH0IS4hMzIkVFTYSEIc4hoW6xXMK8QsPKIS3MDgdRLVzzoPACcxPlQrygKDF/unEPMr25JNPdvshUCFcIc4y1xflQzoQaslzKrhHnnnmGeexxjHcR0K0BC0qWPGQBSYajIob2xA8HHhwsaR6UHh4+KCasy/ujnFgP/bnuHSjHFKRSfoAAYpYouzPZ1iQaiw+PywNTUIJmaQn07wKIYQQQjQlvFQOGNDfdt5lJxcesGu3Ltala2fL65VnlVWV9sXnX9qst2fZ55/OtqVLymzlipWxQ18IIYQQQojmAxEBMYB5foLLmDFjnJiDkR1ShQhkyg/sXIgTUd5RUeDRwsBvH6KPTzxqCN2GDQzDfdBbBeM+YgVePqQ3CMIT2zH6L1myxAkCccH4jwCF3TKV3Y3B6Xj3IBDgYdWUIKxAurJFUAqKGdQH6Sa9qeylPowd4l8U2Frx8uG6iEeIO+HQcpQ33jzYM+m34xEV9MCbOnWqq3fSiOdT0CuvOeprhx12cGWAyJnKMysMYizTt1BWeHV5fBlStqQ/CkRTIB+p+Oijj1z5kJ90c0n5PNPOidxFm7/qqquc5x9gy0W8SuUxhbjoPeGY+4u5wYRoKVpUsDrxxBPtsssuc263PHTSCSJBuBH/8z//08aOHetuEBbW2cZ3YVCxL7jgAvdgZ18eFD/60Y9Szp+FeMb37Mf+HIf7LvFS46Qxk/SRb+bp4qZHdR88eLDbn88rrriiTshDCDr11FPddy+88IJz2eShzzxfXiDiXIw44GEeBNdqHkg+PyzEu8XVOfyD9Ktf/comT57sRhgQOzWYnh/+8Id1Pzge8nPddde5h7Y/N+tsi6oLIYQQQojmplOnzjawZKCN3XmMDR85NLFenHjh657oM22wlctXujCB8+YutIrVtRNgCyGEEEKI3AQxxwslqYSFdevWOXsdIgACV1ww4iNaINrwyd8IHdiz8HoJGu+9/cyLCGG4NmlFXAj2LzH041mTSuBoyM7IdT/44AO3jtdZJvmLg/ciw+4YJYwgCJEfygeBBSgDFkQkxJswnMcPDIvy2KEsCJHHJ3NSYRcNi1XAdX25sc61ggtCD+WH2Eedsc3XUzb1Rd0jor333nvu71RwDEITkM9p06a5eaBS1bH3CuMYX8a+DNlG+42ioTxUVFTYF1984eqFthFVhmFIC7Zj2jxlQPnhiUYZ4NEV1b4Q9RryhBOiOWlRwYobCiX3lFNOsT/+8Y8NPhCAh9G//du/uf0vvvhie+edd9zCOtv4LqhMI/j85Cc/cQLMT3/6U3vyySftnnvucTc1f4dBxEJpRhS6/vrr3Y8Kx6DGf/e7320wjZmmD1DDKQdGE3Ctxx9/3IlXd9xxh/3f//t/3f48TK699lp74IEHXKxd3DgR+piIL93oEfKDqPXII4/YNddc4yZyRHhDlGKCxz/96U91D2YPkzgyygSRzafn7LPPtptvvtmJYh6O+9///V83guFf/uVf3LnJ6yWXXGL/8z//474Ln1sIIYQQornp3r2bDRs+1MbtNNaGjRhmY8btaBP22dOGJ9Z58cO7qnJNpa1YttKWlS23dVXrY4duEUIIIYQQLQsDyTHGM0VG2EMeAcDP8cNg68aEy8OGNnPmTGevZKB3UADwnkiIZlEiE4IJ4g7HIgR4CE2HXe2tt96KPA5Bi/5pKu8W8kxIODy/GCDe1BCujjSTdzzLwpB+bHvMLeWFEz5JL9v5Pgzn4XzsF/b6of6efvppV47M34V3VaowfxyPAwL2zKjloosucvtQN3gMsQ0BDLKpL2zIhMpDBIqyZ7KNc2GH9XXFNoQubLupBFUvPCHe+fbJ8bRr2u+XX365XRo5Lw4IQLuOguMQyfie+a6ygXuH/JK2KCGK82MbxlkilSecEM1NiwpW4L2EAOEDNTwdCEkIJ4hQ//Ef/+FuFBbW2Xb33XfbSy+9lNzb3E2FsIPn0L/+67/aYYcd5rylbrjhBjfRXhAeDghCL7/8sv361792HkbEOOUYBBhcge+//373QEtFpunz/O53v9sufQg/7I8IxAOYyRgZdUA6GOnBQ5hJ/1L9GJOfe++91+XnN7/5jfOQ4seNifZ8/vGy+vDDD5NH1MJDG6EsmJ5///d/d0IZP9x8DyjsxJEl7i8eXJybvCKsIbjxHfsIIYQQQrQWnTt3sl6982zkDiOsf3GRde7SyXr37mVdu3R1olXZknIrXbzUVq5YlbaPJ4QQQgghWgei+WALQ7hhHp2gcR+70/z5853oQAjBIHgNYYz3gkEq6AMyQB0bGjavAw44wF0zCPZB7G8Y+L1A5uF4BCmuQ6jB4NxXRDvCpoe4gPgUBIHj3XffdQIA+4W9WxAt+B5RAwEtylupsSAoYWPEHksZBAdxkT7Km3xj7/NCBX8jbvDJ4PXgNC8cj+jD+RDDgoIV+cEbidB4eAThrZNKrGos2dTX6NGjXTtCRKTdBNsZ+fLhCckXAiLgYECYRupoxowZ2wmqnAsxi7QE2ydlSZ3SNihDytnDdd9++21XTjhQRIWBxLkBey7nxV6bqecdAtSrr75qjz76qKuXww8/3ImSQcgLHmeIVswfhmDVkFjFvnibUc/hshAiW7pce+211yXXmw0e0HgPHXrooc7TByWYm4O5rBA9JkyY4P5G/OHGPv30051yz82EGMRN+LOf/azejcQDjvNMnz7dPUQOOeQQ9wDiOuz/gx/8oO5hAqjheFlxY+L9xA8RD9O//OUv7kcCMYeHhocfBR5WPECOP/545wobJtP0+Qc7aUC0C/4Ykj7Sy4/lqFGj6kYIcA3254FFzFBGAnj8uXx++GFGCCNG6fe///16IzU4P2IhHlMo+vwYw+uvv+7C/uFlRpl7yBMPy2XLljnvLs7ly4+yIC1+RALlhsh11llnuXM014+PECJ3CXZym4vgM1p0bPi94yWJl9hwfPK48FKwavUqN9dRUf+ixEtL7Yg80X7o3KWz63vx7Mjvk+8+t27Zaps21biXqQ3rql3/k5ewLl27qP8ihGgX8PvG72RlZVXi/bLI+uTr962j0unPtyTXtrHlskuTa0LkNtibsD3hycJ8Tnj1YFskVN4bb7zh+nAM8N5pp53qDOqEWWNQOiIMIgO2sSAY/BmUThQibGGIGrzHch5scOG+IO8ZeA6VlpY626BPA5GZGJiOmIZXD3Nxee8ewJ7Iedkfu10w7VwbOx82POyEYdEBMQ5hBVGE76M8sNJBvrkmfWAGvEe9Q3NNbHdEW2JKFWyf5AXRiYHolBOeUIgiQbECmyd2QfKCIEO5kDfsnohz1BmCVPD9DLsiA+E5D+dFjOPvqAXhA/tsOtLlL5v6oo1RV5QD5UE+OJ4yoa7Yzj7HHnts3fxm5AX7Ku0Hr7L333+/riyoY8qD9kkZ4kAQLEPfNvz1fBo5hmvSBo866igXqi8MaaPcEc9os+G2EwUeW9iBae/cN1yLa2DTJX3BtMGzzz7r7jf2QbxkfrCoumJhH8Q/bMqUFfWHKCm7TctCO9hy483Jv7bR+crLkmuNh/bcFPg2y73YEK3yZk4CcfHkQfaHP/zBPWyi4CHOqAkU6ahJ+9jGdzx8eGj5/bmxwypxFNy4/PhRUHh74ZXklxtvvNGdC4NYeB4nT6bpawj2R6xCtMtGlebFhLzwoxz8sfQgVBH2j4ciaU8HD/+wSMfxzKuF2s4D/re//a3rCHAuHrr8OMR5YAohhBBCNDe8gCFGDh0+xAYNHWTDRgyxgYOKrXd+7XwF69etd+EBFy9YYuVLCRO4rkXEdyGEEEII0TB49GA3xDaFkIOggkiA3enggw/ebh4kBmrjOcO2oMeTh34eA9fxssF+hSDD9BicKyxWAdsQKkgDwhG2OtKAGIIdDHsftk0EhCBcn7SFj/NePwzaP+OMM+oGgXvw2EEIYN4gbINB4aep8fY9bKcIE6QPWyGGadKHaBIuE/5mO98zOAJ7Kscx0J0B+JyP8wbxfWv2R7Ci/FMtDdkpGyKb+qKu8CKaMmWKE6TIC8cwxxPiF8fgJIAwE4S6ITwhAg1lRtn5OvbCHWkJl6G/3gknnFAvjb4MceCICtOHjRj7K+XI9+G2kwrKH3s0bQqREhGUUIqIfcF7x0MbBH9cVD35JezFyP2HLVmIpqBT4oGxfWDPJgYXSh5qzOcUnEcKBfZb3/qW82C67rrrXBg91Pd//OMfTlhBgLnkkkucK+R///d/bzeygAcOYfcQjW677Ta3Ld3+qMpcD08uHhA8UHjAoFCnYvz48XXpCZNp+vghCKchiE8PoQD9+dJdI1V+TjvttMj5uqLORehE5rsK5zEq7cBDC2UeQY8RCjzAeKgytxZeXUGvNiFEx6GpRlykI+qlQ3RM+L1jMAgjE7ON687v2dfzvrKl5aU2ZuyYxMtV/ZcQ0T7ZtHGTVVWus4pVFVaxek3iRWuje/Hr1r2b9emTbwWFfa2gX1/r3iP1fKFCCJHLbNm8xebMnmNLS8ts9KgdbfAg/b51JPhN85+dJkx060FqZk1PrgnRdqA9Y6PCmI4AgC0rLAR46ONjnG8OLw9EA86NoR8RLVUagmSS9tYim3xRzni0uX50aA6vXCGbfPljgLqKMyg/WBYINhwXJQaFCbaNXC3DOCAIMjUP3nHYoyVatSy0m5rd9kn+tY2un8xKrjUe7oumwLdxvBIbolWfksTDJBQfggiiCTd5FNz4XuUNwkMEESYM2/wDJg4///nPnfCC2h9ecMWNEquCZJq+huBB2pgb3D/wwpBHlsbAAx5FntCFxFZlvi1GG+ChRphDXECFEEIIIXIRhKl+hQU2aGiJDR46yPoVFbhtCFmrVq620sVltnRJuROzajY1vxAvhBBCCCHS4wUHIgkRKi+d8MB3zRWSDGMraSDCUBzxAzJJe2uRTb7Yj/05LleFlmzy5Y9hiRtBKlgW1HUcsQqCbSNXy7AhsD0jWJEXwnNKrBJNRas+Kbn58QhCACE0IOJQEG74XXbZxbmZBif08+A6iZsm+7AvNzoT5hGTM45QhNfQoEGDnPslcVgzJdP0NQQCEN5euNDiSpkpuLXirkpcU9wzw+CaSl4R4FD8M4UYq8SzxV0YSCOTMOIZhxs18VCJvyqEEEIIkbMk3iF79Oxh/YuLbMiwwVYyuNj69E28yHbpbBvWb6gNE7iw1MqWLrPKtVWRg4CEEEIIIYQQoiPDHF7Yiol6EhXKUIhsaXVpnzigP/rRj9zcS4T3CYIgMnnyZLd96tSp9UJOsY7LIaIQsUHZF0X6sMMOc14/4f0RpJ5//vnkX7UgWB1xxBH24osv2nPPPefcMT2sE7IQgSa4PUim6QuCAh08L95cnAMBLRwqEDCWpEqHB1WeY6Pyw/kffPBBJ4YRnjEbELzOPPNMu+WWW+rlFSUdFR1RDjdWIYQQQohcB4GK+ayY12oo81uVDLBevfNc/6lyTaWVl5Y74WpZ2Qo331WqSABCCCGEEEII0dEYPHiwi5zGHGBxPdKEiEOXa6+99rrkerOBx9Mdd9xhhx56qBN4wowYMcKFscNDBy8hJpljMjhgfgrCzP3pT39yyi2CCF48eGT99re/dTfGhRdeWCeUIMgwGeOtt95atz+xEf/93//dCUhACDvOi9DCRIYIToS0QzRjf+ZtuvPOO+3HP/6x+545pVK5j2aavk8++cQeffRRe/XVV23VqlVO6EG8+p//+R+766673JxU55xzTt2NjnFk+vTp9vLLL7v5Wyin4uJidz5/rmB+8DBDWPrzn/9sGzdurHPP/OUvf2mPP/64C9vHnGE+P8xHxffBMgcEKebGQugjBikeWVyXiQBvvvlmt520z5s3z6WbOa3YD0HL51UI0XFoCUNuc4V2EG0PvKjxbGZi3GwnI0aUWLV6lVVWVVpR/6LEb2yf5Deio0GfCI+rvF55bu4qhKzNm7fYxk2brHp9ta1ft8E2Vm90z7muXbu4/g99LiGEyEX4feN3srKyygoLi6xPvn7fOiqd/nxLcm0bWy67NLkmhBBCNB7s13FDLoqmh/LfcuPNyb+20fnKy5JrjSfotNIYvNaB/tIQOdGiSPAll1wS6VmEUHLdddfZL37xC3vqqafs5JNPdsuzzz5rN9xwgwtHFwxvh5cR4sxZZ53lRCf2veqqq5zohKgUZuDAgU7cufzyy+2+++5z+5944ol2991323/913/ZlVdeWVegUWSaPs/vf/97J/5wrTPOOMMdi0B27bXX1jPKEuOWsIlsQ2y6/vrrnWiVigEDBrjrfvvb33b59ef/4osvnND0ve99L+uYoqTlP//zP+2aa65xAiTnZvnLX/7iyu9f//VfI/MqhBBCCJHrdO/ezYr6F9qQoYNs8NASKyzq5+a3YgDQyhWr3PxWLKtXViS2xZ8rVQghhBBCCCGEEPHoVFVVlT7OXA6BoldZWenW8TZqSMFlX4wMhKoLh+SLgn05hvPGOX+YOOlDFMOLCu8lBDrEJxaEnnRij09bQ/sF8ccguCHkNeVo4GBeKd90op4Qov3TVCMu0sFzVQiYPXu2847Gu5h42dmAt8zX876ypeWlNmbsGBs6dEjyGyFq2wfzWVWsWmMVq9fYuqr17jlH365nXk8rKOxrBf36Wq9eeda1m/pAQojcYcvmLTZn9hxbWlpmo0ftaIMH6fetI+GnBeCz04SJbj1IzazpyTUhhBBCtHWYHqlmt32Sf22j6yezkmuNZ8OGDcm1xkFagUh4DdGmfPYQRQj9wxJHTEJIYZ6qOGIVsB/7xz1/mEzTB4hPXLMhEcqnLa5YBf4YjLxNHbommFeJVUIIIYRoT9CP69W7lxUPGlA7v9XgYuud3zvRnzJbV7XOypcus8ULllhZ4rNybZULwSyEEEIIIYQQQojG0aYEKyGEEEIIIVoKBuX06ZtvJYOLbeiIwVZcMsDNdbV1y1Zbu6bSykvLbfHCUlu2dLlVVa1zc18JIYQQQgghhBAiOyRYCSGEEEIIkYZu3bpZv8ICGzSkxIYMG2RFxYXWo2cP21RTYxWrKqx0SZktWVhqy8uXu/CBhBQUQgghhBBCCCFEZkiwamFOOeUUW7hwoe2zz/bxJYUQQgghRO7SvUd3KxpQaEOGDrLBQ0ussKifdevezTZt3GSrVqy20sVltmQRwtUKW79ug4QrIYQQQgghhBAiAyRYtTB+zqq482oJIYQQQojcgXlBe+b1tAED+9uQ4YOd11VBYV/r1q2rbazeWE+4WrFspW1Yv6FuEnwhhBBCCNH0VFdX21133WU33XSTrV27NrlVwBtvvGHXX3+9ffHFF8kt2UOfdt26da6MWTZs2JD8pmWpqampSwPpidPXZiBZVVWVO6aysrJZB5Zxbq7h00h6G6Ily7Y1rxWnLKAl6yvYnuJeK5g+Fp5BounolChcvUELIYRoFHE7HY2hb9++yTXR0Zk9e7Z99tlnNnz4cNthhx2SWzODDubX876ypeWlNmbsGBs6dEjyGyEyY/Pmzc6bak1F4mUlsTCXVc2mGids9ejR3foU5Fvfgr6W36e389BiuxBCNBdbNm+xObPn2NLSMhs9akcbPEi/bx0Jb7Tls9OEiW49SM2s6ck1IVoXjML33nuvbdy40c477zwrLCxMflOfr776yh555BHX5z/ttNOsS5cuyW/qg7H4wQcftDVr1tiFF15offr0SX7TtuC9mnwsWbLEzjzzTBsxYkTym/rELT9AsHr99dft1FNPtZ122im5NTN4psybN8+mTZtmK1euTG6tHchVUlJiJ554ovXv3z+5NTWc5/nnn7f333/f1VGmdYWw8swzz9icOXPqiQq9e/e2o48+2saOHbtdX5v9Zs2a5cohKCrQliZMmGCHHnqom7cWfDtavHix+7shhg4d6uqpR48e7u9MruXJtmxpA4i0FRUVyS3bE05fU9Tj8uXL7c0337S5c+e6+ghfIwjt+Kmnnqp3rXRlAS1ZXxz/8ssv28cff+ze6Tx8f8ABB9j+++9vnTvX9/WhDLFH0I4RrDzsN2bMGDvuuOOsZ8+eya3boM0+/PDD7vhUTJ482Q466KDkX/HgWjW7bR/Fresns5JrjaepBE1fLtz/DSEPKyGEEEIIIbKElyfEqJJBxTYUj6vBA61vQR+3fcOGalu+bKWb36p08VJbtWJV4sVoY9oXFSGEEEKI9g4Cw7Bhw5zRHUNuKjCiFxQUOIP0ihUrkltTg/jRliMaYYjfcccdnXD16aefpuwzxi0/Dwb4xoh4n3/+uU2dOtVWrVplQ4YMcUb1vfbay9XN0qVL7b777rNly5Yl904NU6R88sknyb8yA6M5Bv8vv/zS1THiBekoLi52HjyPP/64S2cQyu+tt95yosSmTZtc2R5yyCHuExBGnnvuuTrxC+GmV69erqzSLV4wQdzx7S3qWocffrjtvPPO7rxcC5EjKIxAtmXL9YKiXRwaU4+0SYSu22+/3Q0eRSzNz8935RUWCYF7FjEJsYpy2n333Z2g48siWO6elqwv2hNl8cEHH7j5ikkf1xo9erTL62uvvWYvvvjidvcgZUhbo81Rhocddphri5yXtkkbDQptHs4ZPpdIjTyshBBCNBp+fJsbeVgJjzysRC7D89B5XK1e47yu1q9bn9i22Y2669GzhxOz+vbrk3jB6+3mvxJCiKZEHlYdG28M41MeViLXWbRokT3wwAM2YMAAO+ussyK9EuCVV16xGTNmOI8HvCui8J4WkMrbo62AmID3FJx77rkpvafilh+eKu+8846dffbZNnjw4OTW+Pj0YKA/5phjnGHfCxS8Uz355JPu3WyPPfawY489NlK8gPXr19v9999vZWVl7m+EhEw8rMjDSy+95MqD/Pbr189tJw3Tp093Xj8IEnicIWJAeXm5SzvixwknnGC77LKL2w6IZwgW9N2nTJnihIo4IHRQ7ggxwTINllP4Wog3Dz30kBOrSDtiIzSmbEtLS115Ug7nnHNOyvr3NOZafI9nG55I3FsHH3ywOz6VOBz0fGI/vI68p5IvC+oEjy4EPU9L1pd/riA68cwIlp8X2ygD7sGBAwe67f5ciHuTJk2yAw88sK6cVq9e7b7j8/jjj3f5DuI9Hffbbz8nZDYVpFseVkIIIYQQQoiUMIKvT998Kxk80IaOGGIDBxU7DyxeZhCvlpUvr/W4WlJmq1dW2KaNm5JHCiGEEEJ0HPCMwRBMiDGWVIwbN84ZyRcsWNBkhtNcBgHCe09hOE9F3PJrLHi2kRaEsXDIPUSI3XbbzUUWQIiK8iwBRPR3333X7UPeMhUUOZ7wcsD1vFgFpAFxAG8f0hkMkYdIQZsZNGjQdgIHQgVpQURCgIgLHm3sP3LkyDohAxBUmMuIsHOUUxCuRTtGiGHwpacxZcu5SDuikReD0tGYaxH+DzELwQFxZ++9904pVgHnYGHQMeJWMH2UD0IPaf/www/rDX5uqfrCO8y3JwS6sNiHZyfCFmkJXgtBDQ80RFOOC5YhbRJPK9oq88WRziC+TPPy8tynSE+HEqxoNOkWIYQQQnQM6FzyT30A0Vx07dbVeVOVDBloQ4fXCle983u7dldVuc6WLV1mixcusaVLyqxi1Rr30imEEI2l/u/aNkOKEELkGogW3oiP50aqPjnCDAZkjMWpBBwM7Ri4d9111zoxhPOxP14of/jDH+zXv/613Xzzzc6zIpWwgicJRvS//e1vbv8//elPzvOEubHee+89Nx8Pni0eDNqESWNhff78+XbnnXfab37zG/v973/vrh0OsYaBHm8gfy6EnD//+c/229/+1r7++mv3nkI+MPJTLkGDfpC45YeRHkEn6KmFmIBwguG+ITjupJNOct5thE4LgwGeAVt47qTqzyIOzJw503lAMS9QppBOxBbgHGFIA4IV+wXnFUIAAby4wiIZbYa2BXgfxYG6oKypm/Hjx7tzeBCsAFHFh6DzUKcILkB78HXamLLFY43zEB4ynXjkyfZaXAPvNu4NPIMQnBrC55Hy9d5uQYiUgkiEiEY+PC1VX/xNOzz55JNt1KhRblsQysGLWL7dAe3Y54tyD8NzimPxsgo/YxAzIXgfitS0a8HKd9b90hCZ7i+EEEKItgkvDV26drGtW7ZazabmD2kpOi68EBYU9rVBCFcjBlvxoAHWq3cvo6eJcFW+dLkTrsqWlLswgmqPQojGsKmmxi0YTFiEECKXYU4bjNPz5s2rZxgOwrMMwQWDeap5ndgHrw3m4wH2IdzXPffc486NAR4DNN43bL/jjjucUTkIhugnnnjChT7DkO69J7jmbbfd5ua0wfiNeOXhvMxbw7w2L7zwghOovFEbAYtrk4aglwaeFwhTnOvZZ591Yhfn5FxeKEAUQGhCWEo1pxDEKT/2OfLII+sM8Bj7Ca3GXDsIZw2BQERoNkKxBwUaD2lHKMKbJko4oRxeffVVVybM9xNl6G8IxAs8g8B7xgRB9CD/iC7Mx+TBU4c0k2fSEYR68GXLfnFAkEQEZX+EKQ9580JZqqkMENRIC2XlvW8aU7ZetPEhFRFISAP3SRTZXovr4MGH0IK4w72FqIUAQ76j8GIN70FR16IN8B3XC7bblqovnhfMi0V5+PILQvrJH8+AoEDqvfcoI/98CEL7o+yCdQz8Td1wXfbxZRjOo9hGuxSsqPjgD5j/O+7iCf8thBBCiPZDj+49XKeRFxw6kUI0J8xX1a+wwAYNKXHC1cASL1xttcq1VVbmPK5Kray03M19leoFUAgh0sFvGkv3xG9cjxgjroUQojXB8EvoLYzDGJdTgYCDwZ95m8JCUxQYqRFjMIqffvrp9oMf/MCuvPJKu+yyy5ynCwZxhKJgf+uDDz5wobwQR0455RS7+uqr3TFXXHGFM3anMy5jjEa4Ouqoo+xHP/qRXXPNNXbppZc6kYXjmLMlyr6IEIAYx76XX365M6ID4tKIESOc4ZzzpiJu+QXBoM6CwZ3jGwMeMYhRQIi0sFcMkHfqDa+xbOcfBsQF6vOjjz6q82YC6pD5gRA+EFSKioqS35grG+oA77xZs2bViTnUBSIjQh+h3BD1GgIBgmtzjj333LNeXvnOi41RZQDeg4m6ivPu2VDZ+rZLWeAJ+Lvf/c594t2HIBkUVhsi3bUQbxFXEKwQWm+88Ub74x//aDfddJPdcMMN7lphsdSHAKRMgsJNQ7RUfaWD/fEGRBhFNOY+9HghLtW5uG+9KBksE9LvywHhmzqiDPHCpN54Vundrz7tSrCiAfgfAL/uFxqcX2gkwSX4Xfi44LmEEEII0X7o3Tvf8nrmuc48Lw5CtATdu3ezwqJ+NmhoiQ0dPtiKByJc5Tlvv7VrKq2s1AtXy9zfNTXxX/KEEB0b3m0rVlfYuqp1ls9vXN72YXiEECKXwLhLqK6Gwt9hpEaMoM/OnDQNgUCCsRyhieO8NwQCzSGHHOKEA4ziPhwZBnkvKh100EG288471xnd8QY5/vjj681XFIbzH3300c7Dyx+HZ8a+++7r1jH6R4kUfH/ccce5ffH0IF0eBBoM4ITuCwsCnrjlF4T8XHLJJfb973+/ziMtLoiFzz33nAtnePfddzvPM7xOJk6c6OZACkMZY/yn/vCAi/K2iQth5PAUI4/33XefC9uIRxsCyieffOKEBb4PXgOR6IQTTnBiy/Tp053I8uCDD9pf/vIXlweEB74PemWlgvCNzOXEuRojvKUi07L14fPw3kNIof2QX2zb3COUUSpxN5Nr+euQdzwC6WswBxYhOGn3XIsyDYZi5F6hHqj/KOGM+84LfEFaq758uM/HHnvMXYtrcxzXIk2NhXufZxdtFzEdwdjf79QdIhb1Qd2JWtqFYBUlLrFQ0UFhiobBkm7dL2HxKnhuIYQQQrR9EKsKCvpZ9YZqW75suVzyRYvCi0q/ogIbPLTEhiBcOY+r2pfMtRVrnafV4gWlVr50mfPA2izhSgjRAJVrK23F8uXWpUtXZ8xhJLoQQuQ6eE95rwpvHA+DYRwPHQy8X331lbPhpcPPm8P5EKOCIGz88Ic/dB5NPhwYBnxEIby4orw3ML6ne6bSr/Mh64Iw1w1Gdh9uLQweJV5MC4OIRdkgJBAaMBVxyi8MAhdpzhSEhs8++8yJY4iC2E+Ztyco8HmoIz9fGCIgolVjoJyoO8K70V9GBMTjhnc46gahJSpPCA+IK9QhogpeQtQH9l22+3mR0sG+5BmRhXZIO2lqMilbIO14CxJmEW9A2vNVV11lF154oWvXeBG+/PLL7jxhMrmWH9hJGUyYMMF5HE6ZMsXOPPNMJ3xSvl6Y9JAuRCuOxXsoKMRwnyHOpHr3bo36wkuN/fHiIs08Z2hPpKUpoF3utNNOrlzOP/98+973vufqi3pjTjHyiuhK+FFRS5drr732uuR6m4RG6GE9uHBDsHgBKrweXILH+XOFCf6IpPpBEUKIjgjP0eYmrgu3aP/wIkb4DIxxjXnxoWPYpXMX9xLLS2rnzp2sV16veiMbhWhO6E8yl1rPvDzL651nPXv2cH9vSc6txovc+nXrbcP6DVazuca9QHbp0jnypVUI0bGpqqyyhQsX2do1a614wEAbWFw78bfouHT68y3JtW1suezS5JoQuQPPKkQZQtrxzpfKG4LvECgwjo8cOTJtODsM1JwPUYOwYBjv6fsjZEU9Gwn/hcEY4QejfHgfbIkYkzFmY9T34hQi1Icffui+x8DtBTAPxnnOy7V9qLVU5wpDf4/3bDysEH/waonqA8Ytv6YA7yw8uvAM8/OKUSeUAcb9YF7INyIGhnoEK29HjSqTOFBH3mvogAMOcN4v+++/v2sLiC6ck/LBq85fi740c3UhzrAfoR5JC3mg/Am3iMcLZZvuN5O5kxDf8LY5/PDDt/O6iVOnDeU7k7IFBCHOg2AZtFHTBgmLSN54zyXMJOcOksm1yBfv3oiFJ554Yr1yohzIB15WiGDkHfGQfRBpEJcRWwm1iScYohAiGvsC9RW8b1qqvsJwrb333tv2228/J4hyPOIVbQ4B21+LfPiywOMvTKrnAcfj6Ul98dzy9cUn9YcgRzkhsHG/ZPKux7m33Hhz8q9tdL7ysuRa42logEBcfDkG5/RLRZt+2w2KS9xcfqFhUJgsVDYLjQZVn8W9/CduDhbW/Xb28fv74zlX8NzpBC0hhBBCtC3oRA4qGeSEq0ULF7vRVXQY+f0XoqXgnaVHj+5W2L9f0uNqkA0YWGR5vXom2uIWq1i9xpYuweNqiZUvXW5VletsS2K7EELw7rpi+QqbO3ee+yzoU2CDBg6KbQAUQohcwIe/w/Ad9ojy8D0GcZ57GP7TgUH+vPPOc3PXYNtDtCK0GHPG/P3vf3fiTkMD1XMBxCcEBASZdN5TccqvKcCQjhjIOxSCCeEMjznmGPfuxDxSXoggrYQ5ox4mTZqUkQE+CuqQMG3kjbB1Bx98sBu4SDoQZM4++2wnBMyYMaPe/Fa0kwULFjjPFsQPxAiOwUsHLyHaE/u/9dZbKe28bEe0wX6M6NBYT7FUxC3bOHivO45BzAyTzbUQaaJEIq5FPeMNxXu0h7I9+eSTXbtEOEason3iOUjZIx4jagW9n1qrvkgj12HBIwsvKDzOSAviWXPCM8d7jyKsk26RKJdEg2qTyotvmHyyBEUlv3CjedGJxW/zxwANgwWFmxuWTxYait8WXvwx/nghhOjo8Kxtbho7IaxoPzDKkI4jo5qaYgQhL73LVyy3JUsXW3X1Buud39t1bPlkvqHOneTNIlqWRE/VNlZvtMq169xcNNUbNro+bGKzdUu0yd75vVz77Nmzu/PIUn9UiI4FzwhEawZdrl1baatWrkysb7Siwv42bMgwy8/vo+dCByVoJ+k0YaJbD1Iza3pyTYjcgvfJqVOnOmP0aaed5kSIKPB8wMsGA/O5555bz9idCmyBjOjHO4L3CDx0eEYipDCvEut89+ijjzrjO6HOwqI/z1sEL7w7Tj31VOcFAXh93HnnnW4APKIJIf6CMI8O8yxhmPeh2lKdKxXMG/TBBx84TxE8QKKIW37NQbgMEECeeeYZJz5gWw17t1AfCE+UO6IFn3hK7bPPPsk9tsfXOzZZhMioUG2+nBApjz322LoywXMIQQbvljCEm8Ojh3c/zutDSQZBRLj33nvdOyNtjvyFoZ/+yCOPOI+iVNdCrOFaiDFRbSyKhtpXKjJtY5DqWi+99JK98847zmMID6swDaWR+kYA4xPvK+5dhCDShzfc6aef7tpJS9ZXHF5//XUn3iGSIZ6BLwvuQ+7HMDxnuN/Jp7/f4xD1nIgL5Vmz2/b3TtdPZiXXGk9TiWikFZgvsCHapGAV7ITR4PkMClIsNEwau/9E7aUh86D07ong9+Hm4YGJIsx3fh8+vYjFg5FPHqZeuAL/KYQQHRWepc2NBCvhaWrBCug7rFm7xpYtL090clfaxk0bnTAgwUq0JvR4N9dsceEBt27Zal06d63rgxIasCvtM9E8N29J9H8TS6JTXHugEKJdw52+JfG7hUhFCFHmZOxf1N8GDixxoW1Fx0WClWjL4IHx9NNPu3BfeGZgfwtDn/3xxx937wPHH3+8C2eWCdwbGEtffPFFZyPEoI344Q3ohByPMoS3pmCFd9UDDzzgPGbOOuusOqNvmDjllw0ILYRiI2977bVXcus2fBlgV0WIwTPF5y8ukydPdqHfUhHHoI+4gMjgBYY45ZzJeceNG5e2XL1glkrMIFQcQh5iIqIi58m0bPFy8ttpFwi2wRCIHvJOmyGknc97tteaNWuWTZs2zb13e3EpCALRPffc42zy55xzToNzTHEPUlaUR7DeW7K+EGDw2ON5glga5YXlzxOsL18WwW1B/HMELzLKwt+r5AnvM8o+6lrUE/UlwWobbc4CE+yABcUqFgym/EhQkNxgLFQyDYkbmBieCFbBm4t1tvEd+7Avx/jjORfn5Nz+OsFrg/8UQgghRNuEzmZhv0IbOXwHGz1qjA0bOtz65hdY187drJN10aKlVZbOiaVb126ur0r/tE+ffLdOeyVUYPX6aqtau84tG9ZVW82mLYmOaefIc7HwHfuwRH2vRYuWtrHwbOjeraf1LxpgI4aNSPxu7WhDhwyTWCWEaNP48HcYb4OhxYLQB2I+Gwbw4BWFjS4Mhu+77rrLrr/+ejcPTRAM+8xJgyDl7YfAddmG9xVG8Shay/ZHWDQM3XgZMX9XKuKUXzYwZw9iGOUdNVCVbZQNxnb6qXgOXXDBBXbNNddELhdddJHbh77t5Zdf7ralE6sAQzcOBdQZc0GF4fqEnQNv7Mfe6w3k/rswlBPnpO45fxiuRXg53+7CAkUQP5cUQlLYwE87xTsIqEt/nkzL1oO49NxzzznhB8eLMIQBJCwj+cLeDdlei0GilCPeQ1FhKdnm7e++7NNBOZAGxDbERU9L1hd5RcAjVGiqa/EcAdLpz4MYy3W5D6Pusblz57pzU+ZBDzq2I7SnCmWIoMX1ELqCZd+RaVMeVr5S+UwlVrFQyTQoGlJY+Y0L52PCMxo7jYwbloXz0VBZeBDJ00oIIWqfmc2NPKyEpzk8rMLQz6Bdb6rZ5NaFyAXwsqI90telj0p0APq+rk/apbP16N7DveTk98l3L1P0Uz30m3mh5aWMyAO8EKnvKkTbpFPiX+fOndz7aZcuXXUvizqCNhN5WIm2Bu3We16kC39HH4iQX/SDUoX8euGFF+zdd9+tCznmDeGA8ZjwbWzzHlZc+/nnn3cj//kbTybvCcF3b7/9tvO2wP7Y0h5WQBgywpERJo1wd1HP/bjlB9g7MbiPHDnSpS0dGOd9iDVCtTHfjr8+/VK8hhBCmC+IeYYassOm85LhfAg+QN35vizvZYSCo+7wICM0XTDdhOJ74okn3PHUHccCHjF402EjPuOMM+q1FdoR5yQ9BxxwgB166KHJb7bhj+e9E6+jdHlDJCJsIZ9HH320C03oy4lQjYS74+9gm822bH0bQpxE7CO0ZbCsnnrqKSfWBo/L9lq0eR/ikXLgO38/IfDiGYSXVUNecohatOOZM2e6tnrCCSe4udeCtFR9Be+VqGcE9+ZDDz3kyioYYjN47+6777522GGH1ZU771h8RzrDYTl9m6e8KT/S5/HHcT8eccQRdaExG/KI85BuhQRsRWhM/pOFmyksVtFwKETcD3GVbQpQoBnFQKF64YoG70UrL1j5m9x/CiFER0KClWhJWkKwEiKXoS9MnxcjCS9FLLxQ0Q+lv8pLHi//fPrRh4hVjIzkZQixipefhgwUQggh2hZBu4kEK9EWiRv+7pVXXrEZM2akNFwHDekM1OG9AVsef2M85h4JzmEVPob+FCHR+ETc8V4Y2CJbQ7AiTYgN4EW2KOKUnz8XaU9VfkEoqzfffNOFUAPOjYMAZYFgQrnh8YLRn/mZGiKqTDx+jiLOjWEfbzgP10L0QahMVad77723ExG8Rwz9ZeYmmz9/vtuGQEdaqQPCt/GJBxvXCqYDOJaypP8cN/wk76iIRaSftoCnDenl+mwLt7nGlK0XVUgn4irfcxziGP1+6h7RB88vaMy1ou4n7PG+DPk7KGR5uHcQEkkP6QTq7KijjnIeUGEbekvWV6r7PVhfnAOBODgIMFju/p0qmD6OQRAMHhMse/LMMdzD/lqUZbgMwyEuU8H+7VGw6nLttddel1xvM1DRNJygWEXhsVDpNJimghvDPwCBhpVq8d8LIURHg2dyc0PnQQgg7AADSogxHxUDWoj2Dv1NhCi8qej4s8423y/2oa0Rseg388k9g1jF37wAcqyeq0II0X7p9Odbkmvb2HLZpck1IXIT+iYYcBk4jqdHqkGL7EdYMfo9CD7Y7YLQP2I7hnKM5j6cHiINdr4jjzzSiRtBozLH4BWB+IGXDCIVx9DHOuSQQ1zfiuMxIGPsB66Plwb2yd122207IzqDivBMoe+FdxTpZl/CloXPlQ7ShiEeYQGRIcqrDOKUH+/uCCvYUPFwCYtsYcg/Xihcl7LhXYxy4RrknzLD0B4nHxBVJh76rNQr9cJ3wfRTtpQXQgPXjqpT5iPivB7aBcfwSdrpD3OMD23HNU466SR3fBg8lLzHHd5DcQZ6UQa8oyJq+HLCnsyxeB8hEAbbXGPKlrIZPXq0axe0VY4hf7wPIOogVnFeT2Ou5e8n8uLLPliGCETsE4a6ee+991yaEO/w+qO8SQfpCdOS9UV6uWd5RnANfy3y6NtT0HPNQ7lTvsEy9OnDqw4vqfDziLwiHNI2uIf9s4VrcX6Ow+MseC8gPCKCcVxQuA3DtbbceHPyr210vvKy5FrjaaoB6r5caLMN0SY8rHix9p88WFkoLB7yqJc8ZPnhwLOqocndsgX3X9wFMQiwUMg0Kh6ENLzgjRZ103k41jdufjxS/cgIIURboql+wNIR1dkWHRN5WAlRH/rG9IUxAGBgYZ3nMn1VXtb4pM9M3xnYhnEirmFBCCFE2yBoO5GHlWirxAl/Rz/HeymFw2+FoZ+EJ0Nw0E46ux3Qb8KI7/dnPVOvqKaGsHeEMsSAnS7cWZzy83bVOCJMGGywCEtA2aRKR7Z420K68wbrFDtrlFgShn3pI9Mfpm9M2vlsDrK9VrZl69srxD0u22tRP+SNdoWwk2tlmA3ZPCPAl2EmZREnX+zz2GOPOfEWby3u5VTQ9hUSsJWgooAGxEKlcoNwM3JT0qioYFwFmxN+GIjnyQOdG5mFRsVC4/SNOU6j9mBsIz6lnwRPCCHaIr5T2ZxIsBIeCVZCREM/mRcgPKkY0ch61POZviuDphCtwi9IQggh2i7edsKnBCvRVsE4Om/ePCdE0NcPeswE8R4lRFxoyEuosWB7bG3Bij4d5YJNFPtnKpEmbvkJIXITPK/ihACF9ipY5fwbarDDxRIWrfjR4NPH5GxOjjnmGPeg53o+HT5dQcJ/pwMXP4QwjG9CCCGEEEJkC+ITceUJ9UHseV5uGGgVHFTl1xn45UdVCiGEEELkChg1CQuG11Q6sYUIS3FC2rUXGDRPaDDEslRiFcQtPyFEbkJ4Q0IVEuIynVjVnmlTQyqDohWikX/RpvLiui42Btz7Jk6cWCeW8enTlIlIFcVrr73WaNGKEDA//vGP7bzzzku7XH/99U7oy1WYJJLJKpmEUQghhBBCZAbCVX5+vgv5hxGHvjIGC/qrjLYlfjr75HJ/UAghhBBCCCE6GmgP3/3ud908ex2VNiFYBUUh713FgljFi3ZzzVsVBRPkcV0vVnkvK/Cf2YJo5SdqywYMEOPHj3eTy7EQapDJJTFQ+G0s48aNy/nwL/3793eGltaGyTMR+fgUQgghhGhLMNgK0YpJqv0IWzywmEuVMKsKByiEEEII0TB4qNOvok+F7U0IIZoLnjfYxH1kjI5ITs9hFRSCvFDlwwASPxH3OMKc4BLbktx9991uskOuzQ8VCy/8LMHGlE3DYj6Oo48+OvlX41i9erVdccUVtt9++9kPfvCD5FaRCUxWeckll9htt93mylEIEQ3P5uZGc1gJj+awEiIzGMBUWlrq+tSIVSz0q6ElohQIIYRoGYI2FM1hJYQQQrRv2uscVl2uvfba65LrOQ2CVVi0YmGEAxMstiQIZRjLGKnKgjAVXDzZCFZMks18XIx+bSw0qCeffNKd78ADD0xurYUJGO+66y4rKiqyTz75xJ544gk3+TZlSTm/++679thjj9mMGTNs7ty5NmzYsO1i5BKS8Y033nDHIuxQH4Sd8SN4PQhnjz76qL3yyivOwIhHXDrDc3l5ud1zzz1unfPh0fb444+7GJ78PW3aNHv++eftgw8+cGkmrA2sW7fOHUcbIQ8PP/ywTZ8+3RYsWOAMmn4UTPB8wZi+/ngm7kTJZp38sx91SajCsWPH1p2HyTb9NcgXeaL8sql3Ido63HPNTY8ePZJroqODNzITLPP8b+k+gBBtDfpFhI1eu3at68Nw39DP9IOthBBCtE86/fmW5No2tlx2aXJNCCGEEG0dBh9uufHm5F/b6HzlZcm1xtNUA9T9QMmlS5e6z3S0mZCA/pMlKFzl5eW571oSBCDSwOLT5AmuZwsCUXODKHPTTTfZD3/4Q7vqqquc6LRixQon2lx33XX2T//0T/b11187ce6vf/2rXXjhhc6rzIOx8Ec/+pH95Cc/sYULF7qF9WuuucYJVB4En9NOO83uvfded65HHnnEzjrrLLc9FZWVlW7+qvnz57u/qWeEMQS2Sy+91B566CH3HV5Pl19+eV15IaA988wz9tOf/tS+8Y1v2Ntvv+1ErV/+8pd25ZVXujyDPx9L8Kbzx3/00UdO7EOE43jgk+2IXUD6yQeCIPnik78RwpqiDQghhBBCNAX0b1gAwYoIAUIIIYQQQgghRC6S84KVN/57YYjFC1YsxI9taZhfKSxW+c+mII7S2FTsuuuuzvPp6aefdnNe4Vn1wgsv2O9//3u7/vrrnQB15513OmHQizEseBYhaP3jH/+wX/3qV2659dZb7dNPP3WiD+Ap9Zvf/MZOPfVUu++++9y5EJ0OO+ww+8tf/uJG+2YCHk2ENvzb3/7m0nbHHXc4A8zrr7+e3KOWkpISl+Y//elPdvPNN9uNN95oX3zxhUtz3HoaMWKES+MvfvEL9zef//M//+NGJTNC+ZZbbrETTjjBeWH5MjrzzDNd/rwwJoQQQgjR2jDYxgtWPpy1EEIIIYQQQgiRi7QZD6uoBdEoHKauJUC8CacF/GdjISxgSzFlypS6kHqAaIV4NXHitnjXfD9q1ChbsmSJ8zzCg+qll16yo446ykaPHp3cy1y4PLypCJ1HeEBiUiLenHjiiXWjeQnhiID18ccf13lQxWXSpEm211571YXcYxJxFsJCBdl7773d3AwejjnyyCOdxxTeW42FdheO30n+rr76aieQIWgKIYQQQuQCiFXeQ5z+ijyshBBCCCGEEELkKm0ucD2iEIKBX28tmlqkCuKNCi1BeO4CxDhG3uIl9fOf/9zOO+88++Y3v1nPi2nVqlXOe2rkyJH15mtiLqgrrrjChQpkrhnmxgLmwsLbyS/MPwWIWpnAtbKZHwrDzJ577unSTcjDxsJcVYT/w2OL8sHTi3CJXAdxLzyHlxBCCCFEa0A/lX4lIZDpn9DHUz9FCCGEEEIIIUSu0iYFq+Dn+vXr3WdL4q/ZXKJVa4ZqwSOK+Z4IbYe31fe//333984775zcIzMI+8d8TwhefkHI2nHHHZ2o1VJgnGGuqaZoL4hmJ598spuPi/CGfOI1xjZCKgohhBBCtDYM8GKwTmlpqQtnTP9F4QCFEEII0R5hQDR2LOZqp98jtsH87UyrwVQZQgjRFmhzgpX3sPGfvIi3ND4EXTgtTQUePK0F4gsh/5h76owzznChAffbbz8Xes+DJxGhGJlDLB35+fk2ZswYNxcUcz2Flz322CO5Z/NDmMLCwkLr169fckvjoM6HDx/uPMqmTp1qL774ou2+++72X//1X26uLSGEEEKI1oQwyAxEwrscIw79OwbvNPVAKyGEEEKITKGfwtzgzDmezq5HNJtf//rX9tBDDzVog2ovMJ0FAhNTcaQC7/l7773X2e4WLFiQ3CqEEO2DNilY+TB2rK9YscKttyQLFy5014amFqsgOP9SS0OnAaGJ0IAefggxcHiYowmPq7fffruexxLr11xzjV133XUu/Mwuu+xiX3/9tZuvKgidjPC8U00JaQ12ZPDyeu+992zcuHHWu3dvJ7ghXtEpIm8ejDl+UvJ04EU1YcIEe/XVV5NbzAYOHGjHHXecK79MQx0K0d75xje+EXsRQgjRNCBU0Qeir8pAI9+f6yjGHiGEEELkLthmhg0b5mwoc+bMSW7dnpKSEjf1AgOD49j/+vTp0+bn62T6DfpuiHWUTxRdu3Z1kYvo33366acNDkgiwhFlI4ToGLz//vuNXlqTNiFY8aIdtSBcNcWcRJnCj2k4LeA/G8uoUaOSay3Prrvuap9//rndeeedLoQMDfQnP/mJvfLKK8k9aue5Yg6nt956y/74xz+6/VhuvfVWt+3EE090IWcIKXjsscfaL37xC3vqqads5cqVztPpV7/6lX3nO99xwl9z8OCDD9pf//pXN6qY6/3+9793efLpIjwgc1oxagXvKPbjB/7//b//5/YLwo96r1697LPPPnMi24YNG1ynYP/993eu5oQ7ZMQyx3PdHXbYwQl6Qoht/P3vf0+upSfufkIIIRqGAUj0YzB0EBqHdbz4m6q/KoQQQgiRLfRHiFKDjQY7DLaWKOjPjB071n2PXaYh2kM/B5vSiBEj3CDrefPmJbduDxGNEKHmzp3r7FINoT6gEKKtkPOClX+g8ukXhCpEBxZ+tFpyHitGpjIHE2nw6QH/2VgIM4e3Tmtx1FFH2VVXXeXEp6OPPtouvfRSJ86ce+65tmTJkrpOxL777mu//OUvXSxc9mN54YUXnDsy3wHC1s9+9jMnFP3bv/2bHXLIIc4LiVEi//u//+vy2hwgkjHyhjRxvWnTprnr+3QBc0+df/759tvf/tYOP/xwu+iii5zXGPkPQsfo+OOPd+7Y7E8ZMLqH0H+k/7LLLrPJkyfb2Wef7TpaeJfxvRCiPg2JURKrhBCi6WC0LSIVC15W5eXlrq9KaGT6z0IIIYQQrU1xcbGzfzE4OF0UHqLlMPCG0HephK32BH01IhYBA+ZTecfTr/NeapqaQgjRnuhUVVWVs4HsvUsrnzygWQg1R8g1PKsQj3gRJ7wbnkEtwXPPPefiyPJjyYKrMa64/KAgYvlwhZCNiHXaaadZUVFR8q/Wg3KmfHHTTjdBN3XjXZQZ+ZIqz9Qd+3EuPJaaA0aUMKcUc2794Ac/cEImIf5IVyrjTJx9fB75Ppx2X060hWAYRSE6GsHwmumICvsXV6xqzfn9RG4xe/ZsN8KSgQN4tgoh6kPfhLDMjMqlr0M/hfAyjMSlzyOEEKJ9ErShdJow0a0HqZk1PbkmRG5A5BtsbMxxzuDjKJsS75pEtEGUwWZG1Jsw7MO5CKW31157uW2IPV9++aUTvBDGXnvtNdc3QvRC7MF2hJcX10QM43siA3Eu9j/44IOdp1NUmhDY3nzzzToRDVsR7yWTJk1K+d7KeYnOQzqxX5FWzn/ggQfWmzcesEExRxW2TwaQpxrYzoBw5qIfOnSonXnmmc4+GYZymD9/vksb1wSuv3TpUnf95rLRCSGaHxf6fbd9kn9t4+O7/pZcyx6mw4GmGijgnz9xwg22mTms+IFg8aIQD2EWBBBGjbbEKAte/gmNh3DhBSqfJp++xsCPYS6IVUC58gOeTqwC8owLMku6/FNeeB615A8hAhLXTCVEQZx9fB6j0u7LSWKVEPEIi1PyrBJCiKaHPjJ9E/ou3nCB8dIbMoUQQgghcgEf1g4hyQ+GDkNfBmFpy5YtKedrYh+EHy9WAbZC5lRnHvLbb7/dRUvCrseAaqLyPPvssy4iD5GD7r///rqoQghLrD/wwAPbzcnOtZkKg/MxgI5z0efivB999JHbHuXt5AWoZ555xoliDCbiWpzjjjvu2G56imAoxHRzfCFUIWaVlZW56S6ioIyPPPLIOmMx53z88cftsccec4PyyYMQQuQSOS1YBQUQ1v2CuMCPEQuCAX8z2rq54WHOg9yLZlyXTwimFcJ/NwRiFT9GQgjR3vEilcQqIYRoHjBEYAwhKgHGCUb6Mh+CBtgIIYQQIpegjzJ48GAXPQkvoFQgzCDiME95nPmagnBePLiuvvpqu+aaa+yHP/yhHXDAAe679957zwlWeFv57/kkihMC2dtvv11v7nw82KdPn+6iLZ1xxhluSg0i/fC50047uT4YnlqIXh7Wn376aSeC4R3G/t/73vdcZKCDDjrI2RlfffVVF8Y5CPti88SLivNGQT8PLyn6fHiTxQFbqhev0kUbEkKI1qJNeFgFxSovFLHw4Pah+RhJwESDzQU/OLNmzaonkvn0eHHKf2YC4YxwaZZY1XjoMDBn1fjx45NbhBC5isQqIYRoHjCKYPTBuMI6BomSkhLnUU4/VgghhBAiV8C2hg0H2xreTEGhJwiRbUaNGuX6OOk8jqIYPXq0m1MdmxHQH0Kw8mH2EIaC3/NJ+DzEHDyjgkIS3lN4sCOAcZy3A2KXZP53Phk0RDo9CGaEDmTwEDYrpt4A8oxgxXkQ4cL5GjRokBPz8BRLN0cV813R32MgfyovtSDkH7Ht+9///nbzuAshRC7QZkICAj8EXiTiAcuPCOIRD2b/cGa0RVMzc+ZMe/jhh921uC4/qP7Tp8n/SDUE5+BHarfddrOTTjrJjj766JwJA9jWodNw8cUX6wdXCCGEEB0WQtUwCpe+Kh5VGC5WrVrl5uwUQgghhMg18J5iDieEGcSeKLC54fVE/waPo1TCVhTY4bAjBmGbn9cTYSj8PdeJsvMhbF1++eV22GGHJbdsg/Nhp2Su86BHFOH+8KJCOPNilYfrErIPsGcGwx2SBvLMsdg7U4V2xsZIGSKsERowDlwXcU0IIXKRTlVVVTkfzN4/lHHHZeFhzY8TL964vTKClIWYsSx4KzFCoSngh5AfBn5UWBBFWHiw80PkhSse9v4HLq54JYQQ7YVMXhiyJdXktaLjwe8y8d7xUmZyYyHENugrE3KGhfX169c77yqMIXqOCiFE+8bbTvjsNGGiWw9SM2t6ck2I3IL54mfMmOE8nw499NDk1vogAjGv1PLly+2ss86yYcOGJb+JhlB/r7/+uu288852yimnJLdug2k/EJMmT57sPJ2C4CF15513Orvj2Wef7TydgtC/wiMKzyf6W4BQRchAbIP+GGyWDz74oNuPdxf6ZGEQmhYuXOhEpzPPPLOekMSgI+a+gnPPPdcKCwvdehi80wg7iD305JNPdnZKIUT7Bweemt32Sf61jY/v+ltyLXsmTJjgPlOFJM0U0grvv/+++0xHm/WwYmFEBAsPczLtRSVEJiZV5IchWziWc3Auf16uwbX8dX06fLqEEEIIIYRoTTCs0C+l38rAKkYNM7eB5q8SQgghRK7iw9ohAgXnjArC94hPCEOffPJJcmvLgjjFvFY33XSTE4gQiubNm+fC/iFKMcA+FYhS7B9e2J6KYChExLBUMIgPMQsvrVReakII0VZoE4KVF4OCYpX3agoKVixeXOIBPW3aNDcCOxPhin05hmM5R1CsYvGCVTANLME0CiGEEEII0RoQbaC0tNSWLl3qvKzoz9I/RbwSQgghhMhFmCqDQTbM5UQ/JhUIM0Q9QuSJM19TU4NQhjcYA4GYB+qHP/yhXXHFFS5M4EUXXeTsh6lg/ir2S7VMmTKlbh4tD324cePGOfsjUSZSRTYhHCEeXIh9CGhCCNGWaVMeVh4vXPHA5uWbBzpiEj8YLPx48bD2P2LPPfecvfXWW+7hzks7ohQu8iyss43v2Id9OSZ4Dn9erhEOAyiBSgghhBBC5Aq+jwr0Wf1AKyGEEEKIXIU+C/M14cH00UcfpfRUQtgiFCCh8lpamEEsYoA7tsRJkya5qUga6mPRL6MvBniG9enTJ+WC/THKxjhkyBAbOHBg3YCkVDBXPtcizGFThfASQojWoM28vfqHNp9+4cEfFK3wfgoKVjzw/ScjLwjvRwzbZ5991h599FG3sM42vmOf4DFBwYpzB8UqlmBafNqEEEIIIYRoLfygLkb4MtKWuasIEaN+qhBCCCFyGR/WDg/xNWvWJLfWhz7O+PHjXX/niy++SBuCr6nhWohOgI0wDGGZ/XxWHmyIJSUlbj2VhxQCWLp8MHjeh0LkHKnAQ415s5YtW2bl5eXJrUII0fZoU8Mtg8IQP058evGIHwEfGtCLTHwiPDHBtF+Y4JBP4sCyBLf5hWOC5/ChAMNilU+DT5MQQgghhBCtCQYPjDyMwiU8YEMjf4UQQgghcgEG2+A9xWBy5rJKBQIQdjzmjFqxYkVya/ODLdB7SyGWBcUn+l7MaUXfKwwCGwPiieY0ffr0eqIWYtUHH3zg5sRKJ0aNHDnS2Sb9YPsosFni9UW6Pv30U3fuVBB6EU+sVPOFCSFEa9Lm3mCDAlGUaBUMD8iPHYITn/w4eEEqKFAF19kneAzn4FxRnlUSq4QQQgghRK6B4YGJuTFmIF7RjxVCCCGEyHWwre2+++4NhrXDdjd27Fj3PSH6Wgrsgvvss4+zC5K+G2+80R5++GH7+9//bjfffLML10cegp5YQBjDI444wh03Y8YMu+WWW+yJJ56wp556ym6//XZ7/vnn3X7YIVPRv39/GzFiRIOhEPGsZxD+3LlznSgVBeX2+OOP22OPPeamRUnn3SWEEK1BmxxyGRSKEI5YvJjEDwg/bl608uJTcOHHLbiEv/feVZyDcwXFKn+9YBo8jF5ItwghhBBCCNEcMFoXr6ovv/zSGR4ICTNgwIDIkDVCCCGEELlIcXGxm69p+fLlbknFuHHjXB9nwYIFLTpf0+jRo+3kk092tkOui1cU4fdI8wUXXODmm8LDqaysLHlELYT0u+iii1zYvoqKCucB9fHHHzsPMUIhXnjhhe7YVGCP3GWXXdw63mepRCYiSXkvNTzQosDGib0TsIlybiGEyCU6zZw5U0qKEEKInIfRbEIAL4aMpmR+Hl7whBDmQtAwmhbDDUYMRvMSFoawOcEBVkIIIdovfqAsn50mTHTrQWpmTU+uCZG7vPPOO/bSSy/ZHnvsYccee2xkPwZR6MEHH3SizGmnneb6PC0J99j69etdn8vPqR+X6upqN98VMFgeASkOiFD33nuv86Y/99xznUgWBWEDH3nkERs6dKideeaZkednoBNeYBrYJETbBvG5ZrftbWUf3/W35Fr2TJgwwX021aAAL5S///777jMdncrKyiRYCSGEyHlSdchFx0OClRDbg2CFhxUjdTFoYADh/uDZGdcQIoQQom0jwUq0BzCOEvaOiEf0ZVJ5AC1btsx5YeFVhGd5RwCBjvmy6N8RJjAKxDzKDzHNz30lhGiftFfBSrMwCyGEEEII0cZBoCI8DSNlmaMV441GzQohhBCirYFRkxB6eE2lC1dH+EDC5HUUsQrwmiLPqcQqYKASc1nttNNOEquEEG0SCVZCCCGEEEK0cZhjlZA0GCkIncOE2whX8q4SQgghhBBCCNFWkGAlhBBCCCFEG4fwT8xFwMJoZC9eCSGEEEIIIYQQbQUJVkIIIYQQQrRxmKeACbyZRBuhinkfhBBCCCGEEEKItoQEKyGEEEIIIdo4iFV4VwHeVRKshBBCCCGEEEK0NSRYCSGEEEII0cZBsGIBxCpEKyGEEEIIIYQQoi0hwUoIIYQQQog2Dt5VCFadOnWSh5UQQgghhBBCiDZJp7Kysq3JdSGEECJnGThwYHJNdHRmz55tn332mQ0fPtx22GGH5FYhOi7MW1VaWmqJfr116dLFBg8erGemEEJ0QLZurTXv8NlpwkS3HqRm1vTkmhBCCCHaOj179rSa3fZJ/rWNrp/MSq41ng0bNiTXGgdphffff999pkOClRBCiDaBjK/CI8FKNBVbtmy16uqNtrZqXaIjvtE21dTUGfvaEjWJdK9atcrWrl3rvKsKCwutd+/eyW9zD7zAunTpbD179LA+vfMSLy/dndAmhBCicUiwEkII0ZQgVrz77rs2btw4GzBgQHJrfBp7vEiPBCshhBCiFZFgJTwSrERTsLZynS0uXWalZSts1eq1tm79BttUs7lNClaAl5UzUHbqVLfkMl27dLa8nj2sX0EfKxlYaCOGllhB3/ycT7cQQuQyEqxEWwajKCGOgYEseXl5WfcL6BetX7/efQLn6tq1q1uPiz+2c+fmmU2lurq6bv7RxuZXmG3evNnVVUNlGGwb7NurV68G65hnKsdwDSD0tje+5wrZ5AuC7TAqX0RwePDBB92599prLzv88MMjz/vGG2/YO++8Y2effbatWbPGnnnmGbfOvnGOF9khwUoIIYRoRSRYCY8EK9EYeIlbsXKNffHVAluwqMyqN262nnm9XQe6a9duMhS0AFsT/zbX1CRekDfYuqoq69J5qw0bUmzjdhxuJcVFiZflzAxKQgghapFgJdoiq1evtieeeMKFN/ZtGIqKiuyEE06wIUOGJLc0DF7nGM3ffvttZ4j3YCAfPXq0HXPMMZafn5/cuj30ExctWmRvvvmmS9f5559vffr0SX5bH4z8Dz30kC1cuDC5ZXs49sILL6x3jmXLltnTTz/thIBgfvGOP+yww2zXXXeN1R8tLy+3+++/39atW2eTJ0+2gw46yG0n3wgEixcvdn83xNChQ+3MM8+0efPm2aOPPprc2jCnnnqq7bTTTsm/tkEdfPrpp64eiABAmabat7Ky0u666y6rqKhIbtken74ePXokt2yDc/Nu+NZbbzmx5YwzzojcD9h31qxZTlgJtg3EwgkTJtihhx66nahJ/VAu06ZNs5UrVya31kYLKCkpsRNPPNH69++f3Jqer776yh555BEneqUqjzCU5cMPP2xz585NWQ7Z5Asyue8QLKZOnera1KRJk+zAAw/cro1yfTypzjnnHFdWXrAiVHmc40V2SLASQgghWhEJVsIjwUo0hvLlq+yDT+ZYadlK696jl/Ur7G+98/smXv56KixdC8LL9UYE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hBBCCCGEELmEBCshhBBCCCHaGcxXxcS2hATE06pXr15uffPmzVZVVeUm3xdCCCGEEEIIIXIJCVZCCCGEEEK0c/CwYgEEKxZCBAohhBBCCCGEELmCBCshhBBCCCHaOd26dXOCVffu3W3Tpk1OsNq4cWPyWyGEEEIIIYQQovXpVFZWpqGVQgghcp6BAwcm10RHZ/bs2fbZZ5/Z8OHDbYcddkhuFUI0BPNXLVmyxFavXu3CBQ4ZMsTNcSWEEKJ94D1n+WSuQj5ramqsurrahYLt37+/+74pKC0ttffeey/51zYYHLHrrru6azF3YktB/p588kmX31NOOcXy8vKS3wjRduHe9QOMunTp4to1YZ/bIzyz6KsSypow1rkEzxWeMYTYbsnnmhDtCd4/4f3333ef6ejy4x//+LrkuhBCCJGz+FBWQqxcudKWL19uBQUF1q9fv+RWIURDYOjAu2rdunXuxRtvK714CyFE+8SLVxiBmb+Q5z7P/KaCARCvvfaalZeX11sWL17sjFFfffWVDR06tMX68PQN33rrbC7RFwAAGtJJREFULedBPGbMGMvPz09+I9oqb7zxht1zzz22YsUK22mnnZJb60N7u/322+3VV191fw8bNqxdCDoLFy60Rx55xF588UV75513bObMmfb222/bBx984PI3ePDgdidc8dy477773ODEnXfe2UUHyAV4dj766KP23HPP1T1fWhJES8rlmWeeqRtwFmbt2rV22223ufuA5y7vyWG+/vpru/XWW+3DDz9091OuiYKi/YMYDUuXLnWf6dDbqRBCCCGEEB0AhCkMh4zOxZDJSzfilRBCCJEtGJavueYat/zoRz+ySy+91MaPH2/Lli1zYgOCQktQUlJiU6ZMcQvrov2Dl99jjz3mPF922203O/DAA9v8IBz6ZwhU999/v5WVlTlRYfTo0e4+69Onj+u7vfTSS07MIt9tjVmzZtlNN93kPsN4gQohrqXFOMr1zjvvdAvrQUgLg77Af7YktAEvUjFQwA9GCMLzlnQjri1atCi5tT6IBAxeKC4ubtLBC0I0BxKshBBCCCGE6CAgVrHwUsvo988//9xWrVqV/FYIIYTIHsQCQgEed9xxdvzxxzuv3hdeeMGF+WpuMCoTLpqlvXmeiO0hvPETTzzhPEsQc4466qh24TGOFwxeMnhGHnDAAXbFFVfYmWee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)" + ], + "metadata": { + "id": "6QnODkANmU2J" + } + }, + { + "cell_type": "markdown", + "source": [ + "Now we can run TensorBoard:" + ], + "metadata": { + "id": "OAhYMxgzWF1A" + } + }, + { + "cell_type": "code", + "source": [ + "%load_ext tensorboard\n", + "%tensorboard --logdir logs" + ], + "metadata": { + "id": "X6yk2kI6kSEf" + }, + "execution_count": null, + "outputs": [] + } + ] } diff --git a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_yolov8n.ipynb b/tutorials/notebooks/mct_features_notebooks/keras/example_keras_yolov8n.ipynb deleted file mode 100644 index c5232e7f2..000000000 --- a/tutorials/notebooks/mct_features_notebooks/keras/example_keras_yolov8n.ipynb +++ /dev/null @@ -1,400 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "4c261298-309f-41e8-9338-a5e205f09b05", - "metadata": {}, - "source": [ - "# Post Training Quantization a YoloV8-nano Object Detection Model\n", - "\n", - "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/keras/example_keras_yolov8n.ipynb)\n", - "\n", - "## Overview\n", - "\n", - "\n", - "In this tutorial, we'll demonstrate the post-training quantization using MCT for a pre-trained object detection model in Keras. Specifically, we'll integrate post-processing, including the non-maximum suppression (NMS) layer, into the model. This integration aligns with the imx500 target platform capabilities.\n", - "\n", - "In this example we will use an existing pre-trained YoloV8-nano model taken from [Ultralytics](https://github.com/ultralytics/ultralytics). We will convert the model to a Tensorflow model that includes box decoding and NMS layer. Further, we will quantize the model using MCT post training quantization and evaluate the performance of the floating point model and the quantized model on COCO dataset.\n", - "\n", - "\n", - "## Summary\n", - "\n", - "In this tutorial we will cover:\n", - "\n", - "1. Post-Training Quantization using MCT of Keras object detection model including the post-processing.\n", - "2. Data preparation - loading and preprocessing validation and representative datasets from COCO.\n", - "3. Accuracy evaluation of the floating-point and the quantized models." - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Setup\n", - "Install the relevant packages." - ], - "metadata": { - "collapsed": false - }, - "id": "d74f9c855ec54081" - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "TF_VER = '2.14.0'\n", - "\n", - "!pip install -q tensorflow=={TF_VER}\n", - "!pip install -q pycocotools\n", - "!pip install 'huggingface-hub<=0.21.4'\n" - ], - "metadata": { - "collapsed": false - }, - "id": "7c7fa04c9903736f" - }, - { - "cell_type": "markdown", - "source": [ - " Clone a copy of the [MCT](https://github.com/sony/model_optimization) (Model Compression Toolkit) into your current directory. This step ensures that you have access to [mct_model_garden](https://github.com/sony/model_optimization/tree/main/tutorials/mct_model_garden) folder which contains all the necessary utility functions for this tutorial.\n", - " **It's important to note that we use the most up-to-date MCT code available.**" - ], - "metadata": { - "collapsed": false - }, - "id": "57717bc8f59a0d85" - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "!git clone https://github.com/sony/model_optimization.git local_mct\n", - "!pip install -r ./local_mct/requirements.txt\n", - "import sys\n", - "sys.path.insert(0,\"./local_mct\")" - ], - "metadata": { - "collapsed": false - }, - "id": "9728247bc20d0600" - }, - { - "cell_type": "markdown", - "source": [ - "Finally, load COCO evaluation set" - ], - "metadata": { - "collapsed": false - }, - "id": "7a1038b9fd98bba2" - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "!wget -nc http://images.cocodataset.org/annotations/annotations_trainval2017.zip\n", - "!unzip -q -o annotations_trainval2017.zip -d ./coco\n", - "!echo Done loading annotations\n", - "!wget -nc http://images.cocodataset.org/zips/val2017.zip\n", - "!unzip -q -o val2017.zip -d ./coco\n", - "!echo Done loading val2017 images" - ], - "metadata": { - "collapsed": false - }, - "id": "8bea492d71b4060f" - }, - { - "cell_type": "markdown", - "id": "084c2b8b-3175-4d46-a18a-7c4d8b6fcb38", - "metadata": {}, - "source": [ - "## Floating Point Model\n", - "\n", - "### Load the pre-trained weights of Yolo8-nano\n", - "We begin by loading a pre-trained [YOLOv8n](https://huggingface.co/SSI-DNN/test_keras_yolov8n_640x640) model. This implementation is based on [Ultralytics](https://github.com/ultralytics/ultralytics) and includes a slightly modified version of yolov8 detection-head (mainly the box decoding part) that was adapted for model quantization. For further insights into the model's implementation details, please refer to [mct_model_garden](https://github.com/sony/model_optimization/tree/main/tutorials/mct_model_garden/models_keras/yolov8). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e8395b28-4732-4d18-b081-5d3bdf508691", - "metadata": {}, - "outputs": [], - "source": [ - "from huggingface_hub import from_pretrained_keras\n", - "\n", - "model = from_pretrained_keras('SSI-DNN/keras_yolov8n_640x640')" - ] - }, - { - "cell_type": "markdown", - "source": [ - "### Generate Yolo8-nano Keras model\n", - "In the following steps, we integrate a post-processing component to this base model, which includes tensorflow [combined_non_max_suppression](https://www.tensorflow.org/api_docs/python/tf/image/combined_non_max_suppression) layer." - ], - "metadata": { - "collapsed": false - }, - "id": "7f148e78b769f1dc" - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "from keras.models import Model\n", - "\n", - "# Parameter of Yolov8n\n", - "INPUT_RESOLUTION = 640\n", - "\n", - "# Add Tensorflow NMS layer\n", - "boxes, scores = model.output\n", - "outputs = tf.image.combined_non_max_suppression(\n", - " boxes,\n", - " scores,\n", - " max_output_size_per_class=300,\n", - " max_total_size=300,\n", - " iou_threshold=0.7,\n", - " score_threshold=0.001,\n", - " pad_per_class=False,\n", - " clip_boxes=False\n", - " )\n", - "\n", - "model = Model(model.input, outputs, name='yolov8n')\n", - "\n", - "print('Model is ready for evaluation')" - ], - "metadata": { - "collapsed": false - }, - "id": "698ce1d40f2cdf1f" - }, - { - "cell_type": "markdown", - "id": "3cde2f8e-0642-4374-a1f4-df2775fe7767", - "metadata": {}, - "source": [ - "#### Evaluate the floating point model\n", - "Next, we evaluate the floating point model by using `cocoeval` library alongside additional dataset utilities. We can verify the mAP accuracy aligns with that of the original model. \n", - "Note that we set the \"batch_size\" to 5 and the preprocessing according to [Ultralytics](https://github.com/ultralytics/ultralytics).\n", - "Please ensure that the dataset path has been set correctly before running this code cell." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from tutorials.mct_model_garden.evaluation_metrics.coco_evaluation import coco_dataset_generator, CocoEval\n", - "from tutorials.mct_model_garden.models_keras.yolov8.yolov8_preprocess import yolov8_preprocess\n", - "\n", - "EVAL_DATASET_FOLDER = './coco/val2017'\n", - "EVAL_DATASET_ANNOTATION_FILE = './coco/annotations/instances_val2017.json'\n", - "BATCH_SIZE = 5\n", - "\n", - "# Load COCO evaluation set\n", - "val_dataset = coco_dataset_generator(dataset_folder=EVAL_DATASET_FOLDER,\n", - " annotation_file=EVAL_DATASET_ANNOTATION_FILE,\n", - " preprocess=yolov8_preprocess,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "# Define resizing information to map between the model's output and the original image dimensions\n", - "output_resize = {'shape': (INPUT_RESOLUTION, INPUT_RESOLUTION), 'aspect_ratio_preservation': True}\n", - "\n", - "# Initialize the evaluation metric object\n", - "coco_metric = CocoEval(EVAL_DATASET_ANNOTATION_FILE, output_resize) \n", - "\n", - "# Iterate and the evaluation set\n", - "for batch_idx, (images, targets) in enumerate(val_dataset):\n", - " \n", - " # Run inference on the batch\n", - " outputs = model(images)\n", - "\n", - " # Add the model outputs to metric object (a dictionary of outputs after postprocess: boxes, scores & classes)\n", - " coco_metric.add_batch_detections(outputs, targets)\n", - " if (batch_idx + 1) % 100 == 0:\n", - " print(f'processed {(batch_idx + 1) * BATCH_SIZE} images')\n", - "\n", - "# Print float model mAP results\n", - "print(\"Float model mAP: {:.4f}\".format(coco_metric.result()[0]))" - ], - "metadata": { - "collapsed": false - }, - "id": "56393342-cecf-4f64-b9ca-2f515c765942" - }, - { - "cell_type": "markdown", - "id": "015e760b-6555-45b4-aaf9-500e974c1d86", - "metadata": {}, - "source": [ - "## Quantize Model\n", - "\n", - "### Post training quantization using Model Compression Toolkit \n", - "\n", - "Now, we're all set to use MCT's post-training quantization. To begin, we'll define a representative dataset and proceed with the model quantization. Please note that, for demonstration purposes, we'll use the evaluation dataset as our representative dataset. We'll calibrate the model using 100 representative images, divided into 20 iterations of 'batch_size' images each. \n", - "\n", - "Additionally, to further compress the model's memory footprint, we will employ the mixed-precision quantization technique. This method allows each layer to be quantized with different precision options: 2, 4, and 8 bits, aligning with the imx500 target platform capabilities.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "01e90967-594b-480f-b2e6-45e2c9ce9cee", - "metadata": {}, - "outputs": [], - "source": [ - "import model_compression_toolkit as mct\n", - "from typing import Iterator, Tuple, List\n", - "\n", - "REPRESENTATIVE_DATASET_FOLDER = './coco/val2017/'\n", - "REPRESENTATIVE_DATASET_ANNOTATION_FILE = './coco/annotations/instances_val2017.json'\n", - "n_iters = 20\n", - "\n", - "# Load representative dataset\n", - "representative_dataset = coco_dataset_generator(dataset_folder=REPRESENTATIVE_DATASET_FOLDER,\n", - " annotation_file=REPRESENTATIVE_DATASET_ANNOTATION_FILE,\n", - " preprocess=yolov8_preprocess,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "# Define representative dataset generator\n", - "def get_representative_dataset(n_iter: int, dataset_loader: Iterator[Tuple]):\n", - " \"\"\"\n", - " This function creates a representative dataset generator.\n", - " Args:\n", - " n_iter: number of iterations for MCT to calibrate on\n", - " Returns:\n", - " A representative dataset generator\n", - " \"\"\" \n", - " def representative_dataset() -> Iterator[List]:\n", - " \"\"\"\n", - " Creates a representative dataset generator from a PyTorch data loader, The generator yields numpy\n", - " arrays of batches of shape: [Batch, H, W ,C].\n", - " Returns:\n", - " A representative dataset generator\n", - " \"\"\"\n", - " ds_iter = iter(dataset_loader)\n", - " for _ in range(n_iter):\n", - " yield [next(ds_iter)[0]]\n", - "\n", - " return representative_dataset\n", - "\n", - "# Get representative dataset generator\n", - "representative_dataset_gen = get_representative_dataset(n_iters, representative_dataset)\n", - "\n", - "# Set IMX500-v1 TPC\n", - "tpc = mct.get_target_platform_capabilities(\"tensorflow\", 'imx500', target_platform_version='v1')\n", - "\n", - "# Specify the necessary configuration for mixed precision quantization. To keep the tutorial brief, we'll use a small set of images and omit the hessian metric for mixed precision calculations. It's important to be aware that this choice may impact the resulting accuracy. \n", - "mp_config = mct.core.MixedPrecisionQuantizationConfig(num_of_images=5, use_hessian_based_scores=False)\n", - "config = mct.core.CoreConfig(mixed_precision_config=mp_config,\n", - " quantization_config=mct.core.QuantizationConfig(shift_negative_activation_correction=True))\n", - "\n", - "# Define target Resource Utilization for mixed precision weights quantization (75% of 'standard' 8bits quantization)\n", - "resource_utilization_data = mct.core.keras_resource_utilization_data(model,\n", - " representative_dataset_gen,\n", - " config,\n", - " target_platform_capabilities=tpc)\n", - "resource_utilization = mct.core.ResourceUtilization(resource_utilization_data.weights_memory * 0.75)\n", - "\n", - "# Perform post training quantization\n", - "quant_model, _ = mct.ptq.keras_post_training_quantization(model,\n", - " representative_dataset_gen,\n", - " target_resource_utilization=resource_utilization,\n", - " core_config=config,\n", - " target_platform_capabilities=tpc)\n", - "print('Quantized model is ready')" - ] - }, - { - "cell_type": "markdown", - "id": "4fb6bffc-23d1-4852-8ec5-9007361c8eeb", - "metadata": {}, - "source": [ - "### Evaluate quantized model\n", - "Lastly, we can evaluate the performance of the quantized model. There is a slight decrease in performance that can be further mitigated by either expanding the representative dataset or employing MCT's advanced quantization methods, such as GPTQ (Gradient-Based/Enhanced Post Training Quantization)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8dc7b87c-a9f4-4568-885a-fe009c8f4e8f", - "metadata": {}, - "outputs": [], - "source": [ - "# Re-load COCO evaluation set\n", - "val_dataset = coco_dataset_generator(dataset_folder=EVAL_DATASET_FOLDER,\n", - " annotation_file=EVAL_DATASET_ANNOTATION_FILE,\n", - " preprocess=yolov8_preprocess,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "# Initialize the evaluation metric object\n", - "coco_metric = CocoEval(EVAL_DATASET_ANNOTATION_FILE, output_resize) \n", - "\n", - "# Iterate and the evaluation set\n", - "for batch_idx, (images, targets) in enumerate(val_dataset):\n", - " # Run inference on the batch\n", - " outputs = quant_model(images)\n", - "\n", - " # Add the model outputs to metric object (a dictionary of outputs after postprocess: boxes, scores & classes)\n", - " coco_metric.add_batch_detections(outputs, targets)\n", - " if (batch_idx + 1) % 100 == 0:\n", - " print(f'processed {(batch_idx + 1) * BATCH_SIZE} images')\n", - "\n", - "# Print quantized model mAP results\n", - "print(\"Quantized model mAP: {:.4f}\".format(coco_metric.result()[0]))" - ] - }, - { - "cell_type": "markdown", - "source": [ - "\\\n", - "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", - "\n", - "Licensed under the Apache License, Version 2.0 (the \"License\");\n", - "you may not use this file except in compliance with the License.\n", - "You may obtain a copy of the License at\n", - "\n", - " http://www.apache.org/licenses/LICENSE-2.0\n", - "\n", - "Unless required by applicable law or agreed to in writing, software\n", - "distributed under the License is distributed on an \"AS IS\" BASIS,\n", - "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - "See the License for the specific language governing permissions and\n", - "limitations under the License." - ], - "metadata": { - "collapsed": false - }, - "id": "99702811c4349d42" - } - ], - "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.9.7" - }, - "colab": { - "provenance": [] - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_mixed_precision_ptq.ipynb b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_mixed_precision_ptq.ipynb index 31569618b..b4ca8eca4 100644 --- a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_mixed_precision_ptq.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_mixed_precision_ptq.ipynb @@ -236,7 +236,7 @@ { "cell_type": "markdown", "source": [ - "To enable mixed-precision quantization, we define the desired compression ratio. In this example, we will configure the model to compress the weights to 75% of the size of the 8-bit model's weights. To achieve this, we will retrieve the model's resource utilization information, `resource_utilization_data`, specifically focusing on the weights' memory. Then, we will create a `ResourceUtilization` object to enforce the size constraint on the weight's memory, which applies only to the quantized layers and attributes (e.g., Conv2D kernels, but not biases)." + "To enable mixed-precision quantization, we define the desired compression ratio. In this example, we will configure the model to compress the weights to **75% of the size of the 8-bit model's weights**. To achieve this, we will retrieve the model's resource utilization information, `resource_utilization_data`, specifically focusing on the weights' memory. Then, we will create a `ResourceUtilization` object to enforce the size constraint on the weight's memory, which applies only to the quantized layers and attributes (e.g., Conv2D kernels, but not biases)." ], "metadata": { "collapsed": false @@ -255,8 +255,9 @@ " configuration,\n", " target_platform_capabilities=target_platform_cap)\n", "\n", + "weights_compression_ratio = 0.75 # About 0.75 of the model's weights memory size when quantized with 8 bits.\n", "# Create a ResourceUtilization object \n", - "resource_utilization = mct.core.ResourceUtilization(resource_utilization_data.weights_memory * 0.75)" + "resource_utilization = mct.core.ResourceUtilization(resource_utilization_data.weights_memory * weights_compression_ratio)" ], "metadata": { "collapsed": false @@ -266,6 +267,7 @@ { "cell_type": "markdown", "source": [ + "## Run Post-Training Quantization with Mixed Precision\n", "Now, we are ready to use MCT to quantize the model." ], "metadata": { @@ -426,11 +428,8 @@ "source": [ "## Conclusion\n", "\n", - "In this tutorial, we demonstrated how to quantize a classification model for MNIST in a hardware-friendly manner using MCT. We observed that a 4x compression ratio was achieved with minimal performance degradation.\n", - "\n", - "The key advantage of hardware-friendly quantization is that the model can run more efficiently in terms of runtime, power consumption, and memory usage on designated hardware.\n", - "\n", - "While this was a simple model and task, MCT can deliver competitive results across a wide range of tasks and network architectures. For more details, [check out the paper:](https://arxiv.org/abs/2109.09113).\n", + "In this tutorial, we demonstrated how to quantize a classification model using the mixed precision feature with MCT. \n", + "MCT can deliver competitive results across a wide range of tasks and network architectures. For more details, [check out the paper:](https://arxiv.org/abs/2109.09113).\n", "\n", "## Copyrights:\n", "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n", diff --git a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_post_training_quantization.ipynb b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_post_training_quantization.ipynb index 65b9a61a6..9d2757b55 100644 --- a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_post_training_quantization.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_post_training_quantization.ipynb @@ -380,7 +380,7 @@ "\n", "The key advantage of hardware-friendly quantization is that the model can run more efficiently in terms of runtime, power consumption, and memory usage on designated hardware.\n", "\n", - "While this was a simple model and task, MCT can deliver competitive results across a wide range of tasks and network architectures. For more details, [check out the paper:](https://arxiv.org/abs/2109.09113).\n", + "MCT can deliver competitive results across a wide range of tasks and network architectures. For more details, [check out the paper:](https://arxiv.org/abs/2109.09113).\n", "\n", "## Copyrights\n", "\n", diff --git a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_pruning_mnist.ipynb b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_pruning_mnist.ipynb index 3ed4c4e80..82525cd05 100644 --- a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_pruning_mnist.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_pruning_mnist.ipynb @@ -8,14 +8,14 @@ "[Run this tutorial in Google Colab](https://colab.research.google.com/github/sony/model_optimization/blob/main/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_pruning_mnist.ipynb)\n", "\n", "## Overview\n", - "This tutorial provides a step-by-step guide to training, pruning, and retraining a fully connected neural network model using PyTorch. We will start by building and training the model from scratch on the MNIST dataset, followed by applying structured pruning to reduce the model size.\n", + "This tutorial provides a step-by-step guide to training, pruning, and finetuning a PyTorch fully connected neural network model using the Model Compression Toolkit (MCT). We will start by building and training the model from scratch on the MNIST dataset, followed by applying structured pruning to reduce the model size.\n", "\n", "## Summary\n", "In this tutorial, we will cover:\n", "\n", "1. **Training a PyTorch model on MNIST:** We'll begin by constructing a basic fully connected neural network and training it on the MNIST dataset. \n", "2. **Applying structured pruning:** We'll introduce a pruning technique to reduce model size while maintaining performance. \n", - "3. **Retraining the pruned model:** After pruning, we'll retrain the model to recover any lost accuracy. \n", + "3. **Finetuning the pruned model:** After pruning, we'll finetune the model to recover any lost accuracy. \n", "4. **Evaluating the pruned model:** We'll evaluate the pruned model’s performance and compare it to the original model.\n", "\n", "## Setup\n", @@ -304,8 +304,16 @@ { "cell_type": "markdown", "source": [ - "## Pruning the Model\n", - "Next,we'll proceed with pruning our trained model to decrease its size, targeting a 50% reduction in the memory footprint of the model's weights. Given that the model's weights utilize the float32 data type, where each parameter occupies 4 bytes, we calculate the memory requirement by multiplying the total number of parameters by 4." + "## Model Pruning\n", + "We are now ready to perform the actual pruning using MCT’s `pytorch_pruning_experimental` function. The model will be pruned based on the defined resource utilization constraints and the previously generated representative dataset.\n", + "\n", + "Each channel’s importance is measured using the [LFH (Label-Free-Hessian) method](https://arxiv.org/abs/2309.11531), which approximates the Hessian of the loss function with respect to the model’s weights.\n", + "\n", + "For efficiency, we use a single score approximation. Although less precise, it significantly reduces processing time compared to multiple approximations, which offer better accuracy but at the cost of longer runtimes.\n", + "\n", + "MCT’s structured pruning will target the first two dense layers, where output channel reduction can be propagated to subsequent layers by adjusting their input channels accordingly.\n", + "\n", + "The output is a pruned model along with pruning information, including layer-specific pruning masks and scores." ], "metadata": { "collapsed": false @@ -355,8 +363,8 @@ "outputs": [], "source": [ "pruned_model_nparams = display_model_params(pruned_model)\n", - "acc_before_retrain = test(pruned_model, device, test_loader)\n", - "print(f'Pruned model accuracy before retraining {acc_before_retrain}%')" + "acc_before_finetuning = test(pruned_model, device, test_loader)\n", + "print(f'Pruned model accuracy before finetuning {acc_before_finetuning}%')" ], "metadata": { "collapsed": false @@ -366,8 +374,8 @@ { "cell_type": "markdown", "source": [ - "## Retraining the Pruned Model\n", - "After pruning, we often need to retrain the model to recover any lost performance." + "## Finetuning the Pruned Model\n", + "After pruning, we often need to finetune the model to recover any lost performance." ], "metadata": { "collapsed": false @@ -415,7 +423,7 @@ "cell_type": "markdown", "source": [ "## Conclusions\n", - "In this tutorial, we demonstrated the process of training, pruning, and retraining a neural network model using the Model Compression Toolkit (MCT). We began by setting up our environment and loading the dataset, followed by building and training a fully connected neural network. We then introduced the concept of model pruning, specifically targeting the first two dense layers to efficiently reduce the model's memory footprint by 50%. After applying structured pruning, we evaluated the pruned model's performance and concluded the tutorial by fine-tuning the pruned model to recover any lost accuracy due to the pruning process. This tutorial provided a hands-on approach to model optimization through pruning, showcasing the balance between model size, performance, and efficiency.\n", + "In this tutorial, we demonstrated the process of training, pruning, and finetuning a neural network model using MCT. We began by setting up our environment and loading the dataset, followed by building and training a fully connected neural network. We then introduced the concept of model pruning, specifically targeting the first two dense layers to efficiently reduce the model's memory footprint by 50%. After applying structured pruning, we evaluated the pruned model's performance and concluded the tutorial by fine-tuning the pruned model to recover any lost accuracy due to the pruning process. This tutorial provided a hands-on approach to model optimization through pruning, showcasing the balance between model size, performance, and efficiency.\n", "\n", "## Copyrights\n", "Copyright 2024 Sony Semiconductor Israel, Inc. All rights reserved.\n",