Skip to content

Instantly share code, notes, and snippets.

@jeanpat
Created April 10, 2014 12:27
Show Gist options
  • Select an option

  • Save jeanpat/10376495 to your computer and use it in GitHub Desktop.

Select an option

Save jeanpat/10376495 to your computer and use it in GitHub Desktop.
Here 4-tuples of points are considered. A necklace is a set of 4-tuples which can be deduced from one to an other one by circular permutations. With four points, when a maximal area quadrilateral is searched it is faster to search it in the set of the six possible necklaces than in the set of the 4!=24 possible permutations of a 4-tuple.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "maximal-quadrilateral-combinations"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": "Looking for maximal area quadrilateral with in necklaces."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Here 4-tuples of points are considered. A necklace is a set of 4-tuples which can be deduced from one to an other one by circular permutations. With four points, when a maximal area quadrilateral is searched it is faster to search it in the set of the six possible necklaces than in the set of the 4!=24 possible permutations of a 4-tuple"
},
{
"cell_type": "code",
"collapsed": false,
"input": "import itertools as it\nfrom collections import defaultdict\nfrom matplotlib.patches import Polygon",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": "def simpoly(x,y):\n \"\"\"\n A function that calculates the area of a 2-D simple polygon (no matter concave or convex)\n Must name the vertices in sequence (i.e., clockwise or counterclockwise)\n Square root input arguments are not supported\n Formula used: http://en.wikipedia.org/wiki/Polygon#Area_and_centroid\n Definition of \"simply polygon\": http://en.wikipedia.org/wiki/Simple_polygon\n\n Input x: x-axis coordinates of vertex array\n y: y-axis coordinates of vertex array\n Output: polygon area\n \"\"\"\n\n ind_arr = np.arange(len(x))-1 # for indexing convenience\n s = 0\n for ii in ind_arr:\n s = s + (x[ii]*y[ii+1] - x[ii+1]*y[ii])\n\n return abs(s)*0.5\n\ndef unique_necklaces(a, b, c, d):\n L = [a, b, c, d]\n B = it.combinations(L,2)\n swaplist = [e for e in B]\n #print 'List of elements to permute:' \n #print swaplist\n #print\n unique_necklaces = []\n #unique_necklaces.append(L)\n for pair in swaplist:\n necklace = list(L)\n e1 = pair[0]\n e2 = pair[1]\n indexe1 = L.index(e1)\n indexe2 = L.index(e2)\n #swap\n necklace[indexe1],necklace[indexe2] = necklace[indexe2], necklace[indexe1]\n unique_necklaces.append(necklace)\n return unique_necklaces\n\ndef maxAreaQuad(A, B, C, D):\n \n quads = unique_necklaces(A, B, C, D)\n #print len(quads)\n dicQuads = defaultdict(list)\n for quad in quads:\n #print 'quad in sholace:', quad\n #area = quadAreaShoelace(*quad)\n x = [p[0] for p in quad]\n y = [p[1] for p in quad]\n area = simpoly(x,y)\n dicQuads[area].append(quad)\n allkeys = dicQuads.keys()\n #print type(allkeys), allkeys\n #sortedkeys = sorted[allkeys]\n allkeys.sort()\n areamax = allkeys[-1]\n return areamax,allkeys,dicQuads[areamax][0]#sort\n\ndef maxAreaQuad_brutforce(A, B, C, D):\n allquads = it.permutations((A, B, C, D))\n quads = [q for q in allquads]\n #print len(quads)\n dicQuads = defaultdict(list)\n for quad in quads:\n #print 'quad in sholace:', quad\n #area = quadAreaShoelace(*quad)\n x = [p[0] for p in quad]\n y = [p[1] for p in quad]\n area = simpoly(x,y)\n dicQuads[area].append(quad)\n allkeys = dicQuads.keys()\n #print type(allkeys), allkeys\n #sortedkeys = sorted[allkeys]\n allkeys.sort()\n areamax = allkeys[-1]\n return areamax,allkeys,dicQuads[areamax][0]#sorted(set(allkeys)),areamax, \n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": "def plotQuad(quadrilateral,col='g',alph=0.01):\n p = Polygon( quadrilateral, alpha=alph, color=col )\n plt.gca().add_artist(p)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "A small test for unique_necklaces(a,b,c,d)"
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit unique_necklaces(1,2,3,4)\nprint unique_necklaces('a','b','c','d')",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "100000 loops, best of 3: 15.6 \u00b5s per loop\n[['b', 'a', 'c', 'd'], ['c', 'b', 'a', 'd'], ['d', 'b', 'c', 'a'], ['a', 'c', 'b', 'd'], ['a', 'd', 'c', 'b'], ['a', 'b', 'd', 'c']]\n"
}
],
"prompt_number": "*"
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Let's generate four random points and search the quadrilateral of maximal area"
},
{
"cell_type": "code",
"collapsed": false,
"input": " points=[(random.randint(0,20),random.randint(0,20)) for i in range(0,4)]\n%timeit maxAreaQuad(*points)\n%timeit maxAreaQuad_brutforce(*points)\n_, _, maxquad = maxAreaQuad(*points)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10000 loops, best of 3: 210 \u00b5s per loop\n1000 loops, best of 3: 719 \u00b5s per loop"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
}
],
"prompt_number": 9
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "From the four points let's make different necklaces"
},
{
"cell_type": "code",
"collapsed": false,
"input": "allNeckLaces = unique_necklaces(*points)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Display one quadrilateral from the necklaces"
},
{
"cell_type": "code",
"collapsed": false,
"input": "n=1\nfig1 = plt.figure(figsize=(5, 5))\nax=plt.subplot(1,1,1,frameon = True)\nfor pt in [(5, 2), (1, 16), (17, 3), (5, 18)]:\n ax.scatter(*pt,c='blue',s=50)\n \np = Polygon( [(5, 2), (1, 16), (17, 3), (5, 18)], alpha=0.2, color='r' )\n_,_, mx = maxAreaQuad(*[(5, 2), (1, 16), (17, 3), (5, 18)])\nm = Polygon( mx, alpha=0.3, color='g' )\nplt.gca().add_artist(p)\nplt.gca().add_artist(m)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"text": "<matplotlib.patches.Polygon at 0x33d3a50>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x377e710>"
}
],
"prompt_number": 10
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Let's display 6 necklaces"
},
{
"cell_type": "code",
"collapsed": false,
"input": "points=[(random.randint(0,20),random.randint(0,20)) for i in range(0,4)]\nquadrilaterals = unique_necklaces(*points)\n_, _, maxq= maxAreaQuad(*points)\nn = 1\nplt.figure(figsize=(20, 2.5))\n#print points\n#print\n#print quadrilaterals\nfor quad in quadrilaterals:\n ax=plt.subplot(1,7,n,frameon = True, xticks=[], yticks=[])\n colors = iter(['blue','red','green','orange'])\n for i in range(len(quad)):\n point1 = quad[i]\n point2 = quad[(i+1)%4]\n x = point1[0]\n y = point1[1]\n nextpoint = quad[(i+1)%4]\n dx = nextpoint[0]-x\n dy = nextpoint[1]-y\n plt.arrow(x,y,dx,dy, color='grey',shape='full', overhang=0, lw=1, length_includes_head=True, head_width=0.7)\n ax.scatter(*point1 ,c=next(colors),s=200)\n \n n =n +1\n #print quad\n #plotQuad(maxq,alph=0.3, col='b')\n plotQuad(quad,alph=0.15, col='r')\n ",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAA8cAAACZCAYAAAACY0hAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Wd4VNXWwPH/lEwmk0knoddQRaqKAoKKIEVFQJCO9CaI\noIIXG/rq1StcCwqIIEXpvUovAlJEepdiIIWSkDa9nvdDEi4lJDPJZFJm/z5dc84+Z3Gf88zM2mfv\ntWSSJEkIgiAIgiAIgiAIgg+TF3YAgiAIgiAIgiAIglDYRHIsCIIgCIIgCIIg+DyRHAuCIAiCIAiC\nIAg+TyTHgiAIgiAIgiAIgs8TybEgCIIgCIIgCILg85Q5HZTJZN6KQyimvFnsXDyPQm689TyKZ1HI\njXgWhaJCPItCUSKeR6GoeNizmGNynNNAoeT5dNIH/Dr7G+YNMtKsJtz/uWKywk+7ZPx7o5YNm3bQ\npEkTr8conkffsG/fPrq80p5PX9Ez4Bnw97v3uCTB7+eg/88a3njrA96d8C+vfxGKZ9E3mEwmWrRo\nx9mz5TGZZgJB2ZwlAWvRaIawYcMyWrVq5dUYxbPoGyRJYsI7b7Fx5WzmDjLSJPrBcwxm+GG7nO92\nBLNl+x7q16/v9RgF33D48GFebNWKqXo93YHsvoFtwPsqFRvKlmXvkSOUKlXKqzGK59E3OBwOXuv1\nGpv/2oyxvREisznJBH77/Sh1tRQH9x6kcuXKD72eLKc+xzKZTDxYPmLe3Dn8+6PR7JtoJCok53PX\nHoERC0K5fivV62+OxfNY8sXExPDk4/X5dbCOF3L5XZeQAs0/0/Cfb+fQvUcPr85Ii2fRN/TpM4SV\nK3WYzYvIfSfSLrTa7uj1ieJZFDxu2vff8ePXE9kz0UhYYM7nLvoD3lsTQWzCbfEsCh6Xnp5OnSpV\nmJGSQkcXzh/v58fJJ59ky7594nkUPG7cu+OYuXYmxteM4JfzuYoDCirFVOKfC/889PkQybGAw+Eg\nukpZlg1NzHYmOjtjFqiYuskqkmPB48aMGo4m7me+eM3u0vm/n4PhSypw/lKc+NIVPOrGjRtUqVIH\ni+UfINSlMf7+I7FYZohnUfAoi8VC5QpR7Hw3nUcquDZm0M9q5uw0i2dR8LhpP/zAnvfeY6nB4NL5\ndqCKRkO80SieR8GjkpKSqFClApaRFshl0hAACbTLtOjP6R/6fIiCXAKbNm0iKtDscmIM8Mbz1oIL\nSPBZBoOBBQt+ZUQr1xJjgJa1QWFPLcCoBF/1008/I5N1w9XEGMBiGVFwAQk+a9WqVdQt73Q5MQZ4\no5W54AISfJYkSUyfPJkRLibGkLGHc4jFUnBBCT7r5zk/I68jdy0xBpCBvqE+x1NEciywdOEcBjbT\nuTWmZtkCCkbwaVu2bOHxaAWV3NiWJJPBwOY5f9AJQl4sXboRs7mXm6PqFUgsgm9bumC2259zjasW\nUDCCT4uNjeV2YiLPuDmuh8NRIPEIvu3nX3/G9KjJvUE1cj4skmOBm9fjqZLN5vVUWyiLLnbnmq6i\n94MSfNLNmzepEpH9W+PfE55mV1zLbI9Vza74giDkU1paChD1wN9VKgufjPyQcqVjvR+U4JNu3rxO\nlWwmDR2SguWXunDdWNr7QQk+KTU1lVJ+ftkW4NrYvj0/DR6c7TjxNS0UhKTEpGwXdwVKGsaY+qKR\nAh48mEv2m2u1aqHkU/opsTsz/rckQYypCvuSW3AjMRK12YqyvFhCLXiHUqnE7nzwK3dVTCduXStN\ncJm0bMfZxIS0UAD8/QOA+2ekJSaN/pggsx6jRVsYYQk+KOOz8d6/JVvDWBLTA2eSHHtZ8XNO8A6N\nRoPR6Xzg72tffpkbZctiU2b/LLq+CFsQXKdQKOC+x7GyVIkxaV2QSRK2ANe36WURn6YC0TUe4cjV\nI5Sp+ij7Up7G5NCgSrMQmp6OvIKDcpqbD4wRNQ6EghAdHc30qwok6X+txBZf7oH+mhaZ3EmV8Jhs\nxx27piSj5IcgeM4TTzQgJmYXTudjd/7Wu+sCItKTSQkNIz09u9L+Kd4LUPAZ0dVrczTmNM/Uyfjy\nPZ1el/U3XiL0ZhoWjT8VA+MfGON4MH8RhHyrWLEieuASUD3zb0u7dSMtNBSF3U6QLvttetu9FaDg\nU6pVq0bS9SQIz/jvZ6QWdEptjNpsYn9UKjZsDw7KZfu7WFbt41JTU2nStCW2mm+zNekF0myh+Kea\nCU9OJi0khL7RC7Idt+uslwMVfMKzzz5LulXDn5cz/vvnCwPRxQahkGyYg/0J9U9/YIzFBnP2iHk+\nwfPGjh1OQMAMsqal69c7xlOlDyGTJFKkMJzOB79CZbJ53g1S8AmDh7/Jj79rsDqUrLnRiXW3XsE/\n3YrKaqVSqavZjtl4zMtBCj7B39+fAYMH86NfRs+cuf37ZyTGNhv6oCDCk5OzHTc9KLse8YKQP2Pf\nGEvQqSDUqBng7EeX5IYEp6dzMyyAI4pT2Q86mfM1RXLsw9atW8e0adOIiYnBz0+FzakiJDWV8ORk\njBoNzSr/gUr+4IyL0wmTN2sKIWKhpJPL5YwYNY7/bFLzzakxOBPkOP3AIfPDEhBAiN+DVann7YH6\nDRoUQrRCSdekSRMqVAhDJptHmTLX6dN2EUE6HenBwaQbsntrfJuAgG+9HqdQ8jVv3pxSZWvw34sj\nOaOvi8wsEZqailGjoU3ZB9/JOZwwZYur5VsFwT3DRo9mnlLJN6NGYVcqcQJOpRKrSkV4yoOrZ9YA\nyYHieRQ8r0uXLpSVl+Ut2ygaJQcTnJ5OenAwdrWWi1x8cIANAo/m/CyK5NiHBWZ+UDmdTpAkwpKT\nCdLpsKpUmCLUPBV+6IExkgTvLPEjTVH9gWOC4AnDR4zkqRaj0SYZsPvLwSHHqNFgU6oIUd6753jb\nKfhwTSD//e6nQopWKMlkMhkrV86ndOn/Y3i/aYSkpWHz88McEEBKSth9Zyeh0XRg2LCehRKrULId\nP36cdi91wSwLxeFQEH77NgDmIH9CVfd+LjqcMHK+ClUpUTldKBhVq1Zl/KhRBJlM2BQKHH5+2Pz8\ncCoUhKTeO4m9BRii0bBk3brCCVYosSRJ4tChQ/R5tTsVUowEmEyYAgJIDwkhhpgHl1TbIWBtAC+0\neCHH64rk2Ic9++yzaLVaZE4n4bdvE2Ay4ZTLSQ0N5emw9chl/9tYLEnwxwXo+G0AB27WZv2mnYUY\nuVBSORwOZnzyCeHJyRiUSuxyfxQOBwatFqckJ1CRUdIj9ja8v1xJn1lBrFyzifr16xdy5EJJVbNm\nTca9NZxIXTIyScIUEIDdz4/ExKzSwYnI5f9Bo2nE8OGtmDLl34Uar1CySJLEypUr2bRpE06nE7lc\nTkhqKgqHA6tKxROlD991Luw+C+3/q+FvcwNWrt1ciJELJZXT6WTK+PGEJydjVqtxqFT42WzoMpdN\nh6SlIQH7gb4aDa8HB7Nm61aeeOKJQo1bKFkcDgfz589n744dRCQlobRn1J1JDQvDJLNynOP/O9kJ\n/A2BCwNpFd2Kxb8szvHaYqOeD1MoFDz1+OMcXrwYP5sNp1yOxd+fdD8lHSbF0bRWEJXC7FgdMv76\nR4FJ0jJi1NsMHzGSgIBsSqMLQj7YbDamvvceYWlp2IOCUDgcyB0ObH5+2FQqHFY9I38JIOa2kj8v\nOejduw8HD79H1aqimadQMCRJYsWKFShu3sTPljEDbdBqsdnsWCwzCQ5+F6s1hk6dOjNu3Crx408o\nEHq9HimzCqbaaCTQYECSyUgPDuaH1ZdZplZjscs5cEmOzD+cEaPeYcjQofj7+xdy5EJJY7fb+W7C\nBMLS0nAEByPZ7XcqtFrUauySREenk+saDeqQEEaMG8d3AwcSHh5eyJELJVHK9euE3byJTJKQO52k\nhYRg9fdHabcTvzketZ8ahV0BV6FS2UpM+HgCffv2RS7P+d2wTJIeXndYJpORw2GhmPv7zBm2TZ+O\n0m7H6eeHwmolsWxZBg4fTmBgIFu2bOHWrVuoVCpq1KhBy5Yt73mgvP18iOex5DIZjcz44AOCdDoU\nEREYjEYA/M1mUsLCMGs0+Pn5ERoaSunSpWnbti1a7b1tdLz5fIhn0Tfs27ePvb/9RqnERKwqFQqH\ng5tlyuCnUlG3bl0qVqxItWrVCA29t8mieBYFT7Lb7SxYsIAbV68SlpCAXanEz2ZDHx1NucqVuX37\nNv7+/tSuXZvmzZsjk/2vHZ54FgVPsZjNTJs4kSCdjoAyZUjNfEPsbzajCwpCHxyMXC6nQ4cOhIaG\nUrVq1QeSEPE8Cp6yZ8sWzq1ahZ9ajc1mwwEkRkWBTEa5cuXQaDSkpqYSEBBAgwYNeOyxx+4Zn9Pz\nId4c+6iThw/zx5w5VChdmhc6d2bh99+TFBlJjbp1KVu2LADdunUr5CgFX6BLS+Pnjz8myGDgtaFD\nWb16NX5KJbbMN3UWtRrIWN7atWvXwgxV8DEKSSL89m0c/v74Wa2khYSATIZMJqNZs2ZERkYWdoiC\nD1AqlXR99VXmTpwIcjkKhwOjRsPjTZvSsmXLwg5P8AEGvZ5ZH3xAkMHA62++yZGjRzl+/DgOhyNj\nu4kmo0irVqt9IAkRBE/btGIFsVu30rBJE6rUrMnaBQtIK10aZDJUKhVNmjShQT4KtYo9xz7o4O7d\n/DFnDtFVq/JKr178Om0aeq0Wh1bLCy/kvEldEDzpdmIicz/8kECDgYHjxhESEkLfvn154oknUFmt\n6IKCkDJnnkuVKpXL1QTBcxwOB4dWrkSlUlE7c0+7JfMHoN1uJyQku2rVglAwZnz6KWqzmVKVKqFw\nODBptdStW7ewwxJ8QGpyMj9PnIjGaGTA2LGo/P1p2rQpPXv2RGGzZew7Vma8axOfi0JBWz5nDrFb\nt9L02Wdp0qIF6379lbSQEELKlkWhUOBwOKhVq1a+7iHeHPuYnRs28PeGDdSrV4+n27Th5OHDOBQK\nXhs3jtLly6NQKAo7RMFHXI+LY8V//oPaYmHwO+/cWQqoUCho1KgRR3fuxBEcjJ+fH06n84Glq4JQ\nkKZ/9hlavZ5+b7/NphUrMGo0VKxWjbi4OGSZs9OC4A2/b95MSFoaXQcO5OqlS9yIi0MTGUlERERh\nhyaUcLeuX2fpv/9NgNnMoLffvmeZdGhoKEq7ndSwMAIDAzEajeKZFArU3G+/xX7mDM926EDNunXZ\nuGwZZrWaUZ98gkwuZ86cOWg0GtSZKw7zSiTHPmT94sUk7N7NE02b8lizZhgNBv7ctYvSzzxDuUqV\nCjs8wYf88/ffbJw6lUCnkwFvv33PHjmAQ7t3Y1arefejj7h27RpbtmyhTJkyhRSt4GtOHj6Mf3w8\n7bp3R6FQkBAbS43WrXnxtde4cOECcXFxhR2i4CNSk5M5vX49DRo0ICwighVz5iBVqsTgwYMLOzSh\nhIv95x/W/ve/+Fut90xg3zkeE4NDoWDM++/jp1Kxb98+KlSoUEjRCiXd1EmTCIiP54UuXagcHU38\ntWvEX7tGy8GDCchc1TVkyBDsmVWr80Mkxz5i8U8/oT98mBZt2vBIw4YALJw+nfSQEAb37VvI0Qm+\n5OyJE+z66ScitVq6DxqU7TmnjxwhuF49ZDIZlStXZujQoV6OUvBVZpOJ33/5hcrly1OhcmVOHz2K\nXamk3auvAlCrVq18L9kSBFf9/PnnBFutPN2mDcmJiTjlcnqNGEFgYGBhhyaUYBfPnmXrtGmEqVT0\nfvPNbM/ZtGIFupAQNJnP4nPPPefNEAUfIUkSkydMIDw5mZd796Z0+fI4nU42LVmCsXx5GjRpcudc\nPz8//Pz88n1PkRz7gNmTJyP9/TetXn6Z6Nq1Adi7dStWlYrBH3xQyNEJvuTogQMc+uUXKpcrx0vd\nu2d7TtzVqzgUCroOHOjl6AQBvv/oI0LNZl7u0QOA/Tt3Ys3cyyQI3rRy3jxC0tLoPWoUAOsWLUKv\n1RIu6i8IBejUkSPsmz2bcpGRdO7TJ9tzLGYzAJ3F97RQgJxOJ/+dMIHwlBS6DBhAeGYRzIU//ogh\nMJDRH31UIPcVyXEJJkkS3374IUE3btCue3cqVq4MQHJSEudPnKBe166EhIUVcpSCr9i3bRunV66k\nVq1atHrxxYee99vy5ehCQgi8r1WTIBS03zdvJjQ1la4DByKTyUi5fRuA3iNGFHJkgq+Ji4nh1qFD\nPN26NQEaDQ6HA5vVynMPSVYEwRMO/f47R5csoVqVKrTt3Pmh521dvRqjRkP1OnW8GJ3gS+7uqd19\n2DCCMou9nT91CqPJRMd33imwSWuRHJdQWcsQwlJS6Ni3L1GZ7ZkkSWLl3LmkhIXRsm3bQo5S8BVb\nVq8mZvNmGjZuzFM5LL3Kmo3uNGCAt0ITBOB/ezsbNmpEWGZRmXVLlqALCiJS7HcXvMjpdLLi228J\nlCTqNW4MZPT0NAUE0Lhp00KOTiipdm3cyN/r1lG3Xj1a5tK55EZcHLXEb0ihgJhNJqa//z7BOh29\nR426s6fYarGwd/NmtI0bU7VGjQK7v0iOSyCHw8E3EyYQnprKq4MG3fmhB7B+yRLMajVjPv20ECMU\nfMmqX34had8+nmzRgoZPPpnjuVvXrMGo0VDjkUe8FJ0gZMja29m8dWsg43PUajTSsl+/Qo5M8DWz\nvvqKQIOBAWPH3vnbpTNniLprb50geNLGZcuI27GDxk8+yRNPP53juaeOHMGqUvFCDm+WBSGv9Dod\nsz/8MKOn9pgx93SGmPf99+iDghg8fHiBxiCS4xLGZrMx9b33CE1Lo8eIEWiDgu4ci4uJ4UZ8PM8O\nG4Z/PsucC4IrfvnhBywnTtCyXTtq16uX6/nX4+Ko2aaNFyIThP9ZMXfuPXs7Af7Yvh2zWs3jufxQ\nFARPOnviBLIrV2jTuTPKzN6x/1y8iF2ppLMonikUgKWzZ5P25580b9WKRzNXKuTkwK5d2EQdBqEA\npNy+za+ffILGbGbguHH3PGN/7t2LQ6Gg34QJD1RO9zSRHJcgZpOJGRMnEqLT0Wf0aNQBAXeOORwO\nNi9bhqViReo99lghRin4imn/93+orl2jdadOLi1/yaoK3LZLFy9EJwgZ4mJiSPzzT1q2aXNn6RbA\nhZMniXjssQL/EhaELFaLhe0//0z5yEiqVK9+5+/b16xBFxYmJrUFj5vzzTfYz53juQ4dXFqxJeow\nCAXlRnw8y7/8kgCz+YHWYbq0NE4cPEi19u0pVbp0gccikuMSQpeWxs8ff4zWYOD1sWMfKGW+YMYM\n9Foto0V1aqGA3V12/8VevSjrYt/D/Tt3YitXTsxGC16TtbczSCajbqNGd/5+9fJl7EolXV5/vRCj\nE3zNtx9+SJjJRJc33rjzN6PBgCST0X3YsEKMTCiJvvv4YzQJCbTv2pWKVau6NGa9qMMgFICrly+z\n/ptvUNvt2fbUXvLTT6SGhjLESy9PRHJcAiQnJbHg008JNJkeWIYAGZXdzBYLncePF4mHUKDuLrvf\nuX9/IqKiXBonZqOFwjAzc2/n63ft7QTYumoVurCwe1bfCEJB2r9zJ2EpKXTq2/eeH4abV67EEBhI\n5ejoQoxOKEnuKdjauzely5VzaZzD4cAi6jAIHnbh1Cm2//gj4RoNvYYMeeD41jVrsPj7M/Ljj70W\nk0iOi7nrcXGs+M9/UFss2c62WMxm9m7eTPDjj4svV6FA3V12/7WhQwkODXV5bFZVYG8slxEEgLPH\nj6O4coW2r756Z28ngMloRJLJeG3o0EKMTvAlurQ0jq1cSe1HHrnnjZwkSdy+eZP6HTsWYnRCSXJP\n39iBA93qmf3Hjh2iDoPgUccPHeLAvHlUKFOGV3r2fOD4zYQEYi5d4sm+fb3a3lMkx8VYzKVLbPzm\nGwIliQFvv53t3rhfvv8eXVAQg8UPPaEAWcxmpk2cSLBOR6833kATGOjyWFEVWPA2i9nMjp9/pkKZ\nMlSqVu2eY5tXrcIQGHjPnk9BKEg/ffopQTYbz9/X//3YwYNYVSqey6EvvCC4Kqtga1haGj2GD0cb\nHOzW+AsnThDeuLGowyB4xP6dOzmxfDnVq1enzcsvP3BckiTWLVxIalgYT7Ro4dXYRHJcTJ0/eZId\nM2cSERhIj8GDsz3n0J492JVKr1R2E3yXQa9n1gcfZJTdf/NNVP7+bo0XVYEFb/vuo48IN5nodFd1\nasj4Mk66fp1HX3qpkCITfM2GpUsJTk+nZzatSY7s24c8Ohq5XF4IkQklycP6xrrq2pUrOBQKUYdB\n8Ijt69ZxZcMG6jdseKd94v2WzZmDKSCAsZ9/7uXoRHJcLGUtQ6hUtiwv9+iR7TnpqamcPHSI6Bdf\nFEtVhQKTmpzML5MmoTGbGTB27D3LU10lqgIL3rRv2zbCMvfE3//MHT90CKtKxfPZzGILgqfdTEgg\ndvdunnz66XvaLgIk3riBUy6np1j1JeRTTn1jXbV51SrSQ0PdTqoF4X5rFizg1p49PN68OY2bNs32\nnMvnz5Oamkq7N998oMCwN4jkuJjZv2MHJ5cvp1bNmrTK4e3G0lmzMiq7derkxegEX3IzIYFlX3xB\ngNnMoLffztPbjauXL4vZaMFr0lJSOLFmDfXq18+2WNxfe/cir1ZNvKkTCpwkSSyaPJlAhyPbH4hr\nFy9Gr9USGh5eCNEJJUVOfWNdZTIaAeg6aJCnwxN8zMIZMzAePUqLF16gToMG2Z5js9nYtW4dfnXr\nUrNuXS9HmEEkx8XItrVrufLbbzRo1IimrVo99Lwtq1Zh8ffnjUmTvBec4FOuXbnCuq+/xt9qzbYQ\nnKu2rlpFuqgKLHjJ7M8+I9hqpWXbtg8cS7p5M+NNnWiZI3jB/KlTCdLp6PfWWw8cs9vtOB0O2jxk\nZZgguOLuCex8fU+vXo0hMJBqtWp5OELBl/z45ZcoLl+mVceOROfwLM397juMWi1jsvls9BaRHBcT\nWcsQmjz9NI2eeuqh592Mj+fqlSs81a+fW0WRBMFVf585w7bp0wlVq+nz5pt5vk5WVeBuD9kzLwie\ntGbBAkLS0uh1Vw/Ze44vWoQuKEi8qRMK3KVz57CcPcvzL7+c7RLX3zdtwqxWU/+JJwohOqEkyJrA\nVudzAluSJG4lJFCnfXsPRyj4CkmSmPKvfxGWlET7Hj0oX6nSQ889dvAgDoWCHu++W6hb7URyXAxk\nLUNo2bYttevXf+h5TqeTdYsWkRoRIYobCQXi5OHD/DFnDuWjoujUu3e+rrUlsypw1Zo1PRSdIGQv\n4do1rv/xB82fey7bScOsN3UviDd1QgGz2+38NmMGpYKCqF6nTrbnXDl/nnLNmnk5MqGkyJrADler\n6ZWPCWyAU3/9hVWl4gWxRU/IA0mSmDJ+PKGpqbzSr989reruZ9Dr+WvvXso/9xxlypf3YpQPEslx\nEZe1DOH5V16hWi5JRFZlt3Gffeal6ARfcmDXLo4vW0Z0tWq88Mor+bqWJEkkiqrAghdIksSyr79G\n43A89E3cnTd1jz/u5egEX/Pthx8SYjLRY+TIbI9fOncOu1JJx169vByZUBJkTWBXKF2aVzzwDB3a\nvRtnxYqiDoPgNofDwbfjxxOank63QYNyXZW18Mcf0QUHM6QIfPaJ5LiIcmcZAmRUdktLS6P9mDF5\nqhgsCDnZsX49FzdupF69ejzdpk2+r3fizz9FVWDBK2ZPmYJWr+f1sWMfeo54Uyd4w5H9+wm+fZuX\ne/Z8aLKxa8MGdGFhbrfEE4SDu3dzbOlSj0xgAyQnJuKUy+k1YoQHohN8idVi4Yd//YuQ9HR6jhxJ\noFab4/m7fvsNm58fQz780EsR5kxkUUVQ1jKEsJSUXJchANisVnatW4fq0Uep8cgjXopS8BXrFi3i\n+u+/80TTpjzmoQTi8J49yKpUEbPRQoE6f/Ik0sWLtO7c+aHtIMSbOsEbjAYDBxYtonrVqpSpUCHb\nc/Q6HZJMRq+HvFUWhIfZuWEDF9evp179+h6ZwAZYt2QJeq2WiMhIj1xP8A1Gg4Gf3n+fYL2evm++\nib9aneP5t2/d4tKZMzTq0YPg0FAvRZkzkRwXMXcvQ+g6eLBLxWHmTp2aUdltzBgvRCj4ksUzZ6L/\n6y9atGnDIw0beuSad6oCDx/ukesJQnZsVitbZ8+mXGQkVWvUeOh54k2d4A3TJk0i1GKh3auvPvSc\nTcuXYwgMpEKVKt4LTCj21i9eTMLu3TzuwQlsh8OB1WLhOTFpKLghLSWFuZ98QqDBwOtjx+bao1iS\nJFbNn09KWBjNnn/eS1HmTiTHRYi7yxAAjh86VCQquwklz09ffYXs4kVavfwy0bVre+y66zL7d4ZF\nRHjsmoJwv28++IAwk4lXH1KdGkCfno4kk9E7h3MEIb+2rV1LaGoqr+VQmV+SJFJv36ZxDsmzINxv\nyaxZ6P78k6dbt6Zuo0Yeu+7erVsxq9XZ9uAWhOwk3bzJos8/J9BkYtDbb7u0MnD1ggWYAgJ46//+\nzwsRuk4kx0WEyWhk5sSJLi9DgMzKbr//TvlWrQq9sptQckiSxNfvv0/IrVu0696dCpUre+zadrsd\nu93O86+95rFrCsL9DuzaRVhKCp369s1x0nBj5pu68h58xgXhbrcTE7m4ZQuPNWlCSFjYQ887vG8f\nFn//bHtwC0J2fv76axznz9PqpZceWvk8ry6ePk0pUaBQcFH81ausmjIFtcXicuuwq5cvk3TzJq1H\njixyK7dEclwEpKemMmfSJJeXIWRZNGMG6SEhDBbLXgQPkSSJyRMmEJaSQse+fYkqW9aj19+zZQtm\ntZqGTz7p0esKQhZdWhpHV6ygziOP5FivQZIk0lJSeEy8qRMKiCRJzP/iC4JsNp585pkczz1x8CD+\nNWuKFWBCriRJ4ruPPiLwxg3ad+tGRQ8vw//n4kXsSiVd+vXz6HWFkuny+fNs/v57ghQK+r/zjktj\n7HY7W1etwhEd7bEte54kkuNClpdlCAC7N23CqlIVmcpuQvGXtd89zMWy+3lx+exZyjz1lMevKwhZ\nfvr0U4JsNlq9+GKO5/25dy8Wf39avPCClyITfM2SWbMI0unoN3p0jufdjI/PqMMwZIiXIhOKq3sm\nsHv3pnSeXj0XAAAgAElEQVS5ch6/x/Y1a9CFhaEOCPD4tYWS5cyxY/w+axalw8Lo+vrrLo+b/8MP\nGAIDeXP8+AKMLu9EclyIEq5dY+XkyW4tQ4CMym4XT5+mYffuRaaym1C83b3fvceIEWiDgjx+j8sX\nLmBXKnmld2+PX1sQADYsWUJwerpLxd5O/Pknmtq1xZs6oUBcvXyZ9CNHeKZt21y3Sa1dvBhdcLD4\nPhdy5HQ6+e+ECYSnpNBl4EDCS5Xy+D2MBgOSTMZrQ4d6/NpCyXJ4717+WrSIKhUr0qFrV5fHnTl2\nDKsk0fWtt4psxxKRHBeSKxcusGnqVLRyOQNcXIYAGbOGq+fNIyU8nOatWxdghIKvcLfsfl7tXLcO\nXVhYgV1f8G034uOJ/f13nmrRItfJnetxcRk/AAcN8lJ0gi9xOp2s/v57QlUqatevn+O5VqsVmSTR\noU8fL0UnFEc2m42p771HWFoaPYYPRxscXCD32bJ6NYbAQKpUr14g1xdKhj1btnBu1SrqPPIIz7Zv\n7/I4k9HIgW3biGzevEhX5RfJcSE4e+IEu2fOJCokhG4DBrg1du2iRUWysptQPOV1v7u7DJn9O3uO\nGFEg1xd8myRJLJk8GY3DQSMXlu2vX7KE9JAQgkJCvBCd4Gumf/YZWr2evm+/neu5OzdswKjRFMl9\nd0LRYDaZmP7++wTrdPQZPbrAljtLkkTS9es8+tJLBXJ9oWTYtGIFsVu30rBJE55s2dKtsQumTcuo\nleRm7uNtIjn2siP79/Pnr79SuUIFXuzWza2xsf/8w63r13m+CFZ2E4qfvO53z4tNK1diCAykYtWq\nBXYPwXfNmzoVrV5Pv7feyvXcrDd1L4k3dUIBOHXkCKq4ONp2745Cocj1/NjLl6nk5g9MwXfo09OZ\n/dFHBBkMvD5mDCqVqsDudfzQIawqFc+//HKB3UMo3pbPmUPKwYM0ffZZ6rlZzfyP7duxqlQMnDix\ngKLzHJEce9G+bds4vXIltWrVyrVYzP0cDgdbli/HUa2amGEW8i0vZffzSpIkUhITadS5c4HdQ/Bd\nf585g/XsWVp37OjSD8fta9di1Gio06CBF6ITfInFbGb3vHlUKl+eii60B7tw+jQ2Pz9e6tHDC9EJ\nxU1yUhILPv2UQJOJgePGuTTZkh9/7d2LrGrVIrsPVChcc7/9FvuZMzzboQM169Z1a2zK7ducOX6c\nR155hbCIiAKK0HNEcuwlW1atImbLFho+9hhPPfus2+N/+eEH9Fotb773nueDE3xKVtl9d/e759Vf\nf/yBVaXiGTf2pQiCK2w2G5szt6hE167t0pj4mBiqPvdcAUcm+KLvPvqIMLOZji4mu3s2bUIfEVFg\n21mE4utGfDzLv/zSKxPYkLGSzCmX03PYsAK9j1A8TZ00iYD4eNq++iqVqlVza6wkSayYM4e00FCe\nc/PFYGERybEXrJo/n6Q//uCpli1p0KSJ2+PPHj+O2enk1TFjxIyekC93yu6HhtK1f3+v3PP4gQP4\n1aghqgILHvfN++8TZjLR/Y03XDr/3IkT2Pz86PDaawUcmeBr9mzZQlhKCq/27+/SZ50uLQ1JJqPv\nqFFeiE4oTq5evsz6b74hwOFg0Ntve+W7c93ixei12mLxVk/wnqzWYeHJybzcuzely5d3+xobly3D\nrFYz+tNPCyDCgiGS4wL2yw8/YDlxgpbt2lG7Xj23x5tNJv7Yto2Ip54S+zWFfMlr2f38uJmQkDEb\nLdpCCB725549hKam0rF3b5d/PO7dtg1zZCRKpfjqEzwnLSWFU+vWUa9BA8IjI10as2HZMgyBgZSt\nUKGAoxOKkwunT7N9xgzCNRp6eanvtd1ux26387yYNBTuck/rsAEDXP5su1v8tWskxMbScvDgYtU3\nW/xCKEDTP/sMv6tXadO5c57L4v/6ww/ogoIYPHCgh6MTfMmeLVs4u3o1derUcavsfn6tXbSI9JAQ\n0b9T8CiDXs+fy5ZRq0YNSpcr59KYtJQUAHq7+JZZEFw1+7PPCLZaafnCCy6dL0kS+tRUmnTvXsCR\nCcXJiT//ZP/cuVQoU4ZXevb02n33bNmCWa2m4ZNPeu2eQtFmt9v5bsIEwtLS6D5sWJ46OzidTjYt\nWYKxfPk8rZotTCI5LgB3L0N4sVevPM8MH9i5E5ufH/0nThRLUoU827RiBde2baPRE0+4XXY/P2xZ\n/Tt79fLaPQXfMGPSJEIsFtq88orLY9YvWYIuKMjlZFoQXLH6118JSUujlxuTLod+/x2zWk2z558v\nwMiE4uTArl0cX7aM6tHRtOnY0av3vnz2LKVFYixkurt1WO9RowjQaPJ0nYU//oheq2X0Rx95OMKC\nJ5JjD7t7GULn/v2JiIrK03XSUlI4feQItTp2JLxUKQ9HKfiKrLL7zfJQdj+/svp31m3UyKv3FUq2\nzStXEpKWRg83luo7nU5Mej3Ne/cuwMgEX5Nw7Ro39u+n+XPPoQkMdHncqcOH0datKya9BQB2rF/P\npQ0bqN+gAc1bt/bqvS9fuIBdqaSTaG0nAHqdjtkffpjv1mHnT53CaDLxyjvvFHiV9YIgkmMPunsZ\nwmtDh+Z5KakkSSybPZvU0FDRb07Is7nffovt7Fmebd/e7bL7nnDt8mUqiv6dggcl3rjBP9u380Sz\nZm4t89q/YwdmtZonn3mmAKMTfIkkSSz7+ms0Dgf1n3jC5XEJsbE45XK6DRpUgNEJxcW6RYu4sXs3\njzdvzmNNm3r9/jvXrUMXFoa/Wu31ewtFS8rt2/z6ySdozOZ8tQ6zWizs3bwZbePGVK1Rw8NReodI\njj3EYjYzbeJEgnU6er3xhluzyPfbvHIlFn9/Rn3yiQcjFHzJdx9/jCYhgXZ5KLvvCRdOn8auVPKy\n6N8peIgkSSz4z38IdDh4vHlzt8aeO36c0IYNxZs6wWNmT5lCoMFA/7fecmvchqVLSQ8JQRsUVECR\nCcXF4pkz0f/1F0+3acMjDRt6/f4GvR5JJqPH8OFev7dQtGS1Dgswm/PdOmze99+jDwpicDF+rkRy\n7AFGg4Gf3n8/YxnCm2+i8vfP87Wux8URGxND84ED87zOX/BdWfvdw1JS6NirV57K7nvCnk2b0IeH\ni/6dgscsmD6dIJ2OfmPGuDUu9p9/cCgUvOql1mVCyXf+5Emkixdp06mTW59xVosFmSTxcr9+BRid\nUBzMmjwZ/v6bVi+/7HKPdk/bvHIlhsDAQplAF4qOrNZhars934nxn3v34lAo6DdhQrGejBZNc/Mp\nLSWFWRMnojEaGTB2rFuJsSRJGI3GO//tdDrZuGgR+shIGj31VEGEK5RgTqeTKePHE56czKsDBhRa\nYpzVv7PP6NGFcn+h+NPpdFy+fPnOf18+fx7jyZO0fPFFtycfN61cSXpwcL5W8whCFpvNxtbZswmL\niHB7yeC2tWsxajR5ausolAySJPH1++8ju3CB9q+9VmiJsSRJJN+6RQNRFM6nXTh1ig1ff014QABD\nxo3LV0KbnprKiYMHqdqmDaVKl/ZglN4nkuN8SLxxg/kff4zGaGTwuHFu9868evUqc+fOJTY2FoAl\ns2Zh1Gh4UyynFtxks9n45t13CUtJofuwYYVaxG3DsmXotVrRv1PIs/3797NgwQKOHTuG3W5n4/Tp\nBGm1bu+dN5tMALwqWuEJHvLN++8TYDLRNQ8rERKuXqWamPj2WVkru4Ju3aJj375UqFy50GI5euAA\nVpWK5158sdBiEArX8UOH2Dl9OhWiojzSU3vprFmkhobSrksXD0RXuMSy6jyKi4lhzZQpqK3WPC9D\nOHfuHE5JYuPGjdSpXh2dXs+LY8e6nWQLvs1TZfc9Iat/55Oif6eQR5IkcerUKQB+++03ti5ZQoTR\nSI933nH7WltXr8ao0RTa2xmhZDm4ezehqam80qeP29/5506cwObnR/tu3QooOqEoczgcfP3ee4Sn\npPDqoEGERUQUajxH//gDRXR0sV76KuTd/p07ObF8OdWrV6eNBwr/bl2zBou/PyM//tgD0RU+kYXl\nwaVz59jyww8EK5X0y8MPNsj4oLx69SqQ8dbv4tGjmCtXFj/iBLd4quy+p4j+nUJ+3bhxA6vVCoBk\nNhOWkkKNxx9HLndvoZMkSdyMj6dO+/YFEabgY/Q6HUeWL6d2rVpElS3r9vi927ZhjowUk98+yGaz\nMfW99whLS6PHiBGFXozt1vXrOOVyeg4bVqhxCIVj+7p1XNmwgfoNG3qkddjNhARiLl3iyb59CdRq\nPRBh4ROf0m46c+wYe376ibIREXRxo6iGTqfjwIEDpKamolKpCA8Ph8wZO3+LBV1QECaFgsuXLxMd\nHV1Q4QslSHJSEgs+/dTtsvsmk4kdO3YQHx+PJElERkbSunVrQtxojfMwpw4fRvvoo2I2WnCJyWRi\n2bJlbF+zhrTkZAKDgqjXtCl2hwMkidCUFJxyOWcvXCAiKopHH33U5Wuf+usvrCoVbTp1KsB/gVCS\nJCUlsX37dlJSUlCr1TRo0IDGjRsD8OMnnxBss+WpvWJaSgoAfUaN8mi8QtFnNpmYMXEiwXo9fUaP\nRh0Q4NI4q83Gzh07uHTpElarhdDQMFq1akWVKlXyHdPaxYvRBQUREhaW72sJxcuaBQu4tWcPjzdv\nTmM3WoclJCRw+PBh9Ho9msBAGtSvT7Vq1ZAkiXULF5ISHs4TLVoUYOTeJZJjNxzeu5e/Fi2iaqVK\ntHv1VZfGXL5yhZ9mzmPTpt9QKBvidEQhl1tp2VJOdHRFlE4HDoUCXXAwks3GkiVL6NOnD5ULcS+K\nUPRlld1XWywMefttl5LRxMREZs+YwZpVq6gvl1PDZEIuSZxRq/li0iTatm3L0NGj8/zsJcTG4lAo\n6Cn2dwq5sNvtfPrBB8yYNo0ngK56PRGADrhQuzbKoCA0BgP+FgvmgABwONi9ezdhYWGUd7HQ3KHd\nu5EqVXL7jbPge44dO8bnX33Oxg0b8Yv2wx5gR+6Qw1WoWLYiw1/rS0haWp7ftG1YsgRdUFCe3jgL\nxZcuLY2fP/4YbWbLL1cqmxsMBmbN/JHlyxZRLUrisYoG1EqIPeNHzx+/pXbt2gwdMZameeyJbLPZ\nkJxO2vbsmafxQvG1cMYMjEeP0uKFF6jToIFLYw4dOsT8GTP468gRmimVBDscGBUKJjsc1KhZk2db\ntsQUEMDbn39ewNF7l0iOXfT75s2cW7OGRx55hGfatXNpzO7duxkz5j2s1j44nL+BJQoAucxJpcqz\nkMms+NlsJEZFIcnlyGQy8UNOyFXMpUts+PZbAhwOBrmYGF++coVBvXrRWqdjhd1OxbsPmkwkAUs2\nbqTHzp18P2sWjz/2mNtxbVi6FJ3o3ynkwmq10qVdO2yHDnHQaOTudTI3o6K45u+PZLMRmpqKWa0G\nwE+ppGKlSkRGRbl0j+TERJxyOb1GjCiAf4FQkixYsIBho4dhftKMc6QTs8b8v4NOSIlJQhUbS2xy\nEn55aNPodDox6vU0793bg1ELRV3Wyq5Ak8nllV3JyckM6t+LKto45g+yUb3M3UdtvPcibDp5gnfH\nDmPk6PH06t3H7bh+37QJU0AA9fLwHS8UXz9++SWKy5dp1bEj0bVquTRm5vTpLJo5k5FmM1MATeZ2\nJwArsFavJ9lmI1apLHG5i0iOXbBpxQqubdtG4yZNaOLisoG//vqLMWPew2SeCdw7Q1OuXAJIGcup\n04ODsalUOBwOypUrR8+ePT2yvFUomc6fPMmOmTOJ0Gjo6WJ1wcTERAb16sWolBS6PuScUsAop5OG\nBgOjBg9mQWahBldl9e/s+PrrLo8RfNOoQYNQHDzIapOJ+9+jnHn0URwyGaVu38auVIIk4XA4ePaZ\nZ3jUjeX6axcuRK/VFmrVdqHoW79+PUPfHIqplwmym3eRw4TwPigMBtac2cStcWnM+GGGW9tGDuzc\niVmt5slnnvFc4EKRdj0ujhX/+Q9qi8Xlgq0Wi4Vhg/vRrHws77S3k90Qfz/o9Bg8VsVCnx8mExYW\nTvsOHdyK7Z8LFyjfrJlbY4TiS5IkpvzrX4QlJdG+Rw/KV6rk0rgF8+ezeuZMlpnNZNeUSaZQkNaq\nFQqrlT8WLGCivz9ffv21Z4MvRCUr1S8Ay+fMIXbrVpo9+6zLibEkSbzzzkeYzJ9zf2IMUKvWeTSS\nAZufH/qgIKxWJUeOxBAeHi4SY+Ghjh08yK4ZM6gYFeVyYgwwe/p0Wut0D02M7/Y0MMJo5OvPPnMr\ntqz+nbXc2BMq+J6YmBhWrljBgmwSY4CT9esTaDSitNsBCNbpOLZ2LYmJiS4nJHa7HZvdTitRFVjI\ngd1up/+Q/pg6PSQxBkZa+hCk0/Gd/1zMrSwcOnWIvXv3unWfs8eOEVKrlqjD4CNiLl1i5ZdfEuhw\nuLzlCWDDhg1oHHEPTYzvVjECvutt5ssvPsGe+VnpikvnzmFXKunYq5fLY4TiS5IkpowfT1hSEq/0\n6+dyYpySksI3U6Yw6yGJMcDcgQPRBQUxaP581hmNzJkxgwsXLngu+EImkuMczP3uO1IOHuTZ9u3d\nWoJy+PBh0tIkoNUDx2RI1Kh2EaXk4HZIBCazmqVLu/Pbby8yefKPHoxeKEn279jBwfnzqVG9Oh3d\n2CtkMplYs3o1/d34Au0K/HXkCNevX3d5TMLVq0TncQ+U4Dtm/vAD/ZxOslt4n1iqFHaFgiCdDodc\nTvVLl+i1cCGdEhJYNHu2y/fYu2ULZrWaRqKfrJCD9evXY9Pa4CElFmo6qlL/toYN/r9jk9lBCYZH\njPz8y88u3yM2JgaHQkHXAQM8FLVQlJ0/eZKN33xDKY2GgW+95daEyKJfZjGgmSnXxDhLw8pQJsjG\n7t27Xb7Hrg0b0AUFocrD9gCheHE4HHz9zjuEpqbSdfBgIsuUyX1QptUrV9JKJrt3+91djtWvn1Ff\nZtEiZJJEKWCQw8GP333nkdiLApEcP8TUSZOwnz5Nuy5dqFm3rltj581fhtHYC3jwU65s2esE2g3c\n1EZx7VYlpk0bxeXL1YHOnDlzjkuXLnnmHyCUGFvXrOHUsmU0bNCA1m5WSt2xYwf1ZTIquDEmEHhR\nklizcqVL5589fhybnx/turryblrwZct+/ZWBd+1butvZRx4hOD0dCWi1axdttm/Hz+GgA3Dk5EnS\n09NdusfFc+eIqlfPc0ELJdK3079F10CX7TEFCt5IfQk9es4q7vpOrglHjx4lMTHRpXtsWrECXVAQ\nmsBAT4QsFGHHDx26s7Krx+DBbo29dOkSSYnXaeFmJ88ejxtYtWyBS+fqdTokmYxeI0e6dxOh2LFa\nLHz37ruEpKXRa8QIQsPD3Rq//Jdf6GGxZHvMEBDAX02aUD4ujjK3bt35+3CbjV/mz3drJUNRJpLj\n+0iSxFfjxxMQH0/HXr2oVK2a29e4cuUqEtkvL32iziEsWjU7jrdmzpyB6PVZPcFUqFT1uHz5cj6i\nF0qa1b/+Ssxvv9GkeXOatnpwJUJu4uLjqWk2P/B3vUbD6Tp1+Ochlalr2mzEZ/bhzs2+7duxhIeL\n/p1Crm6mpmb7ou5mVBTnatUiJCWF7suWUfPixTvH/IEIPz+Sk5Nzvf7lCxdwKBR07tvXc0ELJdKl\nS5cgm+LRQQTxrnEgGqORWf6L7z2oAlWYioSEhFyvb8n83O0sqveXeAd27uTAvHlur+zKcv36daqV\nVqK47xe50RHA+fTqHEvKvrJwdGm4cSPepXtsWrECQ2AgFTzQCkoouowGA9MnTCA4PZ2+b77pdt9h\nSZK4lpj4kAwGFvbpQ3pwMB03bLjn75UBudPp0vd0cSB+zd7F6XTy3wkTCE9JocuAAYRHRubpOnab\nnYf9X1uz2iWWHevG7j+ey+aoH9aHvFURfM+C6dMxHTtGy7ZtqV2/fp6uITmdyGUybkZGcqNMGWIr\nVuRGmTJIMhmSXI5Wp6NqNkmwHJAcjlyvn5r5Qdj7jTfyFJ/gW5QKBXfPK0vA8q5duV2qFFqdjldX\nrULpdD4wzi5JKFyYfNm5bh26sDD8M6tcC8LD2O125HI5ZShDRSoSTTQVneWI0tnRpKewUL0JJ9KD\nAxVgc+HtyNbVqzFqNFSvU6cAoheKiu3r1nFlwwYaNGpEs+efz9M1JElCJpdxy1KKG5ayxJorcsNS\nBqdJhiTJkUkSjUqdeGCcTJbxu9WV66cmJdHYxRakQvGUlpLC3E8+IdBg4PWxY11qHZYdpySRXW31\n5My+2D0XL87mKPjJ5dhstjzds6gRyXEmu93OdxMmEJaWRvdhwwjKR2GsiIhwrsUmAPcv7cv4oj16\npnG245zOa0S52KpEKNlm/PvfKP/5h+dfeYVqNWu6PT42NparV68ik8nwGzqU1U4nkkyGUy7P6B2r\nVuNQKin7kDcg1xQKIivkvhh7w9Klon+n4LLoChU4evEirYHrpUuzpGdPtHo9Lfbs4dGzZ7Mdkwjo\nHA4ic6k8bdDrkWQyegwf7vnAhRLBbrdz6dIlrl69Sq9uvdAGa7FjR4GCQIuT0JQUJIeZlQE7iZfd\nevACEtjT7ES4sEzxRlwctdq2LYB/hVBUrF24kJu//87jzZvTOA81N27cuMGVK1e4cuUKDVr0YdWN\njOkYh1OJv8WCJUCF1d+foNTsl//HJELp0rl/9x7etw+Lvz8txfNYYiXdvMmizz8n0GRi0Ntv57m1\nkkwmI0yjIcFg4P7yXUcbNcKuVGJTqR4YpwNSrVbC3VzCXVSJ5JiM5U/TJk4kWKej96hRBGg0+bpe\nt27t+fvvVRiM934QlQpNwqFQkJya3Y+8w6jVeh5//PF83Vso3iRJYvKECYQnJ9OhZ0/KVXxYSYSc\nbdq0CUvmKgSZUolNkvDP3EOSVKoUWoMBudNJ+bi4B8ZagTVKJb906pTjPZxOJya9nqf7uN9rUfBN\ng996ixnjx5P48sukhoZmzHDPm4cqhzdxy+VyOnTogDqXt8GbVq7EEBiYp60wgm+4cuUKy5YtAyA0\nJBQAP2fGCpognQ6jn8Qx9QWuEpv9BWIhMiKSKrksTT115Ag2Pz9e6NzZk+ELRciiH3/EcOQILV54\ngToNsl/2nJv9+/cTnzlBLVcqsQEqiwWFZCU5PBy0MhRpdoL90rIdv+xIID2H5155+sTBg/jXrCkq\nppdQ8VevsmrKFLdah+Wkw0svsXLFCsbetXrQ5O/PP1Wr4pTJSAkNpfJ9Kw4XAu2ff56AgIB83buo\n8Pk9xwa9nhnvvUeQTsfrY8bkOzEGePHFF5Gk43DfF2y1SlewZjPjAhAQMI233hruUqN4oWRyOp1M\nGT+e8ORkOr3+ep4TY4AGDRqgzHyW5A4HarMZQ2AgiVFRSHI5vRcsQGW1Uin2wR+Bm4HqNWsSnUuS\n8cf27ZjVapq0bJnnOAXf0vq553h6yBD0Wi3P7N7N0FmzckyMdcASlYpe/fvneF1Jkki5dYuGrVt7\nNmChRImOjkatViNJGau4VBYLkbduodXrMar9uKVM4wAHHjpeczaAIa8PyfXH54Fdu7BFRorv8xLq\np6++wnDkCK06dsxzYgzQuHHjO0tfZU4nAUYjFn9/bpYpgz3Qj+5ll+Jns1Fe++C+4nMJcOWWjNZt\n2uR4j5vx8Tjlcrq70f5RKD4unz/Pmq++IkgmY6gHEmOAnv37s1yp5O6SXKfq1UPudGJWqzMmbu7i\nBKZrtYx8991837uo8OnkODU5mZ8nTkRjNDJw3DhUD0lc3RUQEMCwYYMJUL8FGO78vUqFGOzZ7ptb\nhEazk2HD3KtwKJQcdrudb959l9DUVLoNGUKp0g/rLueaBg0agCThbzYjdzpJiowkPTQUhd1O51Wr\nkDmdKBwOIu4rnnAe+MLfn9H/+leu9zh/4gRhdeqI2WghV5IksXDGDLZPnUqgwcDKxYsJPX8+xzEG\n4A21mtYdO1Inl32bR/bvx6pS8WyHDh6MWihpFAoFLVq0QKVQEJyaSqnERCSZDItajVVmYyMbs9tl\nDID8pIxgUzAv59IxIDkpCYDeoipwiSNJEv+dOBH533/T/rXXiK5VK1/Xq1y5MgFqNSqLBZXVyu2I\nCFIiIlAoHTwdtpcqmhj8bDYqBN47iX0rHUYvUDPunfdQ5bKvdO3ixaQHBxMcGpqvWIWi58yxY2yZ\nOpXSoaH0HzXKY9eNrlaNpi1aMMHfHwfgkMs53qgRToUCh58ft+7a/ikB76pUhNWqRas8FI0tqnw2\nOb6ZkMCvH39MgMnE4HHjPD7DO3z4YNq3f5QAdR8gozF25XLX7kuOjcjlkwkJeZtduzYSERHh0RiE\n4sFiNjN1/HiC09PpPXIkIZlFD/Lj0tmzKA2GO2+Lrf7+2Gw2FEeOUPHCBa5ERyPJZHeajVmBdUB/\nf38++vJLHs+lr3fsP//gUCh4NZc3eoIQFxPDd2PHYjpyhOeef56h77xDj1Gj6K5WswjQ33e+jYzV\nCz0CAqjYpg3vT5qU6z2O7d+PX+XKYqJGyJEkSVw5cYLQ+HgCDYY7tRfsdhsb0zZixPTgIAsoDykI\nPRfKwnkL0eSyumx9Zh2G/E5wCkVL1pan4MREXunXjwoP6fTgjrirV7HdvHnnbbFZo8HhsKNPSaCq\ntBerwy/jzXFAxtJrhxN2nYUe09V06z2UV7t2y/H6NqsVmSTRoVfuS6+F4uXw3r3s+eknqlSoQNfX\nX/f49T//739JqVOHUf7+HKpRA6dcjiSTZWwNzcxVbgFD/P3ZWbkyq7duLVHfvz655/jalSus+/pr\n/K1Wj6zPz45MJuOLLyZRs+YvTJ8+CIezEtCIK3GhwCpUqj+Qy+fTpMmTzJ37B9XEPjmfZNDrmfXB\nBwQZDLz+5puo/P3zdT2rxcK877/HoVCgadAAY1oaUmZV1qioKHba7UxWqxldrRrlgKVArELBaqWS\n6Bo1+GHixFwTY8jY35keGuqRbQhCySRJEgumT8d48iSBMtk91TP7DxzIo/XrM2/GDL7580+aKZWE\n2qmA794AACAASURBVO0YFQoOOJ1UrlaNkcOG0a5du1w/n28mJOCUy+khlg0KObgRH8/iKVPQ6vWE\nREWRajCA04mfUolcLkO/RE9gSCCGqgYIABzgf0OFdFGiWbNm/N/KzyidS8FMh8OB1WjkmQL4sSoU\nHofDwbfjxxOWnk63QYPc7ht7P6fTycr580m5fRtT+fJYAgNxmjImZrTaIOKSVTT8SE2np6N5qpyM\npQcc3NLL2HBCTVipsvxr0jja5LKcGmDnxo0YNRrqNmqUr3iFomXPli2cXb2aOnXq8Gz79gVyD7Va\nzawFC/juq6/YDQSpVPibzTgUCm4HB9Nbo+E3p5PXunVjz7RpBAUFFUgchUUmZW2+ye6gTEYOh4ul\ni2fPsnXaNMLUanoNG+aVe9psNnbs2MG106fZn24hNjGdxo3rMHLkEKpWreqVGAqCt5+PkvY8piYn\nM/+TTwgwmRj41lv57hN86sgRDu7ciV6rpec771CmfHlWrFjBmTNnUKvVvPHGG2i1Wq5du8bi6dMJ\nS04mJj6eyAoV6NipE9HR0S7dx2wy8cu0aTw/bhzRtWvnK2ZP8ubzUdKeRU+7duUKq6ZORavX83T7\n9tSud3/l/v+5ceMGhw4dQq/Xo9FoqFu3LjXdqND+05QppIWE8O7kyZ4I3SPEs1h0SJLE0tmzSTl6\nFIXDQf/Ro7E7HMyfPx+n00mFChXo2LEjNrud7du28du230hOTSZAHUCDug3o/lqPXJPiLHu2bOHE\n338zaurUIvMWRTyL+WOz2fg+s29sjxEj0OYzCYiNiWHLsmUYNRraDBpEnQYNOHjwINu3b0cmkzFg\nwADKlSuHXq9n9tSpaGJiSEhLIiQsitZt2lAvh8/S+82aPJmIli3pUoT6vovnMX82rVhB7NatNGjS\nhCe9UO8lLi6ODRs2YLPb8TebuV6uHBIQEhRE/4EDCfPASsfCktPz4VNvjk/99Rf7fv6Z8lFRdOrd\n22v39fPzo127dvx0+jRf/vfflClf3mv3FoqmW9evs+SLL9Dks+w+ZCzLnv/DDzgUCiKbNft/9s47\nPIpy7cP3tpRND0noAZIAomAB5SAoTRDpCCLSbOBBFEFFwXrEcvzsiqgUQRHs9CZVqtJbANMrJIGE\nJJtks5vNzu7M90fKSahJSLbOfV1e5zo7M5nfhjfvzPM+z/t7mPz445UvZr169SI2NpYxY8bgW94M\nPjw8HLUgEBoWxr9feqnW96vo3+lIgbGMYyBJEj98+SWlMTH4q1RMrEGvxSZNmjB8+PA63U8uG5S5\nFllnz/Lb55/jW1xMr/79ufn22wHwANq1a0d6enpldYKHRsOgQYMYdAP71uNPnaJRly4OExjL3Bgl\nRiMLXn8df72eidOn31D/dFEUWbl0KQX5+ZS2bMmzb7xRuZ2vc+fO7Nmzhz59+tCsWTMAfH190arV\nKCSJOe9+UOv7xZ85g0WtZugjj9RZs4xjseK779AdPMjdvXvTyUadbY4cPYpgsaAQRawqFSgUeHp4\nMOHRR506ML4ebhMcH9y9mxO//UZkmzbcf50WNQ1BUUEBkkJB4/KJT8Z9OZeayrpPP8WrHsr6Tx05\nwqHduyn282P8Sy9dNr5CQ0OZNWsWnpeUa2sEgeY331zr+0mSRHZmJh0aqJRHxnlJT05mzbx5+BYX\n02fwYNrdckuD3/PPjRvlskGZy5AkiV8XLaLg5El8rFYemzHjMsPNnj17IgjCZXNjXUlPTsaiVjNS\nLql2CfSFhSx56y18DYZqW0LqwrnUVLauWIFRq+X+adO46dZbqx338PDghRdeuGyMFl68SNPyRe3a\nsnfzZvRBQTekW8Zx+P6LLxBiYug9cKBNnq0AOp2OC+fPA6AURYQKZ3WFAp1OR2hoqE102AO3CI53\nbdpE/IYNdOzYkXvvv98uGs6lpiJoNPKKsptTUdYf4OHBxOnT6/xzKkqbrSoVYT16MPmxx646tq70\n8qcRBFrWoaT/9NGjmD086G+HBSYZx0QURZbOnYsQF1c2rl988Ya3CNSUc8nJhMutxGSqUDVb3Psa\nPWg1Gk29Bg7bVq9GHxSEl4v0+XRn8i5e5Kd338WnpIQnb8CwVRRFfv/uO4oKCjCHh/Ps669f9Wdd\nqVuKRhBofp2e2ldCX1iIpFAw4bnnan2tjOPx5Zw5eGdm8sCoUYTb0J8oKysLURTx0GhQlJZSUj63\nWSwWdDqdzXTYA5cPjjf+9huZO3dyZ7du3Nmjh910ZKSlVa66yLgnp48d46/Fi2kaEnJDe4CiDx/m\nyO7dFPv7M+Hllwlr2rRW1xuKi1FZrXWqYji0ezdSePgNlYHLuA6pCQms++YbfAwG7hsyhKjrtFyq\nT+JOn0bQaBgilw3KUJYt/mXhQgqjo6+aLW4oSoxGJIWC0ZPldozOzvmMDFZ++CFepaU3VNl1NiWF\nbStXYtRqGfDcc7SvxV7hCjSCQIs6BMebVqyg2NeXZi1b1vpaGcehwiE9SKdj2LhxNLbxlsxbbrmF\niIgILl68yJbff8ei0aDVajEajej1eptqsTUuHRz/+u236A8f5p5+/exedpeVno5Qx/IYGefn0J49\nHP/1V9q0asUDI0fW6WdUzRY37tWLSRMm1OnBnZqQAFDrADf/4kVEpZJxU6fW+p4yroUoiiz59FPE\npCSCvLwY/8ILNssWV7B361YMwcFy2aAMmenprCjPFvd54IHLylYbmq2rV2Pw8aFNLYzkZByP1IQE\n/pg7F1/g8Zkz6/R8FUWR35YsQV9YiNCqFc++9lqdMs9WqxW1xVLrCi9JktDrdNw1+tptnmQcG1EU\n+XT2bIJ1OkY+8QTBdiph9vb2Jjw8HICoDh0Y9dhjGI1Gmz/vbY3Lfrsln32GGBtLHxtnM66GYLEQ\nJhtxuSUVZf23dOxIzzqW9Z84eJBje/dS7O/PxFmzCG3SpM56UuPj63Td+p9/ptjXl+CQkDrfW8b5\nSY6LY8OCBfgYDPQbNozI9u1trqGooACACdOm2fzeMo6DJEn8vGABxSdP4iNJPPr88zbLFlfVcPH8\neW4ZPNim95WpX2Kjo9m1cCEhfn6MmTSpTj8jPTmZ7atWlWWLp0+nfceOddaTkZaGQpJqXaZ/eM8e\nTF5e3FODVk8yjonFYmHu7NkEFRYyZsoU/AIC7C0JoHLx73q93l0BlwuOJUli7n/+g8+FCzwwejQt\n61CS0lC0lleV3Y4bLesvMRr58euvsajVNO3dm8kTJtywprTERLxq2d7AarViFgT61MP9ZZwTURT5\n9uOPISWFEK2WsTewF+9G2bhiBXo/P5q2aGGX+8vYn4y0NFZ+8UWZE/V12oU1JNGHD2P28KDfsGF2\nub/MjXPi4EEO/vADLZs1Y+iYMbW+XhRFfl2yhOLCQiwRETw7e/YNz40VFV61JfroUXw6dJD9bZwU\nU0kJ35Q7pI+fNg1vBwhEJUlCIUlE2GEh3F64VHBcrT5//HiHcoZ2t4ElA78sWoT+6FF69O1Lx86d\na339sQMHOLFvH0UBATw2axYhjRvXi67SoiIaBwfX6pq9W7di8vKi891314sGGeciMSaGPxYuRGs0\n0m/ECNq0bWs3LaIoYigo4G55r7FbIkkSP37zDcZTp/BRKG7YSfhGObJ3L7RqJfswOCl/79jB6ZUr\nad+uHX2HDKn19VWzxQ/MmFFvTsJ1CY4vZGSU7X1/8sl60SBjW4r1eha/+SZ+BoNNPROuR252NlaV\nisBavjc6My4THFetzx81aRJBjRrZW1IlJUYjolJJ81at7C1FxkYs/vRTxPh4+g4eXOuyfqPBwE/f\nfINFrabFffcxeezYetWmEQRaREbW6pqkf/4hrGvXetUh4/hYrVYWffQRqtRUQv39GWPHbHEFh3bv\nxuTlxd19+9pVh4ztOZeayqq5c+2eLa4gLycHUalk7NNP21WHTN3YtnYtaX/8wW2dO9d6PhFFkV8X\nL6a4qAhrVBTPvvxyvc6NFzMzCavlos/6X3+lKCDAYcpwZWqOLi+P5W+/jdZkuiGH9IbgXGoqZgcJ\n1G2FSwTHgiDw5SuvEFRYyCNPP42vv7+9JVWjoo2TIw12mYZBkiS+ePNNfLOzGViHsv6jf//Nif37\nKfL35/FXXqFRA5gwaASBFrUw+UhNTMSiVvPgDThsyzgf8WfOsHXRIrRGI/1HjaJVLRdUGoozx47h\n17GjXDboRkiSxPKvv6bk9Gn8VCoetXO2uALZh8F5WbN8ORf37eOue+7hjm7danVtWlISO1avxqjV\nMvD552l78831rk8jCDSrRULFbDajkCSGyFufnI4LmZms+OADvE2mG3JIbygy09KwuLgB16U4/bc1\nlZQw/7XX8C8uZsJzzzlkj0F3HFjuSLWy/gkTaFyLFktVs8Xh/fvz1MMPN4jGUpMJjSDQtBYtHnas\nXYs+KAhPL68G0STjWFitVub/9794ZGQQFhjIw8884zAlo5lnz2JVqRhXR8McGefjbEoKq7/8sqxv\n8aBBN2RyVJ9YLBYEi4X7Gmiulmk4fpo/H+Px4/QcMKBWzuZWq5XfFi+mWK/HGhXFtFmzGmxurG0b\npz/Xr8eo1V61r7eMY5KenMyGzz/Hy2JxyMAYysr1LW5UUg1OHhzrCwtZ8tZb+BoMPPb883g4wEry\nlchMT5d7HLs4VquVz155pU5l/Yf37SP64EGK/P154tVXGzQLkZaUhKRQ1DjrYjQYkBQKxkyZ0mCa\nZByH2Ohoti9ZgtZoZMDo0bVuI9LQbPr9d/QBAfjIbfFcHkmS+OHLLymNiSFArWbiiy86VPuQfeU+\nDLf/61/2liJTCxZ88AGq5GTuGz6ciFqYpKYmJrJj7VpKvL0Z9MILDdoFRZIkNIJAeEREja/JSE2l\nde/eDaZJpv6JP32aHQsWEKzVMu6pp+wt56pICgUtHaRyzFY4zpOmluTn5vLjO+/gU1LicPX5l2I0\nGgmIirK3DJkGolpZ/9Sp+Pr51eg6Q3ExP8+fj6DR0Pr++3nKBn0J02pp8rFl1SoMPj4OU1Ir0zBY\nLBa+fvddvM+fp2mjRoxyoGxxBaUmEwAjnnjCzkpkGpr05GTWzJtX1rd48OB6MzmqT5JiYmgsB8ZO\ngyRJfPLqqwTl5jLwkUdoXt679XpYrVZ+XbSIYqMRoqKY9vLLDT43ZmdloZCkGm8RjDt9GkGjYXAd\nnLZl7MPJQ4c4sHQpLZo0YXg9+8rUNwpJcrse7k4ZHFfU53uVljpsGcKlyG2cXJMSo5EFr79e67L+\nQ3v3curQIYr8/XnytddsZiCXmpCAqoZtnCRJIi87m9uGD29gVTL2JCY6mh1LluBjNDLg4Ycdqv1d\nVbatXYtRq22Q/X0yjoEkSSydOxdzbCwBGo3DZYsrSElIwKJWM0Le3+kUSJLEJ7NmEaTTMfzRRwlt\n0qRG11Vkiw0+Pgx5/vkGzRZXJSUurlbn7926FWOjRg75tyJzOft37iR6xQqioqLoP3SoveVcE0mS\nkBQKt+u243R/SRX1+VpR5MmZM50iMAbcbtXFHSgqKOC7OXPwNRh4/Pnna1SqXKzX88uCBQgaDREP\nPMADo0bZQOn/0Ofl0byGme3jBw9i9vCg96BBDaxKxh5YLBbmzZmDT04OzUJDGfXssw49n57PyKBd\n//72liHTQKQlJbH2q6/wLS7mvqFDbRaI1IU/162TfRicBKvVyhezZhFYVMRDkyfXqB2N1Wrll0WL\nMBiNKNq2ZfpLL9m0kiYtMRFFDRexiwoKAJgwbVpDSpKpJ3asX0/Kxo3cdscddL/vPnvLuS6FOh2i\nUlnjBSVXwamC47hTp/hz4UIaabWMdeD6/KpUOAi2ksuqXYq8ixf56d13a1XWf3D3bk4fOUKRvz+T\nXn/dLj3jPMxmmtVwH9Pxv/5CFRnpcOW1MjfOPydO8Of33+NbUsKgMWNqXGJoL84cO4ag0TBg5Eh7\nS5GpZ0RRZOncuQhxcQR5ejLeQbPFFRiKi5EUCh6R2zc5PObSUr569VUCiooY+8wzNfIqSElI4M91\n6zD4+DD0hReIvOkmGyitTkZqKkE1PHfj77+j9/OjSfPmDapJ5sZZ++OP5Ozdy509etD57rvtLadG\nnEtNxaJWO/TCeUPguE+gS6ioz2/ZpAnDHLw+vyoVZlyO0sxb5sbJOnuWVR9/XOOy/uKiIn5ZuBBB\noyFq8GDuHzHCRkovp6YOmDnnz5f175SNuFwKQRD48q238MvNpUXjxjzo4NniCvbv2oWlWTOH9paQ\nqT2pCQms++YbfAwG+g0dapdApLZsLfdhqI1ZkoztKTEaWVjeyWTi9OnXzfJbrVZ+XrgQY0kJynbt\nmD5zpt0WhtU1bOMkiiKGwkK6PfKIDVTJ3AgVDun33n+/UzmKZ6aluaWhsFMExxX1+e2iorjPwevz\nLyWjvMexjGuQEh/P5i+/xEep5IkalPUf2LmTM8eOUeTvz+Q33iAgqKbrwfWPxWJBZbXWyIF43S+/\noPfzs6temfrl9LFj7PrhB/xLShgydixNW7Swt6QakZ+bC8D4qVPtrESmvhBFke8+/xxrQgJBXl5M\ncHBTzQokSSIvJ0f2YXBwKrY8+RgMPFaDntjJ8fHsXL8eg48Pw1580e77K2u6iH1o925MXl5079u3\n4UXJ1Jm6OqQ7AhlnzyLUcCueK+HwwbGz1edfitzGyXWIiY5m98KFhAUEMPo6jrn6wkJ++fZbBI2G\n9kOH0m/YMBupvDrnUlJQSNJ1V9AFQUASRQY4UYWGzNUxl5Yy9z//IUCno1WzZgwbO9YpssUVbPjt\nN/R+foQ0bmxvKTL1QEp8POvnzy/LFg8bRqQTGb0cP3AAs4cHfQYPtrcUmauQm53Nz//9Lz4lJUy6\nTvbXarXy04IFlJhMqNq3Z/qLL9p9G1FFG6eaLGKfOXYMv44dnWo+dyfq6pDuSIhWK02cUPeN4tDB\n8bqffiJ7zx6nqs+/FH1BAd41KI+RcWyO7d/P4eXLadW8OYMffvia5/69YwcxJ05QFBDAv994A//A\nQBupvDapCQk1MvnYs3kzJd7edOrSxQaqZBqSk4cOse/HHwk0mRg6dixNnCRbXIHVasVsNNLrscfs\nLUXmBhFFkcWffIKUnEwjb2/GOUm2uCrH//4bVWSkHIw4KLXZ8pQcF8fODRsw+PgwfOZMhzFN1eXl\noRRFgkJCrnle5tmzWFUqxk2aZCNlMrWhrg7pjkjrtm3tLcHmOGxw/POCBRiOHXO6+vxLkRQKWrnh\nwHIl9m3bxj+rV9O+fXv6XiNjUDVb3GH4cPoOGWJDldcnLTERqQYvdanx8bTo0cMGimQaCnNpKV+8\n+SaBBQW0at6coY884pQv9H9t347Jy4s777nH3lJkboDkuDg2zp+P1miknxOWFoLsw+DopCYk8Mfc\nudfd8mSxWPhxwQJKS0tRd+jA9Oeft3u2uCrJsbEA152vN/3+O/qAgBqZjMnYlqoO6aOfesqpt6cp\nJMnu2wzsgUMGx4s+/BBFUhJ9nazk6kq468ByFbasWkX6tm3c3qUL3Xr3vup5+7ZtI/bUKYr8/Zny\n5pv4BQTYTmQNyT1/nsaentc8JzEmBotazVC5pNppOXHwIH/99BNBJhPDxo+ncbNm9pZUZxJOn6aR\nXMHgtIiiyLcffwwpKYT4+PCIE2aLK1gv+zA4LBVbnkL9/Xn4ySevel5SbCy7Nm50uGxxVdISE697\njrm0FIUkMUyuqHE46uKQ7qgYiosRlUqayWXV9kWSJD597TUCL1502vr8qlitViSFwiEnYJnrs2rp\nUvL276dbz57c1rXrFc8pKijg18WLETQabhkxwqF7AmsEgebXKfHfvWkT+qAgPK4TRMs4HqUmE3P/\n8x8CCwqICA9n0OjRTpktriAtKQmLWs1I+QXQKUmKjWXTggVl2eIRI2jjxBVUgiAgyj4MDsnxAwc4\ntGzZNbc8WSwWls+fj9lsxuOWW5g+fbpDZYurkp6UhP91ztm+di1GrZb2HTvaRJNMzTAaDCx6/fUa\nO6Q7OufKDYUd9W+lIXGY4FiSJD6ePZvg/Hynr8+v4EJmJha1Gm+t1t5SZGrJ0rlzEc6coecDD3BT\np05XPGfv1q3EnT5NYUAAU998E1//6z3S7Mv1HDCLi4qQFArGP/us7UTJ1AvH/v6b/b/+SnBJCcMm\nTiSsaVN7S7phtq9Zgz4oCC9vb3tLkakFVquVRR99hCo1lVA/P8Y4cba4AtmHwTH5a/t2zqxaRbv2\n7bnvKluekmJj2b1hA8W+vox4+WVaR0XZWGXtUJSWEnad99+ss2eJ7NfPRopkakKhTsf3b79dY4d0\nZyAzLQ2LA/ecb0gc4ltX1OcHFRXx0OTJBAYH21tSvXAuJcVtB5YzM+/tt/HKyOD+kSNpFRl52fFC\nnY7fFy/G7OFBp1Gj6DlggB1U1g5RFMuC42s4YG5asQKDj891s8syjoOppIQv33qLwIICItu0YeDI\nkU6dLa7AaDAgKRQ8/O9/21uKTC1IjIlhc0W2eORIhw9Eaorsw+B4bF2zhrQtW7i9c2e69elz2XGL\nxcKy+fMRzGY8OnZkxowZTjE3agSB5tdYxI45eRJBo+GBUaNsJ0rmmtTGId2ZyEhLQ3Dy7HddsXvk\nJggC82bPJqCoiEemTsXXhfppZcltnJyKqtULQ8aNu6Kz7+7Nm0k8c4aCwECm/uc/TjNez587h0KS\nrqpXkiQKdTrufOghGyuTqSuH9+7l0IoVBJlMPPjooy7V6mjr6tUYfHxcJrhydaxWKws/+AB1ejoh\nAQE88swzLvOCKPswOB6rly8nd98+/nXvvdz+r39ddjwxJoY9GzdS7OvLg7NmXXGR21HRCALh11jE\n/mvHDkrDwlDLiReHIDM9ndWffFIjh3Rno7S0lOAatBRzRez611ViNLLg9dfx1+tdoj7/UnIvXkTp\nAuXh7oAoinw6ezbBOh0jn3iC4NDQascL8vNZsWQJZg8Pbh09mnvvv99OSutGakLCNY8f3rePUk9P\n7unf30aKZOpKidHIvDlzCNLpaBsVxYARI1zqgSxJErkXLtBp6FB7S5GpAQn//MOWhQvRGo30HzXK\nqQKRmiD7MDgWy7/+GtPJk1fc8mSxWFj+9deYLRY8O3VixvTpTjU3Fuv1qKxWQq+yLaYgPx9A3vrk\nICTHxbFl3jz8VCoef+kle8updxSS5JZtnMCOwXFRQQHfzZmDrwvV518JuY2T42OxWJg7ezZBhYWM\nmTLlMqfpnZs2kRwTQ0FgIM+89ZZTug9er8dx9OHDaG+6yaleJNyRg7t3c3TlSoJKSxn52GM0Cguz\nt6R658TBg5g9PByuFZpMdaxWKwvefx/NuXOEBgQwxoWyxRXIPgyOxfz330edmnpFg7eEf/5h76ZN\nZdniF190ykWalLg4gKv+HW387Tf0fn4u4Snh7Pxz4gR7vv2WxkFBPOSippHubChsl+A47+JFfnr3\nXZerz78SzuzQ6Q6Umkx8/dpr+Ov1jJ82rZp5mi4vj5XffYfZw4Pbx4yhhxMbYJxPTyf4KmVYFzIy\nyvZ3TppkY1UyNcVoMPD1nDkEFhTQvl07+g8fbm9JDcaxv/5CGRnp0s8FZyfu1Cm2LV6M1mjk/oce\nIjwiwt6SGgTZh8ExqLrladDYsTRr2bLymMViYdlXXyFYrXjdeisznnvOaRd5r7WILYoiJcXF9Bg/\n3saqZC7lyL59HP35Z1q3bMkgF92KVmoyARDuhItM9YHNg+Oss2dZ9fHHLlmfXxWpfIKLvOkmOyuR\nuRrFej2L33wTP4OBx2bMwMPDo/LYzo0bSY6NpSAwkGfnzEHr42NHpTeORhBoXuWFoirrf/2VooAA\nh+zNLAP7//yT42vWEFhayqgnniA4JMTekhqMixcuICqVjJWNuBwSq9XKN++9h2dmJo2Dghjtgtni\nCiRJoig/ny4u+vLrLEiSxCezZhGs0zHisceqeSvEnznDvj/+oNjXl5HTpzv9Ik1aYiJX621yYOdO\nTF5e/KtXL5tqkqnOni1biF27lg4dOtB74EB7y2kwMsqdqt11b7tNv3VqQgJ/zJ2Lj1LJEzNnumxg\nDGUveVaVCv/AQHtLkbkCurw8lr/9NlqTiSertBrJz81l1fffU+rpSeexY+net6+dldYPV2vjZDab\nUUgSQyZMsL0omWtSNVt8c4cOblFmvO6XX9D7+blMxwJXomq2eMDo0bR0caOWCh8GZ/OXcCUqOpkE\nFhUx+qmnCAgKAsqMXJd9/TUWqxXv229nxrPPusT7pEWvJ+gqi58xJ04QcNttLvE9nZXNK1dydvt2\nOnftStd777W3nAYlIy3NrQ2FbRYcx0RHs3vhQsICAhj9xBO2uq3dOOfmA8uRyc7K4vf/+z+8TaZq\n1Qvb160jLSHBZbLFFUiShNpioeUVVtX/XL8eo1ZLh9tus4Mymavx1/btRK9dS6DZzENPPklQo0b2\nltTgCIKAZLEwQHYFdigsFgvfvPceXllZNG3UiFEunC2uSvThw3jLPgx2w1xaylevvoq/Xs+4qVMr\nvT7iTp/mr82bKfb1ZdSMGS61SKMRBJpfYSveubQ0rCoVD7nBu7OjsuK779AdPEj33r3pdOed9pbT\n4GSmpWGuUk3pbtgkOD5+4ACHli2jVfPmDH74YVvc0u5kpqbKPY4dkPTkZDZ8/jmeglAZGOdfvMiq\npUsp9fSky7hx3H2FnonOTG52NkpRrFx1r0pGaiptXOz7OjOG4mK+efttAgsK6HDzzfQdPNjekmzG\nns2bKfH2plOXLvaWIlNOTHQ0O5YsKcsWP/wwLa/Rf9WVkH0Y7IvRYGDR66/jX1xc2clEEASWzpuH\nKElo77iDSc8843ILF2qLhRZXCPY3r1yJPiDAZRbsnY3vv/gCISaG3gMH0u6WW+wtxyYY9Hp83XS/\nMdggOP57xw5Or1xJ+/bt3epFLzszE4tcGuhQxJ85w4758wn29mbc9OlIksTWNWs4m5SELiiIcobx\n9wAAIABJREFU5+bMqWbI5SqkxMejkKTLXiTiTp1C0GgY5CYLVo7O3q1bOb1+PYFmM6MnTXK70uLU\n+Hiade9ubxkylGWLv3r3XbTnz9MsJISRbpItrkD2YbAfFZ1MfAwGHn/xRdRqNfGnT7Nv82YMLpgt\nrqDUZEIjCDS9xBukwhjpwSeftIcst2fuW2+hzcrigVGjnH5Pe22QFAq3NhRu0OB465o1pG3Zwu1d\nutCtd++GvJXDISkUchsnO6HT6dDr9YSHh1d+Fn34MPu//54WjRszfNw48nJyWP3DD5R6enLXhAku\nbXKRmpCAdIUV9r3btlESEuK2hguOgr6oiAXvvktAYSEdO3ak1wMP2FuSzUmMicGiVjNs3Dh7S3F7\nYk6eZMd33+FrNPLAmDG0cDOn5gofhsGyD0ODUlpaSm5uLs2bN6/8LDc7m5//+9/KTiZWq5VvP/sM\nUZLw6dyZSVOnuly2uIKK5/Slz+Nta9Zg1GqJ6tDBTsrcg4yMDJo3b145vioc0oN0OoaNG0fjKuPU\nXXDXHsfQgMHx6uXLyd23j249e3Jb164NdRuHxZ2bZ9sTSZJYuXIlOTk5TJ8+HT8/P/bv3En0ihVE\nRUXRb8gQtqxaxdnUVAqCgpj+9tt4eXvbW3aDcjYpiaBL2kMU6nQATJg2zR6S3I7o6GjatGmDv79/\ntc93//EH/2zaRIAgMGbSpCuWvrsDuzdtQh8UhIenp72luC0Wi4V5c+bgk5ND89BQRrqIyVFt2blh\nA0atlptlH4YGZdu2bURHR/Pss88SFBREZno6qz/5pLKTSfyZM/xVni1+6Pnnr2go6UqkJiRc8fML\nGRm0HzDAxmrci/T0dJYuXcqwYcO44447EEWRT2fPJlinY+QTTxAcGmpviTbFYrGgkCS37XEMDRQc\nL//6a0wnT9LrgQdo36lTQ9zCoZEkCUmhkNs42YHExEQuXryIKIqsXbuWpgEBJG/axK233Ub7Tp1Y\n/MknmLy86DZxIne5uNtgBWpBoEmLFtU+2/T77+j9/GjcrJmdVLkegiBgsVjw8vKqFlTExcWxdu1a\nbr31Vh588EGgrHRw0XvvEVBYyK233ebWjrjFRUVICgXjn33W3lLcln9OnODP77/Ht6SEQWPG0LxK\n1Y27cS4lhdZuVulma/Ly8jh16hRWq5VVq1bR55572DJvHr5KJeOnT+fbTz9FVCrx69KFSU8/7RaL\nNGlJSagvWcQ+fewYZg8P7i9/bsjUP5IksWnTJgC2bNlC69at+e699wgqLGTMlCluubUi6+xZBI0G\nTy8ve0uxGzUOjg0GAz/99BN79u+hSF9Eo+BGDBkwhOHDh6Op4so8//33Uaem0m/ECLetVy/Iz0dU\nKmkUFmZvKS6JTqfj++9/4Mcf16HT5ePp6cUdd9zC9OlPcejQIQRBAOBcXBwlFy9yZ48eZGdmsnr5\ncrfJFldFbbHQrMqquyiKGIqK6C6XsN4wOTk5LPp2EfMWzONi1kWUKiUqtYoHRz7IzBkziYqKYs2a\nNQDExMTQr18/Du/eTdyWLfgLAo/8+99u+fCtyqYVKzD4+NDczcp3G4Lc3Fy+X7KE6AMHMBYXExQa\nysBRoy57TlcgCAJfvvUWfrm5NA8Lc9tscQWxp08jaDQMHjPG3lKcHlEU+fPPP/nhpx/IvJCJRqOh\n400defqppzl8+DBWqxWA7HPn2PrllzQODKRj584s++ILjL6+jH7hBbeaE4rz8mh+SWXRgV27sDRr\nVtlqUqbupKam8t3iRSTFn0YQzIQ2bs7DYx8lJCSEgoICAASzme/ffRd/vZ7x06a5pAdNTchITXX7\nbjvXDY4NBgOzXp3F0h+WomilwNDKAB5AJqx+fTWqZ1S89MJLzH55Np+99hrB+fkMGjuWZpeYCrgT\nGeVO1e78ktFQTJv2EkuWLEGpHITROAtoCphITNzH2bPv0KfPnWg0ajxKSwm5eBGLWs2Jffso8fam\n+2OP0aVHD3t/BZvjYTYTXsXA5OCuXWXZczk7ckN8MfcLXn3jVbgZTINM0BSsCitWg5UV0SvYPHwz\nUyZOwdenrAWJZLWyaM4c/IuKuP2OO+jRr5+dv4H9kSSJovx87hw92t5SnJrc3FxmTp3K+o0bGaFQ\ncH9JCVogB/hy0yZmqFS8+MorvDhrVuVz6czx4+xcuhT/khIGP/KIWz+zK/hryxaMsg/DDfPzzz/z\n0msvoRf1FN9SDIGACLsP72bDpg2MfWgsKpUKlcVCcG4uCkkiPzeXXX/+ScCddzJpyhS3e3/yMJtp\nERVV+f91ubkAjJ861V6SXIL4+HhmzpjCwYOHePQekaGtzKhVcDZPwfTJaxgyegpe3lqQJPwLCvAx\nGOg+cKDbBsYAmenpcnB8vRO63tOVFEUKpkkmuCTBof+XHnLg/5b+Hx75BQTrdDz4+ONunzF19+bZ\nDcn33/+DyRQHNK72uVrdmXvvtaLRlOJZUkKjvDwAVFYr+cHBzHjnHbcsESnU6VBZrYQ0/t/v65/j\nxwm47Ta3e/mob17/8HVMk01lL35V8QGxu0jfu/viYfUo6zMtCATl56MRBEY+/jiN3GwP09U4vGcP\nJi8v7unf395SnJrut9/OkJwckgSBSztiP6PXcxr49zvvcOrYMRYtX868OXPwz8ujZZMmjHDzbHEF\nRQUFSAqF7MNwg7zz3jt8OO9DjIONEA5UGVrCLQL9pf6oFCrUgkCj3FyUoohCkij29WX0jBkuv7f4\namgEgeZVvvuG335D7+dX7dktU3t63XMXrw4q5vfPJbTVLC0k7r77FnbmqhEliaD8fLxMJkze3uz7\n+29at2mDj5u2zirIy8Pjkq147sZ1ezMkeSdhGnZ5YFyBKkzF20OmEKTTcdZY5PaBMUBmeb2+TP1j\nNK7n0sAY4J579qFWW/EyGgnLyUEpipi8vMhp3BiTry+ZWVm2F+sApMTHIykUlS+/GWlpWFUqHnri\nCTsrc36M44yXB8bl3M7t3Ky4GY1KjW9REWHZ2SgkCYuvL6np6bYV6sBEHz2KT0SEHJzdIE9euMBn\nVwiMK+gE/Gk0Yk5OZuHLLxOQm8vQRx7hwQkT5N99ORvLfRiauKErbX3y4bwPMT5qhFZUC4wBbuZm\nghRBaMxmQnNy8DCbEZVKckND0QcFUWgw2EWzvbFYLKgtlso+4larlVKjkZ4jRthXmAuw8FE9MwZc\nGhhDidWLvfm9kCQ1wXl5eJlMlJYnUKwWC7v37LGDWsehVZUqBnfkusGxub/5sgmuAg9Jw0eF0/Ev\nKuIr1U+sWb+OLDcNQqoiWa00daO9Mrbl8kUHPz89d999EH9zIaEXL2JVqchr1Ii84EaotFq6detG\n06ZN7aDV/lzqgPnHypXo/fzQuumKaL3id+WPwwhjEIPwMUNoTg7+RUWYvLywaDRYrFaOHz+OxWKx\nrVYH5HxGBpJCwWi5f+cNM7t8/+bVEDQavnrpJfp06ULh2bOMmjyZpm6eGaiKKIoYCgu5e9Age0tx\neoxDjOB7+ecqVAxkIL6lEqE5OagtFgoDAsgJC0P08aF169aEuWly5WxyMkClW//ff/6JycuLO++5\nx56yXILhXa78+a68PohWCM7Lw8NsrgyMNRoN3lotkW7U0/hSJIWCCDc3FL7+xpqrhM/ekhfvF0zB\nx6BnrtdSzAoLvh18+OW3X7mry52cO3eOrl270tYNTbkkhUJu42RD+vffhn9xASFFeRh8fMjzbYTO\n6MOx/ZvZvn0T3m5kvnUp6YmJVITBpSYTAA/KwUiD4YknE6XxBOtN+BcVIWg0mKqMP41GgyiKFOn1\nBLtp26YKNvz6K0UBAW5vSFYfXCv3G92pE3t79SKooICh69fzhcXCishIIiIjycrMpHfv3rRy88Xc\nQ7t3Y/Ly4u6+fe0txfm5ytb1u7gL/1IIKV/AzglthNFDxemTJ1nwzQKauXHnhNSEBBRVnKrjo6MJ\n7txZrupoIHRCING62wjMLURtsWDxVKNG4OLFXLr8qweDBg5029+9KIoAbt3GCerYyilA8uNt3RNo\njQY2eO/jXnrSkpZou2mxCiLRp06hUiopLS2tb70OiSiKHD58mICAgMqVz4j27e2syj0IC71A9/C/\n8TUayA0J4XRWR/au78XZs+H4+S3n1KlT/Otf/7K3TJuya9cudDod4eHhiEYjIeX7W7etWYNRqyWq\nQwc7K3RdxpmH0ybfiNoiUOSlQqWAEvRk6bPwKPDg9dmvExQU5LYP3grMpaUoJImhEyfaW4rLYlar\n+eKFFwgsKCAkJwd/vZ6NQ4fSUqPBaDQSFxeHWqXCcp2ssytiMBg4c+YMt99+O56enpw5dgy/jh3d\n/u+yXrjCr9ALL4YYuxNSoKfY15fz/gp2Kf8kmmi84705cuQIw4cPt71WO5KQkEB6ejrNmzfnn5Mn\n8Sofe2dTUrCqVIx87DE7K3Rdtp/vR2CODo0kYPHUcLPPP9wecJJN5wrZt8vAYDeuIMnJysKqUuHr\nd5XSODeh1sGxChXv5D+Of1Ehem81faz3olaVZ0YUoPIoP0+lwtf3CrU1Logoihw5ehSNWg2ShEKh\nYO3GjYSHhxMZGcnNN99sb4kuy9OjFqAWrewv7MbaX0dSVPS/LJRS2ZT8/Hw7qrMP586dIzU1ldjY\nWPwEgQslJSxbtozS7Gwi5MxIg3GrtQN35QfjYTZjVanwM4mkq9JIUKWSXHCW1ultCA4OtrdMh2DH\n+vUYtVpuuvVWe0txSYq9vflu8uSybSYKBXp/f3LDwqD8Bbziwa9UKvF1wy0WWVlZHD16lJMnT3JT\n27ZYVSrGTZpkb1kuy6Om4QQYSslopOUnz3Wkklp5TBOgIScnx47q7MO5c+fYv38/Hh4eqIuK8AJ+\n//13Cs6epSgw0K3dkhuSpMJI8tJD8Co1EuyXT6egU7TyzUClEGkeDHtiL9hbol05K7dxAuoQHIuI\nnPDNpL1nOJ5mC56CFbXJVFkSIikUiEolktWKuaQEqTxYdGXUajWeHh6Ums0orVYkjYa83Fxyc3NJ\nSEiQg+MGZMmaSeQVNsJkutKDpBQvN3SoDg0NJTU1FYvFgkYQsKpUFOfnI3l40F12BW4wTqlieaPx\neW6xtuUmawRRlnBCBD+aChH0CxNQhogs+uQTALRaLS3atKFlZCQtW7fGw8PDzuptS2ZamrxQ04B4\nmc00OX+ecy1aoLZa0VgseFap5FJIEqJSiSgIFBcVERYW5vLP6aro9XoAzIJA/PHj6AMC0BcX4+Mm\nC/q2ZrfmMDsaiaQoLzcjVIiKK/bgdnWCg4PRaDSYzWa8BQFRqSQ7OxtPoIs8NzYYoZ4X8Qo1kWcM\npUgIJDOnJeqsMg8QhVLiro4K1v74Iy0jI2kdGUlwaKhbzY2ZcrcdoA7BsYTEUs/VBHkGMZjBhBOO\nh6RBKYqorFZUVitqQUAjCOzcvJndmzb9by+FUknLNm1oFRlJeGSkSz2I/Pz8KM3LQ2W1UlK+x1Ct\nVnP33XfbWZlrk5l9td6cxZSWnqadG+6bCCnv02kRBFRWKxaNBrXZTGFICCEhIfaW59LkKwrYpz7C\nPvURqOKOqd2o5c3hr9Ktc2dS4uM5n5VFXkoKMfHxqKuYcykkiaCQEFpGRNAqMpLGzZu73IM5Njoa\nQaNhoNzbuMFQW608vHIlecHBbBoyhIwWLRA0V35Ob9u4EVWV0mqFJNEsPJzwyEhaRUXhH3gVS3Yn\nprCwEFGSyiq9JAmTtzdLliyhU6dODBo0SO5zXM8kqFKvfEACxXkFEW5ofhQUFIRSWWbqo7ZYsKpU\naAQBo1ZLr3797KzOdQnwKuKJm5ZW+8xo8Sa5KJINcW1R+UShNxg4e+wYRw4cQFm+B1chSSjUalq2\nakWrqCjCIyNd0tj0YnY2yK0m67bnGECHjh/5kda0ZphiGL4qXzxUHggA3t4olUreeOMN8nNzSfzn\nH1Li4shISaE4O5ukjAw0O3ZUDjpJoUDr40N4RAThkZE0b9XK6VYS/QMCyM3LQymK1VZdOnfubEdV\n7szP3HNPT5q7YVsOURSRJOl/k3r5/w6QgxH7YARrrJXJm58mJCSE3pfsZzKXlpISH09yXBwpcXGk\nFxaSdfo0x48fvyxoaRoeTnhEBK2ioghwAkOvjIwMdu7ciU6Xj4eHJxEREaSfPo0pNFQOQGxAo/x8\nHl22jJSICDYMHYrBxwfB43/PaS8vL6bPnk1RQQGJMTEkx8aSlpCAXqcjdf9+NHv2VDMK8vDwIDwi\nonLxpsJd11kwGAzodDqys7MBKoMRUaVCtFiIjo6mZ8+eBLrggoDNsAKqGp57DgI0Adx7770Nqcgh\nCQgIwFo+v2sEAbOHBx5mMwFRUfLcaGO06hJu8j/DwN9T2Pzn23Tq1AkASZLIu3ixMobJTE1Fn51N\nYkYGmu3bywJmSUJSKPD19aVFRAThERG0aN3a6f4N9Xo9BYWFAIRHRtpZjf25/r+eGbhGxV8aacxj\nHp2Nnemv6o+P1ger1YqXlxcKhYJGoaE06t2bbr17V7tOFEXOpaaSFBNDSlwc53NyyEtK4kxsLGqL\npXLAAYSEhVU+jEObNHGYTIokSURHR/PzkiXkFBXRuUuZZ7yoUiFJEuHh4W5Z1mt/9Pj4fMasWfPs\nLcRmSJLE9u3b+eiLj4j9J5bHJz6OT/k7rYfZjN7Pj8Zu7AbaIBRzxZYl1ZDAc7cnI0eOvGrW3sPT\nk5tuvfWK+28rgpaUuDhS4+PR63SkHTiAet++ysWPip8R3qYNLcorczztPO8cO3aMRfO/4MSJk9zf\nCRr7mjGKClbsCqVr1+EUSiJ6vR4/Nzf9qC9MwLX+xSNSUnhu3jxWd+nCiX798NZqsVqtaMv3NfoH\nBtKle3e6dO9e7TpJkjifkUFSTAzJcXHkZGZScPYscUlJqKzWysBZIUn4BwfTKiKClpGRNG3RojIr\nZm9EUeTvv/9m8eKfOXr0ABpNAA8/PBA/f19UViuG8go2tVrNgw8+KAfGN0o0UJOcgATeh7x58bkX\nHeadzhbk5uayZMn3fP75AqZMmYAKKis6zB4eDH3oIXtLdCkkqdJq4Zr8cgAiIttVBsYACoWCkLAw\nQsLCuLtPn2rnW61WzqWmkhwbWxY45+RwMTGRMzExlTEMlCX/HDWGEQSB7du38+23P5OQcAaNJohn\nJgzmm8XLOBSTyLRpU2hd3nvb3VBIUpVl4UsPKhRoO2gxjjReqb3s/ygG7c9a3pn5DrfcfAtHjhwh\nJCSEqVOn1kmUqaSElPj4ssA5Ph5rcTGa8hKwihJESaFAIUm0aNOmrPwrMhJff/863a8uGI1GXpo2\njfjjxxlvMnF7u3Yc7t0bldVKTuPGCMDPS5bQf9Ag5i5c6HSrSDVBoVBwjeHTIPeDLcCAa5ylR6sd\nyciRrVm2bJHDTEINiSAIPD75cdbtWIehiwF1JzWvebyGtqSU4Lw8AHYIOWzdtIctG7bQrVs3Oytu\nGGw5HhUKBdoWWowPG+Fq044EHjs8aF3QmqMHjtZrIChJEhcyMysXF7MzMvAwmyvnyGpBS1AQLdu0\noWVUFM1atEClqmlap2bk5uZSWlpaWaWxZvUqPv7gbV4YUMqQ28G7yuLqj0njyNY24fiRr4nRhbNl\nxz4aN25cr3ocAVuPxQe9vfmlpIRr5XGTgL5aLR9++y0BgYEcPXqU1q1b8+ijj9bpvoIgkJqQQEpc\nHMlxcZTodHiYzagtlsu2CjRp0aLs5TAqiqBGjep0v7qg0+l48slnSUszYDCOB4YAWp6esgBPVZlj\n+sXGjRFFid69e9HnkhdgV8DWY9En0AfDMANcq1JaAs1ODW31bTny95HKRRpXZ+3atYwfPwlJGkpJ\nyTPMnLmPIC8doTk5KCSJbP8gPlmynM2bV7vsljxbj8dXhmt4f7RwzQB5bxyM+krLlu176dLlKo2R\na4GppITkuLiywLmmMUxUVIM6RFutVhQKReWi5blz55g48d8UFgaXz439ATUvT/6EV1ZOodj4M0rl\nD7z99mu8/LJrLmBdayxeNzge+fBIth7eiqGHAaKobtNvAWJBu0/LC1Ne4L133gMgPz8fg8FAy5ZX\n2w9ad3R5eST+8w/JcXGcS0qqHHAaQUApipXZ5grDm/DISFrUs+GN2Wxm8rhxNImP5z2zGQ/gfJMm\nrB82rGyCa9yYNmlpDPvxR0ZptTQdNIgffv/d5QaXPYJjf//GlJY+SGnpM0CnKkcNwM/4+HzKgw/e\ny/ffz3fJBYlLkSSJ8Y+NZ92RdWWLWOXDfDazCdFbCM7Px+Djwwsh87EmWPHd7Mvfu//mVhd0Cbb1\nQ/f9D97nnf++g9RRovSOUggrP2gCRbQCn5M+3BJ5C5vXbybIhiXQFouFtMTEygezIS/vsgdzBY2b\nNqVlRASto6IICgmp0xy1fft24uLjadmiBV5eXrw3ZxbLniolIqz6eaKkYEn8JG695RRdQw/zxko1\n29Lasnf/MZfrRW7z4PiBB7iwbx//MRi4H6iasy0ClisUvOftzTuffspTTz8NQF5eHhaLpUEWJ4r1\n+rJsc2wsyXFxqMsXbiqe0xVo1GpaVinT9qrHcVBsMDDywXFkZt2NIMyi4rei0Zj591Pf4i2UoAsK\nQq/xJyUlC7Va4IcfFsrP6Ru81549exgyYgglt5Zg6WyBqm3MJSCjLGMcoYlg19ZdhLrJ/sb169fz\nyCNTKCnZANwJwKRJi4kMSyE0JwerSsWnf75IYnIyWu1j7Nq1ia5du9pXdANg6/F45+0dCPdKY/ag\nEu6KqJ5FPq+DRbtVfL3Ti19+X8d9993X4JqqxTDJyWgumRsvjWHqy7Rz9+7dpKam0qdPHzw9PRnx\n4CMUFkxGlP7XTjEkMIdHx/zI1IULyj85i1Y7kNdee5TXX599Q/d3RG4oOBZFkR9++IH3P32frItZ\nWCOsWFQWNGYNxMNtt9/Gf2b/h4EDBzbYF6gJoiiSmZ5emW3OP3++WialAoUkERwaSouICFpHRhLW\nrFmtH4ZffPIJ8cuW8VVpaeXWGoNWy7KJE1FKEnkhIUxYvpzwc+cwAj21Wp796iueeOKJ+vvCDoA9\nguOsrCy++WYRX321CFEMRaFoCpgoLT1Fjx73MmvWM/Tv39/lXnCuxubNmxk9eTSGxw3Vtj88zdPc\nlO+Bf1ERsU09+dhzYdmBE3Bz+s38c+If+whuQGz90JUkiczMTOYvnM/XC76muLAYpVqJaBEZOHQg\nL894mXvuucehxqKhuJjk2FiS4uJIjYsDkwmNIOBhNl9uPNK6daV54rWMR1atWkXW+fMoKAvMmyrO\nMKLVQTxVQrXz9p3vwcnSO5jW7SsUirJyt8Gfaxnx1Gf8e8qUhvzaNsfWY9FisfDDDz/w9QcfUJCV\nRR9JQmu1kqPRsM1ioV/fvrz45pt2rxqRJImc8+cry7QvnD1bmW3WCEK1ige/wEBatmlDeFQUzVq2\nrHXFw+zZb7FpkwWz8B5VV/WDg/IYPXoFflIxmWHNyclrzOLFY/D07MV3373Bww8/XJ9f2e7YY15M\nSUnhw08+ZPmPy9GEaxD8BJSiEuUFJb4KX1587kWemfqM22SM8/LyCA9vh9G4lYrAGGD48HV0b/c3\njbOzyQ0J4aXPPi0/sp6QkGlkZSU7nf/O9bD1eCwuLubrr+ax4OvPCfIq4c7WFjQqibP5Gv6KszBm\nzBheeOlVu5u3VsQwFQuK14phgkJCaBkZSauIiBqbdq5evZrMrCw0ajV5eTo2bQokN696dW/XWw/S\ntddRZsz7ssqnmWi1d7Fnz3ruvPNOXIkbCo4rDkuSxJEjRzh8+DAGgwF/f3/uu+8+uw+ommAuLS0r\ncSg3vBGKiqplUipWahSSRLNWrQiPjKR1VBR+AQGX/yyzmV7duvGTwVCtakgCFkyZgqRUIimVPPP1\n15WP463AK5GRHE9MdKgX5RvFHsFxxf0EQeDo0aPk5+fj7e1N+/bt3dJ8q8+APuz23g13VP98NKPp\nnR2CUhR5tcmvFCjKjBYQQTtfy54/9rjVRNfQ95IkCaPRiNlsJiAgwGH2W9YUSZLIzc4mMSaG1Ph4\nMlNTq1XlXMt45Oeff6awqKjyZ6kRUCpEugf+zS1+/6Asn/K+jZuMd4sSJrT9qfLc7afhpfVtOHkm\nWZ4b6+FekiRV9u81Go0EBgbSv39/mjmB34DFYiE9KYmkioqH3NzLKh4qxuD1Kh6Kioro0aMvpebN\nQPXMZKvwNIb1WY+5kSfZqiZ8881UDAZfYCW33/4lJ07stdE3tg32nBeLi4vZunUrOTk5eHh4EBkZ\nSc+ePZ1ufrxRPvroE+bMOUVJybJqn3fv/jcPdllFcHEBazNHsGHbsMpjfn73snTpC4wcOdLWchsU\ne41HURTZuXMnSUlJmM1mwsLCGDRoEP423I5ZV0pNJlLi48v+i4vDXFh49RjmKp0Gli1bVvmclkQR\nq1VDfHx79u+/G1NpWcXOmEG/EtS+gJmff1bt/krlh4weHcevv35vo29sG+olOHZVCnW6SpfO9MRE\n1OVZlKqr2ABeXl60aNOGvIICtnz+OUvK+yRWZfn48eiCguizezedzpyp/FwE2vn48OOOHXZfua9P\n7Bkcy5TtGWnXsR2m50yXeQL0knoyLqs9BYGBzPb5uNox5V9KxjYfy49Lf7Sh2obHni+BrkxV45Hk\n2FgKL1684v5mSaFAUiiwqlSISiVqpQWtykifRrvAKrHp/BAe6/4D3mpT5c8WRWj3ig8rNuzjjjvu\nuJoEp0Mei/WLobiY5Lg4kmJjr1nxoFSradmmDRkXLrDwu0R0hZ9e9rM6dTxN/67bOB/SjIU/PE12\ndkVZuYC3d2sOHdpSzZTH2ZHHon2RJImmTaPIzv4JqP7+16FDDE/3/gbUSmbMm0v1fYu/0LXrEg4d\n2mFLuQ2OPB7rl0KdjqTyZ3NaQsJVYxgAUamsfD6jUGC1KLGKKg4d7MqpU7cyc9Jn6IIUgplbAAAH\np0lEQVSDmf3Rh5fc5SJeXm3JzEwhODjYdl+ugbnW+HD9TZnXISAoiDt79ODOHj2qfS5JEufPnasc\ndNmZmeSnp+NhNtN17FgWVSn/CtTpaHnuHFqjEV1gIDfHxFT7WUpgsCBw4MABlwqOZexLbGwsni08\nMWlMlx0zicUIGg2/em+57JgYLnLi5AlbSJRxAVQqFa2jomgdFcV9Q4dWO2Y0GPj0ww8v652rEQRU\npVZK8WSr4X5UFitFIf7VAmMApRJubqHi7NmzLhUcy9QvPr6+3Hrnndx6SbVL1YqHlLg4stLSKDp/\nHo0g8OSYZiikTypfEAuL/Uk91watlwGztwe/rRtTJTAG0KBU9uPIkSMuFRzL2Je8vDwKCvKBf112\nTKcLQqWQSC4Jp3pgDDCQ6Oh/20KijBMTEBR03U4DSTEx5JaXaVf8V3ULS6879nBXpyMAJJ+9kpNe\nKJ6eHTl9+jS9evVq6K/kELh9cHw1FAoFzcLDaRYeTs8B/3NHfnz0aO5Zt46erVuTHBlJcmQk6a1b\nc75ZMzSCQFRyMqoqhiMV+JnN6K+QbZaRqSsmk+mqf8G5ijxSfY2cUJ6+/KC6/FoZmRtEsFhQeXkh\nCEJl79wKPCQTCquEFyU0IpfHWi294s9QKMpK3mRkaotCoSC0SRNCmzShe9++lZ/37TuCPXsm0qbl\nrdwcFUuHyFhCWuTSLiwRjSDwZ0Jf4uNvuuznWa1+GAwGW34FGRfHYDCgVvtSWnr5tpGCgkBMag8W\nLb1SEOyH2WxAkiSX2nIiYxsUCgXNWrakWcuW3NatG1999RUlVfYuK8sXtFVWK5hEPAQzJsmTg9GX\nL+KU4V5zoxwc1xL/4GCKBIF2iYm0S0ys8XU6T0/aOsHeBhnnITg4GEl/5ZKQZGU6n2qXXvlCPS5V\nGiNjP4qKiipf3iwWAZVSQYBGTxttCpHaFMK90/FXX31RUJIg8bzoFHtiZZyH4OAARLGA5PS2JKe3\nZcOfw65/EaBS5TvFHkQZ5yEgIACzuYCyDXbV91qbTN689OXnV7kyHy8vfzkwlrlh9Ho9KpUKS3lw\nLAgKRNEbpVLk/MWmJCZGkZbWmqysZlitVw4LJcm95kY5OK4lvQcM4PNffuHFWmSBLcB6lYoNvXs3\nmC4Z96Nr164o9Aq4yKWeM9dEG6tl4hMTr3+ijMx18PDwIDQ0lFatWpGdnc3iT2eyd3Zuja/fnwBW\nlT933XVXA6qUcTeGDbuPrVt/obh4Ui2uMmC1bqV37/9rMF0y7kdAQACtWrUlKWkb8EAtrlxJz54N\n31pIxvUxGo2Ulpbi6elJSYmJXbuKSUmZSXZ2GJJUE3O8NCyWJLfa+uT2hly1xWKx0DosjD90Omra\nKXYt8FHHjuw/fYUSVydGNuSyP6++/iqf7foM8wBzzS7Qg9dCLy5kXCDgCm7szoxs9GFfLBYLEa2a\nsOrpPO6KrNk1Y77x5u5R7/H8Cy82rDgbI49F+2IymQgNbUlx8UGghoORJfTps46dO9c3pDSbI49F\n+7N48WJeeGEDxcXraniFhK/vbaxb9wV9q2wXcAXk8Wh7rFYrRUVFBAYGkpmZSdu2t2IypQN+Nbpe\no3mNyZNL+Oabq1U5OCfXGh/u5adfD6jVap6bOZMZWi01CUcKgNd8fHj+zTcbWpqMGzLtmWl4xntC\nSg1OtoJ2k5Yp/57icoGxjP1Rq9W8/8FnjJmvJTP/+ud/uU1J9IUQnpw0ueHFybgVXl5ePPvsVLTa\naZTVbl2PTLTat3njjecbWpqMGzJu3Dg0mqNAzYJjpfJrmjRR0qdPn4YVJuMWqFQqgoKCUCgUtGjR\nggEDBuLp+RJlTWivxyk0mm954YVnGlqmQyEHx3XgpVdeIejeexmp1VJ8jfOygft9fLh/4kQefvhh\nW8mTcSOaN2/OxjUb0a7TwhmuPtcVg3aFlh4RPfjkw09sKVHGjZgw8VGeef5Nur+nZeMJsF7BZ+tC\nAbz4s5q5u8PYvH2PW+1jkrEd7733H7p2VeLtPRq4lpFMMlrtfbz22rMul6WTcQy0Wi3btq3Dx+cp\nYNU1zpRQKucRGPgB27atkfcbyzQIy5bNp1WrI3h6Tufai4eH8fZ+gCVLvqJt27a2kucQyGXVdUQQ\nBJ598knWrlzJE1YrTwkCbSiLTf4B5nt58ZskMWPmTN567z2XnOTksmrH4ejRo4yZOIacwhwMtxmQ\nWkpljgJ60P6jRUwUmTx5Mp9//DlqtWtaDcjlWo7DunXr+O+cV8i5cJYJ3Uy0CBIptcCBVC1bT4mM\nfmg07/3fJ4SFhdlbaoMgj0XHwGw28/jjU1mzZj1W6+MIwpNAG0AATqLVzkcUN/PRR//luedcMzMi\nj0XH4fjx4wwa9BBGY2P0+meAQZSVtupQKFbh4/MNTZtq2Lp1NW3atLGz2oZBHo+OQcH/t2/HNgjD\nUBRF3wBZgKmcHtEyEhVlRqEiHZOkTIpIbGAkJIIlnzOBiyd93cLLknE8Z55f2bZr9v2S5JRkTfLI\nMNySPDNN95RS/vvYH6nt42McQ83RcQw1Rx5dqLFFWmGLtMQeacVXcQwAAAA98OcYAACA7oljAAAA\nuieOAQAA6J44BgAAoHviGAAAgO69AbWAwhFRGkKNAAAAAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0x377f490>"
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Let's test more points and display for each trial the maximal quadrilateral found"
},
{
"cell_type": "code",
"collapsed": false,
"input": "plt.figure(figsize=(14, 14))\nareas = []\nfor t in range(0,100):\n points = [(random.randint(0,20),random.randint(0,20)) for i in range(0,4)]\n area, _, maxQ = maxAreaQuad(*points)\n #print points, X\n ax = plt.subplot(10,10,t+1,frameon = True, xticks = [], yticks = [])\n title(str(area))\n areas.append(area)\n for pt in points:\n ax.scatter(*pt,c='blue',s=50, xmin=0,xmax=20,ymin=0,Ymax=20)\n plotQuad(maxQ,alph=0.3, col='b')\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": "*"
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Let's have have a look to the area distribution: lognormal?"
},
{
"cell_type": "code",
"collapsed": false,
"input": "areas = []\nfor t in range(0,10000):\n points = [(random.randint(0,20),random.randint(0,20)) for i in range(0,4)]\n area, _, maxQ = maxAreaQuad(*points)\n areas.append(area)\n \nplt.figure( figsize=(7,3))\nplt.title('Histogramm of maximal quadrilaterals area')\nplt.xlabel('area')\nplt.ylabel('count')\nplt.hist(areas, bins=33)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 94,
"text": "(array([247, 641, 781, 889, 949, 923, 885, 788, 676, 656, 525, 442, 380,\n 302, 243, 191, 126, 100, 73, 55, 35, 28, 19, 13, 9, 7,\n 7, 4, 3, 2, 0, 0, 1]),\n array([ 0., 8., 16., 24., 32., 40., 48., 56., 64.,\n 72., 80., 88., 96., 104., 112., 120., 128., 136.,\n 144., 152., 160., 168., 176., 184., 192., 200., 208.,\n 216., 224., 232., 240., 248., 256., 264.]),\n <a list of 33 Patch objects>)"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x7e09a90>"
}
],
"prompt_number": 94
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment