{ "cells": [ { "cell_type": "markdown", "id": "87f83be1-1b48-47fb-bd1e-3cba2a864354", "metadata": {}, "source": [ "# Wasserstein distances" ] }, { "cell_type": "markdown", "id": "9cdd9436-3a31-4107-9925-509738df06df", "metadata": {}, "source": [ "Consider data $y_{1:n}$ with $y_i\\in\\mathbb{R}^{n_y}$ and $n\\in\\mathbb{N}$ the number of i.i.d. replicates. A common distance measure would be e.g. a (weighted) Euclidean distance $\\|y_{1:n} - \\bar y_{1:n}\\|$ on the vectorized data space. However, due to inherent stochasticity, this distance measure suffers from high variability. Thus, as an alternative summary statistics can be used. However, these may lead to a loss of information.\n", "An alternative suggested by [Bernton et al. 2019](https://arxiv.org/pdf/1905.03747) is to operate on the full data by using low-variance Wasserstein distances in terms of empirical distributions of observed and synthetic data. These express distance via an optimal transport problem of minimizing, with respect to an underlying distance metric, the cost of transforming a given (discrete) probability measure into another one.\n", "\n", "The Wasserstein distance between discrete distributions $\\mu = \\{(x_i,a_i)\\}$ and $\\nu = \\{(y_i,b_i)\\}$ can be expressed as\n", "\n", "$$\n", "W_p(\\mu,\\nu) = \\left(\\sum_{i,j}\\gamma^*_{ij}M_{ij}\\right)^{1/p}\n", "$$\n", "\n", "where the optimal transport mapping is given as\n", "\n", "$$\n", "\\gamma^* = \\text{argmin}_{\\gamma \\in \\mathbb{R}^{m\\times n}}\n", "\\sum_{i,j}\\gamma_{ij}M_{ij}\n", "\\quad\\text{such that}\\quad\n", "\\gamma 1 = a; \\gamma^T 1= b; \\gamma\\geq 0\n", "$$\n", "\n", "where $M\\in\\mathbb{R}^{m\\times n}$ is the pairwise cost matrix defining the cost to move mass from bin $x_i$ to bin $y_j$, e.g. expressed via a distance metric, $M_{ij} = \\|x_i - y_j\\|_p$, and $a$ and $b$ are histograms weighting samples (e.g. uniform). See e.g. https://en.wikipedia.org/wiki/Wasserstein_metric for details.\n", "\n", "As the solution of the optimal transport problem may be computationally challenging for high-dimensional problems, [Nadjahi et al. 2020](https://ieeexplore.ieee.org/document/9054735) suggest to project multi-dimensional distributions to one-dimensional ones via linear projections, and then averaging 1d Wasserstein distances, which can be efficiently calculated by sorting, across various projections via a Monte-Carlo integral." ] }, { "cell_type": "raw", "id": "82dfc54b-2e59-4376-a68d-4b3769369d9c", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ "In pyABC, the distance function :class:`pyabc.distance.WassersteinDistance` implements a Wasserstein distance solving the exact above problem. Further, :class:`pyabc.distance.SlicedWassersteinDistance` implements the simplified Sliced Wasserstein distance problem above. These use the `POT library `_ to efficiently solve the underlying optimal transport problems." ] }, { "cell_type": "markdown", "id": "fed7e8b9-6681-470a-85f7-fa2d4ce4a6cc", "metadata": {}, "source": [ "In this notebook, we illustrate the use of Wasserstein distances in pyABC via a simple problem consisting of 100 samples from a 2-dimensional normal distribution. The problem is taken from the original paper Bernton et al. Besides Wasserstein and Sliced Wasserstein distance, we employ a basic Euclidean distance, as well as the mean over samples, which is here known to be a sufficient summary statistic of the parameter-dependent mean." ] }, { "cell_type": "code", "execution_count": 1, "id": "407183d8-5898-4d8b-ad9b-24c41241b53b", "metadata": {}, "outputs": [], "source": [ "# install if not done yet\n", "!pip install pyabc[ot] --quiet" ] }, { "cell_type": "code", "execution_count": 2, "id": "c46a0d24-696f-4149-8a9a-822fd9300c32", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import tempfile\n", "\n", "import pyabc\n", "\n", "pyabc.settings.set_figure_params(\"pyabc\") # for beautified plots" ] }, { "cell_type": "code", "execution_count": 3, "id": "8a9e5830-fcc3-43cc-b7c0-75dd4941de35", "metadata": {}, "outputs": [], "source": [ "p_true = {\"p0\": -0.7, \"p1\": 0.1}\n", "cov = np.array([[1, 0.5], [0.5, 1]])\n", "n = 100\n", "\n", "def model(p):\n", " mean = np.array([p[\"p0\"], p[\"p1\"]])\n", " # shape (n, 2)\n", " y = np.random.multivariate_normal(mean=mean, cov=cov, size=n)\n", " return {\"y\": y}\n", "\n", "data = model(p_true)\n", "prior = pyabc.Distribution(**{\n", " par: pyabc.RV(\"norm\", p_true[par], 0.25)\n", " for par in p_true}\n", ")\n", "prior_bounds = {par: (p_true[par] - 0.7, p_true[par] + 0.7) for par in p_true}\n", "\n", "class IdSumstat(pyabc.Sumstat):\n", " \"\"\"Identity summary statistic.\"\"\"\n", " def __call__(self, data: dict) -> np.ndarray:\n", " # shape (n, dim)\n", " return data[\"y\"]\n", " \n", "class SuffSumstat(pyabc.Sumstat):\n", " \"\"\"Sufficient summary statistic.\"\"\"\n", " def __call__(self, data: dict) -> np.ndarray:\n", " # shape (dim,)\n", " return np.mean(data[\"y\"], axis=0)\n", " \n", "# population size too small for practice\n", "pop_size = 200\n", "max_eval = int(2e4)" ] }, { "cell_type": "markdown", "id": "3c72d6fb-a269-4b4a-9632-e84994cae5d3", "metadata": {}, "source": [ "Above, we define the `IdSumstat` summary statistic, which simply exports the model output dictionary to the format expected by the Wasserstein distances, of shape (n_sample, n_y). Further, we define `SuffSumstat`, which calculates the sample mean as a statistic sufficient for the distribution mean." ] }, { "cell_type": "code", "execution_count": 4, "id": "aebc7a99-4c57-468d-b5a4-fc246a020148", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "ABC.Sampler INFO: Parallelize sampling on 4 processes.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Euclidean\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ABC.History INFO: Start \n", "ABC INFO: Calibration sample t = -1.\n", "ABC INFO: t: 0, eps: 1.96668229e+01.\n", "ABC INFO: Accepted: 200 / 421 = 4.7506e-01, ESS: 2.0000e+02.\n", "ABC INFO: t: 1, eps: 1.89629700e+01.\n", "ABC INFO: Accepted: 200 / 754 = 2.6525e-01, ESS: 1.8892e+02.\n", "ABC INFO: t: 2, eps: 1.85163522e+01.\n", "ABC INFO: Accepted: 200 / 1584 = 1.2626e-01, ESS: 1.7913e+02.\n", "ABC INFO: t: 3, eps: 1.81457514e+01.\n", "ABC INFO: Accepted: 200 / 3003 = 6.6600e-02, ESS: 1.8636e+02.\n", "ABC INFO: t: 4, eps: 1.78737832e+01.\n", "ABC INFO: Accepted: 200 / 5141 = 3.8903e-02, ESS: 1.8467e+02.\n", "ABC INFO: t: 5, eps: 1.76179843e+01.\n", "ABC INFO: Accepted: 200 / 9595 = 2.0844e-02, ESS: 1.7950e+02.\n", "ABC INFO: Stop: Total simulations budget.\n", "ABC.History INFO: Done \n", "ABC.Sampler INFO: Parallelize sampling on 4 processes.\n", "ABC.History INFO: Start \n", "ABC INFO: Calibration sample t = -1.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2-Wasserstein\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ABC INFO: t: 0, eps: 5.44317718e-01.\n", "ABC INFO: Accepted: 200 / 406 = 4.9261e-01, ESS: 2.0000e+02.\n", "ABC INFO: t: 1, eps: 4.74031246e-01.\n", "ABC INFO: Accepted: 200 / 467 = 4.2827e-01, ESS: 1.7944e+02.\n", "ABC INFO: t: 2, eps: 4.35432047e-01.\n", "ABC INFO: Accepted: 200 / 821 = 2.4361e-01, ESS: 1.6841e+02.\n", "ABC INFO: t: 3, eps: 4.09366836e-01.\n", "ABC INFO: Accepted: 200 / 1429 = 1.3996e-01, ESS: 1.7716e+02.\n", "ABC INFO: t: 4, eps: 3.91588141e-01.\n", "ABC INFO: Accepted: 200 / 2440 = 8.1967e-02, ESS: 1.6067e+02.\n", "ABC INFO: t: 5, eps: 3.79327759e-01.\n", "ABC INFO: Accepted: 200 / 4273 = 4.6806e-02, ESS: 1.1853e+02.\n", "ABC INFO: t: 6, eps: 3.66494717e-01.\n", "ABC INFO: Accepted: 200 / 7863 = 2.5436e-02, ESS: 1.5275e+02.\n", "ABC INFO: t: 7, eps: 3.57739340e-01.\n", "ABC INFO: Accepted: 200 / 13455 = 1.4864e-02, ESS: 6.2379e+01.\n", "ABC INFO: Stop: Total simulations budget.\n", "ABC.History INFO: Done \n", "ABC.Sampler INFO: Parallelize sampling on 4 processes.\n", "ABC.History INFO: Start \n", "ABC INFO: Calibration sample t = -1.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Sliced-2-Wasserstein\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ABC INFO: t: 0, eps: 2.87243802e-01.\n", "ABC INFO: Accepted: 200 / 429 = 4.6620e-01, ESS: 2.0000e+02.\n", "ABC INFO: t: 1, eps: 2.33893477e-01.\n", "ABC INFO: Accepted: 200 / 519 = 3.8536e-01, ESS: 1.6790e+02.\n", "ABC INFO: t: 2, eps: 2.03418021e-01.\n", "ABC INFO: Accepted: 200 / 731 = 2.7360e-01, ESS: 1.3050e+02.\n", "ABC INFO: t: 3, eps: 1.81446532e-01.\n", "ABC INFO: Accepted: 200 / 1383 = 1.4461e-01, ESS: 1.5666e+02.\n", "ABC INFO: t: 4, eps: 1.64347010e-01.\n", "ABC INFO: Accepted: 200 / 3221 = 6.2093e-02, ESS: 1.4760e+02.\n", "ABC INFO: t: 5, eps: 1.53222116e-01.\n", "ABC INFO: Accepted: 200 / 6944 = 2.8802e-02, ESS: 1.5430e+02.\n", "ABC INFO: t: 6, eps: 1.44552863e-01.\n", "ABC INFO: Accepted: 200 / 12416 = 1.6108e-02, ESS: 1.4268e+02.\n", "ABC INFO: Stop: Total simulations budget.\n", "ABC.History INFO: Done \n", "ABC.Sampler INFO: Parallelize sampling on 4 processes.\n", "ABC.History INFO: Start \n", "ABC INFO: Calibration sample t = -1.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Sufficient summary\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ABC INFO: t: 0, eps: 3.40015438e-01.\n", "ABC INFO: Accepted: 200 / 387 = 5.1680e-01, ESS: 2.0000e+02.\n", "ABC INFO: t: 1, eps: 2.15051170e-01.\n", "ABC INFO: Accepted: 200 / 500 = 4.0000e-01, ESS: 1.8806e+02.\n", "ABC INFO: t: 2, eps: 1.52028561e-01.\n", "ABC INFO: Accepted: 200 / 661 = 3.0257e-01, ESS: 1.6137e+02.\n", "ABC INFO: t: 3, eps: 1.09639426e-01.\n", "ABC INFO: Accepted: 200 / 949 = 2.1075e-01, ESS: 1.8386e+02.\n", "ABC INFO: t: 4, eps: 7.48269913e-02.\n", "ABC INFO: Accepted: 200 / 1471 = 1.3596e-01, ESS: 1.4311e+02.\n", "ABC INFO: t: 5, eps: 4.92227101e-02.\n", "ABC INFO: Accepted: 200 / 2763 = 7.2385e-02, ESS: 1.1454e+02.\n", "ABC INFO: t: 6, eps: 3.74878633e-02.\n", "ABC INFO: Accepted: 200 / 5427 = 3.6853e-02, ESS: 1.1259e+02.\n", "ABC INFO: t: 7, eps: 2.65445020e-02.\n", "ABC INFO: Accepted: 200 / 9210 = 2.1716e-02, ESS: 1.4337e+02.\n", "ABC INFO: Stop: Total simulations budget.\n", "ABC.History INFO: Done \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 12.4 s, sys: 1.71 s, total: 14.1 s\n", "Wall time: 2min 5s\n" ] } ], "source": [ "%%time\n", "\n", "# analysis settings of distance and summary statistics\n", "settings = {\n", " \"Euclidean\": pyabc.PNormDistance(p=2),\n", " \"2-Wasserstein\": pyabc.WassersteinDistance(\n", " p=2, sumstat=IdSumstat(),\n", " ),\n", " \"Sliced-2-Wasserstein\": pyabc.SlicedWassersteinDistance(\n", " metric=\"sqeuclidean\", p=2, sumstat=IdSumstat(),\n", " # number of random projections for Monte-Carlo integration\n", " n_proj=10,\n", " ),\n", " \"Sufficient summary\": pyabc.PNormDistance(\n", " p=2, sumstat=SuffSumstat(),\n", " ),\n", "}\n", "\n", "# runs\n", "db_file = tempfile.mkstemp(suffix=\".db\")[1]\n", "hs = []\n", "for id_, distance in settings.items():\n", " print(id_)\n", " abc = pyabc.ABCSMC(model, prior, distance, population_size=pop_size)\n", " h = abc.new(db=\"sqlite:///\" + db_file, observed_sum_stat=data)\n", " abc.run(max_total_nr_simulations=max_eval)\n", " hs.append(h)" ] }, { "cell_type": "markdown", "id": "daf9b9e7-e2b0-458a-b8eb-4c4d10af9cc1", "metadata": {}, "source": [ "The below analysis shows that, given a similar computational budget, the Euclidean distance gives a large variance (note that no scale or informativeness weighting can help here, as all values are and value on the same scale). In comparison, the Wasserstein and Sliced Wasserstein distance give values close to the distribution obtained via the sufficient summary statistic." ] }, { "cell_type": "code", "execution_count": 5, "id": "def40345-6f0d-4b48-8f41-786543d8fced", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAEGCAYAAADLxYlwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAACSxUlEQVR4nOzdd3gVVfrA8e/cmpvc9N4T0kPooaMgiqCi61qxLLZd+7quWNdd/a2uZS2ra1m7a197BQVBKQoC0gkhIQnpvdfb7/z+mCQQEki9CYHzeZ48wsyZmXPBc3nnlPdIsiwjCIIgCIIgjBzVSFdAEARBEAThZCcCMkEQBEEQhBEmAjJBEARBEIQRJgIyQRAEQRCEESYCMkEQBEEQhBF2XAVkixYtkgHxI37Ez7F/jnuiLYsf8dPnH0EAjrOArKamZqSrIBxmx44d7NixY6SrIYxCoi0ff0R7FoTjm2akKyAcv7755hsAJk+ePMI1EQRhsER7FoTjmwjIhKOKi4sb6SoIgjBERHsWhOObCMiEo7ryyitHugqCIAwR0Z4F4fh2XM0hE44vmzdvZvPmzSNdDUEQhoBoz4JwfBM9ZMJRrVq1CoAZM2aMcE0EQRgs0Z4F4fgmAjLhqJKSkka6CoIgDBHRngXh+CYCMuGolixZMtJVEARhiIj2LAjHNzGH7CQiW63Uf/gRDV98iexw9Fp+/fr1rF+/fhhqJgiCq/WnPTstFur/9z+af/zRxbUSBKGD6CE7SchOJ6XL7qR59WoAzJmZhNz/l2Nes27dOgDmzp3r6uoJguBi/WnPZXfdTfP33wMQ8n8P4it61wTB5URAdpJoWr6c5tWrCbrrTqwlJdS/9x6+l1+GPjb2qNekpaUNYw0FQXClvrbntu3baf7+ewJuvRXTjh1UPf0vvM89F5WHh4trKAgnNzFkeRKQHQ6qn3set9RU/K65hsCbbwZJovGrr4553YUXXsiFF144TLUUBMGV+tqeG774ApWHB/7XXUvArbfibG6m8euvh6GGgnByEwHZSaB140ZsJSX4X/8HJJUKTWAgHjNm0LR8BbJ89L1tV69ezer2IU5BEEa3vrRn2W6n5YcfMc6bh8pgwDBpIvrUFBo+/2KYaikIJy8RkJ0EGj79DLWfH57z53ce81y0EFtJCdb8gqNet2nTJjZt2jQMNRQEwdX60p5Nu3bhqK/Hc8EZAEiShNeZCzHv3Yutsmo4qikIJy0RkJ3gnBYLLT/9hNeihUg6Xedx9/SpALRt+/Wo106aNIlJkya5vI6CILheX9pz27btAHgcljzW83TlRa5l7VrXVU4QBDGp/0TXtmULssmE8bTTuhzXxcag9vfHtH07vpdc0uO155133nBUURCEYdCX9mzauRNdXBxqH5/OY7r4eDShobRu2YzvkktdWENBOLmJHrITXMu6dUgGA+7TpnU5LkkS7pMn07Zz11Gv/e677/juu+9cXENBEIZDb+1Zdjox7dqFYdLELsclScJ9yhRM23ccc86pIAiDIwKyE5gsyzSvW4fHrFmo9Ppu591SU7AVFeFsbe3x+q1bt7J161ZXV1MQhGHQW3u2lZTgaGzEMH58t3PuUyZjr6rCVlLiyioKwklNDFmewGylpdjLyvG47roez+vb97az5ORgmDix2/lpR/SqCYIwevXWni05OQC4JSZ2O2eYPAVQcpTpIiOHvnKCIIiA7ERm2rEDAPcpU3o8r09UAjJz9oEeA7KzzjrLZXUTRh9JktTANqBUluXFI10foX96a8+WnFxAmTN2JH1CPCovL0zbt+Nz/vmuqJ4gnPTEkOUJrG37DlRGI/qEhB7Pa8PDUHl4YMnO7vH8119/zdciIaRwyJ+A/SNdCWFgemvPlpwctGFhqI3GbucklQrDhAmYdu9xZRUF4aQmArITmGnHDgwTJyKp1T2elyQJXXwcloMHezy/c+dOdu7c6coqCqOEJEkRwDnA6yNdF2FgemvPlpyco768AbilpmLJy8NpsbiieoJw0hNDlicYs93M7Wtvp7wil8dyywg8a9Exy+uio2n7dVuP52bNmuWKKgqj07PA3YDn0QpIknQ9cD1AVFTU8NRK6LNjtWfZZsOSn49x7qlHLeOWkgIOB5YDORjGiX1uBWGoubyHTJIktSRJOyVJWu7qZwnwUfZHbCzbiOfBKiRZxtCyAZ4ZB9ve7LG8LiYGe3k5TrO527kFCxawYMECV1dZOM5JkrQYqJJlefuxysmy/Kosy+myLKcHBgYOU+2EvjpWe7YWFoLNhr6H+WMd3FJTADBnZrqkfoJwshuOIUsx72QYfZHzBZODJnOdm5Jdu7DlR9AaYPmfobT7v6e66GgArEVF3c599tlnfPbZZ66tsDAazAbOkySpAPgQmC9J0nsjWyWhv47Vni15yrQFXdzRAzJtRAQqoxHzfhGQCYIruDQgE/NOhldFawV5jXksiF5AbLmDWk9YnjgW/vADGPzgx0e6XaOLjgHAWlDQ7VxGRgYZGRkurrVwvJNl+T5ZliNkWY4BlgA/yrJ85QhXS+inY7Vna1EhALqY6KNeL6lUuCUnY94v3q8FwRVc3UP2LMq8E+fRCkiSdL0kSdskSdpWXV3t4uqc2HZV7QJgUvAkHBm7aQpw8rNOBXpPmHEz5P0A9YVdrun4Arb10EM2b9485s2b5+pqC4IwDI7Vnm1Fxah9fXtcYXk4fWoKluwDyA6HC2ooCCc3lwVkYt7J8NtdvRuDxkC8IQpraTXaQBUFpipqTDUw7iKlUOaXXa5RG42ovb2xlpZ2u9/cuXOZO3fuMNRcGC1kWV4ncpCNTsdqz9biYnR9WIihT0hANpux9fB9IQjC4Liyh0zMOxlmu6t3M9Z/LM7sXJAhtH2C7rbKbeAXC2GTIbN7HiJNeBi2srJuxz/88EM+/PBDl9dbEATXO1Z7thUVoe1LQNY+x8ySmzekdRMEwYUBmZh3MrycspPchlyS/ZIxb10DwJhZ52DQGDqHMklYAGU7wNTQ5VptWBj2HgKy7Oxsso+SNFYQhNHlaO3ZabViKy/v05ZI+vg4ACx5uUNeP0E42YnEsCeIqrYqTHYTsd6xWPdtQ1LJGKZfQKJvIvtr2yfhxp4KshMKN3W5VhsWhq20DFmWuxxfuHAhCxcuHK6PIAiCCx2tPdtKSkGW0Ub1HpCpvbzQBAVhFT1kgjDkhiUxrCzL64B1w/Gsk9XBRmXZeqx3LNaiInTeEpJnEMl+ySw/uByn7EQVMRU0Bij4CZLP7rxWGxaGs60NZ2Mjah+fzuMzZswY7o8hCIKLHK0924qVBT26qCicspN6cz0eWg/cNG49ltfHx2PJFT1kgjDURA/ZCSK/MR9oD8gqGtCG+AKQ7JdMq62VkuYS0OghbCKUdM3Mrw0LA+g2j+y9997jvffEtD9BOBEcrT1bi4oBeL7qE+b8bw7zPp7HjA9mcP3315NR0z1NRsd2a7LzqIvnBUEYABGQnSDyG/Mxao34We3YmuTOhK8pfkp27f117cOW4VOgYg84bJ3XasPCge4BWV5eHnl5YmhCEE4ER2vPJQe2Y9HCJ9XfMzdyLvdOu5dr0q4hpyGH3337O77O67oQSB8Xj2wy9bgQSBCEgRN7WZ4gSppLiPKKwr7vJ2SnhC5xLADxvvGoJTXZddksjFkIYZPAboaqTAidAIA2vOcesnPPPXd4P4QgCC7TU3subCpkV8Yaonx1fPGbL4n0OjSP7OqxV7Ns/TL++vNf8dH7cGqEss+lfkwsANb8AnQREcNTeUE4CYgeshNEWWsZYR5hWDN3AKBLnQaAXq1njM+Yw3rIJiv/Ld3Rea3axwfJYMBW2jUgmzx5MpMnT3Z95QVBcLkj27Msyzyw8QECGmXC4yZ0CcYAvPXePD//eRJ9E7n/5/upbK0EQBvVsd1a1yTTgiAMjgjITgCyLFPeUk6oMRRrXhYAuuTxneeTfJPIqc9RfuMbCwZfJf1FO0mSlJWWR/SQvfPOO7zzzjuu/wCCILjcke15Q8kGdlTtIKLNgDEipsdrDBoDT859EovDwiNblK3XNEGBSO7uyobkgiAMGRGQnQDqLfWYHWbCPMKwFZUiaSU0wcGd5+N94qlsq6TR0giSpAxblu3scg9tcDC2qsoux/Lz88nPzx+WzyAIgmsd2Z7fyXyHaH0Y2oYWtGGhR70u1juW68dfz9ritWwq3YQkSeiiokRAJghDTARkJ4DylnIAQj1CsVY2oAswIklS5/kE3wQA8hraJ/QGp0H1AXDYO8togoKwV1Z1ue/FF1/MxRdf7OLaC4IwHA5vz8VNxWyt2MrFPqcBoAk9ekAGsDR1KZGekTy1/SmcshNddDS2wu773wqCMHAiIDsBlLUqQ41hagPWRhldeHCX8wk+SkDWOWwZlAoOC9Qd7CyjCQ7GXl3dZSl7amoqqampLq69IAjD4fD2vKpwFQDz9eMA0IaGHfNanVrHzRNvJqc+h7VFa5UespISZLv9mNcJgtB3IiA7AZS1KAFZaHM91hY1ujFjupwP8QjBqDWS09AekAW3B1lV+zrLaIKDwOHAUVvbeezNN9/kzTffdG3lBUEYFoe35w0lG0jxS8GzzgJwzCHLDotiFhHtFc3Le15GGx0Fdju28nKX1lkQTiYiIDsBVLVV4aZ2w5CzD2QJXeL4LuclSSLeJ/5QD1lAIkgqqNrfWUYbFASArerQsGVxcTHFxcWu/wCCILhcR3tutDSyu3o3p0ScogRUUtc5p0ejUWm4Nu1asuqyyPdSAjlrgZhHJghDRQRkJ4BqUzUBhgBsecrGwbrkCd3KJPgmkNuQq+xXqTWAXxxUHt5DpnwhHz6P7PLLL+fyyy93ce0FQRgOHe15e+V2nLKTWWGzsJWXoQkIQKXT9ekeZ8eejbfem89MGwHExH5BGEIiIDsB1JhqCHQPxNo+yVYXE9OtTLxPPE3WJqra2gOuoJQuPWSa9h4y+2ErLRMSEkhISHBdxQVBGDYd7XlX9S60Ki1pAWnYy8vR9GG4soObxo0L4i9gRcNGcDeIXGSCMIREQHYCqG5Tesis5TWodCrU/v7dynSstMxtaN8UOHisMqnfZgJA4+8PKhX2w4YsX3vtNV577TXXfwBBEFyuoz3vqtpFqn8qerUeW1l5rxP6j3Rh4oU4cNIa5Cl6yARhCImA7ARQY6oh0BCItboFXZBnl5QXHbqttAxIAGSoVVJhSBoNmoAAbJWHesjKysooE/vVCcIJoaM976vZx4TACciyjK28HG1Y/wKyaK9o0vzTKPA0YysSc0wFYaiIvSxHOZPdRIuthUCNB9ZGMIwN6rGcj5sPgYbAQyst/eOV/9bmQEga0D0X2bXXXuvSuguCMHyuvfZailqK+HTrpyT7JeOor0e2WND2koOsJ+eMOYc890cZe8CMLMs9vgQKgtA/oodslKsx1QAQYLVha1P3OH+sQ4JvwqEeso6ArCa387wmOLjLkGVkZCSRkV33txMEYXSKjIyk2a0ZgETfRGxlSsqKvqS8ONKi2EVUe0tgseKoqRnSegrCyUoEZKNcR0AWXFqjpLyITz5q2XifeA42HsThdIDOA7zClR6ydpqgQOyHDVm+/PLLvPzyy66rvCAIw+bll19m/TfrUUtqYr1jsZUr0xEG0kMWYAjAPTIGAFtp6VBWUxBOWiIgG+Wq26oB8C1WAildyqSjlk3wTcDisFDc3D7vwz8eag/1kGmDg3E0NuI0mwGorKyksrKyp1sJgjDKVFZWomnQEOMVg06tw96e1LW3bZOOJi55JgD1BQeGrI6CcDITAdkoV21SAjKPEiVw0h6jh6xjYn/nSsuABGXIUpYB0AS15yKrVu55yy23cMstt7ik3oIgDK9bbrmFHYk7Oldc28rKkQwG1D4+A7rflAkLATiYtXmoqigIJzURkI1yNaYaNJIGdVkNKjcJja/vUcuO8RmDhHTYPLIEsDRCqxKAdeYia+8VCwgIICAgwLUfQBCEYWHwNlBkKToUkJWXow0NHfCE/NTIKTS7S9Qe3N97YUEQeiUCslGuuq0af4M/tqpmdAEexyxr0BiI9Iw8tNIyoGNiv/J7bXBHclhlYv+LL77Iiy++6JqKC4IwrF54+QUm1Uwi3kdp9x0B2UCpJBWmQE8c5RVDVUVBOKmJgGyUqzHXEODmj7Xeji60996srist27Pwt0/s7+ghs7WnvqipqaFGrKAShBNCW10bka2RRHtFA2ArLxvQCsvDacJC8ao1d85lFQRh4ERANso1mBsIkN2wt6nQRUb0Wj7eJ56i5iIsDgt4R4Ja39lDpvLyQnJz6xyyXLZsGcuWLXNp/QVBGB4BZwWwPHI54cZwnFYrjuoaNCEhg7qnd3QigU2ws3LHENVSEE5eIiAb5erN9UTV2gEJ3Zi4Xssn+CbglJ0cbDgIKhX4x3WutJQkCU1wUOeQpdFoxGg0urL6giAMkwprBQHGANw0btgrlGFGbVj4oO4ZHDcOnR0yczYNRRUF4aQmArJRrt5ST0i1sh+lLnFsr+U7JvR2ydhfcygXmTYwCFv7BuPPP/88zz///BDXWBCEkdCwtYGU4hSAQ0lhBzGHDMCtPXF0Sc7OwVVOEAQRkI1mZrsZk91EYEUrALqUKb1eE+0ZjYfWg73Ve5UDAQlQXwB2K9Cerb99DlldXR11dXUuqbsgCMPLt8UX3xZlFbatfOBZ+g+nC1d62EzFhdid9sFVUBBOcmIvy1GswdIAgHdVC2o3J+rA3jcJVqvUjAsYx+7q3coB/wSQHdBQCAEJ7QFZJbIs8+CDD7qw9oIgDBeT3cRX0V9x68RbATqz9A92DlnHxuS+DXYKmwqJ8+l92oQgCD0TPWSjWL25HgD36jZ0vto+XzcxaCLZ9dm02dqUOWQAtXmAkvpCtlpxNjYOeX0FQRgZpc3K9kaRnsoQo728HHVAACqdblD3VXl4gKcH/k0y2XXZg66nIJzMREA2inUEZLpaC7rAvk++nxg4EafsZGfVzkObjNcpAVlH6ouM/Rv489N/5q5/3UWjRQRngjCaFTcXM7V6Kru/VnrGbWWDy0F2OF1oGAHNEtn1IiAThMEQAdkoVm+pR2+VkVrkPuUg6zA5eDI6lY6fS38Gdz9w8+lcaakJVrZPenbVA7i3uqNr1XHbj7cpG5ILgjAqlbSUEGIKwdqozBW1VVQMWUCmDQ0lrFUnAjJBGCQRkI1i9eZ6QpROsj7lIOtg0BiYGjJVCcigPfWF0kPW6q0HIM7my11330X6knR2VO3gx+Ifh7TugiAMn4rWClbHruaBBx5AluVBZ+k/nDY4BL9mmQN1YpNxQRgMEZCNYvWWesLqlX3o+pKD7HCnRpxKQVOBMu/DPx5q85BlmUdzXwbgIr/5+Lj5cF7ceYR5hPH+/veHvP6CIAyPitYKQjxCkCQJZ2MjclvboFdYdtCGhuDWbKGhuYoGc8OQ3FMQTkYiIBvF6s31xDQqC2W1Cb3nIDvc2bFno1Vp+fTAp+AXB00lfJb1IWsq1mHzMuDd5OCZZ57huX8/x8VJF7O9cjvlLeWu+BiCILhYRVsFY/LG8Mwzz3SmvNCEDE1A1nEfvyYoaCoYknsKwslIBGSjWIOlgch6CY2bA3VI/3rIfNx8WBSziC9yv6DQw4csnZZ/bnuKGaEzMIZFYa+spKmpiaamJk6LPA2An0p/csXHEEYBSZLcJEnaKknSbkmS9kmS9PeRrpPQdxWtFXi1edHU1NT3HGQ2ExxYBZlfQWvtUYtpQ5R5p/7NMoVNhUNWZ0E42Yg8ZKNYnbmO4FoHOk87ePWeg+xIf5r8J9YVr+PavPdpCQ3GS+3Go3MexfTZX7FVVfLgyy8BIMsy4cZwfir9iUuSLhniTyGMEhZgvizLLZIkaYGfJUn6TpblzSNdMeHY7E47NaYags8N5tZJt1L3njL94JhzyPJ/gs//AM3tveI6I5z9JEy8vFvRjlxmQc1qEZAJwiCIHrJRrMHcgH+tHa2PCvSe/b4+2COY/5zxH8b4xDGnzcT7oQsJdA9EGxSMvaq6s5wkScwIncH2yu04ZedQfgRhlJAVLe2/1bb/yCNYJaGPqtuqccpOgj2Unix7RTmSTofaz6/nCwp+hnd/q3ynXPEpXLcGwibBlzfB7o+6Fde2B2SxFk8xZCkIg+CygEwMcbieqbEW91YnusD+B2MdJgZN5LVF/+XpNjUhTcoelpqgIBy1tfzrySd5+umnARgfOJ5ma7N4Az6JSZKkliRpF1AFrJZlecsR56+XJGmbJEnbqqure7yHMPwq2pSNxPd/vZ+nn34aW1k5mtAQJFUPX/9tdfDxVeAXC9d9DwkLIHIqXPk5RM+Gb/4EdQe7XKIyGFB7exPZZhABmSAMgit7yDqGOCYAE4FFkiTNcOHzTipO2Yl7hZKwVRcWOPgb+sdBrfJFqwkOAlmmrbmZlhalU2RcwDgA9tbsHfyzhFFJlmWHLMsTgQhgmiRJaUecf1WW5XRZltMDA4fg/0lhSFS0KgGZs81JS0tLe8qLo0xxWHkfmBvg4rfA4HvouEYHF74OKjV8d2+3yzShoQS2qChqKhK96IIwQC4LyMQQh2s1W5sJqlOSteoiwwd/Q/+4zuSw2vbksHf89red+1mO8R6Du8adPdV7Bv8sYVSTZbkBWAssGuGqCH3QEZAtu3cZDz74oBKQ9bSHZcl22PMhzPkzBPewatsrDE69E3JWQen2Lqe0ISF4NdqwOCxUtla64mMIwgnPpXPIehviaC8jhjkGoM5cR2id8mvdmITB39AvDlqrwNzUma3/8HlkapWaZL9kcupzBv8sYdSRJClQkiSf9l8bgAVA1ohWSuiTyrZKPLQeeOo8kW027FVVPa+wXPcoGPxg9u1Hv9nU34ObN/z8bJfDmtAQ3GqbAZH6QhAGyqUBWW9DHO1lxDDHADRYGgipl3G6O1AFRA/+hoftadkRkH20aiVPPvlkZ5F4n3hyGnKQZdHReRIKBdZKkrQH+BXlBWv5CNdJ6IPK1kqC3YN58skn+fc//wlOJ5ojV1iWbofcNTD7NtAfY19cvacSlO3/BuryOw9rg0OQmlrR2WRKW0pd9EkE4cQ2LKssxRDH0FN6yGQkL8eAUl5049+ex6w2D7WPD5JWSytgMpk6i8T7xtNsbabaJHoyTzayLO+RZXmSLMvjZVlOk2X5oZGuk9A3NaYaAg2BmEwmzG1Ke+42h2zLq6BrD7Z6k36d8t89h1ZcakMPpb4oaykbknoLwsnGlassxRCHCzWYGwipB73RDt5938fyqPzGKP+tzUOSJDRBQVys1vDAAw90Fon3UXrRcutzB/88QRCGRa25Fn+DPw888AA3zZwJHJEUtrUW9n0OE5b0LX2OdziMmQu7/wftveUd2foTbL6ih0wQBsiVPWRiiMOFmmvK8DKBh3FgSWG70RrAKwLqlE3GNcHB2KuquhTpCMhyGsQ8MkEYLWpMNfgb/AGwlZYARySF3fUeOKx96x3rMOEyqC+AIiUvcEe2/lizpwjIBGGAXLnKUgxxuJCtsAgADz896DyG5qb+YzpXWmqCg/jFZuWJJ57oPO3r5ouXzovi5uKheZ4gCC7VZmvDZDcRYAjgiSeeYPnOXagDA1AZDIcK7fkYIqZBUHLfb5y8GNR62P81cChbf1ibXgxZCsIAia2TRimpRFnKrgsLGLqb+sdDxucAaIOCaG1qxmw2dykS6RkpAjJBGCVqTDUABBgCKDGX0KZWoQs/bIpDZSZUZsDZT/XvxnqjMmyZtQIWPopKr0ft50dAs0S1qRqLw4JerR/CT3J8s9lslJSUdPu+7Aur1Vow9DUSjlNOIMNut/9+ypQpVUeeFAHZKKUpq8YpgTZiCHKQdfCLU5JCttWhCQpm1tvvkPjsM12KRHpGsq9239A9UxAEl+kMyNwCeOCBB8g9/Qy0kycfKrD3Y5DUkHp+/2+edBbkfA/VWRCUgjYkBO9GGwBlLWXEescOwScYHUpKSvD09CQmJgZJkvp7eY0r6iQcf5xOp1RdXZ1aUVHxOnDekefFXpajlHtFI82eoPIbggn9HTpSX9TmHspFVtk1yWOkZyTlLeXYnLahe64gCC7REZD5G/yRbTYlKWzHS5zTCXs/g7j5YBxAyqHE9kXz2d8CyrClobYV4KQbtjSbzfj7+w8kGBNOIiqVSg4MDGwEuqUAAxGQjVreVW20ejvBcwgm9Hc4LPWFNiyUfWPH8sobb3QpEukZiV22U9FSMXTPFQTBJWrNtYAyZPmvxx5jX0oKuohI5WTpdmgsgnEXDezmXmEQMh7y1gJKtn51db1y65NwYr8IxoS+UKlUMkeJvURANgrJskxAjRWL9xDlIOvgE60MX9Tmog0Pp9nLE7vN3qVIpKfyZS7mkQnC8a/GVINKUuGj98FhMtHs5Yk2or1XPftbpb0nLhz4A2JPheItYDOhCQ1BbmnFaBW5yEaCWq2ekpycnNrx85e//KWH/bF6Fx4ePq68vFwDMGnSpB5Xelx44YUx//3vf317OicMnJhDNgqZaipwt4Ds5RzagEyjA58oJVt/YCAztm3H/+qruxQRAZkgjB61plr83PxQq9T8YdIkKh54EN0jjygns7+D6FldNxHvr9i58MsLULwFbWcuMj+q2rrNVxZcTK/XO7OysjKH8p47d+4UuUOHkeghG4XqcpRJ9SrPIcpBdrj2TcYllQptaCi20q5DD4HugejVehGQCcIoUGOqIcCgrMS2FZeAVqvMD607CNX7IenswT0geqbSy5a/4VAuMosnlW1ig/HjxeE9Xhs2bHCfNm1aEkBjY6PqoosuiklMTExNTExMfeutt3yOvNbd3X0SgNPpZOnSpVExMTFps2bNSqypqenszPnpp5/cp06dmjR27NiUOXPmJBQWFmoBnn766YC0tLSUpKSk1IULF8Y1NzerQOldu/rqqyMnTZqUHBERMU70tB0ieshGoeaDBwAwGO3g2cMmwYPhHw+Fv4AsszEiHKmujqWHnVZJKiKMESIgE4RR4PCksMuzs9BPGE+KWq30joGyUnIw9J4QPhnyf0Kz6FoAwtvc2H4SB2R//2YfmWVNfS5vtjmSeiuTGOLZ9uRFE475pWuxWFTJycmpHb9ftmxZ+R/+8If6o5W/9957Q728vBwHDhzIBKiurlYfrey7777rk5ubq8/Nzc0oKSnRjhs3buzVV19da7FYpNtuuy1qxYoVuWFhYfbXXnvN98477wz/5JNPCq644or6ZcuW1QDcdtttYc8991zA/fffXwVQWVmp3bZtW9auXbvcfvvb38Zfc801R63nyUQEZKOQKf8gOgk8PdWDG27oiV8c2FqhuYIWdw8MbW3dioQYQ6hoE5P6BeF4V2Oq6dxhwwG0GNu3Rsr+DoJSwW8IUlPEngo/P4vWxx0kieAWNZWtlciyLCa6D6P+Dllu2LDB68MPPzzY8fvAwEDH0cquX7/e85JLLqnTaDTExMTYZs6c2QywZ88efU5OjmH+/PmJoPSkBQYG2gC2b99ueOCBB8Kbm5vVra2t6rlz5zZ23O+8885rUKvVTJkyxVxbW6sdyOc9EYmAbBRyFJZQ5QMxRn8Y6i+8jpWWdXlckpJMzfMv4LRaUel0nUVC3EPYX7t/aJ8rCMKQkmWZWnNt55Dl3L0ZeJ55JrTVQeEmmHP70Dwo5hT46Wmk8h2oA/zxbXJidphpsjbhrfcemmeMIg+eO7a/l2S7oh4d1Gq17HQ6ATCZTEM6TUmWZSk+Pt60a9eubnPNrr/++thPP/00d+bMmabnnnvOf/369Z0bpbq5ucmH3WMoqzSqiTlko5CqtIJyXwlf4xAPV8JhqS9y0YYp+Yrs5eVdioR4hFBnrsPisAz98wVBGBJN1ibsTjsBhgAcLS046uvRRUZA/gaQHZBw5tA8KCIdJBWUbEUbEoqxXvleqGgVvejHg4iICOvGjRvdAT7++OPOIZW5c+c2PfPMM0Edvz/WkOXcuXObP/30Uz+73U5hYaF28+bNngDjx48319XVadasWeMBYLFYpG3btrkBtLW1qaKiomwWi0X68MMP/Vz1+U4kIiAbZWRZRldWS4UveHkOYVLYDt6RoNZBbR7//XUreyaM7zaxP9RDCQQrW0/eeSKCcLw7PCmsNT+fPRPG815ODuSvB50RwqcMzYP0nsrwZ8mvaENCcKttBhAT+4dZxxyyjp+bb745HOCBBx4ou/vuu6PS0tJS1Gp1Z3fUY489Vt7Q0KBOSEgYm5SUlPrtt996Hu3ev/vd7xrGjBljiY+PT7vssstiJk2a1AJKT9eHH36Yd++990YkJSWljh07NnX9+vVGgHvvvbds2rRpKenp6ckJCQn931PqJNTrkKUkSWpgnyzL/dh5VnAVe3U1GoudRl9QD/UKSwCVGnxjoe4gZk08Vp0eW1nXnEIhHkp6m4rWCqK8ooa+DoLLiPZ88jh8H0vr3nysOj0mnQ4Orobo2aAewqk7EemQ8QWakHSkjT+DLIuAbJg5HI7tPR1ftGhRS0FBQcaRx729vZ2ff/55wZHHS0tL93b8uq2tbSeASqXinXfeKerp/rNmzTJt27at27DrPffcU33PPfdUH3n8s88+6/LMjmcIfeghk2XZAWRLkiT+5T0O2AoLAWjzlsFrCPexPJx/PNTmcu8DfyN9x46jB2RiYv+oI9rzyePwHjJLfj7pO3Zwz5+uhbo8ZSL+UIqYBpZGtEY1tJkwWlWiB10Q+qmvk/p9gX2SJG0FWjsOyrLcbXNMwbWs7QGZ1dsBXi6YQwbKPLLc1UgSaIKDug1ZBrsr+YbKW8p7ulo4/on2fBI4vIesKb8AbUQ4Uskvyskxc4f2YZHTANBqGgCIt/iIHjJB6Ke+BmR/c2kthD6zFhZiV4PafYiz9B8uKAUcVh59/DFCY2M57YiAzE3jhp+bn+ghG71Eez4J1Jpq0al0eGo9qcnPZ31UNJ9/ncnd7v4Q1O+VgMfmFwduPmgcyndFrMWLCtFDJgj90qdJ/bIsrweyAM/2n/3tx4RhZi0opNpHhbc8xBuLHy6wfXqR04FF74atqHs+wmD3YLGKapQS7fnk0JnyQpaxFhZicdMjyw4lTYVqiNdzqVQQMRVtmzKVKLzNTfSQCUI/9alVSpJ0CbAVuBi4BNgiSdJFrqyY0DNLYSFlvjK+ThmMQb1fMBCBSYDEX04xcNGECdirqnC2tnYpEuIRIgKyUUq055NDR5Z+e3k5stnMZRMSuUf+z9APV3YIn4zGlAMqlZIcVgRkgtAvfR2yvB+YKstyFYAkSYHAGuBTV1VM6E52OrEWFlI2AUK0HsqKSFfQeYBvNFTvRxdzOaAMlbqldu7KQYhHCNsqtrnm+YKrifZ8Eqgx1RBmDMNSUACATtu+4C3WRQFZ6EQkyYnGzwe/JiettlZarC0YdUbXPE8QTjB97bdWdXx5t6vtx7XCELFXVoLFQoWvhK/ex7UPC0rlicxQXvn5J+DQYoIOgYZAmm3NmO0ivcwoJNrzSaBjY3FrfgEA/8m18oR0E/iNcc0DQycAoPXRY6xXvhdEL9nwyM3N1U6fPj0xLi5ubHx8/NiHH364y/CJ0+nE19d3Qkfy18LCQq0kSVNWrVrVGS37+vpOqKiocNFbft/U1NSoH3/88cC+lJ00adIJl7qnr1/CKyVJWiVJ0tWSJF0NrAC+dV21hJ50BEXlfuDn3qf/ZwcuMBkJJ7b2LZOs7W/Znafbn19t6pZmRjj+ifZ8grM77dSb69sDsnxUHh7IahmnpBn67dY6eIWBRyAagx19e3LYqraqXi4ShoJWq+Xpp58uycvL2/frr7/uf+ONN4K2b9/u1nFepVIxceLE1h9//NEIsHbtWo+UlJS2n376yQNg9+7deh8fH3tISMhR97McSjabrcfjtbW16jfeeKNPc3F27tzZbbum0a6vk/rvAl4Fxrf/vCrL8j2urJjQnbWgPSDzlfD1cFHKiw5Bqdwlv8xfbrgITWho94DMoARkHUvrhdFDtOcTX725HhmZALcALHl56CJDuJuXufc341z3UEmC0IloNU2oqhtAlsUL2zCJjo62zZkzpw3A19fXGRcXZyoqKtIdXmb69OktGzdu9ADYuHGj8ZZbbqncsmWLEWDdunXGqVOntjQ2NqpmzpyZmJqampKYmJj63nvv+QA0NTWp5s2bF5+UlJSakJAw9rXXXvMFuPnmm8Pj4uLGJiYmpl5//fURAGVlZZqFCxfGpaWlpaSlpaV8//33HgB33HFH2Pnnnx87efLk5AsuuCB227ZtbuPGjUtJTk5OTUxMTN27d69+2bJlEcXFxfrk5OTUG264IQLgb3/7W3BaWlpKYmJi6p///OfOlWzu7u6TAJYvX+45bdq0pEWLFo2JjY0de95558V27N052vR5c3FZlj8DPnNhXYReWAsLceo01HnJ+HlFuvZhQe29wVWZ6GKiO+ehdOjoIRNvwKOTaM8ntlpzLQABbv5YsrMxpim5A4c8IeyRQiegZTNYPDGa1Cfn98N390LF3t7LdbC1JfVaJii1jfNf7L7cvQfZ2dm6zMxM97lz57YcfvyUU05pefjhh8MAduzY4fHUU0+VvfTSS8EAv/zyi3HmzJmt7u7uzhUrVuT6+fk5y8vLNdOnT0++/PLLGz7//HOvkJAQ27p163JB6cmqqKhQf/vtt74HDx7MUKlU1NTUqAFuuOGGyDvuuKNy4cKFLTk5ObqFCxcmHDx4cB9ATk6O25YtW7KMRqN81VVXRd58882VN910U53ZbJbsdjtPP/10yeLFiw1ZWVmZAJ9//rlXbm6u2549e/bLsswZZ5wR/9133xnPOuusLp9t//79hl27dh2MiYmxTZkyJXn16tXGhQsXdikzGhyzh0ySpJ/b/9ssSVLTYT/NkiQ1DU8VhQ7W4iJMAR7IkoSPb6xrH+afwD+5icc+340uOhpbQfc5ZCB6yEYT0Z5PHp1Z+k0aHPX1uBnqeVy6hX8894ZrHxw2EY27MhwVZXI/OQOyEdTY2Ki64IIL4h5//PFiPz+/Lt1Ep556altmZqZ7U1OTym63S97e3s6oqChLRkaGftu2bcZ58+a1OJ1O6fbbb49ITExMPe200xKrqqp0JSUlmsmTJ5t++uknr5tuuil85cqVRn9/f4e/v79Dr9c7L7300pi3337bx2g0OgE2btzo9ac//SkqOTk59dxzz41vaWlRNzY2qgAWLVrUYDQaZYCZM2e2Pv3006H3339/SE5Ojq7j+OFWrlzptWHDBq/U1NTUsWPHpubl5bllZWW5HVlu3LhxrXFxcTa1Ws3YsWPb8vLydEeWGQ2O2UMmy/Kc9v8eddNRYfjYiopp9tNicDpx84l27cO0bqgkkLCji0nE0diIvb4eja8vAD56HzQqjfjCHUVEez55dARk3iX1mAG9nIckzUFy1fyxDqET0bor05BizV5Ut52EQ5ZnPd7fK7rtAzkQFotFOuecc+IuvvjiuquuuqohNzdXu3jx4gSAa6+9tvruu++ujo6Otjz//PMB48aNawOYNm1a65dffuldW1urmTBhgvmFF17wr62t1ezdu3e/Xq+Xw8PDx5lMJtX48eMtO3bsyPzss8+8//a3v4WvWbOm6amnnirftWvX/q+//trr008/9X3ppZeCNm/efECWZXbs2LHf3d29W4Dl4eHRGSTeeOONdaecckrrF1984b148eKE559/vjApKclyeHlZlrn99tvL77rrrmO++ev1+s5nqdVq7Ha7i/9Hd41e55BJkqSWJOmEmzw32siyjLWkhDpv8HM4wdPFc8iAu8bVc7fH5+hiYoCuE/slSSLQECh6yEYZ0Z5PDh3t0lCovDDpjS3cc/F07r//ftc+2DsCjZ8S70eY3KgyiRe24eB0OlmyZEl0YmKi+f/+7/8qAeLj421ZWVmZWVlZmXfffXc1wNSpU1tefvnloJkzZ7YAzJkzp+WVV14JmjRpUqtKpaKxsVEdEBBg0+v18jfffONZVlamAygoKNB6eno6b7755ro77rijYteuXe6NjY2quro69aWXXtr48ssvF2dlZbm337Ppscce65yYv2nTJkNPdc7MzNSlpKRY/vrXv1YtXLiwYdeuXQZvb29Ha2trZ1xy1llnNb377rsBHT1s+fn52tLS0j5PtRptev1gsiw7JEnKliQpSpblHnd7F1zPUVuL3NZGlZceX6djWAIyQifAng/RBSgro635BbhPmtR5OtA9UPSQjTKiPZ8cak21eGg9cGbmo/E2oNHLEDPH9Q+WJDRjJoAqm+CWk3QO2QhYvXq18csvv/RPSEgwJScnpwL8/e9/L7300ksbDy83Z86clv/+979Bc+fObQWYPXt2W2Vlpe7KK6+sAfj9739fd9ZZZ8UnJiamjh8/vi02NtYMsH37dsN9990XoVKp0Gg08n/+85/ChoYG9eLFi+MtFosE8PDDDxcDvPrqq8W///3voxITE1MdDoc0ffr05lmzZnX7rnnvvff8Pv74Y3+NRiMHBgbaHn744fLg4GDHlClTWhISEsbOnz+/8ZVXXinZt2+f29SpU5MB3N3dne+//35+eHi43ZV/niNFkuVuvYrdC0nSBmASSnZvl21GnJ6eLm/bJpKN9qRtx04KL7+c95YYqQ9r5T/XZ7r8mf946O9onGbuWTKX7Ivvxu+qpQTdeWfn+dvX3k5hUyFf/OYLl9dF6GJQ3fHD0Z5FWx5Zd62/i/11+3nuXR0aUz5R53vxcNUZAPztby7eynT1g+Te+z8KJyZx59wStv9uOyrpxE5zt3//flJSUgZ6+fahrItw/Nu9e3fAhAkTYo48LjYXHyVsJcoCmwIvKzHqbnMaXUKt0aC12pCq9qKLi8N84ECX84GGQH6t+HVY6iIMKdGeT3C15loCtH5Yc3fjEdcAY85FXTtMOT9DxqFxfxev6hbsspIPzd/gPzzPFoRRrE8BmSzL6yVJigYSZFleI0mSOzCiGX1PNtaiYpAkDno5mKTzGZZn3veX++G5yVCWgj4hgbYjejwC3QNpsjZhcVjQq/XDUidh8ER7PvHVmGqYagpFtlpx87JA7Fz+suD04Xl4cBo6Dwdu1cpoWVVblQjIBKEP+rq5+B9Q9rl7pf1QOPCli+ok9MBWXIw6KIgWrYSv2zB+uYVOgPI96BMTsJeX42g6lB2hI/XFSbmSahQT7fnEV2OqIbpSWdCm95MhasbwPdw/Hq0nqBtMaOwiOawg9FVfB/ZvAWYDTQCyLOcAfdreQBga1uJiCAsAwM8jZFie+fDDD/PI/ihoLEIfpSwisOTmdp7vSA4rVlqOOqI9n8AsDgvN1mbCilqRNKBPmww6Dx5++GEefvjho15ntjloMtvoy7ziY1Jr0IYGI8kQ0CSSRwtCX/V1DplFlmVrRw4bSZI0wCBbrdAf1uIibBOUZLA+nuHD8kyNRoPKKYMT3IzK3G/LgRzcJ08GDvWQiS/cUUe05xNYrUnJ0u97sBo3HytS3DxAac9Hqm+18tpPB/l2bzkFtW0AeOo1zIjz56y0EM4ZH4pe0//RbF1MPLCT4Abx/SAIfdXXgGy9JEl/AQySJC0Abga+cV21hMM5TSYc1TWYfJSAzNfHxVn62913331gbYXHnkVjykbl4YHlsIn9YoPxUUu05xNYjakGlVPGcLAcQ4wVxswF2tvzYb7fV8Gdn+ymxWLnlIRALpwcgV6rIr+mjQ0HqlmdWclj32VxzewYrp4Vg7uu7+mftEkTgZ3EtBpEQCYIfdTXIct7gWpgL3AD8K0syy7OMCh0sBYrKyybjErqFT+/hOF7uM4DQsYhlWxFn5CAJSen81RHtn4xh2zU6Vd7liQpUpKktZIkZUqStE+SpD8NV0WF/qsx1RBZDZLVgVuQCsImdyvz5s/5XP/udqL9PfjuT6fy9rXT+OPpCVx/ahyPXTCOn+85jXevm0ZyiCdPrMxm7pPreHdzITZH3zZt1iRNB5VMVKNKvLANk3vuuSckPj5+bGJiYmpycnLqjz/+6DFt2rSkDRs2uAPMnTs3vmO/ycEIDw8fV15e3i06f+mll/wSExNTExMTUydNmpT8yy+/dEsI+9577/mcccYZcR2/v++++0KioqLSOn7/wQcfeM+fPz9+sHUcrOXLl3uuXr3ao7dy77//vvdf/vKXIZtD1NdXnj/Ksvxv4LWOA5Ik/an9mOBitvaArM5DGVLw9R+egOyhhx4C4IGpM2H7W+gT/kDz96uRZRlJklBJKgIMAeILd/Tpb3u2A8tkWd4hSZInsF2SpNWyLLs+GZ7Qb7XmWuLKlRFow/jxoFG29etozwmLruah5ZksGhvCs0sm4qbt/m+0JEmckhDIKQmBbCuo458rs/jblxm8/tNBlp2ZxOJxoahUR0+HJ4WPR+vuIKTewWrRQ+Zya9as8Vi1apXP3r17Mw0Gg1xeXq7pSNjaYf369blHu34oxMfHWzZu3JgdGBjo+Pjjj71uuOGG6D179nTZFWT+/Pktt99+e+e+f1u2bDEajUZHaWmpJjw83L5x40bjjBkzhm1TcLvd3uNQ/o8//uhpNBodCxYsaO3hsk5XXHFFI9B4rDL90dcesqt6OHb1sS4Qb9VDp6OHrMLQgkYGo957WJ6r1+vR6/UQNR3sJvRB7sqeltWHArAgQ5DoIRt9+tWeZVkul2V5R/uvm4H9KCszheNQjamGuHIZldaJdsqCzuN6vR61VscDX2UwNzGQ5y+f1GMwdqT0GD8+vmEm/716Kgatmtv+t5NzX/iZTbnHWMxj8EXnrcGvziqGLIdBaWmp1s/Pz24wGGSA0NBQe0xMjO3wMof3bL3wwgv+iYmJqUlJSannn39+LEBZWZlm4cKFcWlpaSlpaWkp33//vQdARUWFevbs2Qnx8fFjL7300uijLfpYsGBBa2BgoAPgtNNOa62oqOi2wXdYWJjdaDQ6MjIy9ACVlZXac889t/7HH380AmzdutV46qmntnzwwQfe48ePT05JSUmdNWtWYnFxsQZgxYoVxuTk5NTk5OTUlJSU1Pr6elVhYaE2PT09KTk5OTUhIWHsypUrjQCff/6518SJE5NTU1NTzjrrrDEd2y+Fh4ePu+mmm8JTU1NT3nzzTd9//OMfQXFxcWMTExNTFy9ePCY7O1v3zjvvBL788svBycnJqStXrjQe7c/mueee81+6dGkUwIUXXhhz9dVXR06aNCk5IiJi3H//+1/f/v49HrOHTJKky4DLgVhJkr4+7JQXUNfLvcVb9RCxFRWjMhqpUjXhi8r1GwS3u+eee5RfNJUDoPdQUl5YcnLQBimL8gIMARQ1ix14RoNBtueOe8SgZPnf0sO564HrAaKiogZbXWGAak21TK2QMPhZkdrnjwH8/pbbOfu5nwj1VvPckklo1X3Pni9JEqclBzE3MZCvd5fx5KpsLn99C2ekBHPf2cnEBRq7XaMN9sNzfx115jpsThtalXZIPt/x7p9b/0lWXd+3izXbzUm9lYn3jW97eLayNVFPzj///KbHHnssLCYmJm3OnDlNl112Wd0555zTY0/Ttm3b3J566qnQX375JSs0NNReWVmpBrjhhhsi77jjjsqFCxe25OTk6BYuXJhw8ODBfffee2/YzJkzW5566qnyDz/80Pvjjz8O6K2+zz//fMBpp53WY89Renp6y7p164wOh4PY2FjLrFmzWr/77jvvJUuWNGRlZRlOPfXU1tbWVtWSJUuyVCoV//rXvwIeeuihkNdee63k6aefDnnuuecKzzzzzNbGxkaVu7u789lnnw08/fTTG//5z39W2O12mpubVeXl5ZpHH300dMOGDQe8vLyc999/f8jDDz8c/NRTT5UD+Pv72zMzM/cDBAUFjS8sLNxrMBjkmpoadUBAgGPp0qXVRqPR8dBDD1UCnHvuubE9/dkc+dkqKyu127Zty9q1a5fbb3/72/hrrrmmvrc/q8P1NmS5CSgHAoCnDzveDOw51oWyLJe3X4ssy82SJHW8VYuArJ9spaVoIyKod+Tiq3Uf/gp4hYJPNHryAWWlpXH2bECZ2L+9Suz8MUoMuD0DSJJkBD4DbpdluenI87Isvwq8CsrWSUNRYaH/6hsrCa904jZOA8HjOo8/+PU+6lqtfHnLbLzdBxYcqVQS508KZ1FaCP/dWMCLa3NZ+MwGbpwbx22nJ6DTHArytJGR6HbUobfK1LTVEGochv13T1Le3t7OjIyMzJUrV3r+8MMPnldddVXcAw88UNJT2VWrVnmde+659aGhoXaA4OBgB8DGjRu9cnJyOud9tbS0qBsbG1WbN2/2/Pzzz3MBlixZ0njDDTc4jlWXb775xvO9994L2LRpU49R6cyZM1s2bdrk4XA4mD59esupp57a+o9//CNs06ZN7mPGjDG7u7vLGRkZuvPPPz+iurpaa7VaVZGRkRaAGTNmtNx5552Rl1xySd1ll11WHxcX55wxY0brDTfcEGOz2VQXXXRR/axZs0z/+9//PPPy8tymTZuWDGCz2aQpU6Z0BqhLly7tDJSSkpJMv/3tb2PPO++8hiuuuKKhpzof7c/myHLnnXdeg1qtZsqUKeba2tp+N7JjBmSyLBcChZIknQGYZFl2SpKUCCSjTAjuk2O9VQu9s5WVKQGZcx++2uFLF9U5h+yBByB6NpoDK1EHRHRdaWkIpNHSiNVhRafu1kMtHEcG054lSdKiBGPvy7L8uetrKwyUJq8YtQyGscmgUv7N+H5fBf4HvuFKncTYsLMH/Qw3rZqb5sVxcXoEj32bxQtrc1mbXcWrS9MJ91H+3dKNSQZ2E9QAVaaqkyYgu2faPf29JHsonqvRaFi8eHHz4sWLm8ePH2969913+5VBXJZlduzYsd/d3b1PL1OPPfZY4Ntvvx0IsHLlypyYmBjbli1bDDfffHP0ihUrckJCQhw9lZs3b17LK6+8EuR0OqUbbrih2tfX12mxWKQ1a9Z4Tp06tQXg1ltvjfrTn/5UccUVVzQuX77c86GHHgoDePTRRyvOP//8xq+++sr7lFNOSV6xYkXOWWed1bJhw4bszz77zPvaa6+NvfXWWyv9/Pzsc+bMafrmm2/ye6q7p6dn5+qUtWvX5nz33XeeX331lfdTTz0Vmp2d3a3nq69/Nm5ubvLh1/RXX/usNwBukiSFA98DvwPe6suFvb1VS5J0vSRJ2yRJ2lZdLeYiHUmWZSUgC/SmXq3CT9/vYekBc3Nzw82tfd/MuNPAVIdbVEiPqS9EcthRpV/tWVLGyN8A9suy/K9hqaEwYF65FQC4zVC2SjLbHDz49T7skgaDYWj3wQ0w6nn6kgm8+rspFNW18ZsXNrKnpAEAbcpUAIIaZTHP1MV2796t37t3b+f+dTt37jRERERYeyq7cOHCpm+++ca3oqJCDdAxZDlnzpymxx57rPONf9OmTQaAGTNmNL/11lv+AB9//LFXU1OTGuC+++6rzsrKyszKysqMiYmx5eTk6C6++OK4N998M3/8+PGWjvscWW7SpEnm6upq7datW42zZs0yAaSlpZneeuutwDlz5rQANDc3q6OiomwAHc8G2Ldvn37atGmmRx55pGL8+PGtGRkZbgcOHNBFRETYli1bVrN06dLqHTt2uM+bN69127Ztxo65ak1NTao9e/Z029/P4XCQl5enO/fcc5tffPHF0vaeL7Wnp6ejubm5c4Ll0f5shlpfAzJJluU24ALgP7IsXwyM7fWiPrxVy7L8qizL6bIspwcGBva13icNZ1MTztZWtD566lVqfN2H9s/I6ZSPGsnffffd3H333cpvxpwGKNuwWHJzkR1Kr3WAQZlOICbujir9bc+zUYK2+ZIk7Wr/GXw3izDkZFkmuKgZs7sT7ZTFALzzSwHljWYWX3njofY8xM4cG8LnN83CTaviyte3sL+8CV3aTABC66CyrdIlzxUUTU1N6qVLl8Z2TE7Pysoy/POf/yzrqWx6erp52bJl5aecckpyUlJS6s033xwJ8Oqrrxbv2LHDIzExMTUuLm7sCy+8EAjw+OOPl23cuNEYHx8/9vPPP/cNDQ3tMdD761//GtrQ0KD54x//GJ2cnJyalpaW0lM5lUrFhAkTWn19fe16vV4GZSiypKREf9ppp7UC3H///WWXXXZZ3NixY1P8/f3tHdc+8cQTQQkJCWMTExNTtVqtfNFFFzWuWrXKMyUlZWxKSkrqZ5995nf33XdXhoWF2V955ZWCJUuWjElMTExNT09P3rt3b7e3EbvdLl1++eWxiYmJqWlpaam///3vqwICAhwXXnhhw4oVK3w6JvUf7c9mqEl96VaTJGknSvLIZ4DrZFneJ0nSXlmWxx3jGgl4G6iTZfn2vlQmPT1d3nbEBtYnO/P+/eT/9gKC/3wxc92+4JaES7lx1l8HfL8ms41vdpexYk85+8qaaDTZ8NCpiQ/2ZH5SEEumRRLsdZS36JdPoSEbyr+rYcx336KPjWV/7X4uWX4Jz8x7hjOizxhwvYR+GdSqjoG05/4SbXlktNpa2Tw3HTcfmL0ikyaLnVOfWMu4cG/evW66y59fUt/GRS/9gt0p88XNszCdns73SWC/63pun3K7y58/Uvbv309KSo/xR1+ISbgnmd27dwdMmDAh5sjjfe0hux24D/ii/ct7DLC2l2vEW/UQsJUpLzmtumYAAnxiBnQfi93BqxvymP3Yj9z/RQbVzRbOGR/KbacncMnUSDQqiWd/OMCcf/7IY9/tp81q56GHHuqcRwZA/OnoncpwZUeCWJGtf1S6nf63Z2EUqKrII6wO5JhAkCRe33CQhjYbdy9M7t6eXSDC1533fj8Ni93BrR/sQBvkRVStTLXoQReEXvUpMawsy+tRtlsxSpJklGX5IHBbL9f8zCDf5AWwlSoBWaO2FhwQ4BnR73vk17Ry6wc72FfWxGlJgdx+RiLjI7y7pc8oqm3j+R9zeGW9srfdOXo31Icnf4ybj97zWZAkLAdy4Mwz8dX7opbUYo7IKDKQ9iyMDvU/r8AA6MePp7rZwus/53POuFDGRXiz0uCSaS/dxAd58uRF47nxvR1Ue/oRkt9AZfNRMzYIgtCuTwGZJEnjgHcAP+W3UjWwVJblbqsRhKFlKytDcnOjRlYCno45W321MqOcZR/vRqtR8ervpnDm2KPv8hDl786TF0/g4vRI/vThTv7bOo6nL5lwqEDkDFTuRnT+hs6J/WqVGn83fzGpfxQR7fnEZd7+CwbA59TzeHFtLha7kzvOTATgrrvuGrZ6LEoLZenMaDYf8GdBaz6NtaXD9mxBGK36OmT5CnCHLMvRsixHAcs4bNsVwXVsZWVow8KoMfU/IHt7UwE3vb+DhGBPvr3tlGMGY4ebFuvHN3+cw/gIb/74v518/Gv7261GBwkL0Hu0dFlpGeAutk8aZUR7PlHlFFPhAza/cXywpYiLp0T0mLR1ONyzKJnCQGVelaq8T3mHBeGk1teAzEOW5c45JrIsrwN63XhTGLzOgMyi5LHzc/Pr03XPrD7Ag1/v44yUYD68fgZhPv0brggw6kmrXM1Vbtu4+7M9vLe5UDmRshi9sRVrUSFOsxlQcpGJIctRRbTnE5HdilupiYNhEq+vrwQJ/nTGoX1v//73v/P3v/992KrjoddwzvnK6myfWhtttrZhe7YgjEZ9DcgOSpL0N0mSYtp//gocdGXFBIWtrAxtkB81OPBW6fuUfPW5H3L49w85XDwlgpeumNyn/ep6YjQaMRqNzE8O4m9fZfDt3nKIX4DeTwanjCU3D0BsMD76iPZ8ArLvWYOhRaI83MCXu0q5amY0od6HXsQ62vNwmjtvIjIQVgsFDeXD+mxBGG36GpBdCwQCn6PkFQtoPya4kNNkwlFXh9ZHT61ajX8fNhX/z7pc/rX6ABdOjuCfF45H04/96o60bNky7ly2jBcvn8ykSB9u/3AXv5Ta0KdNAcByQEkwHeQeRL25HrvTfqzbCccP0Z5PQKYN3wCQE+SLu07DTfPiu5xftmwZy5YtG9Y6qQ0G7L5uhNbJvPvLr8P67JPNPffcExIfHz82MTExNTk5OfXHH388Zq+3yWSSZs2alZicnJz62muv+a5cudIYHx8/Njk5OTU/P1+7aNGiMce6/tJLL43evn37gDINL1++3HP16tWiV/4IvW0u7gbcCMSjbK2yTJZl27GuEYaOrVx5o9QaZWrVKgIMx85F9/pPB3liZTbnTwzjiYvGo1INzSJXg07Nm1dP5aKXf+H6d7exZu7ZSOpnsez6BS64gABDADIytaZagj2Ch+SZwtAT7fnEZt61HYcEu4y+XD9+DH4ex8dWZrrIEEKrCvgiaxN1p19w3NTrRLJmzRqPVatW+ezduzfTYDDI5eXlGovFcsx/ADZt2uQOkJWVlQlw+eWXR91xxx3lN998cx3AypUrj9lr/tFHHxUOtL4//vijp9FodCxYsKB1oPcYKTabDa12YHvB9qa37pO3gXSUL++zgCddUguhR7ZSZWWSVm+iRq3G3zP8qGU/2VbMP1bs55zxoTx18YSu6SoG6PA5Jz7uOt66Zio6tYqbtoWg87Jj2avkMww0iO2TRgnRnk9U5kZMhTWUBkig9ePaObHdigz3HLIOHvGphNWBl1TMO78UDPvzTwalpaVaPz8/u8FgkAFCQ0PtMTExNoDw8PBx5eXlGoANGza4T5s2Lam0tFRzzTXXxO7du9c9OTk59cknnwxYsWKF3yOPPBJ+3nnnxWZnZ+sSEhLGAtjtdq6//vqIjgz5jzzySBDAtGnTkjZs2OAO8Pnnn3tNnDgxOTU1NeWss84a07Hxdnh4+Lg///nPYampqSmJiYmpO3fudMvOzta98847gS+//HJwRyb8wz/LihUrjMnJyanJycmpKSkpqfX19arly5d7nnbaaZ1dvkuXLo167rnn/Dueccstt4R37A7w888/u8+ZMychMjIy7YknnggEpUdu6tSpSaeffnpcRETEuJtvvjn8pZde8hs3blxKYmJi6r59+/QAH3zwgff48eOTU1JSUmfNmpVYXFysAbjjjjvCzj///NjJkycnX3DBBbHp6elJh2+fNGXKlKRffvll0Hllekt7kdqRvVuSpDeArYN9oNB3HTnItJoGamQNAUfpffoxq5J7P9/LKQkBPHPJxEENUx7Oy8ury+8jfN158YrJXPH6Fix+RhxFyp55IjnsqCHa8wlKzv8ZU62WnBSYER2DUd/9q/3I9jxcPNKm4P75t4yhlnd+KeSGU+Mw6AY2r3U0qHj0USz7s/pc3mk2J/VWRp+Q0Bb26CNHTeZ2/vnnNz322GNhMTExaXPmzGm67LLL6s4555yWo5UPDw+3/+c//yl8+umng9euXZsLsHnzZuPixYsbr7nmmvrs7OzObsynn346sKioSJeZmblPq9V27n3Zoby8XPPoo4+Gbtiw4YCXl5fz/vvvD3n44YeDn3rqqXKAgIAAe2Zm5v7HH3888PHHHw/+6KOPCpcuXVptNBodDz30ULc9tZ5++umQ5557rvDMM89sbWxsVLm7uzuPLHOkqKgoa1ZWVuZ1110Xee2118Zs2bIly2QyqcaNGzf27rvvrgbIysoyZGRk7AsKCrJHR0eP0+v1NXv37t3/8MMPBz399NNBb775ZvGCBQtalixZkqVSqfjXv/4V8NBDD4W89tprJQA5OTluW7ZsyTIajfLzzz/v//rrrwfMmjWreM+ePXqLxaKaOXOmqbd69qa3gKxzOEOWZfuRiUQF17KVlYFGg9VRikkt9ZjyYnthPTe/v4OxYV68dOUUdJqhCcYA/vznP3c7NmOMPw8sTmVnThSTWnOw5/5KQGgkIAKyUUC05xOUddsKnFYVeaES8xPieyzTU3seDm5JSrwRUN9EndPKp9uL+d3MmBGpy4nK29vbmZGRkbly5UrPH374wfOqq66Ke+CBB0puu+222sHe+8cff/S68cYbqzuG6YKDgx2Hn1+3bp1HXl6e27Rp05IBbDabNGXKlM5g8PLLL68HmDZtWtvXX3/t29vzZsyY0XLnnXdGXnLJJXWXXXZZfVxcXK8B2SWXXNIAMG7cuLbW1laVr6+v09fX16nT6Zw1NTXq9nOt0dHRNoCoqCjLWWed1QgwYcIE0/r16z0B8vPzdeeff35EdXW11mq1qiIjIzs3SV+0aFGD0WiUAa6++ur6J598MtRisZS8/PLLAZdffvmQDA/1FpBNkCSpqf3XEmBo/70EyLIsj8wr10nCVlaGNjiY2uYS8Omegyynsplr3/qVEC833rx6ao9vxa6wdGY0r61ZAHtzKPjyv0Tf8W8kJJH64vgn2vMJquGXnwHIDZU43yNohGvTlT5eCRDdqs1MnuDJaz/lc/n06CGZVnE8CvnLX/p7SfZQPFej0bB48eLmxYsXN48fP9707rvv+t922221arVadjqVmMZkMg3dG3s7WZaZM2dO0zfffJPf03k3Nze5vX6y3W7v9S/90UcfrTj//PMbv/rqK+9TTjklecWKFTlarbbzMwAcOT+u4xkqlQqdTte5QbdKpcJms0kAHRuZdxw//BqHwyEB3HrrrVF/+tOfKq644orG5cuXez700ENhHdd4eHh0VsDT09N5yimnNH3wwQc+X3/9td/OnTsze/tcfXHMvxxZltWyLHu1/3jKsqw57Nfiy9vFlBxkodSalH3g/N38O8+VNZhY+uZWdBoV7143nQCjfsiff7Q5J5IkcdnVFyh13LmBuhYHvm6+oofsOCfa84nJXl8CpfXY1RLFgUqi5p6M1Bwytbc3rV5aPGvh9klqiuraWLO/20iVMAi7d+/W7927t/MfgZ07dxoiIiKsABEREdaNGze6A3z88ce99lAd6fTTT2965ZVXAmw2pYP9yCHLefPmtW7bts2YkZGhB2hqalLt2bPnmP8geXp6Opqbm3sct963b59+2rRppkceeaRi/PjxrRkZGW5xcXGW3Nxcg8lkkmpqatQ///yzS76vmpub1VFRUTaAt956y/9YZW+88caae+65J3LChAmtgYGBjmOV7ashj5aFoWMrK0Mb4E1N+5tkRw9ZQ5uVq97cSovZzlvXTCXSz90lz/fx8cHHx6fHc8bIMNBp8G1u5NH3VhBgCKSmTUzqF4ThtmPtF5jqtDRF+OFQS52LbI50rPbsam2RvgTWSMzyKCXU2+1QomlhSDQ1NamXLl0aGxcXNzYxMTE1KyvL8M9//rMM4IEHHii7++67o9LS0lLUarXc272O9Oc//7k6IiLCmpycPDYpKSn1jTfe6JKdPCwszP7KK68ULFmyZExiYmJqenp68t69e4+ZDuPCCy9sWLFihU9Pk/qfeOKJoI4FBFqtVr7ooosa4+Pjbeeee259cnLy2N/85jdjxo4d65Isw/fff3/ZZZddFjd27NgUf3//Y+ZxOuWUU9o8PDwc11xzzZD9wyfJcr//flwmPT1d3rZt20hX47gg22xkTZhIwCULWeP5EY8G+LH2krV4qH258o0t7C1p5O1rpzEz7phBvEvl/+Zc1I0ZfDD7TNaNM+FjtPLh4g9HrD4nkeN+rEe05eFhtjn4+ZFziPi0gKLTx3Pn5Cx2/G4HGtXwTF/oq7V3X4Xfiq1EP3keb+t+zzNrDrDuznnEBJwYqaj2799PSkrKQC/fPpR1EYZHQUGBdt68eUl5eXkZanX/Fqns3r07YMKECTFHHhc9ZMcpW2UlOJ1ojU5q1GpUqPDUeHPrBzvYUVTPs0smjmgwBqBLSMba5s7lnrsoqFRR1iyGIQRhOL31Uy6TmvYi2yXKwg34ufkdd8EYgCYhDp0DqrJ3cOnUSNQqiQ+2Fo10tQRhQF544QX/GTNmpDzwwAOl/Q3GjkUEZMepzpQXulZqtTp83Xz521eZ/JBVxUO/SePscaEur0Nvc050Y2KxNTmJaMkmRONGvaWOJrPV5fUSBAHqW61s2rASbYMyslIQdCgFTU9Gag4ZgGdyGgAN+UWEeLuxICWYT7YVY7YNydQbQRhWt956a21FRcWea6+9tn4o7ysCsuOUraw9IJNqqHQzIjl8+HhbCbfNj+d3M6KHpQ5+fn74+R19M3N9rJJ80tqs5pJgG0hOHvhmy7DUTRBOdi+szWWGfRumBj1oNBzwacPfcPRe897asyv5J0/ACViqrdBcyZUzoqlvsyn74wqCAPSe9kIYIbYyJUu/xl5EiUpNeZ2OCyaH8+cFicNWhz/+8Y/HPK8bo2x1ZlWNIbHpAKjh64wszhmbyIJUsYWSILhKcV0b7/5SyDrPTCymAPQJMVRa64gzJB/1mt7asysF+UVwwBd0DRqo2MusuNOJDfDgf1uLuGByxIjVayjJsozI7Sf0xul0SkCPudVED9lxylZWhjogAJoKKJcdBLsH8/gF44e1wbe0tNDSctRkz+iio0GSsKgTCKhUMlNHBTm47/M91LZYjnqdIAiD88SqbIKlOsLMuZjrJPRJSdSaa4+6whJ6b8+upFfrqQjRoa9XQcUeVCqJi9Mj+LWgnoPVI1OnoeTm5kZtbS3H0yI54fjjdDql6upqbyCjp/Oih+w4ZSsrQ/b3xYIDi9rBVWljhzQLf188/fTTADz44IM9nle5uaENC8NqMhLoUOaCXDLdm2e/sPN/32Ty/GWThq2ugnCy2Hywlm92l/Hq2FLsGSocjW04EqJwyI4ed/Po0Ft7drWGcC88sqw4i3ahAi6cHMFTq7L5dHsJdy86es/eaBAREUFJSQnV1f3PxWi1Wo/+lyacaJxAht1u/31PJ0VAdpyylJSRq1bj1r6CI9onrJcrhl5AQO/fE7oxY7CU1xCemgC0odE1c8tp6Tyz5gC/nRTG/GQxdCkIQ8XucPLgV/sI9zFwOlsw2SMAO60xgVBy7En9fWnPrtQWHYRKrsGSuQcDEOzlxtzEQD7bUcKyM5NGdeZ+rVZLbGz3Dd37KGYIqyKMYmLI8jhks9mxlJVh1zup1CgBWbD78Ac2t9xyC7fccssxy+jHxGLNL0CXdC5eDifVTSXcNC+OhCAjf/0igxbLMXPrCYLQD+9uLiS7spm/L4xEnb8es0rpWaoKU5JDh7iHHPXavrRnV5LjlcVI5qJKMDUAcEl6JJVNFjbkiF0+BEEEZMeh5z7dgsZhJzlKTaVB2SEiyH3496erqamhpubYSYh1sWOQTSbsvlMJctiprslEp1Hx+IXjKW8y89SqIdmmTRBOejUtFv61+gCnJARwunonOG1Ymj3QhodT3r5FabDH0V/c+tKeXckQFUObDkwNWijfBcDpKcH4eej4dFvJiNVLEI4XIiA7zny1q5TVa3cDEOZtotJTGYIYiR6yF198kRdffPGYZXTt3fSWNncCZDXVzcoX65RoX343I5q3fylgR9GQpmoRhJPSw8szMdscPHjuWKT934AxBHNRNfqUZCrbKtFImi773R6pL+3ZlYKNIRQFQWuDFkp3AKDTqDh/YjjfZ1ZQ1ypyGAonNxGQHUeyKpq457M9zDAqm7hqKafKzRNPrSfuWtfsV3kswcHBBAcfOxDUxcYAYC0oJMQYSoWtGZzKBP+7FiYR4uXG/V9k4HCK1UeCMFCrMyv5alcZt5wWT7yPBLlrcI5ZhDU/H7fkFCpaKwhyD0KtOnrW8L60Z1cKNARSGCRha9AhlxzaLeji9AhsDpmvdpWOWN0E4XggArLjhMnq4NYPduLppuWaeGVfVq1cTqVWc8xhCFe68cYbufHGG49ZRhMYiMrDA2tBASEBKdSoJOxFmwHwdNPy13NS2V/exAdbxGbCgjAQDW1W/vLFXpJDPLl5XjzsXw62Nizu6SDLuLX3kPX2PdGX9uxKQe5BFARLSDawHdjVeTwl1Itx4d58IoYthZOcCMiOEw8tzySvuoVnLpmIvqYKldEdtVamUnKOyPwxgOLiYoqLi49ZRpIkdDExWPPzCQmfjlOSqM7+pvP82eNCmDnGn6e+PyCGJARhAB5ankldq5WnLp6gpL7Z/QH4RGOu1wLglpxMRWvFMSf0Q9/asysFuQdREKSspDQX10DLoYn8l6RHkFneREZp40hVTxBGnAjIjgPf7i3nf1uLuOHUOOYkBGArK0Pr7wlAua2FUA/X71vZkzfffJM333yz13K62Filh8xHydxfXrCu85wkSfz9N2Npsdh56nsxwV8Q+uPHrEo+31HKzfPiSAv3hsZSOLgeJlyGOTsLlZcX6tBQKlt77yHra3t2FT83P0qDVMgSWOq1ULaj89x5E8LRaVR8sm3kAkZBGGkiIBth5Y0m7v1sDxMifVh2prItkq2sDK2nCpNGT521kXBj+IjULSwsjLCw3vOf6WJisJWXE6z2BaCiqRCayjrPJwZ7ctXMGP63tUi8AQtCHzWabPzl8wwSg43cOj9eObjnI0CGCZdi2Z+FW3IyDdYGrE4rIR7H7iHra3t2FbVKjZdnIE3BRsyHTewH8HbXsnBsCF/uKhMbjgsnLRGQjSBZlrnv873YHDLPLZmIVq38ddjKytAaLJQHxgEQZhyZL9E//OEP/OEPf+i1nC42BmQZ/1plMUKFRg0533cpc/uCBPw9dDzwVQZOMcFfEHr1yIpMqprNPHnRBPQatbJYZvt/IXo2snc05gMHcEtRhiuh95XYfW3PrhTkHkRFmAFLswHKdnY5d0l6BI0mG6szK0eodoIwskRANoI+21HKuuxq7lmURLS/BwCOpiacLS1oVfWU+ig9YyPVQ5aTk0NOTk6v5XQxMQCoiyvw1HpSYfCCvLVdyni5ablnUTI7ihr4UqymEoRjWn+gmo+3lXD9qXFMiPRRDmZ/Bw1FMP0GrIVFyCYT+vYVlkCvPWR9bc+uFOgeSH4Q2JpkHPk74LC9H2fHBRDuY+CjX8WwpXByEgHZCKloNPP3b/YxLcaPpTNjOo/byssB0KprKTP6ASPXQ/bBBx/wwQcf9FpO3x6QWQsKCPYIpsIzCA6u60x/0eHCyRFMiPThnyuzaBUZ/AWhR81mG/d+toe4QA9uPyPh0InN/wHvKEg6B0vWfgDckpOobFN6lHoLyPranl0p3BjOPl9lM3FLWSM0HlpZqVJJXJIeyc+5NRTXtY1UFQVhxIiAbATIssxfv9yLzeHknxeNR3XYHm62UmXuldbDQalWj1alPeaGwa4UGRlJZGRkr+VUHh5ogoOx5ucT6hFKhVYH5obObNyd5VQSDyxOpbLJwkvr8lxTaUEY5R77LovKJjNPXjwBN217XrGD66FwI8y8GdQazPuzQKtFHxdHRWsFGpUGPze/Y963r+3ZlcKN4RzwV1ZbK/PItnU5f1F6BJKEmNwvnJREQDYCVu2rZM3+KpYtSCI2wKPLOVvZoYCsTLITZgxDJY3MX9O1117Ltdde26eyupgYZaWlRwgVjva32yOGLUHJ4H/+xDBe/emgeAsWhCP8klfLB1uKuGZ2LJOjlEUyyDL8+A/wCocp1wBgzs5CHxeHpNMpOcjcg3v9nuhPe3aVMGMY9UaQfbwwN7pB8dYu58N9DJyaEMgn20tEMmnhpCMCsmHWZrXz8PJMkkM8uWZ2TLfztrIyJK0KtdGNMksDYR4jtyoqMzOTzMzMPpXVxcZgKSggxD2Yemsj5pC0HgMygHvOSkYtSTz23f6hrK4gjGomq4P7Pt9DlJ9754prAPZ+AiVbYe7doFWSRlv2Z+GWlARARWtFn7ZW6097dpVwYzhIEubYECytnlC8pVuZJVMjKW80iw3HhZOOCMiG2YtrcyltMPHQb9LQqLv/8SspL9RIQcmUtpaN2PwxgE8++YRPPvmkT2V1MTE4GxsJcyiboVdGT1e+bC0t3cqGehu4aV4c3+6tYPPB2iGtsyCMVs+uOUBBbRuPXzAOd51GOdhaCyvvhfB0mPQ7AOy1tdirq9EnJwNQ1tK374n+tGdXifCMAKAuwgtLjR25dDdYu/aUn54SjL+Hjo/F5H7hJCMCsmF0sLqFVzcc5ILJ4UyL7Xm+h62sFK2bGVNIGnXmuhFbYQkQGxtLbPvm4b3Rt5cLrVEm8lcEJYHTpsx76cH1p44h3MfA37/JFEMTo4AkSW9KklQlSVLGSNflRLS3pJHXfjrIkqmRzIpvnzPqdMDnfwBzE5z7b2jfp9KclQWAW0oyNoeNyrbKPn1P9Kc9u4qH1gMfvQ8lIRpkuxNrI93SX+g0Ki6YHM7qzEpqWiwjU1FBGAEiIBsmsizz4Nf7cNOoue+slKOWs5WWoHUzU+SnTL6N9Bq5SbhLly5l6dKlfSrbkfrCp9oEQLnRDzRuRx22dNOque/sZPaXN/GxmMA7GrwFLBrpSpyInE6Zv36VgZ+HnvvObv9ukGVYeR/k/QBnPwEhaZ3lLVnKjhf6pCTKW8txys4+BWT9ac+uFGYM40CAkrPQXK+F4s3dylw6NRK7U+aLHSJFjnDycFlAJt6ou1qdWclPOTXccWYigZ76Hss4LRYctfVoPRwUunsDEOMVM4y17GrHjh3s2LGj94KANjwctFrcyxqQkCgzVUP0LDjYc0AGcM64UKbF+PHUqmyazLahqrbgArIsbwDqRroeJ6JPd5Swu7iB+85KxtugVXrGvr4Vtr4CM27pnMjfwZyVhSYkBI2vLyUtStqIjqHAY+lPe3alcGM4GR71SFotZktQt4n9APFBnkyJ9uXDX4uQZdGDLpwcXNlD9hbijRoAu8PJ4yuziAv04Hczoo9erj0HmcYDClVOAKI8o4aljj355ptv+Oabb3ovCEgaDbrISBxFRYR4hFDcXAxx86E6S9l/r6drJIkHzk2lrs3K8z+MbMJKQRgJTWYbT6zMYnKUD7+dFA52K3x6Lex8D069GxY+ApLU5RpL1qEJ/SXN7QGZsfeArD/t2ZUijBGUmMrRxcdjaWmf2O90dit3aXokedWtbC+sH4FaCsLwc1lAJt6oD/loWzEHq1u5Z1FyjxP5O3SmvAiPoLCllCBDEO5a9+GqZjdxcXHExcX1ubwuNhZLfj4RnhHKPxRjTlNOHFx31GvSwr25ZEokb20q4GB19wUAwughSdL1kiRtkyRpW3W1WCHXF/9ek0Ntq5WHfpOGym6CDy+HzC9hwcMw//5uwZjTYsFy8CD6FGVCf2lLKRqVhiD3oF6f1d/27CoRnhHYnDac8VGYK81gqofa7i9k54wPxUOn5n9bxZQG4eQw4nPITvQv8VaLnWdW5zA1xpcFqcdemm4tVt52dQljKWwqJNr76L1pw+HKK6/kyiuv7HN5XUw0tsIiIt3DlaGU4LHgEQR5Px7zujsXJqHXqHlkhUiDMZrJsvyqLMvpsiynBwYGjnR1jntFtW28vamAS9MjSQvSw4eXQe4aWPwszL6tx2ssubngcOCWfCggC/MIQ90+4f9Y+tueXSXWW1lY0Bjpi6OpDbtJBYWbupXz0Gs4f1I4y/eUUd9qHe5qCsKwG/GA7ET/En/tp4PUtFi47+wUpCPedo9kO5iFpJLRJE1VAjKvkQ3INm/ezObN3SfcHo0+NhbZZiPO7EWNqQaTwwxxp7Vvo9R9SKJDoKeeP86P54esKtYfOPGCckHoyb9WZ6NRS/x5fix8cpXSTs7/D6Rfc9RrLB0rLNsDspLmkj7NH4P+t2dX6ZgXWxqqBVDmkRX81GPZ382MxmJ38sl20UsmnPhGPCA7kVU1m3l1w0HOHhdyKOv2MVhzM9F6OGgKSqTeUk+058gGZKtWrWLVqlV9Lt+x0jKqQXlbL2kuUeaRtdVA5d5jXnv17Bii/d15eHkmNsfRgzdhZEiS9D/gFyBJkqQSSZKuG+k6jWaZZU18tbuMa2bHErz1cTiwEs75F0y8/JjXmbOykdzd0UYpc0tLW0r7nBqnv+3ZVQIMAXhoPcj2V1JamOVYyP+py0bjHZJDvJgW48d7m4twivQ4wglOBGQu9O81OVjtTu5amNyn8raiIrRGB0XtKyxHuocsKSmJpPbJw32ha89xFFCtrJhU5pHNU072Mmyp16j56zmp5Fa18P7mwgHVV3AdWZYvk2U5VJZlrSzLEbIsvzHSdRrNnvo+G0+9hltDD8AvL8C062Fq7zGuZf9+3BITkVQqmqxNNFgaiPTsW2qc/rZnV5EkiRivGHLs5WjCQrE0eUBrFdQc6LH872ZGU1TXxnqRuV84wbky7cVJ/UadV93Ch78Wc8X0qG77VR6NtboRXZAvuS1K93zHXIuRsmTJEpYsWdLn8mo/P1SennhWNAEo88g8QyBobK8BGcAZKUHMiQ/gmTU5Ys6IcMLaVlDHj1lV3DYnBI81d0NwGpz5j16vk2UZc3Y2+mQlqCpoLAD6nhqnv+3ZlWK8YyhoKsAtKRlzebNyMH9Dj2UXjg0h0FPPu7+IFzXhxObKVZYn9Rv1EyuzMGjV/PH0hD6Vd9TV4jQ70UbHktuQi5varc9vvq6yfv161q9f3+fykiQpvWRFZRi1RiX1BUD8fCjaDNbWXq//2+JUms02nlnT89uyIIx2z/2Yi7+HjqstH0BzBZz7HGh6zk14OFtpKc7mZtySleSxBU0FgBLc9EV/27MrxXjFUN5ajjopHmtRKU738KPOI9NpVFw2NZK12VUU17X1WEYQTgRiyNIFthXUsWpfJTfOHUOAsfcvWgDr7nUAaJMmkFOfwxifMX1aOeVK69atY926df26RhcTjbWwkCivKAqb2t9o404HhxUKfu71+qQQT66cEc17mwvJrmgeQK0F4fi1p6SBDQequT1dj2b7GzB5KURM6dO15r3KPEy3NCVrf35jPhpJ0+dJ/QNpz67SEUQ2RfqC04nFMEn5fjjK4p/LpkehkiTe2yJ6yYQTlwjIhpgsyzz67X6CvfRcN2dMn6+zZSjLvnXjTyWnIYd4n3hXVbHP0tLSSEtL673gYfSxsdjLy0lwiyS/MV85GDUTNAbI/aFP9/jzGYl4uml5aPk+kaVbOKG8uDYXLzcNS9o+AEkF8+7t87WmvRlIWi1uiUqve0FjARGeEWhV2j5dP5D27Cpx3ko+tMIQ5Z8gszUU2mqhuufUN6HeBhakBPPxr8WYbY5hq6cgDCcRkA2xVfsq2FHUwB0LEjHo+t7DZc1RdphqHRNHjamGRN9EV1Wxzy688EIuvPDCfl3TsdIyudWH8tZy2mxtoHWDmDnKvnx94Ouh489nJLAxt5bVmZX9rbYgHJcOVDazal8lf5zihjbjY2USv1dYn683Z2SgT0lB0ukAZciyr8OVMLD27Cox3jHoVDoytNWo3N2x1GuUE0fZ+xZg6cxo6ttsfL2rbJhqKQjDSwRkQ8jmcPLPldkkBhu5cHLfhhE6ry0uRu2h4aBN2T4pwadvc89cafXq1axevbpf13SstIxuVN7aO4ct40+H2lyo79uQwxUzookPMvLIt/vFG7FwQnhxbS7uOjW/U32vHJhxU5+vlZ1OzPv2YUgbC4DD6aCwqZBYr74v/BlIe3YVrUpLvG88WQ3Z6JOSMBeUQGAy5B69fjPj/EkO8eSNn/NFz7lwQhIB2RD639Yi8mt63yKpm7p8bHVmtCEBHKhXJrMn+I58QLZp0yY2beqeQftYdO35kYJqlNQXBxsPKifiTlf+28deMq1axf+dO5bC2jaeXSP2uRRGt4KaVr7ZXcY1UwNx2/MupJ4HPn3fp9ZaUICztRW3tHEAlLWUYXPa+tVDNpD27ErJfslk12WjT07GkpWNHHe6krHf0vMWapIk8ftTxpBd2czPuTXDXFtBcD0RkA2RJrONZ9fkMHOMP/OTe99Xrov89Vhb1OhiE8iszcTPzY8AQ4BrKtoPkyZNYtKkSf26RuXujiY0FPfyBlSS6tA8soAE8I7s8zwygDkJASyZGsmrG/LYVdzQr3oIwvHk5fV5aNQqbvTaDJZGmHFLv64/NKFf6SHLa8wDYIx33+epDqQ9u1KSbxL1lnqsY0JxtrRg85rcvvin59WWAOdOCCXQU89rP+UPY00FYXiIgGyIvLwuj7pWK3/pwxZJR3IeWIutTY0uIY2MmgzGBYzr9z1c4bzzzuO8887r93X62Bjs+YVEGCMOBWSSpGyjlL8BHLY+3+sv56QQ7OXGnZ/sFkOXwqhU1mDisx0lXJoeief+/0HoBIic2q97mPZmILm7o2/fHDy7LhvoX0/6QNuzq6T4K+k7SkLat1Bq8gCtB+QcfdhSr1Fz1cxoNhyoFquwhROOCMiGQFmDiTd+zue3k8IZF+Hdv4udTmx7fgZZwhkVSn5jPmkBx8dKqO+++47vvvuu39fpExKw5OUxxjPm0JAlKMOWliYo2dbne3m5aXn8wvHkVrWIoUthVHp1w0FkGW5NNUHFXpjY/w2+zRkZuKWmIKmVhULZ9dlEekbioe1b0mkYeHt2lUTfRCQk9no1gkqFJScPxsxV5pEdY47YFdOjcdOqePNn0UsmnFhEQDYEnvo+GxlYduYAVkZWZWKpUuZMFPk6kJEZFzBuaCs4QFu3bmXr1q39vk6fmIRsMjHeGkRBYwFWR3vW/TFzlaX+fZxH1mFuYmDn0OXmg7X9ro8gjJTaFgsf/lrEbyaGE3zwC1BpYdxF/bqHbLNh3r8fw9hDL2oH6g/0eyX2QNuzq3hoPUjyS+LXhj3ooqMxZ2dB/BnQUKQsADoKXw8dF02J4IudpVQ3W4axxoLgWiIgG6SM0ka+2FnKtbNjifB17/8N8tdjbVaWfGe41wMcNz1k06ZNY9q0af2+Tt++X15SvRt22U5egzLfBYMvhKf3ax5Zh78tTiXG34PbP9xFndhWSRgl3tpUgMXu5KZTImHPR5C0CNz9+nUPc/YBZIsFt/HKi1qbrY2ipiKSfPu3L+VA27MrpQens7t6N7rkRCz7syBhgXIi+9g9edfOjsXmdPL2pgLXV1IQhokIyAZBlmUeWbEfH4OWm0+LG9hNcr7HavVDExTErpYsIj0j8db3c9jTRc466yzOOuusfl+nj48DlYrQciVwyqrLOnQy/nQo2wmt/evp8tBreO6ySdS1Wrn7091i2btw3Gs223h7UwFnpgYT37QF2mpg4hX9vo9px3YA3KcoGf1zG3KRkUn0618P2UDbsyulh6RjcVioj/DGVlqKQ+WjzLHb/80xrxsTaGRhaghv/1JAk7nvc1IF4XgmArJBWLG3nF8O1nLHgkS83PqWLbsLUwMU/IzV7I0uNobtVduZEty3bVSGw9dff83XX3/d7+tUbm7oYmLQF1Rg0Bg6U3kAkHAmIEPOqn7fNy3cm/vOTmbN/ir+u7Gg39cLwnD6YEsRTWY7N8+Lh13vg0egMiTXT23btqMND0cbEgIo88eAfveQDbQ9u1J6cDoSEln+ytCjJTsbUs6Dkq3QdOwEsLfOj6fZbBebjgsnDBGQDVCLxc7DyzMZG+bF5dOjB3aT3DXIDjuWGhNtYb40WhqZFnL8DCns3LmTnTt3DuhafVIi1gM5JPgmdO0hC5sEnmGQtWJA9716VgxnpATz6Lf72SLmkwnHKbPNwes/5zMnPoAJfg7IXgnjLwV1/17cZFmmbccODFMmdx7bW70XH70P4cbwft1rMO3ZVbz13iT6JrLBUASAOas9IAPYv/yY16aFezMvKZA3fs6nzWp3dVUFweVEQDZAz/+QQ2WThYd+k4ZaNcAUFVkrcKgDcba0UeSjpHSYGtK/5fCuNGvWLGbNmjWga92SkrAVF5PmFkd2ffahIUZJgqSzIO9HsJn6fV9JkvjXpROI8nPn5vd3UNrQ/3sIgqt9ur2E6mYLN8+Lg4xPwWmDCZf1+z62oiIcNTW4Tz7Uc767ejfjA8f3OzXOYNqzK82Pms8G014kH29lYn9gIgQkwf7ee/P+OD+eulYrH2wpGoaaCoJriYBsAA5UNvPGz/lckh7BlGjfgd3EboXcNViMSo/YLo8aor2iCfEIGcKaDs6CBQtYsGDBgK7VJyrDKeNavGm2NlPSXHLoZPLZYGuDg+sHdG8vNy2vLk3Handyw7vbRH4y4bhiczh5dcNBJkT6MDPOH3Z9ACHjIaT/i3Xatu8AwD1dCciarE0cbDzIhMAJ/b7XYNqzKy2IXoAsQVO0vzKxH5SdDAo3QuuxM/JPifZj5hh/Xt1wUHwPCKOeCMj6ye5wcucnu/EyaLlnUfLAb3RwLViasDiV4c4fdHnH1XAlwGeffcZnn302oGvdkpQJx/FVSt6kXdW7Dp2MOQV0npA9sGFLgPggI88umci+sibu/WyPmOQvHDc+31FCUV0bt54Wj1SVCeW7BjSZH6Bt+zbU3t7oxigZ+fdWKxn7xweO7/e9BtOeXSneJ55kv2R2eTVgyclBttsh5VyQnb1O7gdlLllVs4UPt4peMmF0EwFZP73600H2lDTy0G/G4m/UD/xGez4Cgx/mGhmnjyflehPzIucNWT2HQkZGBhkZGQO6VhMWhtrXF8+8Stw17uyu3n3YST0knKHMq3E6B1y/01OCufPMJL7cVcYzImmscByw2B0890MuEyK8OSMlSOkdU2lh3MX9vpcsy7Rt3oIhPR1JpXxV767ejUpSDShX4WDasytJksTlyZezy7sB2WrFWlCg9CgGJMLuD3u9flacP9Nj/XhhbS6tFjGXTBi9REDWDwcqm3l2dQ5njwth8fiwgd/I3KRMak+7AEtOLtXhHhg0BqaHTh+6yg6BefPmMW/evAFdK0kSbuPHYclQtoLaU72na4Gkc6C1Ckr7nrW/JzfPi+OS9Aie+yFHvCELI+7jX4spbTBxx5lJSE4H7PkYEheCh3+/72UrKsJWWorH7EPzvnZU7iDBJ6FfGfo7DKY9u9o5Y87BMkb5Tm3K2K3MNZ1wGRRvxlmTw66qXXye8znri9djcXRNBitJEveclUxNi5XXxR6XwiimGekKjBZmm4M/f7QLo5uGh34zyMStmV+B3YyceiGW3JvZO0XDnPBT0asH0ePmAnPnzh3U9YZx46nZ8BOTjHN5Le892mxtuGvbk+cmLACVBrKWQ+TAh2olSeKR346jssnC/V9mEOzlxmn93dxdEIaA2ebghbW5TI3x5dSEADiwUnnpmHj5gO7XsnEjAMbZswEw2U3sqNrBZcn9XxwAg2/PrqRT6/j94gewvXg93656kcmzE7GHp7HW14eVK6+k3NHWWTbQEMhjpzzW5QV2cpQvC8cG8+qGPK6cETW40QtBGCGih6yP/rEik31lTTxx4XgCBtPYZRl+fR0CU7A6g5EtFrL8TMyPmj90lR0iH374IR9+2PuQwdEYJowHWWZSnRcO2cG+2n2HnfSBMadBxheDGrYE0KpV/OeKyaSEenLz+zvYU9IwqPsJwkC880sBlU0W7liQpKyA3PkeeAS1597rv9aNm5T8Y1FRgNI7ZnPamBU2sJWSg23PrjYz6hTsCdH45lRy+beXs/SnZbzr48UYUxuPzn6E7y74jpfPeBlPnSc3rbmJLeVbulx/18IkTO1BsSCMRiIg64Ovd5fx3uYirj91DGekBg/uZqXblUm+U69TkiACVaEG5kcefwFZdnY22e11HAi3NKUnMbrUikpSdfsCZdxF0FikJIEcJA+9hjevnoq/UcfV//2VnMrmQd9TEPqqpsXC8z/kMi8pUFlZ2VKl9JBNWNLv3GOg7F/ZtnkzHrNnd6a3+KXsF7QqLZODJ/dydc8G256HQ/is00moVPP0zMf592n/Zt24O3m5tIhz1T5EeEYwO3w275z1DtFe0dy94W7qzHWd18YHeXLp1Eje/aWQA6L9C6OQCMh6sbu4gbs/3U16tC93LexfZuwebX5JWWE4YQlNO7Zj0UBq+qJDQ3nHkYULF7Jw4cIBX6/x9UUbHYVzz37S/NPYXL65a4Hkc0DjBns/HWRNFUGebrx33XTUKokrXt9CQU3rkNxXEHrz9PcHMNkc/PWcVOXAno/AaYdJVw7ofqY9e3C2tuLRPlwJsKl8E5ODJmPQGAZ0z8G25+HgPmUy2GzMaQ5hftR8vNMuBjdv+PWNzjLeem+eOPUJmq3N/GPzP7pcf+eZSXjoNfztywyx8loYdURAdgwl9W1c9/Y2Aox6Xv7dFLTqQf5x1eTCvs8h/RrQe1L160/khcJ5yb8dmgoPsRkzZjBjxoxB3cN96lTatm1jevBUMmoyaLYe9uaq91SSxO77AhxDsx9dTIAH7/9+OjaHkyte3yISxwoul1nWxEe/FrF0ZgzxQUZlWsLO9yFiGgQO7CWuZe1a0GjwmKm0v+KmYnLqczg14tQB13Mo2rOrGSZNAqBth5J/DZ07TF6qpL9oPJTLMME3gRsn3MjqwtX8WvFr53F/o567FyWxJb+Or3Yde+slQTjeiIDsKKqbLVz15lYsdgdvXTN1cPPGOvz0FKj1MOuPOMxmtLnF1MT5MzloYEMQrvbee+/x3nvvDeoeHtOn42xqYnZrGA7ZwbaKI1ZVjrtE2XQ5Z/WgnnO4xGBP3r1uOk1mG1e8tpmqJvOQ3VsQDmd3OLnv8z34uOv40+kJysHCTVC9Hyb/bkD3lGWZptWr8Zg2DbWXFwCrCpW9XxdEDzyx61C0Z1fT+Pmhi4nBtG37oYNT/wDIXXrJAJamLiXIPYhntz/bpTdsydQoJkR48/DyTGpauq7IFITjmQjIelDTYuHy1zZT1mDm9aXpxAd5Dv6m5buVnDpTrwNjENs3fILGAXGzz+r3FijDJS8vj7y8vEHdw32ashIqMqcRg8bAhtINXQskLADPUNj+30E950hp4d68dc00qpotXPbaZipFUCa4wOs/57O7pJG/nzcWb/f2uWJbXgKD74ByjwFYcnKwFRbheeah4Ov7gu8ZHzCeUGPogOs6FO15OLhPn07br78iW63KAd9oSDobtr8F1kPTENw0btwy8Rb21Ozhh6IfOo+rVRJPXDSBZotdJI0WRhURkB2hpL6NJa9upri+jTevnsr0Mf3PH9SNLMPK+8DdD069C4DtP7wPwKwzrx38/V3k3HPP5dxzzx3UPbTBQehiYzH/uo1Twk9hbdFaHM7DtjhRa5UhiZzVUF84yBp3NSXalzevnkp5o5lLX/mFMjF8KQyh3KoW/rX6AAvHBrN4fHugVF+o5BiccjVoBzbXq3n1apAkjPOVhT75jfnsr9vPmTEDW63ZYSja83DwmDMbZ1sbbbt2HTo46zYw1XXrJTsv7jxivWN5YecLXb5XkkI8uWdRMmv2V/GByE8ojBIiIDtMRmkjv/3PJiqbzPz36mnKaqmhsO1NZV+20x8Agw9byrdg3FeEOcQX9+CBv/G62uTJk5k8efDDqR4zZ9K29VcWBJ9Krbm2a9Z+UAIySYIdbw/6WUeaMcafd6+bRm2LlUte+YXiurbeLxKEXphtDv74v52469Q8fH7aoV7ura8CEkz9/YDuK8syTV9/g3t6OtogJZ/epwc+RSNpOGfMOYOq81C1Z1fzmDEDNBpaf9546GDUdCVNzsZ/d+kl06g03DzhZvIa8/i+8Psu97lmVgxz4gN46JtMdhU3DFPtBWHgREDW7pNtxVz08ia0KonPbpo1dMFYTQ58/1fly2TyVciyzAu/PktaEQTNPWNonuEi77zzDu+8886g7+N5xunIJhNTCjVoVVpWFx4xX8w7AhIXKUMSlpZBP+9IU6L9eP8P02k227n45V/IrRr6Zwgnl//7eh/7y5v41yUTCPJ0Uw62VCsvX2kXKP9PD4Bp5y6shYV4n38+ABaHha/yvmJ+1HwCDAGDqvNQtWdXU3t6Ypg4gZaff+p64rS/KPNNt77a5fCZMWcS7xPPf3b9B7vz0NZJKpXEv5dMJNBTz/XvbKO8UfSQC8e3kz4ga7XYueuT3dz16R4mRfry5a2zSQwegjljAKYG+N8S0LrDb14ESeKHoh+w7N6Lm1XG65SBr5gaDvn5+eTnD34rEvepU1F5e2Nb+xOnhJ/Ct/nfYjtyVeWcP0NbrfIPmguMj/Dhw+tnYHc6ufClTWzNr+v9IkHowVsb8/nw12JunhfH/OTD8hJufBbsZph7z4Dv3fjll0gGA57t6SlWHFxBo6WRi5MGNh/tcEPVnoeD8dS5WDL3Yy0pPXQwcpqSZPenf0FzRedhlaTilom3UNBUwHf533W5j79RzxtXTaXN6uCK17aIuaTCce2kDsjWZVdx5jMb+HRHCbfNj+e9308/9LY7WJZm+OBSqC+AS94B73BMdhNP/PoEZxZ5I2m1uB/nS9AvvvhiLr548P8QSFotnvPm0bx2LRfG/oY6cx3rStZ1LRQ5TelF3PQ8WF0zrJgS6sXnN83G36jjyte38NWu0t4vEoTDrMwo5+/LM1mQGsyyMw9LadFcoezAMX4JBCQM6N6OxkYaly/Ha+FC1EYPbE4br+15jbH+Y5keMvh9boeqPQ8Hr7PPBqBpxYquJxY9rgS9qx/ocnh+1HyS/ZJ5afdL2JxdX/aSQjx565qpVDaZWfLqZvJFfkLhOHVSBmSVTWbu+GgXV//3V9y0Kj69cSZ3nJmEWjVEqx1NDfD+JVDyK1z4OsQoyR1f2/MaFS1lzMwCj1NOQW00Ds3zXCQ1NZXU1NQhuZfX2WfhbGpi/H4zwe7BfJL9SfdCc+9R9v47YkhiKEX5u/P5TbOYFOXDnz7cxb/X5OB0ilVYQu9WZlTwx//tZGKkD88tmdT1++L7v4HshLl3Dfj+9R9/jNzWht/VVwGwPG85JS0l3DjhxiFZiT2U7dnVdBHhGCZPpmn5N11XSfrHwew/KYl3cw+trOzoJStuLmZ53vJu90uP8eOd66bR0GblvBd+ZtW+im5lBGGknVQBWYvFzr++z2bek+v4Zk8Zf5wfz4rbTmFKtN/QPaQmB14/XdkO6MLXYKyS9HVfzT7+m/FfrnPORlVdh9ei4ztjNsCbb77Jm28OzRCix5w5aMPDafzwIy5OvJhfyn8hszaza6HomZB4Fqx/Ahpd13vl467jneumccHkcJ5Zc4Br3vqVulary54njH4f/1rMLR/sIC3cm7evnYZBpz508uA62PsxzL4d/MYM6P5Oi4X6d9/DfeYM3JKTabI28eyOZxkfMJ65EUOzKfhQtufh4LX4HCw5uZgzMrqemHMHBCbDFzdAc2Xn4bkRcxnrP5aXd7/cfUoEylzSr2+dQ5SfOze8u50b3t1GXrWYTyocP06KgKzFYufVDXnMe3Itz/2Yy+kpQfxwxzyWnZmEm1bd+w36QpZh90fw2ulgqoervoG0CwEw2U3c9/N9+Bv8OW+XFpW3N54LBp7gcbgUFxdTXFw8JPeS1Gp8L1tC29atXKyehqfOk5d2vdS94FmPg+yAb+9U/kxdRK9R8/TFE/jH+Wn8klfLOc/9xPoD1S57njA62RxO/u/rfdz92R5mjvHn3eum4+V22N6UrbXwxU3gFwen3DHg59S99Tb2qioCbrwJgH9v/zcNlgbun3H/kOUpHMr2PBy8zz0Xlacnta+93vWEzh0ufktZAPTZdWBXkr9KksQfJ/2RstYy3tr3Vo/3jPRz54ubZ3P3oiTWH6jmjH+t57q3fuXLnaU0mYdmtxBBGCjNSFfAlaqbLby9qYB3fimgyWxnVpw/r1+VzMRIn6F9UEsVrLhD2d4jYhpc9Ab4RAHKMvZ/bP4H+Y35vDH2Ecx/vx+/K69EZRhYjqLhdPnllw/p/bwvvJCal16m7ZU3ufoPV/P8zufZUr6F6aGHzY/xjYHTH4RV98GWV2DGjUNah8NJksSVM6KZEOHD7R/t5Ko3t3Lh5Aj+ek4Kvh46lz1XGB32lzdx96d72FvayHVzYrnvrGQ0h2+fZrcqAUFbDfx+zYDzjtkqq6h95RWMp5+Ox/RprCpYxccHPuaq1KtI9R+6Icahbs+upvb0xPfyy6l99VUseXno4+IOnQxKgXP/DV9cr/wdXPQWqDXMDp/NmdFn8vLulzkj+gxivWO73VenUXHzvHguSY/k7U0FfLytmB+yqlBJkBzixaQoHyZE+JAW7k1CsHHwW+YJQh9Jx1MW4/T0dHnbtm29FzwGp1Pmp9wa/reliDX7K3HIMgtTQ7hxXtzQB2J2C2x5GTY8pUw0nf9XmHkrqA71ur225zWe2/kcN024ifPezqFl3XriVq3szDF0sql56SWq//0cwa+8wNK6Z7A5bHx23mcYdYfNp5Nl+PByOLAKLnkbUlyfzNJsc/DCj7m8tD4Pd62aG+aO4do5sbjrjst3luNza4fDDEVbHil1rVb+szaXtzYV4G3Q8vD5aZw97oh8gXarMmS273NlBfUANxGXHQ6Krr0O0549jPnyC/a7N3D999cT7xPPW4veQqvW9n6TE5i9ro68MxZgmDiRyDde795buPklWHkvJJ0DF7wCek9qTDX89qvf4u/mz/vnvI+H1uOYz3A6ZXYWN7A+u4odRQ3sKm6gxaKkz9BpVCSHeJIW7k1amDdp4V4khXii1wzRyIriuG/PwvA4IQIyu8PJrwX1rNpXwap9FZQ3mvF113Lh5Agumx5FXOAQT563mWDX+7DxOWgoVHJonfmPLqurZFnmlT2v8OKuFzk79mzuaz6V8mV3EvDHWwm85ZahrY+LvPbaawD84Q9/GLJ7Oi0W8i+4EGdTE63/eZCrdt7B9JDpvHD6C+jUh/VKWVrg3fOhbBcs/peSPHYYHKhs5omV2azZX4mfh44lUyO5fHoUEb7uw/L8Pjruv8BHY0BWUNPK+1sK+WBLESabgwsnR3Df2Sn4Hdlb2lwBn/0eCn6CBQ/D7NsG9DzZ6aTyH/+g/oP/Efroo2TNDOWOtXfg4+bDW4veIsh9aF/aXNGeh0Pd++9T+fA/CLrnHvyvubp7gS2vKDuh+MfDb16AyGlsLt/MDatvYFrINP592r9x1/a9/TqdMgW1rWSUNZFR2tj502RWgjSNSiIpxJP0aF+mxPiRHu1LmM+gRjyO+/YsDA+XBmSSJC0C/g2ogddlWX78WOX7+iVusTvIrmhma36d8lNQR0ObDb1GxamJgZw3IYwzxwYP7VuMLEPlPmXy7q4PoLUawqfAafdD/Oldipa1lPHY1sdYV7yOc8ecy92W06i4407cUlOJfvcdJO3oeOv9+9//DsCDDz44pPc1Zx+g8IorUPv6cuCu87mn/CXSg9N5/JTHCfY4LK+TqQE+uRoOroXkxcpQZmDikNblaLYX1vHy+oP8sF+ZNJwe48eZqcHMSwpiTIAHqqFakTsww/5wV7XlkeR0yuRVt/BjVhWrMyvZVliPRiWxKC2E289I6L6HrblR2bpn47NK7/jiZ2HiZQN6tqOxkYq/P0TTt99ivOpKPj5Dzzv73yXWK5b/nPEfwoxhg/58R3JVe3Y12emk9PY/07x6NUF33onf1VchqY/4bj+4vn2Sf7mykGr6TXxpKefBXx4kyTeJR+c8Srxv/MDrIMuU1JvY2x6c7S5pYGdRA21WZbumMG+3zuBsSrQvKaFe/Vm1LwIyAXBhQCZJkho4ACwASoBfgctkWc482jXp6enyDz/9QqvFTqvFTpPZRmWThYpGM5VNZgpr2zhQ1UxhbRuO9lQF0f7uTI3x4/TkIOYmBQ5+iMnpUL5422qVHGI1OcrG4AU/Q1MJqDQQvwBm3QrRs0GSsDgslLeUk1GbwYbiDfxQuBqfFonb3c9h4tZaWn5ci9vYsUS+/hoaX9/B1W8YdUwAjoyMHPJ7m3btouSPt2FvaKDxtIm8GpBBQbDEaeN+w7yo00j0TSTIPej/27v7GDnu+o7j7+/e+e58Pj+cH+qcH4jt2HmwQnCiQAtBog4RJhHEiUixWwGmEFFC0gcR0iRColGrikKVhspNbdKQQgFBwEkUkwZFDnEQpCSNlRqDuTg5m6S2sZ2Y88O59j3tfvvH/M6M17t3e3ezO7O+z0ta3exvZmc/9/vtb/a3s7MzWCEP//XP8ON/hMFTUZ0vvQbmXwHti6MLkzdW73iv/UdP8b0X9/LUzoO8fLAHgGktjbxt4QwumNPG+bNaWdjeysy2Jtpbm2hvncTUlknJnUKltJpuwMfal9MekA3mC5zoG6Snd5BjpwY4eKyXfUdOsu/IKToPHmfH3mP0hK+mlndM49pLz+PDb1/I3KnN0TbgVHd0bcpDO6NLn+3eGr0GL3gvXPtlmF35G7wXCuS7uznV2cnRnzzLicc24ydPsn31JXxl+ev05vu4cdmN3Pn2O0e1N2c0qtmfq63Q28tv7vhrerZsoWX5cmasWUPrFZfTtGjR7z7g9p2An9wbnQ+u7zhMncfWt7yNv+nbzfF8P1d3/AErF67kso7f57yp82huaB5XpsF8gZcP9rDttW62vX6Eba8d4WA48WxbcyMXzm1j0ewpLJk9hQXtrcxqa2LWlGZmtzXR1tLI5EkNQ1/BakAmQHUHZO8E7nH3VeH+3QDu/sVyj7mobbJ/9bJFECKVepVaLK4RLWqxeR6bB5ReV3FZ0TrLloWp4nU5fjqXYUzpN3L5AgC56dOZ+bGPMuvmm8k1j28DcK4ZfPNNDm/YwNFHHsX7ol9K9TdAbxP0TYLBBsPMyJlF17osFIACUY3HWc02aVn4gn/lc521HpCNqS9vvGxR2WaxMhVZqnykZd3O3i5EM0qUjaU8/nxDxzCNZh0OLf1OY7RJYDAHL15oPPquHN0LprFq8SrWXLSGi2deXOJZZYi7c/yJJzi8YSP9e/acLs9NmUJu6lSssTFqHwMb+D8YOAkDJ8mT52iugZ5cjnyssXIetdHQbTij6XCj3UbUuj9LdlXziOX5QPw31vuAs043bWafAj4FcMH0Fo7NmYTF3mCj92LjjA8Sp0dgFE+cWVb8Mi/1YcTszHmWiw7KzzVAwySsoQlyjdFGH3CiLB6lxMxoamxmcsNk2ifPZHrzNBrbptLY0UHz0qW0rliBNdXnL/Y2btwIwKc/XZ1fOjbOmcN5X/gCv3fHHZx86SX6d+/h1IF9HO7ex2BPN4O9Jxgs5BksDOJeAI8GYlbI4/kBKAxGezTdgUKZ02T4GX+S5oThYfgwEI9wxrAxCyO5sRtTXz46K+y5iHe5Ed96DC85Goo9ODY//gHMwzKnP6hFHTT0U04P7nPF24Ez8hVtA3KN0Njyux/qxA8qt+J1nJ1v6E6+ZRKn2lvpnddO7q3LmTtzHvfOWMrSGUtpyCV6gHhZ1e7P1WZmTP/gB5n2gQ/Q39VFb2cn/f+7l0JPD/meHsjno+1EwcOHN8fzeRjopbX/BD5wihMDJ+gZPElvvp9+L5CnQAGncLrjVt5RR1yyqPt72H4NbSuiyfreMEiyUv8Jmbs/ADwA0dccqx/P9nEnE8mhQ4dGXigBucmTabvqKrgquqLB/Jo8qyStuC/f+AP15SypVX+uNjOjedkympeN7RJVIllVzQHZfiB+sMKCUCZ14tY6+TWoVJ368jlA/Vkk26o5IHsRWGZmi4k23muB+joz4QQ3e/bstCNINqgvnwPUn0WyrWoDMncfNLPbgKeIfir/kLvvrNbzSfLuv/9+QJ+sJzr15XOD+rNItlX1GDJ3fxJ4sprPIdVz+PDhtCNIRqgv1z/1Z5FsS/2gfsmu22+/Pe0IIpIQ9WeRbNOATMpqa0v4klMikhr1Z5Fs02Xspaz169ezfv36tGOISALUn0WyTXvIpKzu7u60I4hIQtSfRbKtqhcXHy0zexN4PeHVzgaydjRr1jIpz/CylqfF3S9NO8RwxtmXs1bfyjM85RnZcJkOu/v7axlGsilTe8jcfU7S6zSzbe5+ZdLrHY+sZVKe4WUxT9oZRjKevpzF+lae8pRnZFnMJNmjY8hEREREUqYBmYiIiEjKJsKA7IG0A5SQtUzKMzzlqa2s/X/KMzzlGVkWM0nGZOqgfhEREZGJaCLsIRMRERHJNA3IRERERFJ2TgzIzOyPzGynmRXMrORPi81soZltNbNfhWX/MjbvHjPbb2bbw+26aucJy73fzHaZWZeZ3RUrX2xmL4Tyh82saTx5wjpnmtkWM3s1/G0vsczKWB1sN7NeM7shzPu6mf06Nm9FtfOE5fKx59wcK0+0jiqsnxVm9rPQtjvMbE1sXiL1U+41EZvfHP7frvD/L4rNuzuU7zKzVWN5/lrIWttXmmkitn8FeT5r0TZ1h5n9yMzOj80r2X5VzvNxM3sz9rw3x+atC+37qpmtq1Ge+2JZXjGzo7F5ideP1Dl3r/sbcAlwEfAscGWZZTqAK8L0VOAVYHm4fw/wuRrnaQB2A0uAJuDnsTzfA9aG6Y3ALQlk+jJwV5i+C/jSCMvPBLqB1nD/68BNCdZRRXmAE2XKE62jSvIAFwLLwvQ84AAwI6n6Ge41EVvmM8DGML0WeDhMLw/LNwOLw3oakmqvJG9Za3u1/7jyrIxtI24ZyjNc+1U5z8eBfynx2JnAnvC3PUy3VztP0fJ/DjxUrfrRrf5v58QeMnfvdPddIyxzwN1fCtM9QCcwP608wDuALnff4+79wHeB1WZmwNXAprDcN4AbEoi1Oqyr0nXeBPzQ3U8m8NxJ5DmtSnU0Yh53f8XdXw3TvwHeAJI8mXHJ18QwOTcB7w31sRr4rrv3ufuvga6wvizKWttXlGkCtv+Iedx9a2wb8TywYJzPOa48w1gFbHH3bnc/AmwBxnt2/NHm+WPgO+N8TjmHnRMDstEKu/kvB16IFd8Wdrs/VO4rlITNB/bG7u8LZbOAo+4+WFQ+XnPd/UCYPgjMHWH5tZy98fj7UEf3mVlzjfK0mNk2M3vewtenVKeORlU/ZvYOok/Fu2PF462fcq+JksuE//8YUX1U8tisyFrbjyYTMGHaf7Tr/CTww9j9Uu1XizwfCu2wycwWjvKx1chD+Cp3MfBMrDjp+pE6l6lLJw3HzJ4Gzisx6/Pu/vgo1tMGPAL8lbsfD8UbgL8DPPy9F/hELfIkabhM8Tvu7mZW9nwnZtYBvBV4KlZ8N9EbVRPROXXuBP62BnnOd/f9ZrYEeMbMfkH0JjRqCdfPN4F17l4IxaOun3NZ1to+wUxq/xLM7CPAlcB7YsVntZ+77y69hsT8APiOu/eZ2Z8R7U28usrPWYm1wCZ3z8fK0qgfybC6GZC5+zXjXYeZTSIajH3b3R+NrftQbJl/A56oQZ79wMLY/QWh7LfADDNrDJ+Ah8pHNFwmMztkZh3ufiC8obwxzKo+DDzm7gOxdQ/tPegzs38HPleLPO6+P/zdY2bPEu3ZfIQx1FESecxsGvCfRAPv52PrHnX9lFDuNVFqmX1m1ghMJ3rNVPLYmsla2yeVaYK1f0XrNLNriAa173H3vqHyMu03ngHHiHnc/bexuw8SHRs49Ng/LHrss+PIUlGemLXArfGCKtSP1LkJ85VlOM7ia0Cnu/9T0byO2N0bgV/WINKLwDKLfjHWRNRhN7u7A1uJjuECWAckscdtc1hXJes861iHoToK9XgD46+jEfOYWfvQVz9mNhu4CvhVleqokjxNwGPAf7j7pqJ5SdRPydfEMDlvAp4J9bEZWGvRr/AWA8uA/x5DhlrIWttXmmmitf+IeczscuCrwPXu/kasvGT71SBPfFt+PdGxwhDt7X9fyNUOvI8zvwGoSp6Q6WKiHxL8LFZWjfqRelfqSP96uxENovYBfcAh4KlQPg94Mky/m+gryR3A9nC7Lsz7JvCLMG8z0FHtPOH+dUS/9txN9Il7qHwJ0ca0C/g+0JxAHc0CfgS8CjwNzAzlVwIPxpZbRPQpL1f0+GdCHf0S+BbQVu08wLvCc/48/P1kteqowjwfAQZir5/twIok66fUa4Loq6/rw3RL+H+7wv+/JPbYz4fH7QKuTaMv1mPbq/3Hledpom3cUH1sHqn9qpzni8DO8LxbgYtjj/1EqLcu4E9rkSfcvwf4h6LHVaV+dKvvmy6dJCIiIpKyCfOVpYiIiEhWaUAmIiIikjINyERERERSpgGZiIiISMo0IBMRERFJmQZkMqJwnp0XzKzLzB4O59wRkTpjZreFfuzh/FcikhEakEklvgTc5+5LgSNE16wTkfrzHHAN8HraQUTkTBqQyWlmtsjMXjazb5tZp0UX551CdC24oTOTf4PoTOQiklFl+nKru/+Pu7+Wdj4ROZsGZFLsIuBf3f0S4DhwC3DUo+sGQnQFgvlphRORihX35c+knEdEhqEBmRTb6+7PhelvceYFeUWkfhT35XenGUZEhqcBmRQrvpbWADDDzBrD/QVE17oUkWwr7su6Tp5IhmlAJsXeYmbvDNN/AvyU6CK9N4WydcDjaQQTkVEp1ZdFJKM0IJNiu4BbzawTaAc2AHcCnzWzLmAW8LUU84lIZc7qy2b2F2a2j2hP9w4zezDVhCJymrlrL7ZEzGwR8IS7X5p2FhEZO/VlkfqjPWQiIiIiKdMeMhEREZGUaQ+ZiIiISMo0IBMRERFJmQZkIiIiIinTgExEREQkZRqQiYiIiKTs/wHULgqqnHuOSwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(ncols=len(prior_bounds), figsize=(8, 4))\n", "\n", "for i_par, par in enumerate(prior_bounds.keys()):\n", " for id_, h in zip(settings.keys(), hs):\n", " pyabc.visualization.plot_kde_1d_highlevel(\n", " h, x=par, xname=par,\n", " xmin=prior_bounds[par][0], xmax=prior_bounds[par][1],\n", " ax=axes[i_par], label=id_,\n", " numx=500,\n", " refval=p_true, refval_color=\"grey\",\n", " )\n", "axes[-1].legend(bbox_to_anchor=(0.9, 0.5), loc=\"center left\")" ] }, { "cell_type": "markdown", "id": "94486bd1-1862-4395-a097-babb7d00a365", "metadata": {}, "source": [ "Compared to the in this case short model simulation time, the solution of the optimal transport problem constitutes a not unsubstantial computational overhead, as an analysis of overall run-times shows (see below). The Sliced Wasserstein distance is typically more efficient than the Wasserstein distance solving the multi-dimensional transport problem, with accuracy and speed-up depending somewhat on the number of Monte-Carlo projections `n_proj`." ] }, { "cell_type": "code", "execution_count": 6, "id": "ffa2fbb0-48e9-4145-b624-41aa1ecafb96", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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duCyWiz2mYEbZ5dmLmkuSnD6ru0f15sfkLS47amSFgcenNFjbZ9M3Up+jTXWGHJgjIiI/tZuD+oOSkLD3MACLf9mSpKAU4GbBgWy84FJ9fIk4LyhNDgiIkaHditJfOolPPc6wO7AdZKurrcdARwL/LBu13EXsMNLeO6IiBjhZhmgJJ1k+wBJP2UGc0W2t57ZY21fQcn2m5GNhtTKiIgYdWbXg9oDOAA4rgttiYiIeNHsAtRtALYv70JbIiIiXjS7ADVe0sEzu7OfisVmwd2sdXrBXUTEUM0uQI0B5mfmc0kREREdMbsANdX2p7vSkoiIiBazWweVnlNERPTE7AJU0sEjIqInZhmgbD/crYZERES0arfUUURERFclQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCMlQEVERCN1LEBJ+pakByVd33LbwpIukXRL/e/LO/X6ERHR3zrZgzoNmDjotsOBS22vAFxar0dERPyHjgUo278CBm8Z/w7g9Hr5dGCbTr1+RET0t27PQS1me2q9fD+w2MwOlDRZ0hRJU6ZNm9ad1kVERGP0LEnCtgHP4v6Tba9he43x48d3sWUREdEE3Q5QD0haHKD+98Euv35ERPSJbgeo84FJ9fIk4Lwuv35ERPSJTqaZfx/4HbCSpHsk7QMcC2wi6RZg43o9IiLiP8zZqSe2vfNM7tqoU68ZEREjRypJREREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREIyVARUREI/UkQEmaKOlmSbdKOrwXbYiIiGbreoCSNAb4KrA5sDKws6SVu92OiIhotl70oNYEbrV9u+1ngbOAd/SgHRER0WCy3d0XlLYHJtret17fHVjL9gGDjpsMTK5XVwJu7mpDO29R4KFeN2IUyPvcHXmfu2Okvs8P2Z44+MY5e9GSdtg+GTi51+3oFElTbK/R63aMdHmfuyPvc3eMtve5F0N89wJLtVxfst4WERHxol4EqD8C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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pyabc.visualization.plot_total_walltime(hs, list(settings.keys()), rotation=45)" ] }, { "cell_type": "markdown", "id": "b57e106a-4bdb-4f73-b173-c480d0e9873a", "metadata": {}, "source": [ "The Wasserstein distance approach has also been applied to structured, e.g. time-resolved or spatial, data, see e.g. Bernton et al. for further studies." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }