diff --git a/README.md b/README.md
index 0c5254f0..cf5643a1 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,31 @@ Instrumenting these components is the **ClearML-server**, see [Self-Hosting](htt
---
-**[Sign up](https://app.clear.ml) & [Start using](https://clear.ml/docs/) in under 2 minutes**
+**[Sign up](https://app.clear.ml) & [Start using](https://clear.ml/docs/) in under 2 minutes**
+
+
+
\n",
+ "\n",
+ " \n",
+ "\n",
+ "Hi there! This is the ClearML getting started notebook, meant to teach you the ropes. ClearML has a lot of modules that you can use, so in this notebook, we'll start with the most well-known one: Experiment Management.\n",
+ "\n",
+ "You can find out more details about the other ClearML modules and the technical specifics of each in our documentation.\n",
+ "\n",
+ "\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "s8eUiQauOA31"
+ },
+ "source": [
+ "# 📦 Setup\n",
+ "\n",
+ "Since we are using a notebook here, we're importing the special `browser_login` function, it will try to help you easily log in. If it doesn't work, don't worry, it will guide you through the steps to get it done :)\n",
+ "\n",
+ "**If it asks you to generate new credentials, keep them handy, you'll need them again in later notebooks**\n",
+ "\n",
+ "When installing ClearML in a normal python environment (not a colab notebook), you'll want to use `clearml-init` instead. It, too, will guide you through the setup.\n",
+ "\n",
+ "What we're doing here is connecting to a ClearML server, that will store all your experiment details."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "IMZsEYw5J5JI"
+ },
+ "outputs": [],
+ "source": [
+ "%pip install --upgrade xgboost clearml\n",
+ "import clearml\n",
+ "clearml.browser_login()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "TLsgNR5PhPPN"
+ },
+ "source": [
+ "# ✈️ Example: XGBoost\n",
+ "\n",
+ "Let's start simple, by adding the ClearML experiment tracker to an XGBoost training script.\n",
+ "\n",
+ "The important parts are:\n",
+ "\n",
+ "- Initializing ClearML. Always do this as a very first line if possible!\n",
+ "- Manually log the parameter dict (e.g. CLI commands are captured automatically)\n",
+ "\n",
+ "**⚠️ NOTE: `output_uri` in `Task.init` is an important parameter. By default it is set to `False`, meaning any registered models will NOT be uploaded to ClearML, but their info will be registered. Set this to `True` to automatically upload all model files.**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "CSaL3XTqhYAy",
+ "outputId": "6c870d67-d4f8-4c11-a356-0678b2fd9a41"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ClearML Task: created new task id=38ba982031b04187a59acbd7346c5010\n",
+ "ClearML results page: https://app.clear.ml/projects/df7858a441f94c29a1230d467f131840/experiments/38ba982031b04187a59acbd7346c5010/output/log\n",
+ "2023-03-06 16:06:09,239 - clearml.Task - INFO - Storing jupyter notebook directly as code\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.datasets import load_iris\n",
+ "from clearml import Task\n",
+ "import xgboost as xgb\n",
+ "import numpy as np\n",
+ "\n",
+ "\n",
+ "# Always initialize ClearML before anything else. Automatic hooks will track as\n",
+ "# much as possible for you!\n",
+ "task = Task.init(\n",
+ " project_name=\"Getting Started\",\n",
+ " task_name=\"XGBoost Training\",\n",
+ " output_uri=True # IMPORTANT: setting this to True will upload the model\n",
+ " # If not set the local path of the model will be saved instead!\n",
+ ")\n",
+ "\n",
+ "# Training data\n",
+ "X, y = load_iris(return_X_y=True)\n",
+ "X_train, X_test, y_train, y_test = train_test_split(\n",
+ " X, y, test_size=0.2, random_state=100\n",
+ ")\n",
+ "\n",
+ "dtrain = xgb.DMatrix(X_train, label=y_train)\n",
+ "dtest = xgb.DMatrix(X_test, label=y_test)\n",
+ "\n",
+ "# Setting the parameters\n",
+ "params = {\n",
+ " 'max_depth': 2,\n",
+ " 'eta': 1,\n",
+ " 'objective': 'reg:squarederror',\n",
+ " 'nthread': 4,\n",
+ " 'eval_metric': 'rmse',\n",
+ "}\n",
+ "# Make sure ClearML knows these parameters are our hyperparameters!\n",
+ "task.connect(params)\n",
+ "\n",
+ "# Train the model\n",
+ "bst = xgb.train(\n",
+ " params,\n",
+ " dtrain,\n",
+ " num_boost_round=100,\n",
+ " evals=[(dtrain, \"train\"), (dtest, \"test\")],\n",
+ " verbose_eval=0,\n",
+ ")\n",
+ "\n",
+ "# Save the model, saving the model will automatically also register it to \n",
+ "# ClearML thanks to the automagic hooks\n",
+ "bst.save_model(\"best_model\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "P150YtRbhYww"
+ },
+ "outputs": [],
+ "source": [
+ "# When a python script ends, the ClearML task is closed automatically. But in\n",
+ "# a notebook (that never ends), we need to manually close the task.\n",
+ "task.close()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-jWVBTuXyRHd"
+ },
+ "source": [
+ "## 🔹 XGBoost WebUI\n",
+ "\n",
+ "\n",
+ "After running the code above you should have a new ClearML project on your server called \"Getting Started\".\n",
+ "\n",
+ "Inside the task, a lot of things are tracked!\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Source information (git, installed packages, uncommitted changes, ...)\n",
+ "\n",
+ "Naturally, running this notebook doesn't actually give us any git information. Instead ClearML saves the execution order of the cells you've executed until it detected the `Task.close()` command.\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Configuration\n",
+ "\n",
+ "The configuration section holds all the values we added using the `task.connect()` call before. You can also use `task.set_parameter()` for a single value or `task.connect_configuration()` to connect an external configuration file.\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Artifacts\n",
+ "\n",
+ "\n",
+ "Artifacts are very flexible and can mean every type of file storage. Mostly this is used to track and save input and output models. In this case we get the saved XGBoost model. But when running a notebook you'll also get the original notebook here as well as an HTML preview!\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Scalars\n",
+ "\n",
+ "Scalars are the performance values of your models. They can either be a value for each epoch/iteration, which will display them as a plot, or a single one, which displays them as a table. In our example above the scalars where automatically grabbed from XGBoost using our integration!\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Plots and Debug Samples\n",
+ "\n",
+ "We haven't generated any plots or debug samples in our XGBoost example. We'll look at these a little later in the tutorial.\n",
+ "\n",
+ "\n",
+ "### Info + Console logs\n",
+ "\n",
+ "These sections speak for themselves: you get some additional information (like runtime or original machine hostname) as well as the original console logs.\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "pkYjS0RTtJ6s"
+ },
+ "source": [
+ "# 🚀 Example: Pytorch + Tensorboard + Matplotlib\n",
+ "\n",
+ "As you might have seen, our previous example was missing plots and debug samples, none were logged to ClearML! Luckily, XGBoost is not the only integration that ClearML has, it can also lift scalars, plots and debug samples from other frameworks you most likely use already.\n",
+ "\n",
+ "A full list of our integrations can be found [here](https://clear.ml/docs/latest/docs/integrations/libraries)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "5iwK3p-X3WIC"
+ },
+ "source": [
+ "## 🔹 Logging scalars through Tensorboard\n",
+ "\n",
+ "ClearML will detect this and also log scalars, images etc. to the ClearML experiment manager. So you don't even have to change your existing code!\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "4aeacPunj_7o",
+ "outputId": "52a3afcf-bb5e-4be2-e345-5b2199a5358a"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ClearML Task: created new task id=0bfefb8b86ba44798d9abe34ba0a6ab4\n",
+ "ClearML results page: https://app.clear.ml/projects/df7858a441f94c29a1230d467f131840/experiments/0bfefb8b86ba44798d9abe34ba0a6ab4/output/log\n",
+ "Epoch 1 complete\n",
+ "Epoch 2 complete\n",
+ "Epoch 3 complete\n",
+ "Epoch 4 complete\n",
+ "Epoch 5 complete\n",
+ "Epoch 6 complete\n",
+ "Epoch 7 complete\n",
+ "Epoch 8 complete\n",
+ "Epoch 9 complete\n",
+ "Epoch 10 complete\n"
+ ]
+ }
+ ],
+ "source": [
+ "import torch\n",
+ "import torch.nn as nn\n",
+ "import torch.optim as optim\n",
+ "from clearml import Task\n",
+ "from torch.utils.data import DataLoader\n",
+ "from torchvision.datasets import MNIST\n",
+ "from torchvision.transforms import ToTensor\n",
+ "from torch.utils.tensorboard import SummaryWriter\n",
+ "\n",
+ "\n",
+ "# Always initialize ClearML before anything else. Automatic hooks will track as\n",
+ "# much as possible for you (such as in this case TensorBoard logs)!\n",
+ "task = Task.init(project_name=\"Getting Started\", task_name=\"TB Logging\")\n",
+ "\n",
+ "# Set up TensorBoard logging\n",
+ "writer = SummaryWriter()\n",
+ "\n",
+ "# Load MNIST dataset\n",
+ "train_data = MNIST('data', train=True, download=True, transform=ToTensor())\n",
+ "train_loader = DataLoader(train_data, batch_size=64, shuffle=True)\n",
+ "\n",
+ "# Define model\n",
+ "model = nn.Sequential(\n",
+ " nn.Linear(784, 128),\n",
+ " nn.ReLU(),\n",
+ " nn.Linear(128, 10)\n",
+ ")\n",
+ "\n",
+ "# Define loss and optimizer\n",
+ "criterion = nn.CrossEntropyLoss()\n",
+ "optimizer = optim.SGD(model.parameters(), lr=0.01)\n",
+ "\n",
+ "# Train the model\n",
+ "for epoch in range(10):\n",
+ " for i, (inputs, labels) in enumerate(train_loader):\n",
+ " # Flatten input images\n",
+ " inputs = inputs.view(-1, 784)\n",
+ " \n",
+ " # Zero the gradients\n",
+ " optimizer.zero_grad()\n",
+ " \n",
+ " # Forward pass\n",
+ " outputs = model(inputs)\n",
+ " loss = criterion(outputs, labels)\n",
+ " \n",
+ " # Backward pass and update parameters\n",
+ " loss.backward()\n",
+ " optimizer.step()\n",
+ " \n",
+ " # Log loss to TensorBoard\n",
+ " # ClearML will detect this and also log the scalar to the ClearML\n",
+ " # experiment manager. So you don't even have to change your existing code!\n",
+ " writer.add_scalar('Training loss', loss.item(), epoch * len(train_loader) + i)\n",
+ " \n",
+ " print(f'Epoch {epoch + 1} complete')\n",
+ " \n",
+ "# Close TensorBoard writer\n",
+ "writer.close()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "fsHJZGcC3afb"
+ },
+ "source": [
+ "## 🔹 Logging debug samples through matplotlib\n",
+ "\n",
+ "Whenever you use `plt.imshow()` ClearML will intercept the call and immediately log the image to the experiment manager. The images will become visible under the Debug Samples tab.\n",
+ "\n",
+ "\n",
+ "\n",
+ "You can log basically any media type (images, videos, audio, ...) as a debug sample. Check [our docs](https://clear.ml/docs/latest/docs/references/sdk/logger#report_media) for more info."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 281
+ },
+ "id": "bAEB04OUuI3R",
+ "outputId": "d9e8e484-3903-4212-9674-7490cbb192e3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAEICAYAAABf40E1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydeVzU1ff/X3c2ZlgERmQVEFAUAxU1MSlEzVxLS9FU3MXUytLSj6lZlpFLZZpaWn21MlPUTFwzN9x3BFNZBEFA9p1h9vf5/QHMDxQEZgYTnefjcR8w7+Xce9/LeZ+7ncOICCZMmHh24f3XBTBhwsR/i0kJmDDxjGNSAiZMPOOYlIAJE884JiVgwsQzjkkJmDDxjGNSAiZMPOOYlMATBmMshTGmYozZPbA9mjFGjLE2lb+3VP7uUe2Ytowxqvb7JGNsWrXfCxljdxljZYyxdMbYjsrtNyu3lTHGtIwxRbXfC2sp46eMsa3Gr72J/wKTEngyuQtgTNUPxpgfAPNajisAsKwhAhljEwGMB/AyEVkC6A7gGAAQ0XNEZFm5/TSAd6p+E1G4YVUx8aRjUgJPJr8BmFDt90QAv9Zy3C8AOjHGejdA5vMA/iaiJAAgoiwi2mRwSQFUWiSzGGOJjLFSxtjnjDEvxtg5xlgJYyyCMSaqPNaWMbafMZbLGCus/L91NVkejLFTlXKOMsbWV7c6GGM9K+UWMcZiGGPB1fZNYowlV557lzE2zhj1e9oxKYEnkwsAWjDGfBhjfABvAqjN/C4HEA7giwbKnMAYm8cY614p15gMANANQE8A8wFsAhAKwBWAL/6/ZcMDsBmAOwA3AHIA66rJ2QbgEoCWAD5FhfUCAGCMuQA4gArrRwrgQwC7GWOtGGMWANYCGEREVgB6Abhu5Do+lZiUwJNLlTXQH8BtABl1HLcRgBtjbNCjhBHRVgDvouJljQKQwxj7n/GKi5VEVEJENwH8C+AIESUTUTGAQwD8K8uRT0S7iaiciEpRocB6AwBjzA0VFssSIlIR0RkAkdXyCAVwkIgOEhFHRP8AuAJgcOV+DoAvY0xCRJmVZTFRDyYl8OTyG4CxACah9qYAAICIlAA+r0yPhIh+J6KXAdgAmAHgc8bYAKOUFsiu9r+8lt+WAMAYM2eMbWSMpTLGSgCcAmBTaZk4AyggovJq56ZV+98dQEhlU6CIMVYE4EUATkQkAzC6sl6ZjLEDjLEORqrbU41JCTyhEFEqKjoIBwP4s57DN6PixX6jgbLVRLQTQCwqTPXHyQcA2gMIIKIWAIIqtzMAmQCkjLHqnaCu1f5PA/AbEdlUSxZEtBwAiOhvIuoPwAlAHIAfm7oyTwMmJfBkMxVA38qvXJ0QkQbAJwDqNO8rO82GMMasGGO8yubDcwAuGrXE9WOFCsugiDEmRUW5AegU3xUAnzLGRIyxFwC8Wu3crQBeZYwNYIzxGWNixlgwY6w1Y8yBMTassm9ACaAMFc0DE/VgUgJPMESURERXGnj4H6j4ktZFCYCFAO4BKAKwEsDMynb34+RbABIAeajorDz8wP5xAF4AkI+KDsAdqHipQURpAIahoh65qLAM5qHiOeYBmAvgPiqGTnsDmNm0VXk6YCanIiaeZConNMUR0Sf1HmxCL0yWgIknCsbY85VzDHiMsYGo+PL/9V+X62lG8F8XwISJB3BERUdoSwDpqGiyRP+3RXq6abLmQKUWXwOAD+Cnqh5cEyZMPFk0iRKoHPNNQMVEl3QAlwGMIaJbRs/MhAkTBtFUzYEeAO4QUTIAMMa2o6JtV6sSsLOzozZt2jRRUUyYMAEAV69ezSOiVg9ubyol4IKaM73SAQRUP4AxNh3AdABwc3PDlSsNHQkzYcKEPjDGUmvb/p+NDhDRJiLqTkTdW7V6SDmZMGHiMdFUSiADNad7tkbdC2BMmDDxH9JUzYHLANoxxjxQ8fK/iYrFMCaeAYgIubm52LVrFwDA0tISnTp1gqenJ1q0aPEfl87EgzSJEiAiDWPsHQB/o2KI8P+a87LOuLg4bNmyBVKpFG+//TYsLCz+6yI9sXAch927dyMiIgK7d+8GAIjFYrRv3x4DBgzAW2+9BTc3N/D5xnZn8HRTWlqK3377DT4+PnjppZcgEBjx1SWi/zx169aNnmQiIyPJ0tKSOnbsSAUFBU2WT3FxMX3zzTc0b948un37Nmk0mibLqzZkMhkdO3aMQkJCaPXq1ZSZmdloGdeuXaMOHToQj8d7KFlaWtLcuXOpsLCwCUr/36LVakmj0eiSMVGr1fTZZ5+RjY0NvfPOO1ReXl5jf0lJCf3xxx+0ceNGUqlUdcoBcIVqef9MMwYbCGMMPF7T9aOWl5fjhx9+wJ9//gkvLy+89dZb+OKLL/DCCy802VezvLwcmZmZaNGiBWJjY7FhwwacPXsWeXl5OHLkCKKjo7FmzRrY2Ng0WKadnR0YY7rfNjY2EAqFKCwsRHl5OTZt2gQrKyssWLAAYrG4KaoFANBqtdBoNGCMQSgU1iiTsSAilJSU4NChQ9izZw9u3Lih2zdz5kyEhYUZpY4cx+H69esoKSlBdHQ0tm3bpmtWZWVlYevWrcjIyMC3336rn4VQm2Z43EkfS0Aul9OhQ4do7ty5lJSURFqtloqKiiglJYWSkpIoPz+fEhISKCkpiXJzcw3SzpGRkWRlZUW+vr5NYgloNBo6evQo9ezZk6Kjo0mhUNCePXuoc+fOlJOTY/T8lEolRUZG0qBBg0gqlZKfnx/Z2dmRQCAgPp+v+3IHBgY22hrgOI4iIiLI29ubIiMjKTMzk0pKSmjr1q3k7e1NPB6PXFxcaN26daRUKo1eN6KKL2dERAQ5OzuTk5MTrVixwuh5abVaunnzJnXo0IEkEkmN68bj8UgsFtPIkSMpNjbW4Lw4jqOkpCQaOnQoCQQCcnR0pJYtW5K5uTl1796dhg8fTteuXav3GcfTZAnIZDKsW7cOW7ZsgVgsxu+//w4zMzNoNBoolUpYW1vD19cXcrkcfn5+cHFxQceOHdG/f/8nsi2qVquxevVq+Pj4oEuXLgCA4cOHQyKRQCQSgYiM+iUTiUTw9PTE33//DcYYiouLQZUzR3k8HszMzKBQKPSSzRjDiBEj0KdPH9jZ/X+v6SNGjEB2djaWLFmCzMxMzJ49GzKZDB9++KHRLSytVovWrVsjLCwMERER+Oijj5Cfn49ly5ZBKBTqJZOIwHEcFAoFDh06hAsXLmD37t24d+9ercerVCr8+eefSExMxLlz52BuXpuz6IbBGIO1tTUyMzMRHh6OsLAwcBwHjUaDFi1awMzMzLDnozbN8LhTYyyBsrIyWrZsGXl6etLJkyfpnXfeIS8vLzp58iTdu3eP0tLSjN7mbGpLIC4ujlq2bEnbtm2rsb24uJgWLlxo1Dw5jqPi4mJat24d8Xg84vP5JBKJSCqVkkQiIUdHR/r666+Jz+fTgAEDjGqJlJSU0MqVK8nFxYX4fD65uLhQfHy80eQ/CMdxtHnzZrK1taVRo0aRVqvVS45Wq6W0tDRasmQJdenShYRCIYlEIhIKhcTj8cjKyoo8PDzIxcWFnJycyMnJiSQSCfF4PJJKpbRlyxbiOE7vemg0Gtq8eTO5u7vTP//8o7cc1GEJ/OcKgBqhBLRaLcXExJCXlxctW7aMZDIZpaamUmlpqUEXuT4ehxKws7OjP/74o8b2X3/9laysrOjevXtGyUer1dL9+/dpzJgxZGlpSXw+nxwdHWnUqFG0a9cuevPNN0koFJJAICAvLy/avHmz3i9OXRQXF9PatWvJ1taWeDwezZ0716jyH8xr5syZZGVlRRs2bCC1Wt1oGRzHUWZmJg0YMIBEIhHZ2NjQm2++SW+//TaNGjWKrK2tKSQkhKKjo+n27dsUGxtLsbGxtGDBAnJzcyMej0dDhgyh4uJiveuhVCopNDSUQkNDqaSkRG85dSmBZtUcUKvV+Pvvv2FmZoZXXnkF5ubmcHNz+6+L1WTY2dkZtfmSmZmJt956C2fOnIFWq4W/vz/CwsLwxhtvQCqVwtHREZGRkSAiTJw4ESNHjjSaqc5xHNRqNSQSCV577TV88803KC4uNors2lAoFNi3bx/279+PwMBATJgwQa9Os7KyMqxevRqnT59Gv379MHjwYEyePBkWFhYoLi7G119/DTMzM3h7e9cw+cPDw9GxY0dMnToVd+/eRXJysq6p11hSU1ORmJiIsWPHgsfjQaVSQSQS6SWrNpqVEiAiZGdnQygUQqvVQqvVPpFt/MZiYWEBMzMzZGbW9A6WnZ0NKysrg9qTQEUbOSsrC0uWLMGhQ4cgEokwZMgQLF68GO3bt4dEItEdV4WjoyMsLS0NyhcANBoNysrKkJ+fj6ioKAAVoxJlZWUAgKSkJOTn58PW1tZghVNeXo6SkhIIhUIcP34cK1asgJ2dHZYuXaqrY2PJysrC+fPnYWZmhtmzZ9foV2rRogXmzZuH0tLSh0YBGGMYOnSowXNKsrKy8O677+LGjRs4ceIEMjIy4Obmhp49e6Jjx45616s6zUoJCIVCvP766zh+/DgWLVqEadOm4dVXXzXKw/ooqLJTSKvV6jrQjIlUKkX37t2RkJCg26bRaHDz5k04OTnBysrKIPkKhQILFy7Etm3bwOfz8eqrryI8PBxt27atcdzu3buhVquNMhGlrKwMOTk52L17N6Kjo1FQUICrV69Co9FAIBCgqKgIAHD8+HHMnj0bvXr1gkgkwosvvogOHTo0uKNLpVLh1KlTiImJwZ07d5CZmQmxWIzz58+DiLBhwwb4+/vrrWAyMjIQHx+PsLAwvPDCCzXkMMZgZWVV5/3Jzc2FSqXSK1+tVostW7bg0KFDuHz5MlxcXMDn85Gbm4u4uDjs2LED/fv3x8SJE+Hq6mpQx2CzUgJ8Ph/PP/88vv/+eyxfvhyLFy/G5s2bMX78eIwdO7ZJrAK1Wo28vDwAFTe9KcabRSIRhg4diqioKHAcB8YYzp49i8jISLz66qsGv5TXrl3DwYMHQUR48cUX8fXXX6N169YPHZeeng4iAo/Ha9TcgAfRaDR47733EBsbi/j4eMhkdTtLlslk2LFjBw4ePKj7eq5YsQJOTk715pOcnIw1a9bgr7/+Qn5+PuRyeQ0l7evri5YtWxqkuPPz85GXlwcrKyuIRKIG338iQmxsrN6jLABQUFAAT09PLFy4EK1atYJEIoFAIIBCocD169fx008/YdasWfjuu+/g4eGhdz7/eacgNXJ0gKiit7SoqIiuXr1Kffr0IalUShcvXmyUjIaSmZlJY8eOJZFI1GQdgxzH0Y0bN8jDw4MOHDhA165do+DgYOLz+bR27VqDOufKyspo2rRpJBaLSSAQ0N69e2vtRM3OzqZu3boRn88nqVRKcrlc7zxPnz5NVlZWtc4arC+Zm5vT0aNH6+3ovXLlCr322mtkbm5OlbEQdcnR0ZF69epFUqmUvL29adeuXXrPE0hMTKTg4GDq0qULnT9/vsHzTTiOo5MnT5JQKCR3d3c6fvx4o/OWy+Ukl8trvf9qtZpu3rxJw4YNI19f3wbN50AdHYPN0tEon8+HtbU1/P39sXHjRlhYWOD+/ftNkpeDgwPeeOMNmJmZNYl8oMLC8PT0xLhx4xASEoKgoCDk5ORALBYb3E6OiYnBsWPHoFKpMH/+fAwZMuShr1lubi7GjBmD69evg4gwcOBAvWe6EREOHz4MpVIJoOL6ffzxx7h69SpSUlKwbNkyWFtb13m+QqHQnfsoDh48iEOHDkEul+u2SaVSrFu3DnFxcdi9ezdmzpyJ3NxcjB8/Hn5+fhg6dChWrVqFL7/8EpMmTULv3r1x6dKlR+bj4eGBkJAQpKSkYOTIkcjKymrglahoqlClZaWPlSoWi+t8BgQCAXx8fLBixQqkpKRg1apVjZavozbN8LiTPjMGOY6jsrIymjx5Mpmbm9OpU6caLaOhNPUQYRWFhYW0fft22rNnDx09epTatWtH69atM8gSWLZsGVlYWBCfz6fw8PAa+1QqFcXHx9PIkSN1Q4OdO3c2yArQaDTk6+ur+7L36NGDcnNzqbCwkPbt20d9+/YlgUBAPB6PhEIhzZo1i5ycnHTHu7u708WLF+u1BHbt2kXu7u5kbW1N48ePp+PHj1N5eXmN87RaLV29epXGjx9PNjY2ZGlpSZaWluTk5EQffvghXb58mWQyWb11ksvlNH/+fLK0tKTOnTtTZmZmvfckOzubfHx8iMfjUZ8+fSgtLa1hF/AB6rsOSqWSunfvTgMGDKhXFp6GeQJEFWaQXC6n27dv04gRI8je3p5WrFih1xhwQ3lcSqA68fHxRlECn3/+uU4JVDcZVSoV3bx5k0aNGqWb8hoUFKSX2VodjuPogw8+0E2kqWpetGzZUretugLQaDSUk5NDAQEBJJVK6auvvmrwvVSpVKRQKOp9UTiOI4VCoUv6NA2Sk5N1zSpnZ2f6/vvva81bq9VSWVkZzZ8/n3g8Hjk4OFBkZGSj8yOqUKhJSUl17lcqlRQVFUVisZjefffdeuU1ayWgVCqprKyMsrOzac+ePbRgwQLq0aMHdenShfbs2fPIlVPGoDkrgZ9++olatmxJPB6PVCoVcRxHMpmMzp49S15eXrrVfT4+PpSWlmaUSVdyubyGNfBgEovFFBISQvn5+URU8ZJWWQp37txp0olfhlBaWkovv/wyWVpakpWVFX3yySd069Ytys/Pp9LSUioqKqLY2FgKDg4moVBIQqGQxo0bp7cVkJGRQfb29jWUFsdxpFQqKS8vj1avXk0eHh7k6+vbIIumLiXQLEYHEhMTERUVhbS0NFy6dAmtW7fGtGnTMHDgQDg5ORl3bfVTxhtvvIF9+/bhwIEDuHbtGvh8Pg4cOIDffvsNycnJsLCwwPDhwzFnzhw4OTkZZfRDJBJh/fr1+Oabb5CVlQWtVou8vDwQETw8PNC1a1csWLAAtra2ACr6RGxsbDB06FCD825KLCws8MMPP+CXX37Btm3bsGzZMvzwww/o2bMnvL29kZ+fj8OHDyMrKwu2trYYN24cwsPD9Z4rwOPxYGFhgSNHjqBr165QKBQoLS1FdHQ09u3bh9TUVPTv3x+zZ882aC5Js3h7WrRoAV9fX/Tq1QvTp0+HnZ2dwWPnzwrW1taYPHkyLl++jGHDhgEAiouLodFo4ODggNGjR2PGjBnw8vIy2hArj8dDUFAQ2rdvj4KCghpKwN3dHS4uLk3a0dpUMMbg5eWFhQsX4uWXX8bevXuxf/9+7Nu3r8Zxzz//PGbMmIExY8YYVM+WLVti5cqVWLlyJezt7ZGTkwNLS0s4Ozvj+eefx4cffojOnTsbPJnsiYhF2L17d3qSvQ3n5OTg33//hUQiQdeuXR/LA5yeno4BAwZg6dKlGDFihEFfaJlMhl27dmHGjBlQq9UAAG9vb3z55Zd48cUXIZVKm2T+w9MMEaG8vByJiYkPjUx5eXnB09NT7xWL1dFoNLh69SqKiorA5/MhlUrRpk0bWFpaNtpPAmPsKhF1f2i7SQk8majVaqSlpcHe3t4oMyKVSiVSUlJQdb8lEgmcnZ2N8qA+6zz4Dj2pCrUuJdAsmgPPIkKhEJ6enkaTZ2Zmhvbt2xtNnon/z5P60jeUZjlZyIQJE8bDpARMmHjGMSkBEyaecUxKwISJZxyTEjBh4hnHNDpgwoQBVMU3qILH4zW7YddmrwS0Wi0iIiJw8+ZNtG/fHp07d4ZGo0HLli3h6urapAFDjIlSqcSJEydw+vRpABUTTgYPHgwHB4dmPwT1NFJQUICzZ8/i3r17SExM1M0VkEqlGDp0KJ577rkmDa5iTJq9EtBoNPjmm29w7do1SKVSODk5wdbWFu+99x6cnZ2bjRLQaDTYv38/Tp06BR8fH0RGRmLv3r347LPP0KlTJ5MiaAByuRynTp0CUPGS3rt3DyqVChKJBA4ODlCpVGjbti2ef/55SCQSva+pTCbDjBkzcO7cOZ1fwyolIBaLERERgd69e2PixInw9/c3mlNQlUoFhUKhiz4UGxuLgoKCh47Ly8uDSqVC9+7d0aZNm3rzb/ZKQCAQoGfPnoiJiUFBQQEKCgrQuXNn9OjRo1ktLJJIJLppvRMmTIClpSVCQ0OxceNGrFu3zmhKQKvV4s8//8Tx48exYMECuLu76/bJ5XKcPHkS5eXl2Lt3L+Lj4/H888/jlVdeAQD07du3yf056gsRISsrCxMnTgRQMeNSpVKB4zjweDyIRCJwHAexWAw/Pz98/vnnCAgI0Cuv+Ph4/PXXX9BqtWCMwc7ODmZmZujVqxf+/fdfxMfHIzk5GSdOnMC2bdvg7+9vUN2Sk5Nx7NgxfPfdd9BoNDoLo+plfxC1Wg1PT0+MHDkSs2bNerqVgFqtRm5uLo4ePQqtVgupVIqCggIkJiZi+/bt+PDDD+uVwXEc0tPToVQqYWtrC7lcjn/++Qeenp7gOA7JyckAgK5du8LNzQ137tyBm5sb7O3tjapkeDweOnbsiO+++w58Ph+MMbi6utYwNY1Bamoq3n33XRQWFiIlJQWjR4+GpaUlIiMjcfLkSRQWFoKIoFQqdTHwfvnlF3Tq1Ak9evTQSwnI5XLExsZiz549OH36NEpLSwEArVq1wtatW2FnZ2dwO5qIcOLECfB4PDg4OKBFixbw8vLCgAEDIBaLsXHjRshkMmRkZCAmJgbp6el6K4FOnTrht99+Q3p6Os6cOYMePXpg6tSpsLGxARHh2LFjCA0NRUJCAkaMGIG1a9fqvUIyKSkJ3bp1g1KprNNfYXh4OIRCIczNzdG/f3+4uroCqPDA1aBntLb1xY876eNZqKioiJYvX0729vbE5/PJ19eX0tLSaMCAAWRubk6ff/55g+RcvHiRvL29dVFlqpJYLCaJRKJL5ubmZG5uTkKhkPh8Pi1evLjRZW4McrmcgoODaciQIUaLcstxHN2+fbuG/z+hUEhisZjEYjF5eHjQ5s2bSS6X13DCoVAodL4IGkt2djYFBQURn88nPp9PYrGYzM3NSSQSEY/HIwsLC/rrr78eirSrDxqNhnJzc0kulxPHcTWSRqOhwsJCGjJkCNna2tLGjRsNyutB+Q/uS0hIIEdHR+Lz+RQaGtpo+VqtlhISEsjc3JwkEgnNmzePysvL6fTp05SQkEBarVaX6irHg6A5+xN4kKKiIixZsgQ//PADzMzM0KdPH90XZeDAgTh16pTOPXh9ZrSlpSX8/PwQGBgIqVQKAPD09ES7du1qxNKrYv369fj111+RnZ3dJHWrIi0tDTk5OVi0aJHR+jXS0tIQHh6u8/7L5/PRt29fBAcHw8PDA0OGDDGauU9EKCsrw0cffYQrV67A3t4eAQEB+PDDD+Ht7Y3z58/j8OHDuHTpEt566y2sX78er7/+ukF15fP5D90zjUYDmUyGPXv2IDw8HBkZGQgLC8PUqVMNqt+jnqsqn5F9+/ZFRESEXn0C+/btw8SJEyGXy7Fr1y688cYbAIAXX3xR7zLXSW2a4XGnxlgCCoWCtmzZQhKJhGxtbemzzz7T+cTTarV07NgxEolENGfOHFIoFPXK4ziOVCpVg7z3cBxHn376KYlEInrvvfcaXObGIpfLadGiRTRo0CCjxVVUq9W0Zs0ancsvCwsLCgwMpAsXLhjdNZtSqaSEhAQaMmQIde7cmT777DPKzs6u9dh///2XXn75ZRo4cCBlZGQYnHfVF1GlUlFRURHt3LmTfH19yc7Ojtzd3emdd95pkBceQykuLiZzc3NycHCgPXv2NPr8OXPm6DwVGws8DZaAUqnE4cOHsXTpUpiZmWHmzJl47733dB0lpaWl2LdvH2xtbREQENCgdf9V8evrQ6VSIS0tDRcvXkSbNm10DjqMhUajQUlJCXJzc3H+/Hn8/fffWLRokdG+zLdu3cLKlSsBVFg/r776Krp164b27dsbrdOR4zjk5+fj4MGD2L59O0JCQtCrVy906NChznM6dOiA9u3b49ixYygsLISzs7Pe+ctkMsTFxQGoqO/hw4dx+PBhtG3bFsuXL4ePjw/8/f2NErWnPgoKCnQ9+fr4n7hx4wbUajXmzp3bBKV7gNo0w+NODbEElEolnThxgtzc3EgsFtOUKVPo3r17ui+4SqWiL7/8kiQSCY0bN45KS0v1V5nVqHKEuX37dnrppZdIKBTSypUrjdKGrZ5HVFQUTZkyhTw9PcnS0pKcnZ0pKirKKP0BCoWCQkNDdV5+ra2tacKECTRjxgxatGgRHT161CAPw1XExcXRnDlzaMCAAfTrr782yBLTarV09OhRcnR01OuLWYVGo6HPP/+crKysyMrKSheDgMfj0c8//9ygshgLuVxOH3zwgS7y8unTpxstY+LEicTn8ykkJITOnTunt5/C6qC5WwKRkZFYtmwZ0tPTERQUhHnz5tWYB3DlyhWsWbMGYrEYw4YNM8oXtGqobP/+/Th+/LiuH+DcuXNQKBTo3Lkz/P394ezsbJBrLq1Wi3379mHz5s1wdXXFnDlzUFZWhuXLl+P777+Hm5ubQV/rhIQEHD16FBzHAaiwmLZu3QqgYlRi9+7dmDx5Mvz9/dGvXz+92uXl5eX4+eef0apVK3z77bdo06ZNgy0xMzMz2NjYwMvLq9H5VsFxHC5evKiLrFR1vYqLi3Hw4EEEBQU9FHatqSgoKMCWLVt07sj0sW6mTJmCyMhI7Ny5E5cuXYKfn58uoKmvry8GDx5sNBd7zUIJyGQyrF69Gjdu3ICrqyvmzZuHtm3b6l48uVyOFStWIDc3FwEBAejXr5/BeXIch5s3b2Lu3LnIyckBEcHBwQEBAQGQSCRITEzEnj170LJlS0ydOhUjRozQe5hLIBDg3XffRffu3fHcc8/Bw8MDxcXFGDp0KI4ePYrJkycbpARiY2N1QTp69uyJgIAA9OjRAwBQWFiI48ePY/Xq1bCxscG6desaff2ICDdv3oS5uTkmTZoER0fHRoXrysnJgb+/v0EvqUAgwMaNGx8aNy8oKMCGDRvw/vvvIygoCDNnzmz0y8NxHFQqFa5du4akpCTcunULBQUFsLOzQ2pqKgCgS5cuePXVV2FlZYVFixahqJl/O2IAACAASURBVKgIIpEIffv2hYuLS6PrExAQgHPnzmHTpk1YvXo1UlNTsX//fgAV0aoDAgIwfvx4vP7664ZPRqrNPGhoApAC4AaA66g0NQBIAfwDILHyr219ch7VHOA4jiZOnEhisZjs7Oxo9+7dD/mNP3LkCFlbW5NQKKSFCxcaxWU1x3GUmJhIY8eOpU8++YQuXrxI2dnZVFxcTCUlJVRSUkIpKSkUGBhI3bp1o2vXrhmcX/VhOK1WS/PmzaOJEyca5HKciGjv3r00ZMgQmjdvHuXn55NMJiOVSqXz25+Xl0fz5s0jS0tLGjRoUKNNT5lMRlFRUZSUlNTosqrVapo8eTJ9/PHHeocKexRarZbu3btHEyZMIH9/fyopKWnU+QqFgo4dO0bDhg0jFxcXsrOz0w0Vm5ub64ZaraysyNPTkzp06EBisZh4PB4FBgbq3Krri0wmo4yMDNq7dy99/PHH9PHHH1NQUBABIKlUSl26dKE7d+40SBaaIu5ApRKwe2DbSgALKv9fAGBFfXIepQR2795NlpaWJBKJKDw8/KE2slKppAEDBhCfz6eRI0carS+AqOIBUiqVdY4eKBQKev/998nNzY2OHTtmtHyrWLlyJQ0dOtTgfgG1Wq0b66+LoqIiGjBgAEkkErpy5Uqj5CcmJtLBgwf1andnZGRQmzZtaN++fY0+t6FwHEeHDx8mX1/fRikBuVxO33//PTk4OJBAICBzc3MKDQ2lKVOm0JQpU2jixIkUEBCgC95SNfJSlebNm2eUvhaiij6P6or766+/JmtrawJA69evb5CMx6kE4gE4Vf7vBCC+Pjl1KYHbt2+Tu7s78Xg8CgkJeeiCqtVqio6OJhcXF5JKpQ3WiMZCpVLR3r17icfj0YoVK/SS8SirZcyYMTR69GijTRZ6FAqFgsaNG0cCgYDmzJnTqHPj4uLo559/bvRXViaT0bhx4yggIIDKysoafF5jLT2tVks7d+4kZ2dnysrKavB5MTExZGlpSXw+n5YsWUL3798nlUqleyFzcnLof//7H0mlUt3EK5FIpIu0JBKJqEePHk0SIo/jODp06BDZ2tqSQCBo0Dl1KQFD+wQIwBHGGAHYSESbADgQUWbl/iwADrWdyBibDmA6ALi5udUq/MCBA8jPzwcAzJ8/H4wx3XxttVqNS5cuYerUqcjNzcXJkycN6lhqKFVLR5VKJX766ScsWLAAfn5+CA4ObrQsjUaD5ORkeHt7P7SvsLAQiYmJGDt27GNZPFQ1VGphYYGXX365UedaW1vj33//RUpKCmbNmgUbGxuIRKJaOxiJCBzHQalU4qOPPkJsbCyOHDnS4AAdxcXFuH79Ojp27Ag7O7tHXhsiglarxenTp7F69Wrcvn1bt/imIVRNNGKMQSaT4ccff4RKpYKFhQX+/PNPXL16FTweDxKJBN7e3ggLC0OHDh0QHR2NgwcP4sqVK7h37x7Ky8sbnGdd5ai+ZgCouF/t2rWDmZmZQeHPARhsCbhU/rUHEAMgCEDRA8cU1ienLksgKipKZwl4eHjQ9OnT6eDBg3Tt2jWaP38+eXl5kVgsprFjxxrN7KqC4ziSy+VUVlamS4WFhXTkyBH64IMPqE2bNiQUCikoKIgiIyP16oeQy+UUFBT00IQgjUZDO3fuJE9PT4qKimrSsFxVfRHnz58ne3t7sre3p7t37zZKhkajoXv37tF7771H06dPp/fff58uXrxIeXl5D6WUlBS6fPkyjR49mqZNm9aoLzMR0Y0bN6hNmzb03nvvUXJy8kP3vao+crmcMjMz6ffff6fhw4fT4cOHG30db9++Ta6urrqp4tVNfisrK2rXrh29/PLLtHbtWrp3716N5lZ5eTlNmzaNXnvtNbp161aj8n2Q8+fPU1hYmO63QqGg7OxsmjlzJolEogZPS0YdloDR4g4wxj4FUAYgDEAwEWUyxpwAnCSiR/q6rivugEKhwObNm/H999/j5s2b1fMCEaFVq1bo378/VqxYYbQQWlWo1WocOHAAZ8+erVJmiI+Px7Fjx6DRaODr6wt/f38sWLAA7dq10ysPjuMwb948yOVyzJw5ExYWFuDz+bh37x4+//xz+Pv7Y+nSpU26Lr24uBgXLlzAkiVLEB0djRdeeAG///67bqitMZSVlUEmk+H//u//cPfuXbRr1w55eXkoKiqClZUVHBwcYG1tjdatW8PPzw+tW7du9D1LTk7GhAkTcP36dXh6emLKlCl45ZVXdCNFCoUCt2/fRmpqKk6ePInc3FxMmjQJM2bMaPSCL6VSibNnz2L79u2Qy+UVL0xleb29vRESEgJnZ2fdfXsQlUqF8vJyWFtb6/1sEhG++eYbbNq0SbfA69SpU1i1ahWSk5PRt29ffPLJJwgKCqpXVl1xBwyxAiwAWFX7/xyAgQBWoWbH4Mr6ZNU3WejChQs0depU6tmzJ0mlUuLz+dStWzf68ccfKTc3t0m+lEqlkhYtWkSMMeLz+WRnZ0d+fn40a9YsWrVqFd24ccMonZDFxcUUHh5Oo0ePpjfeeINeeuklCgwMpPnz51N+fr5R6lZaWkqJiYmkVCpJo9EQx3Gk1WqpsLCQVq9eTS4uLiQUCqlNmzZ04cIFg/NTq9WkVCpJoVBQZmYm3bhxg9LS0nT5G4JMJqN9+/ZRjx49iDFG5ubm1KZNG/Lw8CAPDw9ydXWlli1b0ksvvUTTp0+nU6dOGRSwVqvVkkKhILlcXiM1ZRTs6nAcR1999RVZWFjQa6+9Ro6OjgSA7OzsaM6cOZSent7gZwTGtgQYY54A9lT+FADYRkRfMMZaAogA4AYgFcAoInrY80E16otAREQoKSlBZmYmMjMzUVJSgrZt26Jt27ZNFhKM4zgkJSXhyJEjEIlEaNOmDRwcHODp6Qlzc3OjOiuRy+VIT09Hbm4usrKy4OLiAh8fH1hZWRnFuklPT8eHH34Id3d3SCQS9OvXDykpKTh58iQOHTqE3NxczJo1SzfN90l3xKJSqRATE4Pz58+DMYaioiLcunVLZ7G5u7tj3LhxunBdT3p96iMxMRHz5s3D3r17AQADBw7E22+/jX79+jVqCrQpDJkecBwHjUYDxhj4fH6zfZiUSiXu3r2LLVu2QK1Ww9bWFj/++CMKCwsxfPhwTJo0Cd26dUOLFi2ajQejqnsDVHTWlpWV6faJRCJYWloaLcDqfw0RITs7G5mZFf3tDg4OcHBwaHT9TErAhK5dy3GcrtdbIpHA3Nz8qXlhTNSNKRahiRqm45PqJszE46d52rcmTJgwGiYlYMLEM45JCZgw8YxjUgImTDzjmJSACRPPOKbRAT0oKChAamoqSktLdRFvAKBPnz7o3r17k01gehyUlpZi7dq1sLW11QVBMQSlUgmVSoWMjAxkZWXh33//RatWrdC5c2e0a9fONDT5BGBSAo3k+vXrWLlyJW7cuIHy8nLcvXtXt2/SpEnw8fFptkogNTUVJ06cwJIlS+Di4oJ+/fqhfftHLvt4JImJiVi2bBnKyspw79495OfnIzs7G5aWlmjTpg2++OKLRq9YfJpRqVTYv38/9u/fj65du8LPzw98Ph/du3dHeXk5Dhw4gNdffx0CgaDOVZr60GyVgFarRVxcHH766ScoFArMmjULfn5+TZqnWq3Ghg0bsGfPHkilUggEAgwcOBAvvfQShEKhzvVYc0UoFOKbb74BUBFYs64l3g3l+vXr2LZtGziOg4ODA9q2bYuSkhLk5eUhPz8fU6ZMQWpqapPOUlSpVPjyyy9x8uRJLFiwAAMGDDCabI7jkJGRgR07duDMmTMQCATo27cvJk2aBHNz80bLu3r1Kt555x3k5uYiMjISlpaWYIzB2dkZSqUS6enpWLduHZydnbFo0SL4+/sbxZJqlkqgtLQUa9aswfr165Gfnw8iQkREBO7evduo9eKNJSsrC2fOnMGIESN0oZ9sbW11N4LH4zVKO0dGRupCcpWWliI5ORmdO3d+6DiO4xAVFYVWrVrh/fffh4NDrS4aDEImk2HVqlWIj49H586dERERYbBCGzRoEL744gs4Ojpi0KBBEIvFKCkpwaJFi7Bjxw7cv38fmZmZBrkZr4+kpCT8/vvvSE5ORkpKCqKjo2FjY2MU2UVFRZg7dy5kMhmmT5+OuLg4rFmzBjY2NhgzZkyjlVtxcTFyc3PBGENJSQlKSkoAABkZGbpj8vPzER0djfz8fCxbtgwdO3YEn89Hfn4+XF1d9bNCa1tV9LhTY4KPFBQUUGhoKPH5fAoODqbjx49TSEgI8fl8SkhIaLCcxsJxHJ05c4ZcXV0pPj7e4NV9KSkp5ODgoHNFxePxdCsWa0tV7rP1CWlVH3K5nJYsWaJz47Z27VqjrcysCpNVhUwmoxkzZuj88Onrlq2wsJBCQ0PJwsKC4uPj6zwuJiaG3NzciDFGAoGADh8+rFd+D1JWVkYTJkygkJAQyszM1K3MTEhIoLCwML1WS96+fZsCAgJIKBTWmQQCAQkEAhIKhSSRSGjMmDE0ceJEkkqlOjfvdd07NIV7MWOlhiqB8vJyWrhwIZmbm9Pbb79NOTk5xHEczZw5kzp27NhkzjfkcjmtX7+eXF1dqWfPno12o/Ug6enp1KFDBwJAQqGQLCwsyNzc/CHHFZUem2qkMWPGGKlWpIvR991335GtrS2JRCKKi4trlKuvhuajUqmouLiYFi1apHPZZW1trfc9W7lypc7RZ3R0dJ35XrhwgVxdXYnH45G5ublRXNCpVCqaOnUqBQUF0c2bN3XbNRoNhYaG0gcffKCXc1itVksXLlygnj176tyUPUoJPJjs7e1p+fLlFBMTU6v8Zq8EOI6j69evk6WlJQ0bNkwXsqqsrIzatWtH06ZNM7oS4DiOZDIZbd26lRwcHKh79+50+vRpg9fEnzp1iry9valbt240b9482rt3L23bto3CwsIoJCSERo8eTVOnTqX+/fuTi4uLTgHw+XyaNWuWkWpXodwuXbpEQ4YMIaFQSC+//LJRg6oQVbwYcXFxtHz5cgoMDCRLS0vi8XhkY2ND27dv11vuvn37yMXFhRhj9MYbb9TqMyAnJ4dGjhypC7rSpUsXowQh+eOPP8jHx6eGxyCtVqu7r7///rvez6JKpaKoqCgKCAggsVjcKCUgFArJ39+fbt++XavsZq8ENBoNffXVV2RpaUlr167Vbb9y5Qr5+/tTcnJyAy5xw1Gr1ZSYmEiffvop+fv7k4eHB23fvt0obrHj4+Npw4YNDZK1Zs0anVXQvXv3Om9wY+E4jpKTk2nIkCHE4/HIycmJFi9ebPRIPcXFxdSyZUudhVOV5syZY5Czj5ycHOrbt6+umfTgdVGpVLR161ZydnbWHTNs2DBDq0NKpZIkEglt2LBBt02r1VJycjL16dOH+vfvb3D8SKVSSSdPnqRRo0aRp6dng5SAWCymnj170qJFi+q8rs1eCWi1Wjpx4gTZ2NjQsmXLKCcnh1QqFUVHR1N4eDhFRUUZLXhnVcyBPn36kFAoJD8/P4qIiDD6V7I+4uLiKCgoiBhjJJFI6PfffzeabIVCQRs2bCCJREKurq60cOFCKigoMLo1JZPJaNq0aeTt7U0WFha6F3LVqlUGXc+SkhIaMWKETqlMnz6dbt++TVlZWXT//n06evQo9ejRQ9fXwuPx6LvvvjO4PlXhwjMzM4mo4rm8e/cujR8/niQSCR09etQo3qGVSiXl5+fTX3/9RR06dKhXCYSEhNCtW7eoqKjo6e4TKCgooOHDh5OLiwuNHj2aFixYQLNnz6aRI0eSi4sLRUZGNuwK1wPHcXTy5Emdg8k+ffrQv//+a3AQkMYyduxY4vF4BICCgoKM1lZXq9V09uxZCgwMJB6PR0uXLqXU1NQmqR/HcVRYWEgXLlygxYsXk7OzM/F4PHJ3d6elS5fqrXTUajUdP36cnJycarj3HjVqFI0YMYI6dOhQo8OVx+NRUVGRwfWpUgLR0dFUWFhIhw4dorfffptCQkKoS5cudPfuXaMqUqVSSWFhYY9UAuPGjaOUlJR6799ToQSqtO6yZcvotddeI19fX/L39yeRSEQAaNOmTQ2S0xCys7PJ1dWVnJycyNzcnBYvXmxwh2BjiIqK0vUH8Pn8RnsAfhQymYxmz56tayvPmjWLiouLjSa/NjiOo5KSEoqIiCAPDw9dePSDBw/qLVOlUtGuXbt0fQPVX/jqqWqbMZScUqkkb29vCgwMpNGjR9OUKVPojz/+oC1btlBoaCjl5uYanEd1VCoVhYWF1RhFejDISbdu3Sg2NvbZUAJEFQ9TeXk5FRYWUk5ODuXm5lK3bt2IMWZUJaDRaOjOnTsUFRVFPXv2JHt7ezp+/PhjcTCZlJREAwYM0FkBffv2Nar8srIymjhxos6V++HDhw1qnzcGpVJJX331FVlbWxOPxyM/Pz+DmnFKpZIyMzMpNDSUzM3Ndc5HAwMDaejQoSSVSo2qBIiIsrKy6Ndff6UtW7ZQYmIiFRYW0vz582nZsmVGbzLu3LmT7O3tdRZA1Ytf9bsqde/eXddZXhdPjRJ4kJSUFHJ3dycABnnKValUdP/+/RoPStUQ2vnz58nPz49CQkKa3BooLS2luXPnEp/P140KXLp0yWjytVotXb16ldq1a0cuLi70yy+/GD1mQ2Zm5iNfhtLSUho2bBgJBAKysLCg2NhYg/OUy+WUkJBAN27coMTERCouLqYjR46Qp6cn8Xg8evPNN43a3FGr1aRWq0mr1VJ2djaNGTOG1q1bZ9SO1dLSUpozZ06DOgatra3pyJEjj/xI1aUEmv0qwujoaJSUlIAxZtA894MHD+KPP/6AVqvVbatyMNqtWzdMmTIFPB5PF967qTh27Bi+/fZbXTnOnj2Lbt26GU1+QkIC+vfvj6SkJNjZ2cHPz89ocQ3kcjmWLVuG5557DpcvX67zuMzMTCQlJekeQmNcU7FYjLZt2+K5556Dl5cXWrRogZSUFBQUFICI4OLiYtTpyQKBAAKBADweD7dv38a5c+cQGBhotHUjpaWl+Oqrr7Bp06YGHa9Wq/HPP/88FJW5ITRrJaBSqbBjxw4UFxfjpZdegrW1td6yDh48iNDQ0IfCi3McB7Vajfz8fKjVakOL/EiysrJ0c+0BYPjw4ejatavRFoqo1WqMHz8eRUVFMDMzQ48ePfQKMlIXkZGRWL9+PYqKilBUVASVSgWtVguiinBgKpUKiYmJmDZtGuLi4gBUuAfXJ3R3bTDGdAkAHB0dYWFh0eQelIuKilBcXGzUfO7evYtNmzY1+KU2MzPDjBkz9Fqz0CzXDlSRnp6O+Ph4cByHkSNHGiTL1dUV586dQ+/evWFubg4iQmlpKVJTU/HXX3/h559/Ro8ePZrsgVIqlfjzzz8REREBAHBycsL3339vtK+0QqHA1q1bkZiYCD6fj6FDh+LTTz9Fq1atjCIfAHr16gUvLy/k5OTg9ddfx/jx4zFo0CD4+Pjg1q1bOHjwIP755x9kZ2eDz+fDzs4OJ06cgJ2dndHKUJ0rV67g/v37ANCk8SnKysrg7u4OKyurJsmjqWnWSiA6OhoZGRng8/kYN26cQS/ooEGDEBISAg8PD7z66qtQqVTYuXMn7ty5g5KSEkilUgQFBUEkEhmxBv8fpVKJY8eO6X6HhYUZZNlUp6ysDOvXr8fSpUuhVCrRoUMHfPrpp0ZfuNOiRQsMHz4cOTk5uHv3LrZu3YrffvsNAHT3hohgbW2N4OBgjB8/vkkWQ1WnKmRdU+VTVlaGS5cuoW3btnp9hevC0tIS7dq10y2Qq4+OHTvqveCrWSuBmzdvoqCgAAEBAQY7v3juuefw7rvv4uLFi/jss88gFotRWlqKrl27wt3dHf369cPw4cObJC4gx3GIiYnBn3/+qdu2efNmzJo1yyhLk9PT0/Htt99CqVRi5MiR6NevH9zd3Q2W+yDW1taYPXs2unXrho0bN+LatWtISkoCUBEQxNXVFb169UL37t0xfPjwJl09+CD37t1rMtmMMaSkpBgcfbg6rVu3Rnh4OObPn//I/hUACAwMxMqVK/W2qJqtElAoFMjIyIBGo8GUKVMMXlctFosxe/Zs5Ofn49q1a7plrz4+PrCzs4O1tXWTRSBSqVRYsGCB7re9vT0GDBhgNN8Ebm5u2LhxI2QyGfr06QMbG5smC3IqEokQHBwMHx8fpKam6pSAWCxG69at4e3tDSsrq8fiUUgsFoPP54Mxhg4dOjRpXsbuMxKJRAgICMC6detw+fJlFBQUYM2aNcjLy4OVlRUmTZqkq1NgYCDat2/f6ICrVTRbJcBxHCwsLGBtbY0ePXoY5QXl8/mwt7fHwIEDjVDChsMYg5ubG86dOwcAmDlzJt577z2jBQgxNzfHa6+9ZhRZDYExBkdHRzg6OiIgIOCx5fsggwcPRkJCAjw9PTFixIgm6c8RCATw8vLClClT4OTkZHTZnTt3RqdOnaBWqzF48GDI5XKYmZnB09MTFhYWACqutyHPf7MNQ8ZxHEpLS1FWVoZWrVo1WVv9cUBEiIuLQ8eOHTF8+HBs2LDB6A/Us4hGo0F5eTmEQiHEYnGTKAGO4yCXywFUKNsnOZbjUxeGjMfjwdra2midZ/8lVXMcSkpKIBQKm62PwicNgUDQpJ6mgIrnsOqL3FxptkrgaYPH4zXbISYTzZtmPVnIhAkThmNSAiZMPOOYlMAzilwuR2pqqq5Ty8Szi0kJPINoNBqcOXMGkydPRmJi4n9dHBMNQKVSISkpCVeuXMH169eRmpoKpVJpFNmmjsFGkJaWhvT0dPTo0aNZh89SKpXYvn07ysvL9Z5g8iQhl8tx8uRJ2NraGm3OyJOERqPBt99+i0OHDuHu3bsQiUTw8vJCcHAwpkyZgpYtWxpU56frajUxu3fvxqZNm6DRaB573nK5HOvXr0dBQYHBshQKBc6fPw8fHx+4uroaoXT/HRzHYdeuXVi+fDlyc3ONOnX3SYHjOERERODGjRuQy+VIS0vDkSNHsHTpUoSFhdUITqIP9X4GGGP/B2AogBwi8q3cJgWwA0AbACkARhFRIauYKbEGwGAA5QAmEdE1g0qIiug4HMeB4zjk5eVBpVLh6NGjuHTpErKzs9G/f3/MmjWrycdrVSoVrKysHvuEECJCeHg4IiIiEBgYCKlUapCsu3fv4v79+/Dw8GjWYdMAICUlBZ9//jlGjRqF/v3712vZVIUOk8vl8Pb2NihvhUKBHTt26PxQtG7dGv/73//g7e1tVGtEKBRi7969yM3NhUQiQWJiIpKTk/HDDz9g//796NSpEz777DP9M6jN00j1BCAIQFcA/1bbthLAgsr/FwBYUfn/YACHADAAPQFcrE8+NcCzUGBgILm7u5Obmxs5OTmRo6MjWVlZ6XzkWVpa0q+//tpkwUeIKvzyjR49mvr27Wt0t9xEFW6ykpKSSCaTPbRPq9WSi4sLeXl5UVJSkkH5aDQa+vrrr8nV1ZWOHDlikKzGUFZWRt999x35+fnRa6+9RgkJCUa5X6GhoSQUCiklJaVBx2dmZtKgQYMoKirKoHyVSiXNnz+fXFxcaMyYMfTLL7/Qp59+SsHBwZSdnW2Q7LqoiuakVqtJqVTS5cuXycvLi7y9vRvkhBaGuBdDxRe/uhKIB+BU+b8TgPjK/zcCGFPbcY9K9SmBNm3a1OpSqbrPtfv37zfmejaamJgY8vPzo9DQUKPEHqhOVeSZ4ODgWl9yrVZL9vb21KVLF4MdWSoUCmrZsiX16tWL0tLSDJLVUDIzMykoKIhEIpHufnXp0oXS09MNkltSUkK9evWiPn36NMhHIsdxdODAAerVq5dBLtU4jqN//vmHpFIp/e9//yOVSkVarZYUCgWFhobSyJEjjeJ2vD60Wi1NmzaNPDw8qLS0tN7j61IC+tosDkSUWfl/FoCqxdouANKqHZdeue0hGGPTGWNXGGNXcnNzH5nZrVu3sG3bNly6dAmpqamQyWSQyWQ4cuSILnJuU86202g02Lp1K27evImlS5c+5H3IUJRKJWbPng2FQlGrq62YmBiUlpYiODjYYAccHMehoKAAAoHgsXRulpaWYuXKlbh58ybefPNN7NmzByEhIbh16xb27t3boLXytaHVarFz507Ex8dj8eLFDerg5DgOCxYsAMdxBjXpVCoVpk6dCm9vb3z88ccQCoXg8XgwMzPD66+/jvT09Bpu6owFEUGtVkOlUqG8vByHDx/GkSNHMHjwYIMWmxncNUxEVTHzGnveJgCbgIoFRI86ViKRICQk5KHtVf0EQqGwydvpjDF4e3vrwkUbk9TUVKSmpsLLy+uhtiQR4ccff4RIJMKIESMMzuvOnTvg8/lo167dQ442qlypVT3UhlJaWopZs2YhPz8fFy5cgKenJ3g8HtRqNY4cOYLIyEjMnDlTL9lyuRx79uyBUqmEq6trg+6JWq3GrVu30L9/f4Pu4bVr11BQUIDw8PAajkQUCgW+//57lJWV6S27LogIeXl5+PLLL5GamgqBQIB//vkHMpkML774okGy9VUC2YwxJyLKZIw5Acip3J4BoHp3c+vKbU3C2bNnkZ2dja5duz6Wr5qzs7PRF/colUrMnTsXJSUl6Ny5M1q2bFljf2FhITZv3gwLCwuDHKkCFQ/SzZs3IRQK4eLiUuNF12g0iI6ORlRUFHr37o1OnToZXNcvvvgCWVlZ+OGHH+Dp6al78RwcHCAUCg3qyNVqtdBqtfD399dZg/WRmJgIMzMzBAcH623NERGWLFkCJycnDBs2TFcnjuOQkpKCe/fuwdPT0+jPY5XjmdWrV9e4bw4ODujXr59BsvVV95EAJlb+PxHA3mrbJ7AKegIortZsMDoymQwqlQoDBw5s0vFurVbbJE5GOY7D7t27cezYMdjb22Py5MmQSCQ6U1KtVmPVqlXQaDTgOA45OTl6m89AxQN87do1tGrVpJto3QAAIABJREFUCqGhobrtSqUSp06dwtChQ7F9+3YMHToUx44dM8ikVavVOH36NGbPnl1DAQAVCoeIDFr+nZubi/z8fIwcObJBL5xarcaNGzfAGINAINDbEpDL5bhz5w6mTZumG1nhOA5JSUmYM2cOkpOTm2SUis/nw9fXF1OmTEHv3r3Ru3dvuLq6Ij8/H1evXjVIdkOGCP8AEAzAjjGWDuATAMsBRDDGpgJIBTCq8vCDqBghuIOKIcLJBpWugXTu3Bk8Hg+5ublQq9VwcnIyqsleVlaG7Oxsow8PchyHuXPnQqPRoKSkBJs3b4ajoyNatWoFd3d3FBUV4aeffgLHcZDJZNiwYQNWrVqlty+78vJy7NixA+bm5jWaAjExMfjoo48wceJEhIaG4ptvvsFXX32F4OBgvfNSqVS4c+cOrly5gldeeUVnVRARYmJiIJfLDTJj8/LyUFRUhICAgFqbLhzHoaioCAkJCYiNjQVjDKdPnzZIiQIVSiAvLw8TJkwAn88Hx3FISEjA4sWLkZycDKFQiEGDBjVJ89TR0RFr1qxBTk6F4Z2eno6FCxdi7969BjnCqVcJENGYOnY9ZINU9kC+rXdp9OTnn39GdHQ04uLiwOfzsWbNmofMakOQy+UoKysz+o1ljCE4OBi7d+9GUVERfvjhBwAVzimqOjoLCwtBRLCwsICdnZ1BFo9cLkd6enqN8fHi4mL89NNP8Pb2xoIFC2Bra4uePXvizJkzBk2KMjMzw6BBg/Drr7+iV69e6Nv3/7H35XFV1en/73M3LnCRNdZYhHAAMVQc9StpZjhqmphbqbmUWi6V22SWmYVOTmmLZjraZtZo6Tg5amquuaQSyuIuuACKKIvsd+Pe8/79QZwfuAL3XBsa3q/XeQmX6+c56/s8n+fzPM+7h+SJrFmzBsHBwfjLX/7S6HMaEhICf3//Oo04RVHEtWvXcPnyZRw8eBC5ubl48MEH0aJFC8TGxiIwMBAbNmxo9DHVgCRyc3ORm5uLvXv3Ij09HSEhIaisrERFRQV69+5tt6xFnU4nBQH9/Pzg5uZm833Z5HJGLRYLzp07h+XLl+Pf//43SGLr1q3YtWsXzGYzWrVqZbf+eZWVlTa/SWpDqVRi+fLleO2113Djxg0cOXIEjo6OKC4uxrp165CZmQmFQoGZM2di1KhRCAoKkr2DUllZGUpKSvDSSy9JDVp++eUXm8dVqVRYsGABpk6dikmTJqFLly5QKBRITk7G+fPn8cILL9iUrVjzMMydOxdVVVVwcHDAgQMHsGfPHpSUlKBDhw546aWXEBkZCQcHBzg4OMBsNtv8wLi6umL48OEYP348LBYLWrRogenTpyMuLg7Tp09HSEiITclcBoMBx48fR3R09F2nFVarFVlZWThx4oTNWZ9NjgQqKiqwaNEifPfdd9JFFUURcXFx6N+/P3r27Clr6+fasIf6kLu7O1xdXUESjzzyCARBwLVr15CUlITMzEy0a9cOb731FhwdHW2+gdVqNVxcXOocR2ZmJgwGAx566CEolUp8+OGH+M9//oMXX3zR5h6Hvr6+WLhwIdavXw+LxQIvLy/07t0b8+bNQ8uWLW1aaq0RT/nwww8xduxYCIKA0NBQRERE4Pnnn8fDDz+MFi1a1IkXKBQKmM1mnDhxAhaLpVFelUqlwuLFi6UYUc3SoNFohNVqxWuvvWYTUZ89exbLli3D+++/f1cSSEtLw0svvYSrV6/a3IquyZGAWq1Gq1at4OTkJKmzfP/993jyySelpcL/5j5vt0ON61gzxzxw4ABSUlLg7OyMb775RhYCAKrfYuPGjcO3336Lo0ePonv37jAajZLQyrJly5CYmAidTocpU6bY7NIKgoDAwEBMnTpV+v3q1ato0aKFzV6VWq3Gq6++Cn9/f5jNZrRu3Rrt27eHVquFQqG4475brVacP38eVqu10VMrR0fHW9Ktz549i/z8fERGRtp03sxmM06dOoVt27Zh+PDhtyWUzMxMvPvuu0hLS4OnpyfGjRvXaHsAmqYgqdVqZWZmJuPj46lQKJiWlmbXlOGcnBz269ePjz32mCwa9/eylZCQQLVazY8++kh2teBr165RrVazVatWXLhwIYcMGUIvLy+6u7vTycmJISEhPHfunKw2a2C1WrlixQp6e3szNTXVrtfsTvZnzZrFdu3ayXodRVHkF198wbCwMObl5dk0VnJyMtu0aUNnZ2cOHz6cx48fp8lkoslkYnl5OXft2sVevXrR0dGRzs7O3LFjR72FVvFHEiRVKBRQq9X3rZy3srISN27csHvxkNVqlXr1jxgxAs8995zs2YkeHh6YNGkSjEYj3nnnHWzYsAGlpaVo0aIFEhMTceLECZsLa+4Ek8mEo0ePQq1Wo2XLlvfdYxMEAYMGDcK1a9ewYcMG2aZ3oiji8uXLsFgsNh9T69at8fTTT0OlUuG7775DXFwcoqKiEB0djejoaPTv3x/79u1DcHAwNm/ejG7dutnssTW56cD9hsViQVJSEtLT0/Huu+/arRMwSVy5cgXvvfcelEolnnvuObvENtRqNRYuXIhhw4Zhz549SE9Ph5eXF1566SXZq9/uhPDw8N+l5l8QBISHhyM+Ph7btm1D37594e3tbfODW1FRgStXriAhIcHmHAFHR0e89NJLKCoqwrZt25CZmYlLly5BoVDA09MT4eHh6NSpE1588UW0adNGlpdEMwncAyRRUVEBZ2dnu2oRGo1GrF27Fvv27cPbb7+Njh07yu4F1ECtVqNTp073XRiktLQUer0eU6ZM+d1KmFu0aIF33nkHgwYNwpYtWzBq1Cibz/OlS5eQlJSE119/XZaXRIsWLbBw4UI8++yzWLduHaxWKxwcHBATE4M2bdogKChItjgR0EwC94RSqUSfPn0QFhaGsLAwu7mwxcXFWLNmDfr27Ws3zcPfExaLBXv37sWpU6cwf/78362jkSAI8PPzw9/+9jf4+PjIcj1zcnJw8eJFhISEyHJcgiBAqVSiffv2aN++vc3j3QtNlgScnJwQGRkJf39/uwpbKhQKhIaGIjQ01G42AMDNzQ0rV65EYGCg3ZV6fw9YLBZkZGRAq9X+7mpRWq0Wffr0kW08b29v9O/fH/7+/k1uZQpowjJkFotFyuJzcXH5w/WV+6OhsrISCxYsgFarxfTp0+2Wy/F7wGg0wmAwQKfT2W0KJwfuJEPWZEmgGU0LoijCZDJBEAQ4ODg0yTdmU8cfTouwGU0LCoWiyfcz/KOi2YduRjP+x9FMAs1oxv84mkmgGc34H0dzTKAZ9w2VlZXIzMyERqNBq1at7luuQE3CV0pKCpycnNCqVSupbLoZzSTQIGRkZODgwYPo2bNnk1fuud8wGo3YtGkTXn/9dbi5uWHr1q2yd4C6GRaLBXl5ecjIyMDWrVvx8ccfw8fHB4sWLcLw4cPtZlcuiKIIg8GAnJwc6bPKykqUlpbCbDbD2dkZMTExaNGihU3n8Q9FApcuXcIPP/yA0tJSDBkyBNHR0bKNLYoiNm/ejHnz5uGJJ57At99+25ybUE+YzWbs3LkTiYmJuHLlCnJzczF37lwsXrzYbvkCJpMJO3bswBdffIH09HRcuXIFQHXqckZGhuz2jh49ioCAAJtr+2tgMBjw+eefIyUlBWfPnpU+LysrQ2lpKaxWK7RaLbp06YL+/fujT58+jS9wu11p4f3eGlpKfDtcuHCBo0aNok6nY1hYGI8ePWrzmLVhMBg4evRoqtVq+vv717t8synAaDQyJyeHVVVVso8tiiLPnz/PDh06UKFQSJtOp7OLYIzFYmF2djYTExPZqlUrqlQqBgQEcM6cOVQqlXRycuLcuXNltWk2m/n2229zw4YNspxDq9XK1atX08fHp845UygUFASBgiDU+czX15cJCQn3FCDBHUqJ/zCewGeffYb169fDZDJBo9HIviZ96tQpHDt2DKIo4pVXXpHNjU1NTUVycjI+/vhjPPzww4iIiMB//vMfPPbYYzAYDHB1dcUjjzwCtVqN8PBw2dOXi4qK8Mknn2D9+vUYNGgQBg4ciMzMTLi5uSEuLk5q0tFYGI1G/P3vf0daWpr02YgRI+Dv74+ZM2di5cqVslwrkjhz5gySk5OxcuVKnDlzBj169JDOa81+2AOVlZXIyspCz549ZSlvNxqN+Oc//4nCwkIAQEREBLy8vPDoo49KtQSpqanYsWMHUlJSkJ+fj59//hmlpaWN6wZ1O2a435utnsDhw4fp7e1NhUJBFxcXLl68WPa3WmJioiR7VlxcLMuYGRkZ9PLyolarpZ+fH1944QVGRUVRoVBIMmtqtZqOjo50cnJiQEAAExMTbZLQqo3s7GwOGDBAkgfTarXU6XRSw4rg4GAuX77cJu3F/Px8urm5SW+tdu3a8eLFiywqKmLLli154sQJWY6lrKyM/v7+7N+/P1977TWmp6dL8mCpqan09/cnAPr7+/PSpUuy2KzBzz//TA8PDyYlJckyXlVVFZcvX86QkBD6+voyLy+PZrOZFouFVquVVquVVVVVPHXqFP38/KhQKOjo6MilS5fedVzYokVo762xJFCj4RcSEkKFQkE/Pz+uWrVKtoekBqIocs6cOVQoFPUWf6wPJk6cSI1GQ1dXV86cOZMVFRVcs2YNJ06cyLi4OLq7u1On01Gj0UgPUbdu3Zibm2vz8RQXF3P69OlUq9W3uJw1m1Kp5IABAxrdLaeiooIDBgyo47bWvj4dO3bkhAkTZNHtE0WRWVlZtwi6lpSUcNasWXR0dKSrqyu3bt1qs62b8cMPPxAAf/31V1nHLSwsvEXcVBRFlpaWcvXq1YyJiZFEed3c3O4pyvqHIwFRFHny5El26NBBmuv16dOnwePUB2VlZRw7diwVCgUnTJggmyBpamoqJ06cyF9++YV6vf4Wmzk5OczKypIIqIaEjhw50miboijy8uXLfPrpp+84x6z9u4+PD7dv395gO1arlRs2bKgz7tChQ+sQWMeOHanT6VhWVtbo47kbKisrOWPGDDo7O1Or1XLevHl2sfPDDz/Qx8eHJ0+etMv4ZPV1MxqNvHTpEp977jk6OjpK59XJyYmDBw++5R66GXcigSYZEyCJkpIS7NmzB7m5uSCJESNGoF+/fnaxd+PGDeTmVqupydHnvQZt27bFsmXLbvs3FxcXSXugttZeREQEwsLCGmWPJC5evIiPP/4YGzZsgJOTE0jCaDTW+Z63tzdatGiBqqoqaLVauLu7N9hWQUEBZs6cKf3+wAMPYMCAAXjggQfqfM9qtSItLQ1du3Zt1DHdCZWVlfjss8/w7bffQhAEjBw5ErNnz5bVRm2EhYXZ3J35bqioqMA//vEPbNy4EYcPH5buBxcXF0ycOBFz585tdA+KJkkCJpMJa9euxdtvv42SkhI8+OCDmD59OiIiImS3ZbFYcP78eWRmZsLd3R2DBg26b70NgeqLn5eXh27duiE3NxejRo1CixYtGjyO1WrF6dOn0a1bN+j1erRq1QpjxoxBRUUFzp07B5PJJH332WefhVKpxI4dO5CamtooxeeffvoJly5dAlDdmKVfv37o27fvLaW2JHHjxo0Gj383VFZW4quvvsJ7770Hk8mECRMmYO7cuXbNSbA1gHo3WK1WrF27FnPnzr2FsH18fNCnTx+JsBuF27kH93tryHSgqqqK6enp7NOnjxQIXLFihU3Bq7uhoqKCs2bNokKh4JAhQ1haWmoXO7eD1WrlV199xejoaI4cOZILFy5sVPfhiooKbty4kW3btqVSqWRERAQ3bdpEsnp5sLCwkHl5eczLy+O1a9doMBi4YMECenl5cciQIczPz2+QPb1ez+7du9eZwhw6dKjOd6qqqti2bVtqtVpu3Lixwcd0JxgMBi5btox+fn708PDgW2+9Zfdr9sMPP3DMmDEsKiqyy/hGo5GRkZHSNK0mQF3ze0BAAF999dV7xsLwR5kOVFRUYMmSJdi3bx80Gg1GjBiBAQMG2K1bjcViQXl5OUiiffv297UrTkFBAZYuXYozZ84gMjISw4cPb3DTCr1ejw8//BDLli1DQUEBwsLCMH/+fPzlL38BAEmdB6h+41y5ckXqQmyxWNC+ffsGex6nTp1CcnIygOo35FNPPYXY2Ng638nMzERenrxataWlpUhNTcWiRYtQXFyMqVOnYtq0aY3yZBqKGi0MOVBSUgJnZ2fpWqtUKrz55ptISkqCm5sboqKicObMGXz77bfIzc3F1atXsXz5cowZMwZRUVENN3g7ZrjfW309AYPBwHnz5tHLy4sKhYKDBg3ihQsX7JLkUoOsrCx27dqVCoWCn376qd08jtqoqKjgtm3bOHz4cDo6OjI+Pp65ubkNTlCyWCzctGkTg4KCqFAo2LJlSx4/fvyWN4bRaOThw4c5Z84cdunShYIg0MXFhW+99RZLSkoarA+wadMmOjk5SW+pzMzMW/brhRdeoFqtls0TOHjwIAcNGsSIiAi6u7tz5MiRvHDhgt21DfR6PefNm8fVq1fLYis/P59//etfeeTIkTqrJkajkWVlZayoqGBVVRUrKyuZnZ3N5cuX08XFhVqtlosXL77rPqCprw6IosjTp09L66Kenp5csmTJPSOitsBisXD//v308/OjUqnkZ599JtvKwJ1gMBi4cuVKtmzZkhqNhhMnTmRpaWmjbrCzZ8+yR48ekthIRkaGRCRWq5V5eXn85JNPmJCQwMDAQDo7O1OpVNLLy4tfffVVo8/tf/7zHzo5OUlLjLWnMFarlUePHmVQUBAFQaBWq+WOHTsaZacG165dY3h4ONVqNZVKJbt3786MjAxZlh7vhfLycr766qtcu3atLOOlpaWxXbt27Nq1a73yUfLy8hgcHEyFQsFOnTrddUrQ5EmgoqKCU6ZMoZOTE93d3Tljxgzm5OTY9UKXlJRw5MiRVKlU9PX15ZkzZ+xmi6y+oRITE+ni4kKNRsPIyEhmZGQ0+g2zdu1aenh40NXVVSIAq9XKS5cuceHChQwNDaWjo6M0x1QqlXzsscd49epVm87r0aNH6ezsTLVazbfeekv6/PLly3zjjTcYGBhIpVJJhULBiIiIRud1WK1WZmVl1Zkvh4WFMTU1VTpWvV7PXbt2MTIyUnpxyAm5SSAlJYVt2rShUqnk2LFj75gTYrFYeO7cOY4ZM0Yiv/j4+Lt6qncigSYREzAYDBg+fDi2bNkCAOjUqROef/55+Pn52TVSL4qiFI199tlnERAQYDdbN27cwIwZM/Dtt98CqF4+3Lp16y1Lag1BXl4eSkpKoFQqMWTIEDg4OKCqqgrnz5+HXq8HUN3eWq1WY9y4cZgxYwb8/f1tbpYZExODrl27YteuXdi7dy+USiWSk5Nx8OBBlJeXQxRFqa32N9980+io9pkzZ/Dkk08iJydH0qB0cHCAxWLBli1bsHnzZvz000+4du0aAECj0dikGHw76HQ6dO7cWdLFtBWurq7w8vICSXz11Ve4ePEiPvjgA0RGRgIArl69iqSkJGzZsgVbt25FWVkZBEGAu7s7Pv/888bpHtyOGe73di9PYNu2bVJmlLu7O5csWWLXOABZHb3+6quv6OjoyMjISKakpNjNll6v59KlS6UsvaFDh/Ls2bM2ezmLFy+W3rg3JwJpNBoGBQVx4MCB3LZtm+yxjgMHDkiZjjcnJKlUKvr4+HDOnDmN9gLMZjNfffVVaQrj4+NDd3d3yaOpOUYfHx926dKFr7zyCjdu3Cj79NFsNvPTTz+VzROoqqriwoUL6eHhUed8xcTEsE2bNnRzc7vlXHbu3Jk//PDDPe8XNOXpwLlz5+js7EyFQsHQ0FAePny4fmfUBpSWltLLy4s6nY5vv/22bKnCN8NisXDFihVUq9XU6XSMj4/n/v37ZZnm7N27l7GxsdTpdNRqtXR0dGRYWBhjY2M5fvx4Hj161G6BzvLyco4YMYK+vr5SVltISAhjY2M5ePBg/vrrrzYdY3l5OQcNGkSVSsWoqCgmJyfz888/Z8uWLdmyZUu2bduW48eP5y+//NLomEp990PO6QBZnek4d+7cOkRwcxVhzRS1X79+vHLlSr3GvRMJNInpQG3hyKCgIFn7BNwJer0eoigiOjoaTz31lM0ac7eD1WrFiRMn8PHHH8PBwQEjR47EG2+8Ids0Jy4uDp999hl++uknVFZWQhAE9OvXD76+vvDz87Nrj3ydTodly5Zh165d2L9/P3x8fNC1a1cEBwfDw8MDTk5ONiXvODg44JlnnkFQUBDGjh2LqKgoRERESGKqgYGBCAgIgEqlsmuSkEqlgpeXF65evQqz2SzLErKTkxNmzpyJsrIy/Pjjjzh//rz0N09PT8TGxiI0NBSPP/44unbtatOUEWhCugPjxo3DmjVrMHHiRMyfP9/u7asNBgPWrFkjCUDaQ4j0+vXrSEhIQHJyMqKiorBx48ZGpwQ34/fD/v37sXPnTsyYMQNubm6yjXvt2jVcvHgRR48elV6EQUFB+POf/wxvb29oNJoGEdyddAfu6aoD+BJAPoCTtT57G0AugLTftidq/e11AOcBnAPQ617js56rA3l5edyzZw/z8vL+MA09Tp48Kc2bfX19ZVtrbsb9RWlpKa9cudKobM77CdgwHVgFYCmA1Td9/hHJRTcxTRSAZwC0BuAPYJcgCK1IWuth567w9fWFr6+vrcP818LFxQVt2rRpVuZpgmjRokWj6jn+W3BPEiC5XxCEkHqOlwDgO5ImAJcEQTgPoCOAw43ewz8wWrVqhatXrwKonlvaswqtGc24E2wpe3pJEITjgiB8KQhCTa1pAIDLtb5z5bfPmnEbqNVqeHp6wtPTE66urve1OrEZzahBY0lgOYAwAG0B5AH4oKEDCILwgiAIRwVBOFpQUNDI3WhGM5phKxpFAiSvk7SSFAF8hmqXH6gOFtZuyP/gb5/dboyVJDuQ7GDrEkczmtGMxqNRJCAIQu3m6k8BOPnbz5sAPCMIgoMgCC0BhAP41bZdbEYzmmFP3DMwKAjCWgDdAXgJgnAFwFwA3QVBaAuAALIAvAgAJE8JgrAOwGkAFgCT5VgZaIZ8EEUR165dQ3Z2dvXykEqFhx56CG5ubs1iKv+jaDLJQrUhiiLy8/Nx8uRJdOjQAa6urrItrZ09exbJycm423lxcnLCn/70J+h0OgQHBzephyc1NRWJiYnYtGkTSEKr1WLkyJEYPXo0oqOjG69i0wxZYTabYTAYpGIrrVbb+PZhv6HRyUL3Y2tIe7GaEsrnn3+eXl5enDZtGs+ePStbm/HDhw8zJiZGKtKoXaxR87OTkxNjY2OZkJDA06dPy2L3fkAURS5ZsuSWfPSafgOTJ0+2W4usoqIiLl++nG+88QbXrFlzX5qz2ANFRUX1TugSRZEXLlzg/PnzG3yfZGRkcMKECRwxYgRHjhzJxYsX39JOvaFAUy4gqo2ioiIOGTKEWq2WgiDQ2dmZ7dq148iRI2WpEDOZTMzOzubJkyd58uRJHj16lKtWreKGDRuYlpbGr7/+mu+++y6HDBlClUrFZ5999r8+U6w2cnJypMKoyMjIOkUqGo2G8+fPt0uPhszMTHbu3JlKpZJDhgyxW0FWfWG1WmkymVhVVdWgLM1hw4Zxz5499/yeKIqcN28eO3TowNDQ0Ft6LN4LOTk5khBNTUbp7NmzefHixQaNUxt/GBLIz89nr169pGqq2lVVly9fptVqtZkxa0MURelmIatJwmAwcNSoUVSr1Xz22Wft9lYzGAzct28fp0yZwtjYWA4cOJAXLlywaUyLxcJjx45x3759vHr1Kvfs2cNu3bpJpdoeHh68du2aTEfw/5GZmckuXbr87iRQVVXFnTt3curUqezevTs//PDDeu/L2LFjqVQq76n0Q5KvvvoqnZyc6OjoyDfffLPBHaksFgvnzJlTRxxGp9Nx9OjRjRaD+cOQgMViYX5+Pk+fPs2kpCTGxsZKRFDzMNo7/37t2rV0dHSki4sL161bJ/v4er2e6enpnDBhAj08PKjRaCSi8/f3Z+fOnblhw4ZGtzqr6bojiiKtVivXrFlTR/yyd+/esguC3A8SMBqNXL58Offu3cukpCQOHz6cjz32GN977z0uW7aMnTp1YmRkJJ2dnaWaja5duzInJ6de43fp0oUAmJ6eftfvZWVl0cnJiSqVii+//HKjPUW9Xs833nijztTN1dW10b0u/zAkUAOTycQff/yRwcHBUq86e7vloigyPz+f3t7e1Gq1nDVrlqw2RVGkXq/nBx98cEst+c1yYQkJCdy5c6cssZCMjAy2adNGGtvNzc1mqbObUZsEBg0aJBvJiKLIGzducPPmzRwxYoTUmKXGsxEEoU6jkZq/OTo6smvXrjxw4EC9ruG+ffskPcO7NbTJysqij48PAdDLy+ue0mD3gslkYlJSEgMDA6Xr4+npyT179jR42vaHIQGr1cqKigru3LmTbdq0kS7yokWL7OoBiKLInJwcxsXF0dHRka+99ppswqRktZuamprK559/nu7u7lLXGDc3N/r4+PCFF16QOvgqlUq2adOGO3bskKXxqV6vZ48ePeq8bexBAp06daIgCPTy8uLatWttjj2Iosjc3Fy2bdtW8gYB3NLJSKvV0tXVlQEBARw2bBgXLFjQ4Ln16NGjCYAajeaO+221Wjlt2jSJsL/77jubjq8Goijy+PHj9PT0lO73xsig34kEmkRTkRqQRF5eHmbPno0tW7ZIyjXe3t4YP3683Za2LBYLrly5gmnTpiElJQUTJ07Em2++KUvBD0lUVVUhKysL06ZNw/79+6UloS5dumDUqFFwd3fH1KlTpT52Tk5OmDJlCh599NH7qoNgK5RKJRQKBR577DE8+eSTNtdKVFZWYuLEiTh58iQEQQBJCIIAJycnPPTQQ2jZsiUcHBwQHByMDh06oEePHnBzc7PJbo1GMPiJAAAgAElEQVQ0+O1w+vRpbNy4EVVVVWjbtq1s0mqCICAwMBA6nQ43btxASEgIgoKCZFuablIkYLFYsH37dqxeXbequbCwEF9++SXGjBkja1MHoHq9NiUlBYmJiTh8+DAGDx6MBQsWyPLwmUwmpKWl4dy5c/jqq6+QlJSEsLAwtGvXDr6+vmjfvj08PT3xzTff4NKlS1AqlfDw8IBarW5SFYdWqxWFhYUoLy+XfVx/f3/odDqUlZVJnwcEBOC9995D9+7dZWsGExQUBK1WiyNHjiAzM/MWybvKykrMmzcPly5dgpeXF7Zs2QJ/f39ZbAPV934NybVu3Rp+fn7/myQgCAJatmyJUaNGwcvLCyUlJdixYwdyc3Mxc+ZM5OTk4P3334dKJc9hmc1m7N27F3PnzsXp06cxevRovPPOO7K15bp06RKeeOIJlJSUAKjWlXv88cfRunVr6PV6vP7667h+/TqA6k65Y8eORdeuXWG1WtGzZ0/ZvICSkpI6D1FgYKBsajpAdZemH3/8EVlZWbKNCVTX8S9YsADt2rXDzp078euvv+Ly5cu4cuUK1q9fj6ioKAQEBMjysLz44otYv349zp49i0GDBuHLL79E69atodPpYDabsXHjRhw4cAAA8Morr8DPz+8eI9YfoigiIyMDZWVlcHNzQ1xcnLwvu9vNEe73Vt+YgCiKLC8vZ1FREfV6PUtKSrh9+3b6+PhQEAS6urravIRWg6qqKm7fvp2RkZEMCAjgm2++yby8PFnjDrNmzZICWAqFgs7OzgwLC6OXl1edQKBWq+XatWtZXFxMURRl2Yfa3Zl27dolqRTVyK/LmStQWlrK8ePHS8G5wYMHy7o6YLFYmJuby4MHD3L06NHU6XR0dnbm6NGjefnyZdmu2TvvvEONRkMADA0N5bhx47h06VL++OOP7N69OwGwX79+vH79uiz2apCbm8vu3btTEATGxcXx7NmzjRoHTT0wKIoii4uLeerUKWZlZUlRcbPZzMGDB0tR3zlz5jTqBNWG1WrlDz/8wPDwcAYHB3PlypUsLy+XPfA4ffr0OiRw8+bk5MQuXbpw3rx5srRYN5lM3L9/Pzdt2sTp06dz9+7d3LFjB4cOHUqtVkuFQsHo6GibElJuh9LSUr7wwguSyIncJFCDmtWbr7/+mrGxsXR0dOTo0aN548YNWcYvLS3l+vXrpaVCAHR2dmZISAgdHR0JgCEhIRw6dCj37t1rU76FXq/n5cuXuWLFCiYkJEjBTn9/f44ZM4Y7duzgpUuXmJ2dzaysLGZnZ0tbVlYWi4uLbyHyJk8CO3fuZFRUFENCQtirVy+mpqaSrH5gx4wZQ6VSSY1GI0tENj09nT4+PgwPD+eRI0dkS0m+GYcOHaK/v/8dCWDgwIG8evWqbPaPHTvGgIAA+vj4UKvV0s/Pj76+vnR0dJTsTp06VfYejjUkUKOUI1eegMlkumV5r2bJ8OWXX6ZKpWJYWBhPnz4tG4GbzWYWFxczOzubc+bM4bPPPisRQs02ffp0pqSk2LR8PH/+fEZHR9Pd3b3Oi6LmPvf19WVYWBjDw8Olf2tv/fv358KFC+soMjdpEsjOzqarq6vEhn379pWWsE6fPi3lCjg6Otq8LpucnMyIiAh6eXlx0aJFdm1qeuPGDe7YsYMbNmxg//796e3tLV3ssLAwHj16VDb7RqORw4YNu6PXUbNdvnxZFnu1UZPTERYWJisJzJ49m4mJibclgvXr10t6iD///LNdrqPZbGZSUpL08O/Zs4d6vZ5ms9lmewsXLpS0Nu6kPXBzTUvtv/n6+vLw4cN1yO9OJNAkAoP79u2TIstBQUGS3PS2bdswY8YM5OTkAAA6dOhgc0R2/PjxuHjxIl5//XVMnz79nsuOtU9mZWUlfv31V+Tl5eGZZ565ZwDR3d0d8fHxAIAnn3wSR44cQffu3aFSqfD3v/8dDz/8sGwR4EWLFmHDhg33/N6mTZswceJEWZdbNRoNWrVqhQceeABmsxmzZs2SpWW8TqfDkiVLMGbMGPj7+0vLhCUlJdi7dy/MZjNEUURmZibi4uJkr/asrKzElClTAADPPPMMoqOjZWuFHxcXB0dHR+j1egiCAG9vb4wZM+a2q0J79uxBjx49pN/d3NzQunVrREZG1us6NgkS6NixI7y9vXH9+nWYzWbk5+dj3bp1+Otf/4rS0lIA1Rpuq1atsjlyX1xcDFEUUVBQgOvXr8PDw+OWE2m1WiGKIkji/Pnz2LFjB9LT01FYWIjx48dj6NCh9doPURRhtVqRl5eH9evX4/z58wgLC8P06dPRu3dvWcVBCgoKql2/WqjR7gOqlytJYtGiRXjiiScQEhIim+0akNU5EQaD4ZZ9aQxCQkKgUCgQHByMsWPHQqPRIDMzE7t27ZK+ExQUhPj4eLv0bywvL8eRI0egVqvRtm1bWZdtY2NjMXfuXKxatQqtWrXCihUr4OzsfFsimz59um3kczv34H5v9YkJbNu2jZGRkVJGW215q86dO3P37t2yzPs+/fRThoSEUKvVslWrVpw1axYXL15cZxszZgw7dOjAzp07S5JX06dPb3Ak+urVq/z0008ZGRnJ4OBgDhs2jCtXrmRJSYnNx3Ez0tLSGBsbK1ULRkdHc9CgQUxMTOTs2bOlqYirqyvnzZsnu/3aacP9+/eXpWTZYrHw22+/ZUBAAJVKpeQKK5VKenh4MCYmhps3b7ZLgZfFYuGGDRsIgD169JBtVepm5OfnyxZERVOeDgBAr1698N133yExMRG7d++GwWBA69at0bdvX0ydOhXe3t6yuLCTJk1C27ZtsXz5chw9ehTff/89CgsLUVFRAX9/fwQEBODBBx9Ey5YtERoaiu7du6NDhw7w8vJqkB2j0YijR48iMTERhYWFCA8Px7hx4/Doo4/a5a0VExODb7/9Fh988AFcXV3x4osvIjQ0FEqlEgUFBVCpVMjNzUVERASGDh0qu/3aSE1NxZEjR9C7d2+bXHSlUomnn34aGo0GP/30E6qqqkASDg4O+POf/4xevXrJorJ8O4iiiNTUVADVGasuLi6y2wBgs8RYfdBkSEAQBLRp0wYrV67Eli1bIIoiYmJiEBkZaXPHlZvRpUsXREZG4ty5czCbzcjMzERhYSFiYmIQEhIiZWtptdpG32DfffcdvvvuOxQWFsLBwQEdOnRAp06d7Np2PCIiAp999tktnz/wwAN4++237Wa3NnQ6HR5//HHZHhqVSoUhQ4ZgwIABdT6vSVG2FwRBgL+/PxwdHfF///d/9+VhtReaZHuxPwKmTZuGf/zjH6iqqsIrr7yCCRMmSGKaf0RUVFQgLS0NRqMR7du3h4uLi10FUe0NkigoKEBKSgoefvhhWVOE7YU7tRdrJoHfCYWFhfj8889RUlKCl156CQ8++ODvvUvN+IPjTiTQZKYDfzR4eXlh6tSp0hy2Gc34vdBMAr8j5I5lNKMZjUHT6ZXdjGY0wy5oJoFmNON/HM0k8F8Kg8GAwsJCWK3NAk7NsC+aSeC/FP/+97/RrVs3NCs2N8Pe+EMEBg0GA8rKykBWt19ydnZuUu23bobRaMTPP/+M4uJiKc++qUuDkURWVhaOHTuGnj17wtXV9ffepWb8hiZPAhaLBV988QV++eUXiKIIhUKBmJgYTJ482W6pnPbGyZMnceTIEfTo0QM+Pj52JwBRFFFcXIyLFy9i9+7dAKqr2B555BHZbFdWVmLp0qX46KOP8M0339S7yKo+IAmTyYSysjKcPn0aBw8ehCAI8PDwQNu2bdGuXbsmtRJTWVmJ77//XiLLixcvoqSkBCkpKQCAhx9+GO3atYO7u7ssWZF/CBL48ssvkZ6eLn12+PBhODg4oF+/fmjZsqVsPQfvB8rLy/H999+juLgYU6dOtdvNK4oiKioqkJmZiX//+99IT0/HpUuXkJGRUVPUhW+//Rbh4eGy2MvPz8eRI0cgCAI2b96MAQMGyEICRqMR69atw/bt21FcXIxz584hKytL6jrs7++PwYMH4/HHH7dbXYacsFgs2Lp1K2bPno0ff/wRoiji0qVLKC0txdWrVwEAfn5+eOKJJ/Daa68hMDDQZiJoOk/HTTAYDFixYgU2b96Ms2fP1vlbbm4u/va3v8FoNGLatGn1JoFr164hLS0N77777j0Dcq+//jr69evX6P2/HUjizJkz2LRpEzp16oTw8HC75L8bjUYcOHAA77zzDq5evYrr16/DaDTWeeufOnUKX3zxBRITE2VpaGo2m6Vmpjdu3JCllBgAFi9ejI8//liKnWi1WnTt2hUBAQG4fv06jh07hiVLluDrr7/G3LlzMX78eFns3g4mkwlZWVk4fvw4zGYz1q9fj7i4OIwdOxYeHh71+v9HjhzBokWLUFBQgM2bNyM6OhoODg7o1KkTHnnkEZSWlmLz5s34+uuv0bZtWzz33HO23yO3Ky2831tDxEdEUWRZWRk//fTTOtJZYWFhXLlyJY8cOcIFCxbQ2dmZXbp04fHjx+vV5eXw4cOMjo6mi4vLLe2ibrctW7as3vtcXxQXF3PChAnUaDTcu3ev7N1wzGYzly9fzqeffpru7u51lHkUCgWDg4M5aNAgduzYkUqlkn379pVN1/HMmTOMjo6mQqHgyJEjZSuPXb9+vdTn7+9//zuzsrJYXl5Og8HA8vJy5uTkcMCAAVSr1fTy8pLFJlndqam0tJR6vZ5bt27lrFmzGB8fT29vb7q6utLV1ZUqlYpeXl786KOP6jXm1atXOWzYMKrVanp4eHDz5s2srKykXq+nwWCg2Wym2Wzm9u3bGRISwoSEhAZdHzTl9mK1kZ+fz759+0p915RKJRMSElhaWip14i0sLGRCQgKVSiVnzJhRL8mr4cOH1+vhr9mcnZ3rvc/1QVVVFXft2kVvb2++/PLLsvcUKC8v5zPPPEO1Wi01/PTw8GDXrl05Z84cHjx4kEVFRbRYLMzIyODQoUM5evRoWfobmkwmrlu3TiLttLQ02Xr+iaJIi8VCi8VyR9IsLy9n586dqdFouG3bNpttZmRkMC4ujmFhYezcuTO1Wi21Wi01Gg1dXFw4e/Zs/vDDDzx79ixXrFjB1atX16unQXFxMefNm8exY8fy5MmTd+z4vGPHDvr7+zM8PLxBfRmaPAmIosjKykq+/PLLdfT5nn766TrNFGu+m5KSwvDwcGq12nq1aH766aelB1ytVlOn09Hd3Z3Ozs7S5uXlRaVSSQDUarX3HLMhKCkp4ahRo9iqVSsmJSVJn9dIaNvqFZw8eVLquafRaNirVy9mZGRID7nVaqXRaJRuPL1eL5te4I0bN/jcc89J1+3EiRN2F42tgcViYV5eHuPj4+no6Mi0tDSbxxs4cCBdXFzo4eHBtm3bctasWVy2bBmXLVvGX3/91S7S7jXisVarlXl5eUxISKBKpeLx48frfS7vRAJNIiZgMplQXFyMQ4cOYf369QCq+9Y99dRTeO+9925ZBRAEAUFBQejSpQu++eabBs0/nZ2dMWnSJPTo0QOhoaF14g2PPvoo4uPjIXfFo9VqxY4dO7Bu3TpMmTIFDz/8MIDquMeJEyewfv16PPnkk4iLi2t0YOvHH3+ExWKBQqHAI488gvnz5yMsLAwKhQJWqxUnTpzAggULMH78eMTHx8vWK08URVy4cAFff/21LOPVFxaLBXq9HikpKfjkk0+wf/9+tGjRAjExMTaNe+DAAeTk5ODjjz9GTEwMYmJi7B54rqqqQkFBAS5dugQA+OWXX5CSkoLQ0FD4+vravoJzO2a439vdPAGz2cyvvvqK8fHxddpxDxs2jBcvXrwjCxYWFnL06NFUKBQ8c+bMPVmyRhxj1KhRd2XWDh06yO4JlJaWMjIyklFRUTxy5AhFUWRBQQHfeecduru709fXl+7u7szMzGy0jXXr1klu6+zZs+v8LT09nR06dKBKpWK3bt1sPZw6sFqtTE5Olq5dRESEzR2hb4YoijSbzSwqKuL169d55coV7ty5k4MHD6aTkxO1Wi07duzIv//97zbZKSoqYrdu3bh//36Z9rx+OH36NLt27XpL1+Hu3bvz2LFj9dakQFP1BE6cOIHp06dLDUVdXFzQt29fvPPOOwgJCbktC5Kss6RSH3Tp0gXr16/HE088ccfv1LQZA6qluuQASaSlpSErKwuTJ09GTEwMDAYDPvroI6xcuRJjxoyBWq3Gp59+ikOHDuGhhx5qlJ2//OUv8PHxwdWrV3Hx4kWUlpZKCTurVq1CWloaSOLPf/6zLMd1JwwePLjBrdjuBb1ej7Vr1+Lw4cMoLy9HUVERUlJSUFZWBo1Gg/Hjx2PSpEn405/+ZJOdzz77DB06dEB4eLh0bzk5Ocmuf1kbJHHy5Ekp94Ek1Go1PDw8cOTIEfTr1w//+te/0LFjx0Z7JPf8X4IgBAJYDcAH1XPmlSQXC4LgAeB7ACEAsgAMJVksVD+ViwE8AUAPYAzJlMbsnF6vxz/+8Q/pwXN2dsaUKVPw/PPPIzAw8I4EUFBQgE8++QSHDx+ut60nnngCXl5eiIuLu6N7dfr0aUk30Gq14oMPPkDfvn3x4IMPwmKxoLy8HL6+vg1a/yaJL774Aq6urujRowcsFgvWrFmD77//HpMmTcKMGTPw4YcfQqVS2XQTOzs745NPPsGLL76IrVu34v3338e0adNAEtnZ2RBFEQ888ACmT5/eaBv1QUlJiez1EElJSZg0aZLUARqonhIKggClUom+ffsiPDzcJre5qqoK2dnZKCkpQWJiIoxGo5Sc9thjj6Fv3771WgZsKARBwP/93/9hyZIlOHz4MLKystCjRw888sgjSE1NxQcffICXXnoJS5YswSOPPNI4I7dzD2pvAPwAtP/tZxcAGQCiALwPYNZvn88C8N5vPz8BYBsAAUBnAEn3snGn6UBWVhYfe+wxaSkrPj6ex48fv6O7U1xczMzMTI4fP546nY4ajYaRkZGyuJ85OTkcNWqUpEUHgEqlkh06dODgwYOZkJDA7t27N7jrrNVqZdu2bRkeHs5Lly4xLS2N0dHRTEhIYF5eHouLixkZGcmOHTvaHKk3m80cMmQIFQoF3dzc2K9fP/bt25fu7u6Sq26Las7tcPN0YMiQIczPz5fVxoULFzhu3DiOHTuWzz//PJ999llGRkZK902nTp24bt06m4KRFouFJ06c4OLFi7l06VKeOHGCSUlJnDZtGsPCwvjuu+/apUt0DcxmM/Pz86UlUKvVSr1ezz179tDR0ZG9e/fmlStX7joG5FodAPAfAD0BnAPgx/9PFOd++3kFgGG1vi99707bnUhg8uTJ1Ol0VCgU7NOnD3Nycmgymep8x2Kx0GQy8erVqxw0aBAjIiIkWa0BAwbwxIkTNt3YBoOBqampHD16NLVa7T2XDlNSUho0vtVqZUxMDGNiYnj9+nV+8MEH1Ol03L17N0tLSzl9+nTqdDomJyc3+hhqIyMjgzExMdIDUjtPwNvbm+fOnZPFTg1uJgE/Pz+bYhu3g8ViYVlZmbSVlpYyKyuL7733Hlu2bEmVSkUfHx9+/vnnNtmxWq00GAzScl+NPubnn3/OXr16ccWKFbJK1h04cIDx8fHSEvjtUFRUxMDAQHp4eNxTQ1IWEkC1658DoAWAklqfCzW/A9gC4JFaf9sNoMPdxr0TCQwYMECSWJo5c2YdJi8rK+OhQ4c4YcIEhoaG0tfXt45mm6enJ1euXHkLaTQU+fn5HDNmDNVq9T0JYPDgwQ1WpK3xBIKCgrhmzRqOGjWKUVFR/Ne//sURI0bQ2dmZ77zzjmzLTlarlTk5OVy6dClbtmxZhwRUKhUjIyNlVdUVRZFZWVns3LmzlNdxP5YIRVGkyWSq48F5e3vbxY7ZbObly5c5atQorl69WjZvaty4cVSr1fzwww/vuERstVo5a9Ysuri48PDhw3cdz2YSAKADcAzAwN9+L7np78VsAAkAeAHAUQBHg4KCbrvTtUnA29ubHTt2lLaIiAi6urrWuYkVCgV1Oh2fe+45pqenyyI6kZmZyaioqFseeI1Gw0GDBnH06NFcv349T506xZKSkgbf3KIoctWqVVQqlZKktlKppFqtpqOjI2fOnCm7i05Wv0FqhFxri12qVCpOmzZNVsGO8vJyzpgxQ7LTkLVtObB+/Xq6uLjIJlh7JyxatIgjRoyQJb/CYDCwZ8+e9PPzY3Z29l2/+8wzz9DV1fWe016bSACAGsBPAKbX+szu04EaSea7CWhqNBo6OTkxMDCQsbGxNqvB3oyCggKOHz9ekp4GQJVKJWtKr8lk4uzZsxkYGEidTielm+7evdsuiSdk9Ty6RrmnNgkolUq6ubkxJydHNlsmk4nfffedpHL0/vvvU6/XyzY++f/fyLXPV81n27Ztk9J4BwwYIKvd2rBarezevTt37dplM8kZDAYOGTKEGo2Gc+bMoclkuu2YBQUFDAkJoZubm/1I4DdXfzWAj2/6fOFNgcH3f/u5702BwV/vZeNOJPDyyy/T09OTWq22zoOv1Wrp6enJ8PBwTp48mStXrpQtx/1OmDNnjkQCffv2lT2v32q18saNG/zXv/7FYcOGceHChXY9pruRgJeX1z2DTA1FTk4O+/TpQ4VCQRcXF37wwQc2T9VuHn/mzJnctm0bS0tLee3aNZ47d44LFiygh4cHFQoFAwICWFBQIJvNm3Hy5En27t1bFok1sjqLtFOnTnRycuKkSZOYnZ1Ng8HAqqoqWq1WVlRUcNu2bdRoNAwKCrpnUNoWEnjkt5v/OIC037YnAHj+5upnAtgFwIP/nzQ+BXABwIl7xQN4FxIoLy/nqlWrOHHiRHbp0oWdOnVit27dOH78eP7zn/9kVlYWDQbDfXEta0jA3d2diYmJ99WdtQduRwI1+osTJkyQrcCnBqIocvPmzQwLC6NGo2FwcDCLi4tlG3/+/PlUKpV0d3dnQkIC27VrJwWIa2okNmzYIJu92qiJP3zyySecO3eurFOpffv2ccSIEXR0dGS7du2YmJjIH374gfv27ePEiRPp4eFBDw8PLl++/J5j3YkE7pknQPLgbw/27fD4bb5PAJPvNW59oNPpMHz4cAwaNEhS1VUqlfD09LzvnYPc3d2h1WoxduxYzJo1q8l3+nFxcUGXLl2wceNGPPTQQ4iNjUV4eDji4+MRHR0NZ2dnWe0JgoDHHnsMX3/9NX755RfExsbKauPBBx9EcHAwsrKysHnzZjg6OiIsLAwPPPAA+vfvj4EDB8om8FJYWAi1Wo0WLVpAr9fjwoULOHToEE6dOoW//vWvspRe16Bbt26IiYlBcHAwLl++jC1btmD58uW4fv06HBwcEBcXh2eeeQbPPPNMo200KxDVE5cvX0ZycjK6dOlyX7r92BtWqxXZ2dlITk5GWFgYQkND0aJFiybVgKU29Ho9jh8/josXLwKozuQLCgqCq6srHnzwQVkFXi5cuCDVj5w/fx7Z2dnQ6XQYOnQoYmNj7SKvZjQaodfrkZeXh4KCAly9ehVarRZt27ZFy5Yt63U/NsuQNaMZMqGqqgqnTp3Cl19+CW9vb/Ts2RMRERFwdnb+rybRZhJoRjNkhMViQWVlJVQqFRwcHP6rH/4aNGsRNqMZMkKlUv1hOiY36w40oxn/42gmgWY0438czdOBZvzhQBJVVVUwmUxQqVTQarVNfjXHnmgmgWbYFSRhtVphMBgAVC/d2bP3v8lkwrVr17Br1y5s3boVkZGRmDlzJlq0aGE3m00dzSTQDLtAFEWUl5fjzJkzOH36NE6dOgWFQoEhQ4bg4Ycftouoislkwo8//ojly5cjOTkZ5eXlOHbsGJ5//nm4uLjI6g2Ulpbi+PHjKC0thUqlgpeXFx566CG0aNHCLloRQPXx5efnw2KxwGKxIDc3F2q1Gv7+/ggMDLRfZ6H/VpDV0lMWiwV5eXkoLS2FKIrIzs7GtWvXEBsbi7Zt28LJyen33tVGobKyEhs3bsS1a9fQu3dvtG7d+vfepXojNzcX6enp2Lx5M7Zv346cnBwAgFKpxO7du/Hqq6/iqaeekpUITCYTVq5ciY8//hh5eXl49NFHUV5ejrCwMLi7u8tKABcvXsTChQuxbt063LhxA0qlEoGBgejXrx9mzZoFf39/We2RRFFREf71r39h+/bt0Ov1MBqNSEtLg6OjI2JiYtCrVy8899xzjetudLtc4vu9NUR3oKqqiqdPn+aiRYs4adIkDhs2jHFxcYyOjmZUVBQ9PT2pUqnYrl077tmzR/ZCn9tBFEWWlpbKmm+/detW+vj4sE2bNjxw4IDs3XhqUFVVxfz8fKakpHDXrl1cvny5zaWwq1atYkhISJ2iL29vb6nhS1BQED///HPZqj1FUeS+ffvo4uJCtVrNIUOGMCMjgxcuXGBubq6slZhFRUWMj4+nIAi3bGq1msOHD5e1sQhZ3dNi9OjR9Pb2pk6nY1RUFOPi4vjKK69wyJAh7Nq1K52cnPjaa6/d1Taauu5ADYxGI1esWCFd8DuVGKtUKs6dO1f2C1KD8vJyFhYWcvPmzXzrrbcYHx/Pffv2yTZ+jb7CG2+8QYPBIGvFHVldtVhSUsKvv/6a8fHxDA0NZUBAAN3d3blixQqbxv7oo4/qVH4qlUqOHTuWGRkZfPXVV+nu7k5vb29u2rRJlmM5duwYQ0NDKQgCQ0JCuHv3bruR/9q1a6VORXPmzOHTTz/Nbt26Ua1WUxAE6nQ67tu3T1ZxlWXLllGr1TI4OJifffYZs7OzmZ+fz/LychYXFzM/P59z587lG2+8cVfCuxMJNMnpgMlkQmVl5V2/o9PpEBQUZFMet9VqxalTp7B8+XJUVVUBgOTmJScno7CwEHq9HiaTCe3atYOPj0+jbd0MvV4PURTRu3dvODg4yOZe1ghczpgxAxcvXkROTg7Ky8urbwaVCoIg4Pr16zCZTDh//uAscdcAABEcSURBVDy8vb3xwAMPNMjG8OHDcfr0aXzxxRcAAB8fHwwcOBAPPfQQXn/9deTk5ODf//430tLS0K9fP5uPbd++fcjKyoJOp8Pf/vY3dOvWzW7z8vbt22Po0KGYMWMGWrduDVEUYTab8dFHH2HhwoWorKzEwoULbdKIuBl79uyBTqfDu+++i8GDB0OtVt9yzmbNmgVRFBtn83bMcL+3+ioQFRcXc+7cuVJjzJvr4NVqNTt37szVq1czIyPD5rdnUVER+/TpI5Xb3tyXr2ba8e677zInJ0fW8uLnn3+er776qqyejCiKXLJkCbVarXQcQUFBfPfdd/nrr7/SYDCwsrKS27dvp4uLC3U6HefNm9eobklVVVXU6/WSjl7tN/OZM2cYGBjI3r172/zGLi4uZlxcHBUKBTt16sTy8nKbxrsXamTPbj4neXl57NWrFwVBoLe3t2xTEKPRSJVKxV69etk8TUNT9wSuXLmCoUOH4tdffwUAKBQKaLVa9OnTB7GxsejZsyc0Gg0iIyNlYWCSqKyshNFohEajgbe3N5ydnaU3zMCBAxEaGoqBAwfeooBkK9LT03Hs2DH07dtX1jfalStXMGXKFGi1WowcORIvvvgiIiIi4OrqCkEQYDQa8fXXX2Py5MlQKBT485//jIEDBzb4TS0IAlQq1R2j1c7OztBoNNi5cycsFkujS29JYsmSJUhOToZCoUBcXJxUYs7fliZFUcT169eh0WhgtVrh6+tr0zmtaWNeY6PGQ1Sr1VKgc/LkybJ5bmPGjAFQrbZ8/fp1VFZWwt3dHSqVCgqFQh47t2OG+73VxxNYsmRJnbd/VFQUN2/eLGsDh9qorKzk1KlTqVAo+FuBU72VXmxBVVUVv/rqK3p6evKNN96QNRZQWlpKQRDYsmXLOp6LKIqsqKjgyy+/TJVKRY1GwzFjxjA/P98uzVPy8/PZrl07KpVKHjp0qNHjmM1mtm3bloIgMDQ0VGpZZjabmZuby8WLF3PQoEH09vZmcHAwAwMDuWPHDlkCuKIoMi8vj0OHDuWAAQPYr18/Ojs7U6VS8ejRo7Kdt1atWtXxQv39/ZmQkMClS5cyMzOzQZ4imnpg8NChQ/T09JRIwNfXl3PnzmVWVpbsffhqBE1r3H5PT0+OHDmSu3fvZllZmV27CmVlZbFXr14EwPfee0/Wfon79u2jIAjUaDQcPXo0c3NzWVVVxaKiIk6bNo2Ojo708/PjuHHj7Nbb0Gq18uTJkwwICKBCoeC6desaPVZtEoiLi5M++/nnn9mpUyc6OjrSw8ODWq1WiuA7Ojpyzpw5d2zhXV8YjUbOnDmTSqVSGtvb25tDhgyRtYVZv3796OPjw/j4ePbu3ZtRUVEMCwuji4sLfX19uWjRonq3M2vyJFBVVcUPP/yQffv2ZZs2bSRdvd69e/PUqVOyPpiiKDInJ4cDBw5ku3bt6OvrS41GQw8PD86cOZPnzp2z20NSQwKenp5MSUmRNcpdWVnJXr16UaVS0dnZmSNHjuShQ4f45ptv0sXFhR07duS6detk7W1otVpZXFzMgoICXrhwgUlJSVKLbIVCwfT09EaPXVBQwFatWlEQBL711lu0Wq3MyMhg165dKQgCw8PDuWjRIs6aNYtjx46lq6srBUGgq6srFy9ebNO5LSsrY0hISJ0lwoSEBGZkZMh6zVJTU7lu3ToWFRWxtLSUKSkpPHjwIN9//31GR0fTycmJY8aMqZfNJk8CZLVc9uXLl5mUlMTp06czODiYKpWK/fv357Fjx+o1Rn1RIwGdnp7Obdu28bXXXmNgYCAVCgXj4uKYl5cnq70anD59mu3ateP8+fPtsrx56dIlvv322/Tw8KCTk5NEchEREUxKSpKF3EpKSnjhwgVmZGRw9erVHDduHEeOHMnu3bszPDyczs7OkkeXmJgo9YpsKFJTUxkYGEhBELhjxw6aTCa+9dZbVKvV9Pf359KlS1lZWUmDwcCKigpOnjxZemBHjRpl07EajUZ++umnkp6CIAgMCAjg/PnzZZN0vxssFgsPHDjA8PBwqlSqepHpH4IEalCzxn38+HGOGjWKLi4u7N27t13685PVnkFZWRn37NkjEcFLL71kF1s7duygk5MTk5KS7DI+SUnZqPZb7JNPPpElvnL9+nW+8MIL7NatG+Pi4m5Zybl5c3JyYo8ePThhwgT+85//bFDz0Ro1Z0EQuGzZMl6/fp2hoaH08fHhRx99dMvUbdOmTbKRAFndFvzAgQOMjo6WxnVxceHu3bv/X3vnH9P0ncbx91Pazlo2ZDhA0EFhzjLBoDsbxzb/WKb8+kMvm4vJlnOJ04g6vOmR7OIyzWYG53b+QeIuaCTjbqjZojfd4sX7Md0xE+W824TJpBNORIMgk4JAEdq+74+236tKRaD4bcP3lXzSL59+/fadp98+fT6fPj7PAylE63K5uGLFChoMBr7yyisjnh9xTqC5uZkHDx5kW1vbPQ1qt9uZnZ1Nk8nEjz76aExv7K1bt9jd3U2Hw6GM4TbkBgcHWV5ezqlTpzI2NjbkCTzd3d188803CWBCnYDH46HdbqfNZlNu3p07d4bECRQXF9+WKJSYmKj0Gwgc06dP57Rp025L7oqPj1eSiu4nvA3cE7DZbKyrq2NaWho3bdo07E+FdrudZrM5ZE6A9N47J06coM1mUyKCVatWhWRJ0NvbO+JmdFVVFU0mE7Oyska8XsQ5gZMnTzIzM5NFRUX3DBXdbjdramoYHR3NhISEMa1n9+zZwyeffJIpKSlMSUlhamoqly9fzs2bN/Po0aM8deoUv/32W548eZIlJSU0mUw0Go2sra0d9Wvdi0uXLnH+/PlMT08PeU/AQPxOwB9K+9fJoWg/5u8aZTab+frrr7OpqYmff/45jUaj8oF//vnnabfbeeHCBVZXVzM7O5sxMTFK2fOioqL7igg8Hg/Lyso4ZcoU6vV6Wq1WpqWl8csvv7zrXIfDwSVLllCn0xFAyJwA6d2v+uSTTxgXF6dkDY63eUtbWxsLCwv56aefBj2nqamJL730Eg0GA8vLy0e8ZsQ5gcuXL9Nms9FgMLC4uPieob7b7eaKFStoMpnG9JNTRUXFbd9Kfo+u1+uVDUj/8KcqWyyWkDWZ8PPdd99RRLh169YJbTwyNDTEI0eO3JX7XltbO+4wdt26dTQYDIyNjeXKlSv57LPPKvX/dTodFy1axAsXLtDtdtPj8dDtdnNgYIC1tbV84YUXlCYh99vdua+vj4WFhcp75u+4nJqaettITExUfu3xJ0GN5dva4/Hw559/5hdffMG1a9dy27ZtPHbsGEtKShQnEBUVxYaGhlFfO5APPviAZrOZZWVlw2pwOBxKk1y9Xn9fDi3inIDb7WZpaamyi5yZmcl9+/axo6ODTqeTg4ODymhubmZ8fDynTJnCAwcOjGiMO3G5XOzu7mZnZ6fSrNNqtTIjI4OpqamMiYlhdHQ0H3/8cWZkZLC0tDTkG4O9vb1cv349U1NTefr06ZBe+05u3ryptLh66623WFhYSAAsKysb97djfX29sm9y5//l8Od2DLeMcrvdbG5u5quvvsrNmzePqs13XV0d8/PzGRMTQ5PJpAx/Pr9Op6PZbGZeXh6rqqrY398/JgfQ09PD999/X1lSBBspKSnjtuOOHTtoNpu5ceNGdnV1cWhoiC6Xi/39/Txz5gxzcnKUvIHt27ff1zWDOYGwzRjU6XQoLi5GS0sLPvvsMzQ0NGDNmjUwm83IyclBXFyccm5NTQ06OzthNBrHVDwiKipK+XdxcXHYsGEDNmzw9k9xOp24fPkySCI5ORnR0dEhr1JDEjdu3EBNTQ2sVitmzJgR0usPh16vR0pKCnJzc9HV1QUAIamXb7Va8fLLL+Pw4cNwOp0QEUydOhXPPPMM3nnnHcyZM2fYjD2dTgeLxYLKykoAGFUWYVZWFr766iv09vbi+PHjynxtbS1qamowc+ZMlJSUYOHChWPOFnS73di9ezd27doFg8GAmJgYDA0Nob+/HwaDAQaDQakrUFpaOu5Mz3nz5sFisaCiogJff/01XnzxRTz99NM4dOgQTp06hf7+fiQmJmLbtm1YvXr1uF4r7EuO9/X1Yf/+/fj4449x/vx5uN3uYc8TEaSlpeHs2bMRV0VmaGgI7733Hnbs2IH169fjww8/nNA6CF1dXZg7dy4GBgZQUFCAc+fOobW1FcePH4fNZhu3k3O5XGhsbERraysMBgNmz56NpKSkiCjLHQyHw4HXXnsNGRkZsFqtIIn29nbU19cjISEBycnJiI2NRX5+PpKSksbtBFwuF1paWvDuu++isbERFy9eVNKVzWYz8vLysG7dOmRmZt63w4zYkuNmsxlr1qzB4sWLUVFRgevXr6OlpQVXrlxBT08PHnvsMTidTixcuBBvvPFGyNtnPQhEBMnJycjKysLSpUsnvBCK0WhEQUEBqqursX//fiQlJWHLli2YN29eSKIcvV6PuXPnRlQhlJEwGo3YsmULcnJyQtrNKBh6vR7p6emorKzE1atXcezYMeXDPmvWLOTk5OCRRx4JyfsV9pFAIAMDA0qJpfb2djgcDsTHx2NgYABPPPEEkpKSHoDa0EMSHR0daGtrw5w5c2AymSb09TweD65du4a9e/fim2++QW5uLoqKiiIugtIYHVoHIo3bIAmn04n29nbExsZOaG08jfAgYpcDGhODf8POYrGoLUVDZTTXr6ExydGcgIbGJCcs9gRE5DqAPgCdamsZJdOhaZ5oIk0vEL6aU0jeVTAyLJwAAIjI2eE2LcIZTfPEE2l6gcjTrC0HNDQmOZoT0NCY5ISTE9ijtoAxoGmeeCJNLxBhmsNmT0BDQ0MdwikS0NDQUAHNCWhoTHJUdwIikicijSJyUUTeVltPMETkkojUi8j3InLWN/eoiPxNRH7yPcaqrLFSRDpE5IeAuWE1ipdyn93rRGRBGGneLiJXfbb+XkQKAp77rU9zo4jkqqR5loicEJEGETkvIpt882Ft66AMV2nkQQ0AUQCaAKQBMAI4B+ApNTXdQ+slANPvmNsJ4G3f8dsAfqeyxsUAFgD4YSSNAAoA/AWAAFgE4EwYad4O4DfDnPuU7x55CIDFd+9EqaB5BoAFvuOHAdh92sLa1sGG2pGADcBFks0kBwEcBLBMZU2jYRmAKt9xFYDlKmoByX8CuHHHdDCNywD8kV5OA5gmIhNf0ugOgmgOxjIAB0neIvlfABfhvYceKCTbSP7Hd3wTwI8AkhHmtg6G2k4gGUBrwN9XfHPhCAH8VUT+LSJrfXMJJNt8x9cAhK43eegIpjHcbb/RFzpXBiyzwk6ziKQCmA/gDCLU1mo7gUjiOZILAOQD2CAiiwOfpDfuC+vfWyNBo48/AEgHkA2gDcDv1ZUzPCISDeAQgF+T7Al8LoJsrboTuApgVsDfM31zYQfJq77HDgB/hjcMbfeHdb7HDvUUBiWYxrC1Pcl2km6SHgB78f+QP2w0i4gBXgdQTfKwbzribA2o7wT+BWC2iFhExAhgJYCjKmu6CxExi8jD/mMASwH8AK/WVb7TVgE4oo7CexJM41EAv/LtXC8C0B0QyqrKHevlX8Jra8CreaWIPCQiFgCzAdSqoE8A7APwI8ldAU9FnK0BqN93AN6dUzu8O71b1dYTRGMavLvS5wCc9+sEEAfgHwB+AvB3AI+qrPMAvOHzELzrztXBNMK7U73bZ/d6AL8II81/8mmqg/cDNCPg/K0+zY0A8lXS/By8oX4dgO99oyDcbR1saGnDGhqTHLWXAxoaGiqjOQENjUmO5gQ0NCY5mhPQ0JjkaE5AQ2OSozkBDY1JjuYENDQmOf8DGfdqt0iIFBkAAAAASUVORK5CYII=",
+ "text/plain": [
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ "Hi there! This is the second notebook in the ClearML getting started notebook series, meant to teach you the ropes. ClearML has a lot of modules that you can use, so in this notebook, we'll contiue the progress that we made in our first notebook: Remote Agents.\n",
+ "\n",
+ "You can find out more details about the other ClearML modules and the technical specifics of each in our documentation.\n",
+ "\n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ "Hi there! This is the third notebook in the ClearML getting started notebook series, meant to teach you the ropes. In the last notebook we set up an agent within the Google Colab environment. Now it's time to make that agent run our task! We're going to clone our first, exisiting, experiment, change some parameters and then run the resulting task remotely using our colab agent.\n",
+ "\n",
+ "You can find out more details about the other ClearML modules and the technical specifics of each in our documentation.\n",
+ "\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "U7jM_FiPLnvi"
+ },
+ "source": [
+ "# 📦 Setup\n",
+ "\n",
+ "Just like in the other notebooks, we will need to install and setup ClearML.\n",
+ "\n",
+ "**NOTE: Make sure the agent is still running in the other notebook, when running this one!**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "H1Otow-YE9ks"
+ },
+ "outputs": [],
+ "source": [
+ "%pip install --upgrade clearml\n",
+ "import clearml\n",
+ "clearml.browser_login()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "vneMjf39Z3Uh"
+ },
+ "source": [
+ "# 🔎 Querying our Task\n",
+ "\n",
+ "If we want to remotely run a task, we first need to know which one!\n",
+ "Getting the Task ID from the webUI is quite easy, just navigate to your project, select the task you're interested in and click this button to copy the Task ID to your clipboard:\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "0TazW5dSZ2w1",
+ "outputId": "0b238e0d-32b8-4a9d-e4bf-141b798e6806"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "('TB Logging', '0bfefb8b86ba44798d9abe34ba0a6ab4')"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# from clearml import Task\n",
+ "\n",
+ "# task = Task.get_task(task_id=\"YOUR_TASK_ID\")\n",
+ "# task.name, task.id"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "hgRieZmvgIPS"
+ },
+ "source": [
+ "However, we can also query ClearML using the Python SDK. Let's search your ClearML history for any task in the project `Getting Started` with the name `XGBoost Training` (both of which we used in tutorial notebook 1). ClearML should then give us a list of Task IDs that could fit the bill."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "uQSAOb_AgF78",
+ "outputId": "81a2d3bc-b4aa-4af3-b3fe-d9f3fcec6a7a"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "XGBoost Training 1c7f708a976b413da147b341c54f862d\n"
+ ]
+ }
+ ],
+ "source": [
+ "from clearml import Task\n",
+ "\n",
+ "# This will get the single most recent task fitting the description\n",
+ "# ⚠️ NOTE: Make sure you ran the XGBoost Training cell from notebook 1 and that the project and task name exist!\n",
+ "task = Task.get_task(project_name=\"Getting Started\", task_name=\"XGBoost Training\")\n",
+ "\n",
+ "if not task:\n",
+ " print(\"⚠️ WARNING: In order to make this work, you will need the XGBoost Training task from Notebook 1. Make sure to run the cell linked below in the same ClearML account!\")\n",
+ " print(\"https://colab.research.google.com/drive/1oHiW1qwLVvazk3qFZWBULfpciPEQp8kc#scrollTo=CSaL3XTqhYAy&line=5&uniqifier=1\")\n",
+ "else:\n",
+ " print(task.name, task.id)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "gRz3FQFdjKcC",
+ "outputId": "63148b61-136c-4cd5-fc61-5829c713c831"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('XGBoost Training', '959c353c183245d5b85bfb2958e49f5d'),\n",
+ " ('XGBoost Training', '6810dd7c2c944099a4bc544a4c5079ff'),\n",
+ " ('XGBoost Training', '818894e032a44e7c9bafd758ee9fae7b'),\n",
+ " ('XGBoost Training', '762d13fc58ad4c5e8ae3695195b00d97'),\n",
+ " ('XGBoost Training', '3bf2b49800c24fd7b16f64f8c70cef83'),\n",
+ " ('XGBoost Training', '95ead34d9ce94955b2998b1de37f4892'),\n",
+ " ('XGBoost Training', '1c7f708a976b413da147b341c54f862d')]"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# This will get all tasks fitting the description\n",
+ "tasks = Task.get_tasks(project_name=\"Getting Started\", task_name=\"XGBoost Training\")\n",
+ "[(task.name, task.id) for task in tasks]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "id": "nyTBIPxUjutj",
+ "outputId": "36f3808b-4386-4702-898c-8bb3fee0246a"
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ },
+ "text/plain": [
+ "'1c7f708a976b413da147b341c54f862d'"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Let's set our task ID based on the results here so we can use it below\n",
+ "task_id = task.id\n",
+ "task_id"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "FLmjZG8gj2WO"
+ },
+ "source": [
+ "# 👥 Clone and Enqueue Task\n",
+ "\n",
+ "Now that we know which task we want to run, we can start by cloning it. Cloning a task makes it editable. Now we can override any of the parameters or runtime configurations. For example, here we can set a different `max_depth` by specifying the parameter name as well as the section.\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "OtYJyyY7jzpl",
+ "outputId": "3dbd436b-648c-4c73-bbfd-1eeba10e47e2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Clone the original task and keep track of the new one\n",
+ "new_task = Task.clone(source_task=task)\n",
+ "# Override any of the parameters!\n",
+ "new_task.update_parameters({\"General/max_depth\": 3})\n",
+ "# We can even rename it if we wanted\n",
+ "new_task.rename(f\"Cloned Task\")\n",
+ "# Now enuque it for the colab worker to start working on it!\n",
+ "Task.enqueue(task=new_task, queue_name=\"default\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "id": "3vxyEaJNk_KV",
+ "outputId": "ddf31b3e-1cf9-498c-9440-5fbf18802be8"
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ },
+ "text/plain": [
+ "'in_progress'"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Let's take a look at the status\n",
+ "new_task.status"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "hx4WqzfDIPTl"
+ },
+ "outputs": [],
+ "source": [
+ "from time import sleep\n",
+ "# Now we can set up a loop that waits until our task is done!\n",
+ "# If you have enabled notifications on Colab, it will even let you know\n",
+ "# when the ClearML task is done!\n",
+ "while new_task.status not in [\"success\", \"failed\"]:\n",
+ " if new_task.status == \"draft\":\n",
+ " print(\"Task is still in draft mode! You have to enqueue it before the agent can run it.\")\n",
+ "\n",
+ " print(f\"Task is not done yet! Current status: {new_task.status}\")\n",
+ " sleep(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "mefZhEBVlOx-"
+ },
+ "source": [
+ "When a task is enqueued, it has 4 possible states:\n",
+ "\n",
+ "- Pending (the task is waiting to be pulled by a worker)\n",
+ "- In Progress (the task is pulled and being executed)\n",
+ "- Completed\n",
+ "- Failed\n",
+ "\n",
+ "You can keep track of this status by using the `.status` property of a clearml Task instance. If you only have the Task ID, you can always get the task object by running `task = Task.get_task(task_id=\"your_task_id\")`\n",
+ "\n",
+ "In the webUI the status of a task is pretty visible:\n",
+ "\n",
+ "\n",
+ "**NOTE: The first time running a task can take quite a long time because the agent has to install all of the original packages and get the original code. Everything is cached however, so it should be faster next time!**\n",
+ "\n",
+ "If everything went well, you should now see the colab worker start working on the task:\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Ejr6wqZxmqil"
+ },
+ "source": [
+ "# 🧐 Inspecting the results\n",
+ "\n",
+ "Now that the task has completed successfully, you can now view its results just like any other experiment in the experiment manager!\n",
+ "\n",
+ "\n",
+ "\n",
+ "You can of course also select both the original and the cloned experiment and compare them directly in ClearML!\n",
+ "\n",
+ "\n",
+ "\n",
+ "Remember that the SDK is quite powerful too, so almost any piece of information that you can see in the webUI, you can also get from the SDK to build automations onto.\n",
+ "\n",
+ "For example, we could get the reported scalars right into our python environment with just a single function."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "C86NZAopnsJE",
+ "outputId": "3e7e539a-7069-45a5-d534-d97debb4dff8"
+ },
+ "outputs": [],
+ "source": [
+ "new_task.get_reported_scalars()"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "yu1X2tJNoIQ-"
+ },
+ "source": [
+ "# 🥾 Next steps\n",
+ "\n",
+ "Now that you know the basics of ClearML, you can get started with running your own experiments!\n",
+ "\n",
+ "## 📺 Check out our [Youtube Channel](https://www.youtube.com/@ClearML)!\n",
+ "It holds [detailed tutorial videos](https://www.youtube.com/watch?v=ZxgfHhPi8Gk&list=PLMdIlCuMqSTnoC45ME5_JnsJX0zWqDdlO), as well as [cool use cases and walkthroughs of real-life projects](https://www.youtube.com/watch?v=quSGXvuK1IM&list=PLMdIlCuMqSTmUfsAWXrK8zibwvxfduFPy)!\n",
+ "\n",
+ "[](http://www.youtube.com/watch?v=s3k9ntmQmD4 \"Getting Started\")\n",
+ "\n",
+ "[](http://www.youtube.com/watch?v=quSGXvuK1IM \"Day in The Life Of\")\n",
+ "\n",
+ "[](http://www.youtube.com/watch?v=0wmwnNnN8ow \"Training a Sarcasm Detector\")\n",
+ "\n",
+ "\n",
+ "\n",
+ "## 💪 Check out our examples\n",
+ "\n",
+ "We have very [specific feature examples](https://clear.ml/docs/latest/docs/clearml_sdk/task_sdk) as well as a repo full of [example scripts](https://github.com/allegroai/clearml/tree/master/examples)!\n",
+ "\n",
+ "## 📚 Check out our [documentation](https://clear.ml/docs/latest/docs)\n",
+ "\n",
+ "## 🔥 Check out our [blog](https://clear.ml/blog/)\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "collapsed_sections": [
+ "vneMjf39Z3Uh",
+ "FLmjZG8gj2WO",
+ "Ejr6wqZxmqil"
+ ],
+ "provenance": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}