Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ritwikraha/e02e9b04b19bc582776464062c449a2a to your computer and use it in GitHub Desktop.
Save ritwikraha/e02e9b04b19bc582776464062c449a2a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "mYFRGDKGVK5N"
},
"source": [
"# \"Image Segmentation using Whale Optimization Algorithm\"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BmEKGRxJkg_L"
},
"source": [
"The following notebook is an example of using a metaheuristic algorithm such as Whale-Optimization Algorithm to perform the task of image segmentation. \n",
"\n",
"We use the otsu's algorithm along with the Whale Optimization algorithm to correctly estimate the thresholds for segmentation.\n",
"\n",
"\n",
"\n",
"---\n",
"Please note that this notebook and the corresponding wandb report is inspired from the following papers:\n",
"\n",
"1. [The Whale Optimization Algorithm by Seyedali Mirjalili and Andrew Lewisa](https://www.sciencedirect.com/science/article/abs/pii/S0965997816300163)\n",
"2. [Multi-objective Whale Optimization Algorithm for Multilevel Thresholding Segmentation by Mohamed Abd El Aziz, Ahmed A. Ewees, Aboul Ella Hassanien, Mohammed Mudhsh, and Shengwu Xiong](https://link.springer.com/chapter/10.1007/978-3-319-63754-9_2)\n",
"3. [Multilevel Thresholding based Image Segmentation using Whale Optimization Algorithm by Basu Dev Shivahare, S.K.Gupta](https://1library.net/document/eqo0gvmq-multilevel-thresholding-based-image-segmentation-whale-optimization-algorithm.html)\n",
"\n",
"The colab notebook and the report is only a reproduction of the papers mentioned above."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bM105Iz6k_VS"
},
"outputs": [],
"source": [
"%%capture\n",
"!pip install wandb"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "yM4VTrx9tUpG"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import math\n",
"import random\n",
"import os\n",
"import cv2\n",
"from scipy import ndimage\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import wandb\n",
"%matplotlib inline\n",
"# Use a white background for matplotlib figures\n",
"matplotlib.rcParams['figure.facecolor'] = '#ffffff'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TTpAcmbSa8Gp",
"outputId": "9880790e-e83c-417d-a3b7-919f3682be3c"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[34m\u001b[1mwandb\u001b[0m: You can find your API key in your browser here: https://wandb.ai/authorize\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: Paste an API key from your profile and hit enter: \n",
"\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /root/.netrc\n"
]
}
],
"source": [
"!wandb login"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "aLSY0zoefDQB",
"outputId": "1620783d-3a72-4d4d-ef81-01cc8b9623cd"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mounted at /gdrive\n",
"/gdrive\n"
]
}
],
"source": [
"# mount google drive to access files\n",
"from google.colab import drive\n",
"drive.mount('/gdrive')\n",
"%cd /gdrive"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OERc5T_2dgdY",
"outputId": "617b21d3-3638-4241-a7c6-d39bcde4ea5a"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/content\n"
]
}
],
"source": [
"%cd /content/"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "XiTGx4qSf9jN"
},
"outputs": [],
"source": [
"img =cv2.imread('/gdrive/MyDrive/Colab Notebooks/images/a12.tif')\n",
"#img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4PWX9224Id58"
},
"source": [
"## Visualising the image\n",
"\n",
"Since we will be working with two thresholds or three region-color segmentation it is good to have an image where there are approximately three separate colors and not substantially more. The flip side to having more colors or groups of pixels is simply the algorithm will have largely different threshold values and will approximate certain color bands as the same."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 273
},
"id": "L21ReBY_8siX",
"outputId": "1e83c325-1eb1-4869-eecb-f99abb65ed11"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAB9W0lEQVR4nO29f2wb95km/vY7sxgdCZAnHsgDtSJArVVIB/okQF5rYR/ksw/2WQe7cGAf7LULe+HAPjiti2TroimSxkXTbZAUybaB041RB0mTYN3Y2KQxauOcxoh9Ec5GlbWwciysjDKVUKkmQuKoI7HUcpAZ+PvHc58Hr0iJomSLsl29fxg0NRwOZ97f7/O+75dkheqgtWvXbt++PRQK2bYtIn19falUCq/T6XShULBtOxQK5fP5l1566Re/+MVyX+8K1Uv/33JfwANAzc3N/f39HR0dsVjMsqxgMGhZFrhfROLxuOM4ruu6rptIJI4cOdLR0bG8F7xC9dOKAMxPa9asSSQSjuNYluX7vud5ruuWy2X81XEc3/dLpZLrup7ntbW1ff/731/eC16h+mlFAOanSCRi2zZVfrFYzOVyuVwun897nlcqlSYmJsbHxwuFwvT0tGVZqVTq29/+9vJe8wrVSfZyX8ADQJZleZ7nOI5t25OTkzdv3iyVSqFQKBKJFAqFkZGRRx99NJfLff3rXz948CA+0tvbu7zXvEJ10ooAzEPJZNL3fdd1bdsuFosffvjhBx984DhOR0dHPB4vFotf+cpXcORPf/rTfD5/5MiRSCQSiUTgLy3vxa/QvLTiAs1DyWTSsiz495cuXfrggw9ExHXdycnJtra27u5uffAvfvELpICi0ejhw4eX54pXaCG0IgC1CJkf27YLhUI6nT558iT/dP36dbxIpVL6IydPnkyn001NTRs3bmzkpa7Q4mhFAGpRe3t7IBBApJvJZPSfmOz/1a9+VfGp1157rVwux+PxvXv3NuhCV2ixtCIAtWhgYODKlSuTk5O2bU9MTFT8dWxsTETa2tp27typ379w4UIul4vFYlu2bGnYpa7Q4mhFAGpRsVgcHx+fmJgoFovnzp2r+Ovg4CBevPvuuxV/SqfTtm13dHRs3ry5ERe6QoulFQGYnyzLCgQCU1NTFe+fPHkyn8/j9d/93d/pP506dapQKIRCoR07djToKldoUbQiAPNTS0tLMBisfv/KlSsffvghXj/22GP6T5988glC4Z6enkZc4gotllYEYH4C2mfWP125coWvP/roI/2nkZGRUCjU3t7e1dW1pJe3QndDKwIwP0UikWKxOOufzpw5w9ebNm3SfxocHAwGg5FI5Kmnnlra61uhu6AVAZiHVq1aFY/Hg8FgNBqt/mt1YED64IMPABrt7+/v6+tbymtcoRVaMvrmN7/561//+vPPP//Xf/3XWQ/44osv7hgKhUL6T59//jne//3vf9+Qi12hFbrX9I//+I/k71kPeP311+8o0n/69NNP+f43v/nNhlzvCq3QvaMdO3bMxdykbdu2zXXMiRMn+P5cBmSFVuj+pY8++mheARCRGsfoP504cWKJr3eFVuie0p2ZVM9hjz/+eI0zWJa19Fe9Qit0L+iZZ55ZhABUHFbhRP3ud79b+gtfoRW6F3SniuY6UieCantBd+7ceeedd5b4wldohe6aKjR3bQH48Y9/rA9rbm6uOKDiPIcOHVriy1+hFbo7qub+GqieVCpVW1Qq/vqP//iPq1atWuJfsEIrtFiqyGzWVv+g2gdXhxPPP//8kl3+Cq3QXVAgEKjm/rsUgOoDPv300927dy/NL1ihFboL+tWvfnX3AlB9fPUBv/zlL+Px+JL9jhVaoYXT17/+9Vm5/+4FYNZjXnzxxbu8YMdxKgBIK7Qg+tJyX8B9ROvWrTtx4sSaNWtm/euXvlTrXlVzfPXxs0rFxx9//Mgjj9RAlWqKRqPr16/v6upKpVLhcBhdCo7jYFzp5OTk8PDwyMjI4ODgrVu36jnhCq0IwP+jnp6eQ4cOVTR2abp7AfjVr361ffv2WT+eTqcfeeSRkZER/WY0Gu3s7GxtbQ0Gg/l83nGcWCwWiUQ8zwsGgxhVbdt2IBDA+ywz+76fz+eHh4cHBgbee++9Gpe9QisCICISj8cff/zxJ598ssYxtQXgn/7pnyqGZIXD4eo2mnldKc/z3n333cHBwcnJyVKpVCwWC4UCJvKKSCgUisVijuNA64uIbduRSCQUCgWDQbhD8Xgcw0w9z8PU3pGRkeeee258fLz2V/9x0spoRGlubt6xYwfHei6OTp8+XSEAHR0dn3zyyULPY9v2nj17RCQYDA4NDaXT6Yp5RNFoFA06tm07jhOJREQkm83atm1ZViQSmZycDIVCGF3qOE5bW1t7e/u6detGRka+9a1vTU5O3s3PfPjoj90CYHDD8ePH29vbax9Z2wJIlXaf6/h5jQDo9u3b77333ltvvVUhRc3NzVDwIhKJRJLJZDgcLpVKpVKJiwtgDWAlcEwikUgkEtls9tKlSy+99NJKhED6o7YAW7duPXjwIDTu3dPg4OC9GgpdKpVs225tbW1qatLvMwxwXRevwfT4FweXSiURmZiYwMoCnGf16tVdXV2JRGLHjh39/f3Xr19/9NFH64y8H276I7UAqVSqp6fnyJEj69evr/Mj81oAmandaxxf2wjs2rVraGgIK5jOnz/PEdOhUCiRSMTj8VAoBAmB6w9fCB4/5vjm8/lcLpfNZovFoud5iBwSiQTSR21tbYlEIp/PP/nkkysh8h+XBQgEAn19ffF4PBwO9/f318/9DaOjR4+CKatj1lAoFI1GkfwJh8OWZWFlgYggRC6VSp7nTU9P3759O5/P5/N513Xx12KxODExkc1mJycnk8nkpk2bksnk97///VAo9POf/1xEurq6uru7z58//8dmFv4oLEBra2s8Hkf+JJlMxmKxdevWbdiwoeKwcrn8b/7Nv9HvUFW/8cYbjz76aD3fxY9oC/Dmm2/u27fvT/7kTyqOqaYadiOZTHZ0dMDjdwyJCBS/iBSLxXw+jzm+8H9c1/V9n0cmEolIJBIIBNavX9/R0YEoOZPJ3Lp1CxtAJicnP/zww88++6yeX/pw0MNsAZAkQSzY0tKydu3a9evXV0zvAV29evU//af/VONUULGLpgMHDojIkSNH9IB1nnlwcBC2qEYVQkTg5UPx+74P3T89Pc1rQyicy+UQBogI3CfLsuAyYacTnKWJiYlkMonQ3/O88fHxfD5fLBYjkUhbW1s0Gj137tz09PTd/OoHgh5OC4BcOFg/EAhEIpEjR45Uq3zQXEr3o48+orQUCoV/+2//Lf90586dSCQyl7dw586dinNWm4Xqd0Kh0Fzjt0AdHR3d3d3RaNR1XeR8XNeF1hfD5cViEa5/KBRyXRccHAgE8IKmIBqNIiqASRkbG7tx40apVOrq6jp8+DA9w1dfffVrX/tajUt6COghtACWZbW3t/f19W3btm1eL7+Gy6FtRTgc5us//OEPIpLP5+f67A9/+MM6L/WNN97g69rcD6LuD4fD5XIZZTJsrfQ8j5N6fd+fnp5GACAiVORwisQ4S8Vi0XVdiEokEjl06BAsFemxxx7r7+//sz/7szp/zoNID5UFaG1t7e/v7+npqe1LkGpw/+9+97u2trZZD+af6skL1aA7d+50d3ffuHGjzuO7uro6OzsJfSuVSghzfd8vFAqwBp7n2badzWbF+D+1yXEcAC5+/OMfr169etZj8vn8v/t3/67Oi3zg6OEZjXjkyJEzZ86cOnWqTu6fC/QmIo8//ngF92tV/Z3vfAcvfvazny3qSv8f7dq1i6tX6yHUeqHFEePiTREJh8Oo/sLJ4et5z4llZ9u2bZuL+0UkEolUDH9/mOhhsABdXV1PPfVUnfWsq1evXrp06dy5c0NDQ3Md8+mnn46Pj6fT6e7ubjhCu3bt0ilzePDXr1//8z//87u58kOHDtm2XS6XE4nExMQEMpJzUXNzc29vr23b4H49sd2yrOnpaQTB8IjgFImI7/u1nat//ud/7uzsnPdSt2zZcunSpXp/2INDD3wMsH///hdffDEWi9Vz8Ojo6OnTp99+++0aPLFjx45wODw4ODgyMoL84JYtWypU9enTp3fv3n33JeRr167dvHkTr9PpdG0BmJqaunTpUjKZFJF8Pg+tH4lEwuGw53moB4P1gYZATYAb7WelQ4cO1cP9IvL444+PjY09fBnSB9sF2r9//1tvvVUn94tIPB7Hct8ax6RSqUQiEQ6HkSscGBgYGxvr7+/Xx3z1q1/9kz/5k7vnBo1/nheMJCK+73/22WefffaZ67rc3VQul5kJDQQCyJNGIpGWlhZsLK7hCx07dqzOS00mk0888QTE72GiB1gAnnnmmbfeemtBHwmHw6lUatZB5xV06NChvr4+YC0jkcj+/fsXeZV1009+8pP6D0ZiZ2pqKpPJZDKZYrFo23Y0GgXHAyIRiUQ6Ojra2tpqjKOrR+pAq1ev7unp+eEPf1g99OWBpgfVBfrmN7/57LPPVr/ved7IyMjIyEipVIrH44lEogKl3NTUFIlEcrncXGfGNshwOHzs2LGPP/549erV4XD49u3b9/wngNra2sbGxp599tnvfe97i/g4aluhUKilpUVMe4CI+L5fLpebmprGxsbuVT3LcZyurq5XXnnl2WeffWjwpA+kAGzevPmll16qeDObzaIHamBg4NatW5FIpL29PR6P79y5U68rLRQKtU+uQTisndWImO+SxsfH7yadiuwnnbpyuYxwBSXhil6CalpQGurKlSs9PT1dXV3f//73X3rppUV0O9yH9EAKwPvvv48XyHik0+mBgYHR0dEbN24MDg4iP5jJZEZGRuLxODgeMlAqlcbHx2uzRT6fLxQKuvIlIpcvX16i33L3hN+L2GDpvuX27dvf+ta3Nm/evHv37mg0um/fvsnJyXkF7P6nB08AnnnmGfTIXr58eXR0VEQmJyfPnz8/a69TJpN577330Dvb09MzPDw8NDRUOwj2PO/ZZ5+NxWKbNm0ivv+1116b9eCdO3c+uIjiBXnzf/qnfyoily5dGhkZ2bt3byQS2bhx48WLFx909OgDJgDNzc3FYvGVV16Bvh8bG8vlcqz5z0qu654+fRqwx0wmA5mpQdls9oMPPrh9+/b3vve9jo6O/v5+JFtmPfiecP/WrVtd19ULJxtD1fu9ReSNN94YHR3t7+/XSBBugxWRTCZz9uzZvr4+27Y7OzuvXbvWiGtdoVWrVn3/+9/ntrlAILCgjzc3N+/cuXPbtm3354T+H//4x1988cUzzzyzbt26np6exlxk9Zyibdu2dXV19fT0pFKpHTt2vP76659//vn/+l//q/qz8Xh88+bNPT09ra2tDbjUpaMHoxL8m9/8ht7I+fPnh4aGXNc9f/58/UCa+59+/etfO45z48aNffv2ichLL7306quvLp2D0dHRUWEMN2zYMDAw0NXV1dbWdvv27WAwmEgkgsFgOp2eqwbc2tpaKpWampoegmDg/qV33nlnrmltD9ms/b6+vkOHDv3Lv/zLnaUfof43f/M3+k5i9rVlWbt37z5y5Mi2bdt27ty5d+/erVu31l52T3z1kl7t0tH9Xgjr6+ubtYUFtGfPnjfffLOR17OkNDAw8Nprr8VisSeeeGKusPtekS6BtbS0IM/b29vb29uLQnIsFgOOyHGcGuEyArBcLmdZVm1RuT/pfhcAy7IGBgZqHHDgwIFvf/vbDbueBtD09PTLL7/cgG8RkevXr4fDYTgw8Xh83759WAze3d0N5x4JtHrAJhhH98BhJe53Abh169auXbtqH/PCCy805mJE5EFUctUUj8cDgcCpU6e++tWvMsG1e/fugwcPbtq0qa+vD7NH8b7neWgwmJfGx8fvzxzDA0x613QN+uijjxpwMc3NzR0dHQ34IpLjOFrkFpr7mpUCgcCvf/3rzz//XIcZPT09iD1Av//9759//vlt27b19fUtNCv1YIGF7msLsHfv3hqNGpo2bdq0cePGpb0akccee6zBGJjW1tbe3t5Dhw61trZipM9dnnDz5s2lUmnLli2xWEzPVX/xxRd1g0EikcDULfx3QYiJB6s0dv8Wwj799NM6uR90+fLlpqam2kWxu6Hf/va37e3tzz333BKdv5p27twZDAa7urr6+vow2BDO+ujoaD3tjtXU19enS1rMLO/du7c609DV1TU4ODg6Ouq6biAQwEjqehqXRbXhr9AiqR63p5qWKCO0detWfsVSnH9Wam1tffPNNz/99NPPP//8zp07X3zxxf/8n//zb/7mb/bu3btu3bpFxJrNzc2/+c1v9O36zW9+g/d///vfz3o/X3zxxY0bN6ZSqWQyuWrVqlQq1dXVVU+npYg02FdcNN2PLtCnn366uA8eOHBgx44dd38BgUAAEwjXrVv3s5/97OLFi3h/VgD2EtHk5ORf/dVfffDBB9D6tm339/f39fV1dnbi2hZ6wj179lSMLh0bGxORXbt2JRKJWT+yY8eO3t5ejKPDRoJEItHb21vPt2cyGZbtV2gBdOTIkcWpf9A9WcWeTCY3b968f//+ihrc3Z95cfTrX/8aF/D73//+xIkTO3fuXCgAwbKs6t1nzz//fCgU+t3vflfjfn700UdHjhxZu3ZtR0dHR0dHX18fEBD12IFUKrXYX9w4ur8sQEdHx6uvvlrPkYcPHz569Gj1+21tbXdfFggGg4DB1ajBNZL+63/9rx9//LGIZDKZQqGQyWQWOub/8OHD1ctpdu/efeLEidqB9aZNm3bv3p1KpaD1MZURY5fmzfaMjY3d/xmh+0gAUqnUvFBNUjAY/OlPfzprK8kLL7xwl8vn0Gnuuu7g4CA7AU6fPn0357xL+u53v3v16tXh4eHx8fGF7nrp6+ubtaWzra2tYhLWrLRp06Zjx47t2rWrp6cnEomg2TKVSm3atGmuLZdoTZ6enq4Y734f0n0Ehvv7v/974MDqpEceeeTcuXN9fX3QjhW06HFOSL3H4/FMJjM4OLi4fMtS0M9+9rPh4eEbN27ULo1XUGtr6/bt248cOVLRGroIun79+rlz53K5XLlcbmlpKZfLn3322eDgYAUSDks6MIE0EAg4jnM/J0bvFwuwefPmBXG/iLz//vtbt24dGBh45JFHqv8aiUTu3Lmzc+fOhV6J53mjo6PvvffetWvXGsb98xaYv/71r7e3t4+Pj9dvJEHd3d3JZBJTo+/iAkVE1qxZ8+yzz+7YsSORSDiOEw6HW1tbOzo6Kvwc7O3DiK7p6ekF1RAaT/eLACyCU0Xk4sWLra2t586dSyQSs3LGu++++6tf/WpB5/R9v/Eaq3bP8e7du1955ZVNmzbVjj6r67UYCxCJRLLZ7NWrVzmD6G6ov7//+PHjcIfC4XAikejs7KyQgXA4HIvFWltbA4FALpe7n1Oi94UAnDhxos55htWEIQ6Tk5P/4T/8h+3bt1ejVrZv3/5//s//qTN7fR/SM888c+bMGbw+fvz4+vXrZ/W8o9Fo9W8MhULlcjmbzWLIV/1DUGqTbdvbt2/fuHEjQoJ4PN7e3s7cKFYNRKNRDCYSkfu5W2D5BeDFF1+sMXUnnU7v2rWrs7Nz3759cw10YILywoUL//7f//tq8FwkEimXy3v37r1X19xI+sEPfsD9rbZtJ5NJjPfSx7S2tkYikeri661btz755JOBgYFSqXTo0KF7G5KuXr16x44dHR0d2MAXj8ebm5ubm5vRsc0llpZlFYvFe4JiegjJcRxUOmel119/fePGjclksrm5ubW1devWrW+++easR/7zP/+zPm0qlZr1sBMnTsx1GfezmRaRvXv34iccOnQolUqtWrWqubkZfrZlWa2trTXwavF4vKIGfA/p888/f/PNN7/5zW/u3Llz3bp1HR0dkM9169bt3Llz69atmER2397eZbYA77zzTiwWKxQK58+fr/jTsWPH3njjjXw+j/0ujuPcunXr6aef7u3tHR4erji4s7NT+/ojIyOzVgmOHj36zjvvVCene3t7161bt4jyasPoF7/4xfXr10ul0q1bt2AJMeELrViTk5M14vVjx47dq/WV1RSLxfr7+zs7O4GYAMYOrlEsFuvs7Ozp6ens7ERpZYmu4W5oOQVg7969GNdz9uzZAwcO6BJYZ2fn3/7t3968eRMbHBBvIb+WTqe/+tWvVo9q2759+507d4gJRRKz+kv37Nlz8eLFtWvX8p3W1tZkMklmum/pO9/5zuDg4M2bN/P5PPaCtbe3640Bs9Ivf/nL+geALo6wcy0Wi8ViMezxBnoCs8m6u7tTqRTcofuwLracAvDUU09ZlnXx4sVnn312amrqa1/72oYNGzZs2PClL30JqGOstcNc/GAw2NTUhBmAhULhL//yL2fd23X58uU7d+78+Mc/7uvrmwsv0Nvb+5Of/ISF+nA4HI1GUd+Z9fhVq1bN5Ts1ki5dupTNZrnsqK2traurC9M/qw8OBAIAlcyaI77ntHr16ng8Di7nfipsrgeQOx6Pe55XXY1edlq2HG1fX18ul8vlcq+88goL+xUlHlhSTP+zLEvvh8vn83v27Jl1so2IPPHEE7W/ff369ceOHTt27NjU1NTt27enp6fD4XBnZ+es4/4ikcg3vvGNxfzIOWjR47Qcx+nr63NdNx6Pp1KpVCpVKpVgDSYnJwuFguM4nZ2dmzdvrge3d+bMmYGBAQxWyufz2WzWcZxUKrVv375FcOquXbuI2yuVSjDXlmWhrwCXeve1iHtOy1YJ/va3v51IJIaHh+fq/o5Go6lUChj0bDYbCoWwI7FUKk1PT2NXyuHDhxdt3zEB7uTJk7lcrq+vb+PGjVi89cknn1y+fDkej3d2dmLlqB5ifje0bt06LLb41a9+NTAw8JWvfGWhZ/jtb387MTGRz+fb29s7Ojow+/bChQsjIyNIPsbj8b6+vrnWAZJu3rx59uzZoaGhdDoNvuRGPREJhUJYJL5r1y7s5KuxTUdTNpu9cOECFhLbth2PxxEVWJY1Pj4+NDSE2WQLqmQvNS2PBQBzY/r+rAc0NzcD9zs5OXn79m1Mu4dSwW4s7Hg7ffp0/QKQzWZ1c7dt27t37y6VShcuXMhms+Pj49ir9/TTT/OYM2fO/OhHP7qbXwpqbW199913EYl++OGH7733XnXQPy8FAoH29vaKXH4ikWhvbwfrd3d3zwVsJo2NjV26dGloaGh0dBQ7xbBLU8w+7Xw+b1nW0NDQxMTEjRs3EBdt3ry5nkJNLBbbtm3bhQsX9GlFxLbtRCKB7TWO49y8efP+AUcsjwBgPZbrunN1W3d2dkL3ZLNZ3/fD4XA8HrcsC+betm0shhgbG3vsscfqBJAGg8HR0VGsUkTeOhaL9fb2Qsen02kwk96YEo/HwbV3OR0a1TrQyZMnF+f/zAWvR9CJTEvtM7z11luDg4PcrAqUP3du+74PGQiFQvBVfN9Pp9MTExNIu9UpAxs3bkR4FgwGAQrin3K5nO/7/f39v/jFLxby05eQlsEFsiwLyyAuX748Fyts3LgxHo/n8/lMJhMOh5PJJLa+YT9csVjM5XK3b9/OZDKO43A9aD10+fJlOAyxWCwQCGQymaGhoXw+PzEx0dbWBse6r68vFothfXS5XI5EIt/73vcWPajn//7f/8sJC2fOnPnLv/zLxZ3nn/7pn2YFtGEzZO3P3rx584MPPhgeHgZnI6aCwIRCoenpadxbnArJALyGSDiOk0wmN23aVCc+PJ1Oj46OAg8HtQUxyGQy6XRaRBYK6Vs6WgYLcPToUayxqDFzHFntYDDY3t6OOHhychIay/d93/dDoZBlWfl8fmpq6ic/+cm8US9p06ZNnufBDQgGg4VCIZ/PNzU1JRIJBBjYmR6NRru7u+lvLEjGQORX27bvHlS3bdu2ueCc83L/+++/PzQ0hKUhWCjmuq5lWRBL3/fRSA2OB45NROjDIBEH77HCjZyL2tvbA4HAyMgI7pvnedhIgvvguu6qVauGh4fr7DBeUmq0AAQCgUQikcvlhoaG5nIEUTZHTi0SiZRKpc8++4y30vd9JBmQuHRdd6FA3y1btuRyuYmJidHRUWRRRAR7wVC6B+Y+HA4zw7hQp4Xw47vcJUxaRMwAevXVV2/dupXNZrFUGBqkXC5jix4cUcuyoKG1MdGl5UKhMDY2hhVMdW5ka2lpyWQyuVwOgsTFlXjt+35vb+/9sHay0QKwa9eufD4/NjY2a2qlubk5Eolg3RWKAGKG77W2tsJMu66LUigi45aWlkX0be3bt8/zvPfee69YLCIHUiqVyuUy9GKhUCiVSpcvX+7o6MDqoYXSM888IwucJlKD7iyqGzOdTp85cyadTmODqoh4ngeBDwaDUP/gflwnZQA33HGcQqEA8+W6Ljbz5XI5xE71XEB3d/f4+Ljv+4jRRQS7zLDKG9ihZY+GGy0AruuOjIxg2Eb1X9esWYNOIuB40f6HNVisBBeLRagQ1B0XPartwIED7e3tL7/88vDwMDgDoQXiDayIvHLlCroUNm/evCB19ad/+qdr1669J+0Ef/jDHxbxqTNnzpw7dw41YzGW0/d9ZJDh2+ARQNOD+6FxoF/C4XCpVKIXBC90cnIyGo3WuR/Wtu1QKIR4A+u74/E4TlgqlWzb3rFjx5UrVxba4HZvqdGV4HQ6/fHHH886XgpVmEQisWrVqvb29mg0CgON54RnCU6FMfU8r7u7W2ctF0rr168/c+bMpk2bIFdIBw0ODn722WcTExO5XA6RnIj8wz/8w0JPfq9WaC2iCvHGG2+cPHlyZGRkcnIym83CoOGH0OXDDQRmU2t9MYKB3cMgeJuIkZAhrfNKUMlpamoC36OWD4Kx3bhxY0dHxzKC1RsqAI7jjI6OzmX1ent7MfCjra0tHo9j2CrLNEjG3bp1C4m5Uqm0fv3648eP3/1Vvfrqqzt37kT1HnpuYGDgypUrKDmhulmxMqyR9Nd//dcLOv6tt946ffp0JpOBY0MN4iniHnn6P/TWsGQ7HA4jHRQOh4PBILKlmIxSLBbr35jW0tICqBK+qFwuu66LbjIRKRQKSD9s3rz529/+dldX14J+6T2hRluAGgPDUqkUngr8xXQ6jfEH8ILy+fz4+Pi1a9cmJyenp6efeOKJe8L9oJdeegmJCw1bR0zM/9ZAUy8pLQii9/7771+8eDGfzzuKwuEw+ZhSATuAjALkAT6SiIDdxUgFrAQlJJ/PX7t2jT068xJneOEr8BonRDYvFAoNDw//6Ec/WkSq7e6poTFA7bmF7e3tgOV4npc3lM1mkSwrl8s0HTt27FgoAqJcLl+5ciWbzW7evHnWuPbEiRNPP/00PB90V6H1RB9z9OjRewsKqriAaDT68ssvV2zdOnz4cJ1nuHnz5tDQ0PT0dMVMT/jfZHod8iKfBvcSEE4GA47jwFOHCwRfSESyhoLBYD2QoZaWlsnJScDaKZBgfRFJJBKu6547d05EFjrr5Z7Q/dKw3Nzc7HkeKjIiwoIXcFpackKhENek1qaPP/74ypUro6OjyMfBD37uueeSyeTBgwcrIrnu7u7z58+fPn366tWrYAjAkIaHh+fFF9w99fX1oYEhFov9l//yX/Sf6oTRZ7NZBJTYmy0iKJajmEUnG9yP9+GNsFyFI+kaickIWZbV1NRkG0Krey6XO3fuXH9/fz2ZrmQyefXqVd/3aQ0gdbFYDCqm/qmj95waJwDRaLTGfvZwODwxMVEoFNra2nA7oP4LhYLm/rVr186K8ieVy+WTJ08ODg5iH7DruvA7We5B9XdycvLSpUs//OEPKzJ6+/btQ4b0jTfeGB4eHhkZQQwAVVcn5mIRxMkuHR0dPT09RF5gGmE9ZxgZGRkbG8tkMsiYiWFiuDdAOjCrA4AtPSKwONwSCABylyIyPT3NlAMqM3gTBfjTp0/XM1koFotFIhFknPGjkOmGsUomk+3t7Uu3irw2NUgA5h3l5zhOLpejrprVWerp6anB/YODg6+++uonn3wCKCInc4APUH+BTfc87/bt2wMDA0888cSxY8eqoY62bR8+fPjVV18Fros93V/72tcW9KvrJD3Ga3x8XEN6enp66km63759G86btpau6zY1NZXLZRHxfZ+qBEBaMDoynpQKyImOm8UsicGtw9MhvKe6NW8u2rBhw8cffwxUBR4KRo8Bwp1MJpdLABoUBG/atGleLDhuOrMxIoJFhclkEk2lr7/++lyffeGFF/bt23f27FmsNwyFQjFDiUSipaWFjdtQe1CBIyMjzz333Fw5jba2NsDjlrpVUscznudRWTiOM9eIO7A1qFAopNPpdDqN2BfYGxRPcABNAVQAGJ33Gf0VIoIyiDa5iBmQGKCbFAgE0PfoOE6xWNTz1mvThg0bWFbDaWFGpqamGuBkzkUNsgDj4+O1a36O45TL5Xg83tHRgaIsxlAiHg0Gg319fXNBHl544YWXX34Zih/lYREJBAKoG0AY6N2KSLlc9jyvXC4Xi8V0Ov3yyy+HQqFqOzA2NgY4+1ydYguiuTzAit02GLOzatUq27Zff/316qtCiwI0KHgd5cKJiQnXdXWAC58HRhUCA0mAIoeyZ8KHsAjeIsoSoBOO46AfAy8gSCIyMDCAvtZ6KB6Pj4yM4OLx1XhG92peyyKoQRaguoW3ghAMRSIRKANkS0OhUDgchh2vMfL29OnT4P5kMon2ebSSQXOjHomUNl6gzgBfCBWGH/3oR1evXq04LSbwBAIBxnnPP//8ou/AwYMHZ/UDK3AcsViso6Pjscce+4d/+If169dXHDw2NjY4OJjNZkulUjabRWSPBgkkDMCpgNwQ4YMyFkecMwWJP2F2UKlUKhQKhUKhXC5PT08TPSFGNggNghHAeTzPm5iYqH9qKh4u4ScIPDzPQyfxAu7mvaMGWYB5QQHYVdjW1gZ0LlAoiJaAYawxxBgtgpjQBHMBj19EoLwZ5MG+44CmpiZoRzzFl19+eXx8XI9nBBbD930+myeffPI73/nO4u7AtWvXJiYmwuHwXOkOjGQE2Ab9EhUHXL58eXx8PBAIAC4FhySbzdJlR74Sgs18P9QtbkuFCSqXy5gUhI9jlCfUhIgUi0VUf3HC6elpWAx8Fh4RDrt8+XL9Yy07OjqGhoZQAtPJ1lQqtSzzsxohANFodN4AAIX3SCSSz+fphoL7RWTWGSegmzdvoukOTw6JDg04CQQCsN0i0tTUBDwWK7uMN0ql0ocfflgqlXp6ehB7RCKRDRs2VACAX3/99UcffXQRNwHw90KhMCs+9N1330WrSjQaBTSj4gDUAbPZLLC0otL5KJhAwQPpAMFmhgdODpb+QiSgIGAfML4T77NQQHeR/hL+C9eRSFJ8RT6ff//99+vsvm9raxsfH0fsi4cCP62jo2NZwKGNEIDOzs7r16/XOGDVqlUikkgkAoFAsViEsoF/4rpuJBI5ePDgXJ8dHx8HUBQ+JXBsYmrveKhM/yHwYhAGwUBnoOu6mUzm4sWLQ0NDra2tW7ZsQS9YRRLm4MGDixMA0m9+85u/+Iu/wOtt27aBg4eGhrBjFM2i1Z8aGxsj4wIhwtoWWhoQ/wSDQeh1NriIyoDRLSTiX/s5zPrjpsHJqUDp4CMwnpTSUql07dq1+sdPdHd3f/zxx4jFUe0pFovLFQY0IgZobW2t7QJhiGQymURqDA+Y+bjam3YGBwcJX6kI6cDucIXBCkT8g3WggSAq+F541dPT01gfNCvduXNncROE+vv7RaS3t/fv//7vA4FAR0fH448/DjcG1g9z92fNe6bTaVoq/pxisYgEKIc/I2oCcB/ZGyZ/SqUSEjhQ6jCYGuPgqTEzTFZSMBCVISbGO3DlYX/S6fS8YR4pEok0NTVlMhn4b4hnlgsP1wgBYEF+rgMQA7W1taH9BY3CyF1YllUD83Ps2LFz585lMhlocbyps9dSBWWhVmNKhGIzPT2NcDCfz4+MjFSHxaRsNnvkyJGF3ocPPvgAL/bt21cqlUZHR5k/IepYdyRrwvAS4hTgu0OSWeaDh8P/ooaFrBHL6uC56elpxs2ImPlFTU1NcJbEsDvvG10j3mp+Vy6XW1DLKKwcMrC+709OTrquuyxjsxohAENDQzoLWU1QfphOhSODwSC0bI1G73379p08efLWrVtjY2Os+1LbiUFfVaDeIRhEQTKhgXMSKpzL5QYGBmrAs1599dV33nlncTekgqanp+GZwCuoPgA/h8UpXd4WEaZomBHKZrMTExO8k2LsQC6XQynKdV2UjQF3BeAKKCwRyefzrDNA2BwDmWa4zEEScMw8z8OQlTp/ciKRAPgFV44ruScLDhdKjRCAkZERrUuqKRKJsBzj+z5dc9u25wK9tbe3/+IXv0B7x/T0NOaaQNWJCFxh1PPxqJDiQHJQ2wTEG2KCRUQC4IDx8XHuh5yV9uzZ88UXXzz11FN3cW8km81GIpHHHnts7969bW1ts2ZCwCW3b98mPhzdC2BcpP8hOXBLmGfEz6enJyJwbHgM7EM2mwUv2rbN2rAuCYsx40yGoogLcUJNrVAovPLKK/X/8NWrV8P8BgIBpD3gIjaYln88OhxNZKARFXmeh6pkMBiszoWLSEtLy2effSYira2tSAF5ngflB5gKp2jh8eAYyAPeb2pqgovsmV4QhAT0bovFYqFQGB4ero3RtW37hz/84b/8y78sGik9Pj6O+G/Dhg2RSGTW9hdEuuhjnpycxIvx8fGJiQkEAIRYgqeJhxPlrsCo6jYjJDdxNwiWpp4iKg5uob5XriEk3zgAiwNU6qH29naIHHoPkOxe3D28G1p+AUB+GnwGxY8HnM1mt23bVn38mjVroKWam5uBVkBgB60GJwcPG3cWYkCTrQFComYigBw1eQVhcT3NH8Fg8OjRo3fu3Km9nK+6tbdiq000Gp2Vga5evQrjNjU1BW0NHwbC4DgORrzArCGkAU8jVHAMEQbCTQuskIhxsRzTeI0DbNtmrQBmHPcTmgXoEhyDkstbb7017+3S9w1ShNzdXPsflpSWXwBQvQJuB7cecPNYLFaNNDx69GipVELKCCgdFIbo0kCBsVAPXsGbeMzIF6EILyLlchkdgwT94osQPxSLxaGhobmmd1XTsWPH7ty589vf/vbEiRM6ebV79+5q7r948eKFCxd0hcS27Xw+/9JLL1Ucee3aNaDcAN8AuhtxKpQ6UroQe4y3gP5GcYBAfLyGakAWlbVh3ChmfvjVOABmE80rgGA4ZmYHgzQYYVjmOqm7uxuFduqv+j97r2j5+wEACgfsEYhovHno0KGKI4eHh4EGZaZPjG+aSCQ81eNHmIOowJeKH0di5hzjSOBbxMzDgQuRz+eHh4fPnj1boxJXQUC2HD16FB9BA6cObQFnQFULDhvRELiAM2fOFAqFo0ePAsJ09uzZsbExGDfYKzSXoMccfA/ZwEnAzZ7pd+GP0ppeT4Jgjs41aFlWkUWEaQm+ZkoUt6hcLoOJi8UibMWZM2fq7JqHrOKC4cHWeZPvIS2/AKAJuLu727IsBKCO46RSqWr1/9xzz4Fj4Hey8AmWhXZEzAeDgOcEPee6LtShhkmKeYoMFrHMhwKAYGBkZOT06dPzVvuz2ezo6OiNGzcKhQL0Ijs58Y1I8ONJA+gBu+84Tnt7e6FQGB8fL5VK6XT6lVdeuXTpEoaCAfNDt56N6mzYpbnjn/gD6bTARQGfiQgChqAZ0aPhojCnVB/I0LPAjNPqUBgRlxhNVCqVBgcH6xQAEYlGoxjQOz4+viyY0OUXAPRGYBAiGM73/VmBn4VCAdwJMIyYHD/+igQ2cRAQA5b3XdPVwYcHfQbWpzEB8hFsAQgQnG944bX7MMFAmUwGnj0gyhBC6EhIIBQ50UrZbPbcuXNwLRCV4lSDg4PpdBq/FNyPy0PUCFQf3BimL+HqQPLpAoka+CPGRbTU0CuZGdSKgZBQ99O9hIbWZ4AlaWpqohspIpOTk/XoCxCWCYTDYaiPQCBQo2t8KWj5BYBVTHA/Xm/evLnisMuXLxO+yxCNqsv3fTAEXR3m1Juampjx4FQc5vuBIMCaJuhOJCKp9uieYjfRXHP3s9ns2NgYG6ngsuvML2oLmUwGP8GyLCDtoJWZnsIoUt/3x8fHUfyi+043nW49itZI+IoqCIjJJlO745J4gHbJkDUCugHv0J54po1d33MQIy5k8FyDoYBgf/jhh3UKAIS5tbUVRqmvr4/lwsbQ8gsApvbl8/nbt28jse15XnX2c2hoCHwDRrFNAyv4g6zG6j14l5V8esbIhMDhYXpRTC2Gk5Mx+gYROTMnyHy/+OKL1WA1mAhWGFwDNxJVYcCbGL+M+gOT9/hdYpx1WCp6HTjh9PQ0LAl+I4SZXj6cwEAg4KkOYMQGUBy0mbgzoVAIPwc3HPEGVjHQOsHFglmDdwQ/SkxmiVlRMdYYeX30UtczshJPBErKsqwaTbNLRMsvAK6Ze/XZZ5+l0+lCoTDrOgaAc8ATlmURpq8ZjidkRk8UMgJHkvsx4mZiYgJ9tHDWEWBAfnK5HMDx+Bf8gfrAG2+8UXF5t27dgj2BQiUDMRzXmAIRAf4eXpbruq2trUgBicGlMbUFFmEKi1l8fBEujIpAjLTgu+jOUfJ5Z+B05XI57Q4RHsL/4uJhcwKBAA5AHIX0HWNlGMx4PF4oFKanp0+dOlVPXQzzvQuFAoYlNr4xcvkFAM2KGBgKHfz973+/4hi4mNSjZGXGu2KCXQQATKjhv+ASR2F6xTgMsVgM/SWMSnViDl5KyUzOEeMfHz9+XPtCly9fRmZGF5KYZtFpdbIp2CWfzycSCWz7wuwQ5qygfeEg6VQmWJ9VW9d1mftnksc1S6X4EYgBtQauMxqNlstlBBIQJ8ZXjgFHweqC73ErxCSXkCrQ6WZcEqwoSijzjm0dHh6G5FcUZBpGjROAWSehIuEDHD9+/6xwyHPnzgXNYHSN6sFzxUNi7gKczQcjpvMDD49JErgQaLnkrSdOnfUE5uYYnKXT6QsXLty4cWP37t0bN24cGBgYGBhA+0g0GiXUgvJWMtMIQTh5MBhEzqq9vR0pYIxIwEUir48pPTgbYd5kPga1wWCwubkZZVTG0JZpjhEFRsQ9ZBjASd3gVzHWiX30zBkwECLmHHeY2SFoHLhkEMtSqfTyyy/PKwCRSARJYRGpv95yD6lxAjDrmnIMYxKTAo9EIrN2vt+6dQt6DlUwVzW/gg+AaRMjGAxzxYSDbBHGZbBoICKMB5CRwPPzzdAyEUHxlRfjmjmNH374YSKRgCIEyhrHI0OPiHxiYkLXd+DrI0+aTCaxj6OlpSUQCAALCH8Mi+VEATQoRZRwUd2JKE7BWxNT8Aa0Fr9ap8Lg4zEfJcYueWb0PIIEICBsMw8C6elCocApxRAbGmHEG8hBQXGMjo4eO3asuq6nadOmTefOnYMAPOR1AG82NKh+PCLS3d1dDQg5deoUqzk67ymzCRVdXvwXMsOcCd0Palb9WRh0PgbyUCgUymQy2kYjVpuengZzMwtpm3maHR0d2LHHCUU4IUp4qMWiaus4DjQfeB0ONP0xgnAcA4HW8FjHEN9hGQvBg05GMXjlDUfOjUkz1/QbwIDAIsErY4KV2WRARXB5qMfR9YIR8Dxvamrqvffeqy0Atln6hjuAwKzG8fecGiQAyWSSEZVO9DoKrek4zv79+ys+WC6XgQ8rmbk0OmNtm+HG1HB4QkzkOY6DLAez76Jg0shsWKY/hkeK2RgHuIvruk1NTYgWKsb3QfejdhEMBhOJRE9PDzp7+MMHBgYQXgeDwdbWVmz7g6uNBAtBbFTz5XIZvOu6LtwhKn5oX6aDKRg6FYPQBYkm8ChRHgg8mB+j9WNCVoyRwR2wzPgJ7VXSO4LFQ3zMPzU1NeF2QYzffffdXbt21eAN/Dq8jsfjD6cAoMgHtsAIJ7yPPQDwHYPBYHXn+8mTJ8H6rplpwzwGHzxDQwS7lBM+UYgcnhlYgUoRKhBPFDkT8D18dATWkDHHgMk4z765uRk7CqAdQ6FQMpmsyP2Fw2H4OUA3AZcKO4OQETob867RGgbdj84VUXGzPXMuFa9KVKuATjrhXmlDR14X04xCb4rjJByzmRymL6i64KlfEJQTT8GEFf7KeAyx3Lzj/7du3Xry5Em8jsVis47OXzpqkABgxyPg46VSiQLAqTu+Gr5Aun379vDwsHZpbNWvrZ0BcBVy3hUZGxFhqQiSwLQGtCBrxiWzPcUy42BxHp3DwXRLPNSgaeOCCBWLxepi/vnz56H+MUyK3jwuCeLnOA5cfy3AokZpgC8ts9hCjOjiNeQWwslfyrvEXGqFYcRSZH4LvpSZIn3DtdQh3uA1VNdDoP55bxEvzcUVoEceeYRDkxofBjRIAKLRKOMtPWcKkR869Pbu3Vvxqddee43jcpm78M28JxzDkU9QaRVRAbI6YqJPz8zf5VP3zdIUrRHJSWRKWAMYAZgstCuICJ06tGKxubtUKp0/f/7KlSsjIyMA3mk9DeSSq5bVocY0NTVVLBZRGeXBTPviyuGgu66LOJuGwjetjI4Z+VYhMwz9kQLi+cHxMKHoQ4JY2mamhmeKiewkLpl15baZ3AGtj+9yDO5weno6k8kgdK7BHvv37//bv/1bmTnxrjHUIAFANIksgYYzEKHlOE711HIgsSqCPNeMsMTNsg0GC1qQGWud+BcRYiErHgYY3TIjJMTIEuE0TDeJEUIIMDNRKI0hK3Lt2jUgMm7cuDE8PDw6OvrZZ5+h1I2qMz4SCoU4xJN1XF4kvgvnQQzjqmENnpllZKkpQGLm3fq+39zc3NTUxLRmhSngD6edBAWDQdTF8LsA0sRjss2gISA1PFV0k5mwIlweYxURQVX47bffrg2nfemllyAAD20lGC41lA1iJtd1m5ubqUuqoSMff/wxwQLaFaHms9UEKCp+7Tbg4zpoAw9ls1lg3GXmZhQGx97MZYlQmdPT0xowEzRzVnT24+LFi2NjY5FIBAtxmVNi9h1eGSrK+mpp1uCB0LlCYgppU1wbITeMSaCeIWMMjcCjtBW4VLo3jJh5tyHGQFJQusQEzY7Z6cLIGP49k06sfuhCOH6I67q1B3qD4vE4hhvUxU/3jhrREGOZuSOMrlARw01ESbJ6/uaVK1fE5BbZueua9sVZk6oIA2jrRQEhS6ZHlu3nOMA2VWRm0Jndw1czYsZnkWMRY+XBbeCebDZ7/fr1CxcuXLly5datW1zvJ0pN2gbJI6YUhQIF/Hi4cAg9kQiCqEAvosoGRY64E0aVQS1+O97kTeBsGN4l5kB5bWRZ5hWYkoKYwSCQy6tvIOtfvGMQV3xXNputBo9UELv/9JKeBlAjBAC9UeAwHRXhSVuWVd0Nzc4YHMaqPu4vng0eEr1G3nEKiZhcB/ERyL2wzITMD65qampK1xDASQRBoO+EeQ8Rwd4hJBxhH+C+T0xMpNNprlHxzQhObaMYb9C/gsfF31Iym1vRCYBPAYtGp982M661zrZVv7/OmOG0sGCkkhlC7JqhomA+fC8AF8wQ4AyW6S+lk6PXL1RoJQqh7/tcgDAXPfnkk3jhzCzOLDU1wgVCGQgckM/nKQAtLS0a3K/pjTfeYMiIuJkMzcoojtT3C0ygi0cMduGDMWHPbwT7wtWmh80kDK2WVnuOqcexbsqoBpcHgA05HhEOzsPGLlFmwVGwShgB+GB0Zhh1VFwDWZyeN95nAEAxg59pq3kwjukRcxVi1DOLrGe1hGIUCi7bVqg7+JaMynAP4ZXhrs7bKtne3s576FShr5eOGmEBbt26BahzJpPJZDLImaRSqY6Ojmg0Wo399DwP5SHH5L9Ri9G5PLolOnjVMR+DBF0hEjPPw1OdMfT4mWiCwLBZVlRSz1NlUThFxDzze/ECf9JFVu1FOKZvnUC3WCyGwXW619Yx6H8xW6ZxVUxoysyMJ64wEonE43HA6Xg9zDvx23mdQJjz5/MrkBRCeKPjIs8g/HQKjo/PNksAwPoQ+HqGpmBaFuDi87DUvaPG7QcAKsY1ndeYaIKHXXHwu+++C/gaFRs1EMkylWDPTLTUHoU+QCtarWsRzzHI1jZBTNwC3BFddkfB+l0DOBPjw4jp/OJFki1oBJiAck2JFx9Hggh9nmBBAAR0qYHqANdAI9PU1ES0EtiutbUVKAbWBIJmGL++JBHJ5/NIxKF7BoxOta1Fix/k3jHeXttkQnUFQFRxGj/n6tWrtXNBBw8eBBy6kdWABk2FQIoazwltjdB2s06FHxkZIWdTAeOp+2p+lhjdA/tOZ4BpHM+Ubxl3UkJ4Nup4XBUzLaI2ReOqGAuKyiF6pjwEZU/lyhDCM9lYOvEi4jgO4ECY4InaAl54psGKrotnUMrw7mC+qF+RNkHxmHcAS+xQl0BFORgMAuoH7iSODV8Hx6xkOuLh1uPk/AmOKaj5Zp4hE8F0VxhRUNIsy0IUDpxfbSaheGh7stTUIAGwLAuPMBgMAhEAppl1ECyfBG50yQz80WGWZaAp9ILIqbz7msttA1csmbG7xWKRlWPty+rygsxUfkz7VJiLcDjc0tJCYeZUWpk5lwF3ABUAbhmCI0T0PxxFpI9QdoX/UDIzccl2jNGBpcMNwR3GT2CdjlkmXAa8GsQYGjbL28sKoO43qLj/lFXeFtgQT+XfmKgFrrZYLJ46deoumGhJqEEuEIsA0CUYBw3Ht+JIbGC2TFMvq5vkObq/dAnYwsJgQBT3801LIWEYQ3MSNdqx8Sxd00/M2MBRW1X0d4mJLvTMBXoIXPBhm2UfotZQi2pZFMOvtoETs6hH+eEtKpkWat4NIDc9g+ShuUPvJaoBYiBxxDCLgpO4pi8PuTJme1CPgzH0DOhV1PR5/ezwcHEAZAPHEN20LIDn2tQgAWBNF9mG1tbWeDw+68LqGzdu0Mjq9y0D7aQ/7cyskXmeB30phjngCPlmPwB6YnTsKybn7XkeXFuIE9AZOIwT17TPw6/W8R+DdTH8hKQ+illoA0CCiL4N6z4MuwG9psCUy2VcmJjcKLGZ/BZemE4JiCkFos4AdYBgN2jaYhhXMISAi1UsFjGoOR6PI07TIZZlMA6sx7EPgQfATkJQfdOCjMFntfmEoKBkMjkviu6eUIMEAE/ONZ2yGMSADRSayuXyxMQESsVQPK4amOybSjsYyDXdqK5ZhSsmbYLHY6nNADTu+l8G2WLaJvFFwHhqrH/R7PdkqpT1GvokUpUnpWni9WsHBm96apUBG3d01CvG5uicrK+wHp7BksDiQQGjj1mMrEIR6EDImVkdw9UiWWwZtDajFIRYtgIjiXE1WZARY41F5Pbt25zawnQqCnm1+aSzsxMCEIlEHioBSCaTiUQCFdPm5mbcnerDsJdXTKcf/AEdaUGH8b6LqQxQFzKKtU1jZIXWYf4Uf6KV4AEcH4JH7pqRKo6pIotRt3iNryO/lstlBLj4q2UGWCCvRffJVcPNGTd7ZkwLEBaiZnfir0zmQP7RjYAYieZRtwqg+QsZJ7qgYjxS3/chJBjKBNWDSB0N75R57lbjjxJVK2Qbg2+AepgSh+oNwzDa5xq0bds27JJq2L6wBglAKpVqa2vDQk/UUKuznyKC6FDriYrXuuAColfDSJddHWA+fyZuQufOtbGmAXFVSw3IV92xlBzCj8XkzgGgRw8NnG8mc5Gn4m8UlbwHv4LjmY8iwsL3ffpCvumeYzRcKpUgACxvQTW4at61mI3ZFEUxZsE1KCOsZsP7mLNLrJGobKaY7mpaYEL6wN+wKlgiJqZIrJPI+kHMSlxD+FAJQDKZxGZSuCus+1Qf2d7ezhH4orxb27T5IUCEJMDDxmP2VWs8UxY4Jw7WWTw+BrrsJERseFS0PHB24cUSOmGryijNBTxmTu+hMqYZEYM/hTovmRlsSMjgGvhjg2Z4sqi2KbIjvoUK2KvChzKziXQNXH+aDt4NZtiQxnHUaFQawKDqpAPQqKhWyHBcXyQSAdO7BpRlknn/z+mqZ+t9g6kRArBx40bkNLji01MD7DWhN9wxw9WIYBMTBDuOUy6X4WAQXYwD8CaT7kG1CBFETwBODtU2mA/bp0UEmUStKdmMq1MxdEsggczVIHyE54avgxYXE6lTkVMw4CAxuqW+hzQiZw8Oo/WjaGElAlQAnCVb1TrQ3SZmDwh9RW27mOzHp8DNTU1NOv4G0YmicmFLpGUoaGbDMB4Q0/jrVoGF7gdqhAAkEgk+tnA4XCqVxsfHZ1UGQTOmk1hFDbMREUTGopqJRdl6zVUAWjKFimQFPYQK/c2MIZRWaOb2OBLULZFtvqmzegpx7RsEh8YsIOcLhwHMh++CsNFPg8DgrxQGpurxE3TMbZsSLEN51xTIaOgYOnsz0R/0lEqmC16M8IsyUwy64PywDOybJgreK1oVMZEP0022QYB7nlexdrYGzTpH557TkgvAzp070ekbi8W0YzMrQW3ncjkMR8Cbrpm3IQrhA2vAp4tATQMHkPTEU9S9rVNTU/ShxewCEvPsITB4bSkMHJ0B5o6oShl10GViOMGcCYUBksMcuWNmCYoa0a4T/5ZBWzDrZasKnWtKJeTCigDGNROy/JlYHVoe6At+C05SUjM44NAzxC+VSlztiHidvzqfz7PNkhgk5qxgJMvl8ujoaG0BIN+vX7/+woUL83PY3dGSC8DRo0f5ePL5PJbazroKV0QymcytW7cwL9t1XRh9IrFs04INOAA+YpluFTxLx7RuMFAG2zF1aJkBrvw4XjBDYpvGDmp6mhRM5xQFd4E37HkeHBimlRyFmKAxwffqb7Fngtto3PBbkBJFzBNUY3x0Ads14DZbFUZcMzwPdga5IPpvnhp3VVEQCJoZ8TiSkqxx1CXVJ0CHExqKdS6uYxMFU8fFzFsLi8ViEIDF7aJdKC2tAIRCIeYEaXCLxeJcA8NGR0evX78+OTkJB90zU654K5lngH2AVOiMPk0/Z5Wx6V5mcjm+kScX4xFxUApiRyTv2C4jIvAEdO9S0LQKVCta8CJY1jYtbJAibShEDRwPBoMwgJapBDtqqiluI8t2tlphxNDFMxvvZGa+n9fjqwI5mbhCMi01E8A3cH/mfBy1dYoPgskAhEC2aTX2fR+RjOd58zY9xuNxDIZoTCJoaQUAEg9DyUcCONCsxyOk+39XZkAEWnWJyRKCP6ho+T4LTJpoQ+i9eAoCTdg9rhbnhBiQ9Vl2ADU1NRXNekammFgswzGumRFCTuXsWzHqjc6G67pII6KLnxl0nkpmbuqFWUOrEKKXQqHA6fBQ+bZpacdJKtLBPHmTWTksMyWHakXUyETqEZ7HNulRmZlipqZH+ouRxrxNj4RUPQyFMAwFAAiMrvxcpg3dVdh4heSaq4a2ykwMJtUVmYNt757B4fhqayKz4BW5CP38RITbtWwDeKSjTD3N+lpJjdSFyaK9gpki4l+UE49/OeuTdkDLM9JlxDOTI1GQkpkwb07mQswKBQ95Dpq+XlyMYwY9iLGQuAx9Q3RFXEwSwjMTzXAeWg/GEigU2qZUzACDCoJe3LxTUqgc6986fDe05DFALpfDRjdEt6gWzXokusip58iI+KuO26Bo4RzzaTHCdlUJTMwj9M0oHn6dpfAtthmERn9aVFBLeePFp9NpJluAc/QNBoGOCrvURc1OZNoRl8fxnY5KsCJEBr4afyWr4QCEDZZZ6OSrtk8SD+Z90BUP3gdctp6iToeeV+6bxWSuKU4HzQwLel+WgspBHmj39Fe7rjsxMTE2NlY9AY2kk3sNmJS45DGAGIjV1NQUJuToh60J27Vs1erqzITTeAYlwXfoKEMliwoBORI9aNqptIp1ZmY5ke6wqpAqjpmk4ipoqnaiqG5xvNZ8YqrUrhloDnQAHip/gmsG8cJewZUqqalsrPQhGEAfDOIEqlX+LvI67wPMkcycJ6BvKUtXblVNF4JdMg3K1ZkDECp6OJVlQCi+QaEzDeCYRPDg4GANAdBN8Q+8APT29kJVu657+/ZtIN1nDYNu3rw5OjoKhQfIEJ3XisiVD4/uAc5vq9QkPkg3GoKEUhFiDFbKODnLNd02rqp9MkMC+RHltdMJQZWKIDbtlTmm85AVX/CZp0B+uEiKEI/Bm3RUmBrSTpH+Oha5dBXPNjUpyiq+hQbNUxUDzwySgczw/rtmcTI/KEaQaKUts0+ppPZM8hbxCfpmLnwNntGjzRKJRMUw1ntOSysAqVQKd4Sln3g8ztlpmi5dupROpzniPKhw6lr9U6Hi7vsKioxn4JiOXsuykEbgGbSTYJnhh3rgCljWU7gAUTlHKmyexDaDseBYa2eMlofpGhoQOFpaQyNQcdQEUvxMuI74IL7CN+1BtoFaiMrDuKpjTkytUFfTcdMQluB3scCCgxG54jzE82nAD5WF1jLVE5bwwjMDdHFCBmO1BUBbgFkBY/eWllYAXNdNp9Pt7e22Ka/IHL8K02GZX/PMTAemnxlmIeUPxwDcw8COUZeIoORMtx5iw1jTNhkhzXb0i+gncGUDhdA3oxSZdNI+hm9GixJd56rGS/SjeSYNT7deuyi4MGRaiWe2DBxII5FQecA36ghH19FsBWB2Z+KReOe1uFY8Oxypk2/UEZ6a2I6In2qedRgaH4QQltmVVnsjvJ7bhwVKWuncc1ralsixsbFbt25xPpSuKVYQlG6FpvFUr7qo/AlzC47CCRMHBlODcMKZWR8tqY4tdD+Jcid0wCozQw4UJfL5PNxc6mkxuhN+uWNQdLYaDiVq3KKtlsegJihKusBJemico7L4HJ6FMwQCATjr7FTW1w++wS5u9vSg38A2g8YsA92hUcWPBSAUrI93HLPEkoUdaDQKJJIcoiBS/FH4K/psGM/U4Jl9+/aRQ7Ccb6FctyBaWgvA7ARrh5ZlzeoCIVCWmfh+erFMMMOaoxhMJWebgaGE0Xsm66+z6STPJEOZ0aP/IwaSAAXmqJqRqxapUyx1HS1o0J2ignKZmSShe0ZHn0paRyCeAmAyeHVnljswqpH2R9Q4RFGZU14t05F0+fAptq14BmCCAIDBsahUEh+lZ7LDtho+gF/Bq8VPZhHANkWMeSfgapmvfeTd09IKAP0BMZqppAY7VxwpIplMJpfLsQhFjvRmVnAYkop5fiU1YlbMCLSKlLY9c3eY1s1EvJBdOOHDNXsGXLWNggJATLJ2DCwzRJZfDc6gLyFGbhFAU3MDf1FSsyRcs/3ANf0o0OJokwc6A8bHVZVaxjw0R+xoCQQCQEPpUEGUy6R9IX1jGX3x4iuEraKC5hmQCG8+vp3zO2qQ4zhw1aampua1GHdJS+sCOY6D9aPj4+Moo2B4YPWRsVjMMckyx0DEdGWRRD5zXRfN4FSWfN6aFWyVCK/Qizr+49MVNRCFes41KCPWgER5KaLwAjpdSJ1dMTTFdV34EoTd6xiGI1MttQzGVpAQ3lvfrHVhhtdSwxuDwSAuuGwWf4hqU3YUfIjRM0rLvpkiQUMqM11Ex/RPojnGURN5mQ6yVQmfP5BRyqwF+7lYqM4jF0dLawEclfpob29HCmxgYOCRRx6pOBIOMSqgHIklZrQBdYlr8vFTU1NQ254ZF45kBVjKnzmqkj1KWpYI4KF/otM+NBeeSREGzdJSMUVZ/kb9kDjNCmQbrI5vOn19g+vGeJhyudzS0gJNgZDAMi0BtmqP9M2CDw6tgNxifbfWFLapbWuLp9MJuEUIzByTpIbM4+It03TKOMFSgDkxCoIix8QlVQaDe+oIWlRRnWhzsY1W+YlEYkl3xiyhAKRSqWAwSICK53mBQGAuKCieE8bW0ksRo9c9s65Z6+ag2ssLBUlu81RG0lO9XdRtqD1xXLiOTWEZ6KZTE+Mr6NF6KleLxAVlw1NIDRZ0yUlITDU1NfX09HR0dMD05XK5wcHBq1evltROJ+jpiuytZ2Advu8DOuWabmlfQdwgoiyfQbQQ+8bjcVq2igvm8XxkdHUQFTA2IGfbqhWBp/VU66aj6g8MP4rF4qwzQSpo1apVyWTyQRUA6BgYdGTBMAB+1iAY8V82mwUHszKK1IGeTcL+dDrHeEKA3NGXoAvkmBxok5nu75tGFkZsFVcCvVhd/Achr0LXyzX9wZwS5ao0OfiSkT24B7wViURWr16Nw7B5ZWxsbGRkxDd9/eQnSB3Kw1TD1bPXdYiJkiKHV6MA75khc6LiBHojECpH1bbtmavI+S9TCJ5K6Wq1JaohE2qL7dHeTKjcrMRf1NTUtNQrw5ZQADAKF/MFotFoqVSanJwMBoM9PT3VB7uuiwoxHhJWJ9mmfdFTIHudhfTVJENRCGRR87NsUyES1WUCpqS2QzOrbyYIuWYFtBgPxzZTSYDV094zkyH6t4jqjBETj0KoaG0qxkLGYrHOzs4bN25YZsovtDv3TsO+IUBkLsE2g4z41bghOhp2FY7D87xsNkvXEfkGgrUsM8SKbhtVDIMB26TX4Fjq+J5JG/3Dq/F2thorXZvK5fJSY0KXNgbI5/OJRIL+A7BfnZ2d1UeWy2U8GMeUJFlUQj4BHotjBizTNarwWBzH4chbUckNUeNy9Ue8mVVnXCH+C1+LpyU4wp6ZlRK1wpXMwbSvmNAQgRAvIxwOV98HKAsxC3VKZtsK3QxwGN13sDVhsL5BrRGXwRQn8NW4XVxa46txorZtMwclKpimFWJYpQFwjKzoixKCZas9S56q2YtIIBCoHQSzE1Jv1F0iWkIBQEQLBaBDRq0sSbFYDLeYUSzkASxFa8CgQsxDKs0cmgmXgxkMvEZE6Cp0rmvqDCUzJFkHea6qQoiplZI1RQSbL/RsLPhLjKptBVemP0NxBXNX34SQ2T/nmOk9eJ8+CfkVx3DaHL8IuQTo5qCajQ6jh3tLiJtlWUyPatgZWV9MRpJDU6hEQmZLFa0N4gR6+bbpRmB7MT0or462GF52PYfdDS2VAADzA3ezXC5PTk5aZh3irGjYp5566tSpU0VDDJ4cU3NhzVIU5IGW2jMjpRhrUmlh4IJjgGV4bExWMtRG3zoaXvEUYXBo92m1NbvYpqjMYJEuGRwVx6R0kVlCIVlrBE24NplZRwPRl3PNMFBRSG/YBMzRwFfg53hq9xHVRKlUikajvJOwrtQ7EHXtRtIIEKBqm25mXBjGDHPuoq7hiMIsikmhuq57+/btergoHA4/qGC4devWtbe3l9RgZySkfd+/dOnS4cOHK47HtCzsKQqFQhwi5JkerlKphAxpLpejX04Tj0fO8fzQo+xwBze4JtlHFkdkotUkvotpfsoJP063JJfLobOnIsAQUz9ClxY6bDjBhUNqZy3uXLt2rWSWgWsToY0JfTZMsWWIz6xLU1MTbiaTP5bayuErvJBrlqYx7eOayea2AaVbBu4hqhptm+qEp5DVvFSClERNgGTCAOevvTWV9ACD4TBX9fr169PT062trYi0RCQQCIyMjMz6ke7ubrSPYWcenR8o72w2ixuNFDINtGVZQMWEzBpq/eQ8M9YY+XKaFG3NkWBh+AGkZNHs3hLjjzEH5aqpKrhyS2E3ELEQRwBHTtSQBXwkk8mcPn1a78a8ePHi+fPnwdPIKU1PT0Mx61YeahMRKRaLQdPOYptEsKgVq8DDTk9PT09Pc1gnkrm4Tg6B09kbZkUZ8IDLeXuBFMKvRsSlJ/46KpuMgIQnoWDU4GwNf2hAX/xSCQB+59DQkOd5ra2totKOc/2qbdu2pdNpcLNlWXj83CpA/5U3WkzfNJ6ia/LQjI8dA22AIoTHbKmRNSU11BKJWgIT6GxQ2OBbI6EJZgLAK6jGvyGXAjXMF7BdFCcxUnf27Nl0Or1///62traPP/74zJkzExMTDP0hgZaZ+k/YGRkIgs18YlA1vtGC6fG0jMXpjuM2okeiIqwX42eyCkkHD1oAZWAqpmQyiYgIGI1gMIgaHzw9Rmi4UYFAoKuray7O0fskaxTL7hUtlQBks1m09wcCAYBaUWbnrLJq2rFjx8WLF1l4gt/iz5wLggfPCVaOwU5jwzOkBX+Cp2QbWAQzpxQVKrNQKJTL5bjJj2G0mP1ZuDywCKtLYmKPcrlMF0tmDlf0TX+JZ2BhLFTBNbp69Wo6ncZs2vHxceZSfAMlYAJNZi6/EbVaz1PAHvIxBYO8jnocwhVum2TIASee0CZmmfh0bDWOCW4MhtNUREEVWdqgmaCq83KO47AAUk16qTDh6EtHSyUA7733Hpqa4TMgfsLT1S0/mjBYsyLhAHWivUyMmafLwUwOspZ4J5/Ph0IhDGTX4wkYihG+66rysGsGt0xMTIyPjyeTSVHbXV2zzIJfJ2ogVNDM7YGwxeNx38xBQcDgqO4tMBkkeXh4eHx83DJtIjw5FCqDXctMbiOf6diDzOqa4gONG9w/+uIl08jvmBmgjpovxvvMz7qqJVoUCrCkmjyZXY1Go3QOkShjBs8xI7eYSJ2LqB9bW1sbMBhiCdOgN27cwAvHoJqBYa6RA8YoTNuUmVANsGYCvBj26ZSLGDcGxyPp4SpQCj0QbRDKVeOL2dVKX0iP9AAO3jPbNPCoxsbG2EiFzwIihpgELjJcL2cmipjTgXA2+jmiCliidlcyDIBPiJwPPXvHDIpzDPQfqaFSqZTL5TjcRasM3me2s+hIwDcQCQ42pTrXySXoLJiXXC6nH4dndpnpSMOeLQmuiQtVY7EYduYtKS35VAhRuXP4PzUGY7S1tSFh+v8uzgR2eH6s+IhSirZtx2IxKDk+QvavgP8s1S/rzuyIB7ACqUC4UrZtIwrXVsgyO87Gx8ehRAuFAvZoMOTACS2FS8OV4IOcaAJi3IJt28FgsLW1NZfLkcthLsg6voL34esQibKJlOEHOBU2hC04aEabnp7GT4NI0yf01e5kd2bvvGOgslwzDC/RMyv0NMyTaQbG/b7q5aD/6dYsA3OldgOKANIYAaBbks1mLcuaKwskIgiX6Zs6qkHWmtnPYalVP7ZtowES6lC3HNA3oPKDIkfdirzLkA5vJhIJyJJlBssh2IXPQKmAe4aH6qvVTLxCXkNra2s0GvXNXkcqwlgsBpbFyhwxrEz5pJJGIpW3BX/CIgLXkBYPx3HgmEGSxUxbETWvU4ynxDypPokozIit2ttds8HSMXgNmmgi83Awtx37hoIGzliDW1gGbsws9UYIQC6XS6VSrutOTU0hPXLz5s1Zw6A1a9acPXsWj9CeCeulAw14vWsA7r5pA3dURhwCg+/SSXq47BU9h+BjOif5fB6mBqISCoUSiQSZzHEcDKISUxET0zZOO1MqlZADgKEImkl4iI9hDUpqegJ5FIAF2/RP6ywQjmQCjf4JsYOuqgbgOhOJRCKRuH37NpMBujzsmwkOYjJdnpluzWDXViOBeT1i0rJ06sQoGrY92AarouvuTOnMioWppkQisWBWWzg1QgBu3769c+dObH1CsuWTTz6ZVQASiQR9AEchEaBpUFqntmNy2lPDQPVIe8/zYBnEFCxZ22KkxZPgvzjMVo2LlmVhac34+DjrWSgSO2bQmva/RQStP8Cf4kvpGCCR5RnomGXAZ66p9AUN+B6fKpmxWZQ6W4HSmGm1zfgTRCwiEgqF2tvbk8kkCgtEGdEaE/hAx5Il4YogjX48nSI4pfgg/RnYnAr3pjRzJoWIBIPB3bt3z8Uq169fx4tAIAB3YKmpQTEAFgchpslkMjdv3pzr4EAgkMvlqC2g732F+sTDDpqhJpp34apCK5NZmQIXBWyG6mK3AANf7ujFIleQY+b9i/EKKtKRyWSSCDzE4vCGITwwCEG1sAPfxUQNzYtt24CIItJgwMPpQLbaiAzxyGQycK6oF6izcXwymYTT75lmFM/zEDVBUOnP4O5BQui0MB8FVA+Ng6fqBvSU3JktlPgr4w1UJwGOnOvp//Vf/zVeJBKJh2E2KCiZTAaDQV3/YoKomjALyVNtH5YZ+OMocIuoaa/2TLy0KGVDJ942wDiGaBWZEAgVEuF4kACoumazJWEwCK8t1TroOE40Gm0y68BEBE6aY3pbxfABwBFIFwZNjy+VOnwS+F1IvyDQhFHSrdKOaUGm01UyjZFgdyRzofvRAQP0wfj4OEpXLAugQh80G7xl5rwtx8yDcEx2VSdMKdK+QU/hhrCETN+JHmZfX18NVsGGPBGJRCK6IrZ01AgB2LJlC+A9fIeWrpp279597do1bn4GUeXTp/fMHLKgQYx6ZuuWrxr54E8zTtARnhilLkYHYxxda2srtzORLxFuiikm6KFD0KAQFeRJ4QojQnBdVxs0fh19CbYioK48OjpKv9xRnSgMOnGRei40T8tIFF+Xy+Wampri8ThKIlBDnmnMd0yHwOjoKOdGep4Hu8GImaYpaKBvHCBA/ka6yTPlXhCTP74BxsF2bdmypR6ecVTad0lpyQVgx44dPT09juNoBGiN1TerV6/u6uoaGRkBc4vCSMrMaTmu2Rrtq8XaloGIemaRm2eADIw7EU7AF2cSwzZYF1GFWFGryhKJhGX212t4D90nMc/YM9BULht2zMYa+sQUwkKhwPHOUMm6Uu6YxXLAOXsms+6pYV6E1lHO8aNgx0qlEjx7tJt2d3eDv1m8K5VKIyMjyIBRzdPMegpVHlJLkEDwTnGqopkXLwqpTh8PF1x/XOuoIvSS0tJOhRCTygyHw6tWrcICOdBjjz0210f27dsHMKOtiD4lmAxOp6g6KEFsZFk8flHTmpCp8MzEFGQkdXJTTHEHFDQYxomJiXQ6jQgBABi0d8Lio8BHiLy+SDEhUGtrazweR2ZGROB4uGb+oWVZ8FVCoVC5XNagIwbcdHiIXsYPxO9l3hZKoVgsZjIZzxRikf8RU26fmpqCjodrqud1l1QXNe88u5FY0afnY6m50LgwPfdFS4tt2x0dHTVY5ZVXXuHrBrTCgJbcApw9e/bxxx9Hb0Bvb+8HH3yA90+ePPnqq6/O+pE1a9ZAC+qyYsUxOhLQAaX2X/lcNaCAD4apTJpy2wCQXDPcHE8XPIHRpcA4MHRmNtYxOFBR0N9sNovz2LbNaSii1knAwRgfH49Goyg+iAjGubFogOohlAhi61gsFo/HJyYmCDVH0olZWhHB0sugGQCsGVFEEOEgjcP+MlEdlUzLivH7bdNZCoeHd8w3nZZBNeCIzwLlP0Yg27dvr8EqTz75JF60trbOu0bgXlEjYoDh4eF4PD49Pd3Z2UkBqE1wHhhslRRqn7kXT+3MYlqmSa17ISOK6u8W47MyO+TPhIWKKRgXzSR0Xw38obeDnD1Ey1IjJHCRjkI9gOnHxsYYnGDtEgLckmmZYLAeDofZBY/rZ/nWM824JdMHB9bEIFE2K0ejURolWN1cLke9blkWbi8NCKyZowA/PBLveAb0pu2Dpcb6IgHgGISSZ6YVsREnm81yo95cRK0fDodrVEvvLTVCAK5du7Z+/XpuHyINDw93d3fP+pHOzs7r16+7ZrIs3mRegjztq3E3YlI61HZkR24KIhNbprPeVq1eYCNgHOLxuKvKolSBOrENRwXcyRQTJAdJIQaFCJERfojpmEE5DK4zFB6YDPAK+FqlUimZTEJ9Il8kqpPTUcAQKGC0L8JRcV13YGBg/fr1PT09+Xx+YGAgqJoHCP2YnJz01Uxp5D3hYepmJgYbUEwI932DbtTLbemD8YOIBzZv3lwnwzSgD4bUCAF4++23+/v79UgPEWltbX3rrbdeeumlWT/S19c3OjoKDYp3PLObVrM7OVs3hZTMenQWxXiMLvHQLbbVdFjmGbGz3jNb+sCpzGx4ptoKvLSrqj+WGYtiGRCbLo4CvcM5DhRmZPThgCGMgVYW1c3IthjPtH0xqsZPAPcDe4zz5HK5q1ev4joRdegaAtQ/x/3yDhNtzrSblhBRQwaI57NMq4BvIOKimiER4cy1GRG0Z88evq6Yl7Gk1AgBEJEPP/xw165dFfmN2tWAcDjMQSm+6ver8DQsgxOm/+qZmkDI7L5m+OioYaM6JeqorRCWZaVSqZ6enmKxODY2htOCpZjhZlqDXjJrCHgfHoitxnUhQGdJmCU8NAYwcEeyH7gp27ZjsVhzc7PjOLlcjgMXPDPEoWRWLUFEQbqUISLFYnF4eBjFbF8NhmCHHeMlxjCilIttkNueQQcxCYYsHExfJpOxTZEOJ4nH47QDIjKXqSedPXuWr0dHRxfAW3dHDRKAn//855s2bdIWAM/s8uXLcymGVCqVTqe1G+q6Lsv+rMjSH8DTrcge8BtxDFtRqf+o8oOq3RtcsnnzZmhidhSATfEC0a2OnmWO1R5ikrP0keCBhEKh8fFxJKbYdQXvuWiWjjGO53gBvR+2gikpcp4aQ+K67sjIyMjICLtM2Q3jziwp+gb0hhQc39F7Zkkls7yQkS6EgYVq13WROIKU6ubPeamGZrzn1CABEJHLly93d3fT6EPzvfDCC3MJQH9//+XLl92ZDRmWWgvA9IVvZuAQaOmbGTViZIA1IJk5IRSpFVaFLbP1qFQq9ff326Z8RlYeHBwcGxu7cePG8PBwNptlVYixAb6oSW2W9kwLCKwBLtL3fWBX4TygEYJ4DeaO6Vu7pn0HN4TzL+jvQfFj0CI1AsALtpk0yjPomQNiUmewMNbM/gox04rojzH2xdngBNLJRFuZmN5InGden167pkhRzMtO94qWvA5A+vnPf44OSfwXBhctUXN9pLe3V2aii32DwwHy1jOdjfyIrZBwooZpOqoHgDG0YyCforSgmI6tijk5vKRNmzYlk0lHzVDwDBzfNW0ijElsg2mlFOHM4KFgMIjpAWgbsBV8AClXRNhibA7b5dBCOTExwbuhfzL9H9SMMWaP0QiSvI4BgPDe6iFOuDyeEL8dBQEG4o5B1yF00QPqQLCx+Xx+XvjngQMHah+wdNQ4CyAimteHhoZaW1sLhcIbb7zxk5/8ZNbjd+3adenSJc9gJ5F+dswMDzIuKkdiZueL0f0o9xIgaRvIF60K3WJ8HQv7dO5npVgslkqlhoaGoLM90+phqVYYJmTLZsWYY1qrRLVZinGfOL8aCVkk/sG4gFhCL9JPE1UBtNVUft8MVBXj1sOfgZoA++J7JyYmbLObg7KqE01i3BhKl2Xw3rg5hD9YBtNK8kx3KIR8x44dtRnjvffe4+tGqn9psABcu3aNrxHwFYvFoaEhVOZn/Ug0Gh0fH3dVc6NjKsQA7sIU6EdIFsQZLNWYAjcJnMGvAAvSkrhm1Vdojn3GItLb24vL9tUUfy1OtplZlDfb4XkYB6u4pqXdUSOgmaJtamrC+Cqd57HUYEYG9PgsLsY3MH0Q+37I5bz5vukCc9XwJWbVnJlQHM/UfamAxAD+cD91SpphFeIB4gjvT2qcC1RNQAeNjo5+61vfmuuYZ599tqOjA/cRg7FY/IeqQ76F6hPKFY8fXizVP/KwIAbTrOww/4hk4sTEBD9bTbZtx+NxwDa5NaMCmuHMXFuPmIecVHG2cDiMKJm/FE6R4zjZbLbCRbZnIuQYIDlmyhUibEaoJbXJj1flGCCTZ4pcrhlD7ZnqsqcW5NDvp4AF1UAh/DTKJLNGTU1N/f39tdngiSee4GsNlmkMLacAAB+Ry+XOnTt3+fLluQ57+umn16xZw8m4rlptBIcBni6cH9SP6I24hpiawPOmw6pNgWW6LguFAjIn3kwEged52WwW/2YymZJZUEnxK5kBW3Qt8EEGoCUDlsZh5Ga0PaA0Af8H2DVR42abm5uDwSChSuR7WCp+L80j54uJCOoGjmkx1d4g4Nm+aSUrGRhVhZTSKsIri8ViFcGAGNA43Tbf9+Px+LwC8PLLL2uWqH3wPaeGukAVFIlEuru7r127lsvlnnvuuRqFkqNHj77yyitjY2OafXF/0QGDp+6qISgVRFvvKjiDZ+CfDCEY5+Xz+ZGREcuy1q9fT8/BNgXUkZERoIhFZVrhDDgKUAmTwgQUCsbUx0y5AHPR0tKiWw7IzczHM7Nkm/4Hamh8dZPZX0YICS4Yl+ea8VhiuNZ1XWpxS/XpemYLiW0IzlI0GqX/46kmd1SIS6YTDXNrcEv3799fmwcwO4dUe2/AUtByWoBsNtvX1wfNfenSJW0Kq+no0aORSATuAdmXSRvYazoYnJlMdxm8rgMsZmwYQnDvlYiUSqXR0dErV66cOnXq6tWr/BT+OjExkclkAFEGzMGyLGjokoEt6a+GMBTV0ji8ww0AOJXjONyVBhNnKXQ3uV+UMfE8b3x8HKcS41wBsABmoitF/4TyDG+H7ZGo7EL+kdlk3V3nCVzXzWazwMb6vo/7oMVSRAKBANYdVE9BriBdAA6FQpyJ0jBaTgE4depUKBSi4j99+nQNR0hEtmzZ4qjBEJ7BZqHIite00SjN4l84/Y7ZLSBq2rOuIhHPCFHJ5XIjIyPXrl07e/bsmTNnwAQ3b968du0a9rhAL+qaLnEE/EYob1vVnrWjrKu5eiiQpdrNLLViVYyxsk0TMF0m3g3PbOIome5Egj7EeP9iCgKsMDCxhvCDV+IYdG1JzdOGdOXz+du3b7uum06nc7kca4uE1lWPQK4mPfln3mrxUtByukBTU1Pnzp2j25fL5b7xjW/UaBfu7e1FEYoKyVbFfD5CRnuuQSbapsDpmfZ518wpYFeXGIQMrTA9+FKpNDAwkE6nm5qaEAN89tlnGITGspeo8Vuu2g0jhqGDZrMB8rmEkfq+zwDAN2PTKaUor/KSUGFgMAr7oHEQrhlO4Zp2fnpKOAONJAsgnFDEKgG9f53DcQyciTX1klkLks1m0fVmmabteDw+6x6g2tR4/0eWVwBE5LXXXjty5Mi6deuQIR0ZGTl+/Pizzz471/F79uzJ5/PpdBpqla23IuL7Pnemg1zVhM6qPl1zHMOucG3rcWYsqWXufGhoqFQqsRRKMaNhoRRZCsXteR6gXYD1+2Z4Le0P0y90eCw1X1+7duTdkhlvSNHCZeRyuVwuxyQvGnd0CtL3fYRMbO9k+pgK3lZVPyyl5BxFWCQxq475wvO8XC4Hm0PQx7Zt2+Z9+hX1r4ZBoDVVukB37txp8BW89dZbPT09NLs/+MEPao9Efeyxx9ra2shkjkENaNQQ3W6mJsW4TFB1ID5yfpYuLNc9kL/BpnRLdMpFZrpSvhmHhqATSRt2zbPYBIKCB3GGYcl00MO1Y1BBYbDMyj3+rrzZmYevILC0NLON3TOj45jKtMzKJsdxOEnONmUHzxS50YvMX81JuszG8mDEM/X0/r799tt8jUmsjafljAFA09PTk5OTO3fu5Dtf/vKXa3/k6NGjbW1tZbPQV0yiXfM0i/xNaoUWQWx89niQECFHQZfFQERR/UGkSF+CZQRcD0NPVyF2RAQuNb6L44Ac04dAyRHDxAyL6c+4ZnYvqxmiJlnAbiC8FtMqSVcQrj9TQ0wiE1IB94nSCMsmCj0VUYtFfNMqhKvVY1WZ+sRfg8HgU089Ne9zv3jxov5vY8ZgVdPyC4CInDt3LhaLcV5SsVjcsGFD7Y8cPHgQ3eKak3wz9wra0THz8hn5EUqkk/TuzI1gdKLgGbPbUAzvsszEHUrUxGBEOGaWZSFvyNIS06aoAOAkIP0r6NRpDmNDOqIa8C76m1nLC4fD8Xg8YpYjWTPH8TL9z+SpGIOApBn7WjSySEyQAPFA6M9uGFdV6Plzuru75839i8h/+2//ja+j0WjtduGlo0oB+NKXvrQs13Hq1Km+vj7u0B4YGJh3LMyTTz6JSQ06+0kX3zfdM9TH9HzIBL4Z6EmxsQ0ehnzPeZcVylWzRbFYZJKeB2BPEdJEnDoK9oVzRU5ljhJn8wygtWRGs9hq+0tFKslTDbiiisGuAgjiV/tmSjO8O9sA/lxDnlkcr5OezMk6ZsAov07Xv/GT8e1ztXprqni4kUjktddem/dTS0H3hQUQkampqdOnT+upSY8++ui8nzp27Bgbozi8H11OYoyDbWAqfHLVkC8uQiRfahOhxQbvMFaGskS7iaiY2FIISkuBkZAn9c3YFep+sjXRbMysU2E7CtAqIsy+07+HW0KoKRu7aF7wA1l+Ls3sq4QrxTCJwY9nQA20qCwVa/cJp6pH91c/3Bqwq6Wm+0UAROTatWsTExM6GJjXERKRY8eOBc1QGnaL+2riMR8wVamlJnk4aoOLGP5ggEhFS7fYMWh75DoQYgJxALgBeQLlLVFi5psWfobIIgKnhSg6z4wdFyOrsC3cLiNmFC6tE38CFTlf8C7B7OAkLCbGYjHM8NIeHX81/BlaRdxPpH2QDcNnaV5gHDjZoQaNjY1VvIOJsctC95EAiMiFCxds26YdGBgY+OEPfzjvp5599tlgMIgkoK+WC1FPW6qqzzjSMr2U4FrwgQ6jWT+iHnUMfoZpJVEaFKwAZiWipjoBj9OCHV21u0nUZvaiWtGHcxJBDR+G5q4iOBaD2bTVagXInt6ugEsFesI2C+grSmZaCyDS0OvrNNFHmhf2DPrv//2/6/+2trYu9S7UGjSLANQTwi8dnT17NplMMhj47ne/e/78+Xk/9dRTT8GMOqY/gwUpy2AKyKD4iIavOIbIfHQALFN4dmaWihFbB9VgRrpbUPxAszG0tatgzGLMgmVZmFdFR8JS0D2dYqKy13Nt2STJPA+MTEVeGC0HrhkQ75vmB5os5s0Y6vAWiXEUXVNbBGwWFwCrsmXLloMHD9bziCv2vswLl1hSmkUA6lG6S0pvv/12X18fkbFf+cpX5v1IMBjcv38/cyBkC7pArll8Aq1JYfAMfAVqG2lsmTnUsiLZB+VtmzVKiFxds26D1SKk/5kboWclpkDGzzIt66jWZFoD9gGLEhvPgAI1LJS/JTizmYE5IubpiRwRY2F801dkm+Kavr0MP1hyBsqa39ja2lpn1++uXbv0fxszA70G3V8uEOnMmTO6klJPknjDhg29vb1MhuAp0ueB6iIejilwsizGhTMwZXsHTq5f098gAofYGOhFCAA7E3ANiBCI2axoN9FZqZJZfwaVz3AcPMoGNxDTPiXTaSkicJNor3zTJWObXnjPlJ/J1vCpfDN11Fe77F213gLfTkgcB8HXGHRZQbr5S0TWrFnDidDLQrMIwHJlQjVNTU19+OGHGzduxH8nJydrT5UBHT58uKenB8Mu4VHgeTNN5JrNMWLiQtp918wVJGRIzNJFWw1M98yAUTHqEBzPfGLJdILjHfAKE1NiKrWisEa2QuaBvcCIMCCeIWYtcQA/6JrJQoiCSqptxTez6+jnMKfEUIfy7JkFAoT3wU7i1zGg5/3Ebtl8Pl8/iL/iIaZSqRoLgxtD96kFEJGpqamhoaG1a9fiv1euXHn66afn/dSBAwfa29upxRmJ+mbFButHbKtHIAiPhf4MPBYGiDw/1bkYUB1LuUzjgL2AlAZChoVkXhIO81VPug61GcAEVXtNyQznam5upmclqo4BvsSZ6U15BtwPb4oH833HYLDFOFeeAbfyK7RziG/E3YPFO3r0aD0P9MCBA1euXNHvbNu2reKdxtP9KwAighHHVBLPPfdcjcUCpD179lBRUeuLysCI6pnU6SBqR7C4dtwBtWgyC27JsnTrfTPrk467azoMXQOqYWqSSAcqXWaoHNXeWTTb8ugv4btwbbAPzFwx2cXroZWgEwh4nLZUYpwolO0sM2tejCTzJJYZxEScEiTn/fffr/NpauSPiKxduzYUCi2v/yP3uQCIyOTkpJ7b+ud//uf1fAoBGYNXON9wjegXidoTQR2JPGNQIXtxQtgBTgJEepFMJqr9kkkbJvu5ecVTI2Z9s+jFMbAFnJzZGwSarilse6pHjNkkz3Qz002H7ydmHSDQeKz+spcalXLeLsTTEAMmmioyubaqQ+O/yWSyfu5vqlqOvWbNmu9+97t1fnzp6H4XABEZHx/XQ0psVQ2di8LhcFdXl2O6UojeEbUD3TPjq1jYogK2zHwHT1USqF95gJikITnGN4OR6dP7al+0a3bNE1BEJ57sBaGio880lKuWk9JNmp6exvZl13TTs5KNlI5lGi8tg2VwzLgHS60f98xkISKUKqIUMTVyMY2jyWTy1KlT9TwLEXn11Vf1qURk7dq1jdmANC8tcz9AnaQrhb7vb9++fd7iwJ49e4rF4ujoKHP/eqMtKqzso2e4SdAEWV8Mr7DERqanIyQGAUoIBqNMHkavgz4JMWeOwjgw5BXVd0v4vmead7VDj/OwmoG6HncEAuCAtl38BOT+g2odJZI5TP+L8fHoO+HaHDNuNZFIfPvb365/hvPXvvY1/d9UKsWepGWn2S3Ab37zmwZfx4LowoULb7311ryHHT58ePXq1cz9Q/vq/AYOo/vhq8kInhl8yfooj3dNW70OtZmspJIWNSiFHy8Wi3rciBi33qrqQA+aOYpQvbbZVIBkKCbDYWIux0FbCuLBuba4ZsQknFfHXQS2KeLitW9mO+s/aY9IRAKBwL59+2bdcjsrVeSIotFoMpm8detWnR9fappdAP7iL/6iwdexUPqrv/qrioECs9LBgwfXrl1bEbzS/XUNah++kM6RuzNnUMObcg2JUfP06T1TFaaPoWVG1xOKZpeWbWqo4FRaEs/zQmYlkWfmsaFdpmSGTbCYZVlWJBLBfEUEsiXV1emrjgW6fLbabYwfi1EOjoIGugbuxpwsBCMcDh87dqxOxJuIHD58uKLPvb+//8KFC3V+vAH0YLhAs9KXv/zl3/72t/MmoR955BHf94eHh+mji4JzemaaObmfeaGS2dIHAhNUxIL02m3VVqbNC316T01sFrVblw6PmKIslssHTb9OU1NTJpOh+fJM1dYz89nZDOSb6f48A2BzzPTD+WEjEc2dbdtIDzA3RQ9KUyQSeeGFF+r0+0Xk448/rgA5b968uR5gSyPpARYAEfnyl7/8u9/9bl4wya5du0qlkja7eMzMsgMO7RkgPpOblBY+dXyEHxe1Eph8LKopTJTZ0dOHgmavmW2GFIHg7vtmA6yowNSdOSg7HA4TCmHN3FpAP55RAXgaIqTFQ0QQMASDQfpyvAkMdVzXTSQSL7zwwoKezn/+z/9Z/3ft2rXpdLrGgtBloQdSAJqbm3kf/+zP/qyePuYDBw688sormUxGgwscM81cTP8XDmZ0yKnituofcAwiOqhW+dJrYgJUFJoNbMSsDotrrmlQFhVa+GbiHUIXoCfQzi9qOoOI0G8RhTblT3bNTjvLsmhAeLWYamEbKISemMRdY3Tz4vH4Qrm/Ak/Q0dHh+35jlr8viB5IAZiamtJT5L/0pS/VIwNHjx79yU9+AqOPacY6XQNvQaOLtdNiqUEPlpmnyRwR+24ZdJJHRQRLu2giHAP2dGY2uNhmij8rwTIzEYkpLBQwMLd26nwDJYJFosfPX4QMrJiUEa8H1sM2cH/+NHy8v7+/fqefT0T/t6Ojo729/b5y/UkPQB1gVqoYol0nfumJJ57g9AENdCFwTWbCY1g6IF/iv5yPICa+xMFsm6QR4BgVESHgmeVV6m+dOwqaWVdMIvFUrJ3RE2PoouNd/RN0rklEUBBkTww+SFgr4ngWqhOJxPHjxxfK/ejV1rRp06b7k/ulhgA0fj7KXVKdibk9e/akUilm/cTEo6Katiwz799SU+jcmfgZzeWsyAZNwyETi4hTyY6IWTlXh/LgKDg0hxky/8jas05PeaZJRUcRFV1ddK5YhvNMQz2wTzRiug8GB/f19dUz2q2CYrEYNruRtm7devLkyYWep2E0pwDcD5jQBdHIyAg2ysxLe/bs6ejoQEaF7KJLUaJUpmugRGLKZ7bqkiGrUR7I65ZZsA6laxucPfvHxeSImKT31XR/lgJ838d53JlLY2UmnpRv2qZTHl+H7C0aiNkMTcHTRTdqhEgksnv37tpLrWelYDBYwf19fX11boZeLnogY4C56JNPPolEIvVM2NuzZ8+HH35IJJZtEDWIBBiGokQqBsoCl8kyHSSOaR6A2mb8oH1r2/Qll9SeC9dg15gaQtrRVuUz5CX5ca2hmQyFoy+qhUCvRWOpQWZ6cY5Z3Ctm5AnkEOZr/fr19SDPK+jixYt6zAmoq6tr2bFu89KDGgNo0iNlpqam6nx+W7ZsOXDgABxWz6z68dQ6JnA/PQcxwGPf4CWJT0ZhNWjazAmkKZndw8hFOo4DF0VUMyQORu3JMrMndOJVRPBxdqbTCwqaJQNQ9gS6MkLA9ctMEBu/ReO0Q6HQxo0bn3766UVw/2OPPVbN/Tt37qywBvcnPQwWALv3GBZfuXJl06ZNtQdNg9rb29vb22/evPnBBx9wSaOIYHgtmxtFFQQIoXFNG4oOZHkGUfO22HglhmVR04XdcByHcyKgicUUDVgp01zLIVz03yzVcCwzUW66nl1dw+aR8Xh837591cFrPXT48OHqkT779+93HGcZZz3UT7Uc/Tt37jxwkQBp7dq1g4OD9R8/ODg4ODiYzWZ9M5EKaDPb7PTlgHXXjCuEj8H4mOvoMAEO8kN8hGs6zoLBIBrEbIPJ0b0BotJQqM1xuj9KvPhqrIpCDRif8tTcZogHNQLen5iYgL3CvFvAHyKRSH9/f52xUzVt3769Or2zc+fORCKh977cz/TwCEBfX1+Fx5lKpWoMW5+Vbt68efbsWUQR5HJmPNmq4pr5snCmM5kMOJUrTR0zu1NMjqVYLEajUZkJrKf18GeiUPE+J366rotCmKsm5oppANAVLsdxQqEQfQ+YC2jiXC5HyGcsFlu3bt3hw4fvZiJnW1tbdWFr69ata9asee655xZ92gbTwyMAoVCot7f30qVLFe8vIp978eLFy5cvU6EyhLXMREFkZiADxWJxbGwMAXRLSwuy/kxNIgwAVgdJEg1nEJUD9UxHgWWw+67pzoFAMgDAPH54XxySxT1RIoLx2uxxg+7HYdFoNJVK7dq1q2I6w4JocHBwVrjktm3benp6fvCDHyz6zI2nWjHAA8T9IlIsFru6ukZHRyumLNVZJ9aE2ufVq1fT6XQ1SM4zcFG65uFwGNFkU1NTe3t7OBzOZrOWma5O7vQM3lNUd7mYAhkkB8Vd2xAEAMgFeC+2bQPyqc/mmhVMlpkQ7DgO7Zjv+6lUKpVKbd68uZ5he7XpjTfemHVq5ebNm3fs2PGNb3zjLs/fYJonCN64ceOyty3XT4lEYteuXdXeZ5250Qpav379+vXrReTmzZtXrlzh1gLkyxm2oqiEjArrqXA2yMrkdVammIfhum9ofTI3UXHezOm5rmnk10gHZGzHxsbwde3t7dgyH4/Hu7u78SvuCT377LPf+973qt/fuXPn7t27f/SjH7n3R5tL/TSPAFy+fPkBsgMnT57cv38/q1SkqampRx555Pnnn+/s7FzEaVevXr169erR0dFr167dvn2bqEn660hEimFE24wMYlwLD4QdAq7aQwonHjrbUbPLIRI0PhXAbE6/A4u3t7cDv4A2t5aWlsXewlq0ZcuWag+zubn58OHDqVTqueeeu3HjxlJ875LSw5AGJQHwnEqlKp4EHIyXX35548aNei3hgqizs7Ozs9PzvHPnzsGrBptyyxg4Et45IwffTGAnvg3SgvgYq/gwtJD5JRHxfT+bzTLDIyYAiEajiUTCcRw4Wou9Twum8+fPHzhwoBrJbFnW0aNHu7u7H330UYTsDxw9VAIgIsFgsL29vUIA0DRjWdaNGzfS6fSaNWsWCvAi2bbN8DGdTt+8eXNychJePkYtcFhaNBqF4ockIN8vZq8Wxop4ngdZgusPcA5xqZZlYR99a2tr/S2I95xeeeWVp59+upq/k8nkjh07wuFwxbDbB4vmF4Df/va38+4sun8on89XF3QIvIGj/Mknn1y9erXGKr46CXU0EfE87/Lly0NDQ9lsFrOA4PFzkhTqwfDXM5mMq7qHda3NcZxEItHc3Iz5z1u2bAnOnNHZeJrV7RGRrVu3bt++/fjx4/dbg8tCaR7/HvmTBygMeOaZZ4LB4He+8x39ZkdHRyKRyOfzo6OjnP/R29t7+PDhOke6LogmJibS6XShUMAY5FgsBpsAz4etZ1ighPRRMBhMpVJ9fX2Li1KWgo4fP/5gJTSXih4sXPSJEydOnDhR58Gtra1f//rX//Vf//VOo+iLL774wx/+8Ic//OGLL75o2JculD799NNlXNnSYKoLDMdJ5fc/AUSpMTk1aHJy8qc//emGDRvu3h2qk2zbbmlpaWlp0Vi3+4FaWlq+ZOg//sf/+IBGtEtC0ArLfRX10tatW995551FrBzcu3fvz372s+VVvQ2mpbj/DyE9cDfrl7/85aFDhxbxwdbW1t27d7/zzjvLy5dLR4u7LX/shHv34x//eLkvpF765je/+eabb9a5r6qa+vr6jhw58nd/93fLy6x3Sff2lj7ENH96h3fzAcoFvfPOOyIyMDCA0lgwGGxubm5rawNIQUQmJiauXbtWY0BfMpns7u7euXPngQMHGnbZi6NTp079j//xP5b7Kh5Uqoun7zxoyVAReeaZZ9rb2zOZDAD6jloYISKJRMLzvEwmMzg4eO3atblivkAg0N3dvW/fvjp3QCw1PViP4IGgBQiAPHQP4MiRI+3t7Z7njYyMnDt3rkbqI5lM7t+///jx4w3L3jxkt/q+pT9qAQA5jnPw4MFCoTAyMjIyMlIBpNMUj8d37Njx/PPPLw6Hk0gkNm3a1NvbC1A+0Q3hcHgl7Xi/E0KrZ555ZrkvZGmpq6sLq3tqHxYIBHbu3PnRRx+txKAPOtWr0R9uI1BBzc3N69ev9zzvPp9ps0INJeg2rm1coRV6CGgB6vyPygis0B8JLWAwVnd399Jdxwqt0LLQwnT5ihFYoYeMFjYa8fjx40t0HSu0QstCC1bkK0ZghR4mWvBwXHbTctPECq3Qg0uL0eIrRmCFHhpazHh0dmr/7//9v+/pxazQCjWaFqnCV4zACq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QCq3QfUv/PyP33LWEh3KBAAAAAElFTkSuQmCC\n",
"text/plain": [
"<PIL.Image.Image image mode=RGB size=256x256 at 0x7F20C14EDB50>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"from google.colab.patches import cv2_imshow\n",
"cv2_imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 580
},
"id": "2_6oZKSXddkp",
"outputId": "7edbc06c-283d-4675-de02-c1dbe7534560"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" Tracking run with wandb version 0.10.25<br/>\n",
" Syncing run <strong style=\"color:#cdcd00\">rich-planet-11</strong> to <a href=\"https://wandb.ai\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
" Project page: <a href=\"https://wandb.ai/ritwik/woa-segmentation\" target=\"_blank\">https://wandb.ai/ritwik/woa-segmentation</a><br/>\n",
" Run page: <a href=\"https://wandb.ai/ritwik/woa-segmentation/runs/3s7ehboy\" target=\"_blank\">https://wandb.ai/ritwik/woa-segmentation/runs/3s7ehboy</a><br/>\n",
" Run data is saved locally in <code>/content/wandb/run-20210410_105419-3s7ehboy</code><br/><br/>\n",
" "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<h1>Run(3s7ehboy)</h1><iframe src=\"https://wandb.ai/ritwik/woa-segmentation/runs/3s7ehboy\" style=\"border:none;width:100%;height:400px\"></iframe>"
],
"text/plain": [
"<wandb.sdk.wandb_run.Run at 0x7f20c15a0f10>"
]
},
"execution_count": 12,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"wandb.init(entity= \"ritwik\", project=\"woa-segmentation\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "UtUfj38TbCeV"
},
"outputs": [],
"source": [
"seg_images = []\n",
"thresholds = []"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H4NSSYNkJAST"
},
"source": [
"## Defining the Fitness Function\n",
"\n",
"The fitness function for any metaheuristic algorithm is the primary design factor. A good fitness function will allow the metaheuristic algorithm to converge faster and perform the task in an effecient way. It is also prudent to keep in mind that a good fitness function will not be iteration heavy. For images this means a great number of pixel-loops will end up taking too much time and compute-resources for calculating the fitness function of even one member.\n",
"\n",
"\n",
"---\n",
"Here we choose a whale position (two values) and assign them to the thresholds we need to calculate T1 and T2. Finally we calculate the variance of the segmented image using the thresold T1 and T2.\n",
"\n",
"The use of variance as a design choice is due to the fact that variance can essentially tell us how each pixel varies from the neighbouring pixel (or centre pixel) and is used in classify into different regions.\n",
"\n",
"For knowing exactly when to use mean and variance of an image visit the link:\n",
"\n",
"[when to use variance and mean](https://www.researchgate.net/post/Where_must_we_use_variance_and_mean_of_image)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "UAfZdeJvd2UH"
},
"outputs": [],
"source": [
"def CostCriteria(image,x):\n",
"\tfinal_img = image.copy()\n",
"\tT1 = x[0]\n",
"\tT2 = x[1]\n",
"\th,w,c = image.shape\n",
"\n",
"\tfor i in range(h):\n",
"\t\tfor j in range(w):\n",
"\t\t\tfor k in range(c):\n",
"\t\t\t\t#print(image[i][j][0])\n",
"\t\t\t\t#a simple if-else ladder to check which pixels belong to\n",
"\t\t\t\t#which band of pixel values.\n",
"\t\t\t\tif (image[i][j][k] >= T2) and (image[i][j][k] < 255):\n",
"\t\t\t\t\tfinal_img[i][j][k] = T2\n",
"\t\t\t\telif (image[i][j][k] >= T1) and (image[i][j][k] < T2):\n",
"\t\t\t\t\tfinal_img[i][j][k] = T1\n",
"\t\t\t\telif (image[i][j][k] >= 0) and (image[i][j][k] < T1):\n",
"\t\t\t\t\tfinal_img[i][j][k] = 0\n",
"\n",
"\t#we log the threshold values to wandb\n",
"\t#append the resultant image to a list of images\n",
"\t#to be logged at a later point in the program\n",
"\n",
"\n",
"\tseg_images.append(final_img)\n",
"\tthresholds.append(x)\n",
"\twandb.log({\"threshold-1\":x[0]})\n",
"\twandb.log({\"threshold-2\":x[1]})\n",
"\n",
"\t#calculating the variance of the segmented image\n",
"\treturn ndimage.variance(final_img)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "FVrIJRHE7C2D"
},
"outputs": [],
"source": [
"fitni = lambda x: CostCriteria(img,x) #constructing afunction handle for the fitness function"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ha20_dvyp7Ce"
},
"source": [
"## The Whale Optimization Algorithm\n",
"\n",
"The Whale Optimization Algorithm is a new optimization technique for solving optimization problems. This algorithm includes three operators to simulate the search for prey, encircling prey, and bubble-net foraging behavior of humpback whales.\n",
"This is the link to the paper:\n",
"\n",
"[S. Mirjalili, A. Lewis, The Whale Optimization Algorithm, Advances in Engineering Software , in press, 2016, DOI:](http://www.sciencedirect.com/science/article/pii/S0965997816300163)\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "PQpLS8dGZXnN"
},
"outputs": [],
"source": [
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"class WOA:\n",
"\n",
" def __init__(self, n_agents, max_iter, lower_b, upper_b, dim, bench_f):\n",
" # init args\n",
" self.n_agents = n_agents\n",
" self.max_iter = max_iter\n",
" self.lower_b = lower_b\n",
" self.upper_b = upper_b\n",
" self.dim = dim\n",
" self.bench_f = bench_f\n",
" # init problem\n",
" self.leader_pos = np.zeros(dim)\n",
" self.leader_score = np.inf\n",
" self.positions = self.initialize_pos(n_agents, dim, upper_b, lower_b)\n",
"\n",
"\n",
" def initialize_pos(self, n_agents, dim, upper_b, lower_b):\n",
" n_boundaries = len(upper_b) if isinstance(upper_b, list) else 1\n",
" if n_boundaries == 1:\n",
" positions = np.random.rand(n_agents, dim) * (upper_b - lower_b) + lower_b\n",
" else:\n",
" positions = np.zeros([n_boundaries, dim])\n",
" for i in range(dim):\n",
" positions[:,i] = np.random.rand(n_agents, dim) * (upper_b[i] - lower_b[i]) + lower_b[i]\n",
" return positions\n",
"\n",
" def forward(self):\n",
" t = 0\n",
" conv_curve = np.zeros(self.max_iter)\n",
" A_arr_final = []\n",
"\n",
" while t < self.max_iter:\n",
" fitness, self.positions, self.leader_score, self.leader_pos = self.get_fitness(self.positions, self.leader_score, self.leader_pos)\n",
" a_1 = 2 - t * (2 / self.max_iter)\n",
" a_2 = -1 + t * (-1 / self.max_iter)\n",
" self.positions = self.update_search_pos(self.positions, self.leader_pos, a_1, a_2)\n",
" conv_curve[t] = self.leader_score\n",
" t += 1\n",
"\n",
" return self.leader_score, self.positions, conv_curve\n",
"\n",
" def get_fitness(self, positions, leader_score, leader_pos):\n",
"\n",
" for i in range(positions.shape[0]):\n",
" # adjust agents surpassing bounds\n",
" upper_flag = positions[i,:] > self.upper_b\n",
" lower_flag = positions[i,:] < self.lower_b\n",
" positions[i,:] = positions[i,:] * ((upper_flag + lower_flag) < 1) + self.upper_b * upper_flag + self.lower_b * lower_flag\n",
" # objective function\n",
" fitness = self.bench_f(positions[i,:])\n",
" # update leader\n",
" if fitness < leader_score: # change to > if maximizing\n",
" leader_score = fitness\n",
" leader_pos = positions[i,:]\n",
"\n",
" return fitness, positions, leader_score, leader_pos\n",
"\n",
" def update_search_pos(self, positions_, leader_pos_, a_1, a_2):\n",
" positions = positions_.copy()\n",
" leader_pos = leader_pos_.copy()\n",
"\n",
" for i in range(positions.shape[0]):\n",
" r_1 = np.random.rand()\n",
" r_2 = np.random.rand()\n",
" A = 2 * a_1 * r_1 - a_1 # Eq. (2.3)\n",
" C = 2 * r_2 # Eq. (2.4)\n",
" b = 1\n",
" l = (a_2 - 1) * np.random.rand() + 1\n",
" p = np.random.rand() # p in Eq. (2.6)\n",
"\n",
" for j in range(positions.shape[1]):\n",
" if p < 0.5:\n",
" if np.abs(A) >= 1:\n",
" rand_leader_idx = int(np.floor(self.n_agents * np.random.rand()))\n",
" x_rand = positions[rand_leader_idx, :]\n",
" d_x_rand = np.abs(C * x_rand[j] - positions[i, j]) # Eq. (2.7)\n",
" positions[i, j] = x_rand[j] - A * d_x_rand\n",
" else:\n",
" d_leader = np.abs(C * leader_pos[j] - positions[i, j]) # Eq. (2.1)\n",
" positions[i, j] = leader_pos[j] - A * d_leader\n",
" else:\n",
" dist_to_leader = np.abs(leader_pos[j] - positions[i, j]) # Eq. (2.5)\n",
" positions[i, j] = dist_to_leader * np.exp(b * l) * np.cos(l * 2 * np.pi) + leader_pos[j]\n",
"\n",
" return positions"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "eySrd6qNZagP"
},
"outputs": [],
"source": [
"#population size =30 (number of whales)\n",
"#maximum iteration = 10 (number of times the whales will go skrrrrrrr)\n",
"#lower bound = 0 (pixel intensity)\n",
"#upper bound = 255 (pixel intensity)\n",
"#dimension = 2 (number of parameters to be approximated)\n",
"woa = WOA(30, 10, 0, 255, 2, fitni) #calling the function WOA with the necessary parameters"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "6EkHPtQiat60"
},
"outputs": [],
"source": [
"best_score, best_pos, conv_curve = woa.forward()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0sHz47qfsoA-"
},
"source": [
"## Plotting the Convergence\n",
"\n",
"The convergence curve of the WOA algorithm for 10 iterations is plotted to visualize the rate at which the algorithm converges to the global minima of the fitness function."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ax9O973dqR3O",
"outputId": "edf36688-4989-45be-94b6-d8091d284377"
},
"outputs": [
{
"data": {
"text/plain": [
"array([257.8579688 , 35.08947612])"
]
},
"execution_count": 19,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"np.mean(best_pos,axis=0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"id": "9MQq2BBqeGx1",
"outputId": "12433d2f-b5bf-45c2-968f-1c11322fd1fb"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(conv_curve)\n",
"ax.ticklabel_format(axis='y', style='sci')\n",
"ax.set(xlabel='iter', ylabel='leader_score',\n",
" title='Objective Space')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 703,
"referenced_widgets": [
"64a33008284745a7b613e6bf3defb4af",
"8177ded775aa4df3a11bd71cfeaffb4e",
"8bf1dbf5ba3e451ea0ec86cc790309af",
"c333ca8ec74a448c82d7ba2bf66459ee",
"df154fdcd876449da9d7fb669f256030",
"e292a52ce95040ff9bc00c7fb1fd154b",
"fb9f64bbc51842d8b42e1220cc54cbae",
"ee368d0729084f4c9ff2bad258789d9c"
]
},
"id": "Bch8Z2GDd7zU",
"outputId": "d417282d-28b3-496c-abee-70dafb3c4d5a"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:root:Only 108 Image will be uploaded.\n",
"/usr/local/lib/python3.7/dist-packages/plotly/matplotlylib/renderer.py:548: UserWarning:\n",
"\n",
"Looks like the annotation(s) you are trying \n",
"to draw lies/lay outside the given figure size.\n",
"\n",
"Therefore, the resulting Plotly figure may not be \n",
"large enough to view the full text. To adjust \n",
"the size of the figure, use the 'width' and \n",
"'height' keys in the Layout object. Alternatively,\n",
"use the Margin object to adjust the figure's margins.\n",
"\n"
]
},
{
"data": {
"text/html": [
"<br/>Waiting for W&B process to finish, PID 335<br/>Program ended successfully."
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "64a33008284745a7b613e6bf3defb4af",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(Label(value=' 0.51MB of 0.52MB uploaded (0.00MB deduped)\\r'), FloatProgress(value=0.98414559645…"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Find user logs for this run at: <code>/content/wandb/run-20210410_105419-3s7ehboy/logs/debug.log</code>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Find internal logs for this run at: <code>/content/wandb/run-20210410_105419-3s7ehboy/logs/debug-internal.log</code>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<h3>Run summary:</h3><br/><style>\n",
" table.wandb td:nth-child(1) { padding: 0 10px; text-align: right }\n",
" </style><table class=\"wandb\">\n",
"<tr><td>threshold-1</td><td>255.0</td></tr><tr><td>_runtime</td><td>660</td></tr><tr><td>_timestamp</td><td>1618052719</td></tr><tr><td>_step</td><td>601</td></tr><tr><td>threshold-2</td><td>35.50853</td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<h3>Run history:</h3><br/><style>\n",
" table.wandb td:nth-child(1) { padding: 0 10px; text-align: right }\n",
" </style><table class=\"wandb\">\n",
"<tr><td>threshold-1</td><td>▅▇▇▅███▃▃▁█████████████████▆▇█████████▅█</td></tr><tr><td>_runtime</td><td>▁▁▁▂▂▂▂▂▂▃▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▆▇▇▇▇▇███</td></tr><tr><td>_timestamp</td><td>▁▁▁▂▂▂▂▂▂▃▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▆▇▇▇▇▇███</td></tr><tr><td>_step</td><td>▁▁▁▁▂▂▂▂▂▃▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▆▇▇▇▇▇███</td></tr><tr><td>threshold-2</td><td>▄▂▇▇█▁█▁▁▁▃▂▂▁▁▂▂▃▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▂▂▂▂▂▂▂</td></tr></table><br/>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Synced 5 W&B file(s), 109 media file(s), 0 artifact file(s) and 0 other file(s)"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" <br/>Synced <strong style=\"color:#cdcd00\">rich-planet-11</strong>: <a href=\"https://wandb.ai/ritwik/woa-segmentation/runs/3s7ehboy\" target=\"_blank\">https://wandb.ai/ritwik/woa-segmentation/runs/3s7ehboy</a><br/>\n",
" "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"wandb.log({\"img\": [wandb.Image(data, grouping=3)\n",
" for data in seg_images]})\n",
"table = wandb.Table(data=thresholds, columns = [\"threshold-1\", \"threshold-2\"])\n",
"#wandb.log({\"my_custom_id\" : wandb.plot.scatter(table, \"threshold-1\", \"threshold-2\")})\n",
"wandb.log({\"convergence plot\": fig})\n",
"wandb.finish()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_Mh0l_X4wiI6"
},
"source": [
"## Visualizing the results\n",
"\n",
"A demo function with the same specifications as CostCriteria() is created by the name of CostSegmentation(). The parameters passed into this function is the original image along with the final element of the best_pos list from the WOA algorithm. It is common knowledge that the final element is the element with the best possible parameters from the optimization (duh!). \n",
"\n",
"The two resultant images are plotted to show the segmentation achieved."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bHJCF3MQKLPu"
},
"outputs": [],
"source": [
"def CostSegmentation(image,x):\n",
" final_img = image.copy()\n",
" T1 = x[0]\n",
" T2 = x[1]\n",
" h,w,c = image.shape\n",
"\n",
" for i in range(h):\n",
" for j in range(w):\n",
" for k in range(c):\n",
" if (image[i][j][k] >= T2) and (image[i][j][k] < 255):\n",
" final_img[i][j][k] = T2\n",
" elif (image[i][j][k] >= T1) and (image[i][j][k] < T2):\n",
" final_img[i][j][k] = T1\n",
" elif (image[i][j][k] >= 0) and (image[i][j][k] < T1):\n",
" final_img[i][j][k] = 0\n",
" return final_img"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "lowj-IaZe6Nq",
"outputId": "e43b04d9-bcb6-4378-f22d-6b50b36f8524"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"img_seg = CostSegmentation(img,np.mean(best_pos,axis=0))\n",
"fig, (ax, ax2) =plt.subplots(ncols=2) \n",
"ax.imshow(img)\n",
"ax2.imshow(img_seg)\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "w92ZzOxUdZYv"
},
"source": [
"# Conclusion\n",
"- - - - \n",
"Although the authors of the original paper, cherry pick their result and show that the algorithm is quite effective, we can verify that the algorithm is quite ineffective in segmenting even a binary image. Let us take a look at why this happens - \n",
"\n",
"1. The convergence of the WOA algorithm is based solely upon the criteria of variance based on arbitrary pixel values ranging from 0-255. Due to this a large set of pixels can return the same/similar variance thus letting the algorithm converge but not perform the desired action(segmentation)\n",
"2. The algorithm loops over almost all pixels making it slow and incredibly computation heavy for the whales to converge, there is actually a great section in the original WOA paper dedicated to the understanding of fitness functions to be used with WOA. While there are quite a few heavily complex ones, there are none that uses fitness functions with a complexity of O(n^3)\n",
"3. We can investigate from the wandb run that the segmented images that we have, even before the algorithm converges are sometimes better and even more accurate than the final result, however due to the random nature and the selection of poor cost criteria, the final results are dissapointing.\n",
"\n",
"Nonetheless this was a good exercise in investigating performance of WOA algorithm on basic image processing applications and also the correct usage of proper cost criteria. \n",
"\n",
"In future, if there is a follow up blog to this one it will be about investigating various cost functions related to image segmentation and the ability of WOA algorithm to converge on them. \n",
"\n",
"Thank you for reading and Happy Coding. ;)"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "WOA-segmentation.ipynb",
"provenance": [],
"toc_visible": true
},
"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.5"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"64a33008284745a7b613e6bf3defb4af": {
"model_module": "@jupyter-widgets/controls",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "VBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "VBoxView",
"box_style": "",
"children": [
"IPY_MODEL_8bf1dbf5ba3e451ea0ec86cc790309af",
"IPY_MODEL_c333ca8ec74a448c82d7ba2bf66459ee"
],
"layout": "IPY_MODEL_8177ded775aa4df3a11bd71cfeaffb4e"
}
},
"8177ded775aa4df3a11bd71cfeaffb4e": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"8bf1dbf5ba3e451ea0ec86cc790309af": {
"model_module": "@jupyter-widgets/controls",
"model_name": "LabelModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "LabelModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "LabelView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_e292a52ce95040ff9bc00c7fb1fd154b",
"placeholder": "​",
"style": "IPY_MODEL_df154fdcd876449da9d7fb669f256030",
"value": " 0.53MB of 0.53MB uploaded (0.00MB deduped)\r"
}
},
"c333ca8ec74a448c82d7ba2bf66459ee": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_ee368d0729084f4c9ff2bad258789d9c",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_fb9f64bbc51842d8b42e1220cc54cbae",
"value": 1
}
},
"df154fdcd876449da9d7fb669f256030": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"e292a52ce95040ff9bc00c7fb1fd154b": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"ee368d0729084f4c9ff2bad258789d9c": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"fb9f64bbc51842d8b42e1220cc54cbae": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
}
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment