{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Multiscale Graph Correlation (MGC)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, we explore\n", "\n", "- The theory behind the MGC test statistic and p-value\n", "- The features of the implementation\n", "- A fast implementation of MGC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Theory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following description is adapted from [[1]](https://arxiv.org/abs/1907.02088):\n", "\n", "MGC is a generalization of distance covariance (Dcov) that preserves the consistency property while achieving better power in many typical multivariate non-monotonic settings, which also providing some characterization of the latent geometry of the relationship [[2]](https://elifesciences.org/articles/41690). It is performed utilizing the following steps:\n", "\n", "1. Two distance matrices ${\\mathbf{D}}^{\\mathbf{x}}$ and ${\\mathbf{D}}^{\\mathbf{y}}$ are computed, and modified to be mean zero column-wise. This results in two $n \\times n$ distance matrices ${\\mathbf{C}}^{\\mathbf{x}}$ and ${\\mathbf{C}}^{\\mathbf{y}}$.\n", "\n", "\n", "2. For all values $k$ and $l$ from $1, ..., n$,\n", "\n", " a. The $k$-nearest neighbor and $l$-nearest neighbor graphs are calculated for each property. Here, $\\mathbf{G}_k (i, j)$ indicates the $k$ smallest values of the $i$-th row of ${\\mathbf{D}}^{\\mathbf{x}}$ and $\\mathbf{H}_l (i, j)$ indicates the $l$ smallest values of the $i$-th row of ${\\mathbf{D}}^{\\mathbf{y}}$.\n", "\n", " b. Let $\\circ$ denotes the entry-wise matrix product, then local correlations are summed and normalized using the following statistic:\n", "\n", "$$ c^{kl} = \\frac{\\mathrm{tr}{( {\\mathbf{C}}^{\\mathbf{x}} \\circ \\mathbf{G}_k) ({\\mathbf{C}}^{\\mathbf{y}} \\circ \\mathbf{H}_l)^{T}}}{\\sqrt{\\mathrm{tr}{ ({\\mathbf{C}}^{\\mathbf{x}} \\circ \\mathbf{G}_k) ({\\mathbf{C}}^{\\mathbf{y}} \\circ \\mathbf{H}_l)^{T}}\\mathrm{tr}{ ({\\mathbf{C}}^{\\mathbf{x}} \\circ \\mathbf{G}_k) ({\\mathbf{C}}^{\\mathbf{y}} \\circ \\mathbf{H}_l}^{T})}},$$\n", "\n", "\n", "3. The MGC test statistic is the smoothed optimal local correlation of $\\left\\{ c^{kl} \\right\\}$. Denote the smoothing operation as $R(\\cdot)$ (which essentially set all isolated large correlations as $0$ and connected large correlations same as before), MGC is\n", "\n", "$$ \\mathrm{MGC}_n (\\mathbf{x}, \\mathbf{y}) = \\max_{(k, l)} R(c^{kl} (\\mathbf{x}_n, \\mathbf{y}_n)).$$\n", "\n", "The p-value is then calculated using a standard permutation test. The smoothed correlations are also used to produce the MGC-map and optimal scale, which can enable further analysis of the relationship between the inputs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using MGC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test statistic and p-value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before delving straight into function calls, let's first import some useful functions, to ensure consistency in these examples, we set the seed:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt; plt.style.use('classic')\n", "import matplotlib.ticker as ticker\n", "import seaborn as sns; sns.set(style=\"white\")\n", "\n", "from mgcpy.independence_tests.mgc import MGC\n", "from mgcpy.benchmarks import simulations as sims\n", "\n", "np.random.seed(12345678)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To start, let's simulate some linear data:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhEAAAIlCAYAAABrdaqpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deZhkdXn3//fMwAzOzrArJLjE+0FQgaBBlGV8CD/RbBqXRAOiQYxRRAGNRhQwxLgAsgdRgkGIQfQxRmNcogyKCBgXRIRbRVBEBphpppm1Z+n+/XGqhpqa6u7q01VdVV3v13X1Vd2nTp2+qyimPv1dZ4yMjCBJkjRRMztdgCRJ6k2GCEmSVIohQpIklWKIkCRJpRgiJElSKYYISQIiYkana5B6zQ6dLkCa7iJiGbBTZh46xjlnAWcCT8jMDVNUWmkRsTPwd8CfAfsCQ8BdwDXA5Zm5uXLeUcANwLGZ+ZUpqOuTwIsyc88JPGYG8F5gA/DhyrGz6KH/HlKn2BIhdYdPAM+j+DDuahHxBODbwCuBi4AXA68GbgY+ShEkqn5A8by+O8VlTsQc4Gxgbs2xnvnvIXWSLRFSF8jM3wC/6XQdTXo5sD/w7Mz8cc3x/4qIVcDZEfHBzPxRZj4G3NKRKiehx/57SB1jiJC6QH3zeaVZfl/gCuAM4KnAfcAHMvNfax43u3L/ccATgV8Bl2XmBXXXPwF4E8WH/47ALyvnXVy5f1/gXuBU4PXAPsA5mXlug3KrXQWNWjKvBDYCqyvXPYqa7oxKHVcBh1K0WhwEPAScBXwFuBg4FngMuCoz31NX35sy8/LRXrf6YiJiJvB24Hjg94AZwN3ABzPzuprrApwZEWdm5oxG142Ig4B/AJ5L0WrxXeC9mXlLXY2vAv4UeAkwC/hv4K2ZubzB6yX1NLszpO51IEUz+z8BfwT8GvhkRDyz5pzrgdOAj1XO+SxwXkT8U/WEiHgj8C/A14E/pmhJuA+4qPIhX+uDlWsdD3xplLq+AmwGvhoR/xgRR1S6OMjMBzLzg5l5zzjP7XPApyr13EfRfbAM+BnwMuAbwN9HxMvHuc54/rHydTVFt8tfUYScayPiqcCDwJGVc6+k6MLYTkQcCdwKLAT+huL1mQvcGBGH153+MeBRitf5XZXneOkkn4fUlWyJkLrXIuDwzLwDICKSoqXhT4A7IuKFle9fn5lXVR7z9YjYALwvIi6tNMs/DbgwM8+oXjgivgOsBJZSfHhXfTEzLxmrqMy8IyL+HLgc+PvK16aIuBW4DrgiMzeO89zOy8x/rtSyqVLD92paHm4AXgE8nyIYlbUPcGZmnlc9EBH3At8HjsjMqyLitspdv6m2KjTwIeB+4Ojqc4uI/6Jo1TgX+IOac7+ZmW+pfP8/EfH7wF9FxIzMdLMiTSuGCKl7ra4GiIpqH/28yu0fVm7/MyJq/1/+AkULxv8F/jUz3wEQEQuBp1OEit+vnDu77nfeQRMy8z8j4r+BIyq/53CKD9IXAG+MiKMyc+UYl/hOzfcPVW63foBn5qaIGAR2bqaeMer8K4CI2IXHn/vSyt31z72hiJhH0YXx4dpwlJlDEfEZ4B0RMb/mId+pu8RvKLqQdqRoBZGmDUOE1L3W1f6QmcMRAY93Q+5auV0xyuOfBBARTwb+GTgG2ELRZVD9oKtfG+EhmpSZmyi6Hb5R+T0LgXdTNOH/HfDOMR7+WINja+t+nvRf7RFxMHAJj8+0uIvHg1Kz60IsrpzbaEzDg5X7FtYcW1d3znDl1u5jTTu+qaXetYriL9vnAs9p8PXJyhoIXwJ+l6KVYF5m7g+8rewvjYibI+K6+uOZ+VhmvpsipOxf9vqjqAaKWXXHF4z2gIhYQDF+Y5hifMm8zDyIYtzHRKyq/P5Ga088sXLfWK0u0rRliJB61zKKJvm5mfm/1S+Kv5zPAfYCdgOeAXwyM2+uaY5/ceW2zL8B9wB/GhHPqL8jIhYDuwM/3u5Rk1Ntudin7nj9oMZa+1E8/4sz8/bM3FI5Xv/ct2z3yBqZuRa4DXhFROxYPR4RcyjWyrg1M11PQn3J7gxpauwZEY3++n8wM7f7q75J/00xffL6iPhH4HaKD85zKJrZf1Lpt78X+JvK7SMUH7x/R/EX9LyGVx7b3wNHATdHxKUUC0+tq/zutwEDwHmjPrqEzHw0Im6ieB53AQ9QTEV98hgPuxsYBN4VEesrNb4YqA56nFe59qaIWAMcFhFHVJ5PvXcDXwO+EREfrRw7laLL6ITJPDepl9kSIU2N36VYF6H+6+1lL5iZwxTTOq+qXOdrFB/w1wNLa/46/hOKdSE+QTG18iXAiRQh5IgSv/d+ivUdPk6xHsL1FNNHTwe+DDw3M0cbpzEZr6UYy3EZ8O8UYeXvxqjzMYrnPgR8uvJ1MMVr9lMen9oJxfoPz6F4TepbO8jMG4AXUkxtvQb4JMUYjiMyc9mknpXUw2aMjDjjSJIkTZwtEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKmWHThcwnoj4GDArM08c45zrgZfXHf5GZh7d1uIkSepjXRsiImIGcDZwEnDlOKcfALwL+NeaY0NtKk2SJNGlISIinkIRHA4Afj3OubOBpwG3ZebyKShPkiTRvWMingf8EngmcO845+5HEYbuandRkiTpcV3ZEpGZ1wLXAkTEeKcfAGwEzo6IY4H1wPXAOZm5oZ11SpLUz7oyREzQ/sAMIIFLKFovzgf2AV7bzAUiYg7wHOBBYEt7ypQkqWvMAvYCvpeZpccQTocQcQZwbmYOVH6+IyK2AP8eEadm5somrvEc4Nttq1CSpO50OHBT2Qf3fIjIzGFgoO7wHZXbfYBmQsSDANdeey177rlnC6uTJKn7LF++nNe85jVQ+fwrq+dDRER8BtgxM19ac/gQiimev2jyMlsA9txzT/bee+8WVyhJUteaVBd+z4WIypTOJcBAZm4EPkul6wL4AnAQcC5FF8eazlUqSdL01q1TPMdyGEXzy2EAmfkZ4ATgdcBPgPOAC4H3dag+SZL6Qte3RGTmUXU/L6OYjVF77Grg6qmrSpIk9WJLhCRJ6gKGCEmSVIohQpIklWKIkCRJpRgiJElSKYYISZJUiiFCkiSVYoiQJEmlGCIkSVIphghJklSKIUKSJJViiJAkSaUYIiRJUimGCEmSVIohQpIklWKIkCRJpRgiJElSKYYISZJUiiFCkiSVYoiQJEmlGCIkSVIphghJklSKIUKSJJViiJAkSaUYIiRJUimGCEmSVIohQpIklWKIkCRJpRgiJElSKYYISZJUiiFCkiSVYoiQJEmlGCIkSVIphghJklSKIUKSJJViiJAkSaUYIiRJUimGCEmSVIohQpIklWKIkCRJpRgiJElSKYYISZJUiiFCkiSVYoiQJEmlGCIkSVIphghJklSKIUKSJJViiJAkSaUYIiRJUimGCEmSVIohQpIklWKIkCRJpRgiJElSKYYISZJUiiFCkiSVYoiQJEmlGCIkSVIphghJklSKIUKSJJViiJAkSaUYIiRJUimGCEmSVIohQpIklbJDpwsYT0R8DJiVmSeOcc4hwIXAQcADwD9k5tVTVKIkSX2pa1siImJGRLwfOGmc83YDvgr8ADgYuAi4MiKOaX+VkiT1r65siYiIpwBXAgcAvx7n9BOBQeCUzBwG7o6Ig4HTga+1tVBJkvpYt7ZEPA/4JfBM4N5xzj0c+FYlQFQtA54fEd36/CRJ6nld2RKRmdcC1wJExHin7w38sO7Yb4G5wBJgRavrkyRJ3dsSMRFzgQ11x4YqtztNcS2SJPWN6RAi1gNz6o5Vf147xbVIktQ3pkOIuB/Yq+7YE4E1FAMuJUlSG0yHEHETcEREzKg5thT4Tt1gS0nSNLBleISBwQ3cde9KBgY3MDw80umS+lZXDqwcS0TMphgwOZCZGymmgr4TuDwiLgCOBl4NvKhzVUqS2mVw9RAnn3cDj63dyMJ5s7n4tKUsWeQQuE7oxZaIw4AHK7dk5kMUgeEgilkabwGOz8xvdqxCSVLbPDSwlsfWbgTgsbUbeWjA4W+d0vUtEZl5VN3Py4AZdcduAZ47dVVJkjpljyXzWDhv9taWiD2WzOt0SX2r60OEJEm1Fi+Yw8WnLeWhgbXssWQeixfUT9DTVDFESJJ6ysyZM1iyaCfHQXSBXhwTIUnqQs6a6D+2REiSWsJZE/3HlghJUtPGam1w1kT/sSVCktS0sVobnDXRfwwRkqSmNWptqIYIZ030H0OEJKlpY7U2tHLWxJbhEQZXD20TSGbOnDH+AzWlDBGSpKZNVWuDgzR7gyFCktS0qVqjYaxuE3UPZ2dIkrpOtdsEcJBmF7MlQpLUdRyk2RsMEZKkruPS1r3B7gxJklSKIUKS1JB7YWg8dmdIkhpymqXGY0uEJKkh98LQeAwRkqSGnGap8didIUlqyGmWGo8hQpLUkNMsNR67MyRJUimGCEmSVIohQpIklWKIkCRNSLOLULlY1fTnwEpJElB86A+uHtpmNsbMmTO2O6/ZRahcrGr6M0RIkoDmP/QbLUI1mfPUu+zOkCQBza9Q2ewiVC5WNf3ZEiFJAmD3JXNZOG/21paIPZbMbXhes4tQuVjV9GeIkCQBMGvmDM5+w/N4+NF17L7z3IbjIaD5RahcrGr6M0RIkgB4cMVa3nXpTcyfO5s16zbywTe/gMULDAAanSFCkvpQo5kYeyyZx/y5td0ZjmHQ2AwRktSHGs3EcAyDJsoQIUl9aLTpl45h0EQ4xVOS+pDTL9UKtkRIUh/q5q6LZlfOVOcZIiSpD3Xz9MvB1UO85/Lv8NtH1jB/rstldzNDhCT1gH7563zL8Aibtgxz3LH7sdviJ3D55+9wuewuZoiQpB7QL5tZDa4e4tQLbtz6PM9+w/NYsnD6Pc/pwoGVktQDmt3XotfVP8+hTVu6aryGtmWIkKQe0OuzKbYMjzAwuIG77l3JwOAGhodHGp5X/zz32mXetOy2mS7szpCkHtDNsyma0Wx3TK8/z35jiJCkHtDNsymaMdriVvV6/Xn2G7szJElt1+vdMWrMlghJUtvZTTE9GSIkSW1nN8X0ZHeGJEkqxRAhSZJKMURIkqRSDBGSpKY0u2CU+ocDKyVJTemX/TvUPFsiJElN6Zf9O9Q8Q4QkdVC3dBE0U4cLRqme3RmS1EHd0kXQTB0uGKV6hghJ6qBm95TohjpcMEr17M6QpA5qZRfBZLpG7KpQGbZESFIHtaKLYMvwCIOrh9i0ZZhTL7ixVNeIXRUqwxAhSR3Uii6CwdVDvOfy73Dcsftt7ZJYs24jK1ata/q6dlWoDEOEJHWBamtCbUvAzJkzmnrsQwNr+e0ja9ht8RNYOG82e+4yjze97FkMbdrCwOCGCV1LmghDhCR1gcnM0thjyTzmz53N5Z+/g7Pf8DwWzJtdultDmghDhCR1gcnM0qgdz7DLop1YvrI7Znxo+jNESFIXqM6OqLYeTGR2RP14hpERSl9LmghDhCR1gWZnRzQzdsKZFpoqXRkiImIWcA5wArAA+Arw5sx8aJTzrwdeXnf4G5l5dDvrlKRWaXZ2RDNjJ5xpoanSrYtNnQW8FjgeOALYG/jcGOcfALwL2Kvm6xXtLVGSttfuvTDcBEvdpOtaIiJiNnAK8NbM/Hrl2F8A90bEYZl5c4PznwbclpnLp7xgSarR7r0wJjN2Qmq1rgsRwIEUXRjLqgcy876IuA84HLi57vz9KJ7HXVNTniSNrt17YTjeQd2kG0PE3pXbB+qO/xbYp8H5BwAbgbMj4lhgPXA9cE5mbmhblZLUQLtbChzvoG7SjSFiLjCcmZvqjg8Bjf6v2R+YASRwCfBM4HyKwPHaNtYpSdsZr6VgMitTSt2mG0PEemBmROyQmZtrjs8BGo0gOgM4NzMHKj/fERFbgH+PiFMzc2Wb65WkrcZrKWj3mAlpKnVjiLi/crtXzfcAT2T7Lg4ycxgYqDt8R+V2H8AQIanjtgyP8NiaIR54ZLWrSWra6MYpnrcDq4EjqwciYl9gX+Bb9SdHxGci4vN1hw+h6P74RduqlKQJqLZA7DR7BxbOmw3Q0jET7Z5aKjXSdS0RmTkUEZcB50bECuBh4DLgxsy8pTKlcwkwkJkbgc9S6boAvgAcBJxL0cWxpjPPQpK29dDAWgbXbOTyz9/BWSceyoaNm3nSbgsazq4oM27CbhJ1Qje2REAxzuFa4BrgBuBXPL4i5WHAg5VbMvMzFCtbvg74CXAecCHwvimtWJLGUJ218bNfP8rZV97C3rsvYMminRqGg2ogeOclN3HyeTewavXQuNd3ESp1Qte1RABUBlSeVvmqv28ZxWyM2mNXA1dPSXGSVEL9rI1F80df36HMWhMuQqVO6MoQIUm9arSuiIms71AmELgIlTrBECFJLdSKsQllAoGLUKkTDBGS1EKtWPZ6vEDgglXqFoYISWqhqRib4EwMdQtDhCS10GTHJjTTytDuTb6kZhkiJKmFJjs2oZlWBmdiqFsYIiSphRq1JIxA02MYxmtl2DI8wsyZcP7bjmTFqvXstctcZ2KoYwwRktRCjVoSgG2OXXTaUcxgRsNQMV4rQ/X6a9ZtZK9d5/OBNz3fQZXqGEOEJLVQfUvCY2uHWLth8zbHlq9cx8Wf+REPPLJmuy6L8cZU1F7/gUfWOB5CHdWty15LUk+qtiQALJo/m/lzZzNnx1nbbLq16+In8OCKYmuf+iWqq2Mq9nvyLg2Xxa69vuMh1Gm2REhSC9W2JOy5yzyWr1zLJ/7zTs468VAeWbWepzxpEUObNjN/brmBka5MqW5iiJCkFqqfnTEyAstXruX0i77FXrvO57RXH8zHPn8H57/tSAYG129tWRgY3NDUwEtXplQ3MURIUhtVWw4eXLmWOTvO4p//349ZvnItO86ayX5P3gWAgcENLh6lnmSIkKQarV5SutpysHjBHFatHuLEP9l/u24IF49SrzJESFKNdi0pPVY3hItHqVcZIiSpRidaBRwsqV5liJCkGp1oFXCwpHqVIUKSaky0VcBtudXPDBGSVGOirQJuy61+5oqVkvrGluERBgY3cNe9KxkY3MDw8Mikr9loDIXUL2yJkNQ32tFq4MwK9TNDhKS+0Y6ZF86sUD8zREjqG+1oNSg7s8IBmZoODBGS+kY3tRo4IFPTgSFCUt/o5HoM9S0Pq9ZscKlr9TxDhCRNgfqWhwtPPYpF82czuMYBmepdhghJmgL1gzofeXQdF5+2lOUrO9+1IpVliJCkKdBoUOfOC3di54V2Yah3GSIkaQp006BOqVUMEZI0BdxkS9PRqMteR8Sbp7IQSZLUW8baO+PCiPifiNhnyqqRJEk9Y6wQ8QJgD+AnEfHXU1SPJEnqEaOGiMy8BTgI+AhwSUR8OSKeNGWVSZKkrjbmwMrM3AycExGfBi4E7oiIy4B1ded9oH0lSlL3ce8LqfnZGb8BvgccA7weGKq5bwQwREjqK+59ITURIiLixcClwC7A2zPz0rZXJUldrh3biku9ZtQQERG7AxcBrwD+BzgpM381VYVJUjdrx7biUq8ZqyXi7srtiZl51VQUI0m9whUopbFDxI3AmzJz+VQVI0m9whUopTFCRGa+dCoLkaRu4cwLqTnunSFJdZx5ITVnrBUrJakvNZp5IWl7hghJqlOdeTFzBuy9+3xnXkijsDtDkuosXjCHS09fytDmYVasWg+MMDw84rgIqc5Y60R8s9mLZOYLW1OOJHXezJkzGB6BUy+40XER0hjG6s64p+brQeAoYB5wB/B9YAZwOPDT9pYoSVPPcRHS+Maa4vmG6vcR8SngQ5n57tpzIuIM4LntK0+SOsMVKaXxNTsm4qUU24LXuw74+9aVI0ndwRUppfE1GyIepui6+Hnd8WOB+1takSR1AVeklMbXbIg4D7gsIg4FfkAxHuIw4FXACe0pTZIkdbOmQkRmXhoRjwFvBl4NjAA/Al6RmV9oY32SJKlLNb1ORGZ+CvhUG2uRJEk9pOkQERFPA04D/g/wV8CfAj/NzGXtKU2S2sdNtqTJa2rZ64j4A+B24KkUYyHmAPsDX4+IP2pfeZLUHtVNtt55yU2cfN4NrFo91OmSpJ7T7N4ZHwQ+mJnHABsBMvPNwIeBs9pTmiS1j4tJSZPXbIg4GPh0g+NXAvu1rhxJmhrVxaQAF5OSSmp2TMRaYHfgF3XHnw4MtrQiSZoCLiYlTV6zIeLTwEcj4gSK6Z07RcQLgUuAz7apNklqGxeTkiav2e6MdwP3AXcC8yk24fo68L3KfZLUFbYMjzAwuIG77l3JwOAGhodHOl2SNG01u9jURuBVEfEe4ECKwZV3ZuY97SxOkiaqOuvCLbyl9msqRETEL4FDMvMX1IyLiIi9gNszc/c21SdJ2xlrjYdGsy4MEVJ7jBoiIuLFwCGVH/cF3hURa+pOe/pY1ygrImYB51Dsy7EA+Arw5sx8aJTzDwEupNhp9AHgHzLz6lbXJak9RgsFtcf32mUewyMjPDSwjt12nsuF1/2AH/1sxXatDW7hLU2dsQLAvcAFFJttAbwc2FJz/wiwGji5DXWdBbwWOB5YCVwGfA54Qf2JEbEb8FXg34C/Bv4QuDIilmfm19pQm6QWG60Lonp8zbqNnHfKkZz58e9uPeesEw/lxz//1natDc66kKbOqCEiM++iaGkgIm4AXpaZj7a7oIiYDZwCvDUzv1459hfAvRFxWGbeXPeQEymmmZ6SmcPA3RFxMHA6YIiQesBoXRDV44vmz+bhR9dtc86KwfXMn1us81Db2uCsC2nqNDU7IzOXNgoQETE7Ip7f4poOpOjCWFbz+++jmB1yeIPzDwe+VQkQVcuA50dEs7NPJHXQaAs/VY+vXruR3Xeeu805v7fPzpzxuudy8WlLbW2QOqTZgZW/D3wceCaNg8esFta0d+X2gbrjvwX2GeX8HzY4dy6wBFjRwtoktcFoXRC1x3ddvBMXn3YUDw2s23rOrouf0OHKpf7W7KDIC4H1wEkU4xNOAZ5cuT2+xTXNBYYzc1Pd8SGgUfvkXGBDg3MZ5XxJLdSK3TBH64JodHzJom2Dg7txSp3TbIg4CDgiM78fEScBmZlXRMRvgTfR2lUr1wMzI2KHzNxcc3wOxfLbjc6vb8us/uyOOlKbdXpdhk7/fqmfNTtmYAbwSOX7n1N0awB8EXh2i2u6v3K7V93xJ7J9F0f1/EbnrsF9PaS26/RumJ3+/VI/azZE/AR4ceX7nwLVwZR70NrxEAC3U0wdPbJ6ICL2pVir4lsNzr8JOCIiatsvlwLfqRtsKakNOr0bZqd/v9TPmu3O+BBwXURsodiM68yI+A+KVogbWllQZg5FxGXAuRGxAniYYhzGjZl5S2UK6BJgoLIc95XAO4HLI+IC4Gjg1cCLWlmXpMbasS7DRMY5uC6E1DnNTvH8HHAocFtm/oqiVWIj8GXgDW2o6wzgWuAaipDyK4rFrgAOAx6s3FJZxfJFFOM2fgi8BTg+M7/Zhrok1akOftzvybuwZNFOLRnUWB3n8M5LbuLk825g1eqhUc9tx++X1Jyml6zOzP+t+f4GWtwCUfe7NgOnVb7q71vG46toVo/dAjy3XfVImlrufyH1hrH2zmh6tcfMPKY15UiaCt0+LdL9L6TeMFZLRKOZEJKmgW6fFuk4B6k3jLV3xuumshBJU6fbuwvc/0LqDc0ue/3qse7PzH9rTTmSpoLdBZJaodmBldeMcnwD8BuKbbgl9Qi7CyS1QlMhIjO3mQoaEbMotgn/Z+BjbahLUht1orug2wdzSpq4pqd41srMLcBdEXEq8BmKBagkaVTdPphT0sQ1u+z1aDZT7FMhSWNyjwtp+pnMwMqFFFuD39rSiiRNSw7mlKafyQys3AR8F/jb1pUjabpyMKc0/ZQaWCmpe3XrAEbXfpCmn1IDKyV1LwcwSpoqzY6J+H3gEuAAYLs2yMyc3eK6JJXU7atRSpo+mm2J+ATF1t/vANa3rxxJk+UARklTpdkQEcBzMvPOdhYjafIcwChpqjQbIn4A/A5giJC63GgDGLt1wKWk3tVsiDgJ+HxEPAf4JTBce6cbcEndzwGXklqt2RDxMuD3gLMa3DeCG3BJXc8Bl5JardkQ8TbgDOCCzFzXxnoktYkDLiW1WrMhYhbwaQOE1LsccCmp1ZpdifITwN+0sxBJ7VUdcLnfk3dhyaKdHFQpadKabYlYBBwfEX8J3EOxb8ZWmXlMqwuTJEndrdkQsSPw6XYWIkmSekuzG3C9rt2FSJKk3jJqiIiIVwOfzcyNle9HM5KZtlJIbeZiUZK6zVgtEdcA/wM8XPl+NCPY1SG1XSsWizKISGqlUUNEZs5s9L2kzmjFYlGPrRnireffwOAaV62UNHkTDgcRsUNEHBwRT2pHQZIaqy4WBUx4sagtwyMMDG7gNw+v5sy/PpSn/87OW4OIJJU15sDKiDgOOAV4WWb+OiKeAXwZ2AcYiYhPAm/MzC1tr1Tqc5NZLKq+K+SsEw/l7CtvcdVKSZMyaktERLwS+CTwE6D658qngIXAi4DDgEMplsSW1GaTWSyqvitkw8bNXHzaUletlDQpY3VnvBU4IzNPyMyVEfFs4CDg4sz8embeBrwXcPqn1AWqXRZ33buSgcENDA+PbL2vvivkSbstYOeFrlopaXLG6s54FnBizc9HU8zE+GLNsR8DT21DXZImaKzZG7VdIXvtMo/hkRHuunelMzQkTcpYIWImsLHm5yOAQeD7NceeAGxoQ12SJmis2RvVrpAli3ZiYHADJ5+3bFJTRSUJxu7OuBN4PkBELAT+L/C1zBypOefPKcZMSOqwZmdvNAobklTGWC0RlwIXR8SzKMLEE4ALACJid+DVwLuAN7a7SEnja3b2RjVsVFsinKEhqayxFpu6OiJ2Ak4CtgCvysxbKnefSTFe4sOZeXX7y5Q0nuMPfXAAABh4SURBVNoui7FMZqqoJNUac52IzLwCuKLBXf8EvC8zV7alKkltUxs2tgyPsMplsCWV1OxW4NvIzN+0uhBJU68V+3FI6l+lQoSk6aF+kOWq1Ru2HrdlQtJ4DBFSH6sdZLlo/mwWzp9jy4SkphkipD5WO8hyz13msXzl5HcKldQ/DBFSH6uf0TEygtM/JTXNECFpK6d/SpoIQ4SkrZpda0KSYOxlryVNwFi7aHbTNSWpVWyJkFqkHWsuuI6DpG5mS4TUIu3Y2MrNsiR1M0OE1CLN7qLZ6WtKUqvYnSG1SDtmNjhbQlI3M0RILdKOmQ3OlpDUzezOkCbJGRSS+pUtEdIkOYNCUr+yJUKqUaZVwRkUkvqVLRFSjTKtCrU7YTqDQlI/MURINRq1KowXIpxBIalfGSKkGmVaFVo9g2LL8AiDq4e2CSUzZ85oybUlqZUMEVKNVrcqlAkEDtSU1CsMEVKNVrcqjBYIxgoXZbpUJKkTDBFSG40WCMZqbXCgpqReYYiQ2mi0QDBWa4MDNSX1CkOE1EYL583mwlOP4sEVa9hr1/lbN9Maq7XBpa4l9QpDhNRGj63dyNs+uoyREXjq3gt56ysP5pFH17HHkrlc+o6lPLjC1gZJvcsQIbXRQwNrGVyzkZkz4LgXPYNTzl+2zTiI/Z68S6dLlKTSui5ERMTuwCXAMcBG4CrgPZm5eYzHPAzsVnf4vZl5TtsKlZpQ7baYMQNWDK531oWkaaXrQgTwOWAEOBJ4EvBJYDPwnkYnR8QeFAHiCODnNXetbmuVUhNqB0nutvPcbcZBLFn0BAYGN7iYlKSe1VUhIiKeB7wAeEpm3gvcHhHvAC6OiPdn5lCDhx1AETJuzcyNU1iuBIy9oFTtIMnh4REuPm0pD65cy5wdZ/HhT/0vy1eudTEpST2rq0IEcDjwq0qAqFoGLAAOBG5t8JgDgHsMEOqUVas38Nbzasc6HMWSRU/Y7rxqoFixah2nXXgj1Q1C7daQ1Ku6bSvwvYEH6o79tnK7zyiPOQDYHBFfiojlEfH9iDiubRWqrzXaKnz5ynXbjHV4cOW6Ma+x6+K5zJ9bTPV0MSlJvWxKWyIiYl/g3lHuHgKuATbUHszMTRExAoz2p9r+wC7AeynGTRwLXBURO2TmVa2oW6pqtNLkroufsM1Yh10Xb98KUcvFpCRNF1PdnfEAsN8o9w0DJwPb/IsaETsCM4C1ozxuKTA7M6sDKW+PiN8FTqWY2SG1TKOVJp+42zzOfsPzePjRdey+81zm7Dh2A5+LSUmaLqY0RGTmJuDu0e6PiPuBF9cdfmLltr6bo3rNIYpWjFp3AH9ZskxpVI1Wmlwwdw5btsDw8DBLFu7Ewnm2LEjqD902sPIm4EMRsU9m3l85tpRiuuaP6k+OiB0oukfOz8yP1tx1CHBnu4tV/2m0jLUtC5L6VbeFiO8CtwDXRcRbgD2AD1GEhI0AETEfmJ+ZyzNzc0R8ETgjIu4Bfgr8GXAc8JKOPANNa7XLWM+YARed6vRMSf2rq2ZnZOYI8FLgIeDbFGMargTeX3Pa6cCDNT+/HbgcuIii9eE44JWZ+bWpqFn9pbqM9WNrNzK4phgTIUn9qttaIsjM5RRBYrT7zwLOqvl5iGJWRsMVLaVWGmv3TUnqN10XIqRuVp2euWLVOnZdPNfpmZL6Wld1Z0jdrrLIJFuqy01OQKOFqiSpl9kSIU1Ao8Wmmh1YOZnHSlI3siVCmoBGi01NxWMlqRsZIqQJqA6shInvezGZx0pSN7I7Q5qAyex74Z4ZkqYbQ4Q0AZNZndKVLSVNN3ZnSJKkUgwR6gutnl7pdE1JsjtDfaLV0yudrilJtkSoT7R6eqXTNSXJEKE+0erplU7XlCS7M9QnWj290umakmSIUJ9o9fRKp2tKkt0Z0pichSFJo7MlQhpD7SyMA5++K6e86mAeeXTd1i6MmTNndLpESeoYQ4Q0huosjJkz4Phjn8Ep5y9zWqckVdidIY2hOgtjwbzZrBhc77ROSaphS4Q0htpZGLvtPJeF82ZvbYlwWqekfmeIkMZQOwtjeHjEaZ2SVMMQITXJaZ2StC3HREiSpFIMEeoY12CQpN5md4Y6xp0wJam32RKhjnEnTEnqbYYIdYw7YUpSb7M7Qx3jTpiS1NsMEeoYp0xKUm+zO0OSJJViiJDG4DRUSRqd3RnqWVuGRxhcPbTNmIpWb83tNFRJGp0hQj1rKj7gG01DNURIUsHuDPWkLcMjPLiy/etMOA1VkkZnS4S60nhdFYOrh5iz46y2b83tNFRJGp0hQl1pvK6KhwbW8on/vJOzTjyUR1at56l7L27LB7zTUCVpdHZnqCuNtyT2HkvmsXzlWk6/6Ftc/eW72HHWzJYPqpQkjc2WCJXS7pkR1bEIo3VV2M0gSZ1niFAprZoZMVoYGS8k2M0gSZ1niFAprZr6OFoYMSRIUvdzTIRKadXUx/owsnxgLY8+5gqRktQLbIlQKa0ak1A/9mH3nedy8nk3MLjGFSIlqdsZIlTKZLobasdB7LXrPC4+7SgeGljHHkvmsWrNBgbXuEKkJPUCQ4SmXKNxEPs9eZet97d7ASlJUmsYIjTlxhqU6dRNSeodhghNubHWgHBWhiT1DkOEppytDZI0PRgiNOVsbZCk6cF1IiRJUimGCEmSVIohQh2zZXiEgUFXp5SkXuWYCHVMqzbxkiR1hi0R6phG60VIknqHIUId06pNvCRJnWF3hjrG9SIkqbcZItQxrhchSb3N7gxJklSKIUKSJJViiJAkSaUYIiRJUimGCEmSVIohQpIklWKIkCRJpXTtOhERMQe4DfhIZl4zzrmvAd4H/A5wO3ByZn6v/VVKktS/urIlIiIWAJ8HntXEuUcD/wKcBxwM3AF8LSJ2a2uRkiT1ua4LEZVQ8CNgjyYf8g7g05l5RWbeBbwRGADe0KYSJUkSXRgigBdTtCwcNt6JETETeD6wrHosM4eBbwGHt6k+NbBleISBwQ387FcDDAxuYHh4pNMlSZLarOvGRGTmqdXvI2K80xcD84AH6o7/FnhOaytT1ZbhEQZXD22zcdbqNUMMPLaBFYMbmDlzJjNnwuIF7okhSdPZlIaIiNgXuHeUu4cyc6KfOnMrtxvqrwX4CdYmg6uHOPm8G3hs7UYWzpvNxactZfOWYc78+He3Hjv/bUd2ukxJUptNdUvEA8B+o9w3XOJ66yu39XtIzwHWlriemvDQwFoeW7sRgD13mcfm4eFtjj22diMrVq1njyVzx7qMJKnHTWmIyMxNwN0tvOQARVjYq+74E9m+i0MtsseSeSycN5t16zfylpc/m9MuvJH3vf5QFs6bvbUlYq9dDBCSNN113ZiIicjMkYi4GTgS+BRsHWx5BPDxTtY2nS1eMIdLT1/Kxs1FC8T7Xn8o/3XzvZx14qFs2LiZJ+22gMUL6huHJEnTTc+FiIiYD8zPzOWVQ+cDX4yIHwLfBE4FFgGf6FCJ097MmTMYHoG3X3Dj1paHs048lPf/yy1cdOpSdl7ocBRJ6gfdOMVzPKcDD1Z/yMyvACcBpwE/AJ4BHJOZKzpTXn+oHwOxYeNmLjp1KYvm2wIhSf2iq1siMnNGg2NnAWfVHbsKuGpqqhI8Pi6i2hLxpN0W2AIhSX2mq0OEutfiBXO4+LSl26wVIUnqL4YIlTJz5gyWLNqJJYtsfZCkftWLYyIkSVIXMERIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFECFJkkoxREiSpFIMEZIkqRRDhCRJKsUQIUmSSjFESJKkUgwRkiSpFEOEJEkqxRAhSZJK2aHTBYwmIuYAtwEfycxrxjn3YWC3usPvzcxz2lWfJEn9ritDREQsAK4DntXEuXtQBIgjgJ/X3LW6PdVJkiTowhAREUcDHwNWNfmQA4DNwK2ZubFthUmSpG1045iIFwP/AhzW5PkHAPcYICRJmlpd1xKRmadWv4+IZh5yALA5Ir4EHAI8AFyQmZ9qT4WSJAmmOERExL7AvaPcPZSZO5W47P7ALsB7gfcAxwJXRcQOmXlVk9eYBbB8+fISv16SpN5S83k3azLXmeqWiAeA/Ua5b7jkNZcCszOzOpDy9oj4XeBUoNkQsRfAa17zmpIlSJLUk/YC7in74CkNEZm5Cbi7xdccAobqDt8B/OUELvM94HDgQWBLi0qTJKlbzaIIEN+bzEW6bkzERETEDhTdI+dn5kdr7joEuLPZ61SCyE0tLk+SpG5WugWiqudCRETMB+Zn5vLM3BwRXwTOiIh7gJ8CfwYcB7ykk3VKkjTd9VyIAE4HzgRmVH5+O/AocBFF08zdwCsz82udKU+SpP4wY2RkpNM1SJKkHtSNi01JkqQeYIiQJEmlGCIkSVIphghJklSKIUKSJJXSi1M8WyYi5gC3AR/JzGvGOfdhYLe6w+/NzHPaVV+3mODr9BrgfcDvALcDJ2fmpFZE6wURsTtwCXAMsJFiyfX3ZObmMR4z7d9TETELOAc4AVgAfAV4c2Y+NMr5hwAXAgdRLJP/D5l59dRU21klXqvrgZfXHf5GZh7dzjq7SUR8DJiVmSeOcU7fvqeqmnydSr2f+rYlIiIWAJ8HntXEuXtQ/GN/BMVaFNWvj471uOlggq/T0RTbuJ8HHEyx/PjXIqL+g3I6+hywJ3AkxYfA64CzRzu5j95TZwGvBY6neK57U7xW26m8T74K/IDi/XMRcGVEHDMllXbeWTT5WlUcALyLbd8/r2hvid0hImZExPuBk8Y5r6/fU82+ThWl3k992RJR+bD7GLCqyYccAGwGbs3MjW0rrMuUeJ3eAXw6M6+oPP6NwAuBNwAfaEuRXSAinge8AHhKZt5LsQncO4CLI+L9lWXV603791REzAZOAd6amV+vHPsL4N6IOCwzb657yInAIHBKZg4Dd0fEwRQLzE3rxeMm+lpVzn8acFtm9tX2wxHxFOBKiv+Hfj3O6f38nmr6dZrM+6lfWyJeTPEX82FNnn8AcM90/cd+DE2/ThExE3g+sKx6rPI/7bcoNjebzg4HflUJEFXLKJqkDxzlMf3wnjqQ4jVYVj2QmfcB99H4PXE48K3K+6ZqGfD8yvtrOpvoa7UfxR+Bd7W/tK7zPOCXwDMp9k4aSz+/pybyOpV+P/VlS0Rmnlr9PiKaecgBwOaI+BLF5l4PABdk5qfaU2F3mODrtBiYR/Ha1Pot8JzWVtZ19qbx8wbYB7i1wWP64T21d+W20Wuzzyjn/7DBuXOBJcCKllbXXSb6Wh1AMfbm7Ig4FlgPXA+ck5kb2lZlF8jMa4Froal/l/r2PTXB16n0+2nahYiI2JfRU9dQZu5U4rL7A7sA7wXeAxwLXBURO2TmVaUK7bA2vE5zK7f1b7ghoMxr3jXGe62Aa6h73pm5KSJGGP25T7v3VANzgeHM3FR3fLT3xFwav38Y5fzpZKKv1f4U+wclxYDeZwLnUwSO17axzl7Tz++piSj9fpp2IYIiye83yn3Doxwfz1Jgdmaurvx8e0T8LnAqxSj8XtTq12l95XZO3fE5wNoS1+sm471WJ1P3vCNiR4r/KUd77tPxPVVvPTCzEoxqZ6mM9p5YT+P3D6OcP51M9LU6Azg3MwcqP98REVuAf4+IUzNzZZvr7RX9/J6aiNLvp2kXIipJ/u4WX3OIx9Nr1R3AX7by90ylNrxOAxT/U+5Vd/yJbN9E21PGe60i4n6K8SO1nli5bfjcp+N7qoH7K7d71XwPo78n7qfx+2cNxeC46WxCr1Wlj3+g7vAdldt9AENEoZ/fU02bzPtpug8smbSI2CEi7o+It9fddQhwZydq6kaZOQLcTDHFEdg62PIIisGV09lNwFMiorbveimwGvhR/cl99J66neI1qH1P7AvsS+P3xE3AERExo+bYUuA7dQPjpqMJvVYR8ZmI+Hzd4UMogukv2lZl7+nn91TTJvN+mnYtEa0QEfOB+Zm5PDM3R8QXgTMi4h7gp8CfAccBL+lknZ1W+zpVDp0PfDEifgh8k6JpfhHwiQ6VOFW+C9wCXBcRbwH2AD4EnF+dfdGP76nMHIqIy4BzI2IF8DBwGXBjZt5SmVa2BBiovE5XAu8ELo+IC4CjgVcDL+rMM5g6JV6rz1Jpaga+QLGQ0rkUTdJrOvMsOs/3VHNa+X6yJaKx04EHa35+O3A5xUIld1L8Y//KzJzW84ybsM3rlJlfoVjU5DSKxV2eARyTmdN2BDRsbYV5KfAQ8G2KMQ1XAu+vOa1f31NnUIwQvwa4AfgVj6+KdxjFa3IYQGVlxhdR/AP2Q+AtwPGZ+c0prrlTJvJafYbHFzX7CcUCbxdSrBbbz3xPNadl76cZIyMjbatSkiRNX7ZESJKkUgwRkiSpFEOEJEkqxRAhSZJKMURIkqRSDBGSJKkUQ4QkSSrFFSulPhERx1MstrM/xcZhPwYuyszras4ZAY7LzGvaVMMngb0z8+gmz38G8OTM/K9J/M5PAE/LzKMa3PdUiiWnr8nMv6m7748oVu/7/zLzf8r+fmk6syVC6gMRcRLFFr+XAc8G/gD4L+DTEVG71e9eFEvgdosvAM9p18Uz8x6K5dnfGBFbN1Gr7IPyr8CHDRDS6GyJkPrDG4GPZ+Yna479NCICOIXiA5OafVC6xYzxT5mczLwiIv4YuDIingmsAv4d+Dnw3nb/fqmXGSKk/rAFeH5ELMrM2i2QTwfmVX+o7c6odD1sotgy+cTKNS4A/h9wBXAwkMCJmfm/9Y9vdM36oiLiz4F3AQcAIxT7G7wtM78XEcuApwJnRsQJmblvRMwBPkCxidK8yvl/l5m31FzzzZXntUel1mZaXE+k2Pr4YuCuSj0HZubmJh4r9S27M6T+8BHgucBvI+I/I+L0iDgwMx/JzPvGeNzxldvfBz5KsanYfwD/VLneRuDSMgVFxHOAzwCfBPaj2AZ7BvDxyikvA+6j2Ayo2qVxNcX28q+k2Kr4m8ANEfH0yjWPo9hN9gMUmy79BvjL8WqpbNR0EvAXFK0Pb8zMe8s8L6mfGCKkPpCZ1wMvoBgHcQRFqPhhRPwgIvYf46GPAO+ojB34aOXYv2XmlzLzDoodSw8oWdYm4G8z89LMvC8zv0cRIJ5ZqXmAovVjTWY+EhFPowgPJ2TmtzPzZ5l5NnATxc6xUAwcvSYzP56FdwHfa7KeG4FHgc3AzSWfk9RX7M6Q+kRm3gzcHBGzKFoW/hg4GfjviHhaZm5s8LB7Kludk5lriyEU3FNz/3pgTsl6fhQRqyLi3RTbxv8ecCCj/3FzUOX21kodVXNqajiAyviOGrcAz2qipI8DKyn+Xbw6Il6YmcNNPE7qW4YIaZqrzDR4N/D+zFyemVuA24DbIuLbwFcpPmT/t8HDNzU41vQHa0SM+m9MRCwF/ptiBsZ3gH8Bng5cPspDqiHneRThpdZQ5XaE7QdjNgpH9bW8EXgp8EKKfxe/TtG68ZHxHiv1M7szpOlvPcXAwVc3uG8VxQfvwy36XZuAhTU//94Y5/4t8LXMfFVmXpSZNwD7AkRENQiM1Jx/Z+V2j8z8RfULeDvwp5X7fgQcVvd7Dhmr4IjYj6Kr5tzMvDEzv0ExwPKciHj2WI+V+p0tEdI0l5krIuLDwD9FxELgcxTB4pnAOcC/ZuavW/TrvgucFBHfAWZRfDgPjXLuI8BLIuJQ4CHgj4C3Ve6bA2wAVgNPj4gnZuYvIuI64IrKDIyfAa8H/gY4pvK4c4HPRsRtFK0cr6QYC3JTowIiYieK6ZzJttM531W55jURcUhmjvYcpL5mS4TUBzLzDIq1Iv6Q4gP1TuAfKcYPnNTCX/Umiimht1IsWnUFxQyJRt5HMUXzq8D3KWZjVBe+qs7GOB84FvhxRMykaFH5MsWAzp9U7ntZpfWAzPwP4ATgzRQrch5aqWE0H6HoQnlN7ZiQzFwPHAf8H4qZKJIamDEyMjL+WZIkSXVsiZAkSaUYIiRJUimGCEmSVIohQpIklWKIkCRJpRgiJElSKYYISZJUiiFCkiSV8v8D5+zlv4QXwTsAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x, y = sims.linear_sim(num_samp=100, num_dim=1, noise=0.1)\n", "\n", "fig = plt.figure(figsize=(8,8))\n", "fig.suptitle(\"Linear Simulation\", fontsize=17)\n", "ax = sns.scatterplot(x=x[:,0], y=y[:,0])\n", "ax.set_xlabel('Simulated X', fontsize=15)\n", "ax.set_ylabel('Simulated Y', fontsize=15) \n", "plt.axis('equal')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The test statistic and p-value can be called by creating the `MGC` object and simply calling the corresponding test statistic and p-value methods." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MGC test statistic: 0.9719961704553086\n", "P Value: 0.001\n" ] } ], "source": [ "mgc = MGC()\n", "mgc_statistic, independence_test_metadata = mgc.test_statistic(x, y)\n", "p_value, _ = mgc.p_value(x, y)\n", "\n", "print(\"MGC test statistic:\", mgc_statistic)\n", "print(\"P Value:\", p_value)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Based on this relationship, we would expect MGC to have a test statistic of approximately 1 [[2]](https://elifesciences.org/articles/41690) and a p-value bounded by the number of repetitions (in this case 1000). This is because since we are estimating the null distribution via permutation, this is the lowest value that we can be sufficiently sure is the p-value. It is worth noting that as in most of the other tests that use permutation to approximate the p-value, the `replication_factor` parameter can be set to the desired number." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MGC-map and optimal scale" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unlike many other independence tests, MGC also includes many other features (collectively included in the metadata) to enable users to discover and decipher their relationships. Two particularly useful features are the optimal scale and the map of the localized variances, also known as the MGC-map, which can reveal a representation of the underlying geometry of the relationship. These are both returned in both the `test_statistic` and `p_value` methods in the `metadata` return value. Taking the same relationship as before, let's investigate what that would actually look like." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimal Scale: [100, 100]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/spanda/miniconda3/lib/python3.7/site-packages/seaborn/matrix.py:268: PendingDeprecationWarning: \n", "The label function will be deprecated in a future version. Use Tick.label1 instead.\n", " fontsize = tick.label.get_size()\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(\"Optimal Scale:\", independence_test_metadata[\"optimal_scale\"])\n", "\n", "# local correlation map\n", "local_corr = independence_test_metadata[\"local_correlation_matrix\"]\n", "\n", "# define two rows for subplots\n", "fig, (ax, cax) = plt.subplots(ncols=2, figsize=(9.45, 7.5), gridspec_kw={\"width_ratios\":[1, 0.05]})\n", "\n", "# draw heatmap\n", "fig.suptitle(\"Local Correlation Map\", fontsize=17)\n", "ax = sns.heatmap(local_corr, cmap=\"YlGnBu\", ax=ax, cbar=False)\n", "\n", "# colorbar\n", "fig.colorbar(ax.get_children()[0], cax=cax, orientation=\"vertical\")\n", "ax.invert_yaxis()\n", "\n", "# optimal scale\n", "optimal_scale = independence_test_metadata[\"optimal_scale\"]\n", "ax.scatter(optimal_scale[0], optimal_scale[1], marker='X', s=200, color='red') \n", "\n", "# other formatting\n", "ax.xaxis.set_major_locator(ticker.MultipleLocator(10))\n", "ax.xaxis.set_major_formatter(ticker.ScalarFormatter())\n", "ax.yaxis.set_major_locator(ticker.MultipleLocator(10))\n", "ax.yaxis.set_major_formatter(ticker.ScalarFormatter())\n", "ax.set_xlabel('#Neighbors for X', fontsize=15)\n", "ax.set_ylabel('#Neighbors for Y', fontsize=15) \n", "ax.xaxis.set_tick_params(labelsize=15)\n", "ax.yaxis.set_tick_params(labelsize=15)\n", "cax.xaxis.set_tick_params(labelsize=15)\n", "cax.yaxis.set_tick_params(labelsize=15)\n", "# fig.suptitle('cMGC = ' + str(mgc_statistic) + ', pMGC = ' + str(p_value), fontsize=20)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we see a representation of the relationship between $x$ and $y$ plotted as a heat map and the optimal scale shown in the top right corner represented as a red \"x\". The optimal scale is the $k$ and $l$ nearest neighbors that maximize the smoothed local correlations of the test statistic; in other words, maximizes the test statistic. For a linear relationship like this one, the optimal scale is equivalent to the global scale, which is $(n, n)$.\n", "\n", "Interestingly the MGC-map is unique for every type of relationship [[2]](https://elifesciences.org/articles/41690). Let's see how this changes with a nonlinear relationship. First, we will simulated some nonlinear data:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x, y = sims.spiral_sim(num_samp=100, num_dim=1, noise=0.1)\n", "\n", "fig = plt.figure(figsize=(8,8))\n", "fig.suptitle(\"Spiral Simulation\", fontsize=17)\n", "ax = sns.scatterplot(x=x[:,0], y=y[:,0])\n", "ax.set_xlabel('Simulated X', fontsize=15)\n", "ax.set_ylabel('Simulated Y', fontsize=15) \n", "plt.axis('equal')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "MGC is able to capture this relationship as well. Running MGC, we get the following test statistic and p-value:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MGC test statistic: 0.1769756923534378\n", "P Value: 0.001\n" ] } ], "source": [ "mgc = MGC()\n", "mgc_statistic, independence_test_metadata = mgc.test_statistic(x, y)\n", "p_value, _ = mgc.p_value(x, y)\n", "\n", "print(\"MGC test statistic:\", mgc_statistic)\n", "print(\"P Value:\", p_value)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we get a p-value less than the alpha level of 0.05 that we are testing at. Looking at the optimal scale and MGC-map, something interesting occurs:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimal Scale: [7, 6]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/spanda/miniconda3/lib/python3.7/site-packages/seaborn/matrix.py:268: PendingDeprecationWarning: \n", "The label function will be deprecated in a future version. Use Tick.label1 instead.\n", " fontsize = tick.label.get_size()\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAIHCAYAAADJkbu/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOy9e7ztVVnv/57rsjdgatFNEDuYyiNlJ8PMJEHxnBCNLlqJt/ByvKSUeEvUFBUvIYFmGmllWcEpMktPPxWx4uIlLMM0tB5LQbkoCIjAZu+11+33x/iuvdd6vs9ac6wvc8695tyf9+u1XmvP7xzjGeN73WON72d8nt7y8jJCCCGEEGI8mNrXHRBCCCGEEPVo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEAEz6+3rPgghxHrM7OsOCLG/YmaXAAe4+0/u676sYGbLwFvc/RV9ys0CzwWeCjwQmAa+DPwp8G533zXsvvbDzN4LnODu99pEnR7wGmAXcFaz7XXAa4EDR7FfzXXxSOBKd/+Rdcr8RtO/r7r74cPukxBia6GZNyHEpjCz7wE+CbwR+AfgacATgb8H3gJ82MwO2nc9vEtsB14PrO7/HwEPB+ZG2I8l4EFm9sPrfP+UEfZFCLHF0MybEGKz/AlwP+Dh7v6fq7Z/1Mz+Bfgr4KXAG/ZF5waNu18LXDviZj8P3Bd4EmUmcA9m9kDgwcBngYNH3C8hxBZAgzchtjhmdj/gTcAxlP+sPwu8wd0/sqrMDPAK4OnAYZTBxh8Cv+3uy02Zn6UMqn4MOLAp8+fAGe6+WNmXHwFOBF4RBm4AuPv7zOwtwFdW1dkOvBg4mTIg+QZwftPu7qbMe4HDgX9r9uGbwI9TBjEfBI4AHgFc5O6/aGbbgFcDvwIcCnwVONfdf2eDvk+t6scDgB7wn8CZ7n6BmR0OXNUUf62Zvdbde9lrUzP7Mcrg9Ccos3T/BLzG3S9vvl+JdRLw88DPUF4tfwR4obt/Y4PDDGWW72+b+q8J3z0F+AzlNfWeV+799q8p8yjg4qY/LwF+CriRMrv4Jndf6tMvIcQWQK9NhdjCmNmRwL8CP0wZeP0ycBPwITN70qqi76X8J/9/gZ9tPv8WcHoT5wTKIOg/gV8Efo7y6vN0ygColp9pfv+/9Qq4+yvc/fym3V5T9nTgvKbdPwZeBnwgLAz4KeChzT6+xt1va7a/APga8AvAuc2291GOx7spg8m/Bs4xs9/aoO9van7+DHgc5XXvbuD8ZoD8dYrWDOA9lFelLczskcCngXsAv0oZLB0EXGpmx4Ti7wa+BfwSZXD9s8DvbdDH1fwF8AAzOypsfzJl8LvZ/VvN+ZTB3y9QrpnXAWdX9ksIsY/RzJsQW5vXNr8f5e43A5jZhygDr7ea2V8BRlk48Cp3Xxm8/L2ZfR9wbPP5h4EL3P1XVwKb2UWUwcRxlMFeDfdpfl+1Yam9PAY4Hni2u7+n2fYxM7sReBdwAmU2Csrz6HnufmWIcTNwirsvNP1+NGUQ+Cx3/5NVMXcBp5vZ7zWvOrO+v9bdz1nZYGZXUQbHx7r7n5jZPzdfXbsyi5bwFuAa4H+vmjn8EGVgfDbwsFVl/9Hdf63599+b2UOAp5lZb2VGdAP+gTID+STgiqadh1JmL/+SVbNuNftHGaytcKG7P6/590fN7DuAXzezN7v7TX36JYTYx2jwJsTW5jjKf7Q3r2xw92Uz+3PKLNQDKa9TAd6/uqK7n7rq3+cANAsJjqBo1n4MmAW2baI/C83v6U30H8rszmr+jDJ4O469g7cFygAo8h8rA7eGn25+/7/mdfEKH6QsNvhflFWva3D3pwGY2XdTjsH9V/Wv6hiY2d0or0rPWhm4NbHnmoH0bzQDoRU+GUJcSznms5RZsXVx90Uzex/wRDM7rRnsPYUyIPyGmd2V/Xtv+Pw+4Ncos58f3KhfQoh9jwZvQmxtDqZoxCJfb35/J/A9zb9vWC+ImR0M/D7wBIpc4isUndZuijaqlqub3/cF4gzZSlv3Am529/mm/992952ry7j7TjP7dtP/FW4Og7QV4n6t7O96M0T3XqdfRwHvZO/K0f8A/r35uvYYfGdTdr1z0qO8Tl3hzlBmRVNWK1n5C8pr4580s09TVvX+ZlZwk/sXZyZvbH5rAYQQY4AGb0JsbW4BMp+yQ5vfNwG3Nv/+XuDbKwXM7AcoM2yfpGicfpSiD7tsZTDVvL7cDB8G3trESQdvwAeAe5nZDzb9v6eZHbh6ANfMYN2T9QdgG3ErZdD5CCB79Xh93GBmdwcuBL5EWal5ZTOz9UNsTvN3a9PmeudkmfKa95BNxNyIT1L0ficBB1AGV38TC3XYv+8Nn7+/+b3Z60EIsQ/QggUhtjYXAyc0r8JW8zTKIOW/gI83234hlHkZ5T/6ZYoQ/4Pu/tFVA7cfp/wnXv0ccHcH/g54uZk9IH5vZidRNF/nNSsXL26+ir5kT2t+X1rb9iouobwGPMjdP7PyQ5kVeyP5wOlIyr6+w90/t2p17eOa3yvHYMNVt+6+A/hn4Jcbo2Jgz4raJwKfdveB+cE1r0ovoCwyeTLwd6sWcqymdv9WeHz4/ESKMfHHEUJseTTzJsS+5V5m9qJk+9cbe4fXU1Z4XmJmbwJuB55DeTX2K81/7p83s78E3tBYaHy6+f4FwCvdfd7MLqdopz5NWWxwFOX12zJwt032+QUUMf2nzex3KbNDB1AWHzwH+Ef2erx9lGLe+w4z+37KwOdhFJuPjzU/m+UjlEHh+5pj8jnK4OWNlFeX2Yzgf1JmJV9hZjsprzMfR9F5QXMMmmN1B3C0mR1LPph5JXAR8A9m9rZm20sor2uf0WF/+vEXwG80sX95nTJV+7eKF5jZDspx/N+UVbOnrzMwFEJsMTTzJsS+5X8Ab0t+Xgzg7v8BHE3Rmr2bMgvz3cDPuPt5q+KcTEmX9FzgQ5SZrl9z999uvn8GZSDyNsrM2dMp9hDvpuipqhctNCs5Hw78LkVD99cUG5CHUQYxj1uZfWoGlz8HvAN4HuW167Oavv5sF1+xps6JFLPgF1MGUq+iiO6Py2a+mkHJz1G0YH/R/BzVxPkiey1CoAw8H0oZJN6HgLtfDDyassDiPIr4fwdlxeolm92ffrj7ZwEH7mDv4o5YZjP7B+W4HUO5Fn6espr3TYPuuxBiOPSWl/utVhdCCDEJrDLpfay7X7iPuyOE6Ihm3oQQQgghxggN3oQQQgghxgi9NhVCCCGEGCM08yaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUZo8CaEEEIIMUbM7ItGzWwWeDBwH+AAYAdwHfBv7r6wL/okhBBCCDEO9JaXl0fWmJlNAa8Hfh24R7N5Geg1/74NOMfd3zCyTgkhhBBCjBGjfm36ZuC5wAuBw4Ft7j4NbGs+vwg4xcw0eBNCCCGESBj1zNsNwNPd/cINyjwWeI+7HzqyjgkhhBBCjAmjnnnbBlzbp8w3gLuPoC9CCCGEEGPHqAdvHwPeaWY/kH1pZvcG3gFcNNJeCSGEEEKMCaNebXoK8DfAVWb2VcoK013AduAQ4AeBy4Hnj7hfQgghhBBjwUg1byuY2cOBRwCHAQcBO4FrgE+4+z+NvENCCCGEEGPCPhm8CSGEEELUYmYHs9dibNDc5u63DCn2UBj54M3MjgROBY6hbdJ7GfB2d/fNR/7Smh3ZsfCNVonF5d1rPi8s3dkqc/Outgzwprnems+7F3utMjfsXFvvwJn2cf3ObUtrPi8tt+PMTK2td/t8uz8zvXbsu82u3bY9UTPG2N8x2//cz7S7yEwSezbEXqq4rGr2f3Yqe7OfdIrYfub1vLbeVK8du72t3dZUR6lorzcdImdx+sfupftf037/ej2mW1vacTruf2vfktgV+1azH3V0lfyuvY+zZ+gycVvdc3a5FXspKbO4tjfLi0mZ/l7ny0m9pVbs+aRe6GOyb4sV/69kz4i4aTY51fH8T/e2tcrE+zjrYytux+sxIx7HjHj8a/q4TqTWluzZcs9tJwzqxhk5Znbw4vL0zdO9/se1I98C7j9OA7iRat7M7ATgA8CngAuA64E5iubtUOA44AozO9HdLx5l34QQQgixJbnHdG+RG+aOYGF5dqCBZ3rzfP/2L30XZVZPg7d1OBM4y91PX+f7M8zsDOAc4KjRdUsIIYQQW5lFtrPE9gHHHM8U76Pu9RHAeX3KnA88cAR9EUIIIYQYO0Y9eHPgCX3KPBn48gj6IoQQQogxocfUUH7GkVG/Nj0N+KCZHQ9cQtvn7ZHAscDjR9yvPWSS0bhAYb6tIW6JbxeSMvNL/fWiNSckCd2WgieLGqZD89lihJZgOLmup6fasePCgkxEHcW/UZwNMNWb3fBzFiePlYmP1+5MXEAAMBXOQCaO73qzx8UAmfB/cA+SrosawjFK+tM+jrVtxdhZvX29YCG7uyJrz2MuNF+uKJPUiiL2XrZgof/+txcDJPuVLQYICw3S8x+ukew+pmLBREbsdn7/9UKZ7BrtbfgZYCn0u71Yp5RqU3OP1lxHsU+1CxbCtZUsamFg94jYqox08ObuF5nZQyiJ6U8i8XkDXuLuV46yX0IIIYTY2vTodV7tvlHMcWTUM2+4+xeBXx11u0IIIYQYX3q9wb/mHNfXpuPZayGEEEKI/ZRR+7z9QW1Zd3/uXWutv35gISmyWCE7yHRg0bi2xsg2I+rQtiV1MnPLqd7Gn6Etg8jK1Jjr1kwyp4aXcbo7aSv+FRQ1aCVOonmLGrts/2PszKSX/h5CgzKpzTR3sUyuJ+pGTeyWLi89j/3LrNeDtXGyeoP5e7L7q5BM97SWqF/rZbq0cG3nttKJuWo4JsuJkXUXY/WsrdxcuL8Bb5XmqiNxb3N9a//9b52jjlrKcUhAlF5HnQ1/tza9Xm/grzn12rSOZeA5wFeBq/uUE0IIIYQQgVEvWHiemd0APA84yd1vHGX7QgghhBhXphi82ms81WMj73WTXeELwJtG3bYQQgghxpNeb2ooP+PIyFebNvwf4OHDbCBLTL64tGvN510L7Xfdc0ne21t3x4Tm7TLfDmW2RVM12nqyuSTBfdTF7UzKLCY6mLmltbqTe8y2dSgHhrOdJX2O76sXEtHHbNJ+ngh+LVEblOlJtk21E2G34iR/c8T2s/5M9aI/V/+k39nfNzWrk/Ik11Er1l9z1l1BkJp4VdSL/mRZ5KiLqiVqHjOtSX+/vhpq/MK6UqM5a19bmS6uf0L7LMF8l8T0eRL6rE/9E9O367S31ajgavS1qc9dqJf1scZTseaZlR23Gi/E5VbsGm/KWi/A/vWya0JMFvtk8ObuVwFX7Yu2hRBCCDGG9HpDsPYYzwUL4zlfKIQQQgixn7KvXpsKIYQQQlQzjFyk42rSq8GbEEIIIbY8yrCwl4kdvGUi1ijqv2OhfdJun2+//75lbm257dNtgeht88EANnEAXlhaWyZLcB/fv2cLFrIFEzVvwOeDQjgzDY4i4m1JY8lhY7Hi+s/7vZYo4t02NZcVare/vPHn0v5aEfFML1vUsNakt2bhQWZSmgmkp1oLFhID4ir9RYxds/Ch0qi0YsHAcivBfO3Dr7+MvYthZs1ihO5mq92SkMfFCLVmy+3FCO1rNIrRs0UNi63nX3avZ7HXbsueUVXLXsJilF6yWGYpWbASt2QLploLHZba+9HrrT1G8d4DWIz1klOdLnxq3cdJ7OXda+skhuDdFxWsPQDps05WqRPPxA7ehBBCCDE5aOZtLxq8CSGEEGLL0xvCatNxTY81nkNOIYQQQoj9lImdedu1uLu9LZjy3r67PeL++p1t/cLX74wJzdvtfTtq3pI+7VxYKyBZWGoHmqkw6d2eaNWi4e5spgPatvbjfNJ+1JPUJzju/9fLVNC9ZEm322QJtTMd1loWEq1OPCTJoWUmmARn5zHGqdVTRW1WpoOpMgAOerpcc5do3qIOqSLpfHZee8vdEtPXGeV2+Cs4Of6D++u8q0lw0KVVJm+PJr2ZdnepZcDbTfOW6dmiAfiu5Capud5bJsnJccw0b/EZMZM8bKPGa1tyqqNH+vRU+xjF5+922sc6U6VNh+M9nbQfJc8zqS4xCV5BfEZnx3FS6aHE9Cto5k0IIYQQYoyY2Jk3IYQQQkwOPQafi7S3PJ5zWBq8CSGEEGLLM4xE8j2muqeQ3odM7OBtNjm/d0StQFIv05jFbduT2POLUc/ULjMXNBZZYuZEztZuK9E4zAchSmwLYHsQWSwmB6Cl1Uh0SlGXk5HuW5XPW4zT3wtqvfa6EE9tLtOKHlZZmXaHoraiynet4kGVlcn96eK2VNHXtz0RGeSTv04bt1kynVrW66jDyu6rGo1VjJPVyL0Y15bMnjVR87qQ7UnLCrG/di6x5szPbAjVSzSH8Xi3S7TL1GrXas7RGI5FxCaZ2MGbEEIIISaIXm/gM2/QG8vR7ni+7BVCCCGE2E/RzJsQQgghxoApBj/nNJ5zWBM7eMs8tGam1rr2RC8gyD3UosbtwJl2mZg3NdN3fUeol2k+Yt7UxJ4o1fPF2HdL+nhgOCSZP1FMQRh9l8q2pF74nB3bGlqqrKT9zOct9imbBY99ymLXELVjNRpAyLRpNT5r3dpPc5tW+Kxl9SJTFfuRxw7+dGlO1i4P0hrtYF0fY07Szt50LaOzymsteuj1apKL1ux/si31x+sfOW7L9qyrcrJG8xo1XplOuP0cS9oKZbL9yHVoMW9t/3rTlblda+iiHZ4Uer0pGMaChTFkPHsthBBCCLGfMrEzb0IIIYSYHDTzthcN3oQQQgix5SmSESWmhwkevC0l3js7Ftae9Fvm2hfBbfP9fd5i/tEsdn559c9tereZtWUy37mZJPiB07GPaQfWcM9t7W0xJ2h+YSc6tKl+JUq01WT+RDG3YpZ/MdPvRP1KjNNuPdeOZHrCdvsxR2taqrVlqrdWczmbCBpr9Cyxi1n+xZkaf7q0j/0fCTX5T/PWa7R6g3mQ1sXJTna84Lr9R9HKbVqtQuqf23Rxae11k/mTxbzFy8nxyO6t+EzalVxcUaubaVBr8nbuTtqP1212P8ZqWW7TWG82eWZHzVnW5SxHcsy3mhn0x32brjhGtTmSY5dq64nBYGbTwBuBZwB3By4ETnH3G/rUux/wecDc/dpV23vAK4BfBb4H+Ffghe7+bxvFG8/5QiGEEELsV6xkWBj0zyZ5HfB04GTgWOAw4P0bVTCzI4CLgIOSr08HTgNOBY4CrgM+bGZ33yimBm9CCCGEEH0ws22UQdar3P1j7n4F8CTgp8zs6HXqnAp8Brg1+e47gJcDL3H3D7i7A88D5igDuXUZ6WtTMzuSsuPHAPcBDgB2UEaalwFvbzovhBBCCLGHXq+3Xj7C7jE3J9V4MOVV6SUrG9z9ajO7mjKu+VRS53HAc4AbgIvDd4+gjIP+elW824D79uvIyAZvZnYC8AHKzl0AXE8ZXW4HDgWOA64wsxPdPe7gpsl0IFFjlWk+spygcy3dWXvCclfUxSXXw/Ri1HMlHkYhdrvtthcctLV6NdqpnQv9PZQyfV+WJ7Ct1cn2rYYQp/LGamve2mXiMYl5FLN6qc9Vr/++ZkRfuRpdXkbsdqYdzHz24v73EpXPVG/3hm2VeqFO0seMGCvT6gzuuTxK7Vyb6GHXVc+U6WLjcyN71sV62TWS1dsdnjdzyU0by2T32u6lijKJni5eo5mnZrze7j7bjrM43f9ea+cIrXtmtbVq7T7G/c983tq6xDY1eUuzYzueEvz+9BjCatNMtLg+hzW/rwvbr6dMSLVw98cAmNmjkq+PAL4JPMzM3kAZtH2WMhP3xY06MsqZtzOBs9z99HW+P8PMzgDOoc90oRBCCCHEADnMzOK2W9199evOg4Ald48rieYoM2ib5R6Umbx3AL8BfIOyeOEyMzvS3b+5XsVRat6OAM7rU+Z84IEj6IsQQgghxogeU0P5afg4cFX4eVHowk5gyszixNd2igRss8xTBoTPd/e/c/d/AZ5KmWD9lY0qjnLw5sAT+pR5MvDlEfRFCCGEEGKFYyivLVf//E4oc03z+5Cw/VDar1JrWKnz7ysb3H0XZeC4oe5tlK9NTwM+aGbHU8R+1wG7KCPWQ4BHUpbdPn6EfRJCCCHEONDrdbH26Buz4Vp3v7pP6c8Bt1PGK+cBmNnhwOGURZeb5RPN74cCH2niHQDcD/i/G1Uc2eDN3S8ys4cALwROAu5NmS7cSRnNfpIi0rtyEO3tSsT40XAxE4NGMS7Ancm2VnsVZaJAfqEi6fKdC+0LdXfW8VZbbaltrHb7bH8x9FzS1oHJgontwbe1oou5QDhckbOJGDgzBY17m7Ufa2WLMeJlky38iOexZl+zerlgPyRGr4ibHce4OKKW6dDHmgULtYsMhpnQvB81C3gyskUdNURT3BrhObSviWxRVbxHM8F6rJddI1nsHeEGuD0xLW8tmKhY+JXtf7ZgKp6ne2xrB49PxIXkRopm5/H5BEli+uS5lhr3thYMtfcjmvRGY1/IzlG7rWyhRex3+qyb0BULw0iPtZl47j5nZucCZ5vZTcCNwLnApe5+eWMlcjBwi7vv3ihWE+9qMzsP+H0zezZwLfBaivf6hjKzUWdY+C/KIG0W+D5gG/Bt4L+BiwY1cBNCCCGEGAKvpoxhzmt+Xwic0nx3NMUO5DhW2Yn04dnAm5p49wD+CTjO3W/aqNIorUK+l7JTh1AGa4dRUkF8GHgM8HIz+xjwi+5+56j6JYQQQoitT1lcMGip/ubiufsC8NLmJ353Ceu8QFjvO3efA17W/FQzygULb6XMvP2Auz+M4onyduBmd38IcH/KgO7MEfZJCCGEEGKsGOVr08cCx7j7DgB3XzKz1wK3mNmpzbvf/0Mx8n3hXW0s06BFw9vb5ttj1yxZ/R2hXKY5++autaKKTGMTjRszorlvprfbVpH1eSbRPMVuf2eiOck0FoMiGsdmu1FjZhp1YaViTLrev/3sHM2E018Tp858uF0vS5bdRauymBy0rn+V1WjDuurHIlmYGLtWT9gvzlakv9V1fj20jlEWu8KQuZcEj9dovB8Ka2NlhtCxT5kheaY5zWJ1oa1D638hZcd6KXtmh+dProsNn7P2+tQpZDq8aADcrlX7TBo79rHmbSsxysHbHGWRwn+s2nZPymrTbRSPlNuBA0fYJyGEEEKMASU91tBWm44Voxy8/R3wh2b2LMqihcOAdwGfcfdvmdkPA2+jnftLCCGEEEI0jHLw9hsU07l/YO9csAO/0Pz794Bp4Bkj7JMQQgghxoBhJKbXzFsf3P124DFm9qPAAyiJXP9lVY6wE939jkG1l3kYRc+iLDFylgh+R/Ba25UIcaIuLtNuZUmmI9uCDuSOxOftoJn2zkWtXIwDbe+3bF9r/KEyarQq0Xssiz27FPUkic9RErvlfZSVCZ8z6Vzc/2y/YrXapOOtYsn1EI9RTejac1RDjT/cOOjJBvVipetzveZ6zIiPluyZERPKZz5r0UNyMSmT6YJ3hm07Ep+32H6mk43P1kzzFtuC9vVXo0udT57H20KZ7B6t8YbMiMVq6nWUbqZEzW/meznd0edxq7MVVptuFUbt84a7f47iUhy3D2zgJoQQQggxqYx88CaEEEIIsVn2dYaFrcR49loIIYQQYj9lYmfecu3a2m13JD5nmRdby2st04rs7K8xiJ5By4kQY3o6eMrNtcvsjoIO2qPwVPMWPt+RiGWixmYp8xBLdCiZZ1kk5vfLtCJRG7M9yzfYUc7RyslZUaYmTm1CznZO0I55M5f7H8fsHMVyWZkYO+tjPP6ZLizP27r5Mhk1579CXlr1l2vXay3eWdW6yHD8B5X/NfeL639vZzlBpyqeEbGXWVs11212/8fzVvM8Svc/XsftIlXHP2s/7m7qxVZzrVed7MTDr6baOKIFC3uY2MGbEEIIISaIHoN/Xzimazv02lQIIYQQYozQzJsQQgghtj49hvDadLDhRsXEDt52Jh5uUfN2++72xONNSW7T23as/TyV6EBqNG+LSZ8i00HjkWneMs+m24JWLtOKxGrfmexr7GLml5f7GvWfxJ2NPm9JmSjDq/Veans2JTlhg8jlwOTqj9qU7L6OORkzn6VMKxa1MZk/Vo0uLG7KcsTW6ncibW1O0sf4eYiat876xooHcid9I3XHscYLMM2lOSAPt91hW6YBznzWYrn4zMz6lF1/UTs7n5TZmcRu5QTtmH91urWCsH2Q4jNiOomTPX/irZ3uf9TTJWVivRr/ShjctS3Gm4kdvAkhhBBigtCChT1o8CaEEEKIrc8wEixowYIQQgghhBg2mnkTQgghxJZneUivTcfxxenEDt5qDGCz9QNzi4mIvyKrdBSWpkLz0Kle4u4YRbNTmRg32RZF9PEztAX7WZl4QcwmbWWLIbZXmPRG48xMsB8XEWRtZcRzu5TMhcdYM8kdG8XQmbloFEjnJqX9Y2fGnZEak87cbLeqSy26iKFTUX9NnAGV6UpN6Bqz44E1lhSrMZfNzF5jv7P7OIrqoX0tZ/XiIoL8eIR7Pelkbq679nN2j8T7L0vCHu/bbFFD3NfsNVSNSW92alvPkaRM3P/0OI7jqEKMhIkdvAkhhBBigugx+AHtmA6QNXgTQgghxNan18unbO8KNXnKtiBasCCEEEIIMUZM7MxbpnGIZBqDVAcSNG+Znmghc6GMZYIQYjlprBf0JPML7TiZSfDuxf46lC5anVQXlxzbqGfL/jhq12vHPjDo0g5I9jUj6tky48yop4kaQMg0b+04sUztcW1p3ip0glVJ2DOBWaaD6x8q1fhVhB4aXVfxVxnwDnFHOie0j8axmblrOEdZmZmwcwvpfZzpYmNC+ayPwWw70xeHi30u0Q1nOtl4j959NrtHl/uWuVvYlkgLiLgAACAASURBVGn34jnK7sfsFo2xsuO4HGZzaspk+r6umrsxdb/oj3ze9jCxgzchhBBCTBDSvO1Br02FEEIIIcYIzbwJIYQQYuszNYQFC4OONyImdvB2+3yWdDmWaU88fjtJ1j6XCTZaZdZ+Xq4QvdToYrLE9Nkr+u3bQ38Sv7rdQRyTJaZu+UMlZnhziX4jalwyop4q9+Jb+7lWu9FFY5Qmgq4oMyi6Jp3eanqW2sT0nWIPJkxnWUv2aiI+DdIyNf586dZ44PoHSq/j6HOWxUk70P8ejfufaS5nQsXZVBja7sBs6Pd3JHq2SOYFGT0cZxItZ+x25vuYyUmj5i3T08XjuC31y+t2k8RQw7z/xNZlYgdvQgghhJggtGBhDxq8CSGEEGLrowULe9CCBSGEEEKIMWJiZ95S76vAQiJMiZ5uUKcfiBq3rE7MkZqVie3Xeoh18QOr0WnW+Jxl5bJ8g7k2ZC01+Ucz4qnM/Jmi7iWL3d6PrEzIUZv86dZL9r8qb2X4nGqnWrKo2ouk/8Hs4o/WVfM1Srr+lVqTWzQrU2lPWFGvv9NXpsht37eJh1lytuM9UXPPLiYPnxhnIXmQZPWiX2T0fczYnhzsGCfbj+gFWZNruJQLPntZvZYXXFKmImd2Ddn1N6DQW49hZFgY09emmnkTQgghhBgjRjrzZmZHAqcCxwD3AQ4AdgDXAZcBb3d3H2WfhBBCCDEGSPO2h5EN3szsBOADwKeAC4DrgTlgO3AocBxwhZmd6O4Xj6pfQgghhNj6LPcYwmrTwYYbFaOceTsTOMvdT1/n+zPM7AzgHOCou9pY5usTtQlZHtPMn20xKxhYSPzYItF6LtPXRTKft4yZoPu4NTEWivq5m3e1xSJRz7U7SRIa/fIA5kPwzMPowHC1Zbq46E8X465HTbGojcm0MlFOkekKpsPGrO1MB9eKXZGSNNut2F5XS6dMJzlToSepedbV5GTsWqaGQeU2rZIcVpTpGju7tuItuZgIDOMjK8v1u5A8f+aC92PmBRmpyaM8n/Qxi93OG9q3+ZTlcG/X+NVlz6z8udI/b2k8tnmO2Cx2f+J1m93H8nmbfEY5eDsCOK9PmfOBl42gL0IIIYQYJ7ZAhgUzmwbeCDwDuDtwIXCKu9/Qp979gM8D5u7XrlPml4D3Afd196s37Pamen3XcOAJfco8GfjyCPoihBBCCLFZXgc8HTgZOBY4DHj/RhXM7AjgIuCgDcocAryrthOjnHk7DfigmR0PXEJZpLCLonk7BHgUZSHD40fYJyGEEEKMA/t4wYKZbaMsunyhu3+s2fYk4CozO9rdP5XUORV4A/BffcL/MfDvlLFQX0Y2eHP3i8zsIcALgZMoo9WDgDuBa4BPAC929ysH0V7m67Mt6CBqZ0tr9AO9aOKWsLS0tgNLu9t1FqdDmflEhzHb35+uRuOR9rHlBZb4Q1Uct8z7KGrcsmnfqHGJfk2Qe/jVeDTF2LmHXfRwaxO3DTOvcWohFTZmeqaq2CPu96QyzH2tuf5ST8Ho6dix/Rqt1jCv/666sPisy45Rje9hVwYlOcue2VGq21VzOZbs+/RYD6a8Kr1kZYO7X21mV1Mmn1qDN+BxwHOAG4B0MaaZvYAyifUSKgdvo/Z5+2/KtODD3f2ewOHAHzbbbwO+PeL+CCGEEELUcFjz+7qw/XqK/VkLd3+Mu1+wXsDmleqbKK9hd9d2ZGSDt8bj7UvAvwJfNrOfAP4J+DlKhx8HXGlmDxpVn4QQQggxJqxkWBjkz+Zm3g4Cltx9Pmyfo/jWbgozmwH+nOLE8fnN1B2l5u0c4ArgscCzKeK9jwJPdfcFADN7F/BW4PgR9ksIIYQQW53hat4OM7P47a3ufuuqzzuBKTObWRm3NGynJBzYLL9JeTt+1mYrjvK16cOBV7r7fwCvBO4GnB0OwNuAHx9hn4QQQgghPg5cFX5eFMpc0/w+JGw/lPar1BqeQfG1/baZ3UGZ1AL4gpm9aqOKo5x5uxP4rubf96ToLg8OZb4HuGMQjdWYUu5OTCIXF1qbmA8TpFNZ1unYYKK0XQrK3l7SyaWWA2u7TJrQvn+1fc5iFFFXmGJm5p5bjdpjHWfnMzF2FH/XCLZzk+A2g7okahaHdN23LvufUSWi7+ikG8/3IC/RGDvrYty2nAjvW2a/SZxs4U8s1/X660qcTag5j9lzJF6jFbnj14ndf1vNopKMmrd12X81W/+JOESGu2DhGCD6r90aPn8OuB14JI1vrZkdTtHvX9ah9UcBs6s+PwT4S4qM7N83qjjKwdvfAO8xs3Mpq02/BrzOzG6h6OD+J/B7wEdG2CchhBBCiGv7GeO6+1wzhjnbzG4CbgTOBS5198sbK5GDgVvcve/iA3f/6urPZnav5p9fdfdbNqo7ap+336UY3H0TeBrwAMrS2pU/gi6nvFIVQgghhNjLvrcKAXg1ZbbsvOb3hcApzXdHU+xAjmOVncgwGKXP252UhQrPXrX5E2Z2MUXndi3wz+5eY0cmhBBCiP2JKQav1N9kvEan/9LmJ353Ceu82d7ou1VlPtGvzAqjnHlLaaYprx503Czp8R0La7ftTsQqmddu1KFkujjmYybifj3sTvaHQkyWnpWJXcoSKrfqJHqSzAA5mulmCaW3hzKZnmT79NoymUlvDVnsmbAtGvKWbf1j15Sp6VOqlako09I81Xagxmy6NlafOtnx72Ju3NUAdpiJ6ePGrvK6mtjD1K5m9/bUgBRVNUa+Nduyey32u/u11j9Odvyr2h+QLq5G8yj2T/b54E0IIYQQoi9b47XplmDUGRaEEEIIIcRdQDNvQgghhBgPxnOibOBM7OBt92J7286gebsz0cXN724rCnbPhW2ZDmNXJoQLBFlcLxFURBleL9mR+W3tCdO5ubUV55OE9ndMra13x3z/idesxI6ptjBwJgg/ZhPtYNTBpLq4cE4GOTU8NdvfoCtaX2UJrVseWpUilFgum62PzdWEXkz2I+13VSLu/i121dzE1oep3anZ05prq0ZzOEjNW7R+zOrF6yjztIzbMk/LKNMFmAvXUvTGLLH773HsY3aPZLGjxi3bt5oraVBvwmripLq0iv0flD9etsJvK/p8DoLllZRWg2TQ8UaEXpsKIYQQQowREzvzJoQQQogJoscQFiwMNtyo0MybEEIIIcQYsV/NvLW0IolWaCHRyrXM37KRfyjTywQNUdCRCRO2rc1m10uEKUtJHxeDOGRhIdG4hLOd+dxFsjJzicgiamqWEn+2GmnBXNS8ZZ52Hf9SaskHpyuEIYm+J7Zfqzlp51tMtDoxzsa9A3JdUC/5c7JOB9P/4MZ+1+ZR3Wqat46pTas0b133ra2V6pZ/NOrJMn3bQhI71ov3Y0Z2/UddXK3mK9ZbSBPg9o/TLUdsUmiE1LrT1+xbdt1MBD0GP1M2podqvxq8CSGEEGJM0YKFPei1qRBCCCHEGKGZNyGEEEJsfZRhYQ8TO3jLPMRiTs7pRJc1kwmqQuLQqel2kRh8OREiLc8GPVuWSDW0vxyTlkLnd/RRK7E7aT7OIC9keppETzEfhCeZF1SMnWlVWrlNM7+4ZP9rcinG3KbpbPnUhh9Tuvo1Zbq0qvbC5xqfqVpyX621TId+p5qbZFvct1qNTxdiW7nvXf84+zr/ZHaM4vWW3aPz4SbJ4mQ6uJY/24a9u2vUXGs1ZPqu5RFmAK3JUZzmTQ2fs/+M02dLheZ2ojOgjudYa+DotakQQgghxBgxsTNvQgghhJggtGBhD5p5E0IIIYQYIzTzJoQQQoitj2be9jCxg7cs6XEm0I1kAtHe/Fp316XEuHJ6LjjAZnrR6ZC8PutQWKDQ250kvJ9rr5jYPbv2VM7vbncgrn3YudCeeI3XcRT5AxyQmNvuCArdbMFIJGme2WAunIXpeq/V1GsvfEgWtVSYhKbth8/ZupeWcWhF3JrrupYuxyhbrJUtBsj8r4dFa1FLImqvuYxq9q12/7uQLhhqGfC2OxDNtdMk9MlzLC5i2pmYfdcQFyMsJH2crzDunU4ObnwmZWvM4n07lcRpXceVIv8YayZ5RsT9nUpi1yzYqOlRtmBjUItBthrLMundg16bCiGEEEKMERM78yaEEEKICUKvTfegmTchhBBCiDFiv555q0lonJLoJ5bD6D1PTB/Gypkwoe0umrSfVAv1akyjsz84oplppvmq0aFleq52nf7J67M+dv1DKWpjomkzwMxU3P+kTIVJZs1py7Q68fgv1ySY7vgnWHatx/3Nboea47/VJDfZ+ag5bKm5bziTNWVqiddSeh+1Op5orlrazUSnm+k5K7SrLSPfipOdXjMdL5Ka9qIObCm52GsSvGfEcsM0Mq4hNQkeeS9GxRAyLIzp0dqvB29CCCGEGBP02nQPem0qhBBCCDFGaOZNCCGEEFufKQY/5TSmU1gTO3jrOhOaejZ1EGK16nTtVKaLq9DqLSVCjMWwLfOQmgnv/zN/ptx7KmhMKvRsmYdTTHA/l7Q/m8SuIVrx5acj+DNlbdX4vGXHtkJP1gtanZo9rfV0qtEKxQdCpucZlIdZV2o0Ri3paOc4ib615Q/Wv0wtsVp2bncHf7bMwy16v+W+l+1+x/st3jOQ+4q1Ylfo4jKfuXi/ZX2cDbrU7Bh18TnL9KWpnjFq5Sr86rJrreY41lD5+BETxsQO3oQQQggxQfQY/IKF8ZS8jXbwZmZHAqcCxwD3AQ4AdgDXAZcBb3d3H2WfhBBCCDEGaMHCHkY2eDOzE4APAJ8CLgCuB+aA7cChwHHAFWZ2ortfPKp+CSGEEEKME6OceTsTOMvdT1/n+zPM7AzgHOCou9pYpqeIuqxM45DpF6Jn23KiYOhlopIYu8YgKYapEVQkxaK+Ddo6uEzPRtCTpPq25LgthA5kWqFWLsNEmHLgdNTqVJiRVTIT9n97Ejpq7jJ/rKjLyY5jppWLWWrTmy/q4qo8rfqXqS2XZNJt0yH/KbRPW9cyVbRymyZtVYSp8vCqk6VWEc939lhp5Q3N7seK/KfZvb07aNwyzWkXn7VMlxe1e9D2Ppybyhrr/4xYqrDUbOUxzp79ycW+GE7SYnL84+4uVhz/rvM/2RHqfN9scZbl87aHUa6zOAI4r0+Z84EHjqAvQgghhBgnpob0M4aMstsOPKFPmScDXx5BX4QQQgghxpJRvjY9DfigmR0PXEJZpLCLonk7BHgkcCzw+BH2SQghhBDjgBYs7GFkgzd3v8jMjgJeBJwEHAYcBOwErgE+AbzE3a8cRHuZnmOuwucs1RgFwUTnUx2ECL1MiDG/VnSSaemWEwHJfBCULS4kOoyZqGdLdBhBhzLTa0/O3pkcuKkwiZtpvqIOI+ZRBJiZWrtvic0Usx1PQI0OZHtFUta4+7lfU7Jvrbyx7VpZvtN+ZHqijC7+aGmZAWneutIll2btcY3Xbdbnllaq4/HIy/XXikUdWqaLi5rfTLsW9W1ZvUyXVnO9xf2dr9DllY1ry21LTlyMvT05ATEn62yyr/Hxm+ZazrRyobkaPV32HIvVBqWTXK9PYrIY5WrTvwfOdPfnjapNIYQQQkwIvSEsWBj4AojRMMrXpo8GHmlmZwFvcPddI2xbCCGEEOPMFnhtambTwBuBZwB3By4ETnH3G/rUux/wecDc/dpV2+8PnA08gjIBewnwUnf/2obd3lSv7zrPbH6+aGYnNwdBCCGEEGIceB3wdOBkik7/MOD9G1UwsyOAiyhSsdXb7wZ8FJimTHA9Bvge4CNmtn2jmKMevF1EsQL5G+DdwJfN7HQzsxH3QwghhBDjRm/AP5vAzLZRskS9yt0/5u5XAE8CfsrMjl6nzqnAZ4Bbk6+PB34AeKq7f76JdzLwQ8DDNurLyHObuvttwMvM7C3AC4CnAa81s28A/w7c7O5PHUbbUQyciYirEkpXLGpIp2Jb2eMrGqsUnk5tMa+abPfjtjTpe+f21sbKFhF0mW1P9yNuyITOFbFigu2sTI3wPzMJzYh9ymLPVlxHNectP/4156h/mZrFBzULD2qYyRYsxOs4qRe1+LXtL7UeQJkBbP8ycVHBbLaAKOlUrJf1u+YaaQnmMyPddMHS2nLZq5macxuvkfyaXVso261MDhW31SxXqvnvoLNJbxa7YyzRlwdTXpVesrLB3a82s6spaT8/ldR5HPAc4AYgZo/6Z+BxzbhohZW78Ls26sgoB29rrid3/ybweuD1ZvZDlB3/MYptiBBCCCHEHpb3vebtsOb3dWH79ZR87S3c/TEAZvao5LvrklivAO6kOHCsyygHb+seIXf/IvDFEfZFCCGEEOPEvh+8HQQsuft82D4HHHBXu2Jmzwd+Dfh1d795o7KjHLwdB9wywvaEEEIIIWo4LJHf3+ruq7VqO4EpM5tx99WpoLcDO+5K42b2m5RVrL/l7u/sV36UJr2XjqotyPULUU+R6Vmmc5HFmo/LiehmOQpBUiFGKJOJd4K7ZNZWVi9q3qaS/ZgK9VI9T/jcy/RcqZ4tJqYfDF2XI2cal+mwLX4u9WKdjh0YIjVSyazfNbLMUVKjnRukLrIde2ih2/rCijJAlfAp1ssfEUE7mIi3cj3b2nrR2Lyw+QOXeARX6mLbZeL+ZtrRmraiMizTt2X1avRsbc1jf81dV7LnwRZ8bA2GHkPwedvzr48n376esrp0hWua34es+jfAobRff1ZhZlPAucDzgNPc/ayaeiNfsCCEEEIIsWmGkUh+b7xjgGvDt3GF6OeA2ynpPM8DMLPDgcOByzr24J3As4Fnuvt7aytp8CaEEEKI/Z1r3f3qjQq4+5yZnQucbWY3ATdSZs0udffLGyuRg4Fb3H13vwbN7HHA8ykzfBea2b1WfX3rRskMtpjBhBBCCCFERm9viqxB/Wz+JfOrgfMpM28XA18Ffqn57mjg683vGp7W/H5tU2/1zy+tVwk089Yi9XmLCeWTIjHJfKrCWAxKiIq2UpJO1vjTtWzmKppfTkyEsi62k9wnmrNW+1nstYWyhM75we1/A0bNV55Quv+BjFrBNDF9hfdbntB+MBqvmsTU2XkcpcYv3//B0PaL6xioYxcrcrd3JsYe1yTk3fWsNWU2r4OrPdU19SZWcyZoFiq8tPmJ313COqc/+87dnwI8pUs/NHgTQgghxNZn31uFbBk0eBNCCCHE1keDtz1I8yaEEEIIMUbs1zNvqYdPNggflMhh0P40q2jp2RKx2PJS1AFlmrO12xYSDVheL8RODkiU/JH4My0EQ6iF1CCrXa9G9xNjLdRZ6CVl1haK+SABplLTqP46rLReHxY6ap5SzVmFOKxLH6E+B+tmqTmO2XnN69XkbY11+lbJ41TEznWZvfC5XWY+3keZTjXpQKteYtDWRU+ZxZnPjv9S/zIsxvsviR3v9QoR4kxy7rNTG/c/62LcVqsd7kJN+xNDr8fygP8f7Q3x/+Vhopk3IYQQQogxYr+eeRNCCCHEmDBck96xQoM3IYQQQowBvSHIj8bztenEDt5q8ubV1qs5t8s1Sfm6GgttMWq0GjU+V5kOZJH+urBcq9S/TNyW9THqsrL8p1091Foas0xf1UGskmnXMu1Wja9alT9Zhear6zkaFtk5y3Vw/f0Ka6jZt5rnURYn7ssoj2MtVc+IAfW75l4fphde1n5LKpyc60F1qatdqBhvJnbwJoQQQogJQlYhexjTt71CCCGEEPsnmnkTQgghxNZHM2972K8GbzGXXi/z9akQQ7b0bUCvpWfrr3nL4rQupEozuripl8yptvqYUONz1ZWWnqqjVmWqIidopu9ajHlTK/zqMrFKy9OuQt9V2utfZlDU6NvSY9uhT7X6mlHqcGq82Gp1cJtt667UG1S+166aszqfuc33J8tRnPtFxs+JdrPP5zzOht0Dci+87D/I2KUqn7eKMl2pyWs9MXTKI18RcwzRa1MhhBBCiDFiv5p5E0IIIcR4sjy1zhuru8KYTmGt220zO3SUHRFCCCGEWJ/G522QP2P63nSjMeeVZvYrI+uJEEIIIYToy0avTf8SeK+Z/SLwXHe/cUR9GgidDXkTWtO0NQ7PybA4JtTNFhC0ylQsfMi6lFWL22rMVbPRfdU6i6xehzhdBOQlTn8Vb2bAKyaDmnu767VV01bXRQzt67ZbJwdliJwbGXeLFem6OGpYC33GdNHh/oVWm+5h3Zk3d38BcAzwAOALZnbSyHolhBBCCCFSNlyw4O6fMrMHA6cBf9zMwr0S2BnKXT+8LgohhBBiv0dWIXvou9rU3eeBN5rZ5cCHgV9c9XWPYlcTLdSEEEIIIQZGbyr3ML1LjOlq076DNzM7EHgdcCrwWeC1hJm3SSKVs9WIxWp0cDV1ai6kinf0XbqThR6kHKAtHWxrXuJfAbkurl2vRuMT9Ts1er5MF9f1GM1OrY1Vqyfsx1RHu8/02Haol+miagxwh5ksvEbPVqO56qqdrbkea7Rys8kJWWqd73ag+eBcO5UZ0Caxo5H1THqIOhhAJwdgKXlIzYSOzlbc/zMVxz87jq062baKR312rdUoF2vutezwx1hLHe9jMd5sOHgzsxOAc4HvB34TeJu7Z4bWQgghhBBDYyjOHpP22tTM/i9wEvBx4Kfd/ct3tTEzO5Iyg3cMcB/gAGAHcB1wGfB2d/e72o4QQgghxKSy0czbzwCnuPu7BtFQM4v3AeBTwAXA9cAcsB04FDgOuMLMTnT3iwfRphBCCCEmA8287WWjwduD3P2aAbZ1JnCWu5++zvdnmNkZwDnAUQNsdw9RK5HpAmqSt1cJGLrq2TrWSf3gOoTen96Jd93XUWq39jcm9djuayupGl1e11jdPe261esSu0aDWUuXapm+l+UK7XJN7I71xpHeSoaFAUcdRzbyeRvkwA3gCOC8PmXOBx444HaFEEIIISaGUS5KceAJfco8GbjL2johhBBCTBaDTmvaG8ZE3ojoaxUyQE4DPmhmxwOXUBYp7KJo3g4BHkVZyPD4EfZJCCGEEGKsqBq8mdkbgD9y9692bcjdLzKzhwAvpKxiPQw4CLgTuAb4BPBid7+yaxurGWjeyiodXCeDrpEyqL8wUp+1ijKTQtTP1Ht4RaO7/sexRk/Uikt+/LNyNfX6UatLqyk3KRq3mvNW81ipOR5110i3el3bG2WcrrFrjm1WpEu3lyvuvdr2a8pMyG3UQgsW9lI7fHghg8micAdwibv/sLvfE/gR4L3AVyiDuF0DaEMIIYQQE8ZKhoVB/4wjtd2+CHi2mW3v2pCZHQd8AXh58/nhwBWU16U7gZ8GPmdmR3dtQwghhBBi0qnVvH03Jafpy83s67QT0x9REeO3gT8AXtZ8PhP4E3c/ZaWAmb0NOBvQAE4IIYQQe9Br073UDt4ubX7uCj8EPNHdV17HP5CSbWE1vwc87y62s3WJxmJdjcY6ikWWo1arc/Ptq72VbzHVeKwtk+lAFkOZfFf7x876GPM2Lmb7EQ9S0lYs01270/841pyjXLuT7X//WFXeWxMjqBnezg5TT1ajXYxxsuso18H1NvyckV1XrfYrNV+x3mJSZqrVx/4Hreq4JtsyrVDrOZpZuFU8Drvq2fq1tV6fJoFhrA5d7o3nI61q8Oburx9AW9dQVpN+pfl8JWDAv60q8yPAjQNoSwghhBBiIqm2CjGzxwOvAB4EzANfBM5297+pDPHbwLvN7HDgr4DXAO9tdHRXAg8F3tSUE0IIIYTYw1B82SZ55s3Mfhn4S+B9wJ9SZpOPAS4ws5NqBnDu/kdmNg+8Dngt5Xj1KKtNlymrTd/m7m/Z/G4IIYQQQgwXM5sG3gg8A7g7cCElD/wNferdD/g8YO5+7artBwG/Q0liMEMZZ73Y3e/YKF7tzNtrgFe7+2+t2vYOMzsN+E2gavbN3f8U+FMzM0q6rHtQZvGuA65w950b1RdCCCHE/kmPLZER4XXA04GTgZuBc4H3A49Yr4KZHQF8hOJtG3k38BDgRGAW+ONm21M36kTt4O0BlNFg5P2UWbRN4e5OSZc1UqIYe+RGsi0n265xBnP1jjoxfRTR7utk3VuRYR5/sf+S3et5svr+C3aGyaCeCVtNsK9H3WDo9Xr0Bj1620Q8M9tGWWj5Qnf/WLPtScBVZna0u38qqXMq8Abgv5Lv7g08Bfhf7n55s+3ZwMVm9nJ3v269vtQOH66hLCaI/ChwU2UMIYQQQohx5cGUV6WXrGxw96uBqylSsozHAc8BXpp891OUv9k/uWrbJykLrdedyYP6mbc/At5lZgcDKyPLR1De+767MoYQQgghRCeGkhFhc/EOa37HGbHrgftkFdz9MQBm9qh14t3o7vOryi+Y2Y3rxVuhdvB2TtPI71MWK/SA3cBbgUHYiAghhBBCbGUOApZWD7Ya5oADOsbL0oL2jbfu4M3MzgJ+y92/BdwbeBFlccIDm8b+y92Vi3QzTIigqatWMOpZemOQvH6QZquj1Pjt6wTv2aU+yhSCNfrK7BhNdzhHwzXkHVCZjvVGzVbrU4X/b12cym2DYosdxoExLKuQhsPKWso13Orut676vBOYMrMZd19YtX07sKND6zubupG+8Taaeft1yiqKbwFXAfdy928C/9Khg0IIIYQQ3RlShoWGjydfv56yunSFa5rfh6z6N8ChtF+l1nAN8H1mNu3uiwBmNgN8X794Gw3ergL+1sz+jTI2/V0zS6083P1ZHTothBBCCLEVOAa4Nmy7NXz+HHA78EjgPIAm8cDhwGUd2vwkZRz2cOATzbZHUF5UfHK9SrDx4O2pwCspr0yXKSPL3R06J4QQQghxlxjGa9NV8a5tVo6ui7vPmdm5wNlmdhMlnee5wKXufnljJXIwcIu79x0vuft1ZvZXwHvM7FmUibI/BP58I5sQ2GDw5u6fBZ4IYGZXAU9w95v7dWarkCUdr2FgF0ZqojTKDow0dNvCrqOeLSaCrvOi6lamhq46tX3tpinwBAAAIABJREFUYZdpt0apgxulvi1tv+L4d9G31bZVo92qqZfuR0WZlqdlRw1mdh/VJpnvFyfL1r6v75tREnd1UnVqE8irKWa65zW/LwROab47GrgYOI5VdiJ9eDbwDuDDwALw15Q1BhtSm5j+vpWdEEIIIYQYOFO9IQzwNxmvWajwUhLfNne/ZL2I633XpMF6ZvNTTXVieiGEEEKIfcUw0mON62Tvvn67IYQQQgghNsHEzrxNJxqLdm7TymCxXm2iQLGGYfq6xcNfoznKrpEubdUSNVaZDiheWjV+abXarVhu1F5wNeeoy3ncikzKfmR0uf677n/UwNayvz+OJ3X3h7xgYazoNHgzs1lKXlN399sH2yUhhBBCiLX0pnr0BjwyH3S8UVE1eDOz/wG8B3gV8HmKH8lRwLfM7Hh3/9fhdVEIIYQQQqxQq3n7HWAb8A3gKcD9gYcBFwBnD6drQgghhBCFldemg/4ZR2pfmx4HPMLdv2ZmJwIfdvd/MbNvAf82vO4NlknSnXRhUHn6MqI2K/urYDn4OmUauMUYt9Kfqsu5zbwAZyp0cLGt2j5GjdmYztYPlUm5RydlP7YiNR6OOv5i0qmdeesBO8xsGng08LFm+4HA3DA6JoQQQgixh2HMuo3pH9G1M2+XA68AbgIOAv4/M7s38GbgU0PqmxBCCCEEoNWmq6mdeft14CGUFBAvcfdvAqcBDwReMqS+CSGEEEKIwGY0bz/j7jes2vY64FR3H1t1QbUuImqcEvOtqZpgsV5m4hWFaVmZpK3lUC/qy7qGznYrz2243LfMUujAVDJfHctkXmRTHfPWtvcty9vYJU6n7uTHsVdxHMPnrn5t9ec20NWvr+L6GxgDeyrVXGtd83/2r5edo3i+8/MYPiet15z/bD/mK05c+x6pu2djvaiBhfb9v1RxsmuutfQ+ruh2Vq3m8qsqU1Goa/vjyDDSY3X872SfUzt4O5OSbHXP4M3dbxlKj4QQQgghxLrUvjb9LPDTw+yIEEIIIcR6rOQ2HejPvt6pjtTOvN0I/K6ZvQr4CrBz9ZfufvygOyaEEEIIsUJvqvwMOuY4Ujt42wn82TA7IoQQQggh+lM1eHP3Zw67I1uFKiPbVCE6IIloVNZmcdMFC8PpTkaNQLpmLrq70L+9rSYReJc1JV2VvzV9zBcabH4Sf5hGxoNkqAsU+rSV/XFde9z6trUFFc+jPNeDvI9rynRZfJCdoxqz34xJXQwwDsgqZC/VienN7KHAy4AHAfPAF4C3u/s/D6lvQgghhBAiUJuY/tHAhcC/Ah8CpoGfAj5hZj/t7pdWxjkSOBU4BrgPcACwA7gOuIwyGPTN7oQQQgghJpter0dvwFNlg443Kmpn3t4MnOvuL1q90czeCryRMhjbEDM7AfgAJSPDBcD1lNRa24FDKV5yV5jZie5+cfUeCCGEEGLyGUYi+fEcu1UP3n4UODnZ/m7guZUxzgTOcvfT1/n+DDM7AzgHOKoy5rpkScc760BixVRQFD4nIptehTCtVSbrdFKvFToRhiyHWLmR7uYNMEUbJZ1vE2+JYWrgahaQDeoc1SVKH+0FUaMBzev1F69OD1HPOkrahsTtTu/r+7hmoDJMfbPYutQukv0G8APJ9h8A7qiMcQRwXp8y51NSbgkhhBBC7GHgHm/DmMkbEbUzbxcA7zKz51Fee/YomrffB/66MoYDT6DMwK3Hk4EvV8YTQgghxH6CVpvupXbw9nrgh4CPsXeldA/4S+DllTFOAz5oZscDl1AWKeyiaN4OAR5F0c49vjKeEEIIIcR+R63P207g55rVog+iDLq+4O5fqW3I3S8ys4cALwROAg4DDgLuBK4BPgG82N2v3NwudCfToURdWNnYxcQsbXDjz+ttq2AptBcT1Zdt/ZNOV3Uxa7+Lh1pFnK7amcxDLSa5zpN+h2OS6JlaybNTPdO+FaJ09dCqS3K/dn8zzVeq8er111zGWJ21YjUeXiNNXt9mmDq47t5r/fsUr5F9rW/L7r/2dTw5wrCOsuiJYIrB6xDHNMFCvc9bwyHNzxxwCyVVVhVmdjTwaXf/1VXbHgi8gGIb8k2Ktk4IIYQQQqxDrc/bvYCPAj9CGWRNAd9tZpcCv+zuN1WE+Thl4HdjE/OhlNenXwG+CDwReL6ZHevuX9zkfgghhBBigpnqDWHmbUw1b7Uzhn8A3Arc192/392/FzgSuBvwzsoY8RC9mbLY4X+6+0lNvA8Db62MJ4QQQoj9hF5vmakB//Q6pknb19S+Nv3fwE+6+1dXNri7m9kpwD92bPtBwCvdfbmJt2RmbwEu7xhvDbmcrP8Qu5cNw4e0HKWX5SitKVMhHstco+Om3J8q6pn6tzVJTIdjUvPXTayzHvFYZse2xkMr0lVz1LX9Gl+zUZapofav1HhMuh6PmmdN3b7191lbSppqndvKPK7D8nnL9nUqeUbV3CPt/oznf741t3r6hI7HqLKemCxqB283AN+VbN9OmZGrYZm119TVTf3V3I2SLksIIYQQYg96bbqXdQdvZnboqo9vA95jZs8H/omycO/HKBkWfrOyrR5wpZl9EfgP4FvAmWb2aHefN7MHU17BfmzzuyGEEEIIsX+w0czbtaydKetRFi3EbX8C/FlFWw8KP/cHfpAy+zYPXApcRb1vnBBCCCH2E6YYvLXHJFqFHDfIhpoVpF8E/mplm5kd4O67VrX3OXePdlwDo+XzlZSp8nmrMSzLjHZi7EyYUFGmlf80aW4p08oNyuetSk/YLrQQxDmZDmahIt9gRhdfs6zOfKuP7TIzFXHSqfhQME2R22EKfyG5HtPYAxLCZFqlGqJWKvOUq9FT1XjRtXRhSZlcq7bx54yuxyP3BwztJ9vmw8bs/Md+zydtZfXiPZrfIxu3lZG3n2xr5WTNHoCxP+04M+Hcxj6nfUxvvuQ5Gm6u5aRMzXVUczvWPP4GaBe65VlZZDDomOPIuoM3d7902I2vGrjh7lcMuz0hhBBCiHGn1uftQOClwI8DBxL+9nH34wffNSGEEEKIQm8ICxYmPbfpu4BfBi4Crh9ed4QQQggh2kjztpfawdsvAL/o7h8ZZmeEEEIIIcTG1A7e5oEvDbMj+4LahL7RKHc5U1V3yRZckxm8fsVA2NDuY03zbaFttqgh2RbltxXJ2nMj082XgfZUetdFFYMia7+LAe8g2x8HahYjjAN1Cx1q4vRfVJQtfIj6/JpHDbQXdWVl6hYH9V/4UEPt/d+ut/Fn6P76LR7brZgEfkzfBPZlK/i8mdk08EbgGcDdgQuBU9z9hnXK/zjwdoq92nXAG9z9z1Z9/72UzFInUE7dPwIvcfdrN+x3ZX//HDi1sqwQQgghxCTyOuDpwMnAscBhwPuzgs3A7KPAFcBRwO9SPHNXrxP4C+C+wPGUbFaHAn/brxMbmfRetOrjNuBYM/t54L8Jf6BpwYIQQgghhklvCLlINxPPzLZRJrJe6O4fa7Y9CbjKzI5290+FKs8Gvg2c6u5LwH+a2VHAy4CLzOzuwKOBn3f3zzbx3gx8yMy+291vXq8vG702vS58vqp6D4UQQgghBsgUQ3hturniD6a8Kr1kZYO7X21mVwPHAHHwdgxwWTNwW+ES4FwzmwJ2AXcATzezSylv5U+mTJJ9a6OObOTz9syqXdmidNWcTCXCpGjKmFasyRY8htT4EXeNNepDNCwzxq4Pk2Hm1BumSW8k0/J1MdKtZRx0cYM6tzUJ3bPE7FNB9ZT1Jzv+01V9Wvt5UPq+YTLI9uNzK7WaGNA1msXeihq7/YjDmt9xcut64D7rlP9sUvYg4GB3v8nMngH8ASVP/DIll/yxYcDXotbn7eR1vloGdlNSaV0+zOwIQgghhNh/6TH4P/o3Oa4/CFhy9/mwfQ44YJ3yu5KyrCr/QODfKVq6RcpiiL9tXsPevl5HalebvoYiqJuijA57wD3Z+/dFD/iSmR3v7l+rjCmEEEIIsRU4zMzitlvd/dZVn3cCU2Y24+4Lq7ZvB3YkMXc23xHKAuwws2OANwD3cffrAczsF4CvUlazvmO9ztYOYt9NGRn+iLsf7O7fBRwJfIYi3jsEcODsynhCCCGEENWs5DYd9E/Dxyna/tU/LwpduKb5fUjYfijtV6kr5bOyd1AWMvwk8PWVgRtAM1j8EnD/jY5F7czbi4EnuPsXVjXgZvZrwAfc/Z1m9hrg4sp4Qyd7WdzyR0oSES8lgppe2LacRV9cuy16w5V6Yay82D9OVRmgF7YtLLbH5QuLG3+Gtp5iIRGLLCSai92La8vNTCU6nNDtTIcyH+LMJXqemaxihQ5kLuzvbKrVWhso1QV11M/MBAFLnph984KWPKF2V/q3Hw//Ql6sRezmML3oag5JTUL5mnM9lSYm71+xRoM5t5jcf+E+ys5/TASfJaHP623cVha75jymSeizpPdhW5ZQfroX962/LjArU9Of7EKKz4gqv8ws9ICu/7TbFdffODJkn7djKBKw1dwaPn8OuB14JHAegJkdDhwOXJaE/wTwTDPrufvKqToO+KS7L5nZtcD3m9n3ufuNTbyDgB8E/nSjftcO3r6Dom2LLFJen9Ls0LbKeEIIIYQQW4Vr3f3qjQq4+5yZnQucbWY3ATcC5wKXuvvljZXIwcAt7r4beA/wcuBdZvY7FB+3p1AMeQH+DvgacIGZvYwyzjqD8rr1z9iA2temfw/8npn9j5UNZnZfimvwP5hZD3gW8PnKeEIIIYQQ1UwN6WeTvBo4nzLzdjFFn/ZLzXdHA19vftNkXTiBkl3hs8CvASe7+z82399B8Xn7JvARSnaFHnCMu9+2USdqZ96eD3wI+IqZ3UjZ3+8B/gV4AfBY4CXAiZXxhBBCCCHGimahwkubn/jdJYQFrO5+OfATG8T7KvDEzfajavDm7jea2U8Aj6KMIBeAzzcdxcx2AfcOqzL2KVm+v6i7yDQOmcQsCj96yVg96uIyQUMvKB9adaAlhOoloo/linrLyX5EPVvmF7Tc0nNkOVL75zatycmYakWm125cyLQbHcUiS1FymJSZqsh/Gq+t+ryJawtmN18XrUp2Hdf8NZmaCFWIxWYTPWMNw9K4Zfd61A529r2rOJBZ+3X0r5f1MWrVsjJtXVxd7PiMjPq2LHZGK7dpUibTHC+0dJH9T1JN/tWac5Q+j5L7P25J01j3bU10oTcEzVuF9HVLUjvzRiO2u5hkUcJGKRyEEEIIIe4qYXXowGKOIxvlNt1NmU37ppnNs8EfE+6uhQpCCCGEECNgo5m35wC3rfr3eA5PhRBCCDH2DNkqZKzYKLfpn67693tH0psBkusXKspk4oyW+VmF91omRIq6i9TEKCixMt+5pP3lEGsxqbcYDLmWMi+6uBuJ5md30u3ZqF/JfN7CpuymiZqbmezG6pgfZS70ezYTvQXN3XSq+en6d0x/PV2XXcv0PF3z1GWeZZGouarVk3V5SHbXyQ3GU69G3zXIh3+VLjR6oVXpS/t7ukH7OOXt99ez9evPevXitswfLr7mysrEc1tzHrNrJLWU7HBN1tTpes/sT7lOO64O7RtzHKnWvJnZscArKXm4HgU8E/iyu//5cLomhBBCCCEiVYNOM3sscCEl1cO9gGnKtMEfm9kzh9c9IYQQQgjoDSE1Vm9MFyzUzhi+DniZuz+XJhuOu7+e4nPysuF0TQghhBBCRGoHbz9MmXmL/B0lB5cQQgghxNBYWbAw6J9xpFbzdhNlkPaVsP3HgRsG2qMBUSN0zg1oK5S1mUlpWKAQE8VDXWL6XkwoP59IzxP1bS+a69asqUgyisfdn5pu72tmnBvNLFOhcfycLVgIx7Y2WfSgpr5b183gPIK7CfZrygxw1r8qx31H8fWg6BI7O/Y1xq01HlDD3NetSOuY1BjgDrD99nN765+AzAi29axNymRHtvWIqik0IUwxhNWmgw03Mmr7/QeU3KaPpVxP9zOzZwHvBN47pL4JIYQQQohA7czbbwH3BP4G2A58FJgH3gqcURPAzI4ETgWOAe4DHADsAK4DLgPe7u6+mc4LIYQQYv9AViF7qc1tugycZmZnAEcCu4H/cvedNfXN7ATgA8CngAuA64E5ykDwUOA44AozO9HdW+m3hBBCCCFEodrnDcDddwCf6dDOmcBZ7n76Ot+f0QwMzwGO6hC/RY25ZUaW0L2lX0s0HlFzljkntsoMkiEJb1IJYMW2TOPSutg6nqMallPj0rXBU1POUG+Qee/a+5aJXMZPrNL1nI1SK9bVALWmj+MgeM6u46lELDUdvbYHqPkcFPs6F2WXRObDfPTvTya9JTH9YHd44hLT98tnuopld9/ep8wRwHl9ypyPbEeEEEIIkaD0WHvpl9t0vcHbAcBvUFag/nNFOw48gTIDtx5PBr5cEUsIIYQQYr9lo9ym7822m9lPAn8MHEIZwL2top3TgA+a2fHAJZRFCrsomrdDgEcCxwKPr++6EEIIIfYXtGBhL5vJbXoA8Gbg1ykLD37O3f+7pq67X2RmD6GsNj0JOAw4CNgJfA34JPASd79yc91fn5g8G9o6qFrvoeXp/qd3Obw47yUv0ltlKtsfFplWoqt+Ih7bcUg5EvU9UKen6DrNHutlidFrHiQt28EBXkg17Q9q/wfFIHVp8ZzU1Bv18WhdR8kLkqhny/Sd01Wx27Qfre3gmYdmq62+JeoY1HU1TC3fIL3YYqgsdm9Sjd7EHqoGb2b2SOCPKHlNX+zu/397bx4nWVXe/7+r11kYRFQUMioa5fm6fMOiCYk4gIlB4jcx0ZhviAuiQYhLQKPGfcUtRImKIcaIQYPRKP5iYr4GNxgWCS4BcQvPC5FhX5QdZqbX+v1xbs9Un/t01+ma6uqqns97Xv3qqXPPPee5t27dPnXu53yejy61I3f/CXBi0PbfAW91918stU0hhBBC7B5I87aTRQdvZrYe+ABwAvBN4Onufu1SOzGzw4PiJulLxLHABWZ2E4C7X7jU9oUQQgixylmORPID8JQoYrHVpkeRMivsCZzg7mfuQj/fZOcseTTO/efqd5N4pl4IIYQQQrD4zNtcIvrbSQa9r1+oorsf0KafTcA/kfRtJwF3VeUN4ErgGcCWgniLifQLeZ7MKP/mbJAUtBHlF83r5F5wgcikkamVGkGdZtZOYypQ5gVl+X6zQcgzWS7TKP9pMztxszP1cxSdt+lMLJf7pQFM5h5S9e4Zy/YL0riGuWWj/nLyayI6tfl3i2hKfapAHBPp6fJjmQ3EKp1M4YfnqFMKAsg1VtH7WPK2hXUK2iki76vQ5y3XapW8H5F2saSvEqL8q/mxlNSJNGjRXa3WdkGdqO38fQt9F4O2c8I7b65dDoS6+a215FqLKM5/3QEFaZRFhh6b7mSxwdu76FJ6W3e/1MwOJK1M/U/gT9396wBm1gRudvcbu9GXEEIIIVYfWm26k8WsQt4x938zewRwg7vPVq83kgZc7aekdra3FTjRzJ4JnGVm/4ZMeYUQQgghlsSCg04ze4mZPd7MGsA1wINaNv8EeGQnHbr7V4ADgX2AHwCjnbQjhBBCiN2HoUZzWX4GkcUem/4RcCowVr1+l5ldCnyfNOjr+IgrW5DnmtmLgBeR/N66SvQcOx+pRm9a6MfTidlTZKyUUSDTCvvO/eJKqaVfDYRAeZ3SHLG1spKciAV1Iq1KiX4p3m/pWpkSXVRM724Inebt7Fr/K9xWpPnKV5CFurwenrdu5n/t5vnuBp3G02n+6Zzo8U/+h63kGintOz/eaL+8v+hek+/X6bUX9R9pDMXqYrHHpr8DYGaPJaW3Ang+aUC3FjjHzC4E/svdP99J5+7+KeBTnewrhBBCiN2HxjIsWBjUxPSLPTZtALj7VVXR2939KHd/KLCVlCJrAvizZY9SCCGEELs1Q+xccdq1n5U+qA5Z7LHpPWb2PVLi+SbwCOC2lu3/6e4/W87ghBBCCCHEfBYbvD0R+DXgUJI6aXNl6/EjUkL5PzCz/+fuvkgbfcVwZjQ1EskgojnUTuZplzNxX9R2Hne0W7ZfIxZ0te0+YrlOUelpLNGhdKLNWc58h7sb/abVWi2s9DVa6vNX1FYH95HI1T33WSzJI7zSfl+dajDDKgMqwm/HMN138R/UrAAL/m1092vd/Qvu/lrSzNtjSKtE/5r02XwO8F9mdntPIhVCCCGEEGWJ6UmZEaaqx6Q/M7OfAn/i7tebmS1feEIIIYQQO61Cut3mIFI0eHP3R2Wvn9jy/4F5bCqEEEKIwUSrTXcyqAsthBBCCCF2S0ofm64KOh2x56a4jS4lJg4NeEcy+eRwIP0dDsbcI/PL8sUJAI18wUKBIXGn6zeibwWdeB2X1qn116VvU2Ff2TR7lIS+pK247cLAdnGflaBrSeczSsToESt93grWC8XXSAfmruGjoQEwcu2lmLzksw71ayu8R2a79f+ZHgyUmH4nu9XgTQghhBCiU8xsGHg3cBywATgXeIW737pA/ScDHwYOBm4ETnH3T7dsbwBvIHnmPhj4b+Akd//+YnHosakQQggh+p7hxvL8LJF3kNJ6HgscDmwEvhhVNLOHAF8FLgMOAT4CnGlmR7VUexvweuDkqs6NwFfMbMNiQWjwJoQQQoi+Z27BQjd/lrJgwczGSIOsN7n71939MuAY4DAze0qwy/HA3cDJ7n6lu58OnA28tmpvD+Avgb9w9y9VC0BPJGWvOmSxWFbtY9OpKFnwbPt3qVmgZ2sGQ/WaLq5ELBbWoaBO+/4jWVxeFuni8sMfCkQnI7mgAxgdam/uO9Job5Kc1xkL+orabuSJyAM9T63/4PhHs7L4WNvHE1E7R2W7tScIINKB5UTJukcL9ivR7i1n0vcSU9q8r5LzEe3XLZ1mRMk3/khzle83FIgHZ/P3NqgzGr1v2TUa1qndk9rr6WaD4xgJ7m1149z2n//oM5p/tqN7Tf0aCerUi0r80Gv3o+g2nt9aoyu00+tvMM0vBoKDSI9KN88VuPsWM9sCbAIuyepvAi5099ZP4GbgDDMbAp4KrAHOaWnvHmCew0fEqh28CSGEEGL10Ac+bxur3zdm5TcBD1+g/uVB3XXA3sABwM+BQ83sFNKg7XLSTNxPFo17KVELIYQQQqwEXU9Kv/TVq+uAWXefysonSDNoUf3tQV2q+nuSZvJOB94D/C5wP3BhpZdbEM28CSGEEGJ3Z2OQMOoud7+r5fU2YMjMRtx9uqV8nDToytlWbSOrS1V/ijTAe5m7nw9gZs8HrgdeCJy2ULCrdvA2Hejbcq3MdOlsaSfzk5F2LtedBHUaM822dUpEP5HmLi+KdHE1zVvwtWQsENnk2rRY85a1HUxXj2UxjQ6XeXjlbUWnaDzbcTxoO9f4RHqatcF+9Xjal4X+ZB3op0Y6Nkxrr12M6JbmrdM6JZScx041Z7U6HcZT0n+k1ZrIPsjRNZozHQQ5NBOU1c5/oEubaf9Zy8siDfJ0cGz5Z2tt8Bcqf0/GA11u3k70Wc+PNdLXRp+HEq1cvld0jeR/okLtXEFZSf+rhWVOTH9RsPmdpNWlc1xf/d635f8A+1F/lDpXf9+sbD/gPtJChrl9fji30d23m9k1tNG96bGpEEIIIXZ3NpEGTK0/H8rqXAHcCxwxV2Bm+wP7AxcGbV4MHF55uc3xNOBb1SKGi6uyX21pbw3wy8DViwW7amfehBBCCLF6aND9jAgtzd3g7lsWq+vuE2Z2BvABM/sFcBtwBnCBu19aWYnsDdzh7pPAmSQrkI+Z2YeApwPPA46u2ttiZmcDf2dmxwM3AG8HZkiWIguimTchhBBC9D1zq027/bNE3gJ8hjS4Oh+4Fnhute0pwM3Vb6qsC0eTsitcDrwSONbdz2tp73iSVcjZJDPffYCnufsvFgti1c68TQU6oMlMZBDp4qYDHUiuQ8s91VKdrMNIUFdL7hia0bWvU+JFF9Zp/5WlRGMU6WDqZfWG6m9J0E62X+TNF3lGDWVthac2ex29/3lSwsgvLtLv5AwHx1+TzwRfIXPJYwnThZq3km+sUwVeiKWeae3671TP1klfEQWHylCBg2eRdi76PBTIYqP3I3+/wzq55iyoE90j889EVKeuZ2uvL46ONbpF5p/RqP/hRv5Zb39uO73WontdiaKsJP11XqfULDZvOupqOT9buzvVQoXXVD/5ts1kf9jc/VLg1xZpb4Jk2vvapcSxagdvQgghhFg9dJjOqm2bg4gemwohhBBCDBCaeRNCCCFE3zOX27TbbQ4iq3bwFumAJnNZWqBvm859kwGm5lcM85bmYqVcuwa1fH81TzegmQlBwjqBoCHX3EWai7yspM5s0FekVcnLcg1a1XpWp87kzPz9wtymgQ6llsoxiHEye7+nQn+s9tq90ayd0OcsytuYxxgE2clUeKQ5inRpJTqYshtCZ3e7/FJeeZ+39o1H+W87IcojW/K4Jjr+XL8W6jvz3KKhF1ugucxeR/fRfL8Sn7eor2aolVv6G16iHYzOf4k3ZEl/0W55WSRLrWnXgoZKFHeRTraD0zgQdJARoajNQUSPTYUQQgghBohVO/MmhBBCiNWDZt520tPBm5k9CHgpycn44aTErPeTUkRcAJzp7nf0MiYhhBBCiEGiZ4M3M3sy8DXgDlIaicuBCVKS1v2AE4HXmdlvu/sVvYpLCCGEEP3PcKPZsc/kYm0OIr2ceTud5CJ8orvXzlaV++vjwEdJM3O7RCTins7KpgO31amgbHgiWNmQ0diarXSI1K+5iH2q3m4t6lxlDzSCsmbmZjkzWe9/Mpsfngzq5MwEc8qTQbbsiaxelFA7zygcrReYzgojI93IEbvE/zjPTR2a9NbkwGXmprV4ghhzgfpIwXx9SdL30AA1iLtkMcBMgQp2WW92+bqf0CS1PXmM0WGVnKMS0+SS8xEvagnKCsx184VX0TnKbxHRcUwUmPRGCw3yW2T0OcqbLjVVcf90AAAgAElEQVTpzeuFCyby22jQ/1jtMxLc6/NjjZYelCzqKlowEiz8yo6t01WPkZH5aqVB94X6g3r2erlg4UDgg9HADaAq/yBwSA9jEkIIIYQYKHo583Yd8FTAF6nzm6S8YEIIIYQQO9CChZ30cvB2CnCmmR0GbCYtUthO0rztCxwBvAg4oYcxCSGEEGIAGGIZBm/dba5n9Gzw5u6fMbNbSclX/xZYX21qklacXgI8y92/2o3+Iq1Ers2ITHpDcUiJ8CXrsBEE0Myuutikt6CdQHSV6+AiXdxUJrqanGr/KYgS3EfajK2N+R+B6AM2lolDQu1a1njUTqSn68TcNWpnpEBzk/dVchxQk/yF2rmorXbEusDO2i45byXJ2ktY3sT0nekJ87IiPVuBaqakLwg0XwUmvdE1mtcJpLzhdZPfkkr2iySguQ4r1LwF/ee65PgaWfp1XGYI3V67l8ram/vmt83QSLfNPlCmxyqQ4IpVSE+tQtz9G2b2XeAeYC9gA/AC0mrTHwMX9TIeIYQQQgwGQ8uw2rSTL8z9QM9mDM1s32rgdgdplu2XgO8ArwZ+FXgfcLmZ7durmIQQQgghBo1ePu49jfR49NnAnSTd27eBR7j7ocAjgS3A3/QwJiGEEEIMAHMLFrr9M4j08rHp0cDh7v5DM7uMtPr0FHffBuDud5vZG4Dzu9FZpF/I9SNh8t6SjL5hRvc2r4FGLaNxgb4uaifSys3k5k+BEiLbLzyMvJlgeB/tl+sHI8lR7UMS+VNlOpiRQJc4G8RUonnLk4yX+LVFZnT5fsOFGrA8xpHI6C47J7lOLmKi1AuvIM6S/kpudsuZdL6EkhhLHpeMdujFV1InevyT+4NFeraJmfa6sFyrFvq1hUnn57+OdGk1f7SCxPClPm+5Vm6i4Dre1t6Gk9ngwh6qfY7LLsiRrP/cvxEgtwZtBJ+9/BYdfTyLNG8F53+1oNWmO+nlzNss1VDE3W8A/o202rSVkaBMCCGEEEJU9HLm7TzgNDM73t2vc/dnt240s0OAvwe+0sOYhBBCCDEAaOZtJ72ceXsVsA/w/nyDmf0x8D3SKtTX9jAmIYQQQoiBopc+bzcCB5nZQ4PN5wOHAt9bKH3WUome+ecj1WK7qtrQPBSwzH8d6DBqPm/RkRZ01czFW1AXdA0HdbIYh6Khe1Y2EmlForJ8vyjEDrRBkS4s9nnLvJeCEzeS1RmO2s7KRoO+RrNjK11qnh9b1HYnROeoU+1aybFEGp+cEmvEMu1cZycpP46SmNN+i7+OGI20iyV9hf1n13Fwk8r7C891ph2bCd7X6NzmbYW6zIxIu5Zff2H+zei6zcrGC6YXxoN2xrNExiU+e6UzMPXPf71OdP/rFrVLItKXLl/3K8pQo/yzvJQ2B5Ge+rwBuPutQdltwG29jkUIIYQQg0F6bNptn7euNtczVusAXQghhBBiVdLzmTchhBBCiKUyRPdnnAZ1Bmu3Grzl2ozpIHFf5KFWM9IJk9B1MPda4hdXul8BuS6tJORGMKdc4uEW+4wV6FDah7RA2x3UCdsuaaf9cUSU6dA6eG8D7VI/PgqoyUJXOCtNp+dopc9t3n+n5zE6jm69J808R2lQJ9TcZRWnAj1b7fiXGlwPyK/1yEMu0jPmhPfa7HWHstCBRKtNdzKog04hhBBCiN2S3WrmTQghhBCDyRDLsNq0u831jEGNWwghhBBit2TVzrxNzdSH5xNZos6p6fp+je31wlpZ9JA8T0IYJJyr7VWSgC70cCrQyhUkjixK4xq0k+tZoK5VifJo5prDyEJqOissyVEbtRX6/OU+a1EAed7IyK8uE9l06iHWaZ2cKP/k5DL232lu007o3Odt8dcLkesSy3zeytrOidrOz1ueRxSivKX1dvJrItKyRXlTp7Lznecahvq9Nfqs5f3Hdepl+TkZjvL2Zq8ng3v9tux16IWY7TZReJFMZCd8bXBua7lNA9/JEn1hdI/OT0mHEuiBZKjRXAarkME8gat28CaEEEKI1YMWLOxEj02FEEIIIQYIzbwJIYQQou9pLMPMWycuX/2AZt6EEEIIIQaIVTvzFgltt2fC1kapUDFXhJYsNFhGorCb+YqBQMU620HcoY9w0E7tFBWc2iicmrlndBxR29nbHYn4p7MTF4nB85UPs0Gd0Q5dQYtMijv4GhgJtktMiiNK+u9WYvoSOl34kB9HFHO47qhWp/15nA3Ofwkl70fgIx6+37X92q+fCheD5PXC/drsE1Haf74YKb+tAczWPsf1OrXE8AWf9WghVER+35gKDi6vEy2Y2Dbd2WctaitnUHVc7VCGhZ2s2sGbEEIIIVYPjUb3H3MO6mNTDd6EEEIIIQows2Hg3cBxwAbgXOAV7n7rAvWfDHwYOBi4ETjF3T+9QN3nAl8AHuXuWxaLY1BnDIUQQgixG9FYpp8l8g7gRcCxwOHARuCLUUUzewjwVeAy4BDgI8CZZnZUUHdf4GOlQazambfJQAeR6+CmI7HEVCBoqrnL1qs0csfJTh0Y87JSB8bh9lnnh4fbVqk1MxSILoaCDOt50vtONRe5DjHWhbVvp1PjxXpC7Xo7HSfCrml8uiMMC+MJzW2XrpWJtEolCeaj/UraLqFbBsBlFJzHTh+7RB7R2etIu5mf71hP1r77kus4MuSu9xVo5wriiZPVt9+vW+mR8naimYzllDeXHEeR5nIwPWYHEjMbA04GTnL3r1dlxwDXmNlT3P2SbJfjgbuBk919FrjSzA4BXgt8Lav7SeCHwJElsWjmTQghhBB9z5zmrds/S+Ag0qPSzXMF1ePNLcCmoP4m4MJq4DbHZuAwM9sx/jKzlwP7AqeUBrJqZ96EEEIIsXrog9WmG6vfN2blNwEPX6D+5UHddcDewC/M7ADgPcARwJ6lgWjmTQghhBCiPeuAWXefysongDUL1N8e1AVYY2YjwD8Bp7r7D5YSyKqdeSvxMArlZIEOLtezNSOxQok2rTY/GySvrwla2jeb6uW6vHqMefcl2rFoSrkRFOZtRV5EIwV6trFsv/x12q+9DiTSCo1lX1WixPQjtXNUrzPaoZ6u02Tp7Yji6VQrmF/aJf5oy+kp1bnPW0md9o2PFrVTEFBh//kNOZCXFvUXXf+1voo8FOs3oFw7HH2OZvL+g2mCSJecf97Xj9Yr5e/JnqP1/teOzC8bH67Xye8HewTtRHrOvcbmx7Q2eJPyc1JyrymwrwS6p/kbSBrNcn/WJbRZsdHM8q13uftdLa+3AUNmNuLurbaQ48D9Qevbqm1kdanqv5n0ITt1qWFr5k0IIYQQfc8yrza9CLgm+3lVFsL11e99s/L9qD9Knasf1b2PtJDhONIq1LvN7D52LmL4sZm9KTwJFRq8CSGEEGJ3ZxPwqOznQ1mdK4B7Sfo0AMxsf2B/4MKgzYuBw82sdb70acC3qkUMRwJPIC2EOAh4cVXnmbSxDVm1j02FEEIIsXpY5gwLN7QzxnX3CTM7A/iAmf0CuA04A7jA3S+trET2Bu5w90ngTOAvgY+Z2YeApwPPA46u2ru2tX0ze1j132vd/Y7FYlm1g7dIKjaVJS6cnKzXaUwG7kdZWaT5qmnlogssF1BEOrma5i1K7lfgDxfUKck/mk/FhiEGSQCHMyFG7OtUUCfTKk4HAQwFJzeXlES5bXON0VhQJ5dKRm91LW9iKVmMsZ5p6XqOifBY6/Wi/nJyrWL0HpUcf4nPWwnd0rxFOqFIF5vvN1XijbeUwFpjKvBQi3KblujZ8ttRmMe1QE8b+swV9F/i8xblEh0r2K/DVLI1hmsa3FLVWVYj2K+RvbfR+c/vLVFP0bXVqYel6BpvAUaBs6vf5wKvqLY9BTifNLu22d1vNbOjSea8lwPXAse6+3m7GsSqHbwJIYQQYvWQadS61uZSqBYqvKb6ybdtzpt090uBXyts++LSkDR4E0IIIUTfM0T3V7cPqvC/p4M3M3sQ8FKSMPDhJF+U+0mrNC4Azmz3nFcIIYQQYnemZ4M3M3syaRnsHaRVGZeTzOrGSUtnTwReZ2a/7e5X7Gp/kVYi1xgMB0cf5vvrxNgqEkvlQ/yosxK/uJJkhkE7Nc1boHnJ85Y2Q9HR8hkN1bUyUV/Rm7vrfUFn38JKdVn5ZVOek3Tl6NzDrLtxLAfdOrYSLWHH/S+n5i/UAc5/Hfk15lq1KP9p7XMUaUcjXWbW33jwgcxjijzc1g4X1Mnu/1Ff0RtQ94us79XI9ouOtSbUDYjetwH4aC0b/fDYtF/o5czb6cA5wInuXrtqq6W0Hwc+SpwjTAghhBBit6eXj3sPBD4YDdwAqvIPkgzrhBBCCCF20AeJ6fuGXg7ergOe2qbObwI39yAWIYQQQgwYy5RdYeDo5WPTU4AzzewwYDNpkcJ2kuZtX5Jj8YuAE3oYkxBCCCHEQNGzwZu7f8bMbgVeC/wtsL5l8/3AJcCz3P2r3ehv63R9UnEmM8CN1gY0gsT0JUnfy+q02ScictIMynJz4cZEXQ4/m2WCnp4KTGpzc8lgbjZf1ADQyM1dI+PYrK3oFI0UqLhDk97MuDIy6Z1uzg9gNjIArhl3Rial7d+3ThdDLKeRbVFi+gIRdX4ckWlobIC7dPV9vGClPSV9lZyP0YJnKlFfJW2X3EYiA+YSc938vJW+RznbAkfc7QUuuflxRH1FJr2ztaurfrD5goG10wVmy0H/M9nnP0pCHy0YyBdMDAfno+a1XuDHHhEuWNiNTXq1YGEnvbY4+W+SK/GbgMNIdiEPdvcN7v4M4KJ2yViFEEIIIXZnemkV8gTgG8AG0mB3nLSA4fUt1TaQHq++t1dxCSGEEKL/GWosg0nvgE699XLm7YMkf7e9gQcArwdeZWZn9TAGIYQQQgwg3V6sMMiLFnq5YOFQ4DfcfS4d/AfN7CrgHDO7y91f1c3OJgIdwtTU/Ncz07UqMblWbrzediPP1h04NzazIX4jcsnN2xkO2lk/GpTNT+ncXFevM5y5UI6O1Y8j7y7SvI0Emrc8MX1UJzL8rNVp5K/L9EQ1pUxBnUgHlJ/+6NtNkS4s0NiUaFXyYytJ8F4qgSn5hhmd73btxNqtznRgJe2UUGKk26kursQAt+R9jD4PdW1Yvc5wwZ+bmWy/0VDz1raZkJJv/HV5b2T2Wz+OdZmZ7prAXHc8O2+5IS/UTXlznRzA2pHcELjsms1v7eH9ILsBhZrDTpPet91rcO0vRDm9nHnbxvxFCrj7v5NWl54krZsQQgghFqLRaC7LzyDSy8Hb14GPmNkBrYXufhbwVpLW7d09jEcIIYQQA4Iem+6kl4O315HO0/+Y2e+0bnD39wBvBI7rYTxCCCGEEANHL33ebqsMeg8kZVvIt59qZucCf9yN/rZG/kTb50+PTt9fF72N3D1RK2vcO7+sERktbc/aatQ1Z3my4tjoJ2s7F2EtRAcClhI5UVQn6mo2K5wJRReZLq5AO1aamD5/RyIPqVyHMhIJ4woygcf7tSfXwUV6mhLvp9ksxpnSeArO93TB99CRrP9OtVMler5O264RvtWdebiVxFTyPobCzIK+cgfHSM8XlZWQt11gKVdEqB2MfDaz8z1aoCcsIbxn5V5s0Y7BfrkVaOwFOf/1aBB02bUd6JILHvN1KBXte5YjndWg6gN7uWBhLn/p9xfZ/gPgB72LSAghhBBisOjp4E0IIYQQohMadF/rNaATbxq8CSGEEKL/0WPTnazawVuoJ8olbtvr+T8buXaNer7T5miQWzQTGRRJDkJhQhZ4kXime9RStAZ1orDzssjCrk6U7zDTvAR7leRkzHO0Asw2cq1WZzqU3LOqNI9n1/RcWX/FuqQCjVV+KNEy+lwXF10jYW7XonPbvp0S8r5C7VrJTbugUic5WxdqejornAqazuuU5C2NvfjaX7dTgXY4yhtca7vWV9R/vSzXk04FN5tc45mfD4hum/V2ci/QEg1mVBZ5I+aa2+gSCdJP14gkz7PZaGNAxx5iF1m1gzchhBBCrB6Ww9pjUAe/vU5ML4QQQgghdgHNvAkhhBCi75HmbSerdvA2GWg1ZjLznca2qVqdUIhwf1YvEkLk+40EiVMzIUZjst5Xc6y9Q1Mj0OoxOj/Gxtb6sc1mSRgnghytUU7SWjuh5i3TYQQij1re1KCv2eb8StMjkXasvcZne/D+575yU0FOxDxPYfRWl2h+wryptZyg3dEzRjkiI0qm2esxReexqLuuUKpDqtUpaLvk/OfvWdxOvaxEzxjlxMz1XNG1luvJomPNNVedxrh1ut76ZM3nrH3bJTrV1Pb8xkNdXNZUlJM0J/Jiy/Ofjhea4+VauW2BLjmPO0h1XfOLi4jObdnxtm97ENFj053osakQQgghxACxamfehBBCCLF6GGp0f1ZxUGcpNfMmhBBCCDFAaOZNCCGEEAPBgE6UdZ3davCWJwvOzXeBQjV0UCdX448G6tdcIB+53eZq8OF6X82x+oRpM19pEKjKm8s4P5wfSrSCJxfxNgoEu3Gy6JIFA/Wy+oKB9nXittsvauh0vxIReW2/SNRfFtLS+9rNKDIJ7nDdSWgk3Un/AZ3exup1ooU3BQbAeUG0yCjobywT40efx3yhR7QYIF+MEAr/h9v3FZHvNxosIKibJLc3ZI9ijNqOjjenW4uh+o0GzXAx3K62OYjosakQQgghxACxW828CSGEEGIwkVXITjR4E0IIIUTfI5PenazawdtkkNG5WZAtuRk4Ndbe3BJhUqRny/eLks7nmdiDKo1ov6y/MMLsQHKZXqrSmZ6s5AMwkl1tw4Geb01myruuwEg3Yk1gbprvtyZoJzfyjViXxViamD3X80Tkl0iJLqmk3VK6ZYDbrf470gASm0SX7Fer075Kx/qiqP88yXqkwyq5RjqpE9WLDYCXrvksTUy/5+j8wvWj9U/SaHa+NwR1Noy2j7Fu0lv2PubvSaRLKxFClrQTxR1InmsM6oBElLNqB29CCCGEWD3oselOtGBBCCGEEGKA0MybEEIIIfqeIbo/4zSoM1irdvC2bWtdPzB57/xk8UOBz1sjz7oMNHJxxnSgaMrLggT3jbxO1P9Qtl8wp9vcHiS9z/VjQWL6XM+2bWys3kxJYvrg8EeysKME97mv1VCoFcmOox4iIyX+cIGHVpDjvqM6JbqgOKbCiov0FRFdjp22tZyatyJtWIcJzet9Lf4aSvVsJb11FmOky8sT0+cJ5qHMQ6yTOlDXfEb9T9Z0ed1LlF5yq80by3WCABPZfrlOLtHeZy2Q5TKbXaRTQf/5eYvq1HWJ9Tqhh1yBh12pZ92g0Q8LFsxsGHg3cBywATgXeIW737pA/ScDHwYOBm4ETnH3T7dsfwzwAeCppDvgZuA17n7dYnEM6qBTCCGEEKLXvAN4EXAscDiwEfhiVNHMHgJ8FbgMOAT4CHCmmR1VbV9fbR8GfhN4BvBg4D/NbHyxIFbtzJsQQgghVhMru2TBzMaAk4GT3P3rVdkxwDVm9hR3vyTb5XjgbuBkd58FrjSzQ4DXAl8DjgIeARzs7vdU7R0LXAccCly4UCyaeRNCCCGEaM9BpEelm+cK3H0LsAXYFNTfBFxYDdzm2AwcZmZDwHeAZ84N3Crm6j5wsUBW7czbdF1yVvNVa0TasTwBKkCugwt8hRpTWYeRWCIXJ0R9zXQ2ns4lHUVecB3a1YUWdtnhB2e2pvEJZCA177ltkQ4kOLe5pifSwZTo2Way/mKd2vz3rdRDa6xA+JPvV+I7F2mXSjy8iny+Aq1QJ15sab+lf2Pu1OetpmcK9+uSF1yHOWqjb/z5ddstzVt0HUWfkbytrdP1M5fH1E2fwfyzNRu8c3nJeEH/gX1n7X3bNlN2feb9xX5981+H0r028UCcx7Tk/V+9szINGitrFrKx+n1jVn4T8PAF6l8e1F0H7O3uNwZtvQHYCly8WCCrdvAmhBBCiNVDozFEo9HdoekS21sHzLp7viJwAlizQP3tQV2i+mb2MuCVwJ+7++2LBaLBmxBCCCF2dzaaWV52l7vf1fJ6GzBkZiPu3vqAaRy4P2hzW7WNrC55fTN7M2kV6/vc/aPtgu354M3MHkcS/G0iTTOuIR3EjSRx3ofd3XsdlxBCCCH6nWXzQbkoKHsnaXXpHNdXv/dt+T/AftQff87V3zcr2w+4j7SQgUr7dgZwIvB6dz+1JNieDt7M7GjgS8AlwL+Qnv1OkEai+wFPAy4zs9919/N3pa9Il9XIvM8a907W69w9USvbuu3n816vmd2rVmd6Zv5+ozMb2sY4PbGtVjaybf4gfbZZV49F2ojmtvYeds3seGcDzd/0SDaFnL8Gto7VBSTNrGxoNNCcFZgPjY9n+QbHA11OwSz3dKD5y/V0UdtFOVpH539son2i6y/yvmtH53qq9pRo3iJKPbu6Qaeat67p2dpXKaLQiq+ueSvYMTqOXE4b5TEuObdTQY7o6ey2EeZIzspK5Y5rxuZ/ttYM109Afhu5Y7IewB6ZwHVNQd7SKGdy9P7n+sESzVuoZ8vKIl1ipHlbnx1b5AUX3LZFezYBN2Rld2WvrwDuBY4AzgYws/2B/YlXhl4MvNjMGu4+90Y9DfhWyyKGj5JWpb7Y3c8qDbbXM2/vB05197ctsP1dZvYu4IMkTxQhhBBCiGq5Qne/Pba0d0O1cnRB3H3CzM4APmBmvwBuI82aXeDul1ZWInsDd7j7JHAm8JfAx8zsQ8DTgecBRwOY2TOBl5Fm+M41s4e1dHeXu+d6uR30enx+ANVodRE+A/yvHsQihBBCiIGhsUw/S+ItpHHK2cD5wLXAc6ttTwFurn5TZV04mpRd4XLSYoRj3f28qv4Lqt9vr/Zr/ZlrM6TXM28OPIc0A7cQfwJc3ZtwhBBCCCHKqBYqvKb6ybdtJhsNuvulwK8t0NbzSDNxS6bXg7fXA/9WpYbYTBL4bSdp3vYlPUc+HHj2rna0fXuUlK993tCIZrO98KTRGMkL6u2smS96Gh5ZX6+TiRwa0/W3qLlHPeFnc/3o/Nd7BnXWZXWyfVJQ7Sdjc30bwPBYnrc00KoVaL7y/KulWplGzUOvxB+tXpZbyEWryLuVW6/Ew60kJ2epniqnYz1ZSdtRWx3u1wlleUu7l5Mzp5a3snTHrGKn/XfiqRf1NxMEkGvDhjtMpBmFmHvGjQUnLu8/6j7/bI0H2rmcWDtZL8t93sL7SLZjdK1F3nM50T1i7Uh7zV2cy3Xw6QOrkL6hp4M3d/+amT0JOAn4Y5KB3TrSctrrSeK+v3D3H/UyLiGEEEL0OyubHquf6LlViLv/BPizXvcrhBBCCLEakEmvEEIIIfqeZV5tOlD02uft46V13f2E5YxFCCGEEGIQ6fXMWxN4KWlp7ZY29XaJ7bfnqcdg5JYse0Vk5JsnmAdmZudbrUxP1811czPd4cloMUAmxg+cXPOSRqCGbQbOnY1sMUYzEuxnzp2NyMg3X7AQLTwIDHiHs2OLFieUaKhz7ehQkIQ+3K+WUL2zOjnRWpX8bet0AUNJQvlwUUOHieFL+s+F1WHbXfqi2q3FCZ2ynAbInfafv90l5ygS7E/TXtRekpg+X0AE9c92ZJqd7xaaphcsWIiMc/M60WckPyfjBZr0+p0fSny1o89RSZ2Z7KREt7roPZrI7u2RkW9PnbR7iGbedtLrBQsnmtmtpDQQf+zut/WyfyGEEEIMKg26b087mIO3nq+RrbIr/Bh4T6/7FkIIIYQYdFZqwcKfAr+xQn0LIYQQYsBoNBrho/xdbXMQWZHBm7tfA1yznH007qknmCdLxN6IErPff1+tbOv2+YnpZ2YmGWrOMktjh3BjeHinKW6j2WS4CbOZgGuMLFl9YA6YX0bN7XXtXmN7XU/XzDQOuQYOoLkue7sjgU+e0TqYnJ0NklXP5DqsQKyT6+Iib8TZTM8xU3+LQvLPX+0wqB9uo6Dt+HOd6YlCfV+gccliCuQsNW1QZLaaH0dpgvkyPVfJjSzXxZXd/EpMcXNKdHnhfrV96nUiPVGdel95TFE8Zeck2K9gr5J9SiRPJeexSKdacB3H/dfLco1b9Gio5PqfzsomwvtB+4MbCxLa5xK74HZY36cgeX10sJEOLo97NjjZvdRuipVhMK2FV5j1s5N8/brP8qUbzmF8dv4IYHx2mi9e9zm+fNUZrJ8JBpBCCCGE6IC+yG3aF2jwtkT2mJ3iy9d/ngMm7uCQ7bfy+Rv/dccAbnx2ms9d93kO3nYzj5n4OV+4+h80gBNCCCG6QGOZ/g0iGrwtgT1mpzj35q/w2Ik7WcMMa5vTHFwN4Pac2c7nrvs8B22/hbXNadY0p/llDeCEEEII0WVWb4aFIHl6TXgQJY8PFCRT09sYas7ylVu/xmOn7mFNS525AdzlV/0dQzRZ2+L3tmMA97MzefbjXgNrssTwUf8b5ieUbwRJ6GcfuKa+357j8+s8eG29TtZWY0NdOzeS69IiL6Z6SKxZkyemr9fJE1jnlnKpTtZX4CkX6TlybcrEdH2//FhCPUvuBVfvijXZfqORz1SB91QJJcnru6t5a99OLyk9tnbEVlidJabvlp6oRIeXa7cict+ztF/2eVxSZDvZnotZg5jyzwNEuqx629Hnb++x+fffyOctZ33QTt72HiOdvdfRZztna3COau1ECe6DuEti2nN0/jmK/tSNF8Q9mAzR/TmnwZzDWr2Dty7TpME9jdE04Mo+F2ubCyvfmzS4b3gNszQG9BIRQgghRD+h8UQhzUaDZ+1zJP89ujfbGmVj3m2NUX64/uG8+LF/1rkNvxBCCCFYDtWbFizsBkw0hvm9fY7k8jUPbTuAmxu4HffYlzE5FKTKEkIIIUQxjcZOr7fu/az0UXXGqn1suscj19XKtt4+PydpM/B5G/n5A2pla+594LzXL33UC/nOlactmoF1tjHEnz3xlUyNrNsxrm+OzxcnNCOxwtpMFxcZJoZce0sAABkQSURBVIUih6xsJBiXZ0nwYl3a/NfRhZ1r16K2opykucYt7yu1M3+/SPM1GWhMcm1IpKfL65Ro0CJdVCMrK/UvK9FK1ayfSvYJ/ao607zU2+qedmal9XPLRYkurvQ96sTnLde3Rf1HkwvR5yhne+CFNzOb69mW7ru3UFmusYukavnndir4kAwVnMiS6zG6jeb75TlKoa5djO4ReTul+s6Zgs/oSucNFsuPZt6WyPjsNGdu+SxDUcbyFoaY5WM/OYOx2brJrhBCCCGWinze5tDgbQmMz07zxZv/gwO33bjoIgWAtbNT/O/7ruUff/RhDeCEEEKIXaTB0LL8DCKDGfUK0Gg2Oefm/+DgidvaDtzmmBvAffJHHynLFyOEEEII0YZVq3mLyDVmQ/dO1utsqJuYrbnjgQw1Z3lAczYc7W5rjDLbGGKIWdZms2wNmuzR3M7QHiPMrJ3fdnNdkKN07fy3JJJTze41XivLPdxm96p7wY2vy3KtBn5tuVZtNLhCck83gNGx9v5wuQ4t0nPkGrc1gZ5lXeCPNJqVzURJATPGh+uPvovyHWYxRbq86Njya6dEl1L07SrU05T4wwVaqVzPV9J/IZ3kNu3WE43w/ehp22XHPpR9ySvSSUbXbJGeM2orqxPu2P76L8kbW3JsUf+55rSE+D2a3050yyjxS5sNdsw93EIvyGy3Ek+/qK0o7tU7K7Mcjzn12HRVM9sY4tn7v4Cfjj2IiZaVpmlV6SM5/Env5YfrH8m2lpWl24dG+Nn6fXn+oa+vJakXQgghhOgEjSiWwP3D4/zB/i/k6jUPY6IxsmPg9hJ7JfeOrOMljz9pxwBubuD2vENfz/0j9WwHQgghhCin+zYh6WcQ0eBtidw/PM7zH/dqrl77MH5QDdzmfNwmh0Z5yeNP4gfr9+dqDdyEEEKILqLVpnPsVpq3bnH/8Bqe8/jXM0ujJu6aHBrlhU94NY0HjOpRqRBCCCG6zqodvN1z50ytbCQz5W0GSs9GYIC7fu0+817P7rdHTWzeXD9/8cHsg+smwbmRbnNNva/mmpFFXwOs2VDfb3x8/rGsW1c/trxsXUGy5rUjdVn9HkHZmkz8H4moc4FwaIBZa7dMxZsnsJ4KDEjzOnFC7fZ95XGPFgqo8/2mgxUL+XnrSORfSMnijIhOY1quBQIl5qahqLvDeGqi/hLhf4FgPu3XnZPUSYwAM1lZiZFvtGChxKQ42m+vsfllUfL2/FjWB/ex4ezcri34SzcSvB9R//mxTBR8jqO2M8/02rlfiA2jnS2YWg2khFbdnRRpDOjMm6aGhBBCCCEGiFU78yaEEEKI1YSsQubQ4E0IIYQQfU+j+tftNgeRVTt4G7pzW61s9gHzzW0beTJ3gNu21oqmp+e3NXr/HvX9svd/6J6JWpXmuux0z9ZNehsT87V6zam6oGJ7o27SOzkxP4CZ6foFOT2VaTXG63Vyrcp4cI7uHa1rLMayzPRrAx1KntA6NK4s0KVFZUOZNmdroNXJdSfbwqTT8+tESb/z3UqSTkf75Rq8iKGCZeyR9iFMBN4l+VweU2lC7Vqd7oQTt52bDRfen0v0dJ3qyeoEn9Fm+3Ob0+m5jkxh87ZKtKMjwTWaX3/xNRIcf1ZxLPis51rRDWPtT1Jk7J0T3bNyfRnARHZOJgvctjfUb/Xkxs3RvSbSweX3zaHAEDk3ABarj1U7eBNCCCHE6qFB933ZNPMmhBBCCLFsDNH9OfvBXLc5mFELIYQQQuymrNqZNztsQ63sysu2zy8IPNRmDti7Vjb0iD3nvZ4Kkr7npj2RP9vYXvOFDyPB2Z+YyLU69SndDevrZc1Md7EmCDH3ghsZrbczlsW0LvB0i7yP8mTtkS5ta6bDi7Q6taTvkZ6svltNYxN50Y1lO0aas6i/dkR+dYGaskiHlXs/ddOvqRMdWLc0VxCfk5y6O2Nn5H2V+qzlLJfvGsTHWuKPlhP5fJUcfxRT3laUYD5vK9KKRR6GOVNB21Fb7Vgb3Gvye1Qkb87lxHuN1YOOPtv5sUXHkesJHxBo54bzzzr1OpHmLdcBRvq2Ac341BYtWNjJqh28CSGEEEJ0EzMbBt4NHAdsAM4FXuHuty5Q/8nAh4GDgRuBU9z90y3b1wEfAp5DGpN9AXi1u9+3WBx6bCqEEEKIAaAvcpu+A3gRcCxwOLAR+GJU0cweAnwVuAw4BPgIcKaZHdVS7e+BpwK/C/wecGRVtigavAkhhBCi/2lAo9Ho6s9Sxm5mNgacDLzJ3b/u7pcBxwCHmdlTgl2OB+4GTnb3K939dOBs4LVVe78EPA94ubtf6u4XVfv8SbVtQVbtY9OvPmOfeuEzeh+HEEIIIVYFB5EelW6eK3D3LWa2BdgEXJLV3wRc6O6tSsnNwBlmNgQcRpJsf6tl+7dIktinAv+yUCA9H7yZ2a+TDujhwBrgftJz4Avd/Tu9jkcIIYQQg8CKW4VsrH7fmJXfRBrTRPUvD+quA/autt/m7lNzG9192sxuW6C9HfRs8GZm+wDnkEaTW0gHMAGMA78PnGpm5wN/5O539CouIYQQQogC1gGzrYOtignSZFRUf3tQl6p+tH2x9nbQy5m3vwVGgUe5+7X5RjPbH/gs8FHSM2AhhBBCCABuveX2rlt73HrL7XP/3Whm+ea73P2ultfbgCEzG3H36ZbycdJTxJxt1TayulT1o+2LtbeDXg7ejgY2RQM32PHc+BXANztr/oDBNGsRQgghxGLcA9z5/Oe/4YHL1P524KKg/J2k1aVzXF/93rfl/wD7UX+UOld/36xsP+A+0kKG64F9zGzY3WcAzGwE2GeB9nbQy8HbvaRnvIvxECCfjhRCCCHEboq732FmjwH2bFu5u9yVvb6CNJY5grRqdO6p4f7AhcH+FwMvNrOGu8+5Kz8N+Ja7z5rZt0jjsN+o6kKSlg0xfxFDjUazuXRH604ws/cBLwTeCFwA3OjuM9WKi31JJ+MDwGfc/XU9CUoIIYQQohAzez/JoPc44DbgDGC7ux9ZWYnsDdzh7pNm9lDASatGPwQ8HfggcLS7n1e19zmSge9LSMYl/0ga3B23WBy9nHl7MzBN0rTtAWBms+xc6nEf6SS8pYcxCSGEEEKU8haSfv/s6ve5wCuqbU8BzifNrm1291vN7GiSOe/lwLXAsXMDt4rjgdOBr5DGSOcAr2oXRM9m3uYws1GSV8pG0kqLbaTnvle4+2RPgxFCCCGEGDB6PngTQgghhBCdo/RYQgghhBADhAZvQgghhBADhAZvQgghhBADhAZvQgghhBADRM8T03cbMxsG3k3yXNlAtWzX3W9dybgWwsz+Hhh29+Nbyo4CTgUMuAp4vbv/5wqFuIPKo+ZU4ChgLfBt4DXu/qNq+/OBtwGPIJkX/rm7f3eFwqWKaSPwN8Bvkb6cnAv8hbvfVG3vu5hzzOzXSYaNT3f3zVVZv14jTwB+FGza5O4X93HcxwN/SUr+/BPgdS2+S30Xs5kdSbIgiDjf3X+zH+MGMLP1wPuBPyQ5DPwX6T7yk2p738VtZntWMT2LlGPyK6T7yG3V9n6Mecl/W6qc4x8l3eMnSR5jb85SP4k+ZDXMvL0DeBFwLHA4yYLkiysZUISZNczsXcAJWfnjgX8HvkAy6vs34EvVH8UVozJP/lfgAOD3Sf41dwPfNLMHmdnTgU+SDAcPAX4IfM3MHrJCIWNmDeD/AQ8k+ewcQTKA/nK1ve9izqn+0P0TMNxS1pfXSMUTgV+QznPrz7f7NW4zexEp1/L7gf9NMg3/dzPbv19jBi6hfo6PBWaBv+rjuAE+TDIn/SOSk/x24FwzW9PHcX8B+B3gxcAmkjfp+WY23m8x7+Lfli8CDyPdK48jHe87exC22EUG2iqkcjP+BXCSu59Vle0PXAMc5u6XrFx0OzGzRwNnkv7QbQW+PvftqPq2ZO5+ZEv984Gr3P2EoLmeYGYHA5cBj3f3/6nKxoE7gJcBzwdunnOBrgZ7VwFnuvt7Vyjmh5FcrN/g7luqst8HvkRyvf5cv8WcU10PBwBHAk9z9839eo1UcZwCHO7uRwTb+i7uaoB/DfBpd39bVTZEutZPJf0R66uYI8zsAcCVwKfc/Q39eK5b4vgF8E53P716/Xjgx8CTgBPps7jN7CCSoepvu/s3qrI9SH6kryJ9ke2LmHflb4uZ/QbpS8Gj3f2aavuLSIaxD3H3iV4ei1gagz7zdhDpUenmuYLqj/YW0relfuE3gJ+RvuVfk23bREv8FZtZ+fivA36XlNpjjllS+o4HAocx/7zPknK7rVjc7n6Lux/TMnDbSPrj8F3SrGHfxdyKmT0T+D/ASdmmfr1GIP3R+J8FtvVj3AY8kpSuBkjXgbsf5O7/TH/GHPFWYAJ4V/W6n+P+OfDHZrZP9YX7T4E7SffEfoz7sdXvuVyTuPt9pC96R9BfMe/K35ZNwLVzA7eW7RtIf1tFHzPomreN1e8bs/KbSFqWvsDdPwN8BsDM8s0b6cP43f120iPIVk4i6T++B6wnjvtXlz+69pjZl0iPe+8kzWLtRR/HbGYPBj5Bym93Z7a5L6+RiicCa8zsUlJy5h8Bb3L379CfcR9Q/d7LzM4jxX8labb2Evoz5nlUOqVXAi9z961VcT/HfQIpldCtwAxphugod7+r+oLVb3HfVP3eCPwUdmirN5JyWfZNzLv4t2Wh7VR1vt21QEXXGfSZt3XArLtPZeUTpEHGILCOpAFppe/iN7NnAe8DTiPlZ4P+jvttwKGkb8/fIH2bhP6N+e+BL7v7ucG2vrxGzGwt8GjgAcDrSOLum4ALzOxx9Gfce1a/P0UaLB9NGnCe18cx57yMNIg4u6Wsn+N+DHALaVb5MOCrwDnVwK0f4/4uaUD/MTPbt7rO3wc8BBijP2OOaBdnbXv1t7RJ/x2LyBj0wds2YMjM8hnEceD+FYinE7aR4m2lr+I3s+NIwtZ/Ia3Q21Zt6tu43f0H1ezPMSTx/wuqTX0Xc6UzORh4zQJV+vIacfdtVItD3P2i6nwfR3qM83L6M+65L3rvcfd/dvfLSEmlryINivox5pwXAP+YfWnty7jN7FHAPwAnu/tX3P3bwPNIg4ZX04dxVzm2n02arb8JuAt4MGnF6d30YcwL0C7O2vYq93iD/jsWkTHog7frq9/7ZuX7UZ8O7leup4/jN7M3k5aPfww4ttKJ3UH6cPdV3Gb2UDM7prWseqx0NSm2vou54jjSI4xbzOw+duoM/9PMPkYfXyPufk+rsLm6Pn5MeuzSj3HP9f3DuQJ3b5J0e4+iP2PeQbVS8DGkxTet9GvcTyZ9efreXEE16LycdBx9Gbe7X+nuTyYN2h7s7i8hXdNX06cxB7SLc6Ht0H/HIjIGffB2BXAvSUQK7Fhtuj9JiD4IXExL/BVPow/iN7O/JHnovc3d/7z6Izf3x+4S5p/3IZJVy0rG/Ujgs2b25LmCalWekby8+jFmSDMpjyeJhA8CnlGVH096/NuX14iZPcnM7jGzQ1rKhknH8GP6M+7LSIP4HTrHagXq40l/mPsx5lY2AbfMrQBvoV/jvqH6/StzBS3n+yr6MG4z22BmF5jZE939dne/t/q7ciDwNfow5gVoF+fFwKPN7OHZ9nuB7y9/eGJXGOgFC+4+YWZnAB+olqPfBpwBXODul65sdMWcDvy3mb0T+CzpkcKhpEc4K4aZ/QrwXpIv2j9UNhxz3EvSvn3ZzC4HzgP+gqR9+kSvY23he8BFwCfM7ATSI7L3k1a7fYr0x7nfYsbd533LNbM5HcqN7n6bmfXlNUL68rQF+LiZvQK4D3g9abbiw8BD6bO43X2rmf0N8B4zu5U0A/dy4JdJJrJj9FnMGQfTMmvYQr9eI98hmfKeZWYvJ1k7vYpkkn06SYPYV3FXg7Vh4ENmdhLJ4+2TwDfd/Twz+3m/xbwA7a6J/wIuBf7FzF5J+rz+FXBa9ehY9DGDPvMG8BbSapuzSQ7k1wLPXdGIloC7/5Ckr3gu6dvOs4DfC75Z95o5rdhLgJuzn1dXwvoTSDqty0jfpI9y91+sTLg7Htk9h3Qe/4NkvnoPcIS739ePMZfQr9dI5cL+O6THvF8m/aF+GMn37bZ+jZs0m/nXJE/AH5LsFo7yRL/GPMe+wO15Yb/G7e4zVSzfJj3qvZT0uPSp7n5tv8ZNuv/dRxrg/DvpXvIc6N9zndMuzuoJyrNJq4AvIsljzmSn/YzoYwbapFcIIYQQYndjNcy8CSGEEELsNmjwJoQQQggxQGjwJoQQQggxQGjwJoQQQggxQGjwJoQQQggxQGjwJoQQQggxQGjwJoQQQggxQGjwJsQKYmb7m9l9laM7ZnaumR1f/f8dZtY0s6OD/Y4zs+kl9LPU+meZ2TcW2X5kFdvG0jaXAzM7xMx+YmYTZvaBLrX5BjObNrPDgm1fMLP/MbN13ehLCCE6QYM3IVaWXwP+u3Kih5Rz89tZnY+b2YZd7OdfgF/axTb6kTeS0qA9Hnhfl9o8leSs/2kz22OusEoB9nvAMe6+tUt9CSHEktHgTYiV5VBSWinM7LHAOPCTlu23k/I//vWudOLu29z91l1po0/ZC/i+u1/t7rW0UZ1QpVk7FngIKYUWZnYw8EHgde5+RTf6EUKITlF6LCFWADPbAjxykSqPAo4DXkBKFv33wG+5+/nV/scBn3D3ker1EPAG4ERSYvifAG93968sUP+hwBnAbwP3A6dV+77b3c8ys7OAR5NywL4QGAW+BLzM3e83syNJuYRfBbyalNT6G8AJ7n5z1cc6Uh7RY0g5T68A3uTu36y2nwWsBfYBDqniP4+UUPvXgeZcH+6+peAcPgq4AfgL4KXAw4GrgFPc/fPVPu8AjiANio8CTnf3N0dvgJm9hJTr8Q+A9wJXu/uzorpCCNFLNPMmxMrwq8B+wFbSQGVf0gDt49X/r5+r6O7/AHwT+MQiWqv3AS8GTgAOBD4F/H/VIGse1UDvP0iPUX+TlHD7+aTBWiubSIO2Xwf+BPgj4DVZnZOBl5CSuz8A+KqZNaptnwP+L2lQeBApKfm5ZnZoy/7/F/hX0gzkvwL/DFxLGsxtIg1EP7nAMf8qKaH259l5zk4DXkd6nPorwGeBz5nZH7bsdyRwddXHJxZoG3f/JPBvwDnVsb14obpCCNFLRlY6ACF2R9z952b2y9XL77r7bPX6n939FgAza93lpcCPSDNAr2rdUOmyTgb+0N2/WhV/1MwOJA1iNmfdHwE8Gfhld/9Z1cYLgB9m9W4AXunuTeAqM/tatV8rL3f386o2jgWuAX7LzG4i6cOe4e5fq+qeXA3cXksaCALc4u4faTmWxwBfA7a4+3QV18MIqM7hJLDN3W8xsz2BlwGvcPdzqmrvrc7DG4AvVmVN4B3uvi1qN+NLwO8DV3TrsawQQuwqmnkTYuU4EPhRpbGae/39qGL12PCNwJ+b2VOyzY8jaeW+UK1cvc/M7iPpth4XNHcIcNvcwK1q/0fAXVm9n1YDtznuJD3mbOWSLMafA0+sfgC+ldW/qGUbwM+y7W8lDe5uN7N/BX6L9Li1hP9F+kKa93lh1ufNJQM3M3sEaSbvG8Azq8eoQgix4mjwJsQKYGY/Jj3Se1LLYOshwMXV60cEu32UNDA5E1jTUj5Z/X4O6fHk3M8TSLNsOdPEn/1G9nqmgzpDwASwfYH6w6TVoXPMG0RVs3AbSbq1CeBvgG+Z2XgQS872BcoX7TOism75DDA3g/hp4MNmlj9aFkKInqPBmxArwzOB75Fm0w4iPdb7Pmn27SDSoGEe1SzYn5JE+q9r2XQVaXCy0d1/OvdD0rFFOq0fAA9ueWyLpWe0D+jgOA7O2ngQ8OPqByD3SjuM+atpd2BmDzKz04FRdz/T3Y8Bnl71cWBBLFeRBrJPzcqfulCfi/BWko3L8919O3ASaebxn+Y8+YQQYqWQ5k2IleE6kjfZ8e7+UzN7OHBhNegCapo3ANz9KjN7O8mLbKYq22pmpwHvM7N7SIPC3yWt9PzToI3zzey7JB+zk0hf4v622rzU5ef/YGYnkGa9zgAucvcLq/g/B/ydmf1ZdbwnAE8i0+y1cCfwO8CjzeyNpMUcx5Ee53q7QNx9W3Ue3m1mt5Metz4H+EPSitcizGwT8BbgjXO2IO5+d7Vi9xukgfZ7StsTQohuo5k3IVaGuZHZldXvQ0nGsCWcRuUN18JbgL8DPgD8D0m4f6K7n7VAG38I3EHSoP07cDZp4Da5QP2F+CvS49/NwBbguS3bXgqcW7V9GekYj3L38Dgr7d//qV5eQJohfAJp0cPdhfG8lbRq90OkBRjHkEx1v1Cys5k9kPS49CKSr1trfOcBHwHebmZPKoxHCCG6jnzehNjNMLMHkwZS585ldjCzhwE3A4e7+0UrGZ8QQojF0WNTIXY/ZoAvAKeZ2SeBPYBTgJ+SvNiEEEL0MXpsKsRuhrvfSVpB+VukR4sXkFag/ra7Ty22rxBCiJVHj02FEEIIIQYIzbwJIYQQQgwQGrwJIYQQQgwQGrwJIYQQQgwQGrwJIYQQQgwQGrwJIYQQQgwQGrwJIYQQQgwQ/z+a0AIzPW4uwwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(\"Optimal Scale:\", independence_test_metadata[\"optimal_scale\"])\n", "\n", "# local correlation map\n", "local_corr = independence_test_metadata[\"local_correlation_matrix\"]\n", "\n", "# define two rows for subplots\n", "fig, (ax, cax) = plt.subplots(ncols=2, figsize=(9.45, 7.5), gridspec_kw={\"width_ratios\":[1, 0.05]})\n", "\n", "# draw heatmap\n", "fig.suptitle(\"Local Correlation Map\", fontsize=17)\n", "ax = sns.heatmap(local_corr, cmap=\"YlGnBu\", ax=ax, cbar=False)\n", "\n", "# colorbar\n", "fig.colorbar(ax.get_children()[0], cax=cax, orientation=\"vertical\")\n", "ax.invert_yaxis()\n", "\n", "# optimal scale\n", "optimal_scale = independence_test_metadata[\"optimal_scale\"]\n", "ax.scatter(optimal_scale[0], optimal_scale[1], marker='X', s=200, color='red') \n", "\n", "# other formatting\n", "ax.xaxis.set_major_locator(ticker.MultipleLocator(10))\n", "ax.xaxis.set_major_formatter(ticker.ScalarFormatter())\n", "ax.yaxis.set_major_locator(ticker.MultipleLocator(10))\n", "ax.yaxis.set_major_formatter(ticker.ScalarFormatter())\n", "ax.set_xlabel('#Neighbors for X', fontsize=15)\n", "ax.set_ylabel('#Neighbors for Y', fontsize=15) \n", "ax.xaxis.set_tick_params(labelsize=15)\n", "ax.yaxis.set_tick_params(labelsize=15)\n", "cax.xaxis.set_tick_params(labelsize=15)\n", "cax.yaxis.set_tick_params(labelsize=15)\n", "# fig.suptitle('cMGC = ' + str(mgc_statistic) + ', pMGC = ' + str(p_value), fontsize=20)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get a unique MGC-map and the optimal scale has shifted! This is because for nonlinear relationships like this one, smaller $k$ and $l$ nearest neighbors more strongly define the relationship. As such, MGC sets the optimal scale to be local rather than global from before." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A faster version of MGC (Fast MGC)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thus far, we have shown that MGC is an powerful tool that is able to determine trends in linear and nonlinear relationship data sets. Unfortunately, it suffers from one problem: performance. MGC operates in $\\mathcal{O} (n^2 \\log n)$ time. To alleviate these problems Fast MGC can be used. This version of MGC takes bootstrapped subsamples of the input data matrices and estimates the null distribution using the subsamples. Fast MGC, thus, operates in $\\mathcal{O} (n \\log n)$ time.\n", "\n", "Calling Fast MGC is similar to calling MGC except that the `is_fast` flag should be set to `True` in either the `test_statistic` or `p_value` methods. The number of subsamples used can either be defined or can be chosen optimally from the provided data. Using the same nonlinear data as before," ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FastMGC test statistic: 0.14386065297425885\n", "P Value: 0.001\n", "Optimal Scale: [39, 47]\n" ] } ], "source": [ "x, y = sims.spiral_sim(num_samp=1000, num_dim=1, noise=0.1)\n", "\n", "mgc = MGC()\n", "\n", "fast_mgc_data={\"sub_samples\": 10} # custom number of sub_samples set, optimal parameter\n", "fast_mgc_statistic, test_statistic_metadata = mgc.test_statistic(x, y, is_fast=True, fast_mgc_data=fast_mgc_data)\n", "fast_mgc_p_value, _ = mgc.p_value(x, y, is_fast=True, fast_mgc_data=fast_mgc_data)\n", "\n", "# print the results\n", "print(\"FastMGC test statistic:\", fast_mgc_statistic)\n", "print(\"P Value:\", fast_mgc_p_value)\n", "print(\"Optimal Scale:\", test_statistic_metadata[\"optimal_scale\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is able to calculate many more samples in a time faster than MGC!" ] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }