Created
November 18, 2017 17:10
-
-
Save jhconning/f2f6ecfb17163009135252b000c83761 to your computer and use it in GitHub Desktop.
Murdock atlas and Fenske paper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "# Exploring Murdock's Ethnographic Atlas maps\n## using geopandas and folium \n### (relevant to a replication of James Fenske's paper)\n\nThis notebook illustrates how to do mapping and some geospatial analysis inside of a juptyer notebook using various python libraries. All of these steps can of course be done inside of dedicated GIS client such as QGIS but it's nice to be able to do many of the same tasks inside of a notebook for better documentation and automation. \n\nThe notebook illustrates how to load and display vector polygon as well as raster geospatial data. There are many ways to do this with python but we focus here on using [geopandas](https://github.com/geopandas/geopandas) with [folium](http://python-visualization.github.io/folium/) in a supporting role (to make things look more cool on interactive slippy maps using [leaflet.js](http://leafletjs.com/)). We use the [rasterio](https://github.com/mapbox/rasterio) and [rasterstats](http://pythonhosted.org/rasterstats/) libraries to work with raster data. \n\nBroad outline:\n\n1. load vector polygon from [Morduck's Ethnographic Atlas](http://devecondata.blogspot.com/2007/10/ethnographic-atlas.html) data digitized by Nathan Nunn. We'll display the data and show how to also plot markers on a different map layer.\n\n2. Load and display gridded raster data on wheat suitability. \n\n3. Calculate raster zonal statistics \n\n4. (not finished) Discuss how data such as that constructed in step 3 was used in an empirical paper by James Fenske..." | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "import pandas as pd\nimport geopandas as gpd\nimport folium\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nplt.style.use('bmh')", | |
| "execution_count": 1, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "First create a folium slippy basemap. " | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "m = folium.Map(\n location = [-1, 25], \n zoom_start=4, \n tiles='cartodbpositron'\n)", | |
| "execution_count": 2, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "We use `FeatureGroup`s to add feature layers that we can later turn off and on via LayerControl" | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "We will have different folium map layers or FeatureGroups. \n\nThe `marker_group` below is just a collection of markers (all appear at once). \nThe `marker_cluster` will, depending on zoom level, cluster markers into groups to make the map less cluttered. We turn on only one of the marker feature groups at a time.\n\nThe polygon group will have tribal group borders. " | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "poly_group = folium.FeatureGroup(name='Tribes')\nmarker_group = folium.FeatureGroup(name='Markers')\nmarker_cluster = folium.MarkerCluster().add_to(m)", | |
| "execution_count": 3, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "#### Morduck's Ethnographic Atlas\nShapefile [digitized by Nathan Nunn](https://scholar.harvard.edu/nunn/pages/data-0) \nWe import this shapefile into a geopandas dataframe:" | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "tribe_areas = gpd.GeoDataFrame.from_file('borders_tribes.shp')\ntribe_areas.head(3)", | |
| "execution_count": 4, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "execution_count": 4, | |
| "data": { | |
| "text/plain": " NAME TRIBE_CODE LAT LON \\\n0 ABABDA 1 23.161800 33.70160 \n1 ABARAMBO 2 3.702955 26.79730 \n2 ABE 3 6.069531 -4.26032 \n\n geometry \n0 POLYGON ((35.73971002025493 22.87610925401416,... \n1 POLYGON ((26.45080101160396 3.392839235868952,... \n2 POLYGON ((-4.074770016825197 6.375219238646509... ", | |
| "text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>NAME</th>\n <th>TRIBE_CODE</th>\n <th>LAT</th>\n <th>LON</th>\n <th>geometry</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>ABABDA</td>\n <td>1</td>\n <td>23.161800</td>\n <td>33.70160</td>\n <td>POLYGON ((35.73971002025493 22.87610925401416,...</td>\n </tr>\n <tr>\n <th>1</th>\n <td>ABARAMBO</td>\n <td>2</td>\n <td>3.702955</td>\n <td>26.79730</td>\n <td>POLYGON ((26.45080101160396 3.392839235868952,...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>ABE</td>\n <td>3</td>\n <td>6.069531</td>\n <td>-4.26032</td>\n <td>POLYGON ((-4.074770016825197 6.375219238646509...</td>\n </tr>\n </tbody>\n</table>\n</div>" | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "geopandas is a powerful python library. Among many other things it allows us to plot:" | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "tribe_areas.plot(column='LAT', figsize=(12,16));", | |
| "execution_count": 5, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": "<matplotlib.figure.Figure at 0x1ec115c11d0>", | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAI9CAYAAAA9yG5SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsvXmQHNl93/l5L7Ouvk8Ag8E5gxkA\nA2AwmIuXtDpIinZIlrS0dkPH2lqLCkm71MoK2UEFV7s6qLCsw15ZltaivWRYl5eyVoclkqJEUSRF\nitdwBnNgBscMgMGNBvruriuP9377RzUafWdVdXVXddf7RHR0V+XLl7+s+na+X778vd9PiQgOh8Ph\ncDgcDke7opttgMPhcDgcDofD0UycQ+xwOBwOh8PhaGucQ+xwOBwOh8PhaGucQ+xwOBwOh8PhaGuc\nQ+xwOBwOh8PhaGucQ+xwOBwOh8PhaGv8Zhvw+c9/XjKZTLPNaAniOMb3m/6VOFoYpxFHEk4jjiSc\nRhxJbFeNFIvFsXe+853DK21r+tlmMhmOHDnSbDNagqtXr7J///5mm+FoYZxGHEk4jTiScBpxJLFd\nNXL69Omrq21zIRMtxM6dO5ttgqPFcRpxJOE04kjCacSRRDtqxDnELcTo6GizTXC0OE4jjiScRhxJ\nOI04kmhHjTTMIVZKeUqpF5VSn5h7fVAp9TWl1BtKqf+qlEo36ljbFaVUs01wtDhOI44knEYcSTiN\nOJJoR400cob4nwPnFrz+FeDXReQRYBJ4XwOPtS0ZGBhotgmOFsdpxJGE04gjCacRRxLtqJGGOMRK\nqT3AtwMfmXutgG8F/niuye8C392IY21n2vERhaM2nEYcSTiNOJJwGnEk0Y4aadQM8b8DPgDYudeD\nwJSIxHOvbwAPNuhY25aenp5mm+BocZxGHEk4jTiScBpxJNGOGll32jWl1HcAd0XkBaXUN997e4Wm\nstL+d+/e5X3vex++72OM4b3vfS/vf//7GRkZobOzE8/zmJmZYXh4mImJCUSE4eFh7ty5Q1dXFwD5\nfJ6dO3cyOjqKUoqBgQFGR0fp6enBGEOhUGDXrl2MjIyQSqXo7e1lbGyM3t5ewjCkVCrNb0+n03R3\ndzM+Pk5/fz+lUolyuTy/PZvNksvlmJycZHBwkNnZWcIwnN+ey+VIp9NMT08zNDTE9PQ0URTNb1/r\nnEZGRrDWbqtz2o7fUzPPKQgCZmZmttU5bcfvqZnnJCLb7py24/fUzHO619d2Oqft+D0185wmJiaY\nmZnZVucUhuHa/qzIin5q1Sil/jXwT4AYyAI9wJ8B7wF2iUislHob8PMi8p6l+3/lK18Rl4e4wnbN\n++doHE4jjiScRhxJOI04ktiuGjl9+vQL73znO59eadu6QyZE5IMiskdEDgDfC3xWRH4A+BzwPXPN\nfhD48/Uea7uza9euZpvgaHGcRhxJOI04knAacSTRjhrZyDzEPw38lFLqIpWY4o9u4LG2BSMjI802\nwdHiOI04knAacSThNOJIoh010tDSzSLyeeDzc39fBp5tZP/bnVQq1WwTHC2O04gjCacRRxJOI44k\n2lEjrlJdC9Hb29tsExwtjtOIIwmnEUcSTiOOJNpRI84hbiHGxsaabYKjxXEacSThNOJIwmnEkUQ7\nasQ5xC1EO96ROWrDacSRhNOIIwmnEUcS7agR5xC3EEk58hwOpxFHEk4jjiScRhxJtKNGnEPcQpRK\npWab4GhxnEYcSTiNOJJwGnEk0Y4acQ5xC9GOef8cteE04kjCacSRhNOII4l21IhziFuIdsz756gN\npxFHEk4jjiScRhxJtKNGnEPcQqTT6Wab4GhxnEYcSTiNOJJwGnEk0Y4acQ5xC9Hd3d1sExwtjtOI\nIwmnEUcSTiOOJNpRI84hbiHGx8ebbYKjxXEacSThNOJIwmnEkUQ7asQ5xC1Ef39/s01wtDhOI44k\nnEYcSTiNOJJoR404h7iFaMc0J47aaDuNSAgSNduKLUXbacRRM04jjiTaUSN+sw1w3KdcLjfbBEeL\n034aSYFSzTZiS9F+GnHUitOII4l21IhziFuIdsz756iNttPIPWdYYqCEb1/At1/FkzeIvG/HqMMY\ndQBUZxONbC3aTiOOmnEacSTRjhpxIRMtRDvm/XPUxpbSiORBiiu8X5pzcKvDN1+iM/oResN30Rn/\nNBn7Z3hyCc+eoyv6ITriDy0OqxAz97s9Qy22lEYcTcFpxJFEO2rEzRC3ENlsttkmOFqcraIRZd8g\nG/4zRA0Qpn4RUTsQ9QAA6ehfo+1zWP0WjPdNGP0MqG4Qi2IWUb0gIZ68im9fIWM+gmKxc6sokbZ/\nUflb8oABUnNbI3LRh4CIUuqXNu2cW4WtohFH83AacSTRjhpxDnELkcvlmm2Co8VpqEakhJLxOUe1\nCHSh5SJZ8xG0XEIYBkIUAYIHdCMoYv1WIu87Ko7rfF9TaHsGRRltT+Obv0VRQslNsuEPISisfhJt\n30QxAYC2n8C3nyDy/ila+aTsZ9FyC2EYxTSK6mLYtFwmbf+SUP/3ZM1v4Jsv4HGTWJ2qzBYrr3Gf\n2RbAXUccSTiNOJJoR404h7iFmJycpKenp9lmOFqYdWlEZD4mV9lrpKP/HS0XsOoEnryMVbvJcHfB\nDtdX7CZlniNt/xsF/5cQNYRnv0Y6+hCKYNVDKwTPvrDiNt9+nTRvLGh7p6bT0kyQNn9CynwGXyrH\nMOowhdS/bztnGNx1xJGM04gjiXbUiHOIW4jBwcFmm+BocdbUiJRRcgMt1wGFlik0dwCDJ1fx7EsY\ndQxDiLZfQ2EB8ORlALTcItbH8OVCoh2eXCMT/RJaXln3OQnrj/X15OKi10X/Z0C1X+lRcNcRRzJO\nI44k2lEjziFuIWZnZ+nq6mq2GY4WZiWNKHuFdPyraPscCpl/X/Qp0nLm/mt8hPyqM7UARoI1LwqC\nh1EPY8mi7Et1n8fiTgOoM7NarA5i6cGXqyhmCfV3E3n/EKsPN8a2LYi7jjiScBpxJNGOGnEOcQsR\nhmGzTXC0OPMakQl883F888doubViW2VfJFAn0CpTcZPtJZSs7gwDaLlIqJ8kvcLMb6ROIvYiSs7W\n678CYOnA8gCiuoEQ5BYl+lA8SIbzKExiH7E6QMwQyn4FgJAhxPtewtRPrMOy7YG7jjiScBpxJNGO\nGnEOcQvRjnn/HLWxa+cwfvwHpOL/sGbM7j20nAGpbQJW2dOEai+onWhCIMZIhLYvrNhPrB5FyHHv\nKBW7YiqXFw+Zu8wIlUV8lRjhWZQs6ERAuINVB/FY2cGfPx6HKJtXUfqZ+QuYYgzjLmeAu444knEa\ncSTRjhpxI0gLMTIywv79+5tthgPm8uemQKUSm24md2//DYcf+PUNP46S6yDX5wMwVktYHqmTKDm9\npsOtlvxeCUEh6iSK26u2idUBIukktpXjiUws2u6ZPyf2vw9U/xpH2v6464gjCacRRxLtqBHnELcQ\n7ZjmpJWIzVmU3MGTsxD/PqQ/BN63NccYiQAP3/wOvvlrQv/HUeTpTn9mXd1a0UAnVnUAPkgZTRFF\nEVVjieRYHQN5cV323MOox1H2RQootNqPp3aglQUUFo2xNxB7HljgWMslrNo9t3AQFKOkop8h9n8a\nUfvatuSzu444knAacSTRjhpxDnELkU6356r4VkCkzHT5h+nQh+igslhM7Cub7hBrewY//n08+1Ws\nOoAnrwGQjX6y8jt1aM39rYBVe4jUAFZChCIQVKrDUZz7KYOML9nTA+kC1YuiE1QWhYdCocWgVIiW\nMhYflI+Ij5ZLixbx1Yuwe36BnkIQuUIsV6ra16rdaLmfps2zX0WH30Ps/zjGezeo3eu2b6vhriOO\nJJxGHEm0o0acQ9xCTE9P09fX12wz2pLQfBFhGp+Z+2/GfwzqKPjfvik2eOavSUf/5/yisnvO8EIm\nZg8x0LM4xVjMHiI1iJUCwlWQy5WfmjDANMh0xcUV5l1dM/d6nrm/tTpOikso1rf4QlSOev1qa1/E\n6v1ouTr/nsKQin8D6MT437Mu27Yi7jriSMJpxJFEO2pktdBARxMYGhpqtgltSyn6z0AKX67Nv6co\noqIPQvQfwdaRK9d8sfq2MkUq/k+JGRZ29ldyBosIAcfIs4eyXMbYryNyFijUbmedWHmVkAcRutfV\nj5LLlRuPevbFENubGHV8XTZsJ9x1xJGE04gjiXbUiHOIW4jp6elmm9CWxOYssX0ZXx1Aq3h5A/MZ\nCL8PzKdBRisV36QI9jWIPgrmeQg/CPEnwV4E82UI/jmEvwBLFn4tRdkbZMIfJRd8B7qKMIHJ2UNE\n7KOg9hLJi3XMBDcWkYsE0oeVzrr7UAiaNxAG6tw/wNqXMerEovc98//NxWK3F+464kjCacSRRDtq\nxIVMtBBR1H6DdytQjD4CQEqt9nioq5K/N/yXAAg7gCKK/OJm5pPL9pTwA6AeAjUI9kWU981o1QVo\nPPsCnvl4VXl371GOdxHI12DpsZtCF6iDgBDKKEqdwKOML28k7rkcTSVVW/1YmWJhoebY/59aLkvI\nZuCuI44knEYcSbSjRpxD3EK0Y96/ZmNlktB8FgB/tby+cg2hG8UsAIq7Vfev7HPAc/OvNSGZuVLJ\ntdvaxdDQc2yWMywCoo8hZBEJgBJCEUUGTz2IkudhYSU8+xIxEKujpJlCV/E5CQ9i1Q5EJlG8uU6L\ns/N/Gf0WrP4H6+xva+KuI44knEYcSbSjRlzIRAsxMjLSbBPajlL0+0DlTthnaeaFCopRwEPUE3Ud\nQ9DAjrnf9a0es9JNUQ0wMvZoXfvXirAXow5i7Bms/ToiryDyBshNRC4jlGDVG4hzhDJDzJ5V+7dq\nHzHDWLkB9jRK1usMg1Jdc7YPEfv/G6gUyr4M0l6P/tx1xJGE04gjiXbUiJshbiE6O+uPw3TUjrFX\nKEW/M/cqg5aRVatHKKZAXkLUU4nlj+8hCHCALEW0msTIDpS9WFvZOCDmQcoUQS7SmVvfArZqsOoY\nxr7Oqg7vnFVrUyBmJ4bj+DKCp8YWbRXJoRZkhlhuw5NYioBGqSxaxlALFjyuvt9uYv/nEHUEZc6D\nygI9ifttJ9x1xJGE04gjiXbUiHOIWwjP85IbORpGIfx17jt9QsVTTZjBlbMIWRTlFTdb9iJ6GCsz\nIDephDdUZqA9tXgGWkSw9KCZWVQUQ0QQejFqgEj1YO1L3HNAtV75uI3CcgJjzwB27XZyN/HxktBD\nZE8TAoqD+GqIlFzDUxOI3F31vkDoxMjpeRtEKn/5an+lgt5qNukTGO/nEL2vsp93JMHC7Ym7jjiS\ncBpxJNGOGnEOcQsxMzNDf397l53dLIL4rwjNwqpvIXn1BBliwKKI8OXasqwTihKijoO8uuh9QTDq\nCUReBLtw5rNAXh0gzQFEpRDAEiMyi3AHGEPrb0DJNEJApXDGWOVHxpb557OFh+jvPdegT2Exwj6M\nvEaSMwwgcgv0oTWyXOwitmcXtH+TSN4kwkOrk2ilgf1zx71vgWAAH21fQ6nFzr/QtaITLfpJrP9j\n4L0l0e52wF1HHEk4jTiSaEeNOIe4hRgeHm62CW2BlTHywS8sez+wLy0JEsiQUkfJoshydtH7SxH1\nSMUZXgm5QkhqlRRgGpFxkPNV2T488HxV7dZCRLDqcUSl8OQmVg1hJQLVA1VWiAOIReOTYXlohYeh\nG7i1wl4Ga09j6Ya5RYor2qj2o1U/SqZBDJ7ahZbTy9vpb8Kmf6NtyzSvhLuOOJJwGnEk0Y4acQ5x\nCzExMUFHR0ezzdjWiFjywS8izKDVHjy1i4pDFyNkie1CpzYgsq8SAYE+SZe8iacKxKSw6gnuBQMr\niSoxxquSxqqjKALAIPTMzYpqfGZRVTrDABPTx3kweye54SoY6SFWR0C+CnKvCt3tOWuO1dSXyOvE\n6lF8JSCX7r+vnsDaryfsPciaDrFcxSyIMbaqB2UH0UvDTvQjzhlegruOOJJwGnEk0Y4acQ5xCyFS\nZ/1aR1VYmSIf/B+E5nOk9FMY+wJ2SUxqSp8gtiMIixeBhfZlJumkQ78dY7+wrG+fo/holoUbqEME\nAqFZefa4V9dWGlNs7Xl1rXRQVo9QkojAXiCjC3St2LL6fMjz9sjrRFJxgoVJALRdfbHcPZQeROyV\nqo9j7auU9UmKprLy2VNDpNROlDlD2p9CL8ghbe0VII3Wu2s5lW2Du444knAacSTRjhpxDnEL0Y6P\nKDYDY29QjP4TYfxXCAVS+gmsfX7FeFRrz6BI46uToDSCBQyIxdMdGLtyyEIs50A/C5JHq04UM0SS\nJTBr5xy2ah9aXqv6XIYGnktuBBjpo6wOUpaQwF4A7tsR2NfoUP1oNbnYFrlTdx5GI1cRKlX5tH4K\n7No5iK2UGLPDdOo9ZFWMlnMkZa6w+Gi1G00Xsdyci3eGsPxjdGV+E60r/z9x9FsY82nSmd/G895R\n5xltXdx1xJGE04gjiXbUiHOIW4g7d+6wf//+ZpuxLRARYvs8QfyXlOM/mn8/pZ9OfJyvCLHy0rIF\nbVqOIBRX3kc9TGyfm9v/UUL7elV2xqRIV9Wywt3xt7Fv9/KKeABWMpTUY5QkT2gvAqvENAOxPkBa\nJpe8u/R1DajU/OcV2zuJFxZDB5FMMmUqx/Tootc/RJYbIMvzXwoaKyW8ubjktD40d45g7CvMlL6L\ntP8PMfYKmdT/TMr7bqzEtN86aXcdcSTjNOJIoh014hziFqKra+UH2Y7qMXaEIP5LgvhPMUuKPSh6\nMPZ0rWmAF7CW63p/blVqcHHL5gJpPQBzs6tJdHUsz8VrJUdBPUbenkfWcIIXEopZZKUIoHYBJaD2\nQhZKDSFSiW0WbmD1OwglRAEZeW2u3/vk7eJjGPJMxC8BHoP+02TkEosd9AeRRTPpSzNQTBHEHwMg\nJe+gHH8aY9+g368uZ/R2wl1HHEk4jTiSaEeNOIfYsS2IzPPkgw9hFizuWoowg6ceQaS62dulWMyK\nzrRiR6WKG6AYIrTVh0AIeYoM08EU1aQ7W0rIASZkFmtrc/wC+zoZ7xmEMlYKGG6BjKDooEM/PRfC\nUKi6P7WgbDJAJAETcSVMY9A/RUbuz8rH6mmK5qVVejKMxy+hybDDP46eT29XRKlnQFkQwcjqC/JK\n4b8BQOsnicxr+PowSrlLncPhcDhWx40SLUQ+n2dwcLDZZmwprEwzU/5RYltd/txYbuCrR+Yd2FqI\n7Wuk9VFEFucBVmofInMxs+pAJX9wDUT2TWLvWfwqKuDli/sY6DtT2Y+9jJsRZJUiIWuhVTeB+fqy\nBA1CkYJ9HsiS1SfxlY+SCDCIymBFEcssKdWNXmCvLAm/0Auc6fH4NP3+U2QpEdHJWJw8i20JGIkv\nsMt/Ek1AJEXixMwV92wB7T1DYJ6H8COkvGdQqous/26UylXVx1bGXUccSTiNOJJoR404h7iF2Llz\n54b2H5ubaJVB66ENPc5mIWLIB79AbM/UsFcJI6No+mDNVGkrE9qLpL2nQcYQuQHEWLkxt7WXyFaf\nQm0hBfMKvbqLSmW71dkx+BWMDDKr9lM0r5BcQnllfPUgitE1WpQp29UXBIai6NJHqFThS4NKL465\nXjRTr5iM115cuDLClLVkeTW56b09BLR+mtBUFj8G5tME5tMAFMLfwtcPkfHfTdb/rm07a7zR1xHH\n1sdpxJFEO2pke44IW5TR0VH27t277n5ELMI0Wi2uMuN7D66771ZBJGA2+ClC8/na92Ua1EEQw1q5\ncFcmmne2Kmg81YWnHkXoQlYoHlEdZaw6ipZXFtuqHiamj1gMigzXJg7TteO/AOMrd1MlHl5SkeoE\nhHFTIJzLYdyhH6Zz4WyzeghYPXylemoLI9HeM0u+nwU9yU1Cc5PQfJFS9DE60z9B2vvGJWWzLZF9\niTD+Ar73GBnvW7ec41ztdSSIv0A5/gt8fRgwWJkg430zvnccrXo23lBH02jUWOPYvrSjRrbWlX6b\noxpUYMDINaZKPwoE+PoIXelfwPe2z92esbeZKf8YRi7W34e8ia9PIPaV5MZrYjFyESPgqVN4+gTW\nXqs43bXaNJfJ+B4lTjIT34+19fXTGG5ST77gpYisVEWuepTaRWhvca84SdFeosM/hZIXgR3k7fpt\nhEroRPU2nVzVGV5KbM8xXf5fUPTg6QfQaqhSONpewMrczUYEntqLr48CkPbfhq9P4OtDKFV7PujN\nYqXriIgQmi8Rmr9H4WPsdQLzWSqf8Kfm25Wi/4JSA2T995DST5L2374ox7Nje9CoscaxfWlHjTiH\nuIUYGBhoSD++PsBgx58Tmq+j8PC9nVgboPXyksNbjci8wGzwL7Cy1uP+6ojtGTQ51JIMCPVi5MX5\nsAHFXrTeibHVL06LZZYUIPRR5gAzS4p5WIp09NxYeeca0GoIkdvrLPC2F5YULxmLz+CrYWKZYF0p\n3BYQyzjVpAUR6SSu4wZJmCG2M8CFFbcbuY4xleIt90IvfH2Unswv43uHaj7eZrDwOmKlQBD/LeXo\nT4mqjsGeoBR9jBIfgyCLrx+lN/sbeHrHRpns2GQaNdY4ti/tqJF68/A7NoDR0fU7efdQKkvG/0bS\n/tvn3gkQqT2LQasRxB9viDMM4KmDDXOGlyJcnyvikUar6nI5xhIxbvu4ayaXOcOKYSJ7gfzk0+u2\nLaX2rNMZ7iRvVnI+FbFMUZUHWyVWphDpTmynvcdWzRHdaGJ7jonS9zJVej/F8PcI4s8S20tYqT4r\nx0Zy7zoSmueZKH43s8EHlznDIllEHUBIGvTKxPYVjH0zoZ1jK9HIscaxPWlHjbgZ4haip2fj4va0\n3h4xgfOPs9eJohOFrDOOthom0eohrCSVM9aEYomXFcuY26r3gh0j23l53RZpwnWcd46Y/VjqS11X\nD6L2oji7RoNuIlPfYsb6KRGazy+JYffpzvwiudR3brIti+np6aEY/j758JcXvS/iI/o4AZqivQBz\nZbDT+jCdqgNlX1z1RimSsKYCMo7WZiPHGsf2oB014hziFsKYxsRdbldEDHYVh7E2NL56ECsrPyZv\nBlo/SWxWXpDnqUcIbSWW2Nrsim2qRdGJtedqmCHWlRluNUgkIWVzdVOdYYCQDGudtdKPIra2xYyK\nLrTaAaoDAGuvIjUvsFxKTD78NTL+Nzd1UVqh/BdEqV+dfy2SJdZPkLeXsCvcOIT2KiGQVofIqSE8\nuYzifultUQe5XvoAXdE3kNYHUCqNr/rp9N9GWm+fhbrthBtrHEm0o0acQ9xCFAoFhoa2R0q0jSA0\nnyG21VViWwut3oaxf1+1UyiSqVRxUz0IGQSNUAkMqMy0dhBLJRfw/ZlXwRCj0HSSFLudoWyWZ2QQ\nNCn95Fyhj0rPYWk3nX31fwYpfRgPC0oqfYoFtfDCl8aKRySzGJkllkmE68D1uo+5Xsr2VVLek3gr\nZPCwkkNU5/xrXx9HyCJY1NwzADUXGSZYLGViewfLBMiV+S9Msx+rjhFJhELjK42PQhOjGcPKlaps\nFZlARDUyaqQmQnOamfxZhuaiTKw6yqzMEK9aCGXBvnKD0FRi1D31AIoUQoSxlUwis/Fnl+0zmH4f\nnf4zc/t0E9m7CGVy3uP4amdbLszZCrixxpFEO2rEOcQtxK5du5ptQssSxl9kNvjAuvuJ1VNMxi/Q\noU/RLW+g1PK8v4oBrDpALIpIbmFkFOQmcHPFPn39NPk1HI6yyTHk75nLW7wcrY9gzdJcyj14ei/B\nkgp03UN/v9bpJRLaKQpVOnetxKw5Q6f3LL49jVIxhgeYlUNMxZcxvEKfd5IeT1NcI3fyYhY7agG7\nGY9Wz3fcpY8w6GURWf171mofRemibM/RqZ+t0o7GEsSfom/oi4goYv0WZszLUEeAjKnyScx4+FHG\nw4+uuG1P7tfpTv13NR/bsfG4scaRRDtqxC2qayFGRkaabUJLEprnmAl+gnqLUNwj5hSTcaXKXNGe\nZ1z6MTw8t7UL0c8wI49y2xQJxKNsX644wwmohNRglhLjcRGln2Cle1Ar3qLXgodSA0R2edzs7Ng3\nJNqzGil9lGgLOsP3KJgXmZFupngXV6Iy4/EZzFwGjylzhcBUX8BjIcKjTMRrVy7M29tcjd5kllMo\nloZDdCD6WUbNGAV7mfHgd+uyoxFE4jMx/n3keYgZ8xL1OMONYjT4MCJR047vWB031jiSaEeNuBni\nFiKVat3cps1CxFKKfgcI19WP4TiT5g0WFnowMk1eHiGyfaT1YYrRvZzEioIdJUs/tor0YVbGYD6I\nYrXjF7kbnSetdtHrPYBiBJHbQDyXpuw+KX1q2czwPTy//kwGRprnHDUKIU/ZzrCio6cehhrim4WH\nKckQM2aNBXtLmIwvE+oHGNQxUETrJ5gyd4ji+/msC+arzEZ/R3fqm6rut1FYNUyoX8GTlZ9mbCaB\nvUDJvEqHfworIbPxi+TjlwjtHbLeAXpTbyOnDzUlrMJKhJGAkrlB3lxkKP120vp+xg0jIZ7avssI\n3VjjSKIdNeIc4hait7e32Sa0HKH5GyLzd3XvL5Il1E8wE7/CQmc4pfag8ebic2FpQHEkd7Cqjy79\nNNZexK5R5tnIbbL6MGWbXJktlDFG43v5e1Nk1G5yumN+u6+PreoMA2S76lvQ5quHKdkLNC24tYEY\nWTlV3t14jH7/7aR4E2QUpSpPFCr3AZ2I2o2lD0OKkp2ibK/DgsVj1VKwI2T1CXwK5OOVs1vcKv0s\ne9Sv0um/peb+10O3/y2kOv90U4+5Gim1hwv5D+DrXkI7hiy8qY3gZvnDaHKk9TAZvYdO/yhptZOe\n1FtIqaGGO8oz8QVGgr+iw9uLkRCfXkbCv2LWnOX14m+yK/NtZPVOpqKX2a3/R/o7jpLSXQ21oVVw\nY40jiXbUiHOIW4ixsTE6OzuTG7YRVjSWR4AQRRmkRGW2eGH4hA94VBzeMqARdYBYDZO3VzELqr1p\nusl6BymbM9g5BzmlD1BcFsMLRqaYNlOAps87SbRGfGpKdVOu+eyEQO6C+GToQNFHaK+tuUdh6hTp\nXO1V5oQc28EZhkoBk5UQIibie99jDk0HnsoSSwEhAEbmftZPBJTt6oVALHmuFf9XOryn6Eu/lw7v\nSXw1vOGzoRnvIF7+n0HulzYxRQAAAAAgAElEQVT0OMloyuJhKGDs6k81LCXK9hple43p+MuVN0ug\n8DnY8fMMpL8VqGSYUcpbtZ/VEBHuhp+j0zvIldLvMh59dZWWhtvBJwHo9U7QpY9ibUhgp0BbMnp7\nFSlwY40jiXbUiHOIW4h2vCNLYta8wbhZKcPBUuney5SQoRIav3wRnCJDSvUSmJcXuYZK9QJr5Qm2\nTJmz9HqHiFd1guovehLYW2S8pzByHmH5Ir+F1DND7Km9lO1rbAeHWEQTS3VlsS1FrGxMsQ6fVFUF\ntIvmBYqlezP+Pp7qRMSilE9WH6XTf4ZO/y1k9EMNKwe9c+DJOua9G0tGn2BildnzahBi3iz+HCPB\nH5DRuyibGxzp/u1KZUlV3dKXsrnLpdKHuRt+Ho8spspb1mlzhpfsD7PH/FMyDHJH/oy9uf+B/tRT\ndZ9Pq+HGGkcS7agR5xC3EGG4vjjZ7YhXVz7XlZ3TnHeMwCwPRwjNlap6FfrW2La+9amGMrJGWMZ8\nu3h1G1ZngNUyZGw1lOqHOubiG089i8VizD1nXqBgvkzBfBkCUKToSb2HLv8b6Pa/eV3OcTmYgo7k\ndhuHomCTtZyEYCia8xTncie/OP1uQJHRe7BSosd/ht7UO+hLfQN6QbyviOV28Ckulj6MmaseWK0z\nfI9A7nIl+g90evso2AtM509zpPODDKe/Zd3n1Qq4scaRRDtqxDnELUSptDFlhLcyqoELW0RWywZR\n3aPYGXOGXu8IsV0+81XrgLuc6ha8ReUdNfXqqd2U7fJwkK2Ioh+lDtHjaWbNWWSdWUfWg9DYBSdC\nxHT0CaajT6DppC/9j+lL/SMy3kO19SPCRP7r+E10iNP6IQrxyikG148Q2MoTo/HoU4xHn6LLO8Wu\n7Pfjq35m4wtcK/83inb9ebM7vN0U7UXAVnJYS/P01mjcWONIoh014hziFqId8/4lUYyfa1hfqznX\nGb2bop0gOaTAMmOu06mfwFMeihjwMALROmfEiuYNcjpNUjaNWvMQK3bSqLjZZiECKe8piuYiVioz\n/F16FzG9lOyVptgUbVAoBoClwET4e0yEv0dWH2Vvx2/i6/6q9h0LPozu/6MNs60a1CZPT+fNi1ws\nVIrVpNQOSna9FQehyztI2V5DFjwJ8LfRAjs31jiSaEeNuDzELUQ75v1LYjDzQ6T1vob0Fdk7rHQP\nGNhX6fSerKoPISRvX2PavMKUOcuUOcOsPYMhRtNdt21ChCZ5wK0lD7Gn9lDaBrPDvvcMefMylvuL\nsywjaLlKSg03xaa8uUhKHdjw45TtOd4s/ACz0RcT206Gf8pY+BHK42/fcLvWpnnzLJHcZUfqMOvJ\nv9znH6dsr2KX5Bf31fZxiN1Y40iiHTWybodYKZVVSj2nlHpZKfWaUuoX5t4/qJT6mlLqDaXUf1WN\nfPa9TUmn3Ue0lJz3GLtz/4pGLAiL5BZa7SKjH0eW9Fc2p+n0Tq2j79uk9MF12adULrGNn6puQRnc\ni3muf7Ffs1F0IeqthKvNxqoyHV6zZjEUkeTYjDmFWO5wo/STjJR/jdDeWbY9MJe5VfoQI+V/BYBO\nzWy4TWvT3HmWonmJHanHqMcp7vEeZdacQVZYMrmdHGI31jiSaEeNNOJWPgC+VUTyqrIS5O+VUp8C\nfgr4dRH5Q6XUh4H3Ab/dgONtW7q7659h3M74aphGVdyK5CaR3CSjD2HtOJb7RTHK5jRZ/Shlu3bV\nstUI7fruqBW9JC1+S3csTssmohHVh9AF3LuAFUmr3i2bWcJTD5OXXVwJbhFzg6PZnas3rjLjxEZQ\nsJfp908RrpE3upHMRn/LVPhx+tLfSVY/ihBTjJ9nJv4bFt74+Lm1U/e1AyXzIjtSp7gbnaXa/wFf\ndc3lpl59+3bBjTWOJNpRI+t2iEVEYD5XVGruR4BvBb5/7v3fBX4e5xCvyfj4OF1dm3fRraR/av2o\nmWCNfK/1Eto8Rh0jJbeB+/2LzJJUdW41Yu6SUQ8T2DEUIYrS0nofayJVxF4Wp0+Q6ogpcYi8yVO0\nt+YWlxXnfir4KmCXtxfFRi1uaiye2kPAfm6G08zYKRamwcvbLNlV9rM0NzXQZHyGAf8JAvtScuN1\nktK7ic3LTIYfW7NdOHMcv6N537u0SEXEilN8nLHoGraKSpfd3kFmzCurbvfV9nEQNnuscWw92lEj\nDQn2UpWM6S8Ah4D/G7gETInML8u9ATy40r53797lfe97H77vY4zhve99L+9///sZGRmhs7MTz/OY\nmZlheHiYiYkJRITh4WHu3Lkz/2Xl83l27tzJ6OgoSikGBgYYHR2lp6cHYwyFQoFdu3YxMjJCKpWi\nt7eXsbExent7CcOQUqk0vz2dTtPd3c34+Dj9/f2USiXK5fL89mw2Sy6XY3JyksHBQWZnZwnDcH57\nLpcjnU4zPT3N0NAQ09PTRFE0v32tcwqCgPHx8Q0/p2KxSBAEm3JOjfieyplPEgRPYYJhsoNfpjz+\ndnRqBj93jXDmOKnu85hgBzYcuL89PYGXuUs0e4R0z6vEpX3YqIfs4AWKE++i7F9AUlPowpMM9GUJ\nCwPYuJPc4JcIJr4XsudROiAuHCDTd5pw9hgiPpm+FwgmnsXvqMwkxcW9ZAaeozT1bsr0cid7lszM\nWyhnb5OWHvriPXQPnkEmuvH8WdKdb1CefoJ01xvYqJc42EFu8EuUxt9BmBZyHQcpTj9GruccUXkH\ncThI99DfMzP2TlS6g5KvmLr5DqT7ApR2o+KHof951OTTSHocUjOowkHinrOMFI/TYS1dg5+hMP4O\nUtlbKB0QFg+S63ue8swJEJ9c/9cpTryV1NzMYlTaR8fAVylNPgMqJttzhtLU06Q73kRshqi8m87B\nL1EYfwfaK5DpeoPS9BNkut7AzJ3Tve1eaoZU7irlmRNkus8RBzsx4QCdg1+iOP5tqHSaaX+M0kw/\nYfdF/NIBcnEX5b6XyE49gUlPcNufZWf4w2R6PkNY2IvEneQGL1Ce+Bai9MugH8UW9+P1vYSdPQrW\nQ/e9hJl8Gp2rOIa2tAev/3ns1BOgDbr7HGbqCXTHVbBpbPkB/IGvEU+8BeUX0J2XMdMn0J2XIO7B\nBsP3t6dm0LkbmJnH8LpfZzToIhO/j86hcxTGDuOn8/jZGcozu8j2XqBcyGGizLw2vcwoOjVNlD9E\nuvdlosIhJO68vz13e5n2kE5M31cJJv7BMu0FU0+hVEy6+zWCqSdRXolg+iSm9MB8n8ovkOq8SDh9\nklTXRWzU26D/p+XnJH0xdvY9eHYHpu8vMBPPorO3QYeb/j0VcjfomH0PhY4XIRxChf3Y/ufRk08j\n6UlIj6Pyh7Dd58mXu1DxtyAr/D9l+qYZuTVOHMebdt3byPEpCAIKhcKmX8tbbcx157T6OQFcvXp1\nW51TUio51ci7eaVUH/BnwM8C/1lEDs29vxf4SxE5sXSfr3zlK3LkyJGG2bCVuXPnDjt3rvF4uA2Z\nDD/OSPnn192P4mFCNchU/DpL42pzeje93ARVib1M62OU7NnEPkU0ZZ5lJM4wFq+d5qnX28mh9B1S\nrF3eucc/SWyfX3AMj7J6G3ejqxhKMHkK+l9MtO0eGT3MsC6j1iw8svFo1Y+iH6GLmE5G45C78Qi1\nzMR7eKRUhkgCHkwZYpncOINrxFN7KMvtVbYKadVHr7cHK5cxMl5z/znvFCVT3fdenniW7EDjsrPU\niqefYWquYmBW78PaWeIFoUmbTdZ7ktFo7f/njBokZmzV7ce7fpmB1OaW4d5I3FjjSGK7auT06dMv\nvPOd73x6pW0NXQ4sIlNKqc8DbwX6lFL+3CzxHqD2erNtRrncCgUHWofbwWe4UPwoO7SHUtXUBVuC\npFHeCQomomCvAKMrNivZW8RqgH59FC0TRAlpm6x4FHgH18ICRVtdTbBpc4eXy1mOZ06SVauXgJ6J\nX6XDewwjJWKGmbBFSgvyHquor6Zo6sCOcstm2JF6O779Ckpt1uNsD08dpiD93I4mydsZKinlJuZ+\noNawFIPBzC2ws9I6SeM1Ocpyi9XPRxHKNKPxNAqPAf8pkGsYWVmPy/dOEZnqL582bG6ZYbXgcyjb\na6TUACl2EsnyBYEbja8GGYuSqzum9QCxXdkhHkp947ZyhsGNNY5k2lEj63aIlVLDQDTnDOeAdwG/\nAnwO+B7gD4EfBP58vcfa7rRj3r/VKJjrnC38WyolmWvLlCDio/TTTNprxFF1C+QimeRuXJlx7POO\nkmLlGd+ynOJKlGLW1B6jGUuZM+UUx7OnyKlVZvskx7WoSCx5YLljLv3PL98nAUvASHSeLn2KPjW+\nobPFntpLUfZxPRylJDNAszMebDyWEh5dlRn8BATDeHwORYoh/xmMfQ3L2jmNs94JSuZ01fZkB7+8\nyhZNWj86nydYKBLai9DgAidLb7kimSCj94CkqK/CX/2k9H7EJD/t0WtUBtQqi4ihEhm4PXBjjSOJ\ndtRII1ZUPQB8Tin1CvB14G9E5BPATwM/pZS6CAwCH23AsbY1Wy3vn5GNqWQjYjhf+HcI0dzytuoT\n/Wt1jDwHGY3PzjmVtTNlzqH0U4ves9LJiHkXZ8rTzJrVH60mYYg4Uy5SkpXzHsf68TXtVpMrPump\niry9ws24SJlvQCRTdz8rodVxxsyzvFS2vB5cpbSBhStakZzeW1N7IWI0fo1Z6SKtn0axcoojTSdl\nc6GmvpfnIfbI6CcJZBfj8RXG4rOMxWcZj69QliHS+lBN/SehZPkNbGBv0OEdWXeJ81op2equAXqN\nuaG74d/wWuFnsbK5zvxGstXGGsfm044aaUSWiVeAZQlcReQy8Ox6+28nstnV1tK3JrPx6/SlTja0\nTyMBZwu/ymR8L6zAMiH7GVBl4PIae+4gZD/TcW3Ow2qMRzcY9HYhjBDJo1wMe8nbtY5fPZaY80HM\nicwefLVwpnkX4/Haj3cltb6KeIJhND5LRh1g0O9E2xfXEUahUeoUNyLDhBkDptiKad4aga5zljWS\nPHfjs+T0g3RpRbREYxnvcE2zwwA6vTBe18NwkLF45VnSSKaYiGcY9B8nsKtnWKgJtfITnbx5lQ7v\nUWJzl5jNif8u2+qOYxJm6SeiLzMZP89g6m2NMKvpbLWxxrH5tKNGXOnmFiKXSy7M0AqUzG1Gwk8S\n2amGOsQilvOFf8+d8O8WH8/eZsTm2JU6DvLqkn180M8wEb+BpTHOMIChREH24zPIa4ElrmMh1FoE\nUuBcuIsjGTUfnlFiH5J0Dpn6Z6cXH3+UW9EoGfUIfd4wKXkFpaoveeupw1yNskyazY8LBfD1AKEt\nJDfcJEr2DTr0QxRtfeEoJXuHkhV6veNklSWYW9QZ2dqXXniZ+3HtGf0EY/Fra7YXLGPxRXL6nUwZ\nS8mWsRhSKk1K+aSUJqcKpNRl9Cpx+Is7XN25LJrXAY9O7xgKRWCuY9iYXNKKNJHMkHSTpvEpmiuJ\n/c3EZ7eNQ7xVxhpH82hHjTiHuIWYnJykp6en2WasiYhwJv8vSak+DuR+qGH95s1VLhY/wlj0lRW3\nG0rcim7zQOoUSl5EBLQ+xqzElBMG/Hop2VmuR53EEiQ3roOCneRMuY9HMvvoUjeZruLRuMofQjrW\nzmhRC4GMcSceQ9NFv3+SLDfRvLlqe00veY5zqXwFaJ5DqtUQrBLn3Sy8+fzV9c64K6bNZaaBnD5A\ntx4Eqf2JQDR7hFTnlcrfVT/mt4zFhtF4rSwoWTr0KQb9fjr1XXx5bcWnCzZxsaChsCCu11d9pNUw\nnurEyDRlu7r+asFXfVQTw97h7adURa5zX1UfutXqbIWxxtFc2lEjziFuIQYHB2vep2De5Gb5T9ib\n/V5y3p4NsGoxsRQ53PFBelPHG9LfbHyRy6U/YDT6MkmL5wTL7egGu1PvoCjTFOONrchVlEeIZO00\naesllCKvlYv0envo1yVQa6/sle7GzYIvxBIwPvdYvUs/Sa8XohfNxitQT3M+mCKQqzQ7NKJsW6+g\nTNm+SZ93iqk1ijtUS8nepWTvssN/rGb/Ot1z/3uLqozlVupYgjNcoWjHKIaVpxQZdZTh1C669Cg+\n15G5zB8hezAMAYKnYhSziNxgpUWiALFME89VHFSkyOqHCBoUnlQNKZWrYjkkXC//v/T6j9PjH9tw\nmzaaesYaR3vRjhpxDnELMTs7W3NlGE2KO+GnGUg9u+EOcdne4fTMj/Bk9//TkP5ulD/O+eJv1LSP\nEJO3ASW7sc6wVscZCTfWGV7ItLlNVj9OVp5bu7pdaTfkNjaDYd5eIW+h13sL3ZzF17u4EXUzZlbL\ns7v5jMd3GGzBRf9F8yppNUxYZUq1JEq2QK2nGZf2zVeqM1VkdVDqIW6Etc/2BzLLjfCek7uwitvC\n1Hr3yNLjPUSfn0PLeSrx5ssRInzVSyOeyUgVcd2aDAVTXSXMWPJcKPwKz/T+3npNazr1jDWO9qId\nNeIc4hYiqYrKSuS8PTyQ+Ud0+0cT246FX2Q0/Cy7s/+YXr/2Gd7bwV8QyyyqlnrEq3C59AdcLv1O\nnXs3Nk3UUjQ7uBnWl6FiPdyJLnMw8wwiX1+1jYq7634gXyvT5g3wnuVq+TxUNYe2eQRSIKMPEjTo\n8XqjECI6dD+haYxDPGuvMaC7savMrgKIgKghYtlLSC9BeJS8ySCArzxS9CNyFVRpwT4ptH6UvO1m\ndJNu/GbMLWYMKLIMpd5Kl5pMjplfB7aK2fFu/2HypvqQq5K9zrXSH7A3+wMNuQ42i3rGGkd70Y4a\ncQ5xC1Fv3r+Hcz++4sVZRBiLvkBoR8mbS4xHX+ZE16/S7R+u+Rglc5Pr5T8ko4ZJq6G67LzHzeBT\n63CGwW5kLlPJMm53EEhzUs5cC26wP/0glpsrbq8nD/F6MFiaHR6xGsIQrBHv3CyK5hxd+jHythHO\nnpDSDxHYlxH6iNlLJH2UxSewMWVbpGSnMITAGDCG7h7BRktnfLvIqAfxVRqLoWQngbtzP5uLYBiN\nLjGKYm/67Wj58oKnIpqgigVu98h6T1C0lpxKEdgXFm2zlOnWjzBrV481r0fZV8ofJaOH2Zl5Tx17\ntwbtmGPWURvtqBHnELcQIyMj7N+/v+b9ljrDJXOTjB5GqzSz8XluBH8IwI70u1d1hpMSz48En6TX\nP8nuzHfVNTMS2iJ3gi8xEn2C6XUsgvNVJ2Vzc+2wgjoRgTKPM202L35xKYaIaVtZZLfSOarJp5Ed\nn9s0e6RFnWGAvA1Wyd7bfLTqxle987GxdffDfm5EQ0zGxwhkhkqowdoL7TqnTjI7tLw4RyDTBJv1\neKEqhOvhGwz6z9KjLiJM0KEfpmyTK8sB5LwTXAvv/6/uTZ2kbBdXgcx63cyusTQhlvoKx1wq/Rbd\n/mN0eLXln24V6h1rHO1DO2rEOcQtRKPSnFwo/DI5by+HOz/Avtw/YSL6CqFMsj/7g4vaiRjO5H+a\nWGY4kPthBlLL00aHdoI74V+zI/MuDno/UrUNIpZZM8p4fI1r5Re4WPoyD6SHSav1ZYTo9h6iYF5a\nVx+rot/KnaC6eMKNZDy+Rl/mKEbOLdsm6camf0umdR3iifgWD/hphFZ6tOeh9VOcL18krTrZk36Y\nsn2JWqotioCnj5I3nYzHbwLVOYj3iNNL43dbm/H4TWZUN1n9IDCAruJ8FSlGoiX/C2qF4SzB4dWq\nvlyrseR5ZfZf8Hj3v92STnE7ptRy1EY7asQ5xC1EOt2Y+a7Hu/8v1FxFKF91cKL710ipXrRa3P/1\n8h8yFVceM05HL63oEKf1AHuz35d4TBHL6fyfMRpdpGzzTMe3CRfE8Pn49HmaYm1VmJegCW3tJZOr\n6lmd5HILOMP3mDAZehTLZ4lTm1MKOasfZdr08HpxlIOZJwjtRaI6K/9tFBZDRj9K2b6a3HgT8FQf\nBdnPneAyoAilxOXgTXq9Qwz5ilJCCIUI+PoYUzbFVFB/Sjnjt05+5mqJpEhkKuEf+1J9JM2CZ7wj\nhGZxzmdZYTa+bN+cK6u98jI9j/qLD4QyyvMzP8ihjp9kd+Y7EZEtE1fcqLHGsX1pR420Xu6iNmZ6\nurbHqyVzg+vlj5GPFztyWqUWhT/cC59Yyo7Mu+nxjtHtPcZQ+pvqM3qOK8ELnM7/CdeDlxmNLs07\nw526i8dyezmQnaZoX1zXMXq8Q0TSmMIUC/HUfq4GjVkE1Sgm4xt4+rFl76vCwQ07pkcnGf0kd6Nj\nnC7muRTcIpaIN8pXuBnm6NBPkFLdyR1tIrO2NVJNZPRj3Ip6uRMtj/2eNqNcCu5SkiPk9Cl81b+s\njaKXojzFlWCEqXh9+ZUzxa03Y3mPWMqUJDmt2dK0eymVI1wx84yhx1/98wjseouCCIX4ErFppacU\nydQ61jjaj3bUiJshbiGGhmpbrKbw8VQnnd5DdR0vq3fwRM9v1bXvQl4vfoG/m/6Pi97r1t3sy3RT\nsq9SalBOUW8DHt9r9TjXw5m5RUmtxYzJ0bXkllV6Vi7BWy+KNBl9iLzt5PXyCDErLyaMibgYXCGt\ncjyUOchMA3LtNoLR+Cr7Uv3EsjmlgFfC18/w+tys8FpMxneYjAGEAf8oPV4nHnlCyTAS5SnbKw2x\np9RdW4hFqzESXeJgehiWVcXz0GRIe4e5Hl5k4ee9w99LaFeumpheKZRijqK9To//CAXzRt32ChYj\nRaI4JJfaUXc/m0mtY42j/WhHjTiHuIWYnp6ms7Oz6vZZbxe7ve/cQIuq4/XSF7hfPUB4NLsfI2co\n2sZVeMuoYfLmfMMW04mkiNXT3AzqHwg3mrH4Kj2Z/VhZ8Gi4cACy6y2XrMnqR5mx3VwN7hJJ8kKt\ne4QScr58jb3pE4ic39iMH1Wh8NX+pjjEvhok4iEuBW9SW6y1YiIeYWIue2Cv9yjlBoYCZYp7iRtU\n4rsZCJaIY3R7s0RWKEmBkp0llFlAgbnEws9bobCy+k13aK+zVgXBshnHoxNTZ+XFieir7M1+P77q\nZiY+S7d3eM0Fyq1ArWONo/1oR404h7iFiKJmOxe1Mx5d4XZYmbXUeDzWMUjBND41WIc3TME0JhWa\n5kHGbD8z65gV2ixi2Y3mvkOsTMc68hBrsvoEl4OAKTNDNWVtV+N6eJ096cMoOYdg6u6nEVyPRtiT\nepjANjafbkY/jGGAkrWYuXPMqhQKKEvMtfAm0oC0b1ql1t3Hov7M1l8ME2O5Hi79/1z5pqNTDxGv\nUVEylnEG/MeZiFeeOQ9lkl7vKHlb39OXUMa4Uv4oRzp+hh61PMypFdmKY41jc2lHjTiHuIXYann/\nRIQvTn/k3ise6xigYBq/wCmthijGFxqS8ECpp7ga3MasEhrQaozHkwx59xfX1ZuHOKuPcjVQjDeo\nYATAjfAGh7MnmN2orB9VEknA9dCyN/0IgV3/TU5GH+FWFJOPpoCNj6NTDQ4FKvS9nNyoxYlt9TpN\nq+QbAM0slRnilT/raXOOfv8kM6a+z240/FvSqp8Hs99DVu+sq4/NZKuNNY7Npx014hbVtRAjI1vD\nSbvHrLnLaFR5VHk0t49CDRWfluKpTrL6QXL6EDl9nIx+ikieZTp+khcLnWS8Q+uyVfMAJXmWN4Or\nLRkvvBoFO4anD8y/VpNP17S/wkOpZzldnGLcVBcWUQs3wjF0C9xXx0RcDafw9TOk9b66+0npp3k9\nGCVvG/9ZrUY1JYZroXPqZEP7awa1PHWoJrNDYN+kxzuwZpvJ+GW6vNqLFt1jLPoiKdVT9/6byVYb\naxybTztqpPkjmWOerRavc7n8VQAGvAECW9ssoSZDRj9K3ua4HRSYMDNUZm/CuZ/FFGwP9UTlKfoJ\nOcKt8BJC8wpurIdIHsDjCgBSQ/ywJsOkOcrN6AYblU+4YPPsSg1Qsptf8WwplphrYSXjSkrtoscb\nIqeypJSgMECEECCUiO0Edkk56ox+nNdrjgdeP4FtbPxzlGmtjCn14KluqLJaZCxRVQVasjrFzJp+\ntqK0jnjiwN7hRvmP2J/7weTGTWarjTWOzacdNeIc4hbC81p7IcZCIlvmXPFvAeGBtKVoq5nRUeT0\nYQq2hwulMQKZ5v4j6bWdkIyKiWsJnpUsVp3iZngVQ+vHCq/FeDzO8L2wCV397LavT3CzfGvjDANA\nCNeduqrxRBIwHq9c/rpChrQaoFP3kNZZMqqb14NzNKMQScGMokk1bIGi6K0f+6dUV9VtAymSruJr\nK5vX8ejAUF61TSjjdOg9ZPUDFEw9ecm3xkPXrTTWOJpDO2pka/z3tgkzM5tTdGG93A0v8vHxD5E3\nYxzM7KWYUGrVVz1k9JPcDI/xtXyRV4sjBFLbY2JPVbdqXgS0eooRs5tr4RtbKjxiNYp2Al89AoCq\nMsesJseF0sZXLNP4qxY9aG0UoRSZNCPcia4wZQJWy0Kw4ZYoS5fXuHi9dGl3w/pqFlPRbbRUVzSj\nbKdQJC9MFEL6/AOJ7Yr2BjPxJVI8QJd+jO7/n703i5Gsye77fnG33DNrX3up3peve+b7yOGQM5Qo\nyiRoW7AhYWTRsGGbsGnowYRhwfaDYD/ID4ZtUIIBWS+WDUIWREuWTFLiItLkkMMhZ+Nw5lu7v96X\n2veqrFxu3v2GH7J6qa6sqlxuLlWZP6DR3XVvxo2sjIw4ceKc/1HvklCuklFPTpizw7V6utx1Tsta\nM6B79OMYGXiIe4jx8fFud+FIAulR9Df5xPxNnlnfBkCROrpIoImrBHIPX5YIcRAoGGICRUxQCuN8\nbm4S0JoMVFCHrJYiLpMPM+SdhRPvPW04jKHxFJm7V9f9iriDJY/zkEZD1Alh3cKTpa4+P6ZkiEqs\no5I9XPL7tGHLPbLaTaw6Q7EMZRqnZmGOg6hUTrznTR/Wsd9RthnS7lA6JnF4w/09RrS/yHjsK3U/\npxv08lozoDfoxzEyMIh7iN3dXZLJZLe7cQg3rPCH+b/Pils1xqSEEe06+aDMh+arqlpJIEFWSWGG\nNgEh9Wrb1oMqxvFrlM2q904AACAASURBVGatXruCGY6x7r6gFSmxXmbb32BSBVG6DidozKokeWKf\nXh3abmAHWxynVdtuopSui5evYI5EL33YaTa9R0zp72OeZBRLFcE0cLJBbIXPMMQ47hFzyUmUgoUD\nMcaGmEIREzgywZ4fsu4WWHR/h/9w4ssoPaxF3KtrzYDeoR/HyMAg7iGk7M5ifBzb3kt+c/vvEO5n\nwqvESGqXWXRr6a8KimH9HphGcOQo8CamT0oFVfkC+UCS91fohDxWN7HDIqp2jlCe/JUNxB1sGV2h\nh+OQXTIgo0YKn4SYwAp3uvJ8J4wuvEXI3jXEGmXde8SU8UXK/qfoYgRdGUWQJETFky5WWMQKd9iz\nF8ipt5jUs+hs4daojikwUJT3sfwMivweQoQN9yeQZWLqT7Lt2ay7BWzpUp173sw/FX+FJ9b3uZn8\nagvvvL304lozoLfoxzEyMIh7iF48otj25l8bw4bIEDLCak1juL1segETqoGqXMKTI2wHO1S8zhh9\nvYIUM5A7umSyQMfjfZ5Ynfu9hAQklWkqpyR28jhiylDXDOIoE+usMxAy8TYb7lMkQ9VkuODoMKBC\nkKcQVEOr0so1pvURYiKPFy6DuMtju0g53AQ2uRj7Crr8cxCN/b51McQPy6v4J3j0v1X451xN/Bha\nxEVXoqIX15oBvUU/jpFBUl0PsbHRakneaJFS8tL+PvDK6zRO3u9OHzWRZsEb4rmzw6L7lEqEHrXT\nghUKxN4HQFVfWBcjxJQLxJU7hHyZRXeOJ3b744bfxeNsTJy6iHXt2UKEpNRoCjokC3cauj+uDJNT\nLzOs3WZYu8uwdpch7RpaHQUvOoEkJKmONvSacljiqbPAfbvISvAVPqxsUA7fyOwtOM9Z8M7h8pMI\nhutvWFw70RgGqIQFvlP4Fw31uZP02lozoPfoxzEy8BD3EOl0/VJDneCp9S2WnapHcli/xYLTjAxR\n61yOz1EM6ksmO8uUgzKmnmbPmcORDtWYVx/Y3f/THRacRW7E3+96xbrTTkxJU4oglNiNH63fq2KQ\n0eaQMo4VVtgLdigEDtSo3CgQTOm30IRNMej8qdDbGCKGQDQVomMHtcO4PGmx6DwnJka5aCQJOXkz\nuduA9uMn5tc5H3uPy4n3635Np+i1tWZA79GPY2TgIR5wJM/t7wIgpMaa23nPI8D52DmKbSgHfRox\nw22s0MaRLt3Qyz2Ox/Y8IbfIqNc4rdNKIK2Tb2or7YvZ00SCnHaXQhBnwVlm0X3Glr+KJ4+WzJPA\nmrfAkrtBUrlJXGnAkxoxe/4LJvSbjb9QqpROKFfuyDK7wTRSnvydMoPGZBy/Wfgn+PL0Sz8OGNAP\nnM6V64xSLpe73YXXrDj3WHGqXtmcdgm3C8aCJnSkXKNbmf+9hiQg5zZflrjdrHtrPLa3yAfTJJT3\nSbVQQrkbuF0Ow7FOMNzqxbAPahqn1XPYYY5F5zlBk2Wi17xF8r4goYxF0cWm2PY+Z1xrrLRyUp2u\n6z1v+8tIcbJU2qTRWBhJKdjhqfWDhl7TCXpprRnQm/TjGBkYxD3E5GQ0MYRR8LDyjdfHk2FdhVGj\n53J8FltGJ912FgiHul8i+SSs0OS5M89Tp4gtL5NRv4gmer8MqB3uEhO5rj4/Ciq5NycqSWWCbc/G\nDFuXI3SljSuziKaKqEfDrv+QCf0GKvUV7TDESN1tv3QWEBz/+SfEKo1u0L9X/A28sLeK1/TSWjOg\nN+nHMTIwiHuIra1oPERRkPeq+sJSQt7vfL9SSpqC/7jjz+11YqXTVYVs19/lsb3AmpckpX6A0UWD\n8ySEgIzWxd+vCNFEfYbecSSKt6rNoeDINI6MTgpx118np51csa2d7HgPiQmdSf02MZE99l6zARlI\nSYAUx4dl2OEStxONjZFSsMPH5h809Jp200trzYDepB/HyMAg7iGE6J24UEOpCnJn1GkqEXiXGmU2\nNnomyi5HThPaqb2AJz2e2i9ZdDWyamMqCJ1EytZlzxp/qIoqptHFbZJK6wa5FNXMvCHtNrv+0Ql2\nzbLkzJ9oiLYbRxbY9u4TyCKj2kUm9Jvk1POovFEKiSuT5P3GJAit8GTvd1I8p1Ev8Q9Kv00p6B1l\nnF5aawb0Jv04RgYqEz3EyEj9x3vtREpJJawKzatiBDi5bHKUCMAMzl755Shw06d71x4S8Mhe6llV\nirL/EgXttfZ2q0gJqsihkEOINKFMEKDjSUEl9CgHJqWgSNXA2gMkNxMfkFIqmME8AY0ftdvp58RE\nlpU2JcKGBCTUKzh+95VfJCF7/kEFjJQyTFwZQsohGi3YUw5MEiesiq7cZlS9w05Qv6PAly6flr/O\nX8j9+w31p130ylozoHfpxzEyMIh7iK2tLS5evNjtbrDnr1IOttBJseZ23jCdMWZw5CBcohax4jTk\nTrvqhuCxPc/1+PuUe8woDoVLRrnLnv+AIx0kMoYmJkEMEcgEnlSwwwArdPBlgC89AunjSe+thC6f\nqsF7Uky84JFVLXKiMMqMMcKIZqCLCna4dmLJYU0kGSr/Baz4Dp5s3+92zV0hrcSaMtjbjR3mscM8\nOe1uw68N6jwhGDdS7FiNnZzdM7/JndRPM6R1PzazV9aaAb1LP46RgUHcQ2Sz3T2GBHBCk9/b/Z8B\nSGuX2A06rz2cVlWcaBx0Zw4/cXaSDJ/YL7kZv9NTsnoKX+AH5QJp9TYxJUYoQwIZgBBoqFihhRmW\nqBq4223tS0jIsrvN8uvIoTg5dYwJPQOAHfrYoY8rPVQUPBlQCk2GxTL5yhpX4+9RDD5vS99caZPR\nLrDnP21L+1Hgho2HvwhRXxRhIBsPXXKlxWfmN/ip3H/Q8GujphfWmgG9TT+OkYFB3EMEQQSq/C3w\nuPJNvl34FUICMup5lpwXXelHKVjsynNPA2FwlsL+BY/sJc4Zd4iJLaywu5WRFO5yr1IkJKQY7FFH\nQbIOIygEJoXAPPYeVVan9ef2Mpfj1ykFT9rUn96oZBclsTqTGstBc7HmD8xv88XUz5DTJpp6fVR0\ne60Z0Pv04xg5S6vrqcc0j1vo2sui/THfKfxfhARoJCgGPpLOJ3CN6eO4sv/0D+vG7l554fYgWHaX\nee44wHv7CXedT+ZQxE3uV0qEvWcFN0zKrRbQkEgWnV1Syvm2PMc81jDvPqpoXB4urmTQTkgYFOjs\n+qWm+uRIk3+2+T+w4Xa38l8315oBp4N+HCMDg7iHmJqaOvmmNvDM+g6/n/97r1UdhrQ7uKHdlb7k\n1N7Xq+0mW9nPut2FtrHqrfDIXkYVd1A6qH2tMM2jSkhwBoxhgLX0mzAGT7qsez4xEX1BjR1/o6ua\nxCfhNagYklPP8YPSNn+4d44V5yso/Dgx5RqqyBy4L67cwmlBjcSRFX4//w/Z2pe27AbdWmsGnB76\ncYwMQiZ6iPX19Y4GsXuhzcPKH/KD0j/nlYzQqHaTe5UnCAQT+gUyahKJy56/Hqme6VFo4mwYJe0g\noYygFq5ij/yw211pK0vuEjP6VQRPMMQwisgBcUKpo4gydvgSGZEKBKRYdCdwZO9IYrXKdPkaC0Nv\nNk5WaGKG4+gUkSI6KUNJSEIZpRL2ZrGYRvTTBQpbbgx/f457Yhd4YgPowHk0FIa1GElVI6WmOTk5\n8qS+rfMne7/K5fgHfJD+ubpjl6Oi02vNgNNHP46RgUHcQ+i63rFnuWGFR5Vv8P3SP339s5hI89yu\nSqxJJBveBhuvHSGSYXWSYX0IVxbYa4O+afUpg2y6o0gqo5hqdzz3nWbFXeV55S52+MqAk4ALGKTU\n9/jJXAJN3MdvIbxGSoW94AsNa9X2Op56WPlh19/ifOwmdvDZ0eoZTWAo2Z40iDWRxJP1K2AMa7f4\n1F478rpPyJZvgQ9XE60nGxkiwV8f+9sEVJVItA5XA+3kWjPgdNKPY2QQMtFD5HKdq+K14y/iy4Pe\nIl25iHVkqIQgH+zxwp5n2dll2rjeln45YWc1j08TAgMzvtrtbnQEVaTeMoYPYgY+f7Bb4o93LyHl\nT9RdxvddXL7Ksnu2jGGAQqx2cuKSM09OO74SW6OIJn/37aaREtxpdYKHZv3eZEnrxVtcaVEOdtGE\ngSY6awxDZ9eaAaeTfhwjA4O4h9jebq+M09uE0ufD8q+9/v+odo2nVr0xbYJSEL3+aFxJYIanu/BE\n1MRFjpx6lZTyAWVfI2de7naXOoIuhk68x5IhX8+X+H7xFjHxAY0l432ZJ9bZLP4yVrlw5LUtzwYZ\n3bQfdCEBsh7qLYGtoJH3sriyvpMpBQUziEYNJaZ0L1+ik2vNgNNJP46RQchED9GpHZmUkk/Kv/n6\n/4ZIMm+bNGJQhE3ocJ5E+gwl1OkiiYKGL52axQtiIoeh5FBJ40sDTwqcMMQOAlwZ4IY+xcDZT94x\nAZMxfYzx+NHHumeLDFBfJv+u7/LbO3Al/mXupnephMdr40p+nPuVs+tp34sfbbAVgl2uxm9QDB5G\n8iwn7L3CHACiTq9rVr3FPbv+in4zsVksGc3vbstbYDZ2I5K2GqUfvX8DGqMfx8jAIO4hXDe6hJfj\neFT5BqvuG8F+RVykHDZmIGTVFJWIbeKYiOHIaNvsBLpIklTO48skRV+y4VbY8d9sMDQUUqqBisJM\nfJJnlRf4hIBHI2Wxt71tLoU3qNCekry9RBimqNcgfsVzu8xzW+f99Fe5GF/CCg+feAR8lQeV7mX3\nd4JYcLw+cCWMzkNcCvYwetBJXI/6RUad5nOzsXkvrvhYEeX9LjuPumYQd2qtGXB66ccxMgiZ6CEs\ny2r7M9ywwmfm77z+/6h2m5d2o94y2ZbQBq0J3dBukVImyShfpOJ/gY9LI3y7YPJnxS0eVLbZ8Su8\n7W33CSkENrtBhUoQ7BvDzaG5oxH0vvephM2OBcEn5QK/uZ2h6H+VuFKVDpISPPmTZ94YBkh4xyd9\nrbnL6A3E2B6HG9oMa+9F0la0nDx+Cl6GkPp34BdiF8n70VXuvGf+8aE8jk7RibVmwOmmH8fIwEPc\nQ3RC908R6utJOKkM88RqPEN8VBujFER/5KxEmf7eBhR0ksp7vLAdNtwSsNNwG3aL+s5LyaUeVn6N\njh2vVYk/wZ8VCyiM8hdzl5BC5al9NmOG3+VtHeJaSCRx5RJe8GlD7aaUUQxlhCBMUg5hy7XZcEs8\nKLu8n/kyI1oZK3xeM0So05xk5o5qN/mkXP/cdyl+iUJwL1KFDjPcY9l5wlz8TnSN1kk/aswOaIx+\nHCMDg7iHaLfun5SS39z+O1TCPAoalXAEVzYeOD+sZVn3zm4MZi2y6hWeVHS2vNYSDSpha1X4koUs\nfjxJQPs1obuFxijbXjRqIyHwUdklrfeeNFi7eFeHuBZLzipjWhK/xjgyRJKEMo4gixWq5D2PVaeE\nI31exbO/jY/kh6WqjrPgPNNGmknDIKuFGMJDYCMxscNtAjojG+gfk+OgYvDCqr8K15X4JfIRG8Ov\n+NbenzAydp6MmkV00CHQjxqzAxqjH8fIwCDuIQyjvfI7VrjHrr8IQEq9wROrOcmpgPYcpcgGji87\nhUAhrrzPdwob0KLnSwBm0JpBbKsWaXEVU57dinXIS0C/JA9Gj6ue/P10pUNCvQ5soJHDk3EKfsim\nW2HXN6nGtzd+AiKBVbfM6qFIgDgwy4iWYEyPM6QpZDQPwQaVBvMX6sE/ppJcTrvBfJ2JdJfbaAzn\nlFvcN58yb/9dfizzFc7HL3Ar+R5KB4p0tHutGXD66ccxMjCIe4hMJnPyTS3wwv4+AGPaLe5VmjOG\nFRTyfnuMlaANyhWtYIg0ee8yn9mbNCbpVZuESOI2mCj2Lnt6ni3bZiaewZettdWrrEWczHGct/As\nUorVZ8iWfIPPTQEU9/+8ol2eSsGub7Prv+0lTjKlf4GbKQNFvMQOGzfCa2EecRKjiwSP69QcntAn\n2QvuR24MSynIql/gUaXqnCgHZf547+sA/Fsj/w5/efhno31gDdq91gw4/fTjGBkk1fUQOzvRLAa1\nCKTPx+V/VRWhbyJu+BUzsZm2JYI4YeuC91GhiQSb7hwv7OhK+ia147P/62HSnsEKLbzgMlL2dsx1\nMxhihg032u+BFTqofbT3H62cO/GeSf0iD8zeKEqy7lX45t4e38gPUfB+jLR6G9HC0qSLJOWgdshN\nRr2KXef8ldUUhIj21EonhcZtHlcWap6I/X+7v8O89SLSZ9ainWvNgLNBP46RgUHcQwwPD0feppSS\n7xf/Gf9y+7/HDSsU/TR+nSL0tYi38TjPCnsjq1WgUPSuseTsRdpuUkm23MZ2vFoye9FZJiY+OHNG\nsemdbMw1jiChptvQbm+STxwfgjCkjvO0UuzJAKXPK3n+YNflhXWXtHKrqVaSyiS1vNwCwfNKfRtc\nQ8TY86M1TFPKOfLeKEvO8eEav7L2v/Nb279BICPSd6tBO9aaAWeLfhwjA4O4h2iHzMlj65t8Zv42\neX+JrHaLDa+VXZ+kGFGVplpUgvoTXdpJXPkizyP0DL/CUFr3Uqb8N8dYT60FAnkHnbMhoB7nOo+t\n9mgsx0Trm5HTwnGya7ow2HG1njqNqcWaa/IHeZe4+NGGX6uI2pufrHqOcp2bbkOJIUV0BmlOvcVL\ny6YYFE+815Uu3yn8Kb+8+D+y5rQnebkfJbUGNEY/jpH+OUc8Bdh2tBnYgfT4qPTrAAxrl3lQWaCV\n+MBhdZRK2L5kp4CAmMjgdDE2Nq3M8GfF9pSPjsLgT/gHq/mtOKvERJoriTkku4AGQkEAgjihjOHJ\n6qeuIBAiREEiRAgyJBBFKsFiW5KGGkKqvHQM3lUwiApNxNrSbi8S94/2ho+ol7lv90aoxMkIvrFX\n4C8NfQlP/rDuV+35KRQOayObgU6948sOK6TVFF6L47EaL/xFHprzDb92z8/zsHKf6dhMS32oRdRr\nzYCzRz+OkYFB3ENErfu36j7ADKuezk0vpNVkmRE9x4bX3uz/mJLDCbpnEG9748gmsutPQkVhx2td\n+msx9fzQzxxp86CyzMXYZRacxo95M+olZmPDWOHHEHHMZL0I+SV2vPYZagp629ruNY7SIR7WJnhg\nnr4qh3+yl+fnhm9TDh+ceG9C+YDvFmt7VUe04wuWvI0vfTLqJXaD+3W/5l10kSaUF3lcmW+6jVZi\nqY+jHzVmBzRGP46RQchED7G+vh5pe/a+YZlRJyPSdW3/Mat2xHFnJ8ip13lqtSeRIKcNEdD6EewF\n88qR15Qmv86loMijygJSfgGFzntSdX6Ue21O8Apl/0x10+Vrh34mEFT8ZEOV2XoHwbcKIWnles2S\nzAo6KeU8Kl/iu8XaOuGa0Cj5hYaeGrbgQMgoF9l1h0+MFz6JnRZ1z48i6rVmwNmjH8fIwEPcQ8Tj\n8Ujb2/Ork7EmktCiIL5AUAja/wWRXfLkJZRRPi61L4klocQpRtC8pR1zhNuid3fRWWZCv0xWW8Wj\nMeOhWWLc5aNS++LSX+GfRjuwSWztsOTYlH6dz8qnzzv8Civ0eWbNsuZZGEKjetol8WTwlol/tDzi\nkDZCwW9s/mpGrk8lRlK5ydPKEmEDJdoTSpKsmmXDO9jHT8of8m+P/ruk1NQRr2yOqNeaAWePfhwj\n/eM2OQUkEq3Lcr3NpvcMAF+2Hhw/aUxih+1PenPDzmvGqsRYcaYww/aVnDVENIa+qR0dThJFYZNN\nb5OiP4OQ7d+YxLnOJ6VCRwqyWGH7Nju9hqUfTNzKqiM8MM+At0f4gMCVAa70cQ8Yw8eTVBqfWxtJ\nPJSymji3647xuLLQkDE8qU8RyoAtb5MpY/rANU96/P7uv667rXqJeq0ZcPboxzEyMIh7iHw+mnK1\nrygH1eO2SrCDJlo7DEh0KCmp0nHpNYEb3mbFaa9HVFGi+aqN2UfHdYURFaDY9DYR3EG20U41OM+9\nshdJGEk9FPz+yZgetg4mYQk5gt9GCa9OoCDYcpvPX1CbmP/qrSqpEiMm7vLQXMNs0GkgEFihhSMd\nQkJ2vV3m4peJvTXf/nnxezwyT46fboSo15oBZ49+HCMDg7iHGB0djawtX7qci32Rcf0yAR43E60F\nyKtKZ86cd7182xJJahEXH/Cg0h5ViQNEZF1uxI+WYWpFX/pdXtqLpJQPImvvbVSGeF5J4bSpwEst\n8l6Z9lVg6y12km/iscf18zyzTn8Z7BF9CJ/mx3czn3wpKKGeEFMvpI4bXmTeXmqqX9PGDMXgzWbc\nlQ7z9gt8GXA+dpFL8StciF0E4LlVO1myGaJcawacTfpxjAwM4h6iVIpOXaHgrzIbu8NXsr+AQLDj\nf87V+GzT7bkdCJcACPDJqNMn3xgBGfWL/KDUuvJDPYQReUKHvKPF0q2wEskzXvHcWo88dEJInS1n\njkKHlUQCQlJK/SoDp5mMU13IBIJdt/qv005SaS2eMWxqsyhJK8fPRWn1Nhtu83NI7Ij3FeCz5Czw\n0n7OgjNPIAPm4pebfs67RLnWDDib9OMYGRjEPYTrRucx00WSMf0Sk8Y15uJfBgSOfM6Q2nh9coGg\nFERfqOIoNNH+CjlZ9S7fLbQng7sWXkTe0FhwdFxXqQ7R/0ZwpUtKPaxY0CxSght8wKrbAY98DRJK\n42P/NGLsj5Ep/Rrr7tk49tTEYXWJRnCb/P6pJ6jeVILoTmWOY9vbIu9HNwdHudYMOJv04xgZGMQ9\nRJS6f1ltgrRa9RR9KfPz3E78LDl1mtlY47HAE/o4nuycSPeam0e00auVU+/wncIunfSc2RHFRtfS\nIX6FL33iItpEiJIfnYc4Ib7Qtkp09aBF/LvpVdbST1HRmLeiLT3eTXSlNYPYafL0xDkhydcMWvte\nh3XGdi85i4zp4y096236UWN2QGP04xhp2SAWQpwXQvyxEOKhEOJzIcR/tf/zESHE14UQT/f/7r/C\n2A3SLt2/IW2ar+R+gS9lfp5d/znj+khDr080kaHdCqWgSE671Ja2U8oHfLuQp9PHyGZEZamP0yFu\nB8vOKhqta0OrMsNDs7uJbaHsD5XJ6fI1JvRLFINoQ2i6S2sJo2aTITq7/vGbCqXFEo+FoL5k3i0v\nWmnCftSYHdAY/ThGovAQ+8B/I6W8BfwE8EtCiNvA3wb+SEp5Dfij/f8POIZ2ypwoQmE2dodh7Rwj\nWmOalqro/EGClNHqbmoiThB+sF+WubPGsC70yEImjpNdg+iUJl63R0hMmWu5HS+8jRlxjHOjdOp4\nu9tYepFVpzMx/53Ck81LIsaVBEGTCXnloEhMHB173mwxHABDGOz59YW0XElEF7oE/SmpNaAx+nGM\ntGzpSCnXpJQf7f+7BDwEZoG/Cvzj/dv+MfDXWn3WWccwjLa2rwqNn8r9TXTR2OKgdKGc75obneGa\nVMZZdy53Rk2iBlk1uup7tnq8l1W26EmrhRe2Ni41hnlc6b7SwY53ljymR5Mw0mx70caTd5tW4uNT\nSmvfv6QyeeQ1vQV98WGt/pO6qLW6273WDDj99OMYidT1J4SYAz4Avg9MSinXoGo0AxNRPussUii0\nvzpYOdghoLGj66CD8livqIQmOfWLLamVqehklPe5V06z5nbPQIhHGHIy6hz/NWqkIEC97PmtGZJ+\neL1jesPHsesXMTqkp91NklZ0saa9QFKJU27FIFaTLT1fcrTCRUJt3iBuJBSt4EW7NnRirRlwuunH\nMRJZUJ0QIg38OvC3pJRFUWds1ebmJr/4i7+IpmkEQcDXvvY1fumXfon19XVSqRSqqlIsFhkfH2d3\ndxcpJePj42xsbJBOV3f+5XKZyclJtra2EEIwMjLC1tYW2WyWIAgwTZOpqSnW19fRdZ1cLsf29ja5\nXA7XdbEs6/V1wzDIZDLs7OwwPDyMZVnYtv36ejweJ5FIkM/nGR0dpVQq4bru6+uJRALDMCgUCoyN\njVEoFPA87/X1496T53ns7Oy07T1t72yxpr8kWbnIpcp5VtLPmC1fxdJMKlqRUXua7cQKGXeEWJB4\nfT3mhmSwyNrT7KbmydpTaEGczcwjJko3qRi7hIpP2p5gJ/2cocoFhFTYSb1gvHwNM1ZVc0g5Y2yl\nnzJqXkaKkL3kIqPlK5TjmyihRtIded2mr3h8UtS56P576Jki8bCI5kpKQ/fJFu7gayZObJOUeYlK\nchHdG0L3shRz9xkq/AiKkeB5kMeyhtDjPhfdYeJhnIXkSy5WLlHWytiKxZg7zmp8hTF3HCM0Xl8v\nagV8JWDEHWElscSkPY2CwnJ8iQvWRfb0amzhkDfEYmKBc/Z5QkI24mvMWufZNXbRQpWsn0MO+1wr\nvoenOOzEtpiyzrET2yQeJEj5GRZTz7lgXsFRLfb0PJP2DNvxdVJ+hoSfen29+jmVuVZ8j434KkPe\nMLEg8fq6qZVwVJsRZ5z1xDKjzjh6GHt9vaTv4QufYXeM1eQiE/Y0ilRZTSxwrnKJglHNYs+5Iywn\nXzJjXSQUAVvxNS55P4EZX0EJdeLuCLvZB4wUb+OrNmZ8lZx5GTOxiuaniHm519elluRekOeOfYO1\n2CZZP00qSPIsMc9Vaw5TrVDUykw7E6zE1hnxh0gE8dfXS1oZS7GZcMdYiq8y4Y4RC43X1/e0Ir7w\nGfNGWIgvM+NOoUqFhfgyl6wL7O5/TiPeEC8Ti1wpfpGS3GEnscKEOUcxtoUqNdLuMJvpl4yXL+Gp\nDoXYBmOVC+zFN4gFCRJelrX0U6bL13BVi1Jsh9HKOfKJVRJelriffn3d1spYepFha4ad5DIZZxQj\nSLy+bulFHNViyJ5kO7lIzplED2Kvr5tGnkD4ZJ1xNlPzjFqzKFJhIzXPVPkKZaM6R6TdUdbTz5k0\n5whFyE5ihYvWeyz7W8zKGXJ+lheJeS5bcziKy5a+zTlnhi1jm3gQJxOkX1+3FJu8nmfGmWbD2CQd\nVD+nV9dNtUJZLTPpTrAaW2PYGyYRxl9fL6llbNVm3B1jObbKuFf9nF5dL+x/TqPeCIvxZaadKVQU\nFuPLzFkXyO9/YU3BVwAAIABJREFUTsPeEPOJRS7Y5wgIWYutc9e7ybL2HE1qZLyh1+O53u/TVOU8\nFa1Iys+SCFIsp55xzryKpZqYWpExZ5rN+Ao5rzrvvbpe/T5ZJMsT2OlhMtY0WhhnO/OIsdJNLGOX\nhJrleuk2K4nF/TlCZSW+yHlrjoJeDYfIecMsJeaZtS8QEuzPERfQQ41pZ5aMn2Mh+YKLlcu4isOO\nscW0fY4dY4txzqG6KZaCLRbchcjWJ8/zME2zofXpLK65g/d09HtSFIWFhYUz9Z5OUs4QMoKCAUII\nHfgd4PellP/r/s8eAz8tpVwTQkwD35RS3nj3td/73vfkzZs3W+7DWWB1dZWZmZmTb2wCN7R4aP4R\nHhbz9lMeVOoXkp82Uh2VXQOIyR/hw9LBoP64EmNYS5HWdAwh0IRAExJFSFQRElcEAWWeVHbw2+Ap\nbZYr8UssOM8iaWuufJX5dO22BKItZZBHtQmG1SGk2EZQjeWUIiCQu0hx9GmDwXkemDp2G0tiN8qk\nPsuas4EhVFShogkFR3rYoUc1REeionJwPy+IKxrXkiPshU/xZf0lfTtNjDli+SzPky+63ZXIuJG8\nyKLTfFGKS/ErLLfweoDZmIYt3yTYSQkJcZO8O4TPNqWwcQnHpEhSkbVPX6SEEe0mTypviqz83Wv/\nLaP6UOOdr0E715oBZ4OzOkY++uijD3/mZ37mS7WutewhFlVX8K8AD18Zw/v8FvALwP+y//dvtvqs\ns47ntW+hVYSKIjTulX8XK+hM4YtmSYjzfFw6HO9rhw5rrgNHbPImjRF80Z044eOQEYYL6OHRR/6q\nUFuuVqegMKKPExdZrECwape4b1WAV1nu2lt/TxNXYmTUOHFFJ6aoGIqCKqpHyZ9aLwhaSIZqB3t+\nkRCJLX048LsSr/8OCHl3X1EOAj4urTFtzBLTlptO0mofgnHtBg/MZW6HY93uTKS4sjV1kiji6pPK\nLHZQNYhjXGDDHecTaxMwGdOH0BWVUNT/PR/Tx9n2jp6rpvRr3DffGMMqCkNadDra7VxrBpwN+nGM\nRBEy8ZPAfwzcE0J8sv+z/46qIfwvhBC/CCwCfyOCZ51p2qn7pwkDQ4ljiCQbQbmh16otJI40ikqa\nZ2YSXzYuk7Tt7jEWM/CPspi7RCXCKn/H6RCPauNseI0lr2lCZ0SbQCdNwfdZsPZYsWygPt1pO3Rq\neoBvpS4Q1Kmx2il0dMwWpcjW3AI/Gp9l01+IqFetk1VH8IIcD/YNqBeJ+e52KEJUFLbd1uSf/LD1\ncVgJAnTGKHuX+dhcA95Up9v29riTvsGW/6Du9jJqprZBLAVj+nlW3lEJCQh5WlngZiqaanX9qDE7\noDH6cYxEoTLxbSmlkFJ+QUr5/v6f35VS7kgpf0ZKeW3/786euZ9C2qn7V/DX+aj8L6mEeTINJpmo\ndMYgjokptp3L5P3mNEMDQsb1uWg71SIC2POiG/rH6RAnlPo+1xFtjCn9JoQXWK4k+bRY5ofFdZ5W\ntnFb9DC/obeMYYCsloukHaWDG8TjUFCZ1G8yX/FZdN4YV5etue51KmIUoeC36o2PQKzGCrJ8VEjz\nwKy94fy8vMyodrHu9rx3w26kYFy7Rckf5qG5S94/nET4MsKiNv2oMTugMfpxjAwq1fUQqVS02rtv\nk9Om+Knc3yQm0kwZR+tq1kJpsWzqiUiBwY/yaVFnxWmtnPKWa7WkTBE1I9pw6wv6W5T0owsFBMcY\nsyoqs8ZlElzm85LLx8U11pxCGyKOq7SiG9sukhGpfcjocpGbRhMGBhe4X16uhni8RUE7O5JrnvTQ\nWtyA6KL5z0tKGFLu8klpDf+YEw+JZN3xEfLkJVVFZcN5Y2woUiWjXuOBuYQdHn26te7WnhubyQNq\n51oz4GzQj2NkYBD3EKraXsNzNvYeP5H9jygHL4iLkzUGpRSklWmCcJSEuIghGqtwVw8xZsi7d/mo\nePyCUy8b7i4zxvUIehYN6Qg1iAH8YzSk3zWMAIa1Mab0G+y5o/ywsMMLa4dOFCaxu1yEoxa6Eo2u\nphd2trBLLca0yyw5tWNQjxsjpw/BhH7w6FZBYVSbYMa4zKx+jRn9BjP6DWaNa0zpFw6dlDjHGJnH\nPlkqJMUdPisvn3wzsOsVGTdOLqAxHZvB442HeEy/zgtr9cTX3S8/pVKjVHS9ik5v0+61ZsDppx/H\nSPddHQNeUywWGR5ub4XrK4mv8sf5z9GlpOxbWKFDJbDRhc64kSOp6oDECgI23DwroQ28mqwNriZ/\nhKT2ElfWV2GpFilliLgyxq47zCflNQJa8wq/y+flVW6lL7PhdT/TvhXvVC2G3TG247XLuKpvefKn\njYsUXI0HpS2gs0dfKgoFv9DpgoAnEkRUxc8Ju6NgoqAyrE2jkKXkxRFSQYrDfRn1RtiIbdZo4XSy\n4zrMGFdAqliB4Lm5x0LoArXnIIU4N9PnyGgQYiOlREqBaKDAkJSQFLd5VDkYppBRkxiKxs4RhU/2\nXP/Ecf92NclhbZqHZn2hEHm/yJK9zoQxyrCefd2WRB747tdDJ9aaAaebfhwjA4O4hxgfb7+gvio0\nNhyfZedgLJwnfRbsk7O5n1VWSSo5bqQv4spHBG8lXyWUDHFlCJUkvjQwA9hxXSqBT0LVsIOAgm/j\nyhCokFWVml7NVpFIHpQ3uJO+yar7iCYcKJERdaGM1eTikdc0NM4ZV1m2HD4qvAqt6PybHzOGMGX3\nK9O9SyWoL1HwJJwwaPuv1RBxcuoUQqgIqVLyNZ6YeR6HDlD1DI/rk4zoGhveQQnFxXh9Hs3Tgi5S\nfD9ffxx+iORB+aD3/G5mAlPW3kjWYlK/zeflNxt1Q2hcScyw4q5SCkrcTF7kcWX5UMjRkrPJpUSO\niqxd1OBc7ALLzuJ+m0m2HNHQHPH/bv4BXxv/WezAYTo+TiBDdKXxZbwTa82A000/jpGBQdxD7O7u\nkky2VlWpHq4n5w4ZxI1QCW0+Lq6jizFupmapBCVW7Qql0KWaTFUjKa6GgktKTVBsUPGiEe6Xl5iL\nX0URBQphd+TYotasnbCneZk+/Psd0kaYtxxWne7Hj2a1JGaPKfZICTte86cab2MFHnqEM6dAIaMO\nExdZIM6uK3lk7hJwvDrJlrfHlgfvpa+z7Dx5vfGbdqZ4qkWje90LaCIJHB07Xw+GGK7LIE6KITQx\nw2flZeJKjOlY1ejc8nZ5br98fd8Le4GbyUs8rBzeoKbVcSr+YYN4yphh/dW8KwW6mCXvNzYPKwj+\n3uI/4lxskv9k+q9yNXmhode/olNrzYDTSz+OkUEMcQ8RRZGUevjx3PuRtONJn6Lv87iyt28MN4ah\ntD9bf95e46VlMaXdBNl5b6kTRuOVfIUiDx6NakJjRr/B07LsCWMYQBe9N63ktCxuRJsTM2hd1i+n\njjOh3UKXt1goT/DhnsJ38mW+k9/moblD0EC64+flJc69FTevnrVpvY5EtZMI5NHx4zl1llH1PRR5\nhRdW+LoYhh06LDvrrLmbNfW9d/3aXmtZQ5VnSBtm293Cx0NKGNVuMm837pRww+oYXnY2+J/m/w++\ns/dxw21A59aaAaeXfhwjZ2zmPN106ogiqUaTbQ9Q8EtNnx5HHV97FBLJ5+YSKeUScSXaJLeTsCJO\nLltNVPVvBYJZ4wqmO86HxXX8iOJjo6GX+lJlRBuNrK1yk6EXCgqT+jV8/xo/3IPv5Ld5UN7GiSCZ\n9GllneT+2D5rIRNeBOvymlOpqQAxrJ7niVnmc3OJ1SOSFI8i7xdI11AuccPDHR7ShvD3j8mmjFs8\naqBS6CsyaorFd072/p/136UcVBoOB+rH4/ABjdGPY2RgEPcQGxv1x7i1wkhEeqxQrfx1Pn46BLwX\n7Q0cP0dSRFfx6Xhk5AbxdecuM/pNPH+GHxa22fV7T82h96q4EemGQQKGOLpiYC0mtEsU3Yt8e3eP\nl1Zrx/+1cKVHVqmWWZ2zmjtG71XyXuuFbTbcPElx55BRLMi2VO48rR02iGuNtSV7kfPGBSb1W9wv\nN24MA0wZhzd1ZmjxXz/5Zf63pV/l8/Kzur16nVprBpxe+nGMDAziHiKd7oz3Uld0tAi9s0mlMePg\nFa0sRM2y7e1hBdkOeYoFWXWo5VbGtEmm9Ru4/gwP/B0+LK6x5bUv9rpVjtND7gZxEWPViXZyN0T9\npywT2lW+ky+x5rT3M3taWSGj5Mgfo1V92jBEgg03mtjve+UViu4cQ8oNEmIYpGh5BnLDw2O91s8C\nAvYCs2ljGI5WSfGlz5PKPP9g6f/mc7O+2PFOrTUDTi/9OEYGSXV9iC/9mjFxzVJp0gtqBd0p3rDt\n7THBCIYa4sr2elizWo5C8GZBV1FJqmk0oaMJHQUFgUI1CGIfoaCiINFYs23ulQq8kk5L0ftJDl6T\nuq/tYiZ2jieV+UjbNJR4XZEhQ+oEP9wr0wm1j4CQrDpJSG/EkkfBsDrJKtElxG55BbY8AAVDTOIa\nHpP6LJpQ0YWCKgTL7krd2sVmeFiZJ2zTRn/HO36j40qPr+9+jzvpk7WQBwwYcJiBQdxDlMtlRkej\ni3U8ileJGVGx6myQUdOUgvqNy5gwWHO7o/wAsOntMiPG0cU6Hu0zzP1QMmtcJpAGec9h2d7bP1L1\nqCm9sc/VxHmeWYe9SWNBlsUIDYR24B3zvjqNIlXWGowNrQe1jsI2AsGWk8ORnfPYlgOPWW+ItdjZ\nKLsqiLetbVd6LDs7h36e0RJkVJ1ScHyoxpCWZdM9fE9WjZOPOIxeFxqFOhR57pWfcL/89ESjuFNr\nzYDTSz+OkUHIRA8xOTnZkecs1chuTihxJvSxt/2UDTETG2vo/iljtCshE2+z6m6jMo0h2rfoQpIf\nFnb4uLjGvLXbcizrE6M+Ef9uYtRhLHaKC/ELJxo2zaBy8nsc124w34Z44ePYcPO8jB+tVX3aKPid\nP0Uq+RYpZeTEuXD4iFwMXa09r2k11CfqZVjL1n3vP13/1yfGEndqrRlweunHMTIwiHuIra3OeP4e\nmy8Y1nJcip9nSp8hlAYF32PZyTNrnGuqzUYNaSOiMrqtsuJsQTiJIaIPRcioWe6VmotdPWqzcMWd\nbqVLHUHvEYNYStjz2xO3K485XBMIRrVz/Ple52N57dDhuns2jsw1NNZqeHA7wQtrnUvxuWPv8Y+w\nOa2gduVNTWl+451S65+f1t1tvlv45Nh7OrXWDDi99OMYGRjEPUQzNekbJZQh39r7jA23zOPKKovO\nBv5bsk+ViHVzj8KKqGpYFKy52yTELFHKLupCxw2G8JqU1DqqK2GNUr29hibary9dD7OxGba9+iuc\nNUIQvpk6BYJhdZqsuMt25Tr38uf40y2VhJJqy7NPQvSgDnQzjOtXD8xNneaxuXakITobm+K5dfi0\n5kpihlJY2yAWLSy3mtJYaeY/L9479non1poBp5t+HCN9G0O8YK3zaxt/wq30Rf7K2E90uzsAjIyM\ntP0Z98rP2DqmYteInmbXb3xneFQG9FGsudsoKJGXNm6WF9Yq76WusO4/b+h1hjCY1M8TSBVFSKqV\n+qDghbyway+MAEIqDOs50moGBR1fhjihTyglhqLiBSqX4pcxgxKb3pvPY1Hv/V27oLHFu13EGlCC\naISEEscOkiS4y54b8KJSxg4D4G3ju5rgVgw6n+CWT5z+pLq0MsTD8mpX++DJgEl9mhfBywM/nzYm\nWHMK1EqUTKge5SPylX3ZfLKpUucJnJSQ0VLk3RI77h6jRm2Vm06sNQNON/04RvrWIP71jT9l083z\nteRPdbsrr9na2uLixYttaz+QAb+x+YfH3uM1MWkrKGyfkAF9qC8EJJQYVtgdpYlaLNhFsnoKR9YX\nc5pThyh5ST6yTg6L0NCYiU0DOjtumW2vSMk34UB5XlnNdkfDkg6vFty76cu8sF8gRDVk4qNEY0Z7\np5EdUFQ4sQ8RlmoGiCsxpoxpSp7kqbnFUuXkKmOPzRWm4xmKQY1S5m1kojLKQrK3x8hJ6Izjy+4a\nxFD1Eo8aaYpBGYHgSmKOx5Xlmg6AuGJgHCNn6bagSX6Uw0FKmIlVQ74KvsmuV2Lbddhmix8WH/Nv\njv14zde1e60ZcPrpxzHStwbxf3Hhr4GEf7j8W/wbIx9wM3URXan/1/GwvMCN1AWUCI8Vstn6Eyea\n4fPyCxbeSairJtONowiNXa/MU7NIUhljWE9jKCqqEAgknnQpBnuU/BLvvuVLifM8bqLyUq8VhiwH\nFaaMWezwyaH3+C4CQd6Ns+Md7Y3T0Zk0JlBFnJeVTR6UXxnOkiljhGE9DUjMwKYUVCj7FgEBDgHj\nRpZxY4gX5jr3ysvcSV/hpf2cDa33NWatoPsqE6P6OEW/tWQ6Q+hMx2awfMETc4vlymZDr5fAiD7W\ncYO4aESfRNgOpOTQ90xKmDGuca/UfWMYql7iMX2WcWOcTXePB2bthMXZ2CR51+G7e5u8n72BLRex\n3pFkC1sI/6gVOjKkZtFFmpfWJnA41vqj0tEGcbvXmgGnn34cI31rEMf3k7r+ywtfQyDYcHeZio2y\nt1/wIKeljo2heWDOcz4+UbNSUbMEQXvj5f5w98+AqhE8Y0yz65msubvkvYNGsh267Pq1F/GMOsy4\nniOhanihhRmWWLMbj9PUUOvW+uwkz6wV3ktfZd07XuB+Up/hnl2oeS2jZMioo7ywNsh7B0MchrQU\nw3qKBXuDzWPiW3e8IjtekXF9CNV3uF9e4mbqHJrXfWPzJAp+uROyu0eSUYZZragUfZW55HlSqo4i\nQEWgCKimLAYE+Lihgx06uNIlocRJqWk04hQ8jwUrz6rVWoiK34WIIF12P4ZbSsioIyREFkXE8UOB\nHQZUApdyYFMJXHwZkNUSpNQ4hqKioGCHZs8Yw6+wg4B5p/aGX9n3Gt8vL+1v8AWfFDfJqTluZ6dY\ndd+EWxhKnIMnQvXz7lyZUOJ4UmPdPXqTdr/8kkpgk1QPJ/O1e60ZcPrpxzHStwbxK5T9BJSp2Che\n6JP3SvzR7ofcTF3gi5mrZLTaSRU/N/pjNSeaVjBNk7GxxuTLGmHPMzkfu8iLyhp5780ErwqF87FJ\ndKEhkXjSp+CXa2bol4IKJevg0Z+CYNyYYExPs+qu4MiTwyDGjGHW3aNjbLvJo/IGV5I3UIRFKdjB\nCk0MESOpZPGkQ1ycZ960mTFSrLoHF+9JfYId12PNqbWoSzJanAW7fuWJLW+PS/EpnlsWO67D7WCI\neXq7pGbeL5HTVQI6P6Gq6JS8DHt+NVziRaVelQKVqi50dGEWAGbQ+U1f2k/SgsJX80jBhH4J09dY\ndfdYC2wOxlUfpuBXKOyXH0+pcbw6w5U6yVEnhxfi05R8n3s1qs8VAofv5R3uZq7js0IlNIkrQzRr\nEFvvJDtP6tM8OuFUTu6fPtVap0rlEiOjI6/XvwED3qXd9kgv0vcG8dvoisal5DT/WeKvnDhRHGUo\nt8LU1FTkbb5i3dnlSeWgIRUXBleS53lirvHEPOxpyKoZLiSHeHLCxBsi2XDzbLh5bqfOM++8OLE/\nKbU9CU9REBDypLL8+v+ayO4fWVa4Ep/jw0LVo77mVMNF0ppeLVcsNR5XVo+M95uNjbHiNL4JeGmv\nczt1gQfmEuXMEPRWZeSapNQMxaDz4R1j6hU+rfSOVvOKvc1oLH7IoGkn6+k9OrkX0Ykxos2xaJl8\nYjW/ya03cazT1CpFfjl+kQfmMicdhdwrbZFW09zNTLLtNb85OqArLAVLdRabmbfWGDeGCGV4YE0b\nn5poWnN+QH/QTnukVxlsD2tQz67ZC33KvkXYYqGFt1lfb191qfvlqpEqJUwb41xPzKEQp+y7mEeU\nUC4GFe6XVpk2JusuvFFv4QnlFA29t+P3VKGResvj8tLa4F5pmQfldR6YtZNtXhFvQXv5ubXKhJHD\nKChM6adgoopSw65OhFR4WYnWw9sqIZIxrbNelsnScNufISUMq9OMKLfYsDN8XFw7Np6+HnpV5qng\nH3xf1xJzPDBXqDcuqBy4fG9vly03mg3ikJbFrFO28t1kZzf0KPomOxvbPRmyNqB3aKc90qucHquk\nx3heWeU/f/DL/N729yNrU9fbd84ZEzGuJebIqcMsWLvcLy+x55vMW5vETtCNXbC2Wajscj15kZhy\n/L3rTh5Fniy71c2yzY2ioDBljDMXu8QnhTWkVBjXa1epOo5Fe5OEEmuqD570iSkaFi4bjkVWzTTV\nTifQhdYVubEJ/QLFBsqHdwqtw0VoXLU9RwiGSDCmXWBCuwnhHJ+XTO6XV7AjMqx6cZMcV2Jse29y\nBUb1oZohEicjyGnRfGfTarrue19aa0gpKQfVBD9D0clqKUqygiZ6Qx5xQG/STnukVxmETDRJRkvw\n1yf+En9x+AuRtZnLNW5k1YsVenxeYyL3pM/N1Dkemcs1XvUGieB+aZkRLcWwkWHdrR0bWAwqvJc6\nz0tnvkYjgguxKwShpCBPlq3qFCNajiFtCFCRVL1foZR4YUjJd1h3C+w6JaCaaOgGFuNGFrzaSXVH\n4cmAq/HpphQ5AFacbWbSVym5FlltFBWLoAfjJ0b1HOUuxIK6QXObjXbjh531lu8Z0WwKUkqWtDKF\nFShsuSVWvRKwt/8nWka0DFOxYRYtE7eHxvSEMcyq+0YtIqdmWKG56odqRAZorZjmufg0McWg4JdZ\nd9/EzX9aekYgA1JqHCuwSahxSp6Jl5C4YYCmaEgpe9Y7P6B7tNMe6VUGBnGTzMbH+RtTPx1pm9vb\n26RS7aluZR2T3FPyrSOvvcuub1IJdS4mJo9MDrPCwwGMUsIF4wqflaqG9/XUBGVqSxi9y7g+QkpN\noaIhEQQSqiZ6NQpOAk4QUApc9rwKvgxRhSCrxZmJp1lwFo6seDUbm+J5ucyLsLFEtS33sAc0rhic\ni4+jC5VQShQhcEKPl9b661LMrcbtKeWAy7kpXljr3EqdZ9F5eaJEXKdJq4kjixO0DSlY7FKZ35N4\nUlljOpZjL6hvA5VUUgxpIwgEvvTY8bbxOV5dJKdmGdbG2XTKuHkVslcZj+lUwjVM2ZgBK6TCuH6d\n+6UNfNneY9MJYwgdnSVni22vzKQxRBjs4feIUZxUD26y7CZ106UEQzS3YdPRGdMnGdYmMQOXsncw\nLOtq4hyP9kM4VARjsRw7+5v1UlDhHyz9On/rws8T2z+pWLIKbGwVuTuuYQceSDBUDUHvhq0M6Dzt\ntEd6lYFB3EO0a0cWyJA/yR9dynPXa0wn1Q49Fip5JmJDbNYoyLHq7Fb1mcUbz9jF2KXXxjDAE3OT\nH8nN8cKeP/I5s7EpLF/laXkHaNzrZQYua06RrJbhWmqYl/bCgcp4WTXNomlhh40vvqN6morzpk/X\nk7MsWTs8MQ+rS6hCMKJl0YRKyXdIq3HKTZauXlbz7Hk2w1qah+YKdzKXmLdfnvzCDmIonT/6HtWm\nWbc6q/dbL4EMqwoDRxjEhogxoU8TSp0tp8ySXWDpLV1ZBYMLiWmG9BierLDlbRDgk1ZSjOlTbLsV\nlqxdlqh+vzQVlu09FveH2HTsElOxBEJYOLKEGeQJRe0NYloZoeLl+KTYfumzq8lZXlY29subVw2x\nDXePO+nzPLN6Y0y/m1C36m4yHRtnzakvVl1KmIvPUvJ97hcLvJe5xrLzHFlnCfYJbQpDDPNp6WCh\nldupC+x4JbJqjrJv8er350vJpD6J6dvY+2o/Pyg+ZNcrMmpU15eCb/NZsIW18Rl3MrNcTY1jhx4C\nQVztv2PyAbUZeIgHdBXXbU+Sw+9u/YD5Y6qpXUpO8aBcn7f2Fa4M0ERt2Tk7dJlLjLHpbRETMab0\n2beKUrzhSTlPxjicgT+qD5Mgx/3iGlEI2hZ9mw8La0zHxpmKx9h0txBCMKJNstikIsHbnqNbqQt8\nXl48sq+BlGy/lXA0aeRIGQk23MYTwFIyxkqwx2wsTTGo8Li8wXR8iF2/dwp2yC7Irekiy6uQll7k\nWWWNucQo237V0I0rCca1aUxf8tLaYs06Wk82RDJvbcP+QY4hkryfneWz0jyr9uFQp7Q8GLO85uQP\nGHCCLCN6mqRqoCsqKgIhqkoG606RYtB+T/uEMcQzc42wRnmeF5VNNKH1hJf43YQ6gKyms+ZIjpub\nqobwDGYQ8ugtBZ9PiivMxmZIay7b/tGfuZAKs8ZVPi2ucj5+2LPshhrzlQpQIaEYXEldQgHynsX3\n9xaIKRrXkrOY4R6aIvhO/jF/efQuGirvpacYGhNomRSu9KsbEglm4AwM4gGvaZc90ssMDOI6eHX8\nDW/kb9pxtGRZ9Ycu1Muqvcuvrn7jyOu3UxcaNoZfMW9tMhsfYusdL/H15HkWK3lUZYxNr8yGXdvb\nVA4cVC/B1dQMAR4KKpYveVReR/LG6xEVa06BtdcnnpJVVnkvNcene1ucTw6x5jVmHKfUOBPGMJ+X\nlxjVcxiKxppzcpGSDbeALlSuJGd4bjXmiRsOq3J/K842N5LneWguE4ZDIAsHPPLdpBR0XunB9Htf\nRL7kC8a1cUKZ5qm5wQrNhSO40uN5ZZ2A2l7GV2PkKCSSHa/ETo0ojCvJ8Y4kJg5pGdad2h7zSuhw\nOTHKqhud3raKwoQxQohk282//t0ZQmPMGGbT3T0UVhVXYux4hUMhSQv2KtdTF2qeBklZ1Sd2AsEj\ns3bi8Iqzi+II7maus+69OGT468IgIWb5uFidj9KqgapMEld0QiRe6OOEbz57K3S5Xzq4MXJCn/vl\n6uvn4uP8n8t/hCIUnpUKrDh7/Kfxu1xLT7zpt5AktM4mfw7obdphj/Q6vZfW22OEMuTvL/4aTlhd\nPT4pPeNfbX6rLc+KWvcvlJJ/tPIH+0eSh6lq2zZnDFcRjLyjtnAuNs790grFwCLvlU8sz1zwLT4s\nrPJJYYuPCus8NDeQHdLHDJH4UmKHPk/LWwfk1E7iobmE6bs8r1SNmmEty4pV5FbqIleSM8wlJrmV\nusiUMc4appvnAAAgAElEQVS52OQhdQ5PBmw6jXs07+tvjPbHlSVuJGdZdra5GL8MsrPxf6P6EFPG\nQUmxYS1D3u+8QZz3ek9d4l12vCI6wzwxN1oqWz6ipY81Wj/Tmg93iCvRFhs6itVjqlsKBIWIy13P\nxS/yzCzywixhejpBkCIIUhRdlaflAhPa9KHXnItNMqJeZFSdY1Sd44Jx5fV3bN1Z43Zq9sACOmtM\nMmXM8sTcZsE+XkUnRPJpafn/Z+/NYyPp8/O+T91d1TfJ5k3ODOc+32Ml7XolS5CyjgXZWFtGYkBS\nHCgCgiRwECiIcwgx4CCWEVuAEyMRBNmBACsJJFuWgkCn46xlSdZK2l29c58cDmd4X032XVVd1y9/\ndLPZTXaTzRnO+/LV8vlrhs0uVtfR9fy+3+f7PETREKPaROvnpmQhRyO8asaEX49PMOssseRu8dJe\n5ZW9xqK7hXyMxe9uFf43Nz/hamKEPy0uUEuorDmNQoYfhWfa4TMcwLejD/FZhXgfvChAlZRWRdgT\nAd8oPaUWOvzUhf+AMWOQrPZ+LK/W19c5d+7ciW3vV9b/gE/KvSOIl913T4or+p2ryLhicVQ61WmC\n3crWlbAUo+XvKQFXrGkCEfSo4kod7d5y4BAiOnTS7Zg20weqx6qs0KPI1xO3/Am+YezpKxsT5YIn\n1SVmzEmqUR47ev8r+5nYDJ8U14nwmIiNMh4zWHCXGNYzrPjvdl3FpAQimGTBKWDIGiNGAk3doCa6\nE20FlY139MD9tOC8hV59PxKqQaVHN1MI+LK4yFK8hqARdmGHDgvOZl8NFyf0uWpNUw3ttwqR6ReG\nrPYMD7mZmGLOOTrcp19Mx8Z4VNkL0QgRhNFeeVwIkIihiyGmrSRb/hYDWoZn1R3cqLOMfjt5kWVv\nDk/4zLsLZHWTCW2cLS9kzj5+RXvLK7Plwa3EZQrhCn6Y7fiekHucs0V7nZisHdi/rr/r5hkzsjiR\nh9uUp82vLpK7nKLiO5jKWWX4DAdx0nzk84AzQtyEF/oIBD/54n/jR8a+wvdmPwAazgE/OvoVfnfn\nLqWgxqgx8N72QddP7ovpX+Xv8ivrh1eyJ82ht5ZL7KLkvxv5GjcGCUTIZhfTegnIakkiEVEMTt7G\nS5MUXtd2mv+WKfh7dkrnjGk+KWyQVI1Gqm8XZNQ4gQhJqXEWnAK9GIcqSZT8g/uvS8e//WpS55S7\nG/nISETAvLNBVk1w3hxlw1t7b+loM7HzfKu4p+9eccusuAAGMXyGrRxb/tv5TAsBYTjJy6bu0o18\nSoHNgJYkZ9apdxmuTCoDTYnN6UZcjvHa7q0b7RdJNcZaF0I8pKWIKSZr5TJPqp22hjfi58h7BTwR\nUA7sAzKAmKRxzhznaXWludATXE9M4UY1TNlAl3UEgkpYY+0d3TyuWudYdWpcMifY9AqtaveUkUOR\nDF5WCwwYSQpBf1XitJogrSZZctc6Ku8ZNUFOy/G4snag63Q+NoosqRR9m2ro8qQpL9j0aiRknWVn\nk273cyXoPPC10KGquMw771YEeFxd4YI5fCCBrhZ6DGlpin4VX4St8xZTDGph/zKhAS3Bk+oS/8fa\n7zIey3K3toy/Y7JeL6NIEn9j6ksM6f37G5/hzz5Oko98XnBGiJt45axyLT7NXx/9AS5Zkx2vfXX4\nu/nq8He/931IJt+t8lyPfO6W5/j1zW/w4ghfYYCn1cW+PIgPQ0ozcdtcKoIuMafdkNPTJOQ4s/YG\nMVnjojnGtl+mHvk4TaP/GXOS57U1FCSGjVTHYFq/mDSG0LDwcVje97CZMSf4pGkddykxyJLXOA5X\nrfN8UmgQikpQ50Z8mEW3QWQMSWPGGmPB3mHLcwBBSslwWPntSnyMl128hw9LtduPnJZBlVRMPQ5t\nz+QhLcVK28BUIahSqFRRJYUZ8zwxWcWLJAQ+1ahEMSi8k03b+dgkf1rcoPvnlVh0y2x5ClMJg7o4\nvkXVgDLGvcpB0rjjV0mrk8jaK6J9pUVNMuAECbEkJCZjI5iySSgaVEqWYNPbprivlT9ljKA37awi\nIYgQyEjNLhM8ry20jve4McyO/+7uDUozSdOQNGKK3oo8roUBG94Wbo/ghnWvsSgzZZOkGkOTVHRZ\nRSBIqRYPKwvtR4Fn1XUyapyFsPO+SStJzlsDzDsreH3e79BYgM7EprhXaliEbTStC2OyiSTJvKzt\nLYrjSgpT9nD6sDlLyQM8q6wTV5IM6wl0WcEJfRadHVaczrkAIeB64lyzYtwdduQh9SjNplWd0r7F\niNZjuPi4WHcPFgXeOHvHXpU0koqFjMyOX+k6kNgL8/YGMUnDFT7pGCw7Fb659PXW6y9rm/yD63+N\npPbpSGbOcPrxrnzk84gzQtzE9USjNfD9Ax99Zvuwvb1NIvH2q3RVUhjWM/z4xFf42YXfYKVZyblk\njqPJGqEQBMJn3tmrHi25W2TU+FtVYDVJI4aFhIRAoEkqCgaXzWk2/DzloLvO8ao13Rz4aFRk3chv\nTWJLCG4kpph3VluylRBBTs/2TYgVZC6a08xWtnneDNRIKDqXk5NIkoSETBTBs/JepctSGmXgK9YU\nnxRWaSd8pmShSgqXrQnmankeVtofshLrR7hFyD0eXFteiaRmtlKkZCQsJdb6fzsGtCTPastM15Ok\nE3FKzfOVVpMdhHgXgQiZtVcxJI2Kp7V05JY8yJCRwFQ0DFlGlQApoB5V2Qm3D5DNdqTVJE/LlSM1\n3k4UMqxNseT1lut0g4GFFOWA7mTltZPnqnwZSy+jYoHQCIVMGMikFO9EhsEuxCZYdEq8rB2sgmqS\nwqX4BK/dvfNfDFx2DpGITMeGWPMar7td/LmPCyFAFhomaQq+TclvsDNDVjGUxnV2MRhkQ9/rdqRU\ni9X6HtlyIg9n3wR5Tku2PL3bUQ5sho00m97eAFwpdHhQWSGnJZk2MkiSYMPbohx2/w6ZNHLElThb\nrs29cue9BXS1PVytl7lk5fCk1UMXjikljhC7C4I6r512At32dwRMmyOAcigZhoaKKSHrrYX5Li5a\nIyx7B+3gguhk9LeO8BjQkuz43YM/AhH1fO3IbUceNxNTPKkuseTm+apxh1/yXrRef1Zd57988i/4\nOD3N5cQwXxm6dqYr/jbHu/KRzyPOCPEpQjabfaf3K5LMRasxHPJj49/Pz7z+VXRJ5Vl1b1BNlSTG\nY9kWiauFdaZjKUpB7ch6gyWZjOjDRJFKwa+zWCuwUdtmMjaKqSos12oslXcrGoKcPsSEGUdS3FaI\nx1VrsjX93A0CiSfVVS5Zwx0/X3YKTWlA514qyK2J8ZRiMW7ksEOfMJKohnV2H4rV0ONesXcbf75W\nYsKY4G5hf/VTEAkJDXMfEW5gUEuyfZSPs9R9djVEEJfjnIuNslmvseIWqQUBOW2A4ZjJfFt1azfQ\n4426Q1ZNUgpq5LQ0s/YRD3fRebzsyGOxS3v3RmKMqudz0RoilCps+gcdEAwGcKL+pBD5enSkZjUm\nJUhK49RDjVW3xrxXQZfWuRqf4EWt+zXyorYJNYBOOUhSNZiOjbDYIyymH8QknZe17Z4hLr4IeV7d\n5HbyPC/sN0hSw37vMJKyq+ceUFO8eguN6X5ctsb5pLxw4Of1KGDaHGbL32FFLTNhDJJS4ziBzxsn\nz5X4wKH7ueVXuGyN8dLulFpECISQmDFHeWNvELUNcw1qA3yz2UmRge/IziCkOhISiqQQCVh2ysxW\nS0CJCeN4329z9ja3U9MstaVeptUEQ9oAYaSwVq+xaJdRyHM9cY6XtSWiNn/fnJYho6WohXW2vSqv\n7P410aNGltdtVpW3EhOsevMd/sFpJUtCGqJ+AgudXQweQojfFe1+84vqTkenCeCVvcUru3F/v6pt\n8p+e/773sh9n+HzgXfnI5xFnhPgUwXEcUqnUiWzrS5lr/OS5v8o/WfodEopKJWxUTgIh0CUTiWIr\nPW3R3eLD5EWcMKQQlNjsUvG8YJznQTHPchcroWW32xe4xJZns+XZyMAHmXNoSsCLan8ayrk2raUq\nKYwYWV7bPjkt3qp21qOgoS9V08QUjQ2vRN7bI1Ifpqe5X+rPSq3gOxT8dqs3wfXkKHXh8NTu1Fm3\nE/MRPX0kIX5cWWFUHyCnJ8j7xY5K90p9h5X6DjHJImxuc8uvsONXuZmcwonq2JGLJhkMaimyvoWN\n4Lo1zZK7TXBI9UwImIhN8cQ7uk2vSAp26PGo0vjd64mL1MlTboZJzMTO8a1DFhT7MVctcTOdo7hL\noIVEXMliSCmkKM6OF/DMziPorMR6IuRZdZUbiUmWnC1qfSaDVYI6Ts3nWmKCOeftvKXHjBzP/L3r\nblhPMRUbYjyW5U+KL9nyygjgYWWFO8nzzDpvqEcO1+MTFPwa234Vv01CcDM+yazTIK8D2gBr9Xer\nYEtCohT01oU3dNeCqTDGI3uT9ojl57UNps0hFg8ZpI16XEsbXokNr4Qhq5wzBkES1EKX+6W9RVME\nVH3B/CHuChkt3rWbcRgelTf4YuYK9chntV5loVZhgfa/IRES8bi6zKCWJKcnkSUZN/J5Y2+x+hZO\nLgCm3KmflCSvRYZlIZOVL/GouA5sMGakuGyOU41c3LBONax3XAfHgdEllvmksFYvMm5kWa0XCOoe\nE7EUK273rtuvrH7Cd2Yu8IXM9HvbnzOcbpwkH/m84IwQnyK47skOQf25zDV+feMTntcaVZykEqMS\nuszZm1yyxlBlQSQiYnKMu6XFJllWSWoWlbb285g+wtNS4VDydRgiaFVnP8yM88o9qKftBQm4YI7w\ntFlVXqnv19lJ7AQ1unn4P68tNVuQ/ctBdEnhemoEO7KZdzuJlQRctibYdG0mYik8QsqBR0oxKXeR\nObRj3Sux7pXIaSlmYud45Sx0aHnPmUMdlfNACBZqDtvNatECS6iSxBeV8/y287Cvz3LZnOFBuT9y\nuFmvkFRMKs3P8ay6jiop3E5eZitYYrbaP7FIKRZJJc69wjZjxgwC2PIqzeunQj8BGk+rK6RUk+nY\n4SSuHYGImK1ucy1+sbm4iFipr7USu45+f+Miuhof5yfP/xBT5p6l3I+OfQ8/v/g1Vus7vLTXeFRZ\n4VbyHC+dBYrN4S8BXDCHKfkBduCx6BTRUBk2sjw7pCvSLy7Fx3hePcq7WCIjDgY5hCKi4LmkVYtS\nDynTK2cDVVJ6VsjrUcCrZtX0VvwCr0Vnd0JXjmqxv10LvhxEPGt97t7b2ParrfvlXTFfy6NKcus7\nb7PuYSkmduQwrF7mbnGvkr5WL7f5mzdgyiYJNUZS1UnrMbb9Alt9SL68yOeKNYEX+dQil6Jf62mb\n+TYY0BKs1gukRYzQlHoSYgH89Oxv8XN3fpSx2LdfYtkZTp6PfB5wRohPEU7a90+TVf6jyR/gp+d+\njbFYljf2XmVlrse0uycChvUxgnrEsDqMhMaD0saxBsAOQxAdz/r6RnyKx9W3G/qTJbln1asbLllD\nVESF520V4ZRqMayn0dFYsks8KjUIQUI1WGgO2t1KTlLuw89ZEhID6gD3Syt8lL7Aq7bI5XJQpfEY\najzwB7UkG261gzQHQvC14A1pa09DfBi26v0vBDa8EkklxlVrgmfVFWS5oUO+V17lo9QFVpyDbfpu\nkIWMIcdYdBuV39Ue4Qv9oBw4OKF3LFLsiZBXtQLFJukbN7KYqk2hS+LYfmw1OyN/89xf7CDDAOXQ\n4Xe3n6FIEuetYd44mzyqrHIjcR6BTyBCYnKM9XqZLa9J+CP4OHWON07+WANQvSD3sjvZh3tKd2lG\nMbCZMDJkYnHKgY3bNsC6i6Rqdrit9ELJ73xYZtQYr/bJLfbDCd8u+Ur6lP21AWpRneuJMWabSZYb\nXolRI8O0PsrdnaO6XBJOFOB4VbY8mqnzgiuJMZADlg71KJb4ZKf9WleIyTGSmk5c0TEVFUtVkSVB\nSMCOXzlastWGXTnGA3WdRHB4gEsxcPgHc/8vP3Pjr6G/x8r1GU4nznyIz/CZ4n34/o3HBpixRtjx\nq0dOhOuSyqQxxre2NwCZFU7eh3TZKSFkDjgdSELigjmJEBE+Pioqpmww1yUNahdZNU5Oz7a8OhvT\n9hKREHhRSMG32ThGyzSmSSzZNdKqxYQxxHbdZtEpsOV0PsAmYxncI1r5pmwwbgwiIxMhqAUR626J\n+82K7etaCUuLYTet0da8HT5IXMIJBeXAZckpcska5ZXTWRG8FQxT0/2+CHHOiHcMUx2FSugyW9tk\nOjZCMSxRbXoy18KjvU6HtSwJOcW8vU1STpC0Yiy7OwcI13Hhi5Btr8awlmbTP5pcCwF+22Dgar2I\n5etcSkxTDEtUgipBj8FBV3iMGTn+7tyv8feu/AjjsT0Nndcc/IpJekeoxNMjKr9eFFE4ActASUgs\nOv3ZnX0UjvBv1e5dmPYOiyrJnDdHsBSdN+4mfhQypg0SVwxW3O2eFD6uGMzbnfsybWaZdQ4n0rrc\nH6E/gM9otmujXiGuxFre5Ov1InFpEu+tKrYSs9U8IPg4M80zu/sCWmF/dLKEGwW49YCtLpaDIJg2\nh0kY4gii3cBqvUBKMbnt5vi6tEhaTVEKen+XPSgv87Ovf48fGr7FRSuHprzlOTzD5w5nPsRn+EwR\ni5285U1KNfm+gRv8f/nD2+zDeho/0HhYOrm41G4o+g43UqMseXtET0VhypjiQfFghSmtmlyMjzDn\nLKFKMhktwaCWoh6GzNmbbNbXuBIf5cWRreSj8bKyQ1LNkHeqbLbCOA4+jVOaway9RlaLM64PUvbq\nHU4dKgo6Fs+a9mHXEuMH/GeLgU0Gi4vxUeadBWRJ4kk5TyXcq7xtebWOoUGAkuQyWy5wI3WO10fY\nXi24i6TUBOWgf0uyYT3JayfPsJ5kSNPJ++WO9ycVk0BEaJJCSk2QUuIUvDqvanma0248rjTOhQxc\nsIZJ6QZ5r0TeO55V1C4qoYsT+dyMT/O0uoTokdLVsNSa4lG5cxFlRx4Py5vNfdK5khimTpm8f1DP\nOqQneFRZ5n9f+hr/9cxXsZSG/MBpLgriqs72MY7nuy4IhrUMaSXFmlsiqemtRcphKEr9SkSi1hCV\nLqvcSU7zjUKDqFmKxbSZRZclXtqrrWswJmtk5Cx50UmIC75zqFuNjHSs67AdJ82HR40MA2qyeSUK\nnvWwndzxq3yQON9xT+rSQTnK8SBxt7jK7cw4c/bBxX7JO3rxuX97i06JuKdxNX1wKLIbRo0MpXrj\nMw3H4pSqh18vv7HxkN/YeMhXRz7gJ2d+4Mx94tsE74OPnHacEeJTBNM0T3ybiiTz5weu83s7Tw68\nNmZkSasJvAAeltf5tEoxeTfgonkBADcMWHKKPHS7f5GXAocHJYc7qSlm7VXWwxrrbudDd7+Twtui\nHoXUvaPbxetOhSF1iBWnyHqTOH+UHm2RgXPmSIsMAzyvrvJBcpIH+1wqioHNvZLNiJFDlWRWws5q\n7rZf41ZyrMNxYVtycaOAu8V1BvQkl0yLV85KV5rpEzBjDvCoiztGLyTUGFBi06uQ1eJcMscRKEzq\nFkXfYdPdrbhHbFBApojUIwE+Al7ZO+wWthRJZUhPkNMtNFmmEtqsuDt9keRAhDyqLnEjMcHz6vKB\nS1VD4bw1foAMH9wnwfNqY9H3YWqGAI+SF1EL65wzM4hIIqel+VbpFXO1de6kGhWS3Xb/aCzFdrV/\nGUi7XdlxcdGc4GUlz5JoXJP74797YUc6PvH0ogA72Kt82qHXOk5TsQF8yWVQS5Gv15mzD1aql9wi\nIMiqSQIiFCQ0ZHRVRaLhBhO9RWVVEhIqBpetSQp+mS2vfGwf7XEjS0ZN4EUhK06JxVqFxTYd+wfp\nya6kOCZpPK9uUWkbZJSAIS1B/p20yhJbzsGFjYzEgv1218vVRI7HpUVupSaZc5YPvaM0WaUg7V5T\n/Vd8f33jATk9wQ+O3DwL8fg2wPvgI6cdZ4T4FKFQKLyXqc6n1TWuJ6Z4WGlUfy5ao2SUNG+qJVyh\nUAochvQEO559IlrHo7DpVdj0jjf9verWuGSNsV4vtga/dvFpFyw0WWVln4n+/dIa11I5Ftwt5C63\n1YvaGu0a4XZs1HvrW9frDWJaaA4GzkQZVuTGsdvxbHY8G0OOcyOZY95dOjAQJY55PuU2clvxHaqB\nf2g8rKno1PtMzAqFYKNe6ZCxmEqMC2YWU1Hxhc+mV6R0SCXxaXWF64lxXrRJaTQUcvogT6vHC71Y\ndSrsBHbrmLmRTy3wuGANIUSJBWerRYj/zfZTAPL1Gt+Rukg1qJP3qkQI0qqJK1zW9slTErLRV0W3\nG84ZI8xVtzsGqlbrRa4nR3lpH94Nab9GjoNaD43vklvkfCzHw9JRLXmJQtu5SykG222L14RikNUS\nFIL+yOSYPoAfKXyjuKdfTyhxxow0cUUjEiG1yGHbK+OKvWt0WE8zqCXxI8GyU+BNrQz0vscella5\nk55iyyuSb9PjnjfHeVjuJMqChlvGuxHixn19OTnEcls89rCe4YVz/MXMuJHicXUJkHhcXudqYgxH\n2Gz0WIwJBOejLCtKpRXq0i9+YenrzNlb/A9X//Kx9/MMny+8Lz5ymnFGiE8RBgcHT3ybnxTf8FPP\nf42fuvRD/FDuIxJKnF9beYQblalHwX4711OLvFcl71UxZY2mVLiFt4lAfhfk9DSr9c4HokCi4gkm\njAFW3YMPoivxUR5Wjp9SlveqjBlpzpkWC84WL+WGftWUdcaMDG7ks1ovcK+0xofpKV46b/b2ScBa\njynyXlDaPJMvxkd4eoQU5YI51LJqexs4oc/zNis+CcEFa5i0plMMai1HhECEjeuVhiSlHVOxUV7U\nji+ZSWkmm20EaERPMx9s8drO80Fyhn++/JCPUheZNLP8xNT3MRHL8pdHPua/ePKLrLcNC+4O0Y0a\nGSLC1pDTkJGidoxJ7bgcY1QfIIgkZqvdpUvrTpVhPcWm1/u87l4jx8GkMci83Z3wSsCyezy7NGhE\nTLcvCKphnQF9EA2nQ+e9H0LA9fg0jyrrB4Z5q2G9FevdjoyaYsrMsOoUWLarLNM/YRVIPCitIgPX\nk5OUgjJZLX2ADO9izt5g3MgcS5/fDQmlc6gtqVi8TeJiQtXJtymnXlS3AMFMfARX2AeG7qJIsKbW\n0CXt2AtmgD/aeUUQhahvqwk/w+cC74OPnHacEeJThEqlcuLJMJZiECH4e3O/xYAaZ8ocJK3FqHRp\n2X0eIEnSgSKr/CmViIWAGWuY57XuZGXZLZPwDS7FB1sVXQBT1njTJQyjX6zVS1CHDxLnGHN1FLXE\nG6dAwdsBBDeT46x72zwsrfFx5gLFoIwsyZhSAj9SjmVFtUv0hDh8mE5G4npi/J3IcDcIJObt7sdK\nlTTiikHFjxCi0RkwZf2tyDDAorPNzcQEBd9mUIsz3xbcEIqIZbfIz8z9K/7+9R9mQE/wIxNfxg7r\nXI2P8VdGvsBH6fNse1X+uPCS39y8x3q9zJ3kRIuAJJTeelMhYMYcJy5bLLs7CCHI16vs1A93MCgE\nNoVAcCM5wZy92rWjMyYSrNN7kG/UyJBQGvrAbb9Cwa9h7PPd7diekW1KIo6HeJfPv+hsc8kaZjvY\n6eoxHZM0xmIj3D9C+rIfxcDG8nQKPSzl+kEEPKmsccUaOVJ6M6gn3pkQPyytcy6eZa3pbtKts9QP\nZmt5LseHMVWV2epa85qQmK9t81FmvIMQKyis2SGjrkWeGrm3GJLzRcgvLv8JNxJj/LmBmbfa5zOc\nfrwPPnLacUaITxE8790GcLrhvDVIQjGohnV2gho7lcaD0lQVxo3hrtWW04wriSGe1Ton6L3w7Uzw\nD8O4MUBGTeBHAjfysUOfba+GJhmtSmU3WIrO8+omA1qiZXE0Yw2/VXV4P5bcEmk3zauOCqDEk8om\nlqKR03P8Yb79fNo0ptonedqHdd10bLBF3K/ER3sSf4DriXEenzAZPgqBEJQCl1LgciU+ganKGJLG\nI3+1GUWtEVM0DFlFlWTUZkDDXI+EOE+ErLgFCr7NSlsFVJeUlj/rw/IK/9nDX+LvXvsq09YAlmLw\n3136aut3z5lDfJCaZlBPICERRIIgkpElWHG73FsCLpqTlP2AhVqFIT08VDLTHRJPK2vcSU3wtIv2\nNSG6k9uL5gg1XzBfKUAbYR7Wsswecq4buvLjYVhPEVdN4rJxgPjO2ZsMaHEmjEQrXl5FYcYaZ8Ot\ntXkOHw99L4wFXI6PoUgy8/bGgcHUfizGxAnMLYRCEJcTQOPa2673NwzZDbtR41fiwxSDSst2cLlW\nwYwGyOgGlqoRk2L88c4ilxkHOiVSx8H/tfwNFEnmp699lduJCeLauw4bnuG04X3wkdOOM0J8ivA+\nfP+0Hkb79ShsWUl9XjBjDfG0utShGU4oBi9PIBK3HTfi09wrrdJNd/ikvM6omeypgU5rZmMgDQtD\nVqlHAbqstv79LhgyLP603v2z2qHPgtOtrS1xt7jGh+lxnh9iYQcND1poaHIbqX3dceMzIMP7Mdtc\nyN1OTuCKADcI6NVuvp2c6GmPVgxsUqrZckDIahZJJcFcbW9wbMHZ4efe/D5//8YPd7x3wd7mRW2d\nQS2BHYQ8rqzysLzUqtletIawdItVL48QcNEcp+AFPCpvcjMxRkW2WXL7s1LrhrLvIkQjuEaTdBac\nAhKwbclkojjV0OWcmUNDY9Eu86jUvfJ+mI3YrcTBYdCjMKDFqQUed0uLjBoppFA6oKXe8WsUfYmP\n0zPUQp95O8/D8tEOCYfBUnpXuXeRVEyyWoqnTZnOiJHCCas47Tr5Pnj120gNuuG1vYMsSwzpaV6W\nCl3/uAwMGykKfu3ImOjZWp6byZEWId7yK0zFhpmtNq6zUb2hCf1WM+1vySm0ui3HRSgifmHh6/yt\n838BRZG5lBw+/kbOcGpx5kN8hs8U78P3b9OrNK2jpI7hqOuJcYSQ+SA1QSgEr+18z6Gaw2DJOhcT\nDX6Vu7YAACAASURBVK3Rdt1uthHfj4ShFtYbBL9Nf3jByvXU+r0NTFnnUbl3hSpCkFVTPQlxrOkE\nsFYvM2MNossy3ywsMWKk2I7K7zS0OFtb59/Xb/DP/OfHfKfEo/IWlxJDLDi9vaULfpWMajIeG+zp\nTGEpOktdiffpxaPKKrcSE5RDG0s2WpVEQcP9wFR0nNAjiAQvqltsiP0kVTS067v/EwJJkvhH81/j\nYaX3tfeqKcEYNYZwIp/H5TymrHHOzPC89u7Jdbqsk1IyvKh27m/aA5Ee5qGzyqN6b8Idl3XOWYMY\nisrzmk1Ep173sjXCg8oyx7mfJSCjxnnlNQjXer3MzeQYz7ssSCIEThTypPpuRHgXR8UeXzCH2ajb\nrfMCjYHWhpPL3nl0+vDdPilUA48PMxOISKXbQMegFkdVYMsrEVcMriVGmumTvc/Ja7vz/ky0LRR2\npVzfSY7fZZVy4JLVzUMHWQ/DnL3F33n1m7ihz8/f+TFGY99eQ1h/lnHmQ3yGzxTvw+bEUnS+I3Oe\nrGrxqLJCUolhqTppxSLv25R8m5yepODbxybEU2YGN/I6pvuHDIvJWJZFu8iOv6fn0ySF68lRwihC\nkWWqQb1Ds7kft5LjKJLEw/KepdhGvcKt5Biz9jKSBKqkdB1gexeMGFmK3uFVu0a7eoq1+k4jNroN\n7XR33t7mdmISgcR6vcK1xPA7V7MXokJHpGy/CIVgy6234ru7YbVeJKWaPDqEBF0wc595dbgduqxx\nKzGFE9VZcXZwe/oyK8xXjydNOGdmsVSNvFflpb1OyXdIayb/y/zXmKttHCozaMd6myTCFyGWYiAJ\nqaefci8YskpatfCiAIFg0SlRCw+22bdxcUMNv8c1cjU+giTBbHWTp00yejM5xryz1kGKG2l0x1vc\n3kpO8nBfXPiL6iZp9e1J10ngojXKq9p212PyuLLGzcQYs00P39f21tEdnROaW7AUnaeFGuesga6v\n52JWS9ZWC+s8rq5wIznK00pvm0w79PgoPYkvAjRJ435pj0DrsoYb1cm3kW/3HRcAu5Kfn1/4A/7O\nlb905lP8ZwRntmtn+Eyh60e3/I6Lom/zr/PPWtPaF81h5opbSDS0rUtOATcKUJG5lhhpeY/uR0qN\nMW0OEgmBEIIIQTWqseN3EsKCb1MOXD5MTuOEAW7kUw4ckkrswINyKpYlqcZ4ZW91PHzOmQMt0nUr\n2dmef1xZY9ocIq2ZWIrG/dLrEy1I69LRQyYDepwH5RUuxXMHCHF+X+W4PXW2Xx/Zw7AZ1pgyM7x+\niyG9Hd/hO9PnCETQSPeTIoQQbHqllt1UOXAYMdJdE/5GjBRPThMZlhTuFVfwmm3kSTOFFnoM6HHi\nqo5Mg4BqaNwvHa+LMKTH2fBK+PW9bsR/8/RfoEgKtbD+Vq4L0AjDeFbdwFIMzpuDLDqbne363c8m\nq0zFBjBlg2rosePZbPs1qs3r7YPUeM8qfkXyWLW7dzBuJye6vu9JZZ1pc4C4qrLobHEpMcKTyvEq\nt7eSE81uTecNGYiQEWOoOyE+QZfHag/CfT0+yePKes/ujC4plAKfa/Ep6lGdvFdhNJbm5b5hzWvW\nOXzh88pZPbZdWTdIwHRsmPvFDWarWwdcGQ1Z7Trj8bK2QVIxey5sAe6V2s/d3kbTmkk5qFOhcc01\ndPbBifD739+e5ReXBvjx6S+/+8bO8JnjffCR044zQnyKUCqVyGQyJ7rNc+YgPz753fzy6jewQ48B\nLc4X0nHqYYAhq8yGW0gSBETM1Ta5Eh9u6TN3IQGDWpKHpc4HpCErpJQko2aStfoOtbDORSvHjufx\nJzudg2+DyRRxRe+oQi81SYUETMQypNQYsiTxutY57b8fi04Bmm37lGoxqMepRwFJNcaSs9Ezmvcw\nSELivJWj7B+t8x030mx7NTbrlQP6u/V6mRkr17Kw6nzOvPvT/7xIsa4erzq8i8vWMH+4uYJAQpUk\nEobAiXxMWWUyPsiyu40uKQyqia6EeFBLsO4e39/2fWHSHGC20qjmJ5UYq02HjOI+YnQu1r36dhgm\nYmkeVzvdOUzFYNkpkveq5PQkWT3WSnqLKwbjepaAgNeHyFJ2YYceT6trfJyaZturEBJRDmzcyOdq\nfJyn1Q2eV/d3KvaupmrQu5vzRW2SX/IOymokYPUQt4jF5j2lSjIr9vEcFGQkVpzecimthzXifpnG\n20CIRmX6aXUJiQbBHdLTqJJMXDV5eIhjhARcig/ztLrWschJqREigl0XwoRi8qC0wYBmIcTxhuqu\nxccpBx5JVWv6kTe06gkpyf1iowBRjwJGjCRbbY4Q9chnPJZiwyujSyo5I8GQniQUEQ9Kb7cwNZXG\novwCSV5TIacn2OgjEr1f/OraPf7G1Jc67BvP8PnE++Ajpx1nhPgUYWho6MS3KUkSPzLxRb5n4DJ/\nVJjjmzsLfFLaI6u3UxM8blaMQgQrboERI9lBiG4lJ3hQOlgtqkch9chm27fRJBlTMXla7i43eFxZ\nI67oXLHGMBSFNbfIlldFkho0ccUt0q3e9ay6zkVriITaICPb+yrS5cCl3EqSKjFmpKmF5UNa512O\nkZAY0Yd4Xumv6rqrQS0HLlcSOeadTv9WPwqQkYgQHSl6x20lGrKKIsnYbYuIp/I2I/LxrxMJ2HJ8\nRJOwBEJwyRrhUXUZJwrYdF0+TF7gUXmDvOceaOkbsspc9bNzJBECpsxG4hgIIgGmogKN6y1nWNTc\n7hXCuHr8Cfj9Z+p2crLZem68uuVVO/SSw3qSZ9VNUmqMQS3Rt9WdF0XMtUk5zplDjXvtiEulGhyU\nSsxYQ+iSxr8uv+n6/mlzgIU+OguBiA4dtOuGq4kxnh5SUQ6F4Ko1jdTcMS+KqAU+q7U6V81JVEUi\n75XYOMRfeT8G1Dgj+gA7Xp1Pdjb40sA5KqHPXG2LN3aJyViGV13ikdtxOzVxoHMFEFdiXI5Ps+Xl\niSk6GhabIs+WV+W8lTk0mMOUNXJGipRiUgsDHpbXkZG4lR4BGosHOTJ56Xaei5iiQUezQMIOAn5i\n6nv4UnaGjGYyoMX5mw9/ue9jtB9qswP2pOlskdLMEyXEtbDOg/IyH6enT2ybZ/hs8D74yGnHGSE+\nRSiVSsTj8fey7SlzgK8oN/nFxW8CEFd0ho0Us9UNbiXGedzUAUuSxFhbyzytmizUjm4P+yLC7/KQ\nbketLQ4WYFBPMhlL44uARWcbu0ci2u4QzOX4MKXAOVQ/u1YvMWjoTdeB/mAoKktO/xWx9tZryfdQ\nkAnbKl1LbqHVmm5PGus30Q3gWnyMJ8UtIkI+zEzypDn0c16kWPGr9Eq964VhI8VCufMh/qpaamkl\nS36dTdehGnhUA48P0hM8abNqu2SNfGba4QuxHKGA+do2sPfw/iA10fr3mltBk5SO4w0NqY8p68eO\n212vV1qLmvPm4D5fWsEH6b2FJEC9uQArBy6TZmPKP67oSEiUA6d1xaiSgiJJmLJOWjMxZJ2kalBp\n3jsLToEP0pM8qiwf2sbO6UkSaoxQhIBEyXd42awof4kRNroMaPXjwrCLQT2B7fa3QBwzssQ4uOiQ\nhMTl+BhhJPG0tI3bQ5O71lp8C26kxvFwWHYb7gcpNUZSsTAVvXHsUAgFbLhVVu0Kq83UPhl406ze\n70KXVVRkgn1V6KxmMWkMoEoy98qLHa/pksIla5T7xXa5REArfxyoeApF3+GjgWnmnFWuWGOsuGV2\nPBtfRHhhRMkvAsXmvklcTQ7yvPkdezk+xoPiwRAUu8sMRzFwmLFyXIznWj8bMhIcI3ekA0rzorpA\nkg2cY0U394OEYjCovZ9n2KeNil8noerftpro98lHTivOCPEpgu+/3+nmrGbxV0buUAgcJow0//f6\nfQIR8b2Dl/nzA1dYcYvIyHyj8BpopJalFIsF7/24Cmx7Nba9RsVXAqbNQbK6xapb6EpeXtY2uZkc\nO1LbGJM0KsdIfHIjn1vpSR6W+vM/bdcPbtQrZHX9gJ7vUWWFUT2FKsncTkxSC32WahUM4gwbCeKq\njoKEQLDuHRzOUyW1KfyQuFdc41p6mHl7E0torLgbXIzneFXr37IrpcTYb0tW8Fy+Y2CMR9VGx+CV\nnW91B+ZrO2gorUSxHa930MNJYCo2QEqNIwGRiAhEhCbLuGHIix6V6famtRP53E6N8aRtwHMqlqXs\n1/lWcZHJWKZFcPvBer3CmJFClWVe1bZRULgSH+aNnSehGh1kGGBQTbDYtOl7XtnAkmNs+w2Sq0ka\npqLhRD5OFAGCKnW23DpzFMloZssrHOBBaZVriVHKYY2NLm4mt5Pdq5q7sHp8rUvHWEAllP4GaqaN\nHHOVEhuKxzmrEV0uBFxPTLJYK/GodJyugsTT8hYycDkxzmt7hy0/ZIujZToz8UHeuJsk1RgXzEEi\nGvfmZGyQBSff6nbcTkzytLLBfXcVENxMj/K86XucVk3issWDQ74H4orOZr0KSHwjv8l3ZKe4W1rs\n+fsA01aWV/becVC7nB9NUtj2ql3XuFteFTv0MGWNcuDyxzuvjzwevbDrO7x7jZwU2ZOA/+riX+AH\nh29+7uUSkRD8rfu/zR9vLzJsxPmrkze5lR7hw8wY2rdROt/75iOnEWeE+BThffv+yZLEf3Lhe7lb\nXERG4kpyhBlriP9n7SH/bPku560Btr0apqxxJzlJOXCZr719wtpxIGhUx3a9dC9YObb9cosk7GJ/\nBbAb4orB1jHv5Re1ZSZjQyz3kcjV7tFrKo2HVLfnyrpXJgJW7E4yWdlXSVclmVupaZ7Vlno4D0iU\n6z7DepJPmj7E0jH1yL2SyO4V1rmUGuSN0yDXCcVggwqVwOVifIAFN8+wnmzpc3f395I1giIp+FHI\nVr1GVjNRZMFL+y1lFULhQeloK7LbyYmWXCBfr6FJcss5YNUttyret5ITPCmvETYlK8tukauJ4b6d\nIaBhndeAxNX4GI8ra9xIjrLtdbaYVUlmoc3qKgJGYkkqtcZ+HtU9KfoOd1LjHVrX59VNZCRupyd5\n42y17oOjyDDAt+h+Do7zMD+K1AgBV61xXlVLRAjs0GOu4nM9NUE9DHlQfLtwDWgcv4ZPev8dld1K\n53RsgAfN46hKMpuiwo3kCM9r61y0hrnfob2VeFXZYdoaYNurEpctFo7QTo8YScpe+7neuw8VGmEw\n9X1yrTf2DpfiwyRVA18ErLsHF5eTZoYFt3t09v/86mv87Ot/w3976S/yLzef9PUd2PqEQmJAt0ip\nJgnVaLpT7PkQu29htdmOnJ7gJ6a/m2uJUYb0xIkMG37W+KP8Av82/waAVbfCz839CSnV4Le/98c/\n0/36tHHmQ3yGzxTv2/ev7LsUfJuPM9N8q7DAF7MXqIcB58wB/uPzX2bNLbNRr/BHO/NUwzqloGH8\nP2aksBSDcuAcq+38Lnhtb/NBaoxHbf6lcVmn3kcqXaytNXzFmqQa2qzWDyf2QtB3UEmsze/UUnT8\nLtZX7ZA4fJwuEBH3S6t8lJ7iid2oNvn7HqqrboXzVoYvRGl+T1nmtZNHRu57JKnXYyoUsO00BhIr\ngduVNGW1OBv1xnnPqBYaxoHK32a9hoTgdmacZ9XjSysSfeh806rJk8p6x6DlrdRYy/li26txJTFM\nUtX5pLjE7qdWJJmbyXFW7BIZzaR4SOhINwixN3D2tLLOB6lxHLfecoe4nhjnXrHzM+8OLx0GU9a4\nlBgmEoJq4LfZaTUQIXhQajganLdyDBoWn5QWjtzudzLM7+5T5Of0JC/LRW4lJikEVVbaFn4pNca4\nkUGTVCLRsFsr16OegQ1ZNUFSTvKw1EngIgRPyicTknPcJLi8Z3MzPokQAg2ZqdgAK/UiAVFroC8m\nHVwUulHAQrXIndQkd/tYkCX3pfZpkkJCtrBDr7HwIWIiliWp6byobjSPn9QKehnTs60UxHakjrj+\nvSjkn6/86YGB524QAu6kJhphPfYOec8m73VGWu/6EPfyU+8Hl+PD/Lu5GwA8rqxwwcxxMzVGJET/\nqYGnCC8ref7PhXv8ztrsgdf+valbGMq3F1068yE+w2eK963XKQcus5VNKr7LNwpv+M7sOVbdIteS\nI/yPL/4lr2vbrerDBWsIL4RFu8iSXWM36vXjzCSP+ogB7geTsTRDhsUucYkQzbZ2RDlwKQZ2SwN4\nMznGulvuayjIjwQKMpPmII8ra0zFskemMU2bQ8xV+9MRtwcAbHs1Bg2LUmB3/d2tegUJ5chkq0E9\nDsiMGWnW6t2HXN7YRc7Hxtg10Rg10h2V28Nw2DR/3rO5Ghtk1IjQMbiZGKcSuiw62yCBJFQum5P4\nok7Z91ntETUskHhc3CBnxg/Y8R2FRWfrQJW0HZOxDEN6klroMdsmoViyi2RUs+UsMVvdREVmIpZh\nxS0xYw1RC4IWYb2aHDg2IZYkuBzPNUi2BA/Kq4zGkowZGrqscL/YGZSQ0xIY0tGEeDyW7XALSCoG\niiQfcFaJEMzb223Do4djnc5rUUVBFTGKfoG7hXVAMG5mSakGBc9hw6mS7+KM8VF2khdO4143JI3z\n5jBCyDwrb7ImjnbSeBccd6hvo14lrsSYr+XRZZXZ2g4DmsWVRAZT1riVmORRl8FgaCwKn1X662zY\nwV7rSZNknlZXD2ijV9wSuPAdmfMUgipv7DyCxoJupYtvuozEa6d7dXhETzGkJ5u+1/3t4wepyWZ4\nR29s4JBUYxR9560t10xF458u/TG1sI4QMKLm+MGRa/zY5IdIkoymnF55gRCCX1t+wqJdZM0p87K6\nzapT7votLQE/du7DT3sXP3N8u+mH4YwQnyoo7/ELRAhBVjMZNOKA4D+c+i6+nn9FSjcZ1hMM6XFm\nK5uctwbRZYWn5TWmzNyBCN97xTVGzTj5YxKerpAjHh4SC3veHCQg4k6PSfBeeFbdQJNUXlUbVb0l\nt8DVxDCvnd4PlIRisTsEcxTy+/S0U7FBStUGCblojpBULLbqNmlNpxzWeF3rTVonYmmcIGTTrbHp\n2iiSxEfZqZ4VXbnNJ3nIiPdNiBuVoN6DeC/K2yRVjWq4u+AQjMcGGLcsCnWP184OMhJ30mNs1as9\ntbgRjYrycQlxLarztLbM+XgWXTJapHfGGqIeChbsAgt2mfNWtuN9iiQxomdxo40WMQmIMGSVW8nx\npjtKs1LM4bZj+6Egk9OT5PQUnxRXuJYcZba6QYRg3a2w7sLt1BgCqRHNbOWIKTrPyhuU/Q1SauxQ\nEru+b2FRCetcS+Y6CH878l6NkViSrSOqet6+xc/V+Dj3ip2+tKtOhdWWNrf7NTFbLjJuDZBQYyzY\nFR4UPz2XkdohtnK94EVBQ7LQvA52fJudos3t1GgrgKQbhvQ4W173BW07EorRGlyEhm553m1U9HcL\n2u3ksh6FvCgVGYtlGDZNNEmh4B1c8FmKTjU8uEgb0VPs1D2W7XU+So/zuLZ04He6oR/ZV52QnJ7o\n6czSD9q/k6/HJ7hf2OSfvP4THpfW+IcffPWtt3sS8KKQ39uc52l5E02S+XdGLjGgm9wvrnG3sMqj\n0jqzlf4WdddSw6S02NG/+GcM75OPnFacEeJThHK5TDabPfoX3wKSJBFXDdKaye+sPyGrW3x5YIak\najBkJPjywAxZLc6qW+ZxeY20bpHRdD5Ij7LmVpuDJA1KNWpkToYQH4I7qQnmm37E3Txxj8J+nZ2p\ndG9JCtGotJb83rKHmKRyMT7KtlcjiCI0NG4lJhDN9xfrPsNqipyR4W5xlVHDY63p1xuXde6kJnhS\nWTtQ+UurMfwQttoIdigEf7qzzofpCe4kJ1l2Cx3kUnIibmWneFzt7+G4iy2vwkw8x3yt98Nywsy0\nDbBJrLoVVt0KMnAnPc7jyhr3S6tMmRkMScFSYoREPK2sdhCB2BERuodh1wv2fHyAASXJt4qdQQ/B\nvlb6gJbkUXmdL2ancSKP1/YmrvBJKCb3Sqsd750wM6y2pRCOxzLEFZ2YrBNEAjf0CaIIXdHYcCsU\nfYfloIodREQIVtwSk+YACUVno17CEyGWbHDVGmPZKTHbRpb80ONivHPIbz9m4oMH/GTNI8JbLpg5\ncloKRZZYcPJdCfc0Ceaabhwz5jAPS28nY6iFHkllqC9t90mjm+PCUVh2i9xKjh6IXj+qO5PWzL4I\n8Ux8kHuFvW2nNINb6iQS8KpWIBSCrK6x3tSY7+pp19wqa24VU1HJahYFv/NvDegWdv0gMR3QUiw3\n0/N6OXR0Qzfv9v2YJsGj4HjJjfuRUS3GjEEcP+RBYW+x9ElxhbuFFT7OThzy7nfHqlPmlxfvA/DD\nEzcpeC6hiMh7Nv/41TdZdfY+3z99c/et/852vcZcdZtLicF33ufPE94nHzmtOCPEpwi5XO7oX3pH\nZDSTm6kxZuJDTJgZnGYl5qtjtxk1Uvxx4Q2rbokRI4kTBTyqrCEEXEoMUfa91oT1SaAeRFyNj/Ci\ny6BTEEWtQaKTcDgo+94B2URCiZFS0ry2t9mVhHTDxfjIkUb4N5Ij3G225bOahYLMsluiFnncK64y\nbMQZj6UwFY2KX6ceBWzUa+x0eShNxtJtnrcwEx8irRoEIqIQCmShkFGtYw+wxI5Y8Zs9NHIRcL+0\nxq1UI8lwySlyJzXOvULjYf1hepKn1RWEJLBkDSkyuBKbQpIkItHwYk6oBkXfwVQVFAkCAgp+jbxX\n6VptXnZ3sJWI/dea2vZ/CXjVJKFuGHKvuIkqyYybudaCpB0p1USRBnAij/Hm4kXs235C0am2kbGc\nnmDcTDEaSyIjN2J+k6NsuA0iWosFPKl0J5yPymucs7KtAJr9eFhaabqm7JGsw8jM7eQEX9/e0xBb\nisZMfOhABPpDthtOD/Fx3tTKfRGkXjjBILlj4bjR5Lt4XGksJtvvH/WI9Mn5Wp4P0xM8q2weGtdc\nqHcumjfrtY5hSoCk2rCz3KyXO+QVAE4YcDExeIAQGz0WkEttA37yMZwbspp1pCzoITvkPZesfrxI\nbSEaaaey0Hla3mS9dnB4sh4F/KO5P+AXvvDX34srgx+F/OryI/7Xl19vfXf8yvJDPkyPc7dwvHTF\nfrBZrzGgf/vFGH8afOS04YwQnyLs7OxgWdZ7/RuDepzvz11p/T/Z1gr6roFzDU2ZEFiqwe/l57iT\nnGDDKzNv58loJjFZpei5x7XB7Yotr8aWV2PSyhxoZT+rrnEnNYEQ9IyoPQ7m7Twfpqd5Vtlzchg3\nBnl0xBDQ1fgYQkgM6hbbzSqSLivISB1VG635UBszUiQUk8VqmRvJMdbcIgXfYbNeY7NeY8YaZN4+\n3C4trZkst2kN59vs1b6ijPP79gZeFLJj57mZnuJ5bYUhPcGgmuZNrchYLImQG97Ou6l9o0aKuerh\n9nlHzTE9Lm+0SHEQ7f3y/dIalmKgSwoigm8VDmrMp2IDvOkywT9mZkkYYVfdtKKEfCG7O+ksoUka\nT0tb3ElO8LCywrXECI+ag127MoJARCzaRaYTnfq3nJbgda3QcvgYVDlAhqFhq7VLiCUapHN3MSTR\n0BK/adOaz1a2ep5TAWS0OMtOsat7iCTBkrPTMejX6xSYitYkeXv7bIc+iIOE47vUMR4qNR4ey/Ks\nOz6L0aijhlCPwv3SCh+kxltuE24YMqxlSKg6pqIhSY1F9opbbCyQpUb7fzKWYckpHfjbSdVgzMjw\nrNyp892uH1xEr7kVJOC8NUTJO9h1elxa50Z6uEMW063Kb8oaBW+PqB5n8TugxdHiCqL5PlmSiYTA\nFwF+FOKJgMt1iz/EJacn+yPEohGBve7YPC0dbcP5sprnbz/5Hf6nW3/pWAN2bhjwW2vP+OLANJNW\n+sDrX8+/4R/O/gErzrtVt48L9XNuJfc2+DT4yGnDGSE+RTjuZPX7wA8MX+E7s9Ns1qss22X+MP+G\nC/Esac1ktrrJtfgoTyubXE+OEVOU5td0w083FAJFkrAjl1e1fN/DGiX/YLtSwLF0w/3gfmmFW8kJ\nXtQaoQfz9jrXkoOYcozH5fWWfVc7il6dZadEQjX4MD2BJik8K2/iRj5fyp6nFniEQjBf2eHj1Dm+\nWVhiya4yFkvyoryFIat8kJrgUXm1NRyVUg3KXWy4riRyxCTtUF3woBbHcxok141C7hbWGiERpXUW\nm8NUu7rvmKwxZQ6R1g2elfN40eFVt348SR+XN/hCZpI/LXRKGezQbxA0YMjYWzzsotvnBVhzatyJ\nDdEeuCEjc8WawIt8HrcNcF6Lj1H0Xe4WV7kUH+JFW7LgqlsmocRaZHZYT7LWnOZPqzEk5A67u6eV\nza5DfFndYqMZ7vBRepItr0pOT+CEHrIkYcgqlTZXETvykYTMndQE216VTbeCT8SgHmfGGuJucYWL\n8RG2/BLlLsSjGtb5OD3NtmdT9OyeFUpT1qhy8LX91mQ341OUSx7z4mTsEo+SG7wPDGgW212+E/qF\nJMGzyjqjRpL1eoV5O89ULMtstbOSPqQnCfBanShVklufdkRPklISZHSDe8UVntU7ybAmyR0x9O0Q\nwGu7wOV4txa7RN51OuwCt+pVFLkz3CejxSm3acVVuX9S6fiCh4XDSesNLct0bASzn+FPPUsYqtwr\nHE968wf51/z3T36Hv33tK8TVw0NhqoHH49IaP/3sd9lqLjQmzTSBiPjPL32ZfL3GH+bfNL93Pn3U\nAu/bTkd8GvjIp40zQnyKcBpaFKokk9UtsrrF1cT/z957xUiy5tl9v/CRkd5WVlVX29veVXffsRQw\nXC53uFoQJLGQWQmS+LAUJGAhiS+EFpAAARQgrQAK0IMIvQiEDGQoSAJIrShyiBWHInfunbm3vfe+\nqrLS24gMq4fIysqszCzTXT3Tfeeel3u7MjMyzJcR5/t/539OgX9UesSdVonziSInonNDn86durKP\nRvMkFY0nvbUd9W+fGUUed9fo+e/nibkb3GmvciFxgAfdN7h4w0a7gpad2gG+QTg6bp/7zTKHtG7e\nuwAAIABJREFUoukhITJdZ8zE3xkhJ6tWm4vJeW41V7neWOVEPMuTgSb6yBbtaERUOGJkB0vnAsvJ\nBeYHQRJe4OPjIw5qROuitzVfAwEBbwpxsXyXtmvzuLM7crRb8rNiNtmudhiTtTFCLAkiNbs38zO3\n6mUOJAwaTg8ZiayU41qtxLFohnk1TVTUUQSVru0OZC8CT6b4Y8cVbUiIr9fXWE4v8sasowoKK1us\nrrzA52ZzlcupA7i+j4ePhDiUjQjA826N2palZ0efnFREZY0bA7mMJIhcSS1xtfGaivWGnBrlQbtM\nVjVY0jO83pL+llfjPGk3qNhdLibnedmtcSwyhyErBPg0nB5vrEYY6zslbCarxNAlkbLdZlHLcr2x\nSprdJ9Jth6xqoAsqOTVGud95ZzeCvSKuaO9FiAEcfDKqwVq/je17PO1VOBUv0HWdYSpleM6LBPh4\nwMPBPU0MBPquwL3eOhnVCBMmtxz7QiQ5IZcYRVY1Zv5E1vtdLqfnhxN+n4AlPTU2NsIgnU1C7O9B\nQrKb6/SlU6Xu2FyR57d933FjnkfNxrZSku3w0/JTnnQq/Kdnf5tT8cLE65bn8MerD/ivHv2ziYLE\nGzO8H//Hd/7Rrr7rQ/E3VZSo2xbzkcTOb/4G4WPgI79s7AshFgTh7wB/EVgPguDc4G8Z4O8Ch4EX\nwL8SBMGHiTz7hqBUKn1Uvn8/yh/ln1Wfc73xlkftMgU9NrMqshUbgR5Z1WA+ovF8iq1TEMDZ+CJf\nVdc4lyzwyPzlzP7fWi1UQcYOXGQkjmgH6W3xEo6IKkf1Ih3HYS4Rx/Y9HrTLPO5UMCSVnmdzt10i\nIsqYg4fFVi2sO1KRVUd0guvWuJezLIpDMjyvxXnVa05UWDfwW2KRy6kDNB0LP/CxfHdbvWVOjbJm\n7c47ujVliXcadqo0N7eQyN0s9x7SCuRlh47t8XQwdp52axyIJKi7JlUnlCQciaZnEpFRZwIvgKu1\nNa6k58f0pFvRcmwej1QOLyTnADgZK3C/vVkVnNfjzGkJqv0eB/TkmKRl9Lp7gU/DsfACCO3NEpTt\nDlW7R9MROZc8gBd4uIGHJqrca5WHZMP2PRpun0Z7a3CLTM8OuJhY5HmvQsvtIyNxKjbPl5WNiVVA\nTAiP/3Mxyz/2311LmZB1DkbS3GyssW6GzZtJJcpBI4kowIPOKv7UAJn9QWQPEdPb4V67NKwSAzzs\nrCMAy8lFXpsNDkSS3G1NHsvx2Bx3BlKcmt1jIRJnbYsmPaVEeMnkOFyMJAk8gddma1sSe7e5jiBs\nSkMsz2NBS9Jy+hzU5njRbnE2eoCm1+W1WcfcU7Fg52vzHSnDT7zpq2IbOBaZ416j9l4adAiJ7b9z\n7X/nX1+6TFGPU7dNnnaqnIjn+fsr93i1QxjKbrHVtWW/8HsHL9J0LP7GjX/Af3HxX/wkPZbfBR8b\nH/llYL8qxP8d8F8D/8PI3/4Q+JMgCP5IEIQ/HPz7P9yn7/tGIhaL/ap3YQwLkST/9pHv8Tdu/TFd\nz6br2eTU6ITt2Hao2j3qtsmV9CF6fh9FkBAQ8IOwinpjkGhleXvzHX0XSIRauqrdZTm+hO2JPG03\n+apTQhJEziWXUEQBy/N52KrwdW8NVZQQBA93sJzpBQFHoxnutNZIKjptZ/qDShEkHg0qTnNajGrf\nIi5ptL0+Xbc/tmTadvscjKSo2ia2H4yRYRFhGPXc910MOcpPak/HqkB5JU5CMjgSTfOou44kiHTd\nPgHb+w9vxbNelUupBTqujRN4eIE/rNKMYrvngSKINJxxTaQTeMiCNOEQAXA6nqfr9flZZWWgd9zc\n+IVBhR3C5ray3UEVlKme0gciSV52x0mLKoioKBwzsrwyG2iihCrK9Dwby3fJqgZpOYIqSEPf242E\nNl1UKKgxynYPCYEVs8OK2Rm+53upw7TcsDlyNNBFFkRejFSvn/dqiISNiW7gc6uxRkRWh2l7o9iQ\nnGyFGwSs213W7S6KKHIuNk/NtrmxxUqtZTskZJ033rtXV0/FCrzpdrjZKDFa4mw6Freb4XVdiqTx\nBJvyPof0iAicihVp9Fw+0+fRBk2g4dwiQBDC8GlRAF/wh+e+ancnEi0FQiuw69V18nqSYiSKLokg\nhN/Tcy1ut7sTVVxDUqltaZ7b2vSWViI8mNF7kFNiXBtYvEUkZeiPvRVZJUZOi3K3E8q3Sv02admg\nYYqsDxrVNsI0cloCDYOj+hzPzNKOwu7d/ObfBOG2nRmT25Rs8LT1fg2Zo7B9jy+rr3jYrgy3+ZPS\n433Z9gYSis6qub/uR//q0nn+veM/AOAHuYP7uu2PHR8bH/llYF8IcRAE/58gCIe3/PkvA3928P//\nPfBTviXEnxyWkwv8nz/4q/ytR/+Ut2aTcr9LQYsNbdh2A58Ay3O505puPg8fXqt4KnKAO40a59M5\n7nVf8bZjj8W0eoE/IAHjsH2Pgq6PLeGGnrMFmo5FTNKwfJc5NTbUvkFIAs8nitxprRGVNJ72qmRU\ngwuJPK7vU+p3yGkRHnZKKIJEUooT0QwcHHJqFE2SsT2Px53KkIgBJESBg0aajBoJ07F8HzcIqDsW\n9cYq55MF7rTWOB7L8bRb4VG7TFrWqe8q1EHY4lcbXv+bW3S2wjZPZCfwyGuTkyZFkHC3pO9dSBa5\n3dr8PlkQOZ+YZ7XfoqDFuD0iKzkWzdD1+jzslDkbL6KKEpbv0nBMCloM3/cZXWJWBJFFLcM/L78B\nAuajBuv9LuCynJyn59m86NVoqzayKHM6VkQgoNa3uJRY4lG7THuwGuITIAkiUUml5Vos6Am+rL0e\nVobPJ+aG33vISA9TySAkkmfic9wfOFGciOW435n+O+jtwnvX8X1utkrExcmu941u+KNGBl9Qqdm9\nMUu/nXAxsci1+rhV3TS8NpsYksLxWGHPUd2yIJJXY3S8Pm23T0RUOBBJkZKjPGjUuVbevuF0OgIO\nRXPkIzqIPgICddPherUMCJQtk/KY327A5Xxhwpv4UCSD5TIxCdyq0z5opAb+1pOoOV1UUcT2fdJy\njBWrNTF5UwSJvgtXOyUOR/PkdA0n8LDcgFV/8vgr/R6Vfnj/icsJjsRSCKLLo97K1Mmp7e8xt34K\nikp2qoPEu+JkrMCjETK835ARsL3933ZW+/VqKvt1x4fUEM8FQbAKEATBqiAIkwIiYH19nd///d9H\nlmU8z+N3f/d3+YM/+APW1taIRqNIkkSr1SKfz1Or1QiCgHw+T6lUGs5gOp0Oc3NzlMtlBEEgk8lQ\nLpdJJBJ4nke326VYLLK2toaiKCSTSSqVCslkEtu2MU1z+LqqqsTjcarVKul0GtM0sSxr+Lqu60Qi\nEer1Otlslna7jW3bw9cjkQiqqtJsNsnlcjSbTRzHGb6+3TG9fbu5tPuxHdN/sPBdnqy/5b+1bzHv\na4hSnC+8Mt8Tc6wFJn18DglRbvh1TotJZASu+3U+FzO8CXoUHJkfi0W+8mtcEtN4BNzzm1wS07wI\nuhz1o5wIFvkF63yHAj1cntPiLBme0yKOSg6drwavt7F5S5dTpHlMkxw6abTh63X6VLA4TpL71Em2\nRX5DzNH1JH5HOMxzy0QWo3wmxrjlNTkmxogKEl+4VX4gZ1n1Lfr4HBYNWorAWTeGLITHdMzUeOg0\nySJyRslSiqeJdF1sfBz6w2M65OnMi0UeO11+LBbpui5PGzUuiCl6AWi2y78ROcV1v0W+7dMKXCLR\nKGrP4ZHfJC/o/FmhwJdU+L6Uox7YXNKyvOi3uWc2OCAYJASNGzT5K+oSL902eU/nqLxEWxSZEwQO\nayl+apf4i5GDXDdL2ML21wnggGDwtV/jiphB6YmsoLEsZngZdFCROCtkuaE3WbIVerg89TucF1M8\nDTokUDgjZvi/ecn3xBytwAFdIWYJPBJa5AWdtKDyVDJZ7IImZCjT54QQx4rI2C2Ls0KUO06bf0k7\nwku3Tc5IYDd7LEfyCKZNtCvwpb/O98UcciAyL2sUPJVVmpwRE0gItHWFlOmjSXEORVME/T5f4XBZ\nTBG1ZK45TX5DKCD6OqLX52BX5J84a3xfytGzbIqywV9RD1GSbFRfwLFsqrrAaS/KumfiCTZnxCSP\n/BZ5S+C3pQV+5q3zQz9DSggo0+ekEOeu3+SwrXJALLKieXzup9EFlxYOx4QYt/xGOPaQ+bld4bfF\ned4GvXDsCVGu+3XOiEmkwXX6zuA66ahkpRRfeTUuSylcAu75LS55SaK9AMl3uSAkeSFrfF/O8rzf\n4FnQ5ryY5mnQJoFCXtD5uV/he2KOhGbws8YqP5bmw2MaXKcvvc2xVw4sTogJ7vlNDgQGma6Gq6Y5\n5uqUA4s2DkeIs6o4nBLTRFG4JdQ56cVoSR5d30Xv+3zVrXFeTBMTVb7or3PAVRF1gYIjc0Up8Au3\nzmU5hRsE3PNaXJZTvPB7qIgsiDo/c2v8UM7QDTyeeB0uykmemF18q09B1IavF+QMr/we56QED7wO\nBVElI6j8zK1RaEjoFIlGIywFKnf8JkrXJyEotOjyfSlHObAwhYBjjkGAzTExRk6K8NPmGr8lFqff\n9/oCuZhGtifyum3yO7GjuKbJ10GVZSG87/mRCGrXISkKaGZAtg+dmM686VCQcjz1O1yQkjzxOyRR\nyIva8L7UChxeN1uclRKktCPg94gH8th9z3Pgx1IxvE6CQUJQhtexHFi0ApcfSQVqgc05L8ZRf5Gv\nhXU+DwqUhB6KpJBsCeTRdrxHXBLTuATc95ssi2leBl00RIpChJ/7FX4g5knqBv+8s8afEws89Tsk\nBJm8oA/3qRU4vAl6m7+nncbe1mPyLTJGAtG0sQSdz8QYxox7+TWvwVkpgYzAVa/Od6UMb/xwsnRA\njPALr8YVKTymu16LdNOhXq9/Ujxiv7hRqVSi0+l8o47JtrcvOgj71Uk4qBD/8YiGuBEEQWrk9XoQ\nBBMuz1988UVw6tSpfdmHTx2WZaHrH3cna9Mx+V9f3+DvrdydSLHbDqfjBVRRHvP6TMo6R6IZ3vRa\nlPtdclqEvKHwxqohIJBWDOKyjioq1Jz2OwV0QFjRVb0ETafPqUSOl/ZbZDdOew9pWCfiORQxtBM6\nFs3yYER3WtCMqZW4Q0aKV70GAWFYxWhzoSEpfBbN8bzdoDESCnImkePBjAoiwKJkIGjKRBXrUmph\nGE8McDyWpefYvB3RPp5LznGvvduqT8Cl1AI3tvgvJ2QdMQgtoS4ki5i+TcXuDr1Vs6pBUYsPYlsD\nCATut8pDnTXAUSNDx7PGztml5OLQx3kD83qchm0SkRQORdN4gTcMXZAEkZOxPCICt1slkoqO6TrY\ngccxI8ejVg0IuJgu8qQbns/TiQIvOjXSmsGK2aIfOFxKLHKtucJhI82LLdrkc4MK//Df0QXajs1L\ne1IPX9RCv2JVlPh5/dXE6wf01NBX9lyyyMPO+lTt91Ejw7Pe9k2QmiBhbVMNS6NSZ3xsn0/OzUxr\nOxsvcmuLRGK3OBnPYUgqQQAd1+FNrz3Ucn8Wy0ztHZiGM/E5btc/bBz0NFzOzHGzPdtj/Hxibswn\n+rNobtgcOwsHIkledlpsnM9LqSKW71BxOixoKR40qxONxguRxNAVZS84m8jzzH4zHowjKNTN7a/l\nxhi5kpnjvjke8nMmusS12uz7RFRSKWoJ/CB0zZkloTpmZGkOves/HD6U/zDA3778l/hudumDbPtj\nx6fAR94F165du/qbv/mbn0977UNWiEuCIMwPqsPzwC8v9/MTRblcZmnp4/7xJZUIv7e0TERS+G+e\nfbGrz5xLFLnfKuP4PglZ43yqiO173G+tD8MdACp9k0rfJAzZhZbZB0KyKALnsgUed/c+jAQY+uY+\naFU4lVjkmb23/s6NmE9dlNHF8aaftBqZSog3vDIF4GJiAct38YKApt3nda/J9f6kRKM8xdt0FKeI\n8YVV51Q8z4ORpq+tjXqPO1XS8viyuuPvXqd9PjE/QYZFRNJynKcD14pRecWSkWZOj7Jqtbjdmn2N\nFEGk5nQQBZGjRhZDUolKCl/WJ5P3ClqMVauN6bvUGuHk63JqgSAQeNyqY/v+sCGu6Vgci2Z52q0S\nG6QSXsluHsPF5DzXGyvICCxEkhw0UiRljRe9BgUtiiFN2k+NLu+ejOW5XimR16MT7wNY63dY64d2\ne1uRlPUBGQ6Zw51mieX0/NSwl+QMa6cggKNGloio8bLb4Ew8OXNyc1lK8Sfe+DW43SxxLlmk5/fH\nmhKPGlnuNcu8CxkG0AWVr6vT96Nm737CrL5HuuFOOBHPEpXVob+xQHg+fYKhTnkWvC16XFnc3o92\nQU9gOuOBMkEgcK9Z5bNYhhszrMtWzBZ5zRjqhneLu60y38se4om1uqfGu40xUnI2x0IQwKnIEh0r\nYEnfEigTwIlYASEQedAu87Af3gMOGRkyWhgaVLY7Q6nU6XiB+83KzIj3/YIQCDzfJn3zfXEq8evn\ntLCBT4GP7Dc+JCH++8BfBf5o8N+/9wG/6xuB3fjAfhQYPCPisjbm7boBRRA5HM0QlVRKVndQfQrR\ncvuYrjdWeZvE5HnwgbedPpokT7UAmteSxOUIfuDztLc+dhs+HMlzb6T68qD17pUoy3e53ljlUDTF\nq4F9U0qOICJMukwEPlk1Qs02Wel1pgZTbEVS1be1nHIJ6PkOj9plLiSL3BrYvk0bO1nVGKviv+41\npzakTcNo9HVeiVHU0piOx/12aernX/eaeEEwsFebjVPxPA9aZZzAp9YPdc0RSUFCwAsCRCH875l4\nASmQhudVROBELM9qt8cbM6x6LzBOTjeoSsvpAwGqKHEpuRC+JghcTi5QtXvcHTREHYtmqfZ7HDLS\nJOXIxLnZCMs4GEnxstkl1KP2OJvN8WhGlbCoxye63RcjSRpbHDz8LStzEUkhrUSQBJGcEkURJQxJ\nRRcVBERed5s8bm2On1nNnBCOkWm401wHAg4ZGbJaBAh40q5PbXbcLbZzHGnYFqIoTA0l2Yqy+X42\na7NwOT2/bfXwSnZu5muaKPO4Pb5aMwxoCAbkejBedFHmsJHlRadBd6Q5UkbgUTvUBbs7uLMsRpJ7\nJsQAdduhaQospw9yt/sKG4+dHu0uAceiGVbd8P6RlqPEghRXq5sTqVPxORRRxPJcVq0295qTY37N\navPGbOATNisuRFIU9Ri3mqsfnAxDuOpzZx8CaKYhIWvEZe2DbPtTwCfDR/YR+2W79r8QNtDlBEF4\nA/wnhET4fxME4feBV8C/vB/f9U1GJpP5Ve/CriCLAv/Woc/JqlH+6OH/O7b0ey5R5FW3SdnsoUY0\n5rUkPddlIRLnbqvEop4Y68LfCkUQOWSkiUgKsigOvSVvNleo9k2+m5vndmezmigAR7VFbtaqbFST\nrxSKPBxpCHlXD83tUNSStB2Lg0aWL8or5LUYS7GwOugHwbCbXUZmUfUGJG1n+D5cSMzjExAE0PVs\nanZ3GGxxz28NvgNedRoc1jNIosDLXp3vppewvYEjcQCKKLKcWuBBax3Ld+l5DnN66NawE+631vk8\neYg1s8eLToO3nfB8nkzkeDyDDK6YLXKqwelokkq/w4o1LZZZmLB66nsu38kscbdZwg2C0A5rYHt1\nNJphPhLjfrPC3cbm9yZlHd8Pl/tNz0YRRR4OqsUrZpsT8Sy/qI1XnWOySmdEJrNmtTidmONRu8Kz\nbp1L6UWuN94iCGFISr8fINh9nlptxiZp/vTb5pn4HKbjEpO1MReJaY+VW41VTsbzGLKC6fo8aJZp\nW11etUdXCGavFtiex4lonpZrDW3FNrAxRqZD4GWvwctegwU9MTMwZTcIAni5TXXOJ2A5ucCN5ttt\nJ2FpJcKr3vbe1u+Cg0Zqx6V0EZEjRppXvcaEl/eZRH6iii8hoXgRbN9DFkRyukHPdahZJpbCGBkG\nOBTN8GQQL27OcBHZwLs2FrccCy8IQpvBzCHu9V6iitJEM+Ao7vktDmppVk04qR/gfqPBa2/8d/1g\ny2QgpejEZJWuZ3MkmuZafZXTicKwwdAn4I3ZQhXlbe3c9gtBwEQ89n6j6znEdggV+abiU+Ej+4n9\ncpn412a89Jv7sf1fF5TL5U/C9y86WNb9C3MnWbGa/LT8jJ5rs6AncbyApBTlWbdOVnFZc9vUbJOi\nHmNOi1Gze2N60lHEZBUxkHjUniTMR2Kh/+yNWpmFeJxSP4xIPRlZ4uvKlhQpxpe/V/p1TsYXedje\nH43i2USBL6uvyCoGZatHAKz3e6z3Z1d3rqTnB4l/OqbnzNyXZ91JKYcqSnwWzfKkW+WSmOYnXkhO\nD0czY7IFy/XGrLiKepRSv8ul1KZ0IKVEdiTEQQAX4ksjHreb0MTtk60qdm9Y5dJFmc/iWepObxiM\ncbu1xpwWw/QcFFHikJHmVa/Jl9WQvF5IFrnZ2JzMKKLI7eYaiwNbug0cjCa4O3BuWE4VubnhVhGE\n9mVtx+ZoNIMzIC5JJULHtalhktMMJEEkoWh8OUKar9dX+EHmEC/bbe5WRq/DOFG7Wy/zeWHTfUMS\nRM4nilyvrRAgcCW9SMvpY3sefc/j6ZTxDAIPWhUW9TSve7OTCadBFSUMWeV+M9zuQSNDTo/w2qxT\nc3pjY+RD4qCR4kVne93rtfoqJ+MFNEnkcWcdewpRKmgxKub+h/LktMiOHrfrVo8VJzyPcVklroQR\n5KbnTpW0tO3NREY38HnT2zx+TZyUX8RHyFR3B/JW7e9eYjKK0dWGq7VVzqXneOuZ2xLiS2KaFgpH\nlaWxqvB2OBxND8nv9cYqV9IL3GpMTjg2wm0+NE7HC9zbxrnofaCLMn9r+Xd+bckwfDp8ZD/xbVLd\nR4RE4tNKwpFFkR9mDvN3X96l6Vjk5CTXB2TmcjrUbG5Uhtb7HQ4aKUpbGixUUWJRT7BqtZEFEVWY\nPiTdwc3d9n1iJMhHU6x2rQkyDHCtUuVAMs76IPpUEECU9ueBq4nS8CFYdXpEPJtjscxQVzsLAQyb\nts4kphquzITte8Owgpf+ZtVwVON6LJrl3hbt7kIkSanfHas81Xaw4VrQkuiCPrOp5mm7NlUeMg2W\n73KnWUIRxFDf2wsrZSW7w+lokTvNdZb0Td30qXieW43x7zUkhbZr86C9jibK9Afj4EWnwSEjxcte\ng+aI77EhKbQ9j1WrAyNOc5fTxnDpeoOwn4jlJvb5Qb1OeebEJuBiNo8kiNyslCnEY8iCiBiIXKut\nskGcPR8eNjfHw8VMfqwxC8KVkJPxcfK/G0RllaIW58kIyX7Va/Kq1wxlJfE5BFFD60n0gw/r7Z1R\no7xg50awjclfStE5aBhjTWkpJUK9/2ESKr1dSEFedptcyYUR3hte67NwOj7HrWqFWZVsdYq+eHQP\nOp5NVFJnfsfbgZ1db4+2aTFFG+theNhobluhNSQFPWrwDyvP9/Q9oz0IWdWYaILdgLKDzno/oArS\nrlfd3gXHYhkupRc+2PY/BXxqfGQ/8C0h/ojg/RLCKfYbadVgMZKg69oTCWUHIglSA12kjz/RMKaL\nMot6ikftMLxA8KHpm8QkdRjBC3A6nuNhd5P4ioHCl+uziYTt+6TEDOsjvrRrdoNNlWmo2TwaSw01\ngX3f43F751Smoh7nxcgysem7mN72N2ZVkOi5DsdjWWKyxoN3qGpseP+qgjh8ym6ESByLZlk1WxMV\noXvNdc7G51BRWE4sEhDge7CgZnjVr9IcCQ04pGeIShFu19fxt1mq73oOp5JZHnV2X213Ap+abY4F\nYGyQlfutCsvJBfq+Q8nqTNDsSr/HiViOqKxytbZZjWp7NlbP5TvpRb5qbHbZJxSd9hbSLxBMJI0B\nEy4pB40UzxptRAHOpwqs9Dpj5PhwLMWdgf54ObOAJklcb6xMnPeyNU6o++7IUQVwNlFk3ertmQzH\nZJWMbMycfPkEPGhXUKUEKTVOx+9OLOGP4n09YTvb6JinoeFYuL7PEaWIj4/nBwiBgBV8GGKz20Sx\nW9Uy5zLz3GnPllecjs/xsLHZGDkVU16qb2ksdLaZpATA4Vh6YmK7E2Jbkv22I8MiAotqllZv71KD\nu611LqXCqGdBECbSNEUEYqK6J/ehd0EQwPF4ntvN6Q2K74uj0Qx/89xvfZBtf0r4FPnI++JbQvwR\nodvtkstNVq0+ZixEEpxK5Hnda1IaIR0b2r3XI6R0KZJkSc9QH0gobM8byiN8wgpKWo3QtM2xh4su\nahyPzCEKArIocqO2tqPc8Fq1zOeFeR50w/1IK1HqhDfqxUgCT+rw3B6Pii7GokRJDyuJ0/C61+RM\nIj+2VLfTUueJRI47zRKnE/lB8ME4JEHks2gG03cGWspJlAaNWvNChNuE77nTWuO76QN8VXs7tWKb\nUiO8breoT6mkRCSFE/EF4qrCmtnlSasBu6j2AdSsPsuJRepujxfd+q6a9Gq2yaIRH0on9MGyas9z\nhmPlfHIOQ1J5PWIpt/H/Z+KTzU+O7/Oi2xz7/qwS4+0WQr8QSQy/N6yi5ohICgTha2tWKwy1UAye\n0eZieo6bzTCl8GK6wM16SFBWem0iqoLpOdxornAxOT9Bhg9F0jzvjF/DB60KxxMZoopK1bK41dh7\nE5AkiBS1GE86O7ujLIg6t8x1jkbTBEFzZsWx5ewmrGU6NEHi2S72ZSu6rsMzqz5G2op6lKikbEve\n3wVNe3fH5wQB16tljsaypHSVpmPR9fqookxGMfA8gVvVdXa66Xj++G9QBN6Ym78pgcmQj62Q2Ht1\ndSfni+G2BYHjkTluVasc1PNcTMxvSo12iVGJ1mexzDBmHeCMsciNaolA+DANkhu4mJwfJpx+CPzh\n6R9xMJra+Y3fcHyKfOR98S0h/ohQLBZ/1bvwTnjRrSMKAn2Cmc4TwBjRaTp9FiOTSzKHjSQ3RlwW\nFEHkXrMybEhRBHGXrScC92sdCvGwiSwuGYCJIohoqsPaFEuoutvFk/yJ5qtR+ATcb5esK8/uAAAg\nAElEQVQ5myhgeS5PuzVOJwrb3qA3qtCP2lWyamRMC3shWeRps8n9Rlglv5CZ59aUh9SCniSlGDzs\nd2HwTHUDHx+f4/EsfhCwYrbGSEVM1Fhxpld7Tc/hTmOdg9Hk2HXZDdb73UHqG+S1GMfiaVas1tSY\n51GMSTeczkTjT1jxCTidyA+T6DbgzqisjTbVnInNDR1NRAQupuZp2hZRWWFej2P7Ps/aNe43xyc8\nAgFXMgd42W4O/h0SH9v3uN0qcSkzz/XaGrbvcyE2x/WBtvRRa50DepK3ZotACNAEiVlGAjEpwo33\n8Eq9kJzjen13JOBnbkhSnnXrHDSSyH53avNcVNY4oc/hBz4+AT4+buDj+j6272H6Dh23P5XEHYlm\nuTvFdWAnBELA8USG+yOfXbO6HI9nWA0aM/sL3gXPunUORBJjpHTb93eaMKbosnnFxr1o51nf1olh\nQtGpj5Dy6JaVr+n7XONsfI6216flWLSc/o7yJCmQSSuRHSuzZ6LzXC2HE/k/7dfpWC7L+en3m53w\nmZGna/rD1byopHKrFrr7HNAzPOh9GMJa0GLc/0C6YQilEueTn+ZzeL/xqfKR98G3hPgjwtra2icn\nYrd9j7+8eIYXnRo/LT/nVXfnh09Rj1FQY4iIlK3OsNFGFsSwKUwYfW+cl53NKvPZVAE38CmZLSo7\nPAC6roPup4EOz80Sn2cOYAYWz63ZS20tz+R04hBXtzGmB7jXXh8ey8MdbNzEwQFJCJyIFfhZ9SWC\nEB7b42Z92GzjAy17+mSi2Xd41K7y22oBQdOJqTKu7/OLyvh+SoLEhVRYTb02wx92A7oo7ZkMb0W5\n30NCJBcxgNnbOhHLoQQypuzScE3eWE0OGEmSssH9ZnmkYihwv1XhfHJuTId7Mp6dut2O20eU4XRs\njoet8P3qwPbven2Vk/EcD1sV5o04L7uT+3cynkMXZWQkSgOpw9bAlrdmkw0H23uNKlfSB3B8n5LZ\n4VW3zcXkPOtmjznDmDkxMr13J3pnE4WBX/fuJAA/lDP8Qyccn696TY7FMnTcCglFI6VESMoGbcvh\nYaPGyo728CJRWSMXiRBXFSRBRASMHZort4MqTx7H43aN5cwct7eRLbwLCnp014T4fSFtYcRRSaU+\nImRPKNq2hFhEYFFLcau2SfgUUeJCKs+9TmlqkEtONfh5+Q2H4ykUTZoZgnHISHO1vFnl/jNamv/H\nKnO9vM7FfHEHG8xxHDfyPG20sX2PI7EkR2IajhtwOwj3+3Wrx7F4jhdmbcLH+X2RkCOsmbuPI98r\n/lzh2K4r7t90fIp85H3xLSH+iKAo7/6Q+VXif3pxk5xmQCBMvWlvYE6LUdTi3KyvsdoNb2pJReOw\nEScqK1TsLnk1iuk7POisIwAFNUYmHRsGeAQB3G+WSSo6RT3GmrW9Y8L9Zp3vFBa4313hnvlyx2M5\nqGfQhN1fh1K/g7LDz0gWRC6lFlgzO/ys8prvZ5fCYJJGhd4WolRzp9/sNyrW3cDjSacWTir0KGcS\nebwg4Hm3HlbygtC67cYuqokZzWD1HdP/RlG3TVatDoasoQkiuqwQkWRiiooqigiCwMNGlZZjk1Z1\njhhZnptV3lhN3tBkKZYCT8Z0bfJaFJ8A1w84lyzQsK2QLM/ggktGmriscmdEhnA8nuNZp85yap7b\njTXOp4pj7hsbOBnP8aRdG47ZsBK8yrN2HV3eTBZciibJqzHuNst4fsC12upYw1bf81gx26S02Z6l\n72oPVdCiPG/X2YslWXdLNT0uafiWynrPY50Om2XQ3W2z6zp02+P7LwkCp7N57rf3Xq172CkjC+LE\nveJGrcRytjhMIzREmWIkTrnfQxMlFo3EYI8FXvcaYysts/C8U0caeFt/KKQUnQU9wdXKGsfiOTaU\nEzICF5LzPO/WOBzJ0HZsFEGcqfE9nShwuzZ+Ph3f53qtxOl0Zqpuf1FPUepaPG83UUWR5cwij7rr\nQycMGKRk9gVGr3d3UPUPELhTqXImO8e99s6aXFWQWO1Yw1WD550mz7fcguu2Rb1qIaJwKJZAUj1e\nWds3He8GRT0+DEj6EDibKPDXjn7ng23/U8OnykfeB98S4o8IyWTyV70Le4YqSvy1o5/z0/Xn/Gnl\nFTnVIKHoaKKEIkph1SQQ6HkOD5sV1nrjhK/p9GmOaFxf0UIWRJbTizi+y1fVkMjkdINKf7MRqWab\nHJATLMfDTmBBEFi327ydEn+60unv+Ow/EslRb4vcWesgCSscS2d4to1f8gYEtm+UgdAH+WajhCyI\nnEvO8aQ13cngRDyLJ7hjy9uqKBGXteEy/hMvfPq4gT8WePKdzCKW52J5zkwyHJdVjsWytN0+Tzs1\n+u9RtdzAcmoefIFrjRV6rhMuMG/RLJ9PztEaNGDVbYsj8a36vIDnAz1qSo1MDU4x5Mmbc0xS8QOf\nu1uakO4211nUE9xorJJRI9ycQoYhJBujpOxGY5WL6SI36yWOxTLcba0Tk1Xu1NdJqBrnUqGUY1RH\nqQoiTwaV6e30oY1d6lkhHFNFPT6w8RJZ9/emydwYIwCXkgt8Xd59dXm38IKAh7UG57Jzw0bD3cIJ\nPJaiKV50Ji3R7tYqHEtkeGM1yWpRno7olEd/M0lFY1FPTP29j6LuWFxM7d3NY7c4Gk1TsyzuNMK0\nv8etSV31pUxxKJc5l84NV5e2QhFmp+YpA0s3TZQoaDE6rs2iliTwN6+r7ft8XVkjoahcTOW511pD\nkxQOqJmBO8YmHo9MvN0g4FalwoXMPC2/t6306UR0jhtTnH2mwSfgeaeJKkpcyC5xr/sW9z0qxkUt\nzkrvw8VA/7uffW/XjZi/DvgU+cj74ltC/BGhUqkQjU6Phv2Y8f3sAX5j7ihxSeN/fnGHdSwupYvc\nqL3b8qcb+DxsVemNLF0vRhJURh6IR6NpRMQxezABuJRZ4GZrdTwdK5A4FdtssJsGp6/xavDwTSg6\nphkQ2BIxWaNoRImpCmW7M2zO2sCcFmNlxhLecnIePwgDNk7H87xo17k9I7r1SDTNy1ZYZTweyxKV\nNDp9lyetOiXfZj4ePhAvyklW7XVq/R5X0guYnsOq2ear2lsAjkUnzdSDAJbTRZ626lyvrXEkFhLS\nqm1yOBZal+0Vec3giJHhy/IbQOByZp5rjdWpDXYbbgbL6SIls8Nar81yYoEH7XUO6hnSisGLoMvp\nZG7YrJhVIiwayaHFW22ghV6IxJnTYxDA005t+nK4AAlVQ5Nk5vQ4P6u8mtivxUh86uqCJA7cPEQJ\nWRA5Gs1ws7FGpd8bG38bmNPjvBp48W4XVdxy+1zOLHB9ilVVTjU4EEkSBNBybN72WrztdFnOFLnV\n3Ptv6JKSIqLYKMh8XV5jv8nwBhzf52a5zOlUAVURedatjlUmt4MiTF+WdgKfp60mS/HYzAZTCCfS\nUVlFFyWsHRrV3pqt0M5sn5v2DkQSrHQ7E6s8W1EauT9sR3q3c+3wg4CMGkHwZF602mEMdK1McuCb\nbI9MyluOzdVyiUUjTs10uDWlqrqsJli1RomtMJRqxJQIi0aMiCwjiyMR1ASstPfuIGH7Hl+XSySU\nKKeTKRwcVu0mDcdEEML704KWAARW+s2p95CopL5Xwuh20EWZv37iz/C9zK9XTPFO+FT5yPvgW0L8\nEeFTnZFFBublmrRZxbteX+Ncco6u299VZPFWHDKSY04Oo/fIi8li6DSx5UEfECa4+a7AyVSOR90y\nR6Jpyl2LUrfH4VyStf74Q1YATkUX+Pnb2nB7WdXgycDaqun0aTb7g/cGXMkv8qBT4qCRwpBUFCTK\nljmxDHopNb+jhnfzWFOsdXuYnovZc1mdUhDcrBCHD9fTiQJXB44VUUnhZDxHUtG5Wl3hRCxHud+l\n6fQ5GE2SV6P8ovp2uK3nnQZ5PULFNomI8q59hcf3t8sa3eE5u1Zb43JmnutbCNyxWIYHgwaqp+3a\nUJ+7Yna5lFoY+PeGEhBdVAgCOJcs8KBRpTKi9VZFiYupBcpOeyif2Q591+Npp87Tdp0T8SwxRaXl\n9AkIUASZ+80yR2Np0vHsMHXM9nxuDSYsq70uWTWyY2Uxp0Z5RUi4ara5rePGtdoqJxM5IpLM026N\nmKxSUOPcqpdY702pIO9xlT8iKZyK5XnZNnnceT9t+O4hcL8RNilKgsDBWIa4qiIJAqIQxja/tZoT\nk4ntUtu8IMB1YTmxgIOLFEh0XBtP8MYmbytmmwupuR3ttyr9HheSc9ya8T5dlMlqBk3HmtlMOw0x\nSeOVt7PkaMVsMR8J5V1PWo2pchGAt73Z21IEiYKS4O7AfjKuhPKcptNnOT03dZyu9rq4HkybED2e\nIc0C6DgOD5vTHUSOx6Zr+XeDltPnamXzGiSUUPa1bvV4aYbj/2i8gKS4vNwisTgWzU2VPe0H/vML\nf4F/IX/4g2z7U8anykfeB98S4o8Itv1hDOp/WfhR4TD/ZO05L7qNUNc5yJiPSjK9PXaPj3IBRRCH\n3r+bRDO8yRuSzOFomo5rk1S1UC4gwINmlc/iWZ4168NFOr8fY0ETiEoamqDRs32e1Fv8fMRf9Hg8\nw+OpyWKh3u7r8hppTeN+ffM9x+MZNFlCFiQkRGRB5OfV1+ymMnc6kedlq7VjilVaNmhKfZIbwSVC\nwKl4Dl0Kyd3DVoUDkQSSIPJwxDaubPVY6U4+aBeNFBXb5H6rEhLZXT5sziYKPGrUyGnGmB8zbJDi\nBe601nACn6PRNOtmB5+AeT1GVouiCCL3W+uYnociilxKF7leX2PN6rBmdfhubpEnrfoEYbB9j+u1\nNS5ni2GzkmMOAza2whBlVkbIxaiNXlGLs2qF1/tZp7HFVSDEcqqILsms9dsTk4UggISisqAnUEV5\nQOjhYDQ55pU9Cw9b4b7EJIW1vslKZ7YcYieLrlF8FstS6/X5urzGFeVX8yDzgoDn7WlEPGA+kqBg\nRFEkgSAIuFvfXo70ptfmzRaCeDye4XxyDlkQabs2z7s11swOl1ML3GyubqsTvtUssZwq0nQs+p6H\nISvEFY163+Jlr85bs4WMwKX0PHeb6zue+6Ie414zlEnsDIHCoN+h7fb5YX6Jpmvi+B5RWaXSszBd\nl0Ujzo3G2tRJlYw0CD0SCAKoWJuV2pVeBxkBd8sMarvJWXIPfRKjiO6jrrTl2EMp1QaetRsoosjp\nzBwPeiWCAC6m5t/LoWUnHI//elmL7RafOh95F3xLiD8imOaHNTT/kLBch7xu8AcnvsvLboP/6+1D\nuq6DLIocT+S43ShtW4VMKjo5LQwduJCaG9PHnk/Pca2+SkxWeTziPLCcmudBs8LdRliBvJAujD2f\nnrTHqxy9fsBKwwZsYHo1JrqLqM6MFqEx4uEak7VhNVhCIqXo7PSglISw4eZqZXf6zrv1CgU9ylE1\nwVW3iSLIvOrViSkKfd/jeDzLo1aVg0ZqbKn5s1hmqqY4GCEPr7q7q+DP63EeNWr0fY+cbvDWnDyH\n12qrFPUYh+MJrtfXhsQir8e4Oai+/iB3gNfdFj+vhFXrrBYZejlbrret9GDjPAvAhUyR2yMJcHFZ\n43SswN1GGUOWOWmEyXej464/ZWJ2MTWHJIi87bUo9btYnjs8Z5IgkFMNNEkmAFq2Ratv0+pvkuyI\nJGMFe1uOjyoa7RmWeBtwZ3m4bcFycp5r5TWCwTgqSCrsrzrgPSGwanZZHZEOnErm9rwEbvsejyub\nv/9FI0HF7LHWWWM5V+D2DlrmnbxrXQKu11fJq1EKkSh3m7MdOOb1OCvd3bsdiCO/8YppDidGoyj3\nexyOptFliQetyhihtT2fjfvEoWhyzDFlvd+dWiVOqxHW3em/pXcdI49alQ/epOj4PnerDX5QPMxq\nv7mrBuF3xbnkHHnt10sWsFt8ynzkXfEtIf6I8Cn7/omCSNO2eNFt8JPVp3yeXSAuazxp17hRDxvK\nLqXnuFZbmahcpFUdXVB53KzzZwoH+aL6auz1jUrkwUiKu42wCncslub6Fmu0jcaTrTgWS6OLCutW\nhyPRFM+3IYBbk6WmoWpaLKfmEQToOc6QpEVlhY7tUen3yBvGRJITQEaNcMhIUer1uFrZm75z3ery\ncwTisoooCLScPn3XJSHrg1AAgZxuDAnx6URu5sNk9IFW6Zsci6d51p0dtLBkJOn2nWF0sr/N83DN\n6jBvxMaqbBuE4GJqji/K44EoCVkbEuLdNp8FhMTiUmKBgFAu8FVlhYps0nZt2q5NTjVYiqRIazqu\n7xEg8GaESByJpkgpOo86VbquwwEj9MXeCA2B8DxNa4BURYmjsTSyIBJXVV73mhyMpFBEEVWQ0CWF\njuNgei6GLGPIMtdHNNZhutj2hGoaed+KS6kFvl4fn1T9aX/vgRm/bBjS3h89HdcmJit0BqspoxID\neRtt7l5RtruU7S6X0vMz5Tm7naxsYHRfy9bs675xrzsWz6BL0lA29qhVYU6PUrK6ZLUoL7fYW/a9\nyf05EElOl+Lw7mOk57lhk+KMXoj9gipKPOqUqTkfNuTj3zx06dtGuhn4lPnIu+JbQvwR4VP2/VMl\niVPJPKeSeX734Glu1Uvca1SG1lVu4HOttsoPcks869RoOBan4wVedVs0LAsvsAGBP11/Q0GPo0nC\nsIPc9ByWk0Wu18KbcBBA3518AEwjUxICJbM71AYuRZPbEuKkorOdny6EEbRbyTgMfEbtHiBw0EiO\nEeIlI0lGMbhVW6fSe/eHyWkirMdiw5SxfuDRdzwSA02h5Ybn+0Q8y8ttdKTBlmp9rW9yMVUkCOBh\nuzwkvhtQkXnZ33wIjzbbbIWEgIzEcnIhJIBB6CxwOT0/lBjMwm4mJBto2NawSn0lE6bGPWnXuJQu\nErBpPfeiG+qSb9fLXEgXqDdLCEJYQbtRW+NiZo5Kv0dC1rC1KE9nSGY2oAgiBS06EfCxEy5nF7jR\nXCEIwsnTThC2mSwZksKJaI6v1ycnVRsesx8znrb3bodW7ZsciaXodRoTE7IPUa+8Xl9lOVWcqCyf\njucx+z4nYlketqu7Smpc73cpRmLUbXPMVWcWng5Wty5l5rnXXMf0Xdy+z2exDGvmpM7naac20Tjo\nbCP7eJ8xUtrB6nI/cCKZ4W7v7c5vfA9cTM3zG4WjH/Q7PmV8ynzkXfEtIf6IoKo7L9d/CkirEX40\nd5gfzR3mbmOdf7DymH+8+pSqZfKoUafphB33d5vrw2rPKNatLlktwmEjRULRKVmdIRmGUK+50dk/\niqftOpez86xYbUpmBwS4lJ7n69oKmihRjMSRkTgVz9Oy+/Q8l0PxBDdHqqh7aaqBkIpsPIyjkgqD\nZKsHjTqHjBQ9zyGjRLnfKPNyhkxjN8hrBkvRJIlApRG4VHs2BSVOWtNp2n3KPYu0FCUmq8zrMR5N\nWZIdwxYGUbct6gOSfyE1N7H83B55iJ9NFgZNjdNxMT3PL6rjbgqXM8WZZHhUfmK5DilFH/vbLIxW\n6UaJle173G2WyaoRFow4EiKqGN7qbtXXuZJd4FpjZZD0F0yd3EyDKkqcSeaxBq4C51L5gd3W7nCt\nukZC0Wm7Ng/qNc4k8siiyON2lWOxDIog4QcBPdel69h0+w55KY4oCJiuQ89zh8fcsV2umtMnVq19\nTHv7UGg6fY7G03uOf37eaXA+VeB2fVzO8KLVICLJ7xWAMg23Gmuciud4MHBquJRcGJuEHItnMdRQ\nx79TCEVRS9C3PQqx0MFBFAQc36Ns9Wb6qV+vrbGgxyjocfwgwPF9sqrKyha5ku17HIlmqTsmGTVC\nRJJ52Jh9bt9njKyZHbKasWNk/ftga8jJfiMmq/xn53+M8G11eCa+KXxkL/iWEH9EiMfjv+pd2Hec\nTRU4myrw1099n//j5T3+y7tf4gY+P6+8JSYrYVNVbW1COVDtmywZ42R1A1k1wium+49uyBcSik5M\nUfmqsoomyliuy3qvx4v2+OcivfGfwLNOPbQQ26GSKQkCF1JFbtXXWTKSJDV1jGR2XYeVjsexeJp7\njQrvY311MT3H/UaFcn+NsqQTiW4+jEojy6+m59JxDVanVJC2Ypa8BOB+c52TiRwCAoIQVip7tgt0\nwwa82urMilxOM/a0nBqT1bF423OD5diL6SIrZmuqXGEDG413IgK6KJNRIzi+R9O2kRCpWBYVK9z2\n2WR++Llb9RKGLFMyO7uqUkYkmdPJPK97zYlq4ZXMAlf3YC+40URk+d5Q+/793CJflvdaDRM2wvMm\n8Mr7NLR/G6sae4U0xbKt2rc4kcjwJqhPrG68D3zgWafG5fQCDdPm6/USoyd9o5KbUnUOxxMzm+LS\naoQHzQqm51KbqBAHHI9ncAJvappiMZLg6ohjjQAsZ+Z51q0NPcsXI3GafYeSaVHqWmiiRD+YTXrf\na4wIsGDEPyghftJqsGAkWOl/mJTB/+jMb1DQYx9k298UfBP5yE74lhB/RKhWq8Ri38wfqSJK/N6R\n81xIF/mbN/8pD1tVOq7D9doaR2Mpup4zRu5EgZlVk91ovlpOn9bgwRM+IKd/ZsVsE1OVMZeHa7VV\nzibztB17phfq2cQc16oh8Xs+w62g7/v0XHfPtmajuJKd52p1UyN6TonzJ+3qWGV6FJq480/6aDRD\nzepT1OKsTUmqOxLNcq86LhtYMhIci6V3nCgsGUnK1s4VV0UQOZ3ME/jg4nO/VUZC4EWniRcE3KiV\nkEWBy+l5btTXpp6/RSMBQail/qL8FkkQuJKd5xeVSa/fVyNEw/F94qJGqd/ldCJHvW+NjTURgZSq\nk1Z1kqrO826dazO0pIEfoAcKqigRkWU0KfRuVUQZXZJACLjbLE+12VJFiROxLF+urXImlUeXZVbM\n9o7pi4YkczKR53ZtnRPJzMDtYBPnlDivvd0Hgfyq8K7azVmfe9SqcSyRIhACHN+j7fZpezvLE3aC\nHfg0e87U0I0NNGyLG1WLs6kC/cClNpBLSYKIISlEJIUH1qxVG4HHAwnJd7KLuJ5Pz3MHvtT9MTIM\n4e/+eq2EJAiciOdJqCqvus0xv+O+7yGLAu6Myd77jpFZPtL7hZbTx+0oLKcP8Mws09qH67iBH+WP\n8OfnPtu37X1T8U3mI7PwLSH+iJBOp3/Vu/DBcSaV529//3f48z/5H4d/e9ZpsBCJczqR50W3jum5\n4bJoo8TZZAFVkHDwhvG8zh4bWjagiCJMFI8ElozkRMf73WYZSRA4EElMhD9cTi9MPKRm4UW3yaXM\n3K6X5ce+JzM/+J5NAvDACW3MDFnhgJEgIsncGKnI7ubcJBWda7U1rmTnJghxWonQcyYrS3XbomP2\nJ6pfpxN5dEnmcbuK6Tm0R2yUFEFk0UiQ0SK4g+AAAbiYKvKi1eLmMPEq4HQ6R1RRqZomMUXhbbeN\n6wfcqZc5OxgLo4hKCgTCWEXNC8LI5604YCR409u8hsfiaZ71QsJ/v1WBAPK6gSKGfrctu0/NMak5\nJnRBCASSG76vg4pcEITL53dqFWzfw/K8CQupDZxJZ7m3JeJYEgQ+i2a4UwvHnS4pXBukMl7Kjjdz\nLQ7CSBzfw/UDVs021wfjz3JdJAS8kQnDA+fDazz3A+9Ch7NahHv12e4PL1otAi+cgArApdwiNzpv\nd6XznQVdlHiyDRkexUbVfxwWJxKb9/aCFmVOj6GIIp4fDFYpfN72WjxvNylbu2sk84KAh60qpxJZ\nSubkZxKKPtOx5VMYIz3P4etKiaiscCG1yM327OuoiRInogUqTodVa7Y0TUTg3z/+ww+0x98s/Drw\nka34sNO8b7En/LrYnGTUCH/nh3+JHy8cHWrFslqE+40KByJJltNFVEFmTk1wp1bhWrXE7WqFQ5EU\n85EYDcficmae5fTcnr53do1WICorXE7PczSa5VxybriUntONsXcej2cHFdvd43qtxOXM/J4+cyUz\nP5bCt4GCpHIhPUfXdVgzOxPLlrfr61xMj3cHiwhjFZ2Nauv9Rm2YbJdVDc7Gi9RNm6isom6RVHRc\ne5hwt4HL6Xnu1atcq5TQBZW0bPC20+ZAJEFc1HA8nxftJtcqa+iizNlkgaNGluuV9TGZBAh4Hnxd\nWeN5t8mrbpsAgaPxNIoo86bTJjZihxcEsGSkCQi11dNwKpHjbDLP/8/emwZJtublfb+z5nZyX6u6\nu3rf16q+M3cZZoZZYAbMLmwJZLPYDgt5IZABBxCywyGQA9tIFkYIKYxtQgGWbCPZEoIBJByImJk7\nc+d2dVV39b5315L7vufJc/zhZGVlVmZWZVV331v3Vv6+ded2MvOtfJ/3/z7v85/1x/Cr9r7bvOqm\nrXrBirxarZWsXYVO96xTWogzzgiiLpOv6pRqbS5oMS5qU8RkD9fTibGygm/n0pzx9GedXvTGuJ2z\nKoaKIPKwJyv5RjbBnH+KOf+U1Z64UmY+E+dmLsWdQpp8c6Na9riU56Q7iKNnZyAi7c6K8FHALatb\ndqaL2p3d8W0C8+kEV7QDL/WaB+3+Xe/wgLV486tOZn1THLR5SFar3MwmyTfq1Ns6j0t5FrNJbKIy\nthjuxT4isWPz33AvLz1GPkDrbUVvMZ9OctF1EFXof6+arHJFO4BZsnN9OYtekTniHC3k3gkdZsa1\nuXX8hGHsFz3Sy6RCvIeo1/f+NuerQBAEZoNTzAanWKuW+Pt33+PdpOWhfFAcfcL/abmIAPhUG89L\nJaYdGgHZSaOt47XZ8NnsA9vHvVT1FsOMl3fyGTyyyq18pntgai4Y43purWu7WMcqwG48/qjmwyHK\nCAjcLqQwR0wUD0s5VFEaS0CdcgeGimFVlDjt9LGEdU2FVmPIiXWBxYx1cKyNSbPd5nEpzwm3n6Wi\nFXRf7dhDqu0WtZaBacKM08cPHjrLe9oKt/PpoYdaPPKGsHRKCovZjUpd70Re7TYCEQiqDg44Pbyf\nHG57WOd+MctcMEa+1eBxOYeByXK5iE2SOeBw87xSZNY/xWqtyDFXgHrbOow05YBlcnYAACAASURB\nVHATtDlRRQlJEPAoNqYdbuw9lfPjbmuCFEyB4x4/q8PaPfdw2Omj2YR72f6qYNs0uZndzcl8gXvZ\nLFeCMURRoNpqsdDTseu0L9B3OK9tmmN3OQSrCc2VYKT7fgPiq2ue8DppD7GRbEXE7uLpNh34gnYn\nq5V+UTmfTjDldZFsjp8b3IsVkbc7XJKCIop8c5NH/EogthGJaMInQlOsVSpMObSxzgD0MspCskUQ\nzEdmjPSykE0QtWtEXDbrXEjD4F4mz/vGRlV+rVyFMoQcXiIuBw67yK1yvGtZ+tHDlz+sy//IsV/0\nSC8TQbyH2I+5f1NONz97/h2+tPK7Y93fBHKdClnE5mKhE2FWqbYwDJPz3jAvqsUBIQt0I8CGUdSb\n1iTVEaLzmThvhw9RajbxK3ZyrToOSabRbnPQ6SZid9HQdRK1Kk8aVozb5UCUxfyIk/+txpZJC+vY\nRIl8szlwmcfdfrK1Gv9vboWq0OaE2z/QeKT3Myq1Wt3wf59iI2J38R2u44RUJz7VwY8dv0zMoSEi\nIAgmNlHioMvLl6ZPIItWNbnZbvOskme5WuIvEs942pMIcMIdYDGztTh0iNZJ+htjHrJbF4FvRg5Q\nb7dwiipr9TI3O2JxPp0gqDgpK3r3Oc96gtzMJcm3GthFCZskU2g1KLeaXA1M8bxSIKQ6cftUnpTy\nPCzkuOAPk20OttteR5NUCkJr7AXMOJjAQmb4Vr9hmiM94eNwyOXpW5B8FHKI7aLE0yEHyLYiZHOS\nrG0tapURecQeNPJCnabZJqg4OWT3YQLJZom1IT76Xmr67sfAQZeHe0Pi+frEqgC6abJcLTEbiu5Y\nEL+oFHGIMrVNyREOabTofdkxslvb2suSqFeIqRrvp7b+7UnX6qQ77aA9qovTfjeCIHBam3SlG5f9\nqEcmgngPsR9z/8Dq/PZPPvuX+JOVR9zKpwYaNwzFtJpDzAVilpASIF6vEK9XsIkSV/yxgaYUF3yR\nvvi2zSxk41zxR4nXK0RsLp4UCsRrFa4Eo+Raq7gVGy86cW/LZWsSnQvGSHeSEOK1MrIw+iDL/S2q\n3+uc90WGVoftkoxuGHyb3c9XailS1epQUWyXZOYCMd4KH+RnPG9y3hfBreyuwqVKEic9QU56gnwu\ndoR/m3jK37rx5+SadcaZD8/6QjuqdIJVe8/Wazzo5An3WiVOeQLcz+dwyhs/W6vVMoZpcsEbxibJ\nGJgsZhMUW01u5VMccLhptQ0Wer73pVyKoM3BtObiZjE54Eu8VbKEq6yInHYGcIoqN7LJ19ad63Y+\nwwV/hHvF9NhCQ0TgUiBCsl7mRa1fWO6lHOLDLi9B1dmn9h2yzJNqfiA6bCsOONw8ShcIKxoHPBqC\nKPC8mh+wDOUbww9f3StkcCs2Djk1PIrK+6mNhel5fxRBMrlXTg3sYqjC+P7hnfComMMlyVQ6O1Lr\nmdM3MglO+4JDO9mNItWoDo0AtDLVh/MyY2Ta4ebhGL9lr4tSY2fRmMVmk8VEBp9qxzlGJ9IJFvtR\nj0wE8R7Cbh/9A/Zx54QnwAlPgJbR5v9+eoe/s/Tutr69ZL1CvFbhkMuLW1W5nUuBYJ2wXsgkmHa4\nibk0dMNAEoSxYoJMA+LlCvHyRiXqRbmIYFrb8W3V6uy27prI1jeeM1GrcMLj5+GIbNWy3sQtq5S2\nyDquj8hRvZVP4ZBkVJtK0HDglBV03egcPrQE3E+cuMx/dGIWbZcCeDs+Gz3Cb735Pfzs+3/Co9cg\nEuYCMVZrJR50GmNk6jV8to2/CVvHP7haLSEJAoc1L25ZZaVdZCmf6vq+Dzo9+Gw2ys0Wj4p55kKD\nlY5Mo8aMy4dmOjiieVEkgVSzwnKt2BXIumlwv2Jtx14JTXE9Nfow18uylEtx0R/ufpebcUgyp71B\nBMGSTulGZWQr4qzx4fZtlgSB894IxVqTp9kizzZFsFwIBXckhgGiNjcr7Sqpdo1U529OFUVmw1Nc\nz1vidsru5nFpdNOdUqtJqZDlUiDS9/+3ctZ37FEcHPf4EESTXKvGs1qeo64At+u7E3+iaX1vwyi0\nGtaOUmehtu73bZtwL5fhpDeAq9OREqxGOkuF5MgF01I+xVwghtmxdAkmKIbVNbFpDla4dztGphwa\njXb7lec974TKkOz6cfgvLrzR3f2asD37UY9MBPEewuFwfNiX8KGjiBI/euwCl/wR/sOv/cvRFTMB\nbJ3J5kWlCBVLVJdbDeKd+LbVWpmoQ2Oxs70mYHI5FGW1Xhqab3tSC3AnP1iZyTRqXPBFWcomAYEp\nhxtJFFiuFgeC3R3bdCBTJQm2mEuGHYQJqg5cskKtrVOXrOvJNGoIwCk5iIjAKU+Anz7zydceNH/K\nE+J/mPtOfuKr/5Ljmh+vYqfe1jFNE0WSkAWRhqHzrJKnpu9s0nxWLuJWVGb9MRyywtcTy6zVypxy\nBxAEodOMQaBtwozLg1NWWMglmA3EeF4pdBc8y9UiIVuMp2VL6Iz6RLL1GqVWs88XPBuYxhRMSkad\nJ9UN0X+jEMcp27r+69fBzVySM74gd4dssZ/0BEYK4M0kX2FE1U455Q6SrzS5kRiWtmCx0zEqCQKJ\n8qBVomkYXE8kuRKZYqGwRsTmYq2ytaVC6tRiTZOBnYFiq8H1zMZOwiGXH4+0s99kmyhx2hNCNAXW\nqpWRFWuAxWyCk54AiijyjdQyhzVfp7ukwINC/4Lzgj+MJtqY1qx0ivXPsGHo3C6kkQWRUlnnwSbf\n+9WpGNfKgxnXuxkjpz1BViqloc2UPijOe8PcSu6sQyTAUbeX7z1y6jVc0ceX/ahHJoJ4D5HL5fB4\nPB/2ZewJLvgj/Ponv8wvXPuzoX7gU+7AwKTxsGj5Q+P14ZOiicBCOokqilwObvh9A6rVFW8plxrp\nGbXaQluT0FqtzLRDQ5MUfJsSCwpD2kevIyGQ3aZKrZsGUbuLA3YP8WqFYrNOrdUm0/HDRW1hfvjI\nWY67/RSaDatSbBq8EZr+wLounfWF+aWL38bfXfomz0qFrkUk5nAR73g8RQRsmjyyecRmVEHsCv2n\n5QJzQauq2zIM7hdyXPJH+p4obHdyLbPGXCBmeQO9QR4VcyiiRNju7MSSde4/ZKNhPeN1M4IgcD2T\nQBUlznqj6KLOg3IGA5MZl2eoWH11CEMj78DqsDcX7DSM2ebzPKNoPPkQmnNc9U9xLd7fuGIYO6nS\nHdf8tBomz0ujK8oLySRzkSmWhkae9XMpEGU+HSdkd3FQ01jIJkZGeb2oFHGNsdtimnBM8+FV7NzL\nZ1lMb1T5/W07l/0x0vUKy9XSwGutHyK2iRLx6nDv8EmPn6WctWjLNQZ/Xy74I+gNg7uZwV2bG4kU\nBwIeVjY1uBhnjPhlOzM2P6IuIoqwUFx7KduQR1ZxK7ahn8O4CO3dPfC/uvKOFbs5YWz2ox6ZCOI9\nRDAY/LAvYU/xduQgf/+t7+Knv/nHHUFqtQ22izIPitmhhopis1/kDGuI0DQMbqSTvB09SKPdJl6r\nbOl1dckKHsXGlYATEcE6BGOYrFTLPCoUrKxkUQTB5Ho+gU+xE7E7eVzO9fmJDzjdIxt9gFUJlkyJ\nZLlGvLxRwT6ieVlpl/j89BF+4Mh5joY//MMOX5g+yr94fg+3YuNuPkOyXmHa6e4KYgOrucZ5X4Rb\nhe2tBgYmmqxS1pvMuDzczPY/ZrPYv5VNcdoTJN2o4VXsLKY3tpNlQaRXlJlDRsqVQHTkITfotH/O\npRERmPK6WauXcCqv/+fyeaXIMY9v6Nb/fCbORX+UpXwSUxgtTJZau28Rvlvm/FNci1sV/NGYRB0a\nzm12UcBKMTmu+bmfztFob++rnk8m8DltNJujD8B5FBsPCpYATderpOtVrgRiSCJkmrWhXeLS28Sg\nHXZ50XWTx4UCMPj4XLNOLm39dgVsTlyq3JeJvc5pb4gb2eHj0b1NRz/RFIaKYbAWlE7dNtAcaOQY\nMeGSFqNaafMonSfPxiLj0JRny9+vrTBNaDZNlmtlDjg9eOxqtx32uFzxRVlIbDfGBvlLx87wVvTl\novf2I/tRj0wE8R6iVCrtu84w23HRH+H/+vYf5qe/+cfYBImFTvXlhMfPCY+fUrNJrlFnRvPwuJzj\nRaXIlHMjuuhFpTj0BL9hQkNvDz3Atpmjbt9A3NZZn3VaudBqUOhUb2ZcHqKyhoDAvVyOs74gd8sb\nP/phu3PohCKYArP+KW5mU93UjHXcisp/fu4NPhGexqvaWVvbWQby60JTVP6DE5f4b+f/wvoeWo2h\n/udn5fxYVWLdNDnjC1LTWzTbxkACxOaHm4BXdnAvt4K5qY23t0dAKKKITZK7iREHnB48sm1LMdyL\ngYlfdLFqlHZsAdktvfF2m7mZSzIXjA10zhOx/NOCADOS4wPtVHfA6e4IldFE7E6qZot4o0x8rcRc\neIqbxcTQBesVX4ybiTQ3Kzupxgsc0/wj/55nXB5UQe6LdYw5tJ5qrskpXwhVEbhbyKCbRserXUWT\nFQ47/dR0HUkUsEkyS/kECOCTHSwUxktRyTZqzGhRiq06PsVByOak0W7TNg1UQRpq4wBYrmwdE9jW\nt67aPsjnmItNM1/ZsE4MGyPHHQHMqsjNleGfe1Bx8nyI6B8Xt6JSa+usVEusVOFyMMaTanbLMxXr\nzPmnmI/3NykaB7/Nzk+dm9vlFe9v9qMemQjiPUSzubPTs/uFsN3JP3jru/n3/uyfdf9v88nvVL2K\nV7XxTuQgX11bQRVlZFHE0AVOe0PYJYkb2WRfleRRMY9XsQ3J8oXT3iDPSgXqbb0rhsN2J4Zpctzj\nJ+pwockKIbuTQrPBk1IeRZR4Xi7yV46do9RqkqxXuOiNdH2n8og+OLP+Ka6l+ydymyjxU2fn+ML0\nUWY0b/f/99IY+dzUEYoXGvzeoyXAiiu76IsgCgICAoJgHSp6P7NCc5vMWbesslYps1wpccobIGp3\ndVt5myY4RIXT7iA1QyeoOriXz/LN5CrnfGEeFjN9z5/pOeh4zhPm62ureFUbV0NBvpFcZZmdVVCX\ncineCB3ccUOW3bKUS+JT7d1dkc20OrYewRS47IuRqzd4WioQsDk44vFw1FT4eiO/ZRX5VeGQZCRd\nYkiDwD6m3VqPP1dgPpXgsNtDW2qzUt34Pq76prm2C+EDsFoqD1RCT7j9GAY8GhJRKG/KPntRKlJr\n69hkiWmHB0GAsMOJTZT4arI/+UaRrTSZnS6SFjqfQaHe4lnJErp+1c5Rt8JZTwi7bGWaG6aBbhiU\nWy3sskRZb6GKIk3D6POxH9G83Elvv3C4Hk9wZSrGQtn6nfFsavE+65rmxmoaYwtLhPkS60FBAFkR\niOAk2am6L2YSTDk1nDaFRGO093u3YlhE4Nfe+uJAc6UJ47GX5poPiokg3kPsx9y/cfHb7Pzu536A\nv/Hun3J7hFew0GxwLWX94DcNg6ZhADqFjo3ipNffVyHKN+vMhqJ9kVzrNI02f/nYOcqd6sX9fJYf\nPnqWGc1Lva1T01toisohl4f7hQzJepVvpVYxTZMjbh9fjb+g2GySbdS6GbEPyXM1PM18frXvtRpt\nS+B4FBv/8ekrRB0uTngCHPcMdlzaa2PEp9qJOTQS5SrfTA4XjFdCERZHHAibcmg0WgaZeh2PS+By\nIMpSLokkiFz2R7vVs68nrOrWEbeX+Z6mFrfzad4KT/ON9Eb1a61WRu14idcrwYVmg0yjvm1yyagp\n93UeptuMbpoccLpHCuJ1+8h5d7Qv+SLbqJFN1XgkyjglO8fcPhAMHleyVNovef2m1QLbLsqkG1Xy\nrToBmx0N+5b+XrAa6QyzAzwrFXEpCl7VWpTO+qZ2LYYBKyIxEun7e5YFiTsjtuY3i7/Dbi93Chnq\n7TbPykUEE5ZLJZyywmHNS65RwykrTLvc3dbaLuXlGlxcDkRYyqb6xvRm5vwxqiWdavdzEfA7HDgk\nmefp0raLEejkYK+lORsLc6eS6uYQ20SZs0qEhZXtI9hWCuWXUgxr9TKHHB6uumKsVMvEa2XWqmU8\nisqcb4q2aWAKUGjVyTRqROwuPJJtV2IY4D+78AZze8Be9lFlr801HwQTQbyH2I+5fzsh6nDxj7/9\n+/lf7y3wv99foN4e9AuGHS6el4ZvMQ5LcBA7P7SarPDdh05yzhfilDfIQacbp6IgCdsfxIg5rW2l\nHz56FgDTNPnM1Ay3c2nm03GelHK8l1qlbZq82HRtB5xuvu/wSf7mlU9zxO0d2YZ1nb02Rq6GpvjF\n9/58S8FobFEdnrK7uVayxMBqp0IcsjuY0TzopsHNTIreyfBpqWDFk3VsKme8Qd5PxPHaNyr9umFy\nNRDlXr4/Lssv2Jl1xyjRGNrUJOpwIRsSAdVOtkeMighWkskHyGaNIwsiF/xhCq06N3IJjrgsG0/Y\n7uSg040oCLQMgwfFLJ+y+/ijSpobncWALIhcCkyRa1d5sQMPaFB1MuPw0tQNnhULLOc3qngxpwfR\ngOeV7avtAbuDXHm4uK+0WlzwBWlXCtxI9H/Xu+FhNt/1osPwhcxBp5uww0Wl2QQ23tNmb7PXZqPQ\naHTi2qznOx72d8UwQJvdN6g4qlnf4VaC9qDLzXwi3s0pthDI1ersJvgwVajjtzt4R3azLEkk8zUW\nx+y+mKpU8YRUiq2dVw6nbG6igpvlQoknShEEg2NuyytfbDW5looz4/R2c94Byl1P987HxHccPMpP\nnr6048dN2GCvzTUfBBNBvIfYjzEnO0UWRf7a2Tn+/RMX+Ed3r/N/PLzZd3AtaHMMFcQBm53Hm0SQ\nU5LRTYOfv/g23z9zaqwT5eMgCALTTjfTTjdfPHAUgJre4m4+w5+sPOL/fL6EJAh8YeoY//Wlz+wo\nN3ivjRFNUfnM1Ax//OLRyPs8KRa56p9mrV5kpVru+iRnXF7u5jZEq4HJbDDKYiZJrlHvdNoanAwV\naWNhY5pWq+OoXaPQanDY5cVvs7NSKW8SEfA4UyBTtYTZAbeXsM/BYj6OiZWQcGs5w/tGAp/Dxvlg\niEKzQbWtoykKL8pFjri9BBQHNV2n2mrhkBVkWWBpi3bhu8XsGdPTTg0wN2LXBNBEO9MOk3Kr2d2G\nB0vUOR12fC0b+c7OiG4aLHbE8Vl/hBYtHlWGyykRgbPuMGZb4G4uQ6Y0WNkVEZhyaH0RZVuxUi7h\nkOSR2bWqKBGzazzcpi3zOJT1JrOBKNc7XuL1HN8DDg2vYidRrbJWLrNSHkx0SG1Kp3FJCgX67VQL\nqQRz0SmKegMB60DbRX+Eh8WsFT+43QWa1kG8kM2JTZR5UtqmFbXiZIWdda7binStxhVXhFJN50Zh\nZ4faBAQOOrzcbu1svF9wRXiaLhFvWWPpohbmRimBbljJLc87i82Qw9EniHeLR7HxC7PvfGCpOx9X\n9tpc80EwEcR7CFWddNEZF5ei8l9efJOfPHWZ3753nd97uMRxt58bmyZpAbgSjPKiUqDW1hGwKrpf\nnD7K9x4+ySnvB3OS1iErzIZiXAlGOeMPMuPyMhec2vHz7MUx8uMnL24piGt6i1StRr1lMmP3oUoS\nUaeLG+nkQMh+02jzP771ef7Zk3sUm41u3FQvpY7Qcysq93IZBKymKRd91vbz+oIovMk72NvhKl6q\nEC9VOOzzY1ckFp5vvE6+1mCq7WKlaAmkHA28qp2n+SJPNx3gExGY9mis7rDd7nb0JmPEHC7me7ou\nzji83M9nOeDUWKv2V+uqeovFQhZJELgSiLCYSWL26II7uQwXfWGmRS9RzcnjapaC3sAlKZzWwjzO\nF7i1hSf1iNvys48rhsFqlHMlEOVuIT0gih2SjGLIaOKrEy96TyqFW1HBBLuocCeXsSrtgTB3cpm+\ng5tBm4Pn5VLf+mt4h0eB+cTGe/cqtq4lS5NtHPf5EEXrYF5Vb+GVbRzRfMiIlJpN1ioVnudLPO/4\n2C+EQiyNEKaKKHI7/eoXW5WGTmVIfNs4KPrw1tibEUyBY04/LsPGzbX+9/Awn0OSREqtJvW2zlHN\nx5NynvvFLEfcXp5us0jYjh87dZGAbf+JuVfNXpxrXjeTYL49RKHw8hWS/YbfZufnL73NH3/5R3g7\ncoApp7vv9tlQjOvZOOlGjUMuD//k8z/EV778I/zspbc+MDHciyAI/MDMmV2JYdibY+SsP8RfOzs7\n8naXoqKIIp+KHaRu6Jz3h4nanVwIhAFr4j/ocnMpEMGt2Ph0bIZSq8HFQJhvn9rYsnPJCnPBGA86\nByp7K8BrlXI3UmudA66NsWCTJJpD4rte5Es8SPVHnLkUhfubnqs9wvZhYBKzu4fethlNVrnijXHR\nGxmajTyK3ruGFRd+nLwRnOL5iGraSdVJtlFnMZMk5nBZndl6nsQ0TVarZa4nk1QqBpe1KeSWzHwy\nMdS37FZUPhGe4ohmiZXdCJaFdIJaS+eAw81cMMaUQ+OMN4hfsfNeYo2F5KvpAjjt0FAFiaOaz7p2\nSeWCL8zjYp7LwQiKJHIjm+JCsL9b3SHNM7AZoUk2znpDW76eX91IBCnrTRbTSa4nE8z5Y1xyR6nU\ndG4kU8wnEzzI5yhvshtkqnVUQeTvvf0d/PZn/p2+2877wujjGIR3wHGvjwf5LCd3edDsVjxN1O4a\nebsqSFzVpgm2NB4nitxMDQr6mq5zyhMArFi4hq5jl2TKrSYu9eU82SG7kx85ef6lnmOCxV6ca143\nkwrxHiIU2vrHd8JoYk6Nn7v8Nj976S3uFTL8d9e/zo1skpre4s3IAX7pyqeYcXk+8ttoe3WM/PVz\nVwnYHPxPN7+JTZKZdmo8LOaQBJHZYIxkrcJKpcRfPX6BO/k0X5g6wiHNw6984rP4bPYBr/avvfVF\nBKxW1n++9ozLgQgPclkWUwnOB0LcyqcpthrMRqIsJBOsVsqc8QcxMWkZbdyKjd6QBY9iI8t43blO\nhgfju0Z2TAQK9ca20XLHXD6ylQYLnUNwhzQfkgJPK8NbDXtlO6c9QWRBxCmonHaFcIkqDzN5Fjtb\n1ueCQSrtJi/KVrUx7HAStDsoCxInPH7WqmXi1QoBxckJzY9HVSm3m91WxdCxU6STzIaifVVfRRQ5\n5wvRNqxWwrph8vQlLQ0CAquVMqsVq5oe36ar3E6xsqUTrFbLXAlHuOiN8m58pbsWEBCIOV3YJJnM\nJnvEQFa1Cc9LRfy2rdvXuodU0S77o3xtZbA73DDi1QpHPT4+OzXTPXzrU21M2d0sJBKc9gW4n391\nbdI9sg0BgYUxvN/DaJswJXlIMPjdnXaGKJV05le3X9zYhQ3psVatcCEQ5nYhNTKJZxxkQeCXP/GZ\nsXKuJ2zPXp1rXicTQbyHKBQKuFyjV98TtkcQBM74QvzOt38vL8pFmu02Rz2+j00P+708Rv7y8XO8\nEz3Iv1l5giQIKKJE1OEiaHegiBJnfMGup3M7og7rPTbaOm+HD/BuYqWrN1fKJTRZoay3WKmUuBqy\nYuvu5ga3+q+GY1zLxonYnWML4uSQCChziziqR8UcFwJW9bHSbnK/mGU9/PqY5scj2biZSfV1+XpR\nLuKSOwkL+sZ1eRSVk1qQ91cS23YFu52x3q8gWNeXKFVJlKp8xuXjYSWPS1b4VPQgX1vbEGeCAHOh\nGHcK6b7IsKVsirlgjCelPCYmPtnRbXkOYGyxINgL2ESRWz32GtEUWdgUZbjutb4YDFv2iB4Kmyq3\nRzQvz/LFEbYJC7UTs7gZaYf2j2qrZS3UTatF84t8ibsVywq0UilzxOPlafHVVOtWStZi5KTdydou\nDscBPEjmeDN60MqQ7ozzYr3F/fj4wv1Zodi3iFzKppAEoet13ykC8Cuf/Hbeih7c1eMnDLKX55rX\nxUQQ7yFarQ+vR/zHDVEQOOz2bn/Hjxh7fYwc0jz85OnLr+z5bJJMxOHsimG7JFNoNvjc9GGyjToP\nc1muleM45OGHtuZTCd6KTPMoNZ6gOBH0cb+SHfh/sSNYRrHUc1L/neghco066VqNx7nRr1vRWxz3\n+CiUG5z3hCnVWyyXSzxvF3fUIte664YIc3UOHVb0FuVma+C+86kEfpuNY35ft1rcMgzmOwLyk+Fp\n3kv0R+g1P0BB7JDk8Q6o9dAwDOaCMW5kkkObfazjU20sbxLDIgJuWeGo5sUwLWuOJqk8o0hVbyGY\nwtBM57P+EItD4tLu5dMEbHayY/p015MwgnYHy/lSX7fNit7CqFU47Q9wLzc4LneCU1ZI1ioICN0x\nshtmPF7eW92+odFW5Bp1jgZ8POnZIXmZttA/c+mTfOnQ8Ze6pgn97PW55nUwEcR7iP2Y+zdhZ+zH\nMfJzV97mlDfIHzx7gEtWeDt6gP/n0X1Wq1a166jby5MttvPLLZ1sbWtxIgpwaTrC9SEtvE95AzzL\nFYjZNaIuF23BINess1Ypd3ON7aLEUc2PU1KotXTubKpWuxWVI5oXWRT7rAnrled2m261cXP78Z3y\ntfKGyCiNCNfPNRrkGnVO+AI4ZZmb2WRXgA6zh9ReNsd4C2aDUUrNFqooUWw2WC4XuRKJ9qVnjMN8\nJo5dlDjjDeGWVY5rfkxAlUXu5q3vI+bUuFvIcMod4Gk5T9M0CNgd3Ez3H2y7HLA8xvFqhVO+AJIs\nYJgmj0u57ucjdXY7JATO+kNIgsjjYpaT3iA3UkkuBsOd2MCt+cKhIwAsV0rdA3q91HSdx8U85wJB\nbmd30r2vn4jDybOGNca+NqQ1+Lg8yGU54fXzsPByVg6/aufJK3DN/JUT5/ixU5OItVfNfpxrJoJ4\nD7Efc/8m7Iz9OEbcispfPXWBHzp2mtVKmUqrxbvx1a4g9tnssIUglrexaThkiYNBN/NDxPBFf5iH\n2RzNtkGiUiVRqXZvc8oKJwJ+nLLCYiLJ3ZRVwTvgdqOIYlc4KaLItEPjZicx4HQwyL18BlUUqRkt\nMPuv8bjH/1LC51Oaj68Urcena1UuBSPUdZ0XleKmzmoCDzv+1AMuD1GXkURriAAAIABJREFU1Ynx\nSWFQLKXrVcI2BwecHgRToNpqUW+3cSoy8XqZXGvnqQWCaSXAXB84UGdlKmNalXmnrDCjedHbbe4X\nsyiiiCqKVHR9wLddN9oUGk3uZXI9wt7kYiiCKopka3XmAjGW0mnsNoVmq0GtN+nEhHOBEA96fLv3\n81kOutwsl0sc8/qIN8tU9RYyIrOBGBW9xVLGEtRXQzGuJa1xdDuTIuZ0Ea9urfrCDuuAW9DuwCUr\nA8krYC1S7uWzY4vsYag9VeFPuX18Jb+7MdY2TV4UC5wPhriV2Vl0Wx+vYNPhrcgB/sbFN1/+iSYM\nsB/nmokg3kPsN7/OhJ2zX8ZI2zD4m9/4txSbDX7pjU9xQHPjkBWOe/38mxdPmE9tiNftDkpuziPe\nzMlIYKBboU+1ccTlYyGZGPn4qm4lCFwORfqE5kqpxEm/H5dNIVOt0W6b3M9tCKx7mQyH3R7i1Qpr\n2SqSIPGwleeSP0K52eRhLv9SFbjVnlbkx7w+FtKW4LSJouWpTg0K/5VKiZURB63CdielRpNUu06q\np8HGtEtDFtUdNadQBJEL3gjVRounxSJCe/CzdUoyj4s55oIx5pMJynqL2/U0dknGYcrUmm1atFFF\nmZNBP7fyGwJRFgTqzfamKrfQXYwAPCkVEICzziCSJIABbUyrsYsBtzeJvPOBDeH3uJBHECBgc/De\n2iogcCW8kVixfjAOoA1Mu9zbCuKDnTQUmyQTcbp4UhxevW2bJkvZ1K5FsdTzd7L6krsQDcPgST5P\n0O7oa5W+E142QePLh47zy5/47MfmfMheY7/MNb1MBPEeQnoJX9eE/cF+GSPL5RJ//Pwxxzw+Avb+\nk/5XQlEuBMJ9vt3NyIKA3KnS6vrWgq1QaXApEEYRJAzTpNlu8yiXY7GS3FZMg7WFbJekvs6JD3L9\nYvZUIMC9wkZF7llP85i2adJu69xIb1RKX5SKY1UXh9HoEYPpHrHSMAyuJeMc9/p5VBxPbAdsdo57\n/Hwj3p+aMBeJMp+Ls9ocnVZwwRumUG2SqlaJOF1oqsJyscRCfON9DrMmT2tuHpazJOoV7B0/MViJ\nI5eCYW50xO0Jn5+VTR0E54JTvBcf3kK879oCYRZ7Pu+DmiVch/mP+6vqlg87W6+zXp7O1xuc8QVR\nRZEbm4Tq0zGsCe8n43zfsVOsVcojxXD3tWGorWIcepNcGq/AE17VdQ57vLsWxOMesB3GJ8PT/K2J\nGH6t7Je5ppfJaNpDFIsfbHvYCR899sMYmU/G+fmv/RkAv3D1bRybYpRCDie/ePWdbrySZAh4sHHV\nH2MuEOWiJ4LUEtHrJqccQW4nt94aflYo8iJTZjGRZCGR5HY6Q2NIZvEoqm2dc8GtI4oqzRbKGG3A\nwRKh5/1hZEPkjCewbfTXZo52mhIc8/gGDpBJAlT07dMFZjQPl/xhcpU6tebgFr5hmlz0hbnoiXDF\nHx243SZKPEjlWC6VaLTbvCgVuZPJUNqUbPAwn2PaZXXiW0dTrO91pVriiNfTd//ec1ePKlny69Vw\nE+b8MTLV7cWZ32ZnrdLfSCXkcAyIYZ9qYzYU5fEQC0kvTzsV581iGCzhfNjtGXxQD3/07CGNtk7E\nMV428PNykaOenR8Y7g2/OGp/NY0r7uYyfVaMnV3P7gTxOX+Iv/vOF1EmYvi1sh/mms1MKsR7iHA4\n/GFfwoQ9zn4YI6IgIAoCs+Eob0SGNzA5Fwjxs1fe5Jff/yqGaVJqNvs6iAGWxzGVHqvKW2g0uBKJ\n7KgDWy+rlTKSIIw8Kb9SLnEpFGYxm9wyr1gSBOyCzPWe93I2GCS3g85i16rWROa12fr+f9ql4VIU\nHvRYMUQEvDYbNklCEkT8Njt62+RuJs0LBEDoVEP7Wc9Thv4GKOuc1ALcqm69EJlxe3DIMndraSKa\ni1gnau9BcSNNYbnaL+h7k0TOecI0TB1FlGi3DeaTCSQEPhGZ4m4+TWnIKfmAzY5PtfO4pxLrVtQB\nz/ZcKMrNdIrrqfHGgyqOFoVhu7NvR2AzbdPkd+7c5MfPXLTyoIckV2zGZ7MDO4tiE3sWZNdeQYtk\nsBYoDkmm2bM7Mja70MPTTo3/+VPfiWsH7e4n7I79MNdsZiKI9xDZbBanc3cdhCbsD/bDGLkSjvJP\nv/yDtA1jS3/wl2aO8nt3l7D1VKgOuT34VBuSILCQHM/ysM5CMsn5UKivccW4xKsVLociLKZG56je\nSKe4GolxbcjhvXVOeP3cz/TbGW5n0oQ0R5/9YSsu2DX+v3Ku7727ZJmq3uoeRDzjC1Jv6jwvFclX\nNrbgV7Fu733scrlEwOEg29h4/QMujZhDA0AWRaq0yDU3bhfN0dW7s4Eg2Uad5+UiTlnmcjDKYj5B\nsjZoDznlCTBftwSiKoq4ZNXy9GbTA2JVQuCUL8j78ThRpwtFlchu6rwXtju5l++PLzvpD/R50udC\nsb5/75aY3cW0082DdI4pp8ZadXR773+4NI9TlvnVT32O7/9Xv9+1iYxiN7XV3uS4806N5Ji2me2Q\ndlnpNYYsHud8Uzyt5ga+N7DE8G995rsI7rLL3oSdsR/mms1M9hz2EFuF/0+YAPtrjEjbbIk+LxZ5\nni3RbG1sdSuILKXSLCZTOxLD68TLFYI7tCiss5hO9h2wGsZ8MsEhh4eroRi2IVVF15AuWwICU05t\n7OvYSKwwwQS/6uBiMEK+x3u6WijxrFhk3OF0tCfTO+bQyFTqzCcSzCcSvLe2htKSOK75cUoyV31T\nLA1p2QuWqF0ul0h0vNFVXedGIsVVX89OgAnHNT9XvDGaupU2cc4f4nIgylI6xa1MhtlQrGsx0GSF\nS4EIh1we7nYqvYlqhahd68uODtjsA2JYFOBZTyvqKafG9fTOxfDmnYHLgQjpSo3ryQTFVhNN3L57\n2nuJVRySzPcdPbntfXfacTNsd3Ivs1EF3y55ZScYO0qM3mCzZcKvOrieSDDj9A3c95DLw29++svM\naB+/bPm9yn6aa9aZVIj3EPtxi2LCzpiMkQ3eW1sbqDL57HYo7L6rV7Ze57DHQ77RoL2Lif5ONs3V\naIx7uQwzmpfb2cFq83K5xHK5xFGvl+eVAnrPexgldJQttuQ3837HMoEJU3aNeKXCtXqcq5EYbUwM\nw0RBZH5MO4D1vjLdQ34HXBqJcn81N1Wrooga9YrBfGX088ZcroEucWBV508HgyiiRLHW5HHG+g5d\nisJ5f5jbnZzgs4EgDws5rqcSqKLIbDDKjXSqL0Vinbu5DKd8ATRVZT4Tp9Bs4FFVij3ZzLOhGG3D\nZNqh0TJMfDbbgL94KwQTok4XNkHioi8CmHhUG19f7T+E+DCf53QoMCDIe/nq2jI//JV/zv/2he/h\nx89e5Dfev8ZyqURbbHOn2G/pKO3gYJ1NkvAqNtKVjQr+tcqrsUz4bfYd2Xl6aW2yWYRtTvKlBtKm\nhew5f4jf+LYvEbC9Gt/zhPHYj3PNRBDvIRKJxL7L/ZuwMyZjZINHnazYXtn6rFTAxNxVdbj7HMUi\ns9Fot3PbTmgYBi9KRcqt1rYn4J8UClwOR7qRbwdd7gExsBvedHn5SjFDpaUTr1jCVTdM5uMbQlVT\n1L7WudtR03XkpsgboSkWksMFb3VIfu5mRnk/DdNkrVAe8P1WWq2+z+RONsNpf4BSq0muUed+Njt0\n632d9TzhmKYRr5WZcXuREHBIMqvlct9nAnDKH9jy+g+5PPhUO8ulIlVdp20a5Kp1crV6t5vfpdDw\nXQKntH2VOFmr8herz/mRU+cp1BvcTqctQeu0WbFwWIkY9/Pj2x2Oan7ubfJIv6l5d51D3MuMx0Mu\nvTtBvJROczU6xfNanqZhYK67RHrG5BlfkH/46e/CrdqGPseE18d+nGsmlok9hKaNvy06YX8yGSMb\nLHWqhrqxUWnK1GuEHC9fSXqQzSLuUpxqXdG3fYX5ZjrFeV8IJzKrhTLtUdmsBrgVhQNOjXPeEJd8\nEa4GYlx0RzivhZn1R7sv96JZBxNswuiqcrnVxG/fmTWk1GxyLRnntD849PZ8o8FsZDBxopeqPtob\nW2q1uBjsr0o5ZJmG3u5LVai0WqyWyhi6ua2tBiBkdxC1u5gLxrAhcjORoqUbvCgNVqorrdEJHJeD\nERLlCkvpFPlGg2a7Tds0aRoG09rGwcL6iPcYL48Xofe795YwTZP1zYJGu80Jl797e3gHHtpplzYg\nhgFe7LKq24tNFFndQTV9GPOJBOlig2K51W0Ssz6OT3j8/NZEDH9o7Me5ZlIhnjBhwkcOwzSpdqqJ\nvfm/kiCM7YvdinKrxamgf8st7lG4VKsSOE5GqmGaqIJEXbfeQ3VIxJlbUXmSLVBptKlQZY3qwH0A\nZiMxlopJK6EjGGVhoAPcBkG7ncMeL9Nta9KTBAFJtJYAtbbO43yehjE8OWC1Whq5VT6fTDDVSbN4\nOKSK2TYMzgVCiMCTYt7qNtfDi3Kx+9yqJHHY7eFuNssnY1OsVMpEHE70TiW2YbQ57w2BYHVyU0SR\ntmmSb9RJVCvU221soojPZudG57DjmXUxP2St45BlBASuBmPkmnWeFPOYnftdDES4mUyNXOKEbQ7y\nSp2arlOsN4Z2nItXKhwN+LbNGl6tlPmdWze52ePDvpFIcTU2RbZV7fqkx6Haar30jskozofCO7Ld\njEu52eKtyAF+5ZOf7aRpTJjwwTARxHuIcrlMMDi8+jJhAkzGyDovSkVSNUsYFnv8lJdD0b7IspfB\nNcYW92YckoQiiMyFrQNg49DbaCFRGxS7J72Bsd7TYjKJLIpcDQX5ndXnI+0QV8IR7udyzI+wPoDV\nbvqcP4QkCjwp5in3WBnyjQYnfX5KzUaf/3mdtUqZ4BY5t3c6lX2HLDPj9vC8J5Is32hwyO1GFgX8\nNgd3s9aCJF+v09TbLPdUdW2ixO1MmsaQyC8T6xDdjNfTFxG3vpvwKJdjLhzleiqBCXznzBHy9QZ3\ns1lWilbVM+LQOOjVaBlt7mUyI8Vw1OnkejLRPViXqFY4HQjwpFAYWFS4xjhcB/C7S0tUej7ztmly\nfS3B2VCQWnt8j3y+2eCIx8uzTZmyh2x2loakeoyLKAzPXX5ZDmpu/pMLV/jcocM7Pjg44dWyH+ea\niWViDxGNbr3dOGHCZIxY6D2dttaF8eVQhPnEy8dlrfN8yJb6dpwNhJhPJphPJrqe0u3QVBVPZ1s4\nV6/3WC4s0XdrRGLDMHTD4A/iaxwZ0rhBxDqUtpBKbuv3bRkGt7NpbqZThGxOroZi3WsEy5t7xOfj\nuHcwEWBcarpOqd7gYiDEbDDKBV+YuVAMVZDxKjbu57LYJIm5SHSoZ/ZMIDhUDIO1Fsg16hibLCj5\nTqZysdnkejLBbCjKpw8c4ufeeJNvxeOUeg7cpWpVrseT1FvGlt/llFMbSJm4l81yNjAoJpbSKeZC\nsS2bUpz0BsjXhx+as8s7b4IRHGIh+mZ59wdPAdyKre9v8GWxSzL/6eU5fv97fojPzxyZiOE9wH6c\nayYV4j1EKpXi0KFDH/ZlTNjDTMaIxYzbgyyKhB1OVmuWcE1Vq690azhTq6Eq4tjCVhFE7uxgOxs6\nTSGSaU4HghSbDQTggKZxL2dVRg97vDzI7Cwv9qrmZk0ZFE6SIFJqNvHZbCiihFOWscsysih22/o2\ndJ1iq0HbMFEky25gE2XuZbK0DIOr4RjXUnEQ6Foioi4XDknmaXFDZB32eIa29N2cWZtvNCi3Wuj6\nhqC8EApxM5dClSQCdvvISvYor24vSk9Gddjh7IwRC6/Nxg+eOs2XjxxDFASUTqvvzdi26MQWsNmH\nJlyA5Q/fbC1RBJHVXBmhIXDK70ezqbRoc7PThlwUBIzmFp6fXQjF5+Uim09QXnV5+NeFnduB1tFH\n2Gl2ik2S+N5jJ/mJc5eY3oee1b3MfpxrJoJ4DzFZFU/YjskYsfjDx4/QDYOw09EVxKvl8iv3Sobs\nDlar420tH/X6uJ/LWqJmTCPzAc3NvXqWO5lMt/mFsyeLeKuDcaPQTXNoE4iWaQy0cl7HZ7MhGyKZ\nmiXeJEHArsisFq33fi4Y4nY6zXw8wWy0002t81EnqhXmwlGeFgvYJIlzwdBIEbtaLg+IxLDDyVpp\n4zNeP3jXNoxuSgYmuFWVqNOFV7WRqdZGCmJZFLkUjJBr1qk0m8yFo5gmqJJEumrtJrhVld/+zu/m\nmM86rPbe2upQMQxs2SJ4xu1hsT7cq22YJjGXq++9XgxGWEhY93+Y3fASnwkFqZktQqqT66ujvd+7\nIVWvcjoQ5H52QwAPs7rshIquE3DYh3YxHJcvHT7Kz7/xFoFX1EZ6wqtlP841E0G8hwgEto78mTDh\n4zJG/vDhQ777+PFd/eg+zOX41W++C4Aobjz+ciSCJIg8yuX6smZfhsCYglgwwSOq2HSJVtvAZ7Nx\nJOCl3G7xsDC6wttbffTb7WQbtW4R0K/auZ3ZeTRWw6aSLo9+TVWSOOhy47PZMQyTlmHwPF+g0NoQ\nNyf8/QcKb2fSlhBOJFhIJJmLxpjvdNwTsETjXCTG02Ke61t4k1umgV2WOO0KgGnFsD3J9x8ye5zP\nczUawzBNktUqhmlSbDQo11uU6xv3vRAKDX2Ni8Ew8/EEqiRyyO3mejqJQ5JQbdZnPeP28He+/Qtd\nMbxSKvEr735t5DXbJRmHLFMbIsDXF2AC/ZkiV8JRREGgYWw8RlMUnuSHWxXupzsRgtrWfw/mLptg\nuJT+qf7WFl3zxmVG8+xKELtVlf/mzW/j8xOf8J7m4zLX7ISJIN5DpFKpfZf7N2FnfFzGyFGfb9eT\n4R89foQkiuhto9vxDKxOcQBz4dgrO1hnE7f+iXRKMqc9QZKlKvOrG69ZbDS5sZbCxOTqgRjXRmQa\n9x4IdKuWd3i9eHfI7eFmbXz/sAAc8XqZGvK5qpLEhUCYTKXG82KBJ40CMNpHahviVV1KpfDabBQa\nDRYSCY74vTwtFbgUivDN+NrGHU24EAwjmgLNdhuHIvdVlJuGQaneYrU8WpTNb/P9uVWVlm5wOWQt\nghDM7ud2K2Ud2mu2DR7lC4DJ6XCQhVSCEz4//+CLXybocBCvlPmVd7/OtXic5ggLwOVwhJtrSUzT\n5FIojI7B7U6TkmmXm1KjiUeyUWw28NvtHPFZ3u3riSSY8M7BAwTtdjK1Oic8ARa3SP5Yf1+vg2S9\n/7DmVc3z0jnEo/zbWzEbjvLff/pzhBz7qyXwR5GPy1yzEyaCeA/h8Xg+7EuYsMf5OIwR3TA4N6K6\ntx3vrq7wj2/dxMQ6VPUkm+NSMIIhGNzLZzni9bI6whawG5pDJn3BhFO+AHZk7qWzLFZGixwBgTuJ\nNJpdpTwk43a1Uu7GYq3nHpc71W29PZ53+YTPjygIvCgUeJIvcDjaL6rO+oNkKnWur62LzK0XInZJ\notQYvNaWaXDY4+FGyoofq9RbzIai3N6UNnA5FOVGov8zmYvFmE/Fibk02rrBau3lKpRRh6vrs94a\nk8uxCAupBCICP3r6PEGHA90w+O3FBd7d1FFOAA66PYTsDrLVGjfWNt7HUiKNU5YRDIFEqUqiVO17\nZK7egHyRXL0OAhzz+fj68gqSIHDI5e6zLIxiu0Nzu7UELZdLhB1O0jXL1/1kiL97pzwt5HdkD/rR\nM+f5mdlPjBVHOOHD5+Mw1+yUiSDeQ7R3seKesL/4OIyR3U6IbcPgN+bf724aK4J14G0plUIATgT8\n3M/u7ADadjQ7olRE4LQ3gGKKPMsXeZAY/3Xqepsr3iDz6cGqZ6Pd5pDbw3Kp1H1fhUYDWRB4mNv+\nNU75/TzNF/oO/tl7woOuhmNcW4uPJaTCDquBxf1MltVciUuhMLIsYpomIgK6YaAKEpIg0DZN0rUa\npWaTs8EwTUNHEkQUQRzaZvp6PMEnpqZ4kMtRaIzfdngYx32+sT4bt6pafubUKjNuNx7Z3rWo/Pq3\nvsUfPXxMwGYn26ijiCIXg2EeZXMs54osM7y1cVXXORH0j3x9uyR31xuOjrhtmybL5TKnAgHubyvi\nt/6e6q3tDxKOYlrTuoLY9gpE6UHNg2mAKAvc3yav+6evvMFPnL/00q854YPj4zDX7JSJIN5DVCoV\nQrusnE3YH+znMSIKAj899wZ/sfwCTPjDBw8BOOh2o9nVHSc8jIPebnPBHeZ5ocC9xO5P5Zfqoz3N\nQaeD5VIJ3TCYdmkEZQcHbG4WstsfrhIZkoLRanHSE8AwTebXEmOJ4WmXhqkb3O7YDQCWksPtGpen\nOofqsAT9YjLJXCTK9Z42yCd8Plqm0Zd/+yiX35UYnnF78Ko2bnYq0V7b9p3LzgVDPMpmeW91lcuR\nSMeqUOafi/cIu1z8/t27tAyDow4vggBB1dFTQd8alzw6SzhTryELArppcj+bw2+3WxVjwG+34VHV\nLf3t23mE76YzHPS7Wa7ufBekdyE6rdpYfEkfsWgIPMjmiGmuAQ91L7/4ibf5d0+dfanXmvDBsx/n\nmokg3kPEYrEP+xIm7HH28xip6TpvTR/g3dUV/vTJEyqtFm5VJdeq82IXAmEcXLLKUuLlGxCsFcsj\nU98FwbIp2ASJZLZK3KxyIjRevq8xRIZ8vVCguIPqzlw4ylIiNXau7MJagrmpKA29jSKJOFWFa2tr\nffd5lM8jCHApHOZGJ0f5qNvLUY+XWlun3tbxq3YqzRY2WUIWRZ4UCuSa/Ye0Tnr9PC8USZiWeBOE\n7Vsg2yWJbK3WXSj0NriYTyT4qa98pfup3ctkORcK9S0EtmMxkeRyNMJianDB0my3eWtqmma7TUNv\nI4sCEaeTQr3Bg3SOYr3JIY+bgNPBYspaSADdVI7tFi8moAk2MEvbFZOHPnadr5W27pY3Dq6O3zle\nrnBhKtxdsKwz5dL42+98livbtPOesDfZj3PNRBDvIeLx+L4zsU/YGft5jDgVBcM0eXNqmvl4nFS5\nygG3mzsveThoKzY3dtgtqiSBObwZhmQK0IT55Y0KpVMZr6OZNuR+73i9/PEYflWAAy6NhTEro+sI\nwEqxRLITYXYhHB6a1WyacCeVZlrTiDlcXF/dqFabmGhRpc9X67XZuByMUDNatNoGAZudG0lLqJ8N\nBpFFEU1V+fraysBrARz1enHJCulajURlQzQ/zPVXajd/o+N6YHvf/2IiyaXohtjvpdlu91XLe68v\nV6+zXCyxVi7zydgUi4kEEkLXizuOxr2fzXImEuDuDnKE3YrKak+jmU+5fS99qC7d2PiMDb3/Mzzj\nD/Jrn/k805r7pV5jwofHfpxrJoJ4D6GMOQlO2L/s5zGyWi7xr58+Jex0Wl5Nts6IfVnO+oPcTo5f\nOdwKVZZhkx4+6vGi6BLXXwxWGnvj5EZigmKKXPCFkUUBQ4BkrUJFH786nKpVmZ2K0mobvCgUx7I0\nmNAXt5WpbRzQErC8u+u2AN00mXZqzK/0WzcEBPS22dcMo9BocKMnheFpJwVDEUWSpSrZWp3ZqdHV\nxny9wdP68OSMoMPRFcSb2arxxigEoNocvsAZpa99djsUrOtrGybLhSLNtlXjVxWRpmmOXfVVDJk3\nfDEwBZq0uZFPDn2sQ5Y56wvyJF8gUd04BFh5Bf7Q5+USx30+nuQLPMrmkBUR3TC4Eo7y9z77RTxj\nWFsm7F3241zz2gWxIAhfBn4dkIDfNk3zV1/3a35U8XoH261OmNDLfh4jbcPkXzx8gCqJ2AXrp2tY\nCsSrwCnLZMovfxJ/nV7hPhuKkis3eJYojNwir2zTWhmsbnDfWhmMc4v5fcyGIlxPb+9BbhoG11JW\nNVMELk9FWFzb+nEeVaXYk5ixVi7jUCRqepvDbg/PCkUuhEPcz2dpGgbmCIV4L50l6LQz4/PwKD/a\nX3wuFOLG2mjbiqYonPYGMTEp2R0ICJSaDeKdSD5xCyOCU5YpjmiTvB2jKsvZ2vBxs7KpFbjaOXQn\nAN36+pjFaskUWFjZ+J4uhsOs6mUyTeu1VVHkQiDCw2zOioDbxINNMWy7xWO3RK9uGCiixBGPdyKG\nPybsx7nmteafCIIgAb8JfBdwDvgRQRDOvc7X/CiTTr+aatSEjy8ftTHyjZUVfuIP/lU3SuxlaBsG\nf/3KLMulUrcqmay+mom9F7eicsjpIfUKn1s3DGbcHs57Qtx4keJFrriFTDNZrWx/4Mmn2of+/5Qk\nsriWYjYYHVtggSXKFlNJnMrWdRJNHawcHfJ4OBnw86xgHaK7lUoTtjuJOp1bJiNkqnWuryZpNtpc\niUQHEkiOer08zW5UfYcdOptxeri+lmBhLcmjdJ6H6RyJYpWjmo/ZcJSA4sApDV5zwG4n4HDwpDA6\nj3krvv/UKX7uk29ywO3mbDCIgJXU4VFVTnr9+BU7p/0BjnSExUF3v33ArW6Ixu5BwTEqxOeCIW5u\n8rXfSWVoVwwueiMAXAxEuJ5IUBoS9QdwxfVqrAwPiznmYlFORYME7HZ+8/NfmojhjwkftbnmVfC6\nK8SfBB6apvkYQBCEfwp8P3D7Nb/uR5L9uCKbsDM+amPkf7m+QK5WeyUdqR7l8wgm/KPv+DJ/+uQJ\n31pbI1mpWKLvZZ/etJIWok4Xz3IF7md2nyixmcNeD5qscjs5nmdzxuflaXV3Ig3gYdVaLCzGk1yZ\nirLQE/fmlGWcioJuGJSaTdo9Vc6I08lJr593Xwz36K4zTMh7VDv1Vn9Vu67rVGotFGN7S0K93WZx\nLUnAYeew30Ndb2OXJW7EU7R7fNybs5k1ReFuevh39TRfgM7ZsQNebeB2l6Lwojj+Ycz/n733DpJk\nse/7Pt09oSfnsHlv9/Ld3u7dy0QiCIIgAIIQAQYQDC4SMsUyZVXZllVi0VYwg0rFkq2yyZIpiRKD\nTdKkRJOiKAoGRRQCgfce8N67sLeX9u42zk7OOXT7j9k0O3H3bt/bu+lPFQpvZ3pmOvyu+9u//v2+\nvw9PTfHW1hbFep0rfh+fu3iReKnI7XiMj8/M8s+//S0+eWqWX3vh4YKoAAAgAElEQVTzrd19lC5X\nMEoSlzzetgyxRa/jaiBAvaGgCs1tyfTJVutFkVSh1DHc89Uad0Jx5nw+1rK94+dpZYgdRiPLhRR6\nUeJ3vvdT+LSBG88Nz9q15mlw3IJ4DFjf9/cG8Mox/+YzS/UpjZvVeH551mLkRy5e4KzbjeUp1KPN\nOp38xJ/9GXVFYdxmI1kuM+NykoodfSqdJAjMe/w8TqXZyuTZyjz5SFsAn9nMuM1GKJNnLXU4Bwyb\nbIAB9IpO6PyAz7FvuEO+VOWaL0ChUmMtnaVcbFCmWWaioiJLEgZJoqEqxNMlPDpT39/NdYjBhqLs\nTojbYdru4J18FJ/ZzGaPqXT7SZbKJEvdxwEXD2SbZ+xOFov9M1kCTcEftFgRVYFMudxxFHMn5nw+\nXhgJ8r2zswTM7+PrGxt819QUOlEkaLHySx/8EADvGx/nj+/ca7thqDQaLEUTXAx4Wup4HyZSJPZt\n6+WAj5uJ3o4mlz3eviUta+ksWbHa8ybRIT2dS79DNpLJVfjXH/kYAbPlqXynxsngWbvWPA2OWxB3\n+ifZ8swrGo3yhS98AZ1OR6PR4DOf+Qw/93M/RzgcxmKxIEkS2WwWn89HMplEVVV8Ph+RSASrtXnX\nn8/nCQQCxGIxBEHA7XYTi8Ww2+00Gg0KhQLBYJBwOIxer8fhcBCPx3E4HFSrVUql0u77BoMBm81G\nIpHA5XJRKpUol8u778uyjMlkIpVK4fF4yOVyVKvV3fdNJhMGg4FMJoPX6yWTyVCr1Xbf77VN4XAY\nabvB43nZpufxOL2X25TJZCiVSs/MNl02mbDrdKyurj7xcaoYjXw6GEQWRRbLJS4Z9KwVC5w3mZmW\nZd7O57hktqATBN7K53jZZmd9uy51wmjkzVyWF6w26qrK7WKBa1YbqmQgnMvzqsXCN2p1vsPpoNBo\nsFwsMW+zslwsYdfp8Bv0fCOd4TucDrL1OmvlCpetFu4WivgNetz6vfetZjNvxxIEanXiSoPXnHbs\nOh3fTGd4zekgVq2SqTc4bTZxM5fntNmEWZJ23zca9NRMZmZMJgqSgXGdhE4QWCyXOK3XE6pWMEp6\n3MCKXscL9u1tyhe4Zrfh1eupqyqTJhOPqnUC1TrFhkJekrjicrBcKOHQSfiMBr6ZyvCaw0a2Vme9\nXOGUAHaPG+o13Hr97jolazVi1RrnLGZu5wq86vMiKgrfSGf4oNtFtlZj1mza3aZ5hx2DqvJQJ3FG\nJyLYrRQbCtMmmbezOS5Zt49TNsfLDjsb2w1v47LMm5ls2zatlMoYRYFZ2UC0KO0eJ0EQ+ZjXzXJx\ne5sMht11ztab23TJaqEh6jCgw11rNLfZ5cBqt/FtpcF5i5nFfIFJ2Yhdp+Mb6QwfD/h5ZWqKXKPB\nBYuFgN9PJpMhmc3yXePjhDc3O/57Om/Q8YlTUzRyud1tuuSw86VonFfMFi6NGFkulRmTRKKNGmM6\nHSPG5jpflWUcDgfLpRLzVivLpRIOSYfPoOcbmQzfHxwhX2uQMBq5ZLNwr1DEtx17+49TFZF5R5DN\nRh23TkJSFf48EeE1m4NorUqmUec7bA5C1QpnZDMWSeKvc2neZ3MSqlaoKAqnZBNv5bNcMlubx6mQ\n5RWrg/VKc5tOySZS6JjVGfhv584S1BtZXV3VzuXP0TbF4/Hnbpv6iXyhW8PD00AQhNeAf6Sq6se2\n//55AFVV/8nOMt/85jfV8+fPH9s6PEtUKhWMWv2VRg+GOUb+/OEy/+Cvv3boz+kFkSsuH4VyDYts\n4O1EGFEUmLU5WU1lOlqG9cKi13PO6aZQqZFTqoT2ZT9nnE4eJdNHHrELELSaEfQCBlXHavrwpROv\nBgKUFRWTTseb2/7Ac34/oCIIEMoVWmzJDjLrdvIw3XsS3ELAz/VoFLNez4Tdzr14sxxk3u+nVld4\nkEhS31fq4DbJeCympzJJ0Gs3oRMEJq0O3tzc6rmsLEmc83i40aGxzGc2k22UKXdozPSbzfyHH/6h\nI01VfJhM8U//+nU+NnuK909O4DWb+B+/9GUy5TI399X+LgT9XI9GQIVJm40xq51b2VjL4A6H0cgp\nu4N0vsx6Osdc0MfNDv7H+5l1OnmUaI0bh2zklMfJ9XSYOip2STqUV/V+xiw2pIpAsVzjn3/io1z0\nD9fwhmHheb3WvP3222995CMfebHTe8edIf4WcEYQhFPAJvA54PPH/JvPLMPo+6dxOIY5RjaTOYKC\nBa/FhGzQkWtUKNbrFOs1XIamSLqb3asntesMnLG7WE/ldjvy3bLMuM5GOF/gYSHNtNNBrFogV+vv\n6gAwYrXSKDW4sW2VNj/hbxHEDqP8RGIYoNZQGDXa2CgcbdjIKCp/Emqu37TLgd9u4Y2N0O77Fr2e\nGaeDR13E9sNkmnM+D/cS3Wuer0eimHU6lIbSIoa7uUEkS2VMOh0mXdON4qhMOuzki1Ui5RJKWeVa\nMEC4UCCUay/JsOr1uGS5oxgGiBWLTDsdRCuFluEdAG5T/9KRbsy4nPyN82eZcTn5n7/8VdwmmXS5\nuf37UesqU3o7iUKRUDRPKJrHbjKyMOJHEgQS+RJr6Sy3snv79EEsiUmn2y33MIgi5zwexJ0a/QaY\nJB01i4LXamYtmyFRKpMpV7i+GWHW7WJLKfA+i/VIPsRnnW5C4RyKqvLrn/qYJoafY4bxWnOsglhV\n1bogCH8b+CJN27V/o6rq7eP8zWcZw/bkHw2NbgxTjCiqunuhf319k3/79k0aqkqs0F5gm6aCJAiY\nrBKlRgOP0YRQocWayiA1BzusZfbGCa+kM0y7HFQa2b6Z4lGrlXK+3rXxSZYkKl28aQ/DhNnOza0o\nRp3E1WCAilInWiwSLw5mAyfsc4FYSWVwmlvdKAq1GoliCadsJN1lWwxieyOcJAio7NmNFQ/U4Ep9\nGic3c3muBHzcSSQOnZUH8JpMxDKF3YxurFgiViyhlwTOedzcO9AIOe10sNjHRzpeLGI16lsE8ZTD\nwb/8xMePlB0G+FdvX+eP79znU+dOs57NUqrWuBdLcjnoa1muXlXYzLTe9GRLFfRVkbdjnSfXlRsN\nrvh93IhGCVosGBWJ25ut23gl6GMjm2Nju2HwStDHg1SSUr3Bw2SaUZuV8hH2vyQIFLM1KvUGv/jd\nH2Q+qE2ge54ZpmvNDsdquwagqup/UlX1rKqqs6qq/vJx/96zjM2mTfXR6M0wxcibGyHWM1l+6+0b\n/PJXvtHiiNAJs16PXmgKuSmLndSB5qxLPl+LGN5hJZVh0uLArOueHxiz2TqKYZOoY9Jq4wVPAGfD\nSCZdxm3sbIc2CBc9Hm5uN01V6g1ubES4G0qQypS47PYyam13SzjIG7E4o/a9OKl0sD3LVqpNG7Au\nu/RhItWcrrfNKYcDB0YcGDnjcnX8TLRYbLNFsxr0TNhtu2L5ZiSGQZBY8Pux9LF3O8ik3d6xvKHW\nUAml8y3rC7Qd/07Mul1ESq03WJ8+e2bgSYGd+Pd37pEolfit67eYsNm5F2sK9ei+G7nLbi/3uriO\ndLKW20++XOWqP0AmV2E90/4UIX7ghvFWOIZdb2RyOyZCuTw6qX8G/KzNzSWjF3NBh5yXeNk+Qjhb\n4G+9dJXvOT3T9/MazzbDdK3Z4dgFscbgJHo8otTQgOGKkWujQX7hS1/hqysbRPLda16hmb0a99rI\n1pv1l53KFhI9MqyPkmlmbO1CTxIErvkDJJPFNjFsNeh5ZyXMViTPzbUoiUKJaL6IVdFhO4Kgsur1\nbCQ6l0moKiyF40RSeezoGTfZmPf7Oy57yWrBZ9+zv7oTTXA1GMApt9YD3o7GuToSQN9hKl6xXuec\nx737t6SIpMsVMuUK5XLnkoeNXI4rQT8TDhsLwQBjNiuFSo31TA67wciorSnmC7UaN8JRTrvcHb+n\nG1vZ7k4V+WqVKYd992+3SUZUBS55PZz3dP+dR8l0mwPKJ2ZnD7VeB/nw9N5j5v3DO3b8nc86XTyO\ndq+lFnuU3HjNJhp1lRsbUSpdSk9CuQJ2Y2t2L5ovEs+XOOVsWmmZajVcXXysJ8125kw+HofS3I8n\nqSkKEw47b4XC/MDFs/z4/KWu66fx/DBM15odNEF8gnB1ybxoaOwwTDFikCR+9MpFFqO9rai8ZhPj\nPhuL6b1Hx9Vau1jIVCrMBXxdxz0XqzXOuz3MOJ1c9vp4wR8goDNzYy1KtdH+iPmU07k7dng/oWye\nUYO1o9DshkEUmbY6+g4wUdWm32wok+PmRpRL3vYaznuFYlvm9/pmhHShwgWPB7dpTwhd34qgKDBu\ntXIt2DrIY/+mGfdZuW2mc5x1dxaZkiiwkc5xfSvCZja/+3Wpcrkp9PZ9f74yuK2TJAhs9bkpMuyz\noRu32djI5liKJrgXS7IQ6HzzkKtWOevc25Y5t4+/uPeo6xS6QTjt3vs3un8bR2QLp80OHoVTXcUs\n0HWyn9skU68prKXbn3IcZMrZ7iFbqtWRxaYoX8oWmDW3nkt0CLzkGCEcyXN3X/baYtCTr9f46OwM\nf+/9rzbHkGs89wzTtWYHTRCfIEpdRn5qaOwwbDHy0dOnuOjr3rgzP+qnoKvxKN/aIHawNhOagvh2\nLIa5w6Q1p2ykWq3zIJRkNZzhzkac62tRIrkOhsAqnHY7iWa7C7SH8RTnrG6EAXRVwGzBbzCzFDnc\nZCgB4ICushr0vOj1sNjBq1YA7kYTGASpJSuqqCqbuTzvbEVaptRF9wlQ9UBJcbFYwyW3ZxijuWLX\nB/4b2Rwm/d4XWQ9RoygNcHNxO5rgotcDNEtC9q/H9a1oSxzJOokxm7UplBvwgifIVVeApVCcf/Pt\n6z2z0b1YTqb4V29fB2DUZuVRMr37XqFcbZm6141itbM/8qjV2ndwxw5il/11N5bAZjTgM+pJF/ZK\nSs7YXEyIdq5vRFr2m6yT8FstZMplfvraFaQj1lVrPHsM27UGNEF8oiiX+9e8aQw3wxYjOlHkR69c\nANpF0Xmfh7dTEfL19ka2g5lWv8XMQiDAhN3RJipmXU4kVWAr1zsDCTDn9zJisfAolu7Y3Lefu5EE\n13y9G49segNKVSF0RAGWOlAGEpQt5AulluluB4nkCkza7G0jmAMWS0ujXGLfBXE5mWypbQ1l8mQy\nZU5ZHFzzBVjwB3ghGCTUY/KbQHOE9Q79amX3U20ovBQMctHj6XqTIQCP4ymuuH2UizVe2JcVFoBC\nqcKk2YZZlaiVG2yl8tzcjHIzFOX6ZmS3drtYq2PQ9Z+ud5D78ST/05e+wqTNzrzPR7nSKmwHzTo/\niCVZ8LVmtKccdhbDg98wpUvdhfOU3Y5bryddLjPv8DNn8rESyrBx4CZSFASmXA4epdL81LV5Trmd\nA/++xrPPsF1r4Pht1zQOQTAYfK9XQeOEM4wx8vL4GD997QqRfJE/v7+8+7pskLpO43pxbIRqvUG+\nWqVUq7OVyxPNtwpYr9lE0GJlMRwbyCjNpJN4GEtRPoRt2I31CBdG3dxJtTogLHh85ApVAnYLr++z\nRDss4VwBm9VArlplzufjdihGfAAxdzeWwG2WGfVYuZ9o1rN6zCbCxb2bAkWFy34fi7EYTlkm3pYx\nElhNZllNNh/hjzls9BqPNj8S4Hq46Z7gM5kIJ/LMebzcSrQKPYMoMi3bUVQVh0VmJZ9hwmLj5nqE\nhqpy2uMkXCmQ6+DoccrlYjHcLLGJFopcHfWTq9aoKwpOWeZGqPn7Uy5HV4/nCz4PPsvhRxB/cfkR\nj1LptteDFgsOgxGjYfDL7eJGlBG3ha1tv2inUWaN/qUSO2xkskii0PHGSC9KfDORwizLLG10FtkG\nSeKs182taIwJu43PX7k48G9rPB8M47VGyxCfIMLh8Hu9ChonnGGMEZdJ5qOnT1Fp1PmZFxd2M8Wl\n7QycftvBwChJnLI6eM0zyhvrId7ZivAgkWIjm2txqJAEgfmAn2Kpxu0BxTA0vWkPI4Z3WImkueYN\n4DQaGbfaWHD6WNyIsZrKkCk+eRZmxGThqt+PVWpmfF/1tNePdiJZLHM/mmIh2MxGip1s01S44vNh\nFfqXN2xmcsy4WrOI004HC0E/U04718MRbHoD1/wBahWFRLGEqLT/5mmHi0eJNCvJDDfWI2RSZRY3\nYrvH8FEizWln5/rGg+Osr4eiPIynWE1mdsUw0FJHfZCfeflq3209yB8t3uFeLMGIbc8FxC3LXAsG\nyBQr3I8neTsU4YxvsEZCFQjIe6J8LXW4AS0NVcVn7izqM6Uyr7kclDq4j0Cz1MNnMXMr2vy38Xc/\n8CqmpzB6XePZYhivNVqG+AQhd6jJ09DYz7DGyKzbhaKq/OHind2sV65S5QWbn6WtBCZJpFSrs5HK\nskGWCyMe7sT2GoPG7TZ8ZjOpQhmH0cDNUO9pX53YzObxmOSB7Lz2U2so3FxvirE8FcLsPZoudhEl\nh2E5tudYcN7vIX0IL2SBplfz/KgfoUPdqRGJdzYi7R/sgtpQsRsNZCtVro4EeCccgW0tJ9Is6bi+\n7/tC6RyCCuq+n+7kgXwQs17P1WCAuqpQrNbYzOXRSyIPE4NNwtvM5Jqqs8M9QNDW39ruIHpBJFOs\n4DQYsbsM5CoVtnIFUoXWWMnXB28kvBNOYDXrsRgMPevVu+E0yYQ7NCJuZHJ4XRZy1So6UWiZKHja\n42Itk6WybW/3c6+8wGsTY4f+bY1nn2G81miC+ARheoLpSBrDwTDHyIjVwgWfl2+ub7IQ9HMvnCCc\natbe1g+4PTwIJ1gY9aMqKtF8kVAyRyjZFKIjdsvRVkCACVe7v/GTYDxCrWo3zrrd3A8l+MipEUgN\n/nhdABa3opwPtDYvmnU6HsSSnT9EU+DqJLHFgWMllUESBQJmMxvJLEHZgtdqQieJ6AWRt9Zas07J\nUplLo14Wk3uP7vsN+AC4H0uQ2JddV4EZf+tNUC+ihSKjdmvbhDujJDHptHf5VCuqqvKrX30do07H\n71+/PVBF9GY2z6TTxka6/xTCuqIwa3ZhNx9NEBu6NMDVFAVRb0BRVSbtdlb3uVZUFWVXDH/i7Cyf\nm7tw6N/VeD4YxmuNJohPEKlUCrt9sJOxxnAyzDHyk1ev8Itf+hrfMTbK66u9624VFW5utmeBT7m6\njyweiCebytzGwWESABa9DlEUyR3Clgyak/IAXEdYR0WF9VQWv8lEqdFg2u4gWyx3HPxg0um44PGw\nGIpRrynMuB3IRh1L2yOcG9s3ITvseEhfG+ncYLiVyuOWZZLbTTzdbMd2cMrGFjEMzcNysCmsHz6L\npU0Qf/L86a7DSg6SLpfxmE3oJQmvxdy3yRKaZSmp7XXXiQIXgz4EAcLZApEOTZ33ogmmXYOVwByk\n0xCTHc5ZzLweS+A0yaxnsiz4Apj1eixmA6ecDl6ZGOVvXDiruUoMMcN4rdGi/QTh8Xje61XQOOEM\nc4y4TDI//fIC96Lds5b9sB8YTnFYDmaij8qo3cr8qB+L0cDVYIBrIwHmA35mnU6KlTqVSp0zLldP\ny7mDxLdF6DfDSS55PC31rIOQq1QZt9opFKrc3oq1iOEzbhcLfj9X/QFkVeL6RmR3X6wkMzyMpJqT\n77qgEwQyXZwP0qUyUgUWXD4uOzwIfXZxtlJts3xzm2RyfTycDyKgtonfP7+33NWy7CA3t6JsZnJ8\n8e5DPjA9wSfP9x/oMet2UtguaRl32rkRjnJ9K9qz4W4lleFqFx/lXvSK1bXtmy0JAZcoc30jwusr\nm3xgeoKXJ0b57KXzmhgecobxWqNliE8QuVwO6wCjWTWGl2GPkctBH5+6cIbfefvWkT7/JAMXYLD6\n1n6ccjsI5fJs5rpbrdUUheVEClEQmHU7edjBveAgOwJmwmzk9XACFfBaZEQEdJKIwahjpU92PNll\nmp9Jp++Ycd+/vqVSDZvB0CZML/t9JArFFk/ett8tlUlul6Kc8fYeCKCoKtMuB6mtvSxxolTGZNB1\nbRQ7iEs2spbMMutyYjcaQYBUqYRVNlKu1Xe9qu/HElgNBkYd7WL/QzNTfGimOZVuJZnm9965zVmP\ni5V0puMgFwDjvvhZS2c45XaylsrgNsms0f3Y3NiMcjHgoao2WE6kB3pSoeslaKtVpmx27m7GdxtF\nP3nxNGZR4qOXzvf/co3nnmG81miC+ARRPWSGQ2P40GIEPjt3npVUhrqi8I3VjUN9NnvIMoT9eM0m\nlnvU1A6K1WikPKBrgKKqTWHTpQGsZf2sJjYzOWzbwzUEILmvqevKeP8sY7fkaKrc36Q/VSpz2uui\nUK2yIwfPe93cDveeNHiQQe5ZbmxGmHTZWcs0618FYNJh5168/fhMOey4ZRPVep1CtUayWEapqdRR\neJRoFekC8L997U1+4SPv4xsrG/zTL3+TD85M8nfe/yIP4ikuBrz85hvXyZQr/HcffBlBEPi1r3+b\n33t7cTfZLIkCpxwOLAY9OlFEEJujsEVB4HY4vnsYFQVW4mlUaGk07MbdSLMkZdppR5VgNdO7Tryj\na8g2VkmiUqrsimGzQc/3np/h2vhI3/XQGA6G8VqjCeITxDD6/mkcDi1GIGCz8PMffo0/uHGHKyN+\n/tPd5YHG2QKsp7OM2iyEBhjC0YIKHqPMg9xgLga9GKBnrIX7sSRXRnxkypWeImg5lcZvNfNGvLPY\n3nE8MOl1nPO4AYFctcJKKrNradbtMflmNodA//La5XiK2YCLB8kUqFDpMEK7GwZJwmkyNkc890Gl\nWSaxtm9/7AhAn8lEQ1VJlss4jUbyxSrrifb9Nj8e4HqoVYiqwHefOcVGJsuvf+MtGqrCH928Q7lW\n54t3H/L+mQm+8nANRVW5E4lz1ufm/711r2W/NBSV1Q43PAujgY5bdtiS77V0Fr0oMhf0cavHWPNy\nvXu2PIWOVLHMD86f51LQx4zHyVnf8D0i1+jOMF5rtCKhE8Qw+v5pHA4tRpq4zCY+fekMX7r/aGAx\nDM2Mq89ySJcJtdkQ9iD+5GJ4Zx0Oy62tGGupLBc8Hma7TAzLVau4rCZe8XZuwlpLZbnk9WJoiNxc\nj3JzPcLjSBozOq4GA+hEkUoXn2Wv2TTwXDmbvulZ7DbLrAyQCZ9xOxmzWanVG8RyRR50yPJ25ICS\nvBNN8OrYKMlciVyxwkWPB0kRurqCLIaiBKztsfDOZpif/fd/wcNEinihBCq8ubZJTVG4vhnBb236\n+y6GY/zxATHci+Ih7PD6UVMUliNJJh129NtpfVEAlywTtFq46PWgdhjKccnvxas3EhRU/sknP8z/\n8J2v8r3nZzUxrNHGMF5rNEF8ghhGmxONw6HFyB6jdhu/8dlP8F2zU4f63EoqM3BWTi8KXAn4uL45\nuBdvP3qNVe7H3VgCejSdrWYyxMqdH3UKwJ2teJt7RaFa48Z6hGmrvasdmNs0+OS2e5EEk3bbQE19\nZ7wuNlKZI42uFg4cRQEo1+qoNPfx3Uiip0VeQ1GZcTnaRlj/53sPm0J4G4fJuOua8RMvzOExH+3f\nYOqIo3AFYMJp5+poAK/ZxHmfB7/VzIWAl414FqWi4jeY0dVFMrky0VSBu1sJTLrWB8BXgwGWNuN4\nLBZWsgVemBi+DKDG4AzjtUYTxCcIg6H/NCiN4UaLkVasRgO/8vEP89+89sLAn8mWK5zrkhHTiwKj\nNitzPi/XAgEueLwsbh2uBrYfxg5Wa4dhvUfZhKKoZA9RprCfR4k0l/0+HEZj08N2n2436wavrivV\n6qTzFWw6Q5vY3I9TNhLJFqgd8Qahkz3bYcpRZjxO3ngYYtbd2sQX3i6nsRiawz/kmsDCSLP++vXV\nTW5HOo877kemgzi3GvQsjAQ67qf5ET8TDhtzQR/rqSzvbEaIF0rcjSZwmUy7N2kqEC8Uu7pKSKLA\ngt/PjfUIAs3SkkytQa7LjZOGBgzntUarIT5BZDIZnM7Oj0M1NECLkW785AtzmPQ6/tlX3xhoeaMo\nccbtQieKTYGqQmTbCzZcyROmmbFcGO/snfskXA9FmB/1cz+WpNSjzrMbOlGkWlc6Fp+aDXpmrSYe\n5fs3wXUiX6yQzzXt0QyigFmvx6TX8Sje3+Wi5XsqVd5cDWGQJK6OBLi+FWkrLZh2O7nxBJn3zUyO\ncbuNjexeVvtg1rgXDoNxVyDuIAow7rDjkU2gwK3HzfXLliqMeqy8ud7b/7obOlFsa3LzWszIosTt\nrShmuVV8+K1mbmxPU+xkFSgNsJmSIOI2yXgM8q5DyLTLzr1ogs+dHsNvO+KAGo2hYBivNZogPkF4\nvYN7jmoMJ1qMdOcH584TL5T47bdu9lzOZjSQyBUJZfo/pu9WU/uk3AxFmXDYcFtMbGRyxLvYnXXC\nKRspFjoLaZNOz63U4csPoOnzvL5vwl1DUclVquQqVeymo/k3VxsNrm9EmPW6SJRKLWUDlSPcDOxn\np6xhymnHbZaR9fqOWdhu7NT0qoqKSSdx3uflcTzNeiLLOlkCVgui0BxaUmuomNSjXS4lUeCM1022\nVEEVVLayeS4HfawlMiTKRS6N+liMtD6FyJYrjDls5CoVbEYDrgMjwweJS5MoUSxWSWf3PmfS67EY\n9AT9h/c11hguhvFao5VMnCAymSeYoKUxFGgx0h1BEPj+i2cYte/VrrplmSs+H9f8AS56vDhlI16j\nPJAYBlhLpJ/2cLpd1jM5boSiJAslXhsf5bTDydVggGmnnQteD+e9no42aIYe5QtGncis7Wi1f71G\nFpt7lD4MwsN4CpOkw6LfW/dEsTRwQ1ov1tJZroeiLIwG+Mcf+9DAn4tkmqURt9ajXPR6ub4RIVPe\nGx4SyRe4NLEnHFdiaS4HfIdaN4tBz2m3mzvheNMSz2BgzGZjcTNGdrtkoV5XuHCghKdcb7CZzZGt\nVHl9LUSmUmF+dO9pxSDjwxuq2nySsM2Uy8GdaIKffHGOD4wdbjs0ho9hvNZoGeITRK329LqQNZ5P\ntBjpzZjDxu9+7tP88n/5OtFkgTtbcTLpPfHgMBmJVfqP2FeT/NQAACAASURBVN1BFEWmzXYkSUIn\niaSr5d0a06eFChQqtY5lCU6TkWmPkzuJOKXtrKDLJLPS5WJllHSYhaPJzFq9e7eeXTawNbiZR0e2\nsnnO+t3cTyRRgWi+yLTbwWoygyTAGbcHVVW5l0geaUR2rlIdSChCUxyux/b2YaHS+d+VcKDMQX+I\nHNKIzUqjoXAvmth9TRJENvc1Lk65myUMeknEazZ1fVKgqCpL0RjjDhsb6RxekwlV7S6MBaBSq3PW\n5+b+tne2rNcx5rDx/ZfPkok+vSZRjeeTYbzWaBniE8Qw+v5pHA4tRvpjMej5x9/zQWK5duGbKVU4\ne4iRpDMuJ6vJLI9iKe6HE1hEPdKAo30PQ7hLxjpdqnB9I8K0zckpm52rwQCrPTI3sk7X1Ye4F3pR\n4HGiu62cWfdkGeId7keTzAf3Mp16SWTB68ehGnmwkWB5M8m1wNHqtmc8zoGOjUCznGA/64n2fXba\n62J5q9UCLp0v954At42sk6jW6rvuFNCsBb53oCHPud3JX2soLU82OlFrKLjNJi75vTyIpjAIEj5L\nZ/ePhbEA9yJJlqNJFkYDTG8Lb1EQcJpk7TxywtlvzdipefTdYBhjRBPEJ4hh9P3TOBxajAyGXpL4\nex99DblDecGNjQjzwX01lCoYpPZT4aTTztIBh4nH8TQXvE/Zs1VtWp/14l40gVOWubEWoZKrseDz\nc8nvRda1CjsBuvoQ9+KC37c7tawTq8nMU7sRSBT2ROKDeApFVMmU9koVbq1FmbC3j0rux6zHxRmv\nG0eHJrQdzHodl/0+7kdaha7XuicsRUFgzu/jcSjV5h28lsjgkYxcCfo7ehjvcM7nYcxh51LAy1mf\nm7M+NxcDHg4aamxl9rLFvTL0O8QLRZbCTVEdzRUolauc9bpblnGZZB5HUow7bahqM949JjOyTsfH\nzs0A2nnkpLO/AfO9kcPDGSNaycQJwnLYgQEaQ4cWI4PzvtkJ/sXnP87P/8lfEc62ljk8CCd4aWyE\nekMhkskTzhbwmGW8VjNmo55MtUK+WOnoGby0GWdhws9iNN7V6uowOGQj2UKl73I3QlEWxgPc2Iiw\nuN50DbAY9Zz2ujBsC2OhASbZhE4Ue66bQZKYdjuw6PSkCmVurUc5N+Jpeby/n1SpzITLfqghKN3Y\nSOcYd9vY2BaDG4XW7LiiqujrIoIKah8NPmq3EjBbaNQVBBUaisIPXDnHb73Z3lg5F/SxmcxxO9Ru\no2czGSHXXJ/5oI+bq9GuvxnPlYjnmqUNBlHAbjJiMuiwmYyUaWA3Grm1HmkbQX020CpczXodHouJ\nUYeNQqXKajyN12ImXuhe0pM54GVcqNZ5GEsyP+pnLZ0lW64wabdzazOKKAgEbRZqisJqOsPHL8zy\nX710BdDOI88SvUZwHyfDGCOaID5BSE/oT6rx/KPFyOE46/fwjz75IX7uD/5idzwxNJuWUvlSS91u\nqlgmVWwKjlMeZ8twhoPcXI8y7rKRa9QGrlvtRsBmQakpGPU6LAY9sk6HoqqIooCiqISzefLbmcrF\nrRgTLhvrqaZ4K1Rq3N1sfQxvGvVwxe+jUq+TrVbRSSJOWSZVKJMtVUBVyZYrLIf2sqQCzZuEUbsV\nv91Crlrl4YHJfC6z/FQEMYBHNu0K4kSxxMVRD/dDe2J8NZFhbtJHqlrBpNchCQKS2BzqrBNEKpU6\nkXSBcDhPZNsibzmSpFip8cPzF/mDt5d2RxdbDXrGbDZub3T3ky5Wa0iCwJWAn5urg9fXNhSVVKFM\nqgCk8syN+bi51vnzyoGbq1GnjTvh1huQc3ZbT0FcqNaxGfXk99U8KwrkihUy2XJzKEmjeSOULlXw\niiIOq8zDRIoXJ0bQbT8J0c4jzw6Kqr4nongYY0QTxCeIbDaLy+Xqv6DG0KLFyOGZG/Pzq5/5bn7h\nP3yZUm3P6quXc4I4QHnARiqH32bGazH1FM/9kAWJQqlGoVQjSfv3qMCsz0my3BTspXoDi1HftRFs\nxmbi95c2dv++Mu7nRheR1vI7Kmxl8mxl8ghC04P5diRGbVtgPc1SxsWtGOf9Hu7Gm4KwKimotPbS\nSYpAqE8n387yJr2Opa04r86O4zLL/MjVi/z2t24yYrOiR+BBpPc46JVEhhfGgryz9mSPicUu9cUG\nqekJvB/r/sEHarNmmQa7Vm8dEWDa42RxO8stCgIXAh7Mej2ZYoVUsYxhn5CRDToeJlJ4zCY+NDu5\n+7p2HjnZqKq629D5MJzEZ5Nx9ijROQ6GMUa0GuIThM+nWeFo9EaLkaPxyqkx/uXnP4nHsmdJtrQV\nw2ft3JQUzuQHMjqI5oqYBR36ARqtDiIJcM0bQKoLnPW5uy4nAI9iacQGTLsdxPJFZrydL1TTHgcP\nMq0Z60exVFutcT9UFW6sR9CrIhf9HhZGA1QbT8+TWVFV1pIZJh3NWuHlRIrLUwe8cQ8hwEu1Okuh\nGO7t4/tfv7rAqNlCOJVnI9V5HPV+BLo7TTwpsk5iwuHgUTSNKDRLJS4GvDQaCma9joVRP2N2Kw9j\nKW5sRJh09K4BjxaLu8M6Lo14WdqK8+21LSbdzc/t320OS1OE/9gLl5H2xah2HjnZJPfdYJ8Z8bzr\nYhiGM0Y0QXyCSCZ7ZzE0NLQYOTozPhc/9vLl3b8VIOjofKEpVGuc9Q/WPLeRyg3kT3vR4+Ws2cU1\nb4Br3gBe1cTNlQi31qMsh5LNRr8eIjBZLJMtVjDqJG6HYzgPZBwB1DrM2Ftfz1dqTLmcHT2N+1Gq\n1bmzleDGeuSJR053+u5ssYpLbq5vvtEqSLOl/nXV+/mJ167s/ncsXyScLQzs3qYTha5OH4fhoCOA\nXhQYt9t5FEuRKJR4cWyEek3hTihOOJ1Haajc2Ii2+GJb9L0dPSL5AhaTnoWxAKIq4DHL23HT/O18\npelvHLRbKNcb/PDCBT59+WzLd2jnkZONx2rma3dXqe4bXqO8y24TwxgjWsnECeK9slfReHbQYuTJ\nuDLWaul1azPG1LYX7kEOox8j6TxXAwGipQKb2c7CqlqosdLDEu3WepSLYx6WujS2AaQKZeYnA9yP\nJQlazUw67VRqdcpKg9VkhnSpTKXWLpTvRxJcHPFyOxw/kscvPHlzj0M2csrpoFiuoZdEDAYdKmDQ\nizzOZLBJrUIwfcja7HHX3mCRw46EvhDwstijxnhQDlr9XQr6ubG+ty7lSn2vBIXWiXM6UWTK7aCu\n9m/UDOXyGCSJtWgGnSjitpi4sdFsBIzkmvE36rTxwTNT/NDChbbPa+eRk8+lcR/riSyz282Y73Yd\n8TDGiCaITxDD+IhC43BoMfJkXAh6+fxLl/m9by02XxCg0qhj1Elt43DvhhM4LXKbMBMFgfN+D3pE\nGqpCNFUgGi0QixZQgUm3DbfDhCAJJCtlVtMZUGFzgEf3erF/FnZpM8aFoJdbG3tOCBdGvVwIeLkT\nirNZ7iyolrbinA3sDWo4DG6zjFSH+YCf+vZ+0hskCrUaVn2zFjZRLrGW6lzza9brMKs6bvVwb0jS\nKiYPmyHeb5EWtFlxm2WSxf6iWhQgM4DLxyBsZfLM+JzN+vTtspOD67gw5qdYqRPeHuGsoKKXJNYS\nGR5FU1yZHsyHeSWVwWsxkSyUdh+xm/Q6qtvHp5ypcsq+d5MQzuQoVOvM+lzaeeQZwG014+5S0vVu\nMIwxogniE0QkEmFqauq9Xg2NE4wWI0/Oz7z/KhvpLF99sAZAOFtgYSzA9Y32rOKky94iiIN2C1JN\n4N5qq7ODsO//t5I5tpJN8asC104HuB2PUxugBrfeaBWzNtlAwGqhXKuD0LQsqzWUttKKO6H47u+f\nsRv5dpfvN/SqJVZh1uvEIEgYdRI1tdnophdE7m8lwMGu3VuXjzPhsuGxm1AUlWi6gFEvYTTpMQoS\nS4fIwNpl46EFcWOfzdz8eIDf/PFP8YP/+t91tM7bv9JXRgNtwvWoCEAyX+JxqX3qIDQzwo/27cPb\noRg6UURRld1GulKfWuZr/gDVWoOHuRRjbltLvekpj5OlUJxJlx1FgXMj3t33NlI5/ve/epPf/qlP\na+eRd4n9zXHPGsMYI5ogPkFYrb0nFWloaDHy5OgliZ985Qpfe7C2qyuXwjFGHdaWWk5ozVL6rWaq\n+TqZ4uBCTQBuLke4ejrIO5neDgYCzQyfXTaSLTd/Y9br2hVr8+MBNrbH/vZ6fJqudX/k3snSy2cx\nM263sRbP8DjcWcgBVPoIegEIpXKEBsiE98MmGw4tiB/GUlybGtn922c1YzMau5ZeTLrsjNqsvPE4\n9ETrepBMj/XeOa77qSsKc2N+bm02hXIolUMShBabwB3cssziepSGojI/GaCuKEw57FhlAzbZyBuP\nNhGE5nKXR3yYjXtlKNNeJzpRRBAE7Tyi0ZdhjBGtqU5DQ2PouBD08sqpsd2/qw0FBAHjgQzq/uxi\nwGw5lBjeQQCuL4dZmOj9KPzKRIC318LMuBy7GeBSda+ppqbsCVJh262g2+914nzQ0zagJGi1UCxW\nubEW2fVg7sZBH93jxGo09F/oAH/4raVmJn2btVS2RQxPuRxcHQ1wxuXCgo6NSJb1+NPxVd6hmSW3\nd31///q1fE5VMet1TLsdTDsc2Lps/ym7Yzcmb6xFuL0WYy2ZZSkU541Hm1wY8TLpslMp17k6NbLr\nLKGqKm883uSUb7hstN5rntXs8LCiCeITRD7/5F3OGs83Wow8PV6cHGn5O5TJcT7obXnNsu1VPO60\nsbT2ZE1X0QNi9CA7gvfmepS5oI/LQR+VbQHlMsvc2WqWRdiNBlajGarVBpeDPi4EvUy7HVwIeLky\n4set71wWkdt2H5hw2rg6GmDO7yOXr7SI7l4cvFk4TkxdxH4vsqUK/88bt1v+lkSB014XMw4H65EM\nN1YiPIykdrc5kSs+tZHUOzhM3UdHK6qKz2puy/A3FIVSqc5qNMPSZpxJR7uotur1bMXzbRPv9nNn\nK46qQr5c5dUz4y3vzXhd/O0PvwRo55F3C1VVqT9Fu8J3k2GMEU0QnyACgcGaKTSGFy1Gnh5/fP1e\n22v3InH00t5pMVep4jLJ6OtPfqr02ft5ie6JpNubMZY2YtiNBiwGPTNeJ4IgcCngRRZE8uUqDUXl\n9maMu5txVmMZ7obi3NqIspRsH+4hCgIqKldHAmzGctxYjXB7M9YyqKQfN9ejPcXYkyAKAnbZiEmv\nw2s1sZLo7sbRidNeF9RV/u1Xr1Pabq6bG/PzN1+7yko4xUqs8/dV6woL48GuGdmjsBiKcWVsz1NZ\nFAQuBL2c93nQKQLxdBG1puI2ykw7HfhMJu5utDqLVIrtx+Ws0000V+D+VpLLIz68VlPbMgAek4kf\nefVSy2uCIHBhxIvL3HQg0c4j7w4qoNu2K3waY97fTYYxRjRBfIKIxZ7c9kfj+UaLkafH982dafl7\nx74qaLeil0TO+d14ZZlyvspaD7u0Qbg87u/buNXpZFyrKxRLNZY2YnhlE3c248TzZdxdxBDAlFXf\n1nR3Megln68ONLGuF8lsseeEv8PitZq47PNhqUsUUxXsqp5kvkR6AHeI/cg6HaVanQmPHdO+9fvY\nxVl66ZAzATfvPNyiVKgyZrUyYrFgVEXOet0E+97AdOfmZpTLoz5emBjBbTBydyPOva0E1freyqQK\nZVbjGeK59huY5a0Uc37f7nG06vXc32yKZoHmDZOoCvhs7S4EmVyJD12YBppZ8q9vN4/uRzuPvDuI\ngrArhHVHGN7zXjKMMaI11Z0gtHojjX5oMfL0+NEXL7GWzPCVB6vYjAa+8L55HkfSLG8lSdQLLG88\nPWP6fg1pQLMw+AA7T/PLtQbl2l5DXK/H/PF8idNeFyajjkShhEM2cmcz/lSM/ROFMqcDbh4lUr3d\nGwbgUtDLeijN3X0XXo/NTKRDhrsfhUoVr9XMr/zQR1rXN19EoPu8kx2rNkWFrdTeI+LlrSRGvcSF\noJc74XiXT/dmMRRjfixAonA4cQ9N0asWFWYMdlx2EzpB5K30VssysVyRGZ+TitxgwmVHAMrVGj6z\nZfeG6Q/eWEQSRd5/ZrL1+7XzyLGz4zBxVCGsqOq77j28n2GMEU0QnyDc7uN5HKnx/KDFyNMjX67y\n8sQIZlHiYSTFb335BtFcuwvD00Aa4OJyP5xA1kuUa03x7DAZubPVeUiH0GO6xt1kgXipKfSMOgm1\nrj7VKVfLkSTzk51t6gbBLhuYtNu58zjethWy8eiXJJ0kttTv/uGbt/k//su3en5mM5XDZZY7ZqQr\ntQb3N+JcGD+8KG4+YfBgko6+PUadjnuhBOuJLCPOzh3/qgrZQoWlQvOmwmY08OLk6O77uXKVb69s\n8VMfWGgRV9p55Ph5UkH5XophGM4YebZy+M85w/iIQuNwaDHy9HBaZP5qaYU/fes+ixuxYxPDMFhD\nWrXe4Ix/7yIUsFu5OOLltM/NiN0CajNjHHRYCKW7W5vN+2y7/12pNwg4nr590qNo6khNdqd9LnRl\ngbur7WIYoFDv7cHbDVmvI5zJ8yt/9vXd1zZ77KNdBJjwdHeFUFV4sBFnfmzwesq5UT82wcDSSozN\nI7pYBOwW7m3tifBuU8PssrFlP+bLVb548+Gun7VeEsmUyvzhm7dbPqedR46fxjNWM3yQYYwRTRCf\nIOz27idmDQ3QYuRpIgoCP/G+K+/Kb93biuM0t49UPkhlX42pSa/jzkach+Ek4VQBHQKiIhC0dxa4\nsl6H32YhWW20iKQ7W3E8ls6/Pe1xMO1xHGpboJl5vDjiPVQWa37Uz+p6qqe/cCTf24mjGzuNkN9+\nHCJfbrppfP7VOQID1AGX670bCxUVbq1EOOd14+9Qs7ufhdEAtx9HSW+XSWymckz1ENydCNgtCGoz\nQ71DJFPAYmyv3T7oa6wKMBt0kdnOeP/ND17jF3/gw/zFreWW5bTzyPEjPWM1wwcZxhh5to/Yc0bj\nGbVn0Xj30GLk6XJ53M/7z04c+++Uaw2mBhCey5HkrhNA7IBNW0NRaSgqN1YiLS4Gp30uLnm9qJk6\nqa0CSq6OXBa44HKzMBrgrM/NGa+7pZxAUOHyiI9EpsRqJMOo1cqVET/zowHmRwMsjAWYH/Pj7GEh\nVinWMdVELvu9XAh2F8djThtzfh+3H0bpV7nRzae3H+K2+KjWG3z5zgrQFJa/9uMf5xd/4Dv52e98\noetnB3XaeLCVJJMpceGANd8OQbuFG4/by0jsxu778CAjDiu5QoVIpvXYq8Cow9by2ozXiUs2thVI\n1+sKf+d3/jP/8Z37mI16Xpge4R9++kMty2jnEY1+DGOMaDXEJ4hCoYDX2/lkq6EBWowcBz/9wau8\ntbI1sB/vUbkXimOTDeS2M5idUFSVSY8DFQil8l0rhW+tRTkbdGOVDSzeDbcIzYDNyFKkwPJ6a1Og\nCiyc9qOIEEnnub2+90h0K51nK93uOyoKApdGfcSLRSK5PZG2MBbg1qOm+Lu7PcbaY5UZDzhQhWZT\nmNJQiacLhLdyRBhset2M28lStHPd9KD82Tv3+b6FMwiCQNBhJbhTMiLA//nlt1qWNUgifosFi6Tn\nXjjRfarJNrWGyko4hV02kD1wHP1mC1HaM9yHGf7htZgIpzr7v8rbJSqSKHAx4N09fudHPISyeZxm\nGZMkcWt7NPSv/sdvYNLr+MjlGWYODOTQziMa/RjGGNEyxCeIYDD4Xq+CxglHi5Gnz+mAm1/67Hf1\n00JPTKXeaBMmnViJpRl32fquz4NwEqWqtGVdv73e2SJOAG4vR6GhEs0OVi+tqCpLmzGMgoTLLOMy\ny1zye3fF8H5S+TK3HkZYXI5waznC7cdRIqnCofZrpVRHd4Rmouq+bNbdrTh/9s79tmU+/8rlliy9\nxaBjzGbj7cdb3NtK4LOamR8PcMbvbvGiblvHWoMx597jZIHtG4TVaMflM6UKdqOBGa8Tu9w7W9wr\nQy6JIlajgTNed8vNzP2tBBcCHrYSWR6EW2+CfuOv3mI1nm5rqtTOIxr9GMYY0QTxCSIcDr/Xq6Bx\nwtFi5Hh4aWaUn/3Ii8f+O7fXo33rUDOlCuUBstWjThv3V9vdD16c6FOacYQnoclCCbMqkU2Vubt+\nNBuyQViNZRg1WZlyHq6uOZZvFfi//pff4lsPN1teEwSB//Vz38PCeLMkZNrlYmWfv3QsV+TGWoQH\n4SR2o3E3I7sfh8nI/ESAZLrIBZ+Hcx43QZOFm48iXYX//GSAfKHKSjhNqVjlctDXbJLsQK+SElUB\nGZH7ofYMejidw6hrf+AbyRT4yX/xJ/zO1260Lq+dR46NZ20ARzeGMUa0kokThF7/9AzvNZ5PtBg5\nPl6cHum/0BPSUFWMkoRJr+tZu/owmmLEae1YxgBNp4l6oUat3n7xLdZ6K958sXtTWzfO+N3cXHmy\noR6DEkrmEAWBa9MB3g5F+pYxAKSLJWZ9TtYSGcZddtQ6/C9/9BU+88oFvnfhNCOuZv2t326hWKqx\nHE4yG3B19ShO5EtcHPexFGpmYo16ifNBL3c2YtxYbe6HWKZ/lv3yuI+bq3v7raGoLG00v9NnNeGx\nmZENTeGtKKDv4dwhAMkunsbryRwTHjvFRGeXjkeRVMvf2nnk+BCeosVhJ4qVGuYODZZPm2GMEU0Q\nnyAcjsN3e2sMF1qMHB8eqxmDJFJtHF+GRyeKeC1mvBYzN0LRrv7AKlBRGkz7HG1jh6e9DnKJMpku\nwvZxovdgi61kDqNJanEx6EftXW6wUVSVm48jXJ0K8E64tyj2WkxY0fM4lEYUBFbDe/vrt79yg3/3\n+hK//oVPMu13Antf9TCSYsrroK6qbCTb63zzpQoWox67yUitruwK4UEJOqw8DHcf7pLIl0jkW4+V\nVTbgtZmJd7AALFZ6W9J1a2o8N+Lh73//+1te084jx8gx+wcbjmB3eBSGMUa0kokTRDx+fI8iNZ4P\ntBg5PtxWE59YOHts3z/rczFqtnDrYYRbDyNcDvp6Lp/Il3icyHBlKoAoNLOU8yN+NjcyXcUwwKVg\nb9/hel3l9AC1zPt5r4YE3FqNcG20twfwqNnKRqIpaDvdYBQqNX73q3slAx+6MLX736vxDBuJLBdH\nvXgOjMNeS2Sx6PXE0gXifWquZZ3E3JifqxOBZknGeACdKOwOWRmUfLmKVa9vq2F2mmVWYqkun4KA\nw9K1zObH3jfXllHUziPHx3Hbrel61Lc/TYYxRjRBfIIYxjsyjcOhxcjx8qmFM8fyvZfHfKxspthM\n7LktLD2O8sJ4kFNeJyMOa9dGrhvrEeangvj0Jm4/6m9d9niA0cfV8uGEmii8d5eKm48jXB3pLIot\nBh33N/u7UqztqxWuHXgCIAB3NuOUyjXmxv04zHuNb06zTL3PiGoRmHDaub0W5cZKhJurzf9ZDYa+\n69WJ1XiGWZ+r5SZkyuvouR5Bh5VItt3hwmTQ8f5zk22va+cRjX4MY4xogvgEUa12t2PS0AAtRo6b\n0wE350eertXQxREvdx7HOharqjWVtVCaaCyPS2fklNfZ8Tvq5QbhROd64oPYjP0fqT4KpZifCLAw\nEeDKmJ9LI15m3E7O+txcHPO1DBEx6XXopfd2jOytxxGujQRa96EKZ1zugZqYyrX67rS3H3zlIu4D\n2WBo+hEvrkfRCQJj2zXHeqn/vrwyEeBhpD17K2yv41G4F0rw8vQIV8b9zPiciIBe7HwMzAYdyULn\nm6CDI76L1Rpb6Zx2HtHoyzDGiCaITxClUv/MjsZwo8XI8SIIAj/40oWn9n1Xxvw8WIt3FUa1fWIu\nkSsRieXaXChGnVaWHg8+RtVr6Z+ZFACx0cy+Lq5GubMeZyWaZnkryd3VGJlsGbcsM2a3otQUrj+K\nMDfh7/u9x8nNxxHmfF7sRgNmg445n5fFLlZnB1lPZHcby+wmI3/rI90HdSTzZTL5EnMTPm5v9t7v\nIw5r13W4F0qwMDn4yOcdZJ3E/ESANx+EWFyJsrKV5sajCKIqMj8eaBmwopdEbLKR9URnr2NFVfnv\n/68v0lAUErkiv/jHX8VlMWnnEY2+DGOMaIL4BDGMvn8ah0OLkePnuy6d2s0QPglXxv0sPorSO4HZ\nqpQrtQZ+S6sll99iOZSXbzcf4oPU6t3LJgQgnS+zlcxTqysoqsqttShngu5DrMnT585GHKkKo7KV\nOxuHq3H8u7/7//Gt5aYV23fPzfQU+IVqHbOo55TDwVzA13KYnCYjC+MBxmxWgjZL18ZIaA5QGXP2\njyWLUc/8hJ9ZnwulobY4U+xQrTe4uRohX6gy7XLw0sQI530eYh0a8HYo1+osR1I0FJW/uLHMD796\nEVmv084jGn0ZxhjRBPEJYhh9/zQOhxYjx49OFPn+a+d6LuO1mjEbutsSnQ24ufM42lfI6jo04BT3\nTUCzGPWYJd1A1mM79PUh3iZbOLz9WipfRnqPGux2yJWqLVnSQUkVyvz93/tL7oXi6ESRn/7Oq12X\ndVtk3nm4xVosw9J6jJemR5jfbparVRrcXImwlcr3redWVLWtWa8NFebG/IRTBR5FUm01zp2+M10o\nc+txhKXVGKecDi6P+fDZO/tbn/I50Usin3/fHFe2M9baeUSjH8MYI5rt2gnCcMQmDI3hQYuRd4fP\nvHieP33rHuFMnimPA4dspFiqUqrUyRYqpBJFVGDcY8Nlk5G2G+IaDYVcscryWnIgDSt0EJcr0Qwv\nnxmhUm2wvpXmW3c3OT/u5cFmgkafBi+AXGWwEdSxTHsTVj/iuSJzU35urQ1WqnBcpLv48fajoahk\ntx06zo95cZiNKA2VGa+TRkMFEXKVKmZJTzrd/A0VuLkS6ShUB1mPfLm7XZoAXBr38caDTWS9Do/V\n1GbFdhBJEHDJMmu55nashNO7750ecWI2G6g1FERRQC+KfO61ywjCdjXxdrxp5xGNfgxjjGiC+ARh\nsz35Y1qN5xstRt4djDodn33hPL/5l2+ztpnuuIwA4f+CsgAAIABJREFUbCVybO1zjtj/3iDkS+2N\nKwJQLdRZWturX727EW8K0ZX+QnQzM1jmt1ZX8Lo6e9725HjnDgyES5ZRnSoOm8yt9cHF+Y9/4Aov\nnR4DwGzQ8xtf+D7+4e9/ued+HXXZCGXajzE03SsuT/hQaN4sRDvcZFTr3W9QLo/7d2uQBQF0gsjl\nseb3bSazZEqtx9JrNeG3WrjbpVzk8VZ7rP6Dz36o7TXtPKLRj2GMEa1k4gSRSPS3D9IYbrQYefdY\nCaepVI93IEUknW8XmCpE0u3C6tZqlAsT/R0wzvs7jwXuhMfW53F+B3rVzL4bTLodLK5E2YhlubMS\nxWWR+39om+srYf70W3f5/a/folZvMOKyMe6xd11e1uuQdRLTvs7uHwCL6zGW1mNE0wWuTLU30XUq\nizEZdIw4rdT2+RSfDXqIZgrcXo9xZz1GtlBh1GFl1ufiXNDDy6dGKeSrXcXwQfwOC3NTfh5sJto8\nirXziEY/hjFGNEF8gnC5DmeWrzF8aDHy7tBQFC5O9B6c8TQoVGqMHmjguzTm6zoIYiWaxu/sLXiX\n44NnfGXp8A8JO5V5vGuoICp7olxRwGcf/AZgcT3K//21W3z9zhq/9EdfpaEonBvrfpNxbtTDSiRN\nMlXEbu5ft3x3I4blwBAMp1nmlMvB3KiP+TE/EzYblXydaDTfIpa3/n/23jNasjW96/vtyjmHk3P3\nSR3uvXOvNApoRtKMwkiMpAFsLItlBCzshbwWNgaMsIGFl9HCxksiIwuBJEAIMDBiNJImz2ik0b0T\nburuk3OsnHPc/lAnVJ3alc6p7j7dtX9f7j0V99719n7/7/M+z/+JNUehfbE0u4EYm6cRsoUShTaF\nkPU8mPISSmR4vB/kG1snTd3N5PuITCcGcYzIKRO3iFwuh8XSOlohIyOPkadPrlDi//yPX+XNzaNn\n8n1ui4HTeE0M3R/zsHbY2uorVywz6bYRlIggn+M0qjmKd5dje9rCrqsdz7OobnnUzdpB4/URe4hY\nL4+5WTkIEYrVrt9P/8PflGzbDLUUhoNgLQUhnS9yf8TL+4fS7ZvVSgWzXgdalRK9RkU6X0QURTQq\nFe/t+ptSaM7/PhfERq2aUIdueLkOrZvPeTDp5dHe5XF+4b1dvu/BNPfqotfyfUSmE4M4RuQI8S0i\nn79eoYjM4CCPkadLqVzhl7/wDn+4cdTRQaBfHIUTGDQqHo55WdkPUu1QOLd+EmbY3ro9s13f2v3i\nKpFkjqEOEeerqBQCD8Y8mPXPtuhmfsjJvq+xAYbbasCi1UimJUihVCgaxOlRJNnyd55wWUnUOXGs\nHgQZddSi+QIw5bbxcMLL/XEPGhRsHoV5vBcgny+zuh9i7SBMMl1AaPNzZvMlBGDSbeP+hLQNnAA8\nnPSyF5DOZa/HqFOzcqXgMZ2vpVlU6vz/5PuITCcGcYzIgvgWMYi+fzK9IY+Rp0uxXOHLK3vP9Dt1\nKhUalDzel44+SuG2thax3foQn+O1tBbXTd9rMfBoN8CTvSBmpbqt9Vw/WR5xs30cIXclF9ZpNPDe\nph+PTs+ct/MWb7HLlAMA8xVrt0pFpJAv8+rEECaVGptWy+O9ACv7wYbjimcvhcReIMa9ydZ+xzu+\nKHadjngyx+P9IEtnzhcACkFgeczNsM3cEPFtx5TbJulE8vl3d1g7uoysy/cRmU4M4hiRBfEtYhB9\n/2R6Qx4jTxejTsNPf9+ZP60IYw4zD8c9PBj3NOWG9gudSnVhBdYtR5HWordbH+JzgtHuWkKPOsxQ\nFmv2ZIA/lmHO8/TzDKdcNjaOwk2RXL1GxeZprcAsEMuwe1hrR90Kr9XYUMTWiaxEikI0mWPrJEIm\nX+K4xW9QqVS5O+K8+HvrNIK3TRQ+nskTSWYRgLWjMFThjdkRXEYDq4chfFFphwspVErpKX3LF20o\nxntR7iPFSoVsodhTWky/OI+oV7poDf4y8qKMkX4iC+JbhE7XfbW0zGAij5Gnz8devcPDMS92rZbT\nYIrHe0Ge7AXRCyrMuv6mCYzazewHO2+FXyWWzrcsrovluss1PScQz7Tt2jY3ZGdx2IUvlCKSbPTI\nDbXJZe4LIoilqmQaiVmvRazTKgLweDvAhKtxQTDltjHhsBKMZtj1N6ZctCOWae8HHE/nUV8RoIJQ\ns3Pb88d4OOVFoNZ90KzTtrWrq9d7yWyBcCJLKNn7tW2lGzUqJc66luAvyn3kMBTDF0+z7nv2jgfK\nszQcZZfpOC8bL8oY6Sc3+qUFQfgTgiCsCIJQFQTh9SvP/awgCNuCIGwIgvCDNzvMwUCv790CSWaw\nkMfI00epVGAxaElcidpG0zmmXK3tt66Dt03qQyesLVwPIpneBDHA+mGIhxNeZr12lsbcPJzw1rqf\n6fXsHsfYOApLCrou+oTciLtDDo7C0kVvUlFDo1aNV6/n3qibEbsJpUIglytxFGqM5o46zEx7bBd5\nwHeGHThM+obzNwqqJsGrUggXkeOqCKNXLNv+1Icf8pMfeoAgwKO9AMsTHhBh2xfl/qSnK39qm0HH\nQaj3RRK0LjAsliv8+lceXTz/otxH5oZczHodLI50tht8WpQqT9d68bbyooyRfnJTl4knwCeA/7f+\nQUEQloA/CSwDI8AXBEG4K4riYI6sLonFYgNX1SnTG/IYeTY4WrTbXT8M8cqkl3ShSKlSxazToBQU\nVKsi5UoVQQC1Skk0myOczjblvNYz47axsl3LG43nC5xK2G61QqEQWm6lz7kMXbtMnFOpiDze7T6H\n+RyzXkMg8/SixAqxtYTMl5qv7ZTLynvrPqCm3xenXaz5ow2vsRt1+PypC3Fa7yWSiDZGhe/Penn/\n4PK6uK1GfLHLFBOvyYhFqyGVL5LOF3ltdpgHU0PYTTr+2q9+npUz7+i14zCPD4LMjzob2zOLsDjm\nuigKrIpizcVDsFKsVFg/6c5z+JxWHtFWow6jTk08k8du0r9w95FypdoyHaR8JlhVSqXk8zdF/ZQ+\n97bzoo2RfnAjQSyK4hpI+lL+GPDvRFEsAHuCIGwD3wa8eZPve9lxOp2dXyQz0Mhj5NnwZ37gNb74\n/m5THqnFoOXRTnfCURBgxmNDp1ezehJqaF/nNOmJRXOUK1XWD8MIAixPuIlksvi7aKm8NOa+6HB2\nlfXg0xGoE04LDoMeRKgiUqlWMRo1HETjlPoYKtarVcy7nShVCt7d8bV8XSpXxKRVk6n7jVJ1UX0B\n2NgLc2fGxcbp5Za7Vq3qupPgk70Ak14rB2cRZp3mcsp0mHS8u+WjXNfSWaeqPf9geog//0Ov849+\n6+sNdmkbxxGWxmr+1tWqSDiZZf1AWvTqNb1Nz4Ig7WUM4DEaWNkO8nvv7/Pj37X4wt1HWonh2nOD\nKVifNi/aGOkHT8uHeBR4q+7v47PHmggGg/zZP/tnUalUVCoVPvGJT/AzP/Mz+P1+jEYjSqWSZDKJ\n2+0mGo0iiiJut5tAIIDJVKuOTqfTeL1eQqEQgiDgcDgIhUJYLBYqlQqZTIahoSH8fj9qtRqr1Uo4\nHMZqtVIsFsnlchfPazQazGYzkUgEu91OLpcjn89fPK/T6dDraytsp9NJKpWiWCxePK/X69FoNCQS\nCVwuF4lEglKpdPF8u3M6ODi4qOx8Wc7pZfydnuc5ZbNZIpHIS3VOt/V3+viDId7aCWPWKXEaNbx9\nmOCjC252/QlOEgXmvUZ2QlmcRjU2g5q3DxJ8YNJKPFsikikx6zawEcjg0lb5iXvDnGaqTNvUZIoi\nh6E0LqeSVZ/IlFOPQaPk7YMoH5iy8nDYQqJQRK8QeeRPMe82olIIPPKleHXUQjRXQagU+N45B++e\nJHkwbKZcFdkIZXgwbEanVmDXq/CatXzrKMHr41aypQp7kRzLQyb2ojnMWiUuo+bi+VShzEmiwILH\nyHa4dk52vZpvHSX4jik7akHNymEUp1nJpj/DsE2LWafi7S0/3z/joKpQIiqV2I0KvrobZMphwKBW\n8s3jBG+MWfGnCxTLIhM2Xe2cXLVzet+f4rURCyfJWkT7tVEnv78Wwi4UsRv1HBrVPBg2cxTPo1EK\nDeeUL1c5jOR4Y8LBfiSHWadkzm0ikcrwgUkr6XyZ03iB1zx63FoPolBGI8BmNM+H7zqafqcRmxaz\nVnXxO0YyRVL5CsseHaVinnGbDqdJQziu5PVxKyqlhn1VknGHjsfHKe4OGXl/dZMJl4lAIMAfueth\n75Vx0pkMAmbGzSp0WjXv7MW4P2rmKJbHYxC4P+S4+M5csfY7LQ2bOIjksJkMWPWqrn6nH1waYjuQ\nxKis7RKsBzOMWrUMWfV8dTXMRxZd5NMJdo985JJRpqam5HuEfE4tzykYDKLVal+qcyoWi22Fq9Cp\nelMQhC8AUv4b/5soiv/l7DVfAf6yKIrfOvv7nwBviqL4b87+/hfA74ii+J+ufsibb74pLiwstD2G\nQeHg4IDJycnnfRgytxh5jDw7jsNJ/vQv/OeGQqXFUVfNCeAaLI272zbduMqww4TLZiScyXISSV1E\nmJfGXKy2OYbvnXPw5e1oy+d7waBR4dboOWmRxyuFzaTDbTei1amIFPIcRBO18GUHzFoNlXSlwRrt\n/oyX42iSSLqWyuCxGomkslSqIsN2E/5Io0PG/LCDraPGAiynzUg4mcWgUzMz5iCfL7F93Nv1uTPp\nZOOk9rkfmB0mHM1yFGx2mdCpVfzTv/ijTHhquea//pVH/MvPvcO9SQ+PD4MsjrpYP+x+/CxM1dIt\nuuHehEdy1+DBpIcn25ePL026+YnXRvjuNx6gVr0c0dVKtYogCCieUtOYfKmMTj1Yfcxe1rnmnXfe\nefv7v//7X5d6ruMvLIriR67xncfAeN3fY8DpNT5noBhE3z+Z3pDHyLNjzGXhY6/f5be/ucm404JO\nqSSdLuAy6wmn2jsQXEWnVrLXg8MBgC+axndmieYy6xlxmdFpVXxju/2ttFcf4nbc9Th5st2b/VI8\nnSeevsxhnnZb0Fk0rAUvhapeo8Jp0qNXq1EIAkpBQKdQ8Sje+F3nec1DNiMmnZq90xgGnRqtVonb\nYGgSxMVSo0WWSqm4aIOdzZd4st17njSAWrjcsi8Xq5JiGGrC6a/98uf5B3/hY7htRoZstaiWeFaR\n2Gs+6sFpnFdGvWSKRQ7jSQptbOOk7MEUgkAy1VgcunoQIpXO8un3A/z3P/o6d8eeX8Fav3jaThC3\nTQyLokipVEHTY1pNLwziXPO0RtGngD8pCIJWEIRp4A7wjaf0XS8Ng+j7J9Mb8hh5tnz4/hQPJzyc\nBhLsnEQ5CSeplqtMuHorNrk76iLfpsCuE9FUjid7QRKpzsVyvfoQt+LhmIeVnZuPt5NQkp2dMB8c\nHWHOYMFdUFP1lwhvJzlai3CwGmZ3JQSl1ruVwXiG1FnXuGy+RCyVpyI2C8BMrlH8uayGptdcB38k\nxeKwi1fGPW3t086P9a21WqmeQa3i4YgHfVXJ4pALhUjH99dj1KhZ2wqwvxdFlRZ5ZaS1Pd7VPFtB\nqLWqPgw0i/dZl5b3d/38H//6Kw2LF5kXA0EQKN7gftINgzjX3NR27ScEQTgGvgP4bUEQPgsgiuIK\n8B+AVeAzwM/IDhOdGUSbE5nekMfIs+W1uRF+7DsWGx6Lp/OUS5XWpq8SKBDw2Iw33tLd8cU6eiGH\nM+3z5DoiijwY87CyHehr++pMssDxcYJUpihZ1ObzJRh3W5gZsjcUr50z7DQ3/H31WqqUCuLpxsi9\nvk/NVMacFjYPQjzeCXDoj2HUtf/c775f22qeHXGwfxIjHMuwcRTm0W6AhfHuIrIzHjsWlebCg7lY\nqrCyGeDVEW/bsWcxaFkadTPvdbKyK114GUnXxog/luaf/863nkvjC5mbYTI9XZ/gQZxrbiSIRVH8\npCiKY6IoakVR9Iqi+IN1z/0dURRnRVGcF0Xxd29+qC8/Gk1/Tf9lXj7kMfLs+fbFcUxXRKg/mmbE\nKRElFkU8VgPLoy4ejntZHnLhUmt5su4jEkjjNRhYGHNh1l9+nkatRKHoTihXqyIzHbrDpQrXiz1o\nVAoejHmYtFhYvWZqQTs6rQXsJh2+owSH+1GMorJJFEevRDKvuhvdHXFSrjQKu0zubHEgimhUip4W\nMefo1EoOA5e+wMlsgdlhR9v3hBO1NA2P3cS9GW+DW0m5i255eo0K32mcQ3+zH/GTTT9LTifj9tr4\nEwR4ZczL8WaYIUFL3pfjaDPMabB13ncq33gMsR5TgGRefgZxrhnMFiy3lESif7l/Mi8n8hh59ug0\nKj70cLrpcbe5cTveoFFxx2knGsiwsRNiZcvPxn6IeF2aQzCaZmsnhB4ly+MurFoNpVwZl0HH0oS7\nq+OJdxAv047eIjsuk55XRz3csdtZ3Q5wEmoWUstTHpanWm/Xd0Mn0W+oWyQkUnnmrojO43Cy4TOS\n6TxDdhNWo47lCTenEnm9glDrtDdmMVPJVnDp9Dyc8KJTd5/Le3fUSSLTmIpx4I+1FfjBOq/iWDpH\nNJnDbamNlx1fDJe5/W9k0WsplVu3DN46jOA/SjBvtbFgs7P2xEc2VyYWzyEAk1NO0hKtp8+Zcl1+\nfyydR9vD9ZAZDAZxrrldmeIDjsv14hc3yDxd5DHyfPiue5N8+q2NhsfyxUbBMee2s7ojvUV9lUg8\nS75UJp2vpQ+E41nC8Sz3ZjysHIXaBjItRh3EWkf/Vvzpls/VszDkhGKV3ZMoT4JZRMBu1V9EC3Ua\nFRMeK6VyldXdIHqtCkG4VpAVQYB4or2Qv7ptf3wUw2M1EjzzZV6e9LCyF7hsqFEngNdafHalIrJ3\neOkoEUvliKVyWIxapkZsrJ+2bgm8POZGrVDweL85Wp7MFrCZ9cRa5N9m8rWxEUlk2TxzlRixmwmd\nFfiNOC1tCzP1XRZx7Z7E8F5ZmM2MOc58r1sr9tXTyzEyM2x/6h0HZV48BnGukSPEt4hBXJHJ9IY8\nRp4PYYlmGb5ICgUgUMu57VYMnzPkMDU9trob5P6kt+37UoX2OcLTzvbRR6dRz4MhNzu7YXaOoxcC\nV6AW5V6ccDPqNFMolNk6jLB/euaOIV5PDAMsTniaHCHOEQS4M+5k39eYHpDOFklHs8y5bIwYjUSD\n6a4bapyj1ShZmvVwb87LvTkvy7NevA4TyUyB7YMws97WrbgPTqJEEpmLHN6rjLUprLQYa221HRY9\nP/Kd87XzqYsyt4zyiyIzHhuVXPdpLw5boyDWGtQd81POI8SCAA9mvC+N/ZpM/xjEuUaOEN8iSqXW\nW1wyMiCPkefFrq/ZMi2dK/LanRGKhcq1cm61LUTI2l6AYafpwnKtnsUJNyun7b2MDVLb36LIpMuG\nTa1hYz/EWigr+d7TUIrTkHS3sxGPhe3T6/kbVyW2/wUBlme8HAcTbB1LR2qLpSr7x7Vrb+hQyCaF\nQlDwZL9xoWLQqlEooFoFk7ZFnqQokiuWqcalrxPUFhATTgs6vZrNK8f/eC/ABxfHEQSBn/nEB4mn\ncry5coRWp6RQqnAUSuK1GwnE01gMOhxGHVa9lkQyz+Fhb/Z8hUoFkctGiLFolvtjbuLZAkdR6Z0E\ng6Y2Rn7gA3O8cXdUqtvstYilcliNuq5z4mVuL4M418gR4lvEIPr+yfSGPEaeD75Is0hUKASC4RSr\nXbZyvsrqXoh7U802XpWKiFlCqN2f9rDWQQzDpQ+xRqVgedjFfY8Lj0rP6VGc1d0glWvuj+uvIUjP\nUUuI9OUZL092A13bfuUKJXrVWQmJzy6WKxeXvNziWpy7UxRKFWwtqvlPg0mOAwkCoRSaK+f3fp1d\nnVKp4H//09/H3XEXM95aQeSI3YxVpcEkqsjG8hwfx1nZCnAsYZHWid3TGKPey2i1P5xifTOA/zjO\npFThJ/D2fu17Pv/2Dpn8DV1J6vhrv/hZuUDvJWEQ5xpZEN8iBtH3T6Y35DHyfKjvnnbO8oSH06B0\nNLVbVnaCLE82i+Ktowh3RpxATXgvT3t4/yhI6zKrS14ft3B/xI2xpGRzJ8T6fujGIsVh0UsuCrql\nKmG+eyDhoNAOUQS7qbeCQael2Yd4ymvj3MI4ccW3GEClEJhzXzp5DDvMTa8ZdVmIJmvXNJUpMD/s\nbLCB2/PHGnKiFQqBmRE7lKssDjkJBpPsnkRv5E1dj6WFaC8ki0y5mn2pPzBVe8xp0WPsYOPXC+lc\nsWlx8LQoSzQikekfgzjXyIL4FmE0Gp/3IcjccuQx8nyQ8sVNZ5rF1HVY3Qtyf7oxb1gATvwx7k96\nmB938viou/xkvUaFVqFjfTtIOnfzyJ/bbmRpxkMyX7iwErsO2Xzz9qvNpGPU3VuDE6+1Oe+6HXrd\n5e+mUAjMjThIpS9/t6xEPvbiiIvVvcvrLRWUthsbBejKboD5swUMwH/1oXtNaQj5Ypmt4wi7J9G+\n+jtDawePSCLL6VGMV0Y9qJWXrwkka9cgnsn3ZZxA7fwy+SKf/cZWXz6vE6qn3J1u0BnEuUYeUbcI\nZY9tPWUGD3mMPHtEUeQk3JyLGYo0F9pdl/3TWJP1Vb5YYWUn0LZdbz0jVhMOQcOer7fIayv0GhVV\nRFb2g20twLqhUGqOhB4FEhh6bJxRyJV7Kqw7b+mrUiqYG3KwexQlFLv83bSqxoWO22xgfa8xLeWq\ndh11WRoE8znrByEEoRaB/qmPPGx4rloVebTjRxRpmYJxE6JtdgBEEVa2/IzojAyftZIulmtnVSpX\nWTnorRi0FTqNil/6Kz/et3zkp0W/FrIvO4M418iC+BaRTLa2UpKRAXmMPA+2jiKYdZqGLfFJj62h\n2cJNSeeKTHmlG27kJcTkVbRqJUK+SjCWYczRH8E1N+G8UVS4HqmUEwAE0Gu7r+3e98VYGnEz5rR0\n1QL5/CWLE262j5oL96wGbcPfI3YT1Svh2/rf3WrUIabLaCVs0QRqAvyv/+SHLoQ41BZUn/qDNcLx\nLIhtrsUNuNq2WYrTUJJ4IM19r5PXp5xMuawoqLWl7hceu4k/9qHlls+fhJ6vc8Hahp+/+XO/81yP\n4UVhEOcaWRDfItzu7oz5ZQYXeYw8ez7/1hbrG0G8BgN33HY8Wj2JULYrQdYLkZS0+OyUK2nQqHht\ndIhQvBb5XDm6ucBRKgQOAv2JNAMtI8FbhxFy+TLTw3bsHZpVnLO+H8LnSzJus7Aw6mr5OyiAarbM\n8qgLvVIl6RmnvBJvjkn4GWsqCh5MeHgw7kWRqRCKZJhqYdemVAhMehtzdt98csg/++TXAfDYjSSf\nQoSyUzvvc8qVKut7Ib7yziknhzEMZQGTWk2+j4s7qBVAluqEf75Y5otv7/D3fuP3+/o9vVCpVgmG\n07z6YIxIrH+7Oy8rgzjXyIL4FhGNXs/SSGZwkMfIs+Wr7+zxmTc3gVqKxN5RjGgiRzpXxGVrLti6\nCalss1AyG7QEEq0bbSx6neiyAm8/PmbSY8NlNXBn+Oa5fzMS3dluQifBtnca6zmf+DSUZGsvzOKI\niyFbY26xRqVgccjF5n6YjZ0Q7zw5Zm7U2fQZ6/sh7o/XJv4Jl6W5S58ocuyLs7YWYG3dTzpTy7c9\n2I/wYNLbUEAmCLA04uLNRwcNH1FfOOe09nfMuKwG7k97WevRA/vOSO16FYoVoonstZ1HWpHKFviV\n33mHyFkjEp1Gxfe9NsNHXp/r6/d0Q7FUploV+fRnnvBP/vlX+dyX1vjnv/qHRGP92f14WRnEuUYW\nxLeIq52aZGSuIo+RZ0cmV+QX/9PXKbfIn7Vc2W6/KVLb8ONeK2KLrNl7w252tsMXRVEHp3ESiTwj\nTjOLk26mhu0or+kHq9X0L39wZsTO+m5nu7iUhONDN2wehAkF01iVGrwGAx69gQmblY0rucD7h1Hm\nR5xNKRqrO0FmnTbCoeaFx6jLQjzZHDUulaqsbviZH74U2XfHXKys+Pi5X/pyQ+MNr/1SrHeT2tCJ\nEZeZ+9MehqwGIpEMK1u9uwEo6wrsDDoN5Up/HRs8dhN//uNvNLh8CILAj37nQl+/pxvy+RK/8E+/\nzKd+9wnFUoVUusBb39rnrW/uPfNjeZEYxLlGbsxxixjELQqZ3pDHyNNn7zTKv/zNbxGIpolJiKFz\nSn0WEVWJ1IhYQVok3vXY2d0JNz1erlT50rs+EtlaVNJk0DA1aieRyROMZbq2+ar0ydJq2GkmFMx0\n5aqQSHbnR9yKdK54sTiIJrOYjVpSdVHuqiiydRBmYdrN6nHjtduXaLwCYNK1X/Rs7gSZn3ZRqlQI\nnF5Gl+uXIUvTHhYm3awfdF4UtGNmxI5aULB5EMbvTzZ9Ty+sHFwe6+ff2uLDr8/c6NiuSzCawiNh\na9dPLGY9H/ruOX7/zZ2Gx/ePohRLZTRdtskeNAZxrpEjxLeIQOB6Bv8yg4M8Rp4uj7Z8/NW//7t8\na+2EozZNEpQK4Ua+vPXoNSruT3iYcdsb8lzvzXolO405jTr8R8mWUb2H05epB+lskSdbAY5OE6hQ\ncG+6fVvocw5O42hu2M53xGkmny6R6dLWSypl5LqIYuvOdut7IaZbFDBeZTcQZX66tTCoVER2tkMc\n7kUb3Au++PXti/8XBOGiMO86kVibScfcsIP9wyhbB+Fri+B6Hkxf5jknM3nS2f415+iF1YMQv/a7\n7/TNj/kqpXKFYqnMvYVhrJbGYtPPfWmdf/Ub36BY7H+R48vAIM41siC+RZhMvXlsygwe8hh5umwd\nRrryZZ0YsvVlm1mvUTFkNLK2GWBtPcC0xcrCiJO74y7eO5HOC52wWNoKCF9UWlhmckVWtgMsjLsx\nG9rn9GYLJRYmXB2P32zQMuu2M24zMz10KTInvTZS8bxkp7hW9GuLdnrEzr1pD/5I69zrYDjFvUlP\nxwmwVK6yehpmfs7T0zH860+/e1FUliuUWDuzNouleouCTw3XmnnsSjhk3AR/tHYco24Lf+pHXmPI\n9XSjtK2Y8NoYdVslfb77QSqVR6NWIVJbvFztSvB4AAAgAElEQVTl059d4bc+8/ipfPeLziDONbIg\nlpGRkaHWxOCTX1np6rWaHqzCWqFWKRi1mDiq8w0+9ifY2QqTCmTQt4jQhm/of7yxH0IsicyOOtq+\nbm03iMfevkBv2mNj/zjKaSDJyUmMMbeF+XEXwUCKjEQzjnZUxVph2k2wmXXsHUVZ2Q60jaTm8iVW\ntwO4TQaWuxDGq0chlu90F10HKBTLF5FxvVbNq3dGAAjEmts8t2J21MHJaYxk+un55p6EknzxGzud\nX/iUmBlx8JHXZ5/a5zvOxu9v/e7jlv7D//6T7wxkvqxMM7IgvkWk060jGjIyII+Rp8WBL8bP/uPP\nEIl3V3l+GLqZJZlSgFmnjf1j6dzVcCzLlL3Z2kurUhKKthfEw47OxX6ZfIlTf4IhR+soULkqohYU\nbZtn+PyXaSWVsohLr2NrN9x1M5GrGG7YRjieymM267Da9Ny7M9Tx9aFYhrXtAJNum2SRpFatxGUx\nMOI0kSmVWOohUpyrszI7j+iLIm2v+TnDTjM+f0IyqtkPhuq8qnN9tlx73lSrVf7grZ0Gkbu50zp/\nu1oRyfe4eBsEBnGukQXxLcLr7T4CITOYyGOk/8SSOf7Bb3yNI3/3TQOqNxAqGpWCOx4n2wftt8H1\niuZI4h23o6lxxMXrNSqGHCaOwiWELkyS88UKKoWirfPBaTiF02zApG8Wqm6bkWidb+/chJNH2zfL\nO7zare86pLIF4qk8j3cDDHdp5XZwGkMrKBhxmlkaczFkNmJUqChly0QjGfz+FHuHUTYOwl1Zp2k1\nKtx17hJzY5duFJ1ysxUKARUC+cLTyasFeLR3OdZveWO5nqlURH77syskElkOj6Ok0nk2t1vb0pUr\nVb741c1neIQvBoM418iC+BYRCt2sClnm5UceI/3n3Y1T1vZ6u65GCYHYDQoBxq0Wtg+aHSKuUsxI\nRK2KzXnLKoXA4qiTUqZEyJ9i1KJCJyqZdFh4MOVlZtjeUvSeBJLcGXU2dGO7ynEwwbC9OcfUVWep\n5XWa2D6O3ExdCfSUc9wNjh68oiPxLGN2M+t7IYLRtGTktFyp4nVL59sOOc3cnXQxP+VGr1Pxhbe2\nLqKU92cvxYWigxXe8pSHkzYFnf1gefJyoeCy3dy3+rZw6k+QSOb4O3/jR3m86ufv/D+f46f/wq+T\n7JC7/e6j42d0hC8OgzjXyIL4FnHbe8DLPH/kMdJ/StdopdtOQLbj/oSXgxPpNImrHJ7EaNBOoog/\n1OxssTDuZnMvfGFQUamKFEsVjv0JVjb9HBxEEfJVFkaczAzZmjq2re+FmPBY20Znt48jvDY3jNtm\nRHHmmpCus6RLpPPcGXdJdoPrlhGXue8NIiJdtp6+O+Hi7rCTd989ZmnCjbmNx3QgKu0u4rQb2DwI\ns7EfIp7M8w9//Wv8jX/8OUrlCrlC6WKt0K7lt8tqYHO3tyYb7VAqBMmc5fpUjMJTcnh41uTzJf7S\nX//P/MI/+wrlcpV/+Eu/RyCU6qr49f3HJy1zjAeVQZxrZAO+W4TD0b7IRUZGHiP9p53XcCuMLSy9\n2jHmsrDZQ0excqVKtSpcRF3dFiOJ01r+sFatZMhuwqrXkko1TuTbJ825f1VRZGu/FpX22gy4XWaq\niKTyReLpPAcnMZbmvKzsSx+f06Jn84mfYrGCTqVgaWmIdzd8F8/nC2W2DsIsTXtY7dJvV6UQmJ92\nUypXUasUnF4R+0oBlie8RKIZbBYdRbGKUqmgUqmSzpcIxFK008/DLjM6VecpTiEInBxEKRQqCMDm\nZhCdVsX9GS+JXIFQPEOuIcdUWihIpdGs7tZSSH7g2+7wkTfm+Llf+wp/+Piw5bG4LQai1yiaVAhC\nUyrN4qSb06M4o8M2Vg8bf5Ot08sxsn3cXweL50UylSdfKLO67uPf/IdvUuohj71cqfLO+0d8z3c+\n+056t5VBnGvkCPEtYhC3KGR6Qx4j/WVjP8S/+u13enuTKOI2GRh1mDBo1B2jogIiS2Nu8okCpRZd\n71p8DaO2y+15o1LFtM3CkE5PJVni5CDG6rofnVrZcAxLU+3zZsPxLGvbATa2g5wex8nG8xgEFdlY\nngdjHu6Nu/HajA2fOWw2Xvi1lstVKgXp81jbC3bdnrhcFTkKJNg8DLOyGySWalyYLE94Wdnw4w+l\nWN8JsbsbYWur9t/gaRKLQsOYS/pc74w7CQRT7J90bj87O+LAfSUlJF8os7bmx6xWk8+WoAp6tQqP\nzUipRW7vYSDO5LANXZ0Dycc/vIRapaRYqqBUKLgz5qLaQsVPeK2sd0jdUasULE15uD/t5f60l+UJ\nN2NWM8q8iBklHr0ej16PCSVbG0Ey2aJkpK8+ZSISz7LXxXW67RgNaj720SVEET71u086vl6jUWI2\nXe4E5OTCugYGca6RI8S3CIuluwIQmcFFHiP95e0nxyxPecgVy+x0IwpEkQdTXt59/zLnUCsI6HQq\nzEYtdpueilJg/SREtSqyOO4iFS+0Leppx5jBhFmtxiioCZwkCEq4YGzth5mfdbNxFgE+CfUe8S4U\ny7WiwrrCQqNGidNmZMhj5p33jy/iosMeSy0aPOlh9aDxvEZcZsxGXdepCmaDlgmvjVA8QyDaGNlO\nd7AbS2UK6HVnC5I60Xdv2sNKF8V9apWCxXEPa1uBWhGc00Toindx7iydQKAmktsVumWyRTLZIhq1\nkolhG4e++EXb50/9wRoAbyyN8Su//bbk+w1qdcemGwtjbtbWpVs15/Jlcvnm41Momz/1JHw5RrRq\nJco+tJR+nlSrItWqwPLiML/z+dWOrzebtJgtek4DCYwmLZNjNuKJ3v/dvMwM4lzzYv8reMmoVOSO\nOTLtkcdIfzn1JVhf9XOwHebukAOLsUXuqCgy4jDxyvQQKxuNgqQqimRzRQLhFOvbQbY2Agxp9Mx7\nnGxth/GHr9/RLpcocLgaZm3FR7SNJVwgmLpwgtCo+nNbLxRrua/Hx/EGoWa36SkUKxwcx7Cb9ReP\nm/UacukSJQlR1oqTYJInOwHKpQojdY4Qww5zV7nWwUia+bHLBiLTI3aedCGGFybcmJUaVjb8VKsi\nuXwJh705sn2d/PJiqXKRt/v5t7b4zS+tsHUY4Zc/9S2OAnEWp5o73xl1anaO2xdaPpjxstpCDLdC\nEAROJToqquvGiMdh4v/7/KOePve2IQjwxa9usLLmk3xeoRRYuDeMd9LG3eUhLLaaGIZaw5rVrSCB\nG/w7fRkZxLlGFsS3iEzmZob7Mi8/8hjpL/UV/7t7YUwoGx0ZRJF7k268egPBkyTVLrvThaIZlB3c\nBDrhdZq67lCWSOUZcZlr6Rz2zj7EnXBaDSzPeqkUK01R0+rZJcjlS1ASL7bvKdWOY/84xpTHKvGp\nrYkkc+TyxYsFiatOaHciHs1eFMEV8uX2UVYRHkx52doOkbjiPLB9EGly49C38WBuxcSwje3D2u8m\nivBL//HrxM4i5j//776GxdjYQlgQaoWRlZL02FKrFNyf9rKy6u+5bfPcrEsyWu+xXY6Ro0ACi1HL\n7gucS/z2e0f86r/9Op/54prk8/NLQ6zsBDgNJlnbDUo6iJz2YLs4CAziXCOnTNwihoY6G8nLDDby\nGOkvjzcaI0rBcBrbsIlwPMv8qJNMIs/6+mXEMRLNYDPriHfRgld9w0itQavuye94az/MvbtDvLfV\n2dLtKlqNijvjTqiKbB2EiEYzRFs0AMlmCxh0arL5EolUvklYApg0GkacZnyRJGKXMi6WzGM2ark/\n60Uodn/e4VgWh9XA3NwQ721IRwjPeTDTHOE/p1ypYtKrKWcuW3d38gyWwmJqXpCc5w0XimW+vnJ0\n8bhSITBhNvP4nWPmxh2gEShUKmhUSgxaNdl0kZPTOGtrvYthAFTS73p3u7GxzHubPixGHTN1fskv\nCulMAZNJi9NhpFgsk7qSanN3wdu0a6CVWOgoFHJ8sJ5BnGvkEXCL8Pt72w6TGTzkMdI/svki4Sui\nTwS0ahVLw052tkNNNmeBcJpcrsTyXGfTeuF6EgaApVkP+0e9FzqtbPr56LeN9vQelUqBUaE6E10C\nxRaRynMOT+NYjVpc7do6V0WCxwncWj0zQ/aujyWVKfB4O0Cq2FuBUzSRpZi7kqohgt2s47xHyfKk\np6UYHvNauXfHS7pODMP17PViiRzTow50mst4U7xFusviuJuT45o43T+KQqGK7yDOwU6EtVU/B4dR\nyj0UYl6lVb3nq3ONXRB3j6MEYy9eRHB7N0S5XKFYLKNRK1m82yjilEoFvliz60pZIhVmey/UsuBx\nEBnEuUYWxLcItbr37TmZwUIeI/3jrXcPmh4TAItCxeZu6wrrYqnC6laAe3e8N5C80mg1SpZmPKxu\nXr/j29Fpgnuz3q49gfVaNYmz4q/9wwgOa+d0BX8oRSKe5d6ct8nnVqNWsn9cE/PReBb/cZwHkx7u\njjh5MOFh1mHl4aSnbTe9PX+MO1Ouls9Lsb0fYWHcxdSQjXuTHiwaDYlontfnR1gccze171WrFCzf\n8eKw6DjxxVnZaI7CXseK9SSYZO8kSlUUmT/LF860cjC4sgMgFW2/CZoWUc9coVEQatRKXrk73Nfv\nftpks0X+/j/7Cv5Ail/8la/hCyT51nuNlnbjE/aLwsZ6Usnm61ypVNnZ73135WVlEOcaOWXiFmG1\n9pZ3JzN4yGOkP4iiyG99QboavRsjf4CVzQDzsx7WWzRSCIZTTQ4I7dDr1DjNeta2AjcS2of+LKF4\nnJlxBwqlQDJdwGzUEoplSEo0H0hlCtjNOpKpPNlciYlRe0NL5laUK1VWNv0szHoaOv1NjtjZrvu7\nWKpIFoM9XBrm/f1AS92uUiuYG3Wg1akoV0S2D8NtG3eUK1U2d5sFTTpVZOtKZ8CFGTc+X4LVFhHj\nflAsVdg+DDM5bMNg0hI7aB4n2Svb+9lcqRbR7tNKKxaTjkwfBBsff21hlDeWx/rzpc+Ir/7hNk6H\nkcPjGKe+Wv7v1Qiv3iTRctxhJOpvjhpXKiKf+/I6d2aaix4HkUGca+QI8S0iHJZXpzLtkcdIf0im\nCxdRzKu0s9a6ysZOkOkxaQP7UDTDzHj35vazYw5O+lDYMz9Z89TdO4qysx8hFE6zexChmC9zd1I6\n6upyXaY/bO+F0ai7nxp8wca0Eq2mc96ty24kcJpkwmJmecqDUadm2GnmwbQXs6EmYsSKyO5BhLWN\nAFvbQcZ7LNQDMBu1HJxeulWoVAqW5zysbwclFwdN3HAHvVIVSaTzxLLNEUmzQYPfl2x4bHLM3jcx\nDHDqTzLkNDU9vjB+6bt8d9LFD33nXXTXKCB8Xnz1D7f5F//mLUKRNL/2G1+XfI1CKXAs0QLbbmm9\nA/Llr22x3WZ3aJAYxLlGFsS3iEFckcn0hjxG+sMnP/uoZSQ40mMupV7TeqNNp+5uE85k0DREVW/C\noV86Klgoljk+iV/Ys9WjrWsmUa5U8TjMTa9phfKK/u1UCHjvzhCJeI5wNMPpaYLNFT+FSIHQYYK1\nJz4MFQVLoy6Ojhtt1w6PY4x6uvRGFWFqxI7FoKV41rFMpVIw5rGyutl9BD7VhxSGdK7ISSjZ9PiU\n09aQH6zXqYm1sda7DgJg1+uaHq+PEO8cRTj0x5tecxt585t7/Pw/+RKHxzFKpQqnvgSZbFHytbNz\nbsniV9XVAVtHuVzlV//9N/p2vC8ygzjXyIL4FlEsSv/DlpE5Rx4j/eEk0CxQAJx244WA6pZ26QVX\ni/JaMeqxUij2x/fTZGgtwnOFEpPDtqbHr3YzMxmaRbMUgkLA5bwUz0qh1tGtFRaTlicb/qbFiMBl\nYDQazbK1GSSXbcy7nRlz4LUYsLbyiga8DiOvzA/hsOo5OIlxGrz8nRem3By02BVoxeFpnLvjN3Ne\nWBp3c3/Ki8tqYNhpZmbEzv0xN+url+kaEyM2HDYDoadQ2La7F24o8AMw6y//1uvU/PB3zff9e/tJ\nJlvkF3/lD/i//v4XWN3w813fPsPIcHvBJrRweal3QxwbtrI031iIZ5BYMA4igzjXyDnEt4hcTu6U\nI9MeeYzcHFEU8QelBfGQy9RzhDgcTSMgvbseS+Rw2A1EJQp76rmpRVs9Dkv7CX1rL4RRryaTuxSc\nlSuJvKouLagW5zysnHXhExBZmPDwePUEl81AWML/1mkzkkp2kapQjyhy787QRR6yVqPiwYyHaDaP\nP5IGRGZGHIjFKnsHETxWIzGJRUqx2H0qTD3HR3HuTXl4shfoucpuccLNSotmGgK1rn/lSoXD03hf\nUyXqqVREhmwGjuvGvMNcGyNqlZI//4lvx2S4uXf102JzJ8jf/YXPEz3Lh65UqvyVv/mbbd03RMDX\nodGGTqfm7/7NjxMIpfirf/u/UDnb2fjAgxcrl/ppMYhzjSyIbxGD6Psn0xvyGLk5//qTb7Mv0QXN\nZtbVhEmPVKoiCpVwMaFeZdhl7iiIK10W8nXDe5vtz6FUrjJkMZDJXeZXKq8IPX8whUJx2YSjFedR\nbcVZc4n1rZo7hlmvIZrIcvXtel3veaqLs40d2grFcsPfSqXA7tZlukm1fPk7OGwGhp0mUvE8YX+a\nxVkPG7shql06cJx/39pmgIVpF5liiaNgoithPO6xsr/fvtlFKlNARHxqYvic0hXxeO5D/NM/9jof\n/eCdp/vl12R9M0C+UOLf/ad3LsQwQCzeWaiNjlg5ikkL4vPdiXy+RL5QZnbKxfSEk+29MFaLju/5\nzrn+nMALziDONXLKxC1iEH3/ZHpDHiM34x/8ylf5z5+VblPrcZtJdVNoJUE7z+FwNNPWYgyaq+Nv\nwit3m1MirqLXNwrTTLpxezQazzI/5en4OTa9lsVxF16zgY3tSxeFg+MYc1IFfNc4zXSHPN6rCxGN\nSsnytIdxu4mEP83Gip/TkzjJZI7NtQBei4HFGU/PHsNbe2FOTxI4dDqWxt3MjDT7K5v0Gu5NuFnw\nODAqVB3Tb9KZAhPDNtyONp7ON0QE4qlGEfnqnI3/5ode4Se+d/mpfe91+J3PrfCzf/tT/K9/67/w\nT//F7/PF39vkg29MNXSU7Aaro7kN9zn13Qi/eWa9+OMfewDAxz6ydK1F2024rd7HgzjXyBHiW4RG\nI+cuybRHHiM34wP3x/nC17aaHlerFGzdoKhNo1a2LNILRtIszDVak12lnxHi9NUGFWfYzDpGPVaC\nJ3EO1kK4LTqGRq0oFQoerfuaJH0mXWhrAaZWKVhZ97UUfWWJnOhcvre8xBG3hRNfd84barWS2Qkn\nT1ZPLx6TOvRgKE0wlMblMDI+bqdYKFOoVNg/jXWVP17fnW95zsNRJEkyU2Daa8N/EGcjXIuSG/Qa\nrGYtiVTrRZZCEMjG8+SjeSaGbRz6+l/ctrw0xKPdRl9rj8PCT33s1b5/V6+kMwX+0S/9Hn/s46/w\nm59+RCZbZK3Og/vEF+fUn0ClUlDsIcc+nmm9iPL7L1NHrGeOE9/97TNYzDoW5jovAvtNr2L/WTGI\nc40siG8RZnP3ld0yg4k8Rm5GIiW93ep2mkhnCuTOGiiYjToMOjX+cKorX2KlUnqzzWU3MGw3Ewmk\nWRh2olQrLiZAUXEWVxbFhqjVOQpBwGbRo9OqznKMBarVKoVihXgq11K8+cI1MaBWKZgedaBRKAgH\n04SCaTbq3AXisSzxWBalUkCpErgaqDr2JZifdbHRolnBzJiTrW1pD2aodV6bmnCwX2d71soRQAqD\nTk23jZO9bjOCSEOUuhORaAav23zhRazVqpgYdqDT1aZFQRAQBSiUypwEk2QlmmusbwdrHdLGXSQj\n2Yaxks0VmfY4SWUKLVNPFmY9bDyptZuunCTwekwEws0euddlasLRJIYFAT6wPP1chFgwVPv3ZDHr\nSCRy/OKv/AGPV30cncQvvITrqVREdvZ6s//S61Wctiia9ThNRHyXqRSPVk559f4Yep2aB0sjvZ3M\nS84gzjWyIL5FRCIRTKZmz0gZmXPkMXIz7BbprVSbQUdkLXKRQ5ahQAbQaZSMTNnRWLSchFPEWuQC\nlyTE6dKMh4PtMGsnNYETDLQu8hGBe/eGiWfz2E06ErEcgWCSZDCD1NQuAi6bnqEhC4l8kaO6yOIb\ny252jwoc7UfYXb8UiK3kT6UiMjRsbXBkOCcWy6HTqMhLFKSpuxBUxrrtZ5tJ17pYTxRRKhWIVRGd\nXs2410osmu0+OqxUdP3aK1988X+FQpm9A+mcX7Vayb1ZL092mzsIFksVNndD3JvxELwiZvcOIizc\n8bK621yQp1Yp8B1dLhYKhQqjGg3X71HYiMWsI1lqXIDcnxviJ3/4Fey63lpj94uf+/nPsX8YRRBA\nqVBcLCCkxPB1mZp28WRPemHkshsbBPFnvrTG669O8PrD8b59/8vCIM41siC+RdjtzTlpMjL1yGPk\nZrha5GoqytJ5fKVihYPNWoRKBLwOA55pByv7wYbCLI1aeSEap0bsVHMVNp90n4MnAOtPfNy962Ft\npfP7BCAezxGP5xCBO9NOiohoUfD++yF8gd4qxB1mnaQgDkczzM96WNsLNinqq1ZtUlTKVWa8NpKp\nPLFojowiz7DThNGgQaVSnkW8y4QjmYvofD5VZCvVffrK4h0v69dsdV3qchu+VKqwtu5nad7Lagux\nFZRw1QBY3wqwdMfD9nG0Iao/MWJnf7PxPHd2wkzNOSWLPnvBbtWjMKoIRBsF+ty4k8lhO0qejyA+\nz10Xxe47Qkqh06pw2A1otWrUKkVth0YUCYbSbG8EmZtzsn0YwesyUS5XiZz5O0ul8RR7aMQzSAzi\nXCML4ltELpfDYunSeF5mIJHHyPU5DSQkUya0GhWHG5232gUgHs0Sj2aZmXXiK+QvUgC8LjPJTIF7\ns142nvgRe3AxqKfSxkqq3XHt7UVYvutlZd3P8ry1Z0EcCKRQKgTJ1sgbO0HuzXt5st0oOhMdChDn\nZz1sbgcbCumqVZFAl97M3eB1mzk86s1buB5jj56zuzshJkZsko0sTDo1rrMueFdZ3woyMmQhXShd\nNIuQaugiAIob6DO1WsHcHQ+7vhiZOjFs0mv4qR95jY9/aBFBEAgEks/lPtJrIWM9KpWCu7Mejo6i\npNIFfLnWUeXT3QhOk47wcW2Rp1YKjI3a2ZXoQmeztu5cN8gM4lwju0zcIvL5m3dFknm5kcfI9fE4\nzRQkokF3xhwU8r2pkKOdCG6F5mIXvFAoszjuYu2x79piGGB3P4LZdD1P2GCkJoCs5t6r5CPRDAvT\nrQuK1jeDzE00Nqg49MVqrYYl8LhMHBxGb9z6uB3DHguFfIls7nrRzsVZD48enbA4230hValcJRpM\n11pgn//OosjyjIfjwxhbO0GW7w5JNjY59SfRq1TozroCtro0B/sR5qfcvZ4ONqsO75iNx7sBMrna\nQk2lVPBjH17il//WH+fHPrx0EdV/HveRXK5IOHK9xiNjI1Y8DiNraz7S6UJHlzqXw0S8rutftSJi\n1GsQr6w3P/KhuyzND3F8DbvFl42rhb2DONfIgvgWMYi+fzK9IY+R66NSKRpaueq0Ku5Pezha6b4Q\nqx7fYYylKQ/DbjPVbJmtjeCN7WTFqsi4hJ1XN4QiGeZm3Ly/er3JfWsrwMJUndCroyqKHB3HmRyp\ns3QTBMluYHqdmmy6KLn46BdT4w4SiSyJ5PUmbY/TxMZGLZK/seFnfqZ7AZrLl9jZCuE2Gbgz4sCh\n17O+HqBSEalWYXXDj0qhYEyik1oglGJurLawqLQxed7ZCLI85+14LC6nkYUFL3cWPMRKRfZ9l6kW\nZoOWv/c/f4z/4Y9/EKupsX3z87iP/NpvfKPn3QGdVsXS/BCnJwl8fulCOSmsts5RX7fLxOiQjT/8\nxh7GLjszDhKDONfIgvgWMYi+fzK9IY+RmxGNZ5ifcnF/0o0pJ7L59gn5a0YYATRlkagv1WDldFMy\n1/RChlpayHd/2/UmMp1WzeZGkDtjTqZHHU3Pl0oVErEcet3lVn9eQvTqdeqe3CR6ZXrCyclpnFyP\nUf163HZDfYCXne0gc5O9tWiOxrLs7kdISBRaJlJ5dBo1sxKfubbp596ct613tVgVWX/sY3HSjUYt\n7bUx5DETKxZ4sh9kbT9EpSqi16mZHLbxI39kgb/y330PCy28pPt1HxHF7sbqzl6Yz3xxrafPtlr0\nmAwa1tZ633WRsvZNpRsXT3/uv/0OfuJHHqDXqbHbWvsWDwpXnXIGca6Rc4hvETqdrvOLZAYaeYzc\njGwgy/47vht/jkqlYGbey6NrFnO1Iy9h79Ut2VwJfzjL3IyL7d3e7KomxuysrvvZOXvf3Vk32VKZ\n48BlrmYyXeADS6Pk8yUEQUChEHAadYhVkXK5SjKZJxhO176/hV3bTXDYDPj9ibZtezsxPWZne6cx\nl7RSEdnbCbO04GW1B+u2dlTLVfb2IyzMezkJJC6avogirK77udtFVHpzPYDVpmdk1kU6X6RUriCK\ntchpTlGFXK2gc2bUwUc/eIcPvz6LoYvGEv26jwhC5/QeURT5pV/7Wk+fa9Cr0WtVBFrYp3Xi6r8h\npVJoiE67XSZef7XmLHFvcfha3/GyM4hzjSyIbxF6vZzcL9MeeYzcjHT6+tHXc1wuE6JOyepuf4TT\nVbLZmzkAhCJ5TgNZlhaGGlocdyJ1pSPcuWi8O+sGpcBpMEk6WyAWybB/2L6QzXcSZ3bKyU6L1sUG\nvYZsrvcostNuYDsm7ebQElFkdNiK1aSjUq6yvS3durkqiqyt+VlaGGJ9L9ixbXU7XA4je/sRBGBz\nI4Ddrsdm0ROviyZ3e/6JeI6ERLvi+98+zsyYg0983/1aTnMPPMv7yOe+tM7GVm//VqYnnayuXm/h\nqrgifgGmJpzs1FnqfeR77qI8swBUt4jADzqDONfIgvgWEYvFBq6qU6Y35DFyM46Pb2ZnBeAasvBk\np/+R4XNS6Twmi470NVMnpsaMnAZyrFs5rtkAACAASURBVG4GuhbFarWCk1Ppqv36aKrdoiMU6dw4\nIpsrsbsdxuUw4nabqFZFstki0WiGXL5MLlVgaXGI1a3ur6PLYWRrN9xznvbdSRdbOyFOO78UgLV1\nPxPjdtKFEpFexfcZHpeJSPDyOsViOYaGLBR06gt7uWNfArfLRLjHRhx6nZpPfPwhP/6xB9cWc8/q\nPhJP5PjVf/v1nt8XCl7fiWRy3MHuFeeRq9epld+0zCWDONfIgvgW4XT2lsMmM3jIY+RmlMvdt39t\nRThxvUr5bjHo1MyO2knmiuxdw1Js5+BSTKxuBpgcd3DQ4XMsZh2RSGfxl0jmmZ50spfpTlBEohki\nUenrJRX1bMWw14JRVBATpPNDW2Gz6NiWsNrqxOFRDJVKwfIdD6WqSDSeJdziPKQoSuQ3+/1JJicd\nHAUvUz48HnPXglipFPijP3SfP/5jr2AyXs+J5JxndR9JJHMXC4BusVp0hG7QrU+rbZQ1CoXA4RVf\n560eu98NIoM418hFdbeIVKp//pwyLyfyGLkZZtPN8uJcLhP+PvroXkWvU+PQa1h595ij9SBunYal\nO16Uyu7jol5341ZnNxX0iWQetaq7aKNW058tZl0Xua4AS3NeEkcJDnbDzI33NkmPeq1SphldUS5X\nOTyMcbgTJuJLMT/l6upaKpUKjlrsRBwcRJkduzyHSKw7kT034+If/d9/gj/9k99+YzEMz+4+Mjnu\n4EPfNdfTe256foorxWETY/Yma75EItfW5UNmMOcaWRDfIorFp1eZLfNyII+RmzE6Zuv8oja4h8xN\nLXj7hQIYsRnx+y4LiWKRLJvvnWBXqbl3x9uVIDMZGiNk3UToyuUqc7PdWY+tbwVZuNvZEqwTKgnL\ntnpmJ5zMemxsvXdy0VFOI3Q/ZVnMWvZvGAkcG7FRLFYQgK2NIGaNuuNvMH72nlZsbQVZOrNUs1na\n52l63WYmxx387Z/9EUaGmm3crsuzvI8oumjxXY+qy4VZK0pXdoGMhmaBfX9p5CKHWEaaQZxr5JSJ\nW8Qg+v7J9IY8Rm7G/PwQX/ny5rXf/xT7TLA852XtiXSm63mHPI1WxfJdD9lymcOTeJOZPsD7a5c+\nxE67kf3D7tIb1rf8HXOOrRY9DouOzTV/LQdYwmVDp1Njs+jQalSoVIpadzJBQKNSIFZEKuUq5VIF\nCmX0dTm159yZclHJlDhYDTTlCx/uR7BZdA1+0lI4rAZUAoRyvXXsq2duxs36RuMxBAMpJiYd5Atl\nyWsP3XW/W1/zc295mECHXFmlSsFf/0sf7btP7rO8j9zEEeQ6xBONv3kw0nyNX7k3+qwO54VlEOca\nWRDfIvx+P5OTk8/7MGRuMfIYuRnf+33zfPMb+7zzzuG13v90YsMw5DKx1UXxW7FQZuPxKYsLQ2hz\nFVxeM0qVErFapVQsk8+Vebho4523ayJ42G4kGu0uH/PcDmx5YYgViWPRaJSYdWoO9mv5yGurfpaX\nhykWy2jVSgq5EoVcmYAvQTjWXcMMz7AFx10nYlUEEXLpPPsrfhClr3U2W2TcZSKrLlEstY7CDnvM\n13YpgFq+bjol3RHt8CDKnbsetg4jkm4V3eapl4uVtvnDSqXAD39kCa+n/4VNz/I+MjPl5Pff3On6\n9Tfp9CgohIY0lGGvBZ9EipPbZbr2dwwKgzjXyIL4FjGINicyvSGPkZuhUin5M3/uu3jvfzyi2kt1\n1hnx6PVcBzphUqsJ9xBJq1SqFAtlTg+bc1UDfjXpVM2hYv39ExaWh9k4CEuKtyYEWFn3szQ/xOpG\noyieHnOwtRmsfylBX5JY4Pq5hkFfEpVC4LSFw4UUR4dR9AYNcxMuqkrYOgxzNVhbucZvW8/8nJe1\ntdYLlK3NIAv3hiVdMpJddM+7M+dmo4Pf8cc+usyP/uBy54O9Bs/yPtKrE0a7hU4nxkdslCtVKpUq\n4VgGh90gKYiX5wcv+tkrgzjXyEk0twiNRm4fKdMeeYzcnKEhKw8ejl3rvb7TBDNjzV3cbsKo19pz\nrmuuTSe4TLrR4WBrxcewxcDEaJctoQXY2A40FL3Nz3nY3GwWcFfzNa+D1dp7l7Bctsjmup/tFT+j\nFhNep7Hh+UTq+qkS0F2a+OFuGM+VSKMg0NE1QqdTd2xh/Ik/+pA/81MfRHhK+erP8j6ycNfbMV+8\nntw1/KnPsWrVhLYiRHdj6DIVSYeTqQkHFvPgNZ3olUGca2RBfItIJLqPksgMJvIY6Q//y1/+Ab77\nj/RW/X5OzJ9iZqxLcdkJUUR3DdHTrsHI2Lix6bHAaQLfdph7cx6G3ObWgk8U8brMLM54mBt1ICAy\nOWZndzsomT5g6CJfthMpidbHvXB6EiflTzNf15yiF4s0KboJMGezJYrpEst3h5ibcuFyGDEatZQ6\nRPqnpxwk2kSRf/gjS/yp//qNpyaG4dneR+am3fzRH7rX9etv0va7UrhcoGl1aklHmB//4ftP9dq+\nLAziXCOnTNwiXK7eug3JDB7yGOkPer2av/g/fT8KhcBXf2+rp/emUnlyuSL3F4cIxDIEw6lrO0+M\nj9g42Ou9SUC7PMutLemJTKyKrL9fK9rTqpUsPxglmy+hPLOpyqYLBAIpwscJwse1z3jl4SiPVn21\nHF8J+lHsdXwcZ3rGyd41rsM5xWKFw60QwyMWfOEUpXIVk0FzbXF1dBJDpHPOeDKRI/n4UtC7XUam\n7ngIRjOEIs2ifHTExtqGdDMSnVbF4vwQH/vo0lMXbM/6PvKjP3iPT376UVevLZerqBTCtdJeErHL\n38LpMROJNP5bMBg0fOcb0z1/7iAyiHONLIhvEYlEAqOxObojI3OOPEb6hyAI/z979x3f2nXdif53\n0HsjKsHeyy26KlfFapZiW5JrJMtVjmPLLVZenMRJbDlvYk9JsdPLy2Qyk08yk0liz5vn9HFix4pl\nx5Il+XaxVxAk0YleiHbeHyB5WQAcgACIc3nW9/ORfYlzAGxcrrvPxj57r4VPfupBTE956q4Wls8X\nMXOjNLg06hSw2XSQysWlgXGRRaHAQiQRIZXNoVAoQiRiIJOIIZOI9waXmVQW+VwRQ0NWLC7469qx\nV205cFe3BqFg9Sp3+VwBns0oZ5aD7Uy+4mAYAGRNKnubTuUgFjMoFI6/9jeXK8CoksOD0mdqZFCZ\nSGxDJhUhl6svQ4LFpMHs9U2wALp7jNAZVchk81hxlTYismCPZCrRauR47NFx9HSb0NNlRHez7j5U\ncdL9iFolg0jE1LxuX6GUIpms78uMVCJCYN+MsEItBQ59x3rg7gHIZDTsqYUQrzUUGTySy9VX0YcI\nD8VIc8nlUnzggxfxe7/7wrFfIx7LIF7DRqpqxiccmJmpPStCpZRfAKBUcA9SzRYt52AYOFrk4Mjx\nOnPMVuL1xjAx6WgoMwQAeNYjpW8LDAOVSgqVSgaTQQWmUETAG0NHp35vM5vBoEQ8nqk4CLfb9XC7\n6yv1ndmZkWYAbK6F9zY9WiwaWDsNmF45uA57bNiGz/zEw3DYTrZE7kn3I/Hkdl2bWI+Ti9hu1sIb\nuTkCPvwJRQyDdz1xru7XFSohXmtoDTGPCDHvH6kPxUjzPfjQCEZHGy800YjZGQ+Gh601n5+rshP/\nxnXucs8Wm7am91mrUHFtVwMZso6Ym/XC3GA6rHg8g/FeM7QFIOiOIuSOYOHGJuanvQhvpbDwugfd\nVh06TRrEvAloRGJMjtqhVB6tmqfR1FcxzWrWwFVhc2QwkMD0tXWM71vn3NVpwBc///iJD4aBk+9H\nLB0avOWRsZrPF3N8EStHe6gAR+zQcpnxEVtb/q5vVUK81tCAmEe8Xu48pETYKEZa4/0fvNjW92dZ\nYHkpiLExe03VP6oNiM+eq54FgwUQj1fZlOc0YGTQgsG+Dsg5bi9nt5s3i1QosLBaaxuoV5OMZpBO\n5cquQNmdufVtRsEASMS3MXttA+JMAZMjNuh1N7MPbHgiZV6hPLlcAo1cwvkFwbsRBQMWapUMX/js\nm6GssXx1s7WjH/nQ+y6i01Fbtb3iMcoqM4c2MwajB9dwT4456n5NIRPitaahATHDML/OMMwswzDX\nGYb5a4ZhDPuOPc8wzCLDMHMMw7yl8aaefkJbr0PqRzHSGhMTnRissXRxqxQKRczOeDE6aoNYXGUp\nAstWvf0cDFZfvmG1aeEuM/MrEjGYHLfDsxHBwoIfy8tBFLbz6HKUL3etVcvApHJwmtSYHLbC0tF4\nsYNMuvEBdvEY65DT6Rxmr28ivZXG5KgdDAM4D31uhUKCwb4OjA5a0OXQw6hXwmbRYGzICo1EjNUa\nNgWGt5K4MO7Elz7/RFNLMderHf2IRi3HA/cO1nRurkrp67JYFt6NmxvodHoFtvd9aRQxDN54/3B9\nrylwQrzWNDpD/C0AZ1iWPQdgHsDzAMAwzASA9wGYBPAYgD9kGKY5uy9OMbGY/opIdRQjrSESMfjI\nR+9rdzMAAHNzPnR1mSoXNGCYqnldc9nqs2vaMjlYO0xq2K1aTE95Dgy2Y9E0Nte2MNBlxOSIDZOj\nNgz1m2G3amGWy7C6FIR3M4rZG5uI++MYHap92Uc5KytBqBrMXNFIpbNCvojZaxuYGLRiercwB8ti\nYtgKNp3HyrwfCzNebLq2EA0kENiIYn7ag3C4fMEWrVYBs+XmFwW7Q49PfuwBDLf5y1e7+pEXvltb\n2fTtbJ77pH3sFh1i+0o2G0wHB3MXb++h5RJ1alWMFItsaRMxDzU0IGZZ9pssy+5G7g8A7Ga7fyeA\nr7Isu82y7AqARQDtvSd5C4jFYu1uAuE5ipHWGRt34MGHRtrdDACAazWEoSqDy2rVvxyd1QtdHN5l\nL5GIIGZKRUcqWV0JYWbKg5nXPVie98O/EYXbdXCtci5XwOLrmxgdOv5gj2UBk6mxmSm9ofEKW9uZ\nPEQMAwYsJoZtmJ3yVF2mUkk8noFELMKZs0685bFJ/OZvvwc2e/sHZu3oR+KJDKI15pyu90uN5VBx\nF5Xu4Hri8RHhrYdtVKtiJB7PHCj6wyfNXEP8UQDf2PmzE4B737H1ncdIFRZLe2cNCP9RjLTWBz54\nsa6qWq3k2ay8hrXaLvy52eprX5lDmSGGBy0IBOpLO1fN8rQXXTWuFS1HpWrsYtmMjX4riwGMDVkw\nOWLHbIOZL2KxDP7dF9+Gj3/yQcjl/Ejs1I5+RKtR4D3vur2mc+sq98yy8K8fjPn0vjXIUqkYwwPC\n6jczmcaXHrUqRvR6Jbq6W59a8Dg4/3UyDPMvAMp9vfpFlmX/duecXwSQB/AXu08rc37Zbsrv9+PZ\nZ5+FRCJBoVDAk08+ieeeew5erxdqtRpisRixWAwWiwVbW1tgWRYWiwU+nw8aTelWVCKRgM1mQyAQ\nAMMwMJlMCAQC0Ol0KBQKSCaTsNvt8Hq9kEql0Ov1CAaD0Ov1yGazSKfTe8dlMhm0Wi1CoRCMRiPS\n6TQymczecYVCAaVSiXA4jI6ODsTjcWSz2b3jSqUSMpkM0WgUZrMZ0WgUuVxu73i1z7S0tITOzs5T\n9ZlO4++pnZ8pHo9DKpWeqs/Ep99TMhnC0++dwDf/eQHDw3qsu5NQayQwGuW4cX0LZ8+ZkEzk4POl\nMTCog2s1DqNRDp1etnc8Fs0iHN5Gb58Wy0sx2GxKqDXSvePh8DaSiTy6utVYWIiiq0sNpVKydzwY\nzCCXLcLRqUIioYVMVoBYLMLcXAQTE0b4/GkYdArI5TpMT4UxOmZAocBiZTmG0TED1GoJXK4EzGbF\n3mumMwWsuxMYHtZDJJFgdFSPDpMc8RiDvj4VpBJjXZ+pf0APUaGAqStBTF4wIxLKIJnIw9mrwdJs\nBEODanT1yXDjevjIZ5qbjaB/QFv6TLMRTEyW3hsAbDYltrNS3HWXBYVCESsrcYyOGuDxpCCVikqf\n6cYWzp41IZ3JY92dLP2e1pNQq0u/p1RSjHvutSKZzMPnTZU+kysBo1EGnW7fZ4plEQ5n0durKf2e\n7Cqo1ZJ9v6cUxDIZ7rnXWvo9dWugVIjL/p5Kn0kHsZg58pk6O9VIp9MIh7d48+/J7XZjYGDgRPuI\njU0v5ubXMDasg0kvw7XpCM5PGJBI5eHzZzDYp8GqOwmjQQa7RYVXfujHuUkjYvEswpEsers1WFqN\nw25VQK2S4vpUGOcmjZBLZFidDeLuMRsW56Jw9qihtUmxuSXB+XEDMtssbGYZXC6XIPq9xUUX/uLP\nL+FDH74XarXo2J9ptx18+EzN/D1VHe82st4KABiG+TCATwF4lGXZ1M5jzwMAy7K/uvPzPwP4Esuy\nLx9+/ssvv8yOjdWejuU0c7vd6O7ubnczCI9RjLQey7L4wuf/Ggs8WOc2Pu7AzOzRGcqBfjOWlwJl\nn3PXRQtee7X8MQC4cL4biUQGPncYyfg2rJ16eMOpmm9Ti8UijA5ZMHdto+p5Q5MOzFVoYzX15mQ+\nbGDAjOXF+t+3HKtNC7+PO19zNRfv7sdnf/7Nx0ol1irt6Ed+94++g3/9Xm1VIS+MOpDcziGbKwAs\nC18wcWTWU6uRo9dhAJvOY372ZvU/g1EFP26uQf7YM/fibW+ebM6H4Llkchuf+/n/D15PFBfv7scv\nfP6xY7/Wab3WXL58+dKjjz56Z7ljDd2/YRjmMQCfA/DQ7mB4x98B+EuGYX4LQCeAYQCvNvJeQkC3\nwwkXipHWYxgGd97VV9OAWKtVoNuhR8gXQyFfhFQugVorRzixjVCZ0r31ilVYcymTHX/JxHZyG8vT\nN1Mq+TejGBqzYcMfR6pCqWObTYsOoxr57Ty862HOwTAA5Lfr2xi1q1rRkVp4vM1b+8g21hQApQE+\nnwbDwMn3I+FICi9+f7Gmc/U6BV5/1XXgNjMLQKeRweLQQ6GVgy2wcM35kJQksXlo7bvRrIY/WHpM\nrZLhTQ+PNulT8J/XE4PXU/rsF27vaei1hHitafRf6R8A0AL4FsMwVxmG+SMAYFl2CsD/AjAN4J8A\nPMeybP07EgTG5ytf456QXRQjJ+P2O3o4q7A5nQaIcwXMXd9A0BdHOJSEfzOKlTk/7JbG8+kCpQpu\n5VKwiUSVu+6Jyerr8/L5o6O85VkfZIUixsdsB9ZQDw6Y0ddpQMAVxtzVdSzNeJGsksN4P9dSADpt\nfcUtAMC9tgWd7mgmjFo1M7evuAnrya9cXkM+z6/L30n2IyzL4t9/+Rs1V6ozGVRH1lwyANKJLNYW\nApi/vI6FaxuQSkRIpXNHXle2r8jKHee7OXNpnyYKpQRPvft2PPvxB/DGRxr7IiDEa02jWSaGWJbt\nZln2tp3/PrXv2C+zLDvIsuwoy7LfqPY6pGR3jQwhlVCMnIz+fjMuXuyveg6znUc8Un4GN9fgLOeu\nQqEIR5kNatUGWLtrVytJJcoPaOPRDOavbkAtEuG2s05Y9UqsTnvhXg6W3RTChWVRMYdxNel0Dh0d\nGjDHrAptbyC9FsMARqMKvb0mjA7bmlKa+vq1dXzl1/4Jq6vlq9i1w0n2I9NzXqyucVdP3KWscQDb\n2WXCVpm7MOy+39nFC43Nkt5qnE4j3v/Bu/H4E2eOVf56PyFea/h1H4cQQnhihKOc81awfGaG/hEr\n5pu4/lirPZpGLBavXnyjIpZFpELO3F2JWAYRfxyhBtfOAsB2hSUYXFaWgxgfr7+ymFIlg6vOgadW\nq8D4qB0jvR1QF4H4ehQb0z4sXV2HqgkDYgC4fGkNX/1L4a0aXN+M4D/9+j/X9RxRjV+/fBWWxhT2\nzRifneis6735JB7LNLx8iNSHBsQ8kkg0L/UROZ0oRk7OY49Poqe3chnkvjF72dQ50gYLSxyWLVOk\nwOeLVUxNZbNVzsPr7DQgXcMg1e9rzjpc13IQujKFQGoxPe1Bf39HXc/p7+tAMlnbINxgUGKktwMZ\nfwILl91YnvYikzq4cWt11o/JsebksL12dR3T05tNea1GnVQ/8u0X55CuMwVYoca150pl+aUxhZ1/\nlX09Juh1jeekbofvvjCHT3zoT/HMk/8FL3xzui1tEOK1hgbEPGKzVZ+RIoRi5OTIZBJ87OMPVDw+\nPevF2G1dRx5vNHPPYa7VEBSKg7eRWRZwdJZfjjA9dbQs8y5DDQMEpUqK7czxNsQdxhZZdDuOuYSB\nBaKRdE1t3hXw1zaQ1+kUYJI5LE97wXKsbZ295MbEqL3h/NRSqRiONpZr3u+k+pHlVe5y1vvJZGJs\n1lACG0DFnM6ydAEjJi3uPXP03+atYurGBgqFIgqFIr72P1+Bt0pO8lYR4rWGBsQ8Egg0J1UQOb0o\nRk7WxIQDT727cjGBmTkflOqDM8LMcRe/VpDPF9HTc3SmVKMpPxM9OlZh3S7Lwl+lGt2udCoHWRML\nSCxOe2E1178escOogqoAKPMstGruWXebTYeAn3tWSyRi0KGWV1z/fRgDYP6yGx0KGfqq3DEASkUH\nxkftGBu0YLTfjLEBCyaGbZgcs8Ns1hx/qUuTtbIfYVkWC0sBvPj9RUzVmT5voNuEdI0z/IVC+S8y\n64t+rE15MXELV6d727vOw7qzFj68lUKwiYVzaiXEa41wtl/eApp9ISWnD8XIyXv6PXdgetqDmTIV\ny1iWhaPbhOV9eVDZE8oo4A/EwYiYIzOclQYKTqcR3hpm36w2LSxmDaamGqvQtiufL0IpFkHEADUl\nGmBZjAxY4FsJwbuzAdDeZUBewVa9/W4yqeHzVB/wM2AxOeLAzKW1ej4CAJTWVAcSmLjQhZW1LaRT\nWZjNGphNaiBfhH8jgthmDAublWepL/3bEnp761sG0gqt7EeuT23i3//aN1A8zp2S7dr/7ZSrxubs\nMsCzGIBMLsFQk5a6tEN3bwd+548+gKkbG8hkchji2M/QCkK81tAMMY+YTNVnHwihGDl5EokYz37s\n/orHpYeWM6zM+aHR1J9urJqN9fCRrAvBYLJsirGV5TIDMpaFuobd+6YONTLhFGZec3FuKqzHumsL\nI/2WqnWVtWoZJoYs6DZpsHxjE8l92TC86xH0WrTHrsusVEgxOWyDTaMEcg18YSmymL/kRjaQhCJb\nRMQVxuKVdSze2ERsq/pmRQD4xt9cxVYoga1gAsU2bphqZT+yFU4dazDMMIDHVXs2ikz66Eyyfme9\n+t0PDEHZ5LX8J00iFeP87T24+75BKJqYSrBWQrzW0ICYR4R4i4LUh2KkPXp7Tbjn3oGyxw7PeuZz\nBXTZj5/6q5xkMouurur5hXeVWzIxNmLD0hx3XlGbRYvEzlIC70oQigobl45jYdqDsUEL5PLSZkCJ\nRIRepwGTQ1YM2vXIBJKYv7oBj7v8GujFaS/Ge80ol/hBq5ZByQB2iwZSqQgGvQJdDgMmhq0Y7zWD\niWcxd3UdQV8ciVjjyxYYlH7P9YpHM/j+C/NYmvOBaVIGi+NoVT+Szxfx8msrx3puj9OIdKK25RIi\nEYNU+ugMcXQn88vdDwwdqw3kJiFea2hAzCM6XXMvouT0oRhpD4Zh8PZ3nCs7UxMtM8Caf92DocHm\nVnrSao5mayg3D+fZPDhT2dVpwOo8dxo4o0mNpRs3K9AlImkM9Jvrbmc1C9NeDDlNsCpkECey2Jjz\nY+7qOlyLAc7NbQCwMOXBaE/H3kyxzazBRG8H8oEkrr+8guByCOxWGon1KDRiEeavbmBh2nMgU8e6\nKwSDSdXUz1UPnycKi0PX1lvSrepHXnp1Ga9ectV8vtOux5lBKya7TGCCSQzU+G/G2W08Ei8Gowqb\n7jDUWjnONliljQjzWkMDYh4pFPhVzYjwD8VI+4yO2vFLX3rbkbLJXm/0yEwqA8CzHERfX/PWi/r9\n8SMj4HKzlFLZzW7dbFIjEUoil+WOG7NRdeT11ua8TZ0l3rUVTKBQpmJeLRZe9+COMQdsMglCS0HM\nX99ArszfQ7l0dcBOhg5n/QVDmmV+ahMWa3MqGR5Xq/qRb/3rbNnHpRIxHFYtJgatmOzuQK9CDk04\ng9C1TSy+tIKlS254XWGsTG1ieMCMsXE7BgYtFZc9aMqk8rPbdGAAvP3pOyBvwxKD00aI1xoaEPNI\nMnm06g4h+1GMtNfIiO1IKjaWBXqHrUfOzaRzcM/7MTHWeMouAAgGE7Da9g2kWLZsxTqzWQGwLMaG\nbUhH0ojXsESgt78Di/tmh3el4tsYaOKgvlnikTRC1XbeM0DQX7mwyOpSEOpjlJVuhkQ8g9WlYNk1\nsCelVf1I+FDmDo1ajpEOLUQbMYRveLH80gqWfrgGn2sL+TJf0hgAS9MezF9xY3VqEyoxoDn0e9Ib\nlFgqV/imWIRCKcWPvPVsMz+SYAnxWkMDYh6x22/dXbHkZFCMtN/DbxzFXRf7Djy2sBKErdysY5HF\n3NV12A0qdHSoG35vc8fN9GVmi6bsHrNIsIB+pxELr28iU2ad5WEKpRQJf7xifbCVaQ/kiuYlJArV\nmCu4Gq72OHs6kKqSviudysLa5HXetdLplfj+C3NYWWzfGs1W9COFYhHbh2bl+8xarE17j1X6GwDC\ngSQsRhWcXUaYOtTo6jbC2W1EtsxgessXwwM/MgaN7niFYMhBQrzW0ICYR7xeb7ubQHiOYqT9RCIG\nTz11MDdxLldAXsxUHKh51iPIxTIND4qTyZuZF/YPjoFSJoWxAQuMRhHWaixuIJWK4TCrEa4y27qd\nzqG/SWuJHU4Dgt7GS0JzqWX2d2UhgLEzDoyNWTE6akVv/8nsqi8WWaSS2weyaJy0VvQjYpEINsvB\npSDJCuXN6+Ga98Oz6EdkIwL/aggry0dj22zRIOCL45EnzjT8fqREiNcaGhDziFRK655IdRQj/DA0\nbD2Slszvj6Nz0FJ2oxsAJOPbUEvEDW2mcrvDN0vW7nsdqVQEo0qOhRkvMunaq8z1dhngmuPecOdd\nbk7GCYO+OaV0k/HKg0lHlxELs9wZNYBSJb25axuYv76BjYUABoeauxGynLWVEF75tyVMnHO2/L0q\naVU/Yju0NrqWtev1MHSoy5Ye6IEFuQAAIABJREFUt3RooDco0T90dOkSOR4hXmtoQMwjej0/ynoS\n/qIY4Y/OzqO/i8WlAC6c7YRUKi7zDGDDtYXxBvL7FossHHY9znSbkHVtoVcuxZlOAyYGbXtFKTZc\ntVVrGxu1YrnG4huxcAr9Da4lZkQMNurIM1uJsUONtZVgxeNFFjVlrABwIIVboVCEe8GHDnPjS1tq\n0c6NX63qR24/333gZ4ms/L+D45KWqaDo7DJg4cYGegda/2VGSIR4raEBMY8Eg5U7eUIAihG+2N7O\nl03BNtypx40XZtFnVFYsIrE278PZHiMGHTo4OtQwaRXQq2VQK6SwGJRwmNWwGJSQSQ4OJsQiBhM9\nRiTnfJj/wQrWFwPwrIYwf2kNK6+swGYpLaEYrFS6eYdOr0CPQ4/5K+t1feb5K2709h9/UNzdY0I8\nWlu55GpsVdb+9gyYOavV7bLYtFiePnhbOJctQK+WH7sASK3YIouAt/G11MfVqn5kcswOxb5BK3Ps\n1cPlKZQHs04oFFLk4hkUC0U4e2rL001qI8RrDQ2IeUSI38hIfShG+OGHr63iuy8uHHisx6rF5hU3\nAGB5ahPDFQaPPTYd5r6/BPerqwhddSMxvYn0rBe5BR+iNzYQuuJG9MYGsBKAfisBZ6GAPokI2lAC\n3qnNsut9M6ksClspWC2aqjPEwyM2sMks1srt0ufAFlmEXKFjpwxTq5tTOSxXIZ0aAEhrnJF0OA3Y\njqWRLVP+d2Xeh6GR1t96/+6/lE9RdhJa1Y8Y9Cp84bNvhmonXZqkiZsxASCV3D6QsaWny4Cgr7Qm\nfeJcV1PfS+iEeK2hATGPZLPtS8NDbg0UI/zQ02tCat9axg69AolF/4HB2vr1dYz2myDed1++v9uI\n1atrNb9POplFYDOKzZUgUontqjNu4UAcsZUghvsN6O82QaOWQSIVASyL7h4Teh16LF11I9lApbZU\nIovtcBLOGqvm7WIYwL9R28xtVSyL9SrLLlxLAfRwzGIrVTJEvBHEI5Vnqz0rIfS2MN2cVCbGEz96\nW8ten0sr+5Fzk06884lS6jNFmXzBjfC5w3B0qDE+ZsNt551YfH1z79jZO6gYRzMJ8VpDA2IeSacb\nv51ITjeKEX7o6jLuZYzQqWRQhFNIHFoOkN3OY/HVVXTr5BjoMWKivwMb191l86/WSiSufgs6ly0g\nk0xh7ZobaXcYrC8OeXIbuUgS7qXmpPlKRDMIrYXqmkUdGbdjqwkZB6RyCbbLzOruyueKWFsKwGbX\nYnjMhqGxo+u1+wY6kElVT0eXSm7DPe/F2Jit5lnneiiVsramB2t1P7KbbaLIEa/HsbEawtwVN7yu\nm9kmuvo6KhbxIMcjxGtNc+9nkIYIMe8fqQ/FCD+4XFsIh1NQyiXQxNIIVFm36j7G8oRKxGLuwdnU\nDw5mWMhnC5DJmtvVZzN5LF1dx/jtPZib96FYZRObSi3DxmptaeC4FItFqDVyKJTSqoU5fJtR+DZL\nv5PhyU4szNxcK+x3h2t6L5YF5q6tw+Y0IMcw1QuB1Mhi00KnlqG7zcVOWt2PPPSGIdyY3sRqk37v\n5eiNKvh3Uvi98bGJlr2PUAnxWkMzxDwixLx/pD4UI/zQ02PCnSM2jJpUCNa4iasZpHLuAfHkPUdn\nRVUtmD1jAMxdXkOXVQujSVXxvKEhK5Kx+nPuymQSWO069PR3oLvXBJNZg+ERG9LxDLY2o9Br5BiZ\ncHC+ztKMF6NjNjhsGpiNSmj19c3M+jYiSIUSGBpuLIsBwwDYzmF52oPuJuV1Pq5W9yPZbAHxxDY2\nfbGDqTyaSCQuDV+UKhnufWikJe8hZEK81tAMMY/IZHTLh1RHMcIPIhGDjalNBDYj6OzrwGYLZ8L2\n0+iV8G1Wz06QjB1d+ydq0aAEANaXg1CpZRgcsmBpp/qaVCbGwIAZUW8MN15aQu+wFSqNAigtaUax\nyGJ7O49IOIVYJIXOLiM0WjlEKBU5iYWSCHgiCMRSe+/DMoBCBLD5IoBSKrhoOIWxC92Y3beW9DCz\nTYv5azczamynFDB2qBEO1V6aNpPOlTZKnnFiYf54M/79Qxas7JTH7h+xolgo7g3qTlqr+5HVtRBe\nveQCAIyP2ZBLZJFMZhAOpTieWbvYzhpwhiml4iPNJcRrDQ2IeUSrPd7ubSIcFCP8wLIstHolApsR\nKNXcVdGaRSrnzl0bcB+9td/s9FeHpZJZrNzYwMSdvWCLLNyzXixcWtt5b1TNajF23onZq9wp4BgW\n0BlV8Oxb8sCgtKyhf8yOlQrvIT+UuzYRy8Bo1sDq0MNfx+w+y5ayhwyM27G8WH9KqnSsNIATi0WY\nurwGlgUmb2/PRrBW9yO7BTrO9pmx8L0lMCjloR6dcMAfSjQ8MDaZNfBsRAAAZ27vaajYDSlPiNca\nWjLBI6HQycwykVsXxQg/RENJLM+UilosTW3COXBCt8BrSI/bN3m0BDHb4ry6pTcBFq64MfdDF1J1\nlCUO1ZGPt+zrFlmsL/jRV0eVuXAwgVAgjv4RG8bPO2ErU2SlnGKRxcZiAM6u6rmeD3N2G+HdyY5R\nZFn8/V+9huFJ7uUerdLqfkQiEePMgAWLO4NhoJS2b/71TSSCSYyON7Y+1erQA2zpy8WPvv+uxhtM\njhDitYYGxDxiNFJicVIdxQg/aAzKAzPDbOEEBpwoVVPj4p6LHHls6fVNGE2tv61cyNWXQaNv2FpX\ngYrDs7278rkCAmtbMJRZy1yp5HQhX8TKvA8z1zaOFHyoJrudR9Qf38sywkUqE0O875sMW2QxNOGA\ntMkbHevR6n5EJhVj9aWVssfyuQLmr61j/JhfCEQiBu6dJUp3PziE/mEq19wKQrzW0ICYR4SY5oTU\nh2KEHyQSMd709B17P2+6Qhg53/rCALkaUrbpLcojj+VzBdhsJ3ALlGEgltR2WVFp5EjG68uJLJFU\n3lSYSmbLDlIlNazTdS0FoNbWvvQlGc9AygCyCgP0XRabFlaj6kCmEY1eiZ/4wuNtvc3f6n5EIhFD\nxPH5Zq+4j1UAZfRMJ5I7dwre8Z47j9U+wk2I1xpaQ8wjmczxE+YTYaAY4Y83P30H/u7PXtr72ecO\nQyITN5RnmEuxhhlinan8wG5t3geZXIzsduvaB5RuYxfy5dup1SvQ1W2CWCqGdyNSNV1dOelU9WIB\nS9NenL2rF7lMDpl4BtFgEkWO5wCAUi1DMl5fJgzfRgTOXhPCyW0k4zffQ6tToLPLiGIuj5VZ74FZ\nc7FEhOd/4ylY7O2tAtbqfkQkYvDsZ38Ef/Kb/1K1suDqjBfn7+pFIpJGNJhAschCo1dCoZZDLBMj\nm80jFk0jEd8GI2Jgs+uwvPPlQioTo+eklioJkBCvNTQg5hEh5v0j9aEY4Q+lWgZHjwmetdLa0OhW\nEuO392Dmcu2V6OrF1JAt4nAe4l3pZBajd/RgdsrT7GYdkCuzbEIkZjA67sDKrBezV9xw9nUg6Kt9\nqcQupab60gajUYXZl5cPDMizqWxpR9zhGUuWhaPLCJ1eAblKjus/dNXdng3XFhzdRnQ6jRABSERT\n8KxtYd5/9LPpDEr8+GcexcBo+/8Nn0Q/8tDjZ5BKbON//P6/VjxHrpBi9jXXgTsfkSr5nl2BBHqG\nLPBupXDvwyMtzZ4idEK81tCSCR4RYt4/Uh+KEf5QquX42d98N8T7bsmvzvkgaUFls733VHFnmSiX\nh3jX5lIAckUL50FYtvTfvp+HRm0w6ZWYveLGdrpUIY4RMVCq60/rtL4SglZ/c0mIXCHB6LgdA30d\ncFg0yMUzR2an06ksegcPbrhzdBlgManhXQpg/rIbue3qleuqSSezWLzqxvxVNzZXQkfWkw9PduJj\nP/cm/P7/+0nc++jYsd+nmU6qHxk566x4TG9SwdShrmkZ0H5riwF0aOV4y7vONdo8UoUQrzU0Q8wj\nCkX7SnmSWwPFCL84+8zoGrTANV+alU0ntzF81omFnXyzzZavYdNabKvyrf94JI3RC92YnWndxU4i\nESOXK6C7rwNMkcVSmRzBGq0C/rUtjIzbkUrnsF5jHufd8thqrQIDozYsX1vH/BU35/PSkRRUajlk\ncjEcDj0Wr28c+LtMx45/e9jq0CMSOjir2dXfgTe+9RzueWQUJrPm2K/dKifVjwyO2XHh3gFceXn5\nwOO2Tj0SkTQ2AsfLZNA7ZEXfIG2mayUhXmtoQMwjSuXRzTCE7Ecxwj/3PTa5NyAGUHXNZKOy29yv\nHQ1U3wwzd8WN/jOdWNkpotFMFpsOZqsGmUQWq/Pll2509Xdg/qobxUIRCzuD2c5+M3RmNZbn/TV9\nxmQ8g3Q0XXN6t8BOGec0gOjm0XXLsa3ai3QcJhKXbtsPjttx/5smcOHeAdic9aVlO2kn2Y+865m7\nkUlnMbOTa1qlkSO/XUCqzjXbQGnd8CPvOI+nP3F/s5tJDhHitYYGxDwSDoeh0+na3QzCYxQj/BP2\nxw/8vDrng96kQnSreVW5dgU2wqVNa1U213WPGuB1xSseBwD/agjGDlVTK4cBgE6nwOxljhnbIntk\nc6BnJQjPShAqrRyDZ51YnPNWvZWu1sqxOtu8We7cdh5dfSasr24dOcYwpfRwIobB8oIfbPHmkgiV\nRo7x27rxsc++Cc6+jqa1p9VOsh8ZOevE//0778U//NWr+Np/+zc4u01YrFJZcJdYIsIdDwzh3MU+\nMAyDZDyDiw+PwNrJ7y8bp4UQrzU0IOaRjo5bp0Ml7UExwj8h79EZR2uXsSUD4nQyi76JTqzOlZ99\nBYDVqaODusNSiW3Ye4xNHRCPTTowx7F8QaaQYH258sx0Kr6N2ddWYbBo0DFoweKhpR0GoxoOpx7p\neAaKLiPW5v2cmSe4DI7Z4HVtYeP1TYze2Ye5QwPtwWELlq6WPpet14RtFsikcnjfJx7AA2+ZgFJ1\n65W4Pel+RCRi8PYPXMQ9bxyFfzOCTdcWvv6nLyMWPhp/SpUMb3/mIh5661kYebjcRCiEeK2hATGP\nxONxaDTUAZDKKEb458IDw3jtO/MHHmvl7vdCLg+GObh3bT9LtwaBDe4lAMvTXgyc6cRyE5ZOjE06\nMH+Nu/yytdOA9QpLKfaLBBKIBBLoHraiKCoVnmYKLNaXAoju+wJi6zKAETPHuv0OAB02HVZnvHsz\n7nM/XEXHgAWhnVn/sTOdmHv1ZoEJn2sLD73zPN77Ew/DUGNhDj5qRz/CMAysnQZYOw04c2cfbrt3\nAH/xB9/Bay8u7J1z5s5e/MS/e4IGwjwgxGsNDYh5JJttbKaDnH4UI/xTrhBFK2aHd7kX/Bi7oxez\nV8sPQNW62mcsk+EUGLBgcbwBvEQqwtiEHVOvVUg1xwC9g2YoFVLktnMQMQwUKhkyNc7qri/4MXZ7\nN2avlP+svvUIekesWEsGDixlqJXFpkVoI7y/ubBYtQj54+jsMWHh0sFUbA+89Sw+8YtPtLWoRjPw\noR+xdhrwM7/yLtx4bRVavRJyhRT2buMt/3d7WvAhRk4aDYh5RIh5/0h9KEb4p9xAzLcehlIjR7rG\nTV/1mr3kwuiFHsxdP5rNolIe4nL8GxEM3daFhdnaniOVitDVbYRcKgabL2BtzgvX9XUMjdmwthIq\nbYhjWZgsWpitGoQ2w3C9frCNvaM2uFe2UKxxABsNVZ/tds37MXq+C3M1zFAfFgsffW3XjXVM3NaN\njTnfgbXOIjGDd3z43lMxYONTP3L2rr52N4GUwacYOSmUh5hHhJj3j9SHYoR/7ntsEirNwepwbJFF\n73Br00LNXVkr+x7V8hCXk4pUzkrBgIXDocPYmBW9Dg2Ge01YvbqGuddWMH9lDZlUFoloGotX15CL\nJWFQSyFjWGythzB/2YWQ92iBCtecD8NnHDW3LxzkXv6xnak/j3DPkAWbK0fTfmWSWST98QOZJ4wW\nDR57712w95iQb2EWkZNC/QjhIsQYoQExjwgxzQmpD8UI/0gkYjz09qNFArzu0ixxK2WSR/PnRjjS\nrh22uRpCh+XmWkGpTIyhITNGBkxQFQvwznkw9+oK1uZ8yOUqDwZZFoiEEsjWMDidu1x+MF+O2c69\n073eNdsavQKxUOWKaMn4wb/XZCyD0du6IRaLMHuVO+8x31E/QrgIMUZoQMwjMtmtt1uZnCyKEX7y\nl8ltGwkmoDepoda1LsG9zx2GpVN/4LFkrP61f1arFhqtHONjVsizWSxddmHhqvtInt90snnrCqOB\nGBQ1ZGjI5wqQcVTXE4nru5Q5nIaqJYJjW6kDuxaz23n86Zf/CddeWoJ7qfn5m08a9SOEixBjhAbE\nPBKNHr2oErIfxQg/3f3o2JFlEwDgXduCVCbByDknjrlvjdPhHfnOQX2FMytjikVs+6OYfXUFySpV\n2+KR5m0WjAQTcDj1nLO73rUtWBx6WBwHP5dGr0T/mB19I7aa8truMlk0WOSoJJjL5iGRHxyER0JJ\nfOWnvwaZ/NbfekP9COEixBi59f9lnyJms7ndTSA8RzHCT/c/fgaRYAJ/+XsvHDkWCSYQCSZgdRqg\n0SmxPONp6nsfLnKxdL3+crjFfKHGstBJSOVi5La5z63FyowHQ2edO/mGKw+MN5aDAAMMjndCIhPD\nvxlBOJDYK+VcD7Ndhy0P98W+XGtYFpArb/2ZM+pHCBchxgjNEPOIEL+RkfpQjPBXOMBRHW4jguUZ\nD0bOdTX1fdfmvZBIxXs/H2eGuFioPWWZ2V7/61ezeGMDI2c6KydW3sUCS9Ob2ArEEa6y3IFLreuN\ncxVKSJus2mO/N19QP0K4CDFGaEDMI7lc/TulibBQjNz65q+vY+R88wbF2UwePUOWvZ8V6vpv/OVq\nmB3epTUooVTLuQewdZi/6sboeWdNr1lrDuOKamg2w+z+z1FqbevWhJ8U6kcIFyHGCA2IeUSIef9I\nfShG+OuJD95d8+zh/LV1DJ3pbNp7i/YN3urJQ7wrWqaEbiWJcArpaApSiQi2Tj2Gz3Ri9HwXTDZd\nQ4PkuctrGLutq+prMKJSKjiVWgaLTQtHlx6mDjWYOq5kbA1tZFlUbIfZ0dwZ8nagfoRwEWKM0ICY\nR4SY94/Uh2KEvzpsuroGubE6BqFcVmY8e5v66s1DDADhYO1LEGSK0hra3HYevrUtLFx1Y+6SC1sb\nYWh1Coyd7zp2Zo3ZS67yGxBZFsPjVhiVIsTWAkh5QggsbMIzvY6tFS9EiRQ6LUqMTtg4l0TUOmaX\nKaVHHjPbdWU3T95qqB8hXIQYIzQg5hG1Wt3uJhCeoxjhN2d/7RtR/BsR9I3VP3gtp5AvwNlnglgs\nQshT/0BbIhXXnD2hXKnqXfFwCrOXXMinsxg9X322t5L5K2sYHLFCIiuti3Z0GeC0q7Hw6jK2yhT6\nAEqff3PJj7kfLKKnUwOJtHIbay00V64C4SNPXjgVleqoHyFchBgjNCDmEbFYzH0SETSKEX578G3n\nIFccnVmsJBnNQCRuzgBr4do6hs84jpUBIp8rYuCss6ZzD2e1KGc7ncPcJReGz9a2LviwpalN6HVy\nTJ5zwDu7gY1Ff83PXZ3exPBw5S8mtTbn8KY6hgHufdNEze3gM+pHCBchxggNiHkkFis/+0HILooR\nfrN1GfHsFx6v+fyAJ4q+keat1Zu/to7+yeOlS1pbDkFeZpnAYbVUotu1cNV97A2EsXAS8z9cqWnN\n72Fzr63AbNNCLBGhs9uA0XErRoZMsOol8EyvYWTUgpFJO0bP2NE/YoHOoITBpILJooaj24Cxs3ZY\nOw9WyDt3zwBsXcZjfRa+oX6EcBFijFAeYh6xWCzcJxFBoxjhvzc8Nol//J+vwDVf2+Y2WR0zylyK\nhSISwePtDk8lshiecGDh6lrV87IV0pFVEtyIlKZl61xq0DdkxcIPV+p6zq5ioQi7RYnwshebociR\n4/HwatXnewB0dBqg0ysQi5YKlZy7d+BYbeEj6kcIFyHGCM0Q88jW1la7m0B4jmKE/xiGwUc+95aa\nZlsBoFBoTpGLXSJZoaaSyOUsTHnQN1Z9xlpSZQ1xOVu+WCkDRR30RhW8y7Uvkygnl8mjkD/+321o\nMwI2lcbgoAmj41YMTTgaag+fUD9CuAgxRmhAzCPHuTVIhIVi5NYwcq4LD7/jfNljDFPK5WvrNmLs\nQjcWrlcvI1yvYrGIvhHr8Z7MMFh3R2Dv1MGokx/4T6+VQS1jIJUy6Oyrb1mGtY5UZSIxA41KgvhW\nst7WH5CM1V/F7rD4VhJLV9cw9+oyrKdkuQRA/QjhJsQYoSUTPCLEWxSkPhQjt44P/vSj2M7k8J2/\nvQYAGDnnRDKxDc9qCPFIGvFIGj53uOnvu3DJD1vX8cuu5nNFRINxpGOZsseTsVI6pr5JJwoFFu4a\nNrylE9s1vTcjAgZHrFi47Kq9wWVojEp4VgINvcZ+Kq0C+g5N016v3agfIVyEGCM0Q8wjPl/9CfWJ\nsFCM3DokEjE+/otP4GNfeByjt3Vj/voGNpaDKJZJ59VMtz3Uja2ZNfT2Go49y1OooXLd6tQG3LOb\nUCklcHQZMHZ7T8WUbO5FH+cSErVWjp4eY8ODYQDoGrSikOfOhlGrxz/8hqa9Fh9QP0K4CDFGaIaY\nRzSa0zMDQVqDYuTWwjAMHvnRC1CoZFi8sYFCDSnLGpXciCC0GUZoMwytUQ21QQWxVAyWZSGRSqAy\nacAyIsSSOXg9MRytglGaJa5VKp5BKp6BZzUIrVEN57ANrjkv0smbJZaLBRZd/R2Ih9NQ6+SQSsV7\nBTQKBRYoFLA264HLH2348/eOOTB/ufrGwHpIZRK89SP3N+31+ID6EcJFiDFCA2JCCGmx+94yCZVG\ngT/+j/+ASKixtbHVWGwahDZvZlWIh5OIhyu/n1wlg9lphM5uRDxdQDCUwnYmj+IxN6PFw0nMvroM\nmUKCkfNdyKRzEEtEKObyWLq0eqzXrJVcKUXfRCfmL7vKFtU4rrsfOwOF+tavTkcIqY6WTPBIIlF7\n+VQiTBQjt67b3jCIr3ztE3D0mFrzBgwg3c7A0l/75q/tVBYbCz7MfG8W6z9cQGZlA9psEv0cmSa4\nZDN5zF9axdrUOjbmPHBNbzb0erXon+jE3A9XmzoYftMH7sEnfvmppr0eX1A/QrgIMUZoQMwjNltz\nyriS04ti5Nam0Svx2PvuasErsxjpN2Bj3ovZ7za2BjcWSmD50jLGzjkb3mkukUvqKuRxXDKFBPNX\nmrhMQi7BL/zxh/GRX3oHJNLTV7GL+hHCRYgxQgNiHgkEmrcrmpxOFCO3vjc9fUfFlGzHIRIzGOzW\nYe4HiwCAkfu6m/K6My8vYHDUCqn8+CvrzA5DU9rCRa1T1lRSmotYIsInfvkp/P53PofbHhxtQsv4\nifoRwkWIMUIDYh5h6qzkRISHYuR0+Ojzj8FoaXzTitGkhEMvweKlmxXdGilGcdjSFRd6+kzHnik2\nmE9mY07YF4OxzuIfh4mlYvxfv/k+PPzUHdAZ1U1qGT9RP0K4CDFGaEDMIyZTi9YWklODYuR0kEjE\nuP/xMw29xtiwCbGlTazPeg48vnrF29DrHrZ4eRXOTl3ZYh8sy0LfoYa92wh7txGdfR1w9pthtGjA\nsixiDRbXqBnDNFQ4Q6aQ4uf+8EO4+JbGfie3CupHCBchxggNiHlEiLcoSH0oRk6PH332/mOXWO4b\nMGHm+/PIl8kXPHxvc5ZM7Lex6MPKlVWopED/sBkjk3Y4u/RQillE1gLwzG7AM7uBjSk31l9fw9aq\nH1azEgqF5MQqXjUyo/XprzyN8w+MNLE1/Eb9COEixBhpaEDMMMx/ZBjmOsMwVxmG+SbDMJ07jzMM\nw/wewzCLO8dvb05zTzedrrFbfuT0oxg5PRQqGe5503jdz2NZFhl/pOJx70KokWZVlYyksLxTynh9\nzoN0vHw1OwDwr21h6YfLGBi2nMjSiVqr4R321o8+gItvFsbM8C7qRwgXIcZIozPEv86y7DmWZW8D\n8A8Afmnn8ccBDO/89wkA/7nB9xGEQqF5a//I6UQxcrrc8cBw3c8ZGDLDs1y5XLJUwa/08svX3UgG\nIhhpQtaKSmzdRrgOLR2phcmmw9M/9SMtaBG/UT9CuAgxRhoaELMsG9v3oxrAbm/3TgD/gy35AQAD\nwzCORt5LCJLJE1pvR25ZFCOny/gdPXWn9SrEqucH7ejWN9Kklsimc5j7wSLGbmv+cg4A0HUcbwb6\nwSfvgExRvaT0aUT9COEixBhpeCqBYZhfBvBjAKIA3rjzsBOAe99p6zuPHfkK7/f78eyzz0IikaBQ\nKODJJ5/Ec889B6/XC7VaDbFYjFgsBovFgq2tLbAsC4vFAp/Pt1daMJFIwGazIRAIgGEYmEwmBAIB\n6HQ6FAoFJJNJ2O12eL1eSKVS6PV6BINB6PV6ZLNZpNPpveMymQxarRahUAhGoxHpdBqZTGbvuEKh\ngFKpRDgcRkdHB+LxOLLZ7N5xpVIJmUyGaDQKs9mMaDSKXC63d7zaZyoUCgiFQqfqM53G31M7P5Na\nrYbL5TpVn+k0/p7q+Uzv/MTtWFv0Y+plDybvdSDkSSK3XYC9T4eFy370TpogloiwcMmPcw84sX7Z\njb4Ldlj6jZj9rgsj93WjkC9g9YoXw/d2I+yJY+CuTnR06zH1wgomH+lHJrGNjZkgBu9yYmMmALVR\nAYNdu3c8FcnAvxxG3+0OuG/4YHBooDWr947Hg0lEPAl0n7Vh9bIH1gEjVAbF3vGIN45kOAPnuAVL\nr23AOW6GQiPfOx5yR5HL5KHvkmKIcUBtkUMsFWHhFQ/G7nPC7yrNrVh7dZh9aQPDdztQyBXhuh7A\n8EUHvMsRSOVidDi1mPquG5MPdiOTzGFjLoQzD/Zi+YoXwxc7YbCrMfXiGiYf6kEykkHAFUXfeRvc\nUwHobWrozKq94yq1Eg+8+5wg/z3tvu9p+kyn8ffUzs8klUrhcrlO1WfKZm+Wky87nuW6hcUwzL8A\nKFe26BdZlv3bfec9D0A0a2F1AAATMUlEQVTBsuwXGYb5RwC/yrLsv+0c+zaAX2BZ9tLhF3n55ZfZ\nsbGxqm0QCpfLhd7e3nY3g/AYxcjpc+3lZXz5p75a07mjo2bMfm+26jl3PTmO174+04ymtYTZaUSe\nESG6lWrK643e3oO5S/UVI5FIxfidf/k5mGz8m00/CdSPEC6nNUYuX7586dFHH72z3DHOGWKWZWtd\nYPWXAP4RwBdRmhHef2+sC0Dra3fe4qRS4d26I/WhGDl9zt3TD1u3ET53mONMFsFlH+frZY65ueyk\nBDfC6HAYYLbrEPTGqp4rkpRW9RXz5YtumOw6LF5zlz1WzeM//gbBDoYB6kcINyHGSKNZJvbvCHkH\ngN2pi78D8GM72SbuARBlWbb+HQ8Co9cLt4MmtaEYOX0YhsHTn3yQ87zBITOCG1yDZmBjJtiMZrVU\nyBNBzBPG8NnyG+0UShlGz3dBKWKBVBpdA+ayr9Nh06NQYbBcia23A0/95KPHavdpQf0I4SLEGGl0\nDfGvMQwzCqAIwAXgUzuP/x8ATwBYBJAC8JEG30cQgsEg1OrTXSGJNIZi5HS6980TePHvr+PGK6WK\nczqjCmqNHDK5BDKpCCKGRTFR2xKDwbuc2HJXn3nlg+10FvOvLGLwth7kiwzi0RT0JjWkYgbL19Yw\n+3J071y1+mi+Zlu3se7ZYbFEhE/+ylOQyYU3+7Uf9SOEixBjpKEBMcuyT1V4nAXwXCOvLURC/EZG\n6kMxcjoxDIMP/tTD+O2PLyGw4sPW8ja2Dp3Tc6a2DA0bM7dWQv2lq2t7f95ylW87W6bohsaggm/t\n8N9SiVgiglqnPFIp77EP3YexO/qO39hTgvoRwkWIMUKV6niEawckIRQjp1fPiAPdgxZkk+XXAK+9\n7kbPWLn9zQepjYpmN62ttCY15m9sHHjM2mXC0vX1I+fqOzQYOd+FQiKJyJofOpUYFmeppHPfRCd+\n9NOPnEib+Y76EcJFiDFCA2IeSafT7W4C4TmKkdPt2S+/H3qLtvIJ+TznaxjsVZ5/C1LplHsZ7rsH\nzBiZsEGnFkMsuXn50ps1GL2tC3FvCLPfn9vbhBfxxyCXlI7/7B88A5X2dH1ZOC7qRwgXIcYIDYh5\nxG7nnv0hwkYxcrrpLTp88ItlV6IBAFaurmLszuqpkKZeWGl2s9rKZNOhq1MDeX4brstLmH1pHvOv\nLGLoTCfMnQYMTToQdQcw829zyG8f/cLgXfLhc//lwzB3GtrQen6ifoRwEWKM0ICYR7xeb7ubQHiO\nYuT0e/j99+GRZ+6veHzqO1MYOtcFtV5Z9vjkI/2tatqJG7urD9Pfm8Xa9AbSicyBYzMvTgPbacy/\nsohioXymCaVGjp/544+ib9J5Es29ZVA/QrgIMUZoQMwjMtnRndSE7EcxIgwf+dX3YuSugYrH516a\nRS6WwPCFniPHUpFMmWfcWkRiEUZu78XM9+ernmeyVt7484Z33YEvf/NzuPDIRLObd8ujfoRwEWKM\n0ICYR7Ta07X2jzQfxYgwyFVy/PyffxodncaK56Tjacx+bxqjh5ZQ+Je5cxXzmUItR/ewFXM/WOA8\nt5AvHHlMrpLh6Z97As/93jOw9nS0oom3POpHCBchxggNiHkkFAq1uwmE5yhGhENv0eGDX6q8nnjX\n/A/moTGq9n7uu93Ryma1lFQuQYddi9Xra9wnA/CtBIB9hT20RjV+44Xn8dRPvwUiEV3eKqF+hHAR\nYoxQj8EjRmPl2SBCAIoRobnzsfOQyquni89ncugatO797L7BXd6ZjxgRg+5hK9ZnNmt+TiyUgGIn\nc4RcJcPn//yTsHSZWtXEU4P6EcJFiDFCA2IeEWKaE1IfihFhUajl6Jno4jyvkMvt/dng0DS9HWKJ\nCMMXejB01gm7Uw+dRoIOsxKdvQaM3dkLXUfj7zl0vhtLl1fLHlOo5Ri9qx9jFwdgchzMFqFQySCV\nS/CFv/w0Bm+rnoGDlFA/QrgIMUYaLd1MmiiTufU3w5DWohgRnr6z3Vi6slr9pH2V3LTm5pZbtXab\nkAnHMPu96QpnlApkGB1G2AZtYEQiJKIZ+NZCKOSOrvEtZ+yufsx8f+7I4xKZGIPne+GacmPmpdKa\nYoNND7VeiWS0dMF2Dtrw5M88htE7T092jVajfoRwEWKM0ICYR4SY94/Uh2JEeOQq7t3eYol478/N\nzEOs0iqQCccQ9kY4zw17wgh7bm7oE8sk6HCaIBIxYEQMJFIpFFoFZAoZiiyL7XRpVlumkCKwdrBk\ns0ItR++EE5uLXsy8dDDTRMQXxchdA1i8ugaDVYenf+4JjN092IRPKxzUjxAuQowRGhDziNfrRW8v\n3fIjlVGMCE+xwHKek8vcXDIx+Ug/Xvv6TFPeu3vEhukXp4713EI2D/+Kv6ZzRy4OIejeAsuyGL84\niJXra0cGwvvNv7aMu99+AR/5lfceWUJBuFE/QrgIMUZoDTGPKBRUVpRURzEiDCzLgmVZZJLbuPKt\n65znL762iNE7eiGVSRAPJpvSBrPTiLmXjy5jaIX5Vxcxce8g+iadmH5p/kgRjsPueeft+NhX3k+D\n4WOifoRwEWKM0AwxjyiV5StPEbKLYkQY/vT5r6GQK2Dm5Xn4VoOc5xcLRUy/OAWjwwi1WgWVVoFU\n/PhrAI1WHWQSFoXs0VLIrVLIFrByrXq6tf5zPXjP596G2998Fsy+ddOkPtSPEC5CjBEaEPNIOByG\nTqdrdzMIj1GMCINv1Y8r33q97ueFPWEw4hziniAkCik6HEZoOjSQKmQQicV7e++KRcC3toVoMA6g\ntGbX0W+GXCFBOpaC67oLwXz5csgtwzG+dQ7b8dP/9Vk4Bm0n055TjPoRwkWIMUIDYh7p6KCqSqQ6\nihFh+NB/eBoyhQyv/P3lup+7/JobQCk/sW/FD1+FdbxiiQi2QTvSsRQivi0s+tqbiJ8tll8rrVDL\n8eaPPoT3fv7tkMqlJ9yq04n6EcJFiDFCa4h5JB6Pt7sJhOcoRoSha8SBt336Tcd6rm2otgtZIV/E\n5twmwp5IxcHoSUqEj659vu3RSfzKtz6PZ774JA2Gm4j6EcJFiDFCA2IeyWaz7W4C4TmKEeEYur0P\nj/7YA3U/T72vjPOtZGPBC7Wh1HadWYuP/8YH8PxXfxJdI7duKWq+on6EcBFijNCSCR4RYt4/Uh+K\nEeFgGAaf+K1n4HcFcePF2tOovf7NyunK+IwtFtE72YXeSSee/vm3QWNsboERchP1I4SLEGOEZoh5\nxOv1trsJhOcoRoRDJBaBYRg8+5UPQKGW1/y8M28eaWGrGqfSKaHUHEzpNHLXAD7xW8/g+b96Dh/5\nlffSYLjFqB8hXIQYIzRDzCNCTHNC6kMxIjy2PjPOPTyBV//xSk3nhzdjLW7R8YzdM4Sf+L0PwzFo\nQ7FYhHfJj9BmGGqDCgPnhVUAoN2oHyFchBgjNCDmEZmMu0QrETaKEeG59sIUlq+5aj4/uZVq+D31\nVh0KucKRjW5ylQydw3ZEvFGEfdGKz9eZtTj70DgK+QJuvDiDZCSFyftH91KmiUQidA7b0TksvNuy\nfED9COEixBihATGPRKNRGAxUeYlURjEiPFdfmMbYPUOYuG8EwfUtfP23/k/V87vO2LHxuq/u97nj\nsXN45IP3gxExuO2RSRQLRVz/zjTCviiigTjiWwk886Wn9rI9pGIpbC76sbngwdyry3j1Hy8jGijt\nTP/wf3oPHnj6bgBAbjuHsC+KYuGE8xqTiqgfIVyEGCMMy7Y33c7LL7/Mjo2NtbUNfJFMJqFW09o5\nUhnFiPC8/r1ZbHkiePA992B9zoOfve+LVc/v6DUg5IrU9R6f/v0fx5mHxmB2mo7dznwuj1QsjS1P\nBM5hO6VJ4zHqRwiX0xojly9fvvToo4/eWe4YzRDzSDQaPZUBSJqHYkR4Ju8fRXwrAQCQyiX4zH/9\nGMQSMf75T76Dxcsr2E4dTI/kPGPfGxCLxCKodEpoTRq86zOPIbQZxuVvXkfPRBfG7hnCyvU1DF7o\nw4PvuafhdkqkEug6tNB1aBt+LdJa1I8QLkKMERoQ80gul2t3EwjPUYwID8Mwe4NMW58Ftj4LAOCe\nd9yBP/zJP8N3/uqlA+crtaWMFPe+60586nd+DEqtArnt3N6M7bt//m175z78/vtO4iMQnqF+hHAR\nYozQgJhHhJj3j9SHYoTs96H/8G7ozBr8/R98C7vL30JLUXz2zz6Fi2+7AIZhAICWL5ADqB8hXIQY\nIzQg5hGv14veXko/RCqjGCH7aU0aPPOld+Ptz70ZYokYl791A7ZJI0YnR9vdNMJj1I8QLkKMERoQ\n84jQ1uuQ+lGMkHL0Fh0A4MH33INgMNjm1hC+o36EcBFijFClOh4Ri8XtbgLhOYoRwoVihHChGCFc\nhBgjNCDmkViMnxWmCH9QjBAuFCOEC8UI4SLEGKEBMY9YLJZ2N4HwHMUI4UIxQrhQjBAuQowRGhDz\nyNbWVrubQHiOYoRwoRghXChGCBchxggNiHmk3VUDCf9RjBAuFCOEC8UI4SLEGKEBMY8I8RYFqQ/F\nCOFCMUK4UIwQLkKMERoQ84jP52t3EwjPUYwQLhQjhAvFCOEixBihATGPaDSadjeB8BzFCOFCMUK4\nUIwQLkKMERoQE0IIIYQQQaMBMY8kEol2N4HwHMUI4UIxQrhQjBAuQowRGhDziM1ma3cTCM9RjBAu\nFCOEC8UI4SLEGKEBMY8EAoF2N4HwHMUI4UIxQrhQjBAuQowRGhDzCMMw7W4C4TmKEcKFYoRwoRgh\nXIQYIzQg5hGTydTuJhCeoxghXChGCBeKEcJFiDFCA2IeEeItClIfihHChWKEcKEYIVyEGCM0IOYR\nnU7X7iYQnqMYIVwoRggXihHCRYgxQgNiHikUCu1uAuE5ihHChWKEcKEYIVyEGCM0IOaRZDLZ7iYQ\nnqMYIVwoRggXihHCRYgxQgNiHrHb7e1uAuE5ihHChWKEcKEYIVyEGCM0IOYRr9fb7iYQnqMYIVwo\nRggXihHCRYgxQgNiHvmbv/mbdjeB8BzFCOFCMUK4UIwQLkKMERoQ88jXv/71djeB8BzFCOFCMUK4\nUIwQLkKMERoQ80g+n293EwjPUYwQLhQjhAvFCOEixBhhWJZtawO+/e1vBwC42toIntja2jKbTKZg\nu9tB+ItihHChGCFcKEYIl1McI72PPvqopdyBtg+ICSGEEEIIaSdaMkEIIYQQQgSNBsSEEEIIIUTQ\naEDcZgzD/DrDMLMMw1xnGOavGYYx7Dv2PMMwiwzDzDEM85Z2tpO0F8Mwj+3EwSLDMJ9vd3tI+zEM\n080wzL8yDDPDMMwUwzCf2XncxDDMtxiGWdj5f2O720rai2EYMcMwVxiG+Yedn/sZhnllJ0a+xjCM\nrN1tJO3DMIyBYZj/vTMWmWEY5l4h9iM0IG6/bwE4w7LsOQDzAJ4HAIZhJgC8D8AkgMcA/CHDMOK2\ntZK0zc7v/f8B8DiACQDv34kPImx5AJ9lWXYcwD0AntuJi88D+DbLssMAvr3zMxG2zwCY2ffzlwH8\n9k6MhAE825ZWEb74XQD/xLLsGIDzKMWK4PoRGhC3Gcuy32RZdje/yQ8AdO38+Z0Avsqy7DbLsisA\nFgFcbEcbSdtdBLDIsuwyy7JZAF9FKT6IgLEs62FZ9vLOn+MoXcScKMXGf9857b8DeFd7Wkj4gGGY\nLgBvBfDfdn5mADwC4H/vnEIxImAMw+gAPAjgTwCAZdksy7IRCLAfoQExv3wUwDd2/uwE4N53bH3n\nMSI8FAukKoZh+gBcAPAKABvLsh6gNGgGYG1fywgP/P/t3T1oFEEYxvH/g2ciKCJaBaJoINiqrRZC\nLERCbBQEhcPO0kIUTW0r6Wz8qNKIFl5jI1rY+IFYKNqIhQY/IooICoL4WOyGXHHamTmc5wcHtzPD\n8hbDy8vszO4ccBr41V5vAr70LcQkn9RtAvgIXG231VyStJYK80gK4hUg6bakZwN+B/vGzNI8Ap1f\nahpwq7wjr06ZC/FHktYBN4CTtr+WjieGh6RpYNH24/7mAUOTT+rVAXYBF23vBL5RwfaIQTqlA6iB\n7X1/65fUBaaBKS+/GHoB2Nw3bBx4+28ijCGXuRADSVpNUwzP21761uoHSWO230kaAxbLRRiF7QZm\nJB0A1gDraVaMN0jqtKvEySd1WwAWbD9or6/TFMTV5ZGsEBcmaT9wBpix/b2vqwcckTQqaRswCTws\nEWMU9wiYbE+Gj9ActuwVjikKa/eCXgZe2L7Q19UDuu3/LnBzpWOL4WD7rO1x21tp8sYd20eBu8Ch\ndljmSMVsvwfeSNreNk0Bz6kwj+RLdYVJegmMAp/apvu2T7R9szT7in/SPA69Nfgu8b9rV3jmgFXA\nFdvnC4cUhUnaA9wDnrK8P/QczT7ia8AW4DVw2PbnIkHG0JC0Fzhle1rSBM3h3I3AE+CY7R8l44ty\nJO2gOXQ5ArwCjtMsmFaVR1IQR0RERETVsmUiIiIiIqqWgjgiIiIiqpaCOCIiIiKqloI4IiIiIqqW\ngjgiIiIiqpaCOCIiIiKqloI4IiIiIqqWgjgiIiIiqvYbbloVpuxximcAAAAASUVORK5CYII=\n" | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "But this is a static map. For exploratory purposes it's nice to pass the information in the dataframe to folium to map things on top of a slippy map. \n\nThe following adds the polygon information from our geopandas dataframe to the `poly_group` map layer that we will use below with folium." | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "folium.GeoJson(tribe_areas).add_to(poly_group);", | |
| "execution_count": 6, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "##### Markers\nWe'll iterate through the ethnic groups and create a marker for each group to be located at the Lat, Lon position recorded in the geopandas data frame and labeled with the ethnic group name. " | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "for i, row in tribe_areas.iterrows():\n folium.Marker(\n location=[row.LAT, row.LON],\n popup = row.NAME).add_to(marker_cluster) # or replace with marker_group", | |
| "execution_count": 7, | |
| "outputs": [] | |
| }, | |
| { | |
| "metadata": {}, | |
| "cell_type": "markdown", | |
| "source": "We choose which of these FeatureGroups to add to the folium map and add a `LayerControl` to allow us to selectively turn these layers on or off." | |
| }, | |
| { | |
| "metadata": { | |
| "trusted": true | |
| }, | |
| "cell_type": "code", | |
| "source": "marker_group.add_to(m)\n#marker_cluster.add_to(m)\npoly_group.add_to(m)\n\nfolium.LayerControl().add_to(m)\n\nm", | |
| "execution_count": 8, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "execution_count": 8, | |
| "data": { | |
| "text/plain": "<folium.folium.Map at 0x1ec0f9b7b00>", | |
| "text/html": "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3VucGtnLmNvbS9sZWFmbGV0QDEuMC4xL2Rpc3QvbGVhZmxldC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4xL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2pzL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4wLjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLXNyYy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzEuMC4wL2xlYWZsZXQubWFya2VyY2x1c3Rlci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vdW5wa2cuY29tL2xlYWZsZXRAMS4wLjEvZGlzdC9sZWFmbGV0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4wLjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzEuMC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2dpdC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfYjgzZjg4NThlYTk4NGY0ODk5NjczNGMyNmY4M2Q3MGIgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2I4M2Y4ODU4ZWE5ODRmNDg5OTY3MzRjMjZmODNkNzBiIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHNvdXRoV2VzdCA9IEwubGF0TG5nKC05MCwgLTE4MCk7CiAgICAgICAgICAgICAgICB2YXIgbm9ydGhFYXN0ID0gTC5sYXRMbmcoOTAsIDE4MCk7CiAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXBfYjgzZjg4NThlYTk4NGY0ODk5NjczNGMyNmY4M2Q3MGIgPSBMLm1hcCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXBfYjgzZjg4NThlYTk4NGY0ODk5NjczNGMyNmY4M2Q3MGInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NlbnRlcjogWy0xLDI1XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyX2EyOGViZDBmNTE2OTQ3NDk5YzgzYzE1NzY2OWQ0ZTAwID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLXtzfS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWluWm9vbTogMSwKICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzV29ybGQ6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIG5vV3JhcDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICcoYykgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycyAoYykgPGEgaHJlZj0iaHR0cDovL2NhcnRvZGIuY29tL2F0dHJpYnV0aW9ucyI+Q2FydG9EQjwvYT4sIENhcnRvREIgPGEgaHJlZiA9Imh0dHA6Ly9jYXJ0b2RiLmNvbS9hdHRyaWJ1dGlvbnMiPmF0dHJpYnV0aW9uczwvYT4nLAogICAgICAgICAgICAgICAgICAgIGRldGVjdFJldGluYTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9iODNmODg1OGVhOTg0ZjQ4OTk2NzM0YzI2ZjgzZDcwYik7CgogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0ZiA9IEwubWFya2VyQ2x1c3Rlckdyb3VwKCk7CiAgICAgICAgICAgIG1hcF9iODNmODg1OGVhOTg0ZjQ4OTk2NzM0YzI2ZjgzZDcwYi5hZGRMYXllcihtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUxMjA5YmNmNjJhYjQ3OTliMjlkMmI4NjgxMDAxNmRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjMuMTYxOCwzMy43MDE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2M1Y2FmYWZmNzI0MzA0YThjMDAwYjJjMmVlN2FlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTU1ZWE0MTc5MWY0ZjE3OWMxYmY3MTNmZGM0MGRjYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDU1NWVhNDE3OTFmNGYxNzljMWJmNzEzZmRjNDBkY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFCQUJEQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdjNWNhZmFmZjcyNDMwNGE4YzAwMGIyYzJlZTdhZTcuc2V0Q29udGVudChodG1sXzA1NTVlYTQxNzkxZjRmMTc5YzFiZjcxM2ZkYzQwZGNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTEyMDliY2Y2MmFiNDc5OWIyOWQyYjg2ODEwMDE2ZGIuYmluZFBvcHVwKHBvcHVwX2Q3YzVjYWZhZmY3MjQzMDRhOGMwMDBiMmMyZWU3YWU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y2ZDU5ZTMxYTAxZTRkNjg5ZjliNWIxZWFmMzdmYmJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy43MDI5NTQ5MjkxNCwyNi43OTczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOTA5ZDdkNGM2NzI0ZWUyODc1YzQwNWMyZjNlYzJkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTQ1MzEwYzRmNDU0Mzg2YmU2YTYxZThjNWU5ZDAxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDk0NTMxMGM0ZjQ1NDM4NmJlNmE2MWU4YzVlOWQwMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFCQVJBTUJPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTA5ZDdkNGM2NzI0ZWUyODc1YzQwNWMyZjNlYzJkZC5zZXRDb250ZW50KGh0bWxfNDk0NTMxMGM0ZjQ1NDM4NmJlNmE2MWU4YzVlOWQwMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNmQ1OWUzMWEwMWU0ZDY4OWY5YjViMWVhZjM3ZmJiYy5iaW5kUG9wdXAocG9wdXBfMTkwOWQ3ZDRjNjcyNGVlMjg3NWM0MDVjMmYzZWMyZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTRmNTVkMzRlNWQ5NGJhMmE3ZDgyMzJmOGY0ODNkMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjA2OTUzMDgzNjk4LC00LjI2MDMyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMTk4N2M3MDdmYTk0NTFmOGVkNjYwYjdjOTEyZjQ4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmFmY2ZmNDk5MTU0MDM5YTBmMThkM2Y4Y2M2OWRiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2ZhZmNmZjQ5OTE1NDAzOWEwZjE4ZDNmOGNjNjlkYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFCRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjE5ODdjNzA3ZmE5NDUxZjhlZDY2MGI3YzkxMmY0ODEuc2V0Q29udGVudChodG1sX2NmYWZjZmY0OTkxNTQwMzlhMGYxOGQzZjhjYzY5ZGI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTRmNTVkMzRlNWQ5NGJhMmE3ZDgyMzJmOGY0ODNkMDAuYmluZFBvcHVwKHBvcHVwX2YxOTg3YzcwN2ZhOTQ1MWY4ZWQ2NjBiN2M5MTJmNDgxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FlMjk5Yjg0MDUxMzQ0OTdhZGQ1MWQ2OTFjYzkyMTFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4xMDgxMjE0NjQxMSwzMi42NTY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OWJmNTZhNmZlZDM0NjA4OTljNDZmZTZjODcyOTRiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGJlMjg5YTY2Zjc0ZWYxYTMyMzhhNjAyNGI0YjhmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhiZTI4OWE2NmY3NGVmMWEzMjM4YTYwMjRiNGI4ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFDSE9MSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDliZjU2YTZmZWQzNDYwODk5YzQ2ZmU2Yzg3Mjk0YjQuc2V0Q29udGVudChodG1sXzQ4YmUyODlhNjZmNzRlZjFhMzIzOGE2MDI0YjRiOGZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWUyOTliODQwNTEzNDQ5N2FkZDUxZDY5MWNjOTIxMWIuYmluZFBvcHVwKHBvcHVwXzQ5YmY1NmE2ZmVkMzQ2MDg5OWM0NmZlNmM4NzI5NGI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EwNDBlZTA3YzBlODRhZGI4ZDk4YzUyN2ZjZDM2OTA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy41NTYwOTA2NTY5NiwxMy4xODQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGM1YmY2NTgyMDc0ODMyYjY1ZjYxNGM2ZGRjYjA2YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDU3MmUwYWZkYjk0NWE2ODVjYTlmNzI0ZjEzZWE2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjQ1NzJlMGFmZGI5NDVhNjg1Y2E5ZjcyNGYxM2VhNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFEQU1BV0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwYzViZjY1ODIwNzQ4MzJiNjVmNjE0YzZkZGNiMDZjLnNldENvbnRlbnQoaHRtbF8yNDU3MmUwYWZkYjk0NWE2ODVjYTlmNzI0ZjEzZWE2NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EwNDBlZTA3YzBlODRhZGI4ZDk4YzUyN2ZjZDM2OTA1LmJpbmRQb3B1cChwb3B1cF8yMGM1YmY2NTgyMDc0ODMyYjY1ZjYxNGM2ZGRjYjA2Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNjk5ZTEwNDNkM2U0ZDRkYjVlOTcxMjVmMDhhZDg1MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuMDc2ODUwODQ4NjIsMC4yNzA0NTY5MjE2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDMwMjc3MjU2ZTRmNDhkY2JhMTg3MzY2NDYxZWFiZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjUyODliOTg2OGQ5NDY0M2IyNjdmOTBkZTkzZTkzODAgPSAkKCc8ZGl2IGlkPSJodG1sX2I1Mjg5Yjk4NjhkOTQ2NDNiMjY3ZjkwZGU5M2U5MzgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BREFOR01FPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzAyNzcyNTZlNGY0OGRjYmExODczNjY0NjFlYWJmZi5zZXRDb250ZW50KGh0bWxfYjUyODliOTg2OGQ5NDY0M2IyNjdmOTBkZTkzZTkzODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNjk5ZTEwNDNkM2U0ZDRkYjVlOTcxMjVmMDhhZDg1MC5iaW5kUG9wdXAocG9wdXBfNDMwMjc3MjU2ZTRmNDhkY2JhMTg3MzY2NDYxZWFiZmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGI0N2IzMzgyOWQ4NGU2MGE5OWRmMGNkYWM3MjU0OGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC40MDE2LDUuMzAzMTAzNDg5OTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiNWQ1OGQ0YmMyMjQ5Y2ZiNTM2YjhjYjVjM2IxODA5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxZmU1ODRkNzYwNTRmYzI5NGEyZGRhYjI5MjE0YTk0ID0gJCgnPGRpdiBpZD0iaHRtbF8wMWZlNTg0ZDc2MDU0ZmMyOTRhMmRkYWIyOTIxNGE5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QURBUkFXQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I1ZDU4ZDRiYzIyNDljZmI1MzZiOGNiNWMzYjE4MDkuc2V0Q29udGVudChodG1sXzAxZmU1ODRkNzYwNTRmYzI5NGEyZGRhYjI5MjE0YTk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGI0N2IzMzgyOWQ4NGU2MGE5OWRmMGNkYWM3MjU0OGQuYmluZFBvcHVwKHBvcHVwXzNiNWQ1OGQ0YmMyMjQ5Y2ZiNTM2YjhjYjVjM2IxODA5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI4NGZmOGJhMjVmZDRjZjZiNmVlNDAyYTE2MWUxMGY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4yNDQyODQwOTYwOCwwLjY3MzY1MTE1MjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcyNmM4Mzk2ZGFhODQ1ZmRiNDliMzAxNDI5MDExYzFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMmQ1NmE0YjA3ZTQ3OTk5NjczNzUyNjU1MWQ3MDdjID0gJCgnPGRpdiBpZD0iaHRtbF8yMDJkNTZhNGIwN2U0Nzk5OTY3Mzc1MjY1NTFkNzA3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QURFTEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcyNmM4Mzk2ZGFhODQ1ZmRiNDliMzAxNDI5MDExYzFmLnNldENvbnRlbnQoaHRtbF8yMDJkNTZhNGIwN2U0Nzk5OTY3Mzc1MjY1NTFkNzA3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4NGZmOGJhMjVmZDRjZjZiNmVlNDAyYTE2MWUxMGY3LmJpbmRQb3B1cChwb3B1cF83MjZjODM5NmRhYTg0NWZkYjQ5YjMwMTQyOTAxMWMxZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kODgyMTBiZWY3NmY0YzBhYTM3NWFjZjNjM2EzYmY3MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjMzNDgsNDEuMzkyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Y4NGRjZTRkNzc3NGU0Zjg0MmY4YThiZGU3MDdjYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZThlNTA4MWE0ODhiNDYxZTlkOGI3NjgxZTI1YTRiMzUgPSAkKCc8ZGl2IGlkPSJodG1sX2U4ZTUwODFhNDg4YjQ2MWU5ZDhiNzY4MWUyNWE0YjM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BRkFSPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Zjg0ZGNlNGQ3Nzc0ZTRmODQyZjhhOGJkZTcwN2NhNi5zZXRDb250ZW50KGh0bWxfZThlNTA4MWE0ODhiNDYxZTlkOGI3NjgxZTI1YTRiMzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kODgyMTBiZWY3NmY0YzBhYTM3NWFjZjNjM2EzYmY3My5iaW5kUG9wdXAocG9wdXBfN2Y4NGRjZTRkNzc3NGU0Zjg0MmY4YThiZGU3MDdjYTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTI5OWVjYTU1YzczNDNkMjk5M2VkOTM3YmIzNjQ3NTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjI0Mjc0ODk1NjAxLDguMDU5NDg1NDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNmM4ZmVjOTQwOWQ0ZDA1YTkxYjg1MmY2NTU2MzU1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTQ2YTNjM2M3ZWI0ZTZiOGZiYTIxMDY3MGY1YWUxNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmU0NmEzYzNjN2ViNGU2YjhmYmEyMTA2NzBmNWFlMTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFGTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTZjOGZlYzk0MDlkNGQwNWE5MWI4NTJmNjU1NjM1NTMuc2V0Q29udGVudChodG1sXzJlNDZhM2MzYzdlYjRlNmI4ZmJhMjEwNjcwZjVhZTE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTI5OWVjYTU1YzczNDNkMjk5M2VkOTM3YmIzNjQ3NTcuYmluZFBvcHVwKHBvcHVwX2E2YzhmZWM5NDA5ZDRkMDVhOTFiODUyZjY1NTYzNTUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJkYjE1Yjk2YzI4NjQ5ZDc4OTRmN2MwMGE1NmY5OGNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS45NTg3MTg3NzU4NCw5LjE4MjI4ODI1NTQ1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODY1MDIzYjBhMDM0MjU2OTE3ZTgyZTIxZmI5OGM2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YWRiMDU0ZjZjODQ0OGU4ODAyNTc5NDZiMGVlZDVhNSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2FkYjA1NGY2Yzg0NDhlODgwMjU3OTQ2YjBlZWQ1YTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFGVVNBUkU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4NjUwMjNiMGEwMzQyNTY5MTdlODJlMjFmYjk4YzY2LnNldENvbnRlbnQoaHRtbF83YWRiMDU0ZjZjODQ0OGU4ODAyNTc5NDZiMGVlZDVhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJkYjE1Yjk2YzI4NjQ5ZDc4OTRmN2MwMGE1NmY5OGNlLmJpbmRQb3B1cChwb3B1cF9jODY1MDIzYjBhMDM0MjU2OTE3ZTgyZTIxZmI5OGM2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZDRmZjZkMGQ0NjM0MDRhYTBmMmZjYmNlZGY5Njg3OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjgwMzUsNC4yMjkwMDYyMzYzMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTMwNGRmMDc5YWI4NGZlNDk3OTI1MTZiMjdmZWIyMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWE4MjNkZDM2ODQ5NGIzMGIzMmRlZTdlMTE1N2Y4NmUgPSAkKCc8ZGl2IGlkPSJodG1sXzVhODIzZGQzNjg0OTRiMzBiMzJkZWU3ZTExNTdmODZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BSEFHR0FSRU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEzMDRkZjA3OWFiODRmZTQ5NzkyNTE2YjI3ZmViMjI0LnNldENvbnRlbnQoaHRtbF81YTgyM2RkMzY4NDk0YjMwYjMyZGVlN2UxMTU3Zjg2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdkNGZmNmQwZDQ2MzQwNGFhMGYyZmNiY2VkZjk2ODc5LmJpbmRQb3B1cChwb3B1cF8xMzA0ZGYwNzlhYjg0ZmU0OTc5MjUxNmIyN2ZlYjIyNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmM4OTliNDg1ODE0MzA3ODdiYzgxYjc3MzhhMTJhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUuNTA1MzUyNjcwNTMsLTQuNjU0MThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0ZmMzN2VkMTcxMTRiMDM5ZDE3ZmFjMGUzNzgyNTgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4MThiMmM0MTAzMTRiMjE4YThhNTE5YTMxMmU5YjRmID0gJCgnPGRpdiBpZD0iaHRtbF9lODE4YjJjNDEwMzE0YjIxOGE4YTUxOWEzMTJlOWI0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QUpVS1JVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNGZjMzdlZDE3MTE0YjAzOWQxN2ZhYzBlMzc4MjU4Mi5zZXRDb250ZW50KGh0bWxfZTgxOGIyYzQxMDMxNGIyMThhOGE1MTlhMzEyZTliNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NmM4OTliNDg1ODE0MzA3ODdiYzgxYjc3MzhhMTJhZS5iaW5kUG9wdXAocG9wdXBfYTRmYzM3ZWQxNzExNGIwMzlkMTdmYWMwZTM3ODI1ODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWYyMjgyNjE2ZjU1NDg4N2FlNjlmOGExODJiMGQ0OTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjYyNDkwODcxMTc5LDEuMTQ0NzQ4MTUzOTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1ZDRkNTU2MjQyNTRlZDc5OGRkOWVmN2ZlNDMxOGY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViMTUxMWRhZDllNDQxNGFiZjNkODU3NDhmYThhM2M1ID0gJCgnPGRpdiBpZD0iaHRtbF81YjE1MTFkYWQ5ZTQ0MTRhYmYzZDg1NzQ4ZmE4YTNjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QUtQT1NPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NWQ0ZDU1NjI0MjU0ZWQ3OThkZDllZjdmZTQzMThmNy5zZXRDb250ZW50KGh0bWxfNWIxNTExZGFkOWU0NDE0YWJmM2Q4NTc0OGZhOGEzYzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZjIyODI2MTZmNTU0ODg3YWU2OWY4YTE4MmIwZDQ5MS5iaW5kUG9wdXAocG9wdXBfNDVkNGQ1NTYyNDI1NGVkNzk4ZGQ5ZWY3ZmU0MzE4ZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWIwZjA1NmNmZjcxNDFkYmIyNTg3YmIxMzRkMWQ4NmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjQzODkxNjYwNzI5LC0wLjM3NTE1Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGIzZDVlY2I1YjJkNDlmMDg0NzY0NjZlOTUwY2IzZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJmZjM3YzY5MzIyNDg4ZmJlMTYwYWNlN2ZkMTcyOTcgPSAkKCc8ZGl2IGlkPSJodG1sXzViZmYzN2M2OTMyMjQ4OGZiZTE2MGFjZTdmZDE3Mjk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BS1lFTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGIzZDVlY2I1YjJkNDlmMDg0NzY0NjZlOTUwY2IzZTEuc2V0Q29udGVudChodG1sXzViZmYzN2M2OTMyMjQ4OGZiZTE2MGFjZTdmZDE3Mjk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWIwZjA1NmNmZjcxNDFkYmIyNTg3YmIxMzRkMWQ4NmYuYmluZFBvcHVwKHBvcHVwXzRiM2Q1ZWNiNWIyZDQ5ZjA4NDc2NDY2ZTk1MGNiM2UxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZmNWM1MGY0YWE4ODQ1YmFiZGQzYWVmY2NiOTU4OWY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuMTU4MzYsMzYuODM0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTYxOGM3NTUyMjZhNGU3NmI4M2UyZjJiZGM5NzI0MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA1MjdlNWM3ZmY1NGVmNjg5ZDU3MWJiNDY1M2QxMDUgPSAkKCc8ZGl2IGlkPSJodG1sX2UwNTI3ZTVjN2ZmNTRlZjY4OWQ1NzFiYjQ2NTNkMTA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTEFHWUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2MThjNzU1MjI2YTRlNzZiODNlMmYyYmRjOTcyNDI3LnNldENvbnRlbnQoaHRtbF9lMDUyN2U1YzdmZjU0ZWY2ODlkNTcxYmI0NjUzZDEwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZmNWM1MGY0YWE4ODQ1YmFiZGQzYWVmY2NiOTU4OWY3LmJpbmRQb3B1cChwb3B1cF85NjE4Yzc1NTIyNmE0ZTc2YjgzZTJmMmJkYzk3MjQyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83Njg5MDcyOTg0MTI0YWNmODU5ZTdjZGZmOGE2NmYzZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljg0NDQsMi4zODg5ODkxMzM5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmM4Y2FjZTE5NDQ0NDZhN2IyMDJlYzhhYzNhMWUwM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQ2MWQzNTI4Yzk3NDJjOGFmOGYxN2JmMjkwYmMxMzcgPSAkKCc8ZGl2IGlkPSJodG1sXzJkNjFkMzUyOGM5NzQyYzhhZjhmMTdiZjI5MGJjMTM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTEdFUklBTlM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjOGNhY2UxOTQ0NDQ2YTdiMjAyZWM4YWMzYTFlMDNhLnNldENvbnRlbnQoaHRtbF8yZDYxZDM1MjhjOTc0MmM4YWY4ZjE3YmYyOTBiYzEzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc2ODkwNzI5ODQxMjRhY2Y4NTllN2NkZmY4YTY2ZjNlLmJpbmRQb3B1cChwb3B1cF9iYzhjYWNlMTk0NDQ0NmE3YjIwMmVjOGFjM2ExZTAzYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85OTI3OGIxNTJlZGU0ZjIxYTMwNWY3ZmY1NzE5MmJlZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNTE1MTcyOTAyNTgsMzEuMjIyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTljMDU1ZTIyMmYzNGU1MmI1MmRkNjMzYTEwNDZmZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBmNGRkYzcyYzM3NGJiMjlmZWY1NDRmMzUzZmFiYjggPSAkKCc8ZGl2IGlkPSJodG1sX2MwZjRkZGM3MmMzNzRiYjI5ZmVmNTQ0ZjM1M2ZhYmI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTFVSPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWMwNTVlMjIyZjM0ZTUyYjUyZGQ2MzNhMTA0NmZlNi5zZXRDb250ZW50KGh0bWxfYzBmNGRkYzcyYzM3NGJiMjlmZWY1NDRmMzUzZmFiYjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85OTI3OGIxNTJlZGU0ZjIxYTMwNWY3ZmY1NzE5MmJlZC5iaW5kUG9wdXAocG9wdXBfZTljMDU1ZTIyMmYzNGU1MmI1MmRkNjMzYTEwNDZmZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzExNDlkZjJkYjY4NDc0MzgxMWY2YmVhZTJlODJiMTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4wNTQ0LDM2LjEzMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2YjlmMDljMDI3ODRjNDk5NWYzZWZkZGE2NmJhYTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzZWU5MGY5ODQ1YjQxZTA4MWVkNDMwOTNhNTg2NmI3ID0gJCgnPGRpdiBpZD0iaHRtbF8wM2VlOTBmOTg0NWI0MWUwODFlZDQzMDkzYTU4NjZiNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU1BUkFSPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NmI5ZjA5YzAyNzg0YzQ5OTVmM2VmZGRhNjZiYWEzYy5zZXRDb250ZW50KGh0bWxfMDNlZTkwZjk4NDViNDFlMDgxZWQ0MzA5M2E1ODY2YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMTE0OWRmMmRiNjg0NzQzODExZjZiZWFlMmU4MmIxOS5iaW5kUG9wdXAocG9wdXBfNDZiOWYwOWMwMjc4NGM0OTk1ZjNlZmRkYTY2YmFhM2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWQ2ZmVkMzdiNTE2NDQ5ZDg4ZTA3NDlkMGU4OTBiNDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFswLjczMzI0NzMyNzE0LDI5LjY4NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxOTRmYjZmMjRmMTRhNjM4NzM3YmJhM2ViYjVlMWFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyODAzNDY2ZDM1NTQ5MmQ4MTcxZTRmOWM5OTBlMTFlID0gJCgnPGRpdiBpZD0iaHRtbF84MjgwMzQ2NmQzNTU0OTJkODE3MWU0ZjljOTkwZTExZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU1CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzE5NGZiNmYyNGYxNGE2Mzg3MzdiYmEzZWJiNWUxYWQuc2V0Q29udGVudChodG1sXzgyODAzNDY2ZDM1NTQ5MmQ4MTcxZTRmOWM5OTBlMTFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWQ2ZmVkMzdiNTE2NDQ5ZDg4ZTA3NDlkMGU4OTBiNDguYmluZFBvcHVwKHBvcHVwXzcxOTRmYjZmMjRmMTRhNjM4NzM3YmJhM2ViYjVlMWFkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NmODcxNDVlMmU2YTRkN2M4NDBkOTA5YTNhOThiNTYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjU4NjIsMTYuMDM5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjM5MGU1OWFjZmQwNDg4NjlkODE5NmE5MjMzOWJkZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTViODY5YjEwNjQyNDUwNzg2ZDkyNDAyMDRkMTJhMzcgPSAkKCc8ZGl2IGlkPSJodG1sXzE1Yjg2OWIxMDY0MjQ1MDc4NmQ5MjQwMjA0ZDEyYTM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTUJPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzkwZTU5YWNmZDA0ODg2OWQ4MTk2YTkyMzM5YmRmNS5zZXRDb250ZW50KGh0bWxfMTViODY5YjEwNjQyNDUwNzg2ZDkyNDAyMDRkMTJhMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZjg3MTQ1ZTJlNmE0ZDdjODQwZDkwOWEzYTk4YjU2MC5iaW5kUG9wdXAocG9wdXBfYjM5MGU1OWFjZmQwNDg4NjlkODE5NmE5MjMzOWJkZjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjhjNGUwZmYzZmIxNGEwZWJkNTA0YWZiZTEyZTIxMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4zNzc0LDM3LjgzNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhNjU4MzY4OTgzYTRmMjg4MGFlOGZlY2Q2YzIwZDU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0ODkwMDE1ZTBhNzQ2MTM5ZjBmMWY1NGQ4ZTEwMTM4ID0gJCgnPGRpdiBpZD0iaHRtbF9iNDg5MDAxNWUwYTc0NjEzOWYwZjFmNTRkOGUxMDEzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU1FUjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmE2NTgzNjg5ODNhNGYyODgwYWU4ZmVjZDZjMjBkNTYuc2V0Q29udGVudChodG1sX2I0ODkwMDE1ZTBhNzQ2MTM5ZjBmMWY1NGQ4ZTEwMTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjhjNGUwZmYzZmIxNGEwZWJkNTA0YWZiZTEyZTIxMGEuYmluZFBvcHVwKHBvcHVwX2ZhNjU4MzY4OTgzYTRmMjg4MGFlOGZlY2Q2YzIwZDU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZlODY3YzcwMGZkNTRmNDU4ZWRhZTgwODQ3NTljZDgyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMDM1NCwzNy42OTg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNGI5ZWNhYzJkNjg0ODgxOWRkOGE4NzY4MDAwZDg5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDc5OTY2NTAxM2U0M2Y4YTBiMTI5MzRjMzgzNDI3MCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDQ3OTk2NjUwMTNlNDNmOGEwYjEyOTM0YzM4MzQyNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFNSEFSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRiOWVjYWMyZDY4NDg4MTlkZDhhODc2ODAwMGQ4OWEuc2V0Q29udGVudChodG1sXzQ0Nzk5NjY1MDEzZTQzZjhhMGIxMjkzNGMzODM0MjcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmU4NjdjNzAwZmQ1NGY0NThlZGFlODA4NDc1OWNkODIuYmluZFBvcHVwKHBvcHVwXzE0YjllY2FjMmQ2ODQ4ODE5ZGQ4YTg3NjgwMDBkODlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk4N2YxNmNmZmQzNjQxOGM4YmI1Mzc3ZTlmYzIwNjZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy42NzYwNDU5MTc3NSwxLjU1ODM5NTMyMTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiMzEzMmYxMjY3OTQ3YjQ5ZWY2ZWQwY2QyMmY1NjdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkNjc5MmFjMGU3NjQ0OTViY2IxZjdlNTI5NTM5MWYzID0gJCgnPGRpdiBpZD0iaHRtbF8zZDY3OTJhYzBlNzY0NDk1YmNiMWY3ZTUyOTUzOTFmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU5BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjMxMzJmMTI2Nzk0N2I0OWVmNmVkMGNkMjJmNTY3ZS5zZXRDb250ZW50KGh0bWxfM2Q2NzkyYWMwZTc2NDQ5NWJjYjFmN2U1Mjk1MzkxZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ODdmMTZjZmZkMzY0MThjOGJiNTM3N2U5ZmMyMDY2Yy5iaW5kUG9wdXAocG9wdXBfZmIzMTMyZjEyNjc5NDdiNDllZjZlZDBjZDIyZjU2N2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzdmZWQ5MDEzNzM3NDQ3MGFjMDU5NDRiMjQ1MDAyYmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC44ODI4LDMwLjA3MTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjZDBlZDJkNmMwODRkYTdiNTE5OTc4MDQ1Y2VkN2U3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3ZjQ0ZTQ0YzliMDRlMjQ4OTdmODYzNDc2NzAyNWI5ID0gJCgnPGRpdiBpZD0iaHRtbF8xN2Y0NGU0NGM5YjA0ZTI0ODk3Zjg2MzQ3NjcwMjViOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU5BRzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNkMGVkMmQ2YzA4NGRhN2I1MTk5NzgwNDVjZWQ3ZTcuc2V0Q29udGVudChodG1sXzE3ZjQ0ZTQ0YzliMDRlMjQ4OTdmODYzNDc2NzAyNWI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzdmZWQ5MDEzNzM3NDQ3MGFjMDU5NDRiMjQ1MDAyYmMuYmluZFBvcHVwKHBvcHVwXzVjZDBlZDJkNmMwODRkYTdiNTE5OTc4MDQ1Y2VkN2U3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E5MzkyM2E4ZDZjOTQyNTg5NGYyYzg4MjEzOTlkNDllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC44MDQyOTA0MTI3NCw5LjU0NTQ1MjQ5OTI2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OGY2NTUxYjU4OTk0ZjQxODFiOWYxMjU3Y2JiOGY1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZmZkODYwMmY0NDI0MjkzOTRiYTJmZDZjM2U4ZDdkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGZmZDg2MDJmNDQyNDI5Mzk0YmEyZmQ2YzNlOGQ3ZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFOR0FTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGY2NTUxYjU4OTk0ZjQxODFiOWYxMjU3Y2JiOGY1Yi5zZXRDb250ZW50KGh0bWxfNGZmZDg2MDJmNDQyNDI5Mzk0YmEyZmQ2YzNlOGQ3ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOTM5MjNhOGQ2Yzk0MjU4OTRmMmM4ODIxMzk5ZDQ5ZS5iaW5kUG9wdXAocG9wdXBfODhmNjU1MWI1ODk5NGY0MTgxYjlmMTI1N2NiYjhmNWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTYwZTdhNGFlNTcwNDVjMDkyNjAxMjAwMjExYjNhMjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuOTk0NCw0Ny42MjE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjZjZjQ1ODM0YTY0OTQwOTRjMGFlMjg3MDFkY2E2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTRhOThjOTBlZTU0MjQzOTc1Yzg2MDQ2ODg5NWU3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGE0YTk4YzkwZWU1NDI0Mzk3NWM4NjA0Njg4OTVlN2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFOVEFJU0FLQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI2Y2Y0NTgzNGE2NDk0MDk0YzBhZTI4NzAxZGNhNjIuc2V0Q29udGVudChodG1sXzhhNGE5OGM5MGVlNTQyNDM5NzVjODYwNDY4ODk1ZTdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTYwZTdhNGFlNTcwNDVjMDkyNjAxMjAwMjExYjNhMjEuYmluZFBvcHVwKHBvcHVwX2IyNmNmNDU4MzRhNjQ5NDA5NGMwYWUyODcwMWRjYTYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk3MTk5OWZhNTk2ZjQxNTNiNzY2ODIzYzUwMDQ4M2UzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI0Ljk0MTQsNDUuODEwOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGZjNDg3N2FkOTU4NDg3ODgwMGY5ZTcwYTk3ZDFjMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDQ2ZTViZjkwNzA0NGRjMWE1NmI4MjgyZDM3NTMzMmYgPSAkKCc8ZGl2IGlkPSJodG1sXzA0NmU1YmY5MDcwNDRkYzFhNTZiODI4MmQzNzUzMzJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTlRBTkRST1k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmYzQ4NzdhZDk1ODQ4Nzg4MDBmOWU3MGE5N2QxYzMwLnNldENvbnRlbnQoaHRtbF8wNDZlNWJmOTA3MDQ0ZGMxYTU2YjgyODJkMzc1MzMyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk3MTk5OWZhNTk2ZjQxNTNiNzY2ODIzYzUwMDQ4M2UzLmJpbmRQb3B1cChwb3B1cF80ZmM0ODc3YWQ5NTg0ODc4ODAwZjllNzBhOTdkMWMzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMjcwYmEwYWYxMzU0ZmY0YjVhZjVmYTg1ZTk3YWVhMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjIyNzcsLTIuNDM4NTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4YzgwNjMwMDVmMjQwMDk4YzVjMWFhMWZmYjYzMWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjZTQxZWY5YTRlNTQ1NDA5NzllMDA0NGZlM2Q0OGQ3ID0gJCgnPGRpdiBpZD0iaHRtbF82Y2U0MWVmOWE0ZTU0NTQwOTc5ZTAwNDRmZTNkNDhkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU5URVNTQVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4YzgwNjMwMDVmMjQwMDk4YzVjMWFhMWZmYjYzMWRhLnNldENvbnRlbnQoaHRtbF82Y2U0MWVmOWE0ZTU0NTQwOTc5ZTAwNDRmZTNkNDhkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIyNzBiYTBhZjEzNTRmZjRiNWFmNWZhODVlOTdhZWExLmJpbmRQb3B1cChwb3B1cF80OGM4MDYzMDA1ZjI0MDA5OGM1YzFhYTFmZmI2MzFkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMDNmOTU4N2I0OTc0ODg2YTQxYmJlNzcwMTU4ZTM2NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuNjYyMDE2OTk0MjEsMzQuMDY3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODUwNTE5NjU0ZDg0NGMzNWFlNTQxOGY5Y2ZhZDAyMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQ5ZjQ3NjZkZTBhNDRlYTkwNjJhMmNmODZiYTNiYjQgPSAkKCc8ZGl2IGlkPSJodG1sXzQ0OWY0NzY2ZGUwYTQ0ZWE5MDYyYTJjZjg2YmEzYmI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTlVBSzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODUwNTE5NjU0ZDg0NGMzNWFlNTQxOGY5Y2ZhZDAyMjUuc2V0Q29udGVudChodG1sXzQ0OWY0NzY2ZGUwYTQ0ZWE5MDYyYTJjZjg2YmEzYmI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjAzZjk1ODdiNDk3NDg4NmE0MWJiZTc3MDE1OGUzNjcuYmluZFBvcHVwKHBvcHVwXzg1MDUxOTY1NGQ4NDRjMzVhZTU0MThmOWNmYWQwMjI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMxMDYzNzY4MTNjMzRiYTA4MTlhM2E3MDA3NzM2MzdiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS43NzAwNTI1OTQyMSw5LjQ3MjczMDEzMjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDBlZDY4ZDY1MzI0OGEwOGVjOTQxZGYxNTIzMzUxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZGFiMDhlMjVjMDI0MjdlYjM0YmZiZmEwYjg4NDhlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWRhYjA4ZTI1YzAyNDI3ZWIzNGJmYmZhMGI4ODQ4ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFOWUFORzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQwZWQ2OGQ2NTMyNDhhMDhlYzk0MWRmMTUyMzM1MTAuc2V0Q29udGVudChodG1sX2FkYWIwOGUyNWMwMjQyN2ViMzRiZmJmYTBiODg0OGVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzEwNjM3NjgxM2MzNGJhMDgxOWEzYTcwMDc3MzYzN2IuYmluZFBvcHVwKHBvcHVwX2VkMGVkNjhkNjUzMjQ4YTA4ZWM5NDFkZjE1MjMzNTEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UxOGJkMDNiNzBlNDQ1YjM4OTUwMzdhMWEzMDQ5MWFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi40Mzk2OTM1MzkyOCwtMy4yNDY5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzgyOTQ0N2QxMGY3NGNmNDljMTE2ODRhNTU5ODgzMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVhNGMyMTAwNTNlNDE5YmFiNTEwNTM2YzU4YWUzOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzc1YTRjMjEwMDUzZTQxOWJhYjUxMDUzNmM1OGFlMzljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTllJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODI5NDQ3ZDEwZjc0Y2Y0OWMxMTY4NGE1NTk4ODMyNS5zZXRDb250ZW50KGh0bWxfNzVhNGMyMTAwNTNlNDE5YmFiNTEwNTM2YzU4YWUzOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMThiZDAzYjcwZTQ0NWIzODk1MDM3YTFhMzA0OTFhYi5iaW5kUG9wdXAocG9wdXBfMzgyOTQ0N2QxMGY3NGNmNDljMTE2ODRhNTU5ODgzMjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDVlNWJiYjFjYjhkNDY3YmI0NmU3MzAwOGRlOGU0YWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi45MTEyLDkuODI4OTA2NjU5NTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0M2I5ZWMyYzI4ZTQ4YTBiNWUzZmJhNDEyM2QzMjY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4MTZjNjY3ZTVlZTQ1YWVhYzcyODc2MDhmYzAwM2VlID0gJCgnPGRpdiBpZD0iaHRtbF9jODE2YzY2N2U1ZWU0NWFlYWM3Mjg3NjA4ZmMwMDNlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVJBRDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQzYjllYzJjMjhlNDhhMGI1ZTNmYmE0MTIzZDMyNjguc2V0Q29udGVudChodG1sX2M4MTZjNjY3ZTVlZTQ1YWVhYzcyODc2MDhmYzAwM2VlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDVlNWJiYjFjYjhkNDY3YmI0NmU3MzAwOGRlOGU0YWMuYmluZFBvcHVwKHBvcHVwXzc0M2I5ZWMyYzI4ZTQ4YTBiNWUzZmJhNDEyM2QzMjY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NlMjBkNmQ2YzA4YzQwNGI5Y2E3NGZmOGIyYTE1Y2RkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4xNjIwNzI1MzI1OCw4LjU2MDc1MDc3MTUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODQ2MTFmYWM5NzY0OTEyODkyY2JhNmEzNTJhNzdjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Njg3OGY0MjAxOWE0YmMwYmI5YTVjMjJkZTI5ZGI0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzY4NzhmNDIwMTlhNGJjMGJiOWE1YzIyZGUyOWRiNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFSQUdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODQ2MTFmYWM5NzY0OTEyODkyY2JhNmEzNTJhNzdjMi5zZXRDb250ZW50KGh0bWxfNzY4NzhmNDIwMTlhNGJjMGJiOWE1YzIyZGUyOWRiNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTIwZDZkNmMwOGM0MDRiOWNhNzRmZjhiMmExNWNkZC5iaW5kUG9wdXAocG9wdXBfZjg0NjExZmFjOTc2NDkxMjg5MmNiYTZhMzUyYTc3YzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzk3ZDNkNjAxNmQ3NGQ1NGFlMjJkY2EyYzIwMzFmZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Ljc5NTMxMzkxNzY1LC00LjU5MzQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGU0YTM0YmMzZjM0NWE5ODNhYzE0NzQxZDdkMzYzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmY1OWExOTdhMTY0MDNlYjE3NTFmYzQwZjk0ZGRjMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZmNTlhMTk3YTE2NDAzZWIxNzUxZmM0MGY5NGRkYzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFSSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhlNGEzNGJjM2YzNDVhOTgzYWMxNDc0MWQ3ZDM2Mzcuc2V0Q29udGVudChodG1sX2FmZjU5YTE5N2ExNjQwM2ViMTc1MWZjNDBmOTRkZGMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzk3ZDNkNjAxNmQ3NGQ1NGFlMjJkY2EyYzIwMzFmZjUuYmluZFBvcHVwKHBvcHVwX2Y4ZTRhMzRiYzNmMzQ1YTk4M2FjMTQ3NDFkN2QzNjM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IwOTQ1YzM5NjBjYTQxMjBiZDBhMWFlMzRiNDU5YThlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjUwNjQyOTczOSw0MC41NzcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MjgyM2VhMzI1ODM0YjMyODFmODk1YTI1YjMzZDA1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzUyYWIxNGI3MDE0YzdlOTI5YzVkYjI1N2UzNDI2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzM1MmFiMTRiNzAxNGM3ZTkyOWM1ZGIyNTdlMzQyNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFSVVNJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjgyM2VhMzI1ODM0YjMyODFmODk1YTI1YjMzZDA1My5zZXRDb250ZW50KGh0bWxfNzM1MmFiMTRiNzAxNGM3ZTkyOWM1ZGIyNTdlMzQyNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMDk0NWMzOTYwY2E0MTIwYmQwYTFhZTM0YjQ1OWE4ZS5iaW5kUG9wdXAocG9wdXBfODI4MjNlYTMyNTgzNGIzMjgxZjg5NWEyNWIzM2QwNTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDdiNDQxNWFlNmZjNGE4Y2FlM2M5YmVmOTQ3NDYyYzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC44NzEyLDguODk4MTgwODkwMzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1MTM2OGIxMzZlODRhMDZiODYxYjZlODBiYzI5NjcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5N2FiYmI3MDkxNzRkZWFhOGZmZjg4MTczMTQyYzRiID0gJCgnPGRpdiBpZD0iaHRtbF9kOTdhYmJiNzA5MTc0ZGVhYThmZmY4ODE3MzE0MmM0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNCRU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1MTM2OGIxMzZlODRhMDZiODYxYjZlODBiYzI5NjcwLnNldENvbnRlbnQoaHRtbF9kOTdhYmJiNzA5MTc0ZGVhYThmZmY4ODE3MzE0MmM0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA3YjQ0MTVhZTZmYzRhOGNhZTNjOWJlZjk0NzQ2MmM1LmJpbmRQb3B1cChwb3B1cF8zNTEzNjhiMTM2ZTg0YTA2Yjg2MWI2ZTgwYmMyOTY3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81Y2M4Nzg4OWYyOTY0NWQzODEzZWEzNmFlNTllNGZlOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuNzQxODUwMzk3ODUsLTEuNDUyMzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNzlmMDM0ZjM0YzQ5MzRiMmU0YTUwNDZiOTk0NWY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzYmI3ZjMxOWUwZjQ3N2I4YWZhNTY1MzljNjlmMjA2ID0gJCgnPGRpdiBpZD0iaHRtbF9hM2JiN2YzMTllMGY0NzdiOGFmYTU2NTM5YzY5ZjIwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNIQU5USTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDM3OWYwMzRmMzRjNDkzNGIyZTRhNTA0NmI5OTQ1ZjYuc2V0Q29udGVudChodG1sX2EzYmI3ZjMxOWUwZjQ3N2I4YWZhNTY1MzljNjlmMjA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWNjODc4ODlmMjk2NDVkMzgxM2VhMzZhZTU5ZTRmZTkuYmluZFBvcHVwKHBvcHVwX2QzNzlmMDM0ZjM0YzQ5MzRiMmU0YTUwNDZiOTk0NWY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdkNDU5MmI3ZTI5NzRlYmViNWI1ZGMzOTQzNzcyZDRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4xODAxMDg2MDYxOCwtMi44NjY0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY3M2E1ZjU2MmJmNDgwZDg1NDk0MDkwODdmMzEyMjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QzZDdlMThhYzJhNDdhNTg3YWM3NTUyZTlhZmRiMDUgPSAkKCc8ZGl2IGlkPSJodG1sX2NkM2Q3ZTE4YWMyYTQ3YTU4N2FjNzU1MmU5YWZkYjA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NJTkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmNzNhNWY1NjJiZjQ4MGQ4NTQ5NDA5MDg3ZjMxMjI2LnNldENvbnRlbnQoaHRtbF9jZDNkN2UxOGFjMmE0N2E1ODdhYzc1NTJlOWFmZGIwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdkNDU5MmI3ZTI5NzRlYmViNWI1ZGMzOTQzNzcyZDRiLmJpbmRQb3B1cChwb3B1cF9hZjczYTVmNTYyYmY0ODBkODU0OTQwOTA4N2YzMTIyNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MjI2NDg5ZDU0YTA0ZWZlYmJhYWIyY2FlMGE0YjVjYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjQ1NTYsLTUuMDE0OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwNWJmZmQ2ZGRhNzRiNzZiZmJlZWIxMGMzOGQ0OGZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QwZWQ5YTAxMWUxODRkYmZhYTcwMDEyZDdjZjg4MmIyID0gJCgnPGRpdiBpZD0iaHRtbF9kMGVkOWEwMTFlMTg0ZGJmYWE3MDAxMmQ3Y2Y4ODJiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVRUQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODA1YmZmZDZkZGE3NGI3NmJmYmVlYjEwYzM4ZDQ4ZmMuc2V0Q29udGVudChodG1sX2QwZWQ5YTAxMWUxODRkYmZhYTcwMDEyZDdjZjg4MmIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTIyNjQ4OWQ1NGEwNGVmZWJiYWFiMmNhZTBhNGI1Y2IuYmluZFBvcHVwKHBvcHVwXzgwNWJmZmQ2ZGRhNzRiNzZiZmJlZWIxMGMzOGQ0OGZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk3ZjkyZTE4YzVkZTQ1MTg5YjAzZTU0NDJhNDU1ZDI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4wNDU4NTc0ODUxLC0zLjczNTAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Mjc1MWNiMzA1NTU0NmU5OTg5ZjQ0YzA3OTJlMWFiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OGFlN2MxYjNmNmI0ZDMxODUwYTY0N2YwYWI5ZjRhZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNThhZTdjMWIzZjZiNGQzMTg1MGE2NDdmMGFiOWY0YWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFUVElFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Mjc1MWNiMzA1NTU0NmU5OTg5ZjQ0YzA3OTJlMWFiNi5zZXRDb250ZW50KGh0bWxfNThhZTdjMWIzZjZiNGQzMTg1MGE2NDdmMGFiOWY0YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85N2Y5MmUxOGM1ZGU0NTE4OWIwM2U1NDQyYTQ1NWQyNi5iaW5kUG9wdXAocG9wdXBfNTI3NTFjYjMwNTU1NDZlOTk4OWY0NGMwNzkyZTFhYjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTU3NzE4OTZkN2FhNDNhNzgzMTE4NWUxNDI1MGJiMTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjQ2OTY1MTMwNDIsMC45NjM4NDQ3NDI5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGMxNTc2NjY2OGM2NGNjNGIzYzQxNThmM2U2OWE3YTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmVhZmUxNDZiNDY5NDMxZGEwZTQwNDdkZDBhYTY1OGYgPSAkKCc8ZGl2IGlkPSJodG1sXzJlYWZlMTQ2YjQ2OTQzMWRhMGU0MDQ3ZGQwYWE2NThmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BVFlVVEk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjMTU3NjY2NjhjNjRjYzRiM2M0MTU4ZjNlNjlhN2E4LnNldENvbnRlbnQoaHRtbF8yZWFmZTE0NmI0Njk0MzFkYTBlNDA0N2RkMGFhNjU4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU1NzcxODk2ZDdhYTQzYTc4MzExODVlMTQyNTBiYjEyLmJpbmRQb3B1cChwb3B1cF9kYzE1NzY2NjY4YzY0Y2M0YjNjNDE1OGYzZTY5YTdhOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNTljZjUyZThhZjM0YjJmYjFhNWIzNTg4NzkyMGU4MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjEwODQsMy4yNTMzNzE4NTAzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzdlNzZkMTVmNWNmNGYyMDk5ZGVlNjllYjI3ZjAyYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThhMjYxMDgyMDM0NGU2N2EwOWJmZmJhZWRhMTgwMmMgPSAkKCc8ZGl2IGlkPSJodG1sX2E4YTI2MTA4MjAzNDRlNjdhMDliZmZiYWVkYTE4MDJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BVUxMSU1JTkRFTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzdlNzZkMTVmNWNmNGYyMDk5ZGVlNjllYjI3ZjAyYTYuc2V0Q29udGVudChodG1sX2E4YTI2MTA4MjAzNDRlNjdhMDliZmZiYWVkYTE4MDJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTU5Y2Y1MmU4YWYzNGIyZmIxYTViMzU4ODc5MjBlODMuYmluZFBvcHVwKHBvcHVwXzc3ZTc2ZDE1ZjVjZjRmMjA5OWRlZTY5ZWIyN2YwMmE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E4YTE4NTMxNTAxYzQ2OTM5MWZmYjYzNDQ0MjZjYTQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjE1MDYsMjkuMDc0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjExNGUxOTNkYTY3NDkyZDgwZjIxNGFmZWUyODA3NGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzI4NDM5MzdkYzFhNGE0Zjg0NzM4NjI2MTZkNGY5YWUgPSAkKCc8ZGl2IGlkPSJodG1sX2MyODQzOTM3ZGMxYTRhNGY4NDczODYyNjE2ZDRmOWFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BVVNISTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjExNGUxOTNkYTY3NDkyZDgwZjIxNGFmZWUyODA3NGQuc2V0Q29udGVudChodG1sX2MyODQzOTM3ZGMxYTRhNGY4NDczODYyNjE2ZDRmOWFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYThhMTg1MzE1MDFjNDY5MzkxZmZiNjM0NDQyNmNhNDcuYmluZFBvcHVwKHBvcHVwXzYxMTRlMTkzZGE2NzQ5MmQ4MGYyMTRhZmVlMjgwNzRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4MzQyNTZjYzI1MzQ4NjNhZmViMDQ2MmI5YmU3MjdlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNzg5MywxMC4zMTU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTdlZmFlN2ZmMzQ0MzAxYjg2Y2UzNDNiMWUzMDk5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OGUyYjZkNmE4ZjI0MGE4YjVjM2Y2N2Y3ZTNiYTA4YSA9ICQoJzxkaXYgaWQ9Imh0bWxfODhlMmI2ZDZhOGYyNDBhOGI1YzNmNjdmN2UzYmEwOGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFVWU9LQVdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOTdlZmFlN2ZmMzQ0MzAxYjg2Y2UzNDNiMWUzMDk5Ny5zZXRDb250ZW50KGh0bWxfODhlMmI2ZDZhOGYyNDBhOGI1YzNmNjdmN2UzYmEwOGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zODM0MjU2Y2MyNTM0ODYzYWZlYjA0NjJiOWJlNzI3ZS5iaW5kUG9wdXAocG9wdXBfMDk3ZWZhZTdmZjM0NDMwMWI4NmNlMzQzYjFlMzA5OTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDc1NDgzMmIxMTA0NDk0NWE5ZmNhZmJhODliMDAxOWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjczMjIzNzA3MTYxLDAuNjIxNjIxMjY1ODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0ZTU5MzExOGQzYzRiN2I5NTkzZWJhYWE3ZWEzNmE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VkNDM2YTQ2Y2QzNzQxYzdhNzE5OWM5OTBjYjlhYzRkID0gJCgnPGRpdiBpZD0iaHRtbF9lZDQzNmE0NmNkMzc0MWM3YTcxOTljOTkwY2I5YWM0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVZBVElNRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODRlNTkzMTE4ZDNjNGI3Yjk1OTNlYmFhYTdlYTM2YTkuc2V0Q29udGVudChodG1sX2VkNDM2YTQ2Y2QzNzQxYzdhNzE5OWM5OTBjYjlhYzRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDc1NDgzMmIxMTA0NDk0NWE5ZmNhZmJhODliMDAxOWEuYmluZFBvcHVwKHBvcHVwXzg0ZTU5MzExOGQzYzRiN2I5NTkzZWJhYWE3ZWEzNmE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI4ZjUyYjQyZTRlYzQ3ZDU5MzkyYjYzMjBkOWI2ZDQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yODc0MzYwNDkwNCwtNC43ODQ0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmNjNzQ5YzYzMTgxNGQ3Y2IwY2Y4YTBmMjgzNzEzNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThhMmY1ZjQ0YmM0NDk2ZWI4MjMwYmI0YjViODgwNDYgPSAkKCc8ZGl2IGlkPSJodG1sXzU4YTJmNWY0NGJjNDQ5NmViODIzMGJiNGI1Yjg4MDQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BVklLQU08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjYzc0OWM2MzE4MTRkN2NiMGNmOGEwZjI4MzcxMzVmLnNldENvbnRlbnQoaHRtbF81OGEyZjVmNDRiYzQ0OTZlYjgyMzBiYjRiNWI4ODA0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4ZjUyYjQyZTRlYzQ3ZDU5MzkyYjYzMjBkOWI2ZDQwLmJpbmRQb3B1cChwb3B1cF9mY2M3NDljNjMxODE0ZDdjYjBjZjhhMGYyODM3MTM1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZWUwYWE1ZWIzY2I0NjAwYWVmZWVjZjVhNDYyMDAyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjg3NzYsMzYuOTMyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmFkZWQ3NGZiNzliNGE2M2I0MjcwYTYyZjBmZGJhNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTMwNThjMjU2NTExNDU5ZDllMTRkODM5OGZmNTJmODAgPSAkKCc8ZGl2IGlkPSJodG1sXzEzMDU4YzI1NjUxMTQ1OWQ5ZTE0ZDgzOThmZjUyZjgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BV0lZQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFkZWQ3NGZiNzliNGE2M2I0MjcwYTYyZjBmZGJhNGEuc2V0Q29udGVudChodG1sXzEzMDU4YzI1NjUxMTQ1OWQ5ZTE0ZDgzOThmZjUyZjgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWVlMGFhNWViM2NiNDYwMGFlZmVlY2Y1YTQ2MjAwMmMuYmluZFBvcHVwKHBvcHVwX2JhZGVkNzRmYjc5YjRhNjNiNDI3MGE2MmYwZmRiYTRhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE4NTkwMTU2MTM5ZjQzZWRiYTA0NGMyNzVkZTFhMTlhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC41NzU1NDgyMjYxNiwyNi40NTE0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGVmYmY4NDg4OTA0MGU5YTM1NjdlZGIzYzRmYmMyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wM2RlZjJmMWYxNzU0N2UyODNiMzA4MDYxOTZiMzBlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDNkZWYyZjFmMTc1NDdlMjgzYjMwODA2MTk2YjMwZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFaQU5ERTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhlZmJmODQ4ODkwNDBlOWEzNTY3ZWRiM2M0ZmJjMjguc2V0Q29udGVudChodG1sXzAzZGVmMmYxZjE3NTQ3ZTI4M2IzMDgwNjE5NmIzMGVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTg1OTAxNTYxMzlmNDNlZGJhMDQ0YzI3NWRlMWExOWEuYmluZFBvcHVwKHBvcHVwX2Y4ZWZiZjg0ODg5MDQwZTlhMzU2N2VkYjNjNGZiYzI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzViNGRlM2U5NTU1YzQzZGU4MzExYzNkY2MyMTRkMGJiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuNjk1MSw4Ljc0NDUwNDEyNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhNDUzZTU4MDcyYjRjZGVhNzkwYzU2NzkyYjdkNjkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2ZTI5ZGUzM2JiZjQyZTQ5OGY1ZTExYTBmYThhOWY2ID0gJCgnPGRpdiBpZD0iaHRtbF8yNmUyOWRlMzNiYmY0MmU0OThmNWUxMWEwZmE4YTlmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVpKRVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhNDUzZTU4MDcyYjRjZGVhNzkwYzU2NzkyYjdkNjkxLnNldENvbnRlbnQoaHRtbF8yNmUyOWRlMzNiYmY0MmU0OThmNWUxMWEwZmE4YTlmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzViNGRlM2U5NTU1YzQzZGU4MzExYzNkY2MyMTRkMGJiLmJpbmRQb3B1cChwb3B1cF9iYTQ1M2U1ODA3MmI0Y2RlYTc5MGM1Njc5MmI3ZDY5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNTgxYTk1YWFiMmQ0MzE3ODE0NmVmZjIwNTllNzkzYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuMzExMDQyMDc0NCwyOS4zNjU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNWRiYzE5OTM0OWM0ODUyYTMzMjNkYzk2NmRhM2M5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZWQ4NDQyMjk0ZWE0OGYwOTRmNzZhMjJhNTM1ZTEzNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNGVkODQ0MjI5NGVhNDhmMDk0Zjc2YTIyYTUzNWUxMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBQlVLVVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1ZGJjMTk5MzQ5YzQ4NTJhMzMyM2RjOTY2ZGEzYzk4LnNldENvbnRlbnQoaHRtbF80ZWQ4NDQyMjk0ZWE0OGYwOTRmNzZhMjJhNTM1ZTEzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM1ODFhOTVhYWIyZDQzMTc4MTQ2ZWZmMjA1OWU3OTNhLmJpbmRQb3B1cChwb3B1cF9mNWRiYzE5OTM0OWM0ODUyYTMzMjNkYzk2NmRhM2M5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MjQ1ZjU3Nzk5Y2E0MmUxODE3YzJmZmQwNjMzOGU4MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNDkwNjU4MjQ2NjIsMjUuMzQwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGNjYTYwMTI5ODViNDA3ODg3Y2ZhMDlhMmQwMjI4ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGI2MjY5YmI1NzQzNDQ1NGI1NzQ5NWMwYzUzNzUyY2EgPSAkKCc8ZGl2IGlkPSJodG1sX2RiNjI2OWJiNTc0MzQ0NTRiNTc0OTVjMGM1Mzc1MmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUJXQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGNjYTYwMTI5ODViNDA3ODg3Y2ZhMDlhMmQwMjI4ZWUuc2V0Q29udGVudChodG1sX2RiNjI2OWJiNTc0MzQ0NTRiNTc0OTVjMGM1Mzc1MmNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjI0NWY1Nzc5OWNhNDJlMTgxN2MyZmZkMDYzMzhlODAuYmluZFBvcHVwKHBvcHVwXzRjY2E2MDEyOTg1YjQwNzg4N2NmYTA5YTJkMDIyOGVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg1MzRkZmY4NmZmNzQyOTU5NmNiNjk3ZDViOTIyZjFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS40NzAxMzkxNzU1MywxMS45OTE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTAxZmQ5OWVhNDQ0N2I1YjIyZGNkMzhjOGEyYzQ3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lODBiZjRjYzg2MTU0OTdmOTljZWMwMTMxY2MzOTMyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTgwYmY0Y2M4NjE1NDk3Zjk5Y2VjMDEzMWNjMzkzMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBQ0hBTUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlMDFmZDk5ZWE0NDQ3YjViMjJkY2QzOGM4YTJjNDdlLnNldENvbnRlbnQoaHRtbF9lODBiZjRjYzg2MTU0OTdmOTljZWMwMTMxY2MzOTMyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg1MzRkZmY4NmZmNzQyOTU5NmNiNjk3ZDViOTIyZjFhLmJpbmRQb3B1cChwb3B1cF80ZTAxZmQ5OWVhNDQ0N2I1YjIyZGNkMzhjOGEyYzQ3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYWE1ZmM3NTUyMGU0NGZlOGNkMWJlNzc5NjJiMjlmMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjM4MjMsLTE0LjI1MjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlNTk1OTcxN2UyNjQ1OWRiMGVlNzI5ZWNhNTRiZDExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1NThiM2FhMTcxMjQwNGI4ZDkxN2M3Y2ZiZWM4ZjhlID0gJCgnPGRpdiBpZD0iaHRtbF9lNTU4YjNhYTE3MTI0MDRiOGQ5MTdjN2NmYmVjOGY4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFHQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGU1OTU5NzE3ZTI2NDU5ZGIwZWU3MjllY2E1NGJkMTEuc2V0Q29udGVudChodG1sX2U1NThiM2FhMTcxMjQwNGI4ZDkxN2M3Y2ZiZWM4ZjhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGFhNWZjNzU1MjBlNDRmZThjZDFiZTc3OTYyYjI5ZjEuYmluZFBvcHVwKHBvcHVwX2RlNTk1OTcxN2UyNjQ1OWRiMGVlNzI5ZWNhNTRiZDExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUwNjE1ZDBjZTI4OTQ1ZmFiMGQwOGE5YTNlYjUzOGY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMzAyMSwxNi40MDUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NzlhN2VmMTJhMjA0MmNmOGEyZmQ3ZjU3OTY4MGUxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmZkNTZiM2Y3MTA0OTRlODI1ZjU4ZDI1MWY2MjhjNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDZmZDU2YjNmNzEwNDk0ZTgyNWY1OGQyNTFmNjI4YzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBR0lSTUk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3OWE3ZWYxMmEyMDQyY2Y4YTJmZDdmNTc5NjgwZTE0LnNldENvbnRlbnQoaHRtbF80NmZkNTZiM2Y3MTA0OTRlODI1ZjU4ZDI1MWY2MjhjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwNjE1ZDBjZTI4OTQ1ZmFiMGQwOGE5YTNlYjUzOGY1LmJpbmRQb3B1cChwb3B1cF82NzlhN2VmMTJhMjA0MmNmOGEyZmQ3ZjU3OTY4MGUxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mM2JmNjRiMTM2ZDg0MzYyODQxNTVlZTQxMjc4MjM4YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzI3LjA5ODYsMjguMjI5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGEwOGQzYmI1MmNiNGE4OGE5NTgzMThiZTg1MDg0ZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzRlMDEzYzk3N2ZlNGJmZjlmMWMxOThlNjY3ZjFjM2IgPSAkKCc8ZGl2IGlkPSJodG1sXzM0ZTAxM2M5NzdmZTRiZmY5ZjFjMTk4ZTY2N2YxYzNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUhBUklZQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGEwOGQzYmI1MmNiNGE4OGE5NTgzMThiZTg1MDg0ZWMuc2V0Q29udGVudChodG1sXzM0ZTAxM2M5NzdmZTRiZmY5ZjFjMTk4ZTY2N2YxYzNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjNiZjY0YjEzNmQ4NDM2Mjg0MTU1ZWU0MTI3ODIzOGMuYmluZFBvcHVwKHBvcHVwXzBhMDhkM2JiNTJjYjRhODhhOTU4MzE4YmU4NTA4NGVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2MjU0YWQ2OWI0YzRkZWQ4Mjg2NzhjZTk4MTAyNGM5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMTM5NzQsNDEuNzUyMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjRlNDc4MGI5MjAwNDFkYTkxNDhlOWM5ODAxOWJhZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDRmNzVmM2ZmOTFmNDFjMWI2YWI1MWQ2ZTI1ODI3ZWMgPSAkKCc8ZGl2IGlkPSJodG1sXzA0Zjc1ZjNmZjkxZjQxYzFiNmFiNTFkNmUyNTgyN2VjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUpVTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjRlNDc4MGI5MjAwNDFkYTkxNDhlOWM5ODAxOWJhZGIuc2V0Q29udGVudChodG1sXzA0Zjc1ZjNmZjkxZjQxYzFiNmFiNTFkNmUyNTgyN2VjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTYyNTRhZDY5YjRjNGRlZDgyODY3OGNlOTgxMDI0YzkuYmluZFBvcHVwKHBvcHVwX2Y0ZTQ3ODBiOTIwMDQxZGE5MTQ4ZTljOTgwMTliYWRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VhM2RhNjdkZWIzODQzMmFiYzNlMzkyMGFmNWZmMWE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMzgyMiw1LjQ1MzM4NzcxNTg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTZhMzJlZjkxODk0MGNhODNjODJiMTBjYzk3OTY4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzI0OWZlMjA4ZDE0NDY3YmFjYjFhOTFmNGU5NTIxZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjcyNDlmZTIwOGQxNDQ2N2JhY2IxYTkxZjRlOTUyMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBS0FLQVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTZhMzJlZjkxODk0MGNhODNjODJiMTBjYzk3OTY4YS5zZXRDb250ZW50KGh0bWxfNjcyNDlmZTIwOGQxNDQ2N2JhY2IxYTkxZjRlOTUyMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lYTNkYTY3ZGViMzg0MzJhYmMzZTM5MjBhZjVmZjFhNy5iaW5kUG9wdXAocG9wdXBfNjU2YTMyZWY5MTg5NDBjYTgzYzgyYjEwY2M5Nzk2OGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDQ1NzkxMTFmZjM2NDRjNjg5N2FkNGUxMDc5NWY4YjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjgxNzU5MDEwNzI0LDM2LjQ5MjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlYmNjNTgzYzY5YzQ1YmJhYjYwMzZiODRkNDZkNGQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NmVjZmIyN2Y3MDQ2M2E5OWMwMTQ1Y2FiYzQ0MjNjID0gJCgnPGRpdiBpZD0iaHRtbF8yNjZlY2ZiMjdmNzA0NjNhOTljMDE0NWNhYmM0NDIzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFLTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmViY2M1ODNjNjljNDViYmFiNjAzNmI4NGQ0NmQ0ZDkuc2V0Q29udGVudChodG1sXzI2NmVjZmIyN2Y3MDQ2M2E5OWMwMTQ1Y2FiYzQ0MjNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDQ1NzkxMTFmZjM2NDRjNjg5N2FkNGUxMDc5NWY4YjYuYmluZFBvcHVwKHBvcHVwXzJlYmNjNTgzYzY5YzQ1YmJhYjYwMzZiODRkNDZkNGQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiOTliMjA5MGUwMjRhMzVhOGI3NjZmODYwM2U0MGViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yNzg5OTA4NDY4MSwtNi45NDQzMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzU5MTFkZDI4OGNjNGZlYmFhZTA0ODRjNzVhNGUxN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzMxNDk3NzEwZGIwNDVhMWIwMmE4NjdlNWE3NGY5NGUgPSAkKCc8ZGl2IGlkPSJodG1sX2MzMTQ5NzcxMGRiMDQ1YTFiMDJhODY3ZTVhNzRmOTRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUtXRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzU5MTFkZDI4OGNjNGZlYmFhZTA0ODRjNzVhNGUxN2Iuc2V0Q29udGVudChodG1sX2MzMTQ5NzcxMGRiMDQ1YTFiMDJhODY3ZTVhNzRmOTRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWI5OWIyMDkwZTAyNGEzNWE4Yjc2NmY4NjAzZTQwZWIuYmluZFBvcHVwKHBvcHVwXzM1OTExZGQyODhjYzRmZWJhYWUwNDg0Yzc1YTRlMTdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiMDE0MTU3NWE3ODQ3MzI4MzExMGRjOWJmNWQzYmQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMzI0OSwtMTUuNDUxNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjc3OGU3NTZiMWU0NGI0OThjM2NmNDQ0NGQwNWZjZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmU3OTNlOWMxOWM3NDZlZmJmOTRjMzNiZmEzODdhOTggPSAkKCc8ZGl2IGlkPSJodG1sXzJlNzkzZTljMTljNzQ2ZWZiZjk0YzMzYmZhMzg3YTk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUxBTlRFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzc4ZTc1NmIxZTQ0YjQ5OGMzY2Y0NDQ0ZDA1ZmNmOS5zZXRDb250ZW50KGh0bWxfMmU3OTNlOWMxOWM3NDZlZmJmOTRjMzNiZmEzODdhOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYjAxNDE1NzVhNzg0NzMyODMxMTBkYzliZjVkM2JkNy5iaW5kUG9wdXAocG9wdXBfZjc3OGU3NTZiMWU0NGI0OThjM2NmNDQ0NGQwNWZjZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzQ5Njg1NmE5YjFjNDZkOThkYmU3OWI2ZmJjMDdkMzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy4wNzYsLTYuNjYyNjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjYzJhZmQ1YzYxODQ5MGU4MjYzMzM3NzUwMTExN2IzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyNjg3N2FlODE5MDRhOGI5YmM2YjhlYTIwODNjNjdiID0gJCgnPGRpdiBpZD0iaHRtbF9kMjY4NzdhZTgxOTA0YThiOWJjNmI4ZWEyMDgzYzY3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFNQkFSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWNjMmFmZDVjNjE4NDkwZTgyNjMzMzc3NTAxMTE3YjMuc2V0Q29udGVudChodG1sX2QyNjg3N2FlODE5MDRhOGI5YmM2YjhlYTIwODNjNjdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzQ5Njg1NmE5YjFjNDZkOThkYmU3OWI2ZmJjMDdkMzIuYmluZFBvcHVwKHBvcHVwX2VjYzJhZmQ1YzYxODQ5MGU4MjYzMzM3NzUwMTExN2IzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNmMWYxNGFhMDM5NjQ0MDU4NDg3ODljNGEzZTAxYzlmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yNjE1NDYxMzgyOCwxMC40NTM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODE2OTMyYTgyZjQ0YzdmOTFkMGIzZDM3ODlkZTA1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZWI0OWE5MGI2Zjg0ZDBlOTA0NzNlOTc5MDVlYWMzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWViNDlhOTBiNmY4NGQwZTkwNDczZTk3OTA1ZWFjMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBTUlMRUtFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODE2OTMyYTgyZjQ0YzdmOTFkMGIzZDM3ODlkZTA1YS5zZXRDb250ZW50KGh0bWxfMWViNDlhOTBiNmY4NGQwZTkwNDczZTk3OTA1ZWFjMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZjFmMTRhYTAzOTY0NDA1ODQ4Nzg5YzRhM2UwMWM5Zi5iaW5kUG9wdXAocG9wdXBfNzgxNjkzMmE4MmY0NGM3ZjkxZDBiM2QzNzg5ZGUwNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmYxMzAwYTdhMGY0NGQ2ODllNTc5ZDZmYTk0ZDJkYTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjcxNzQ0ODkzOTg3LDIyLjE1NTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2NWM0Yzg1Nzc0NTQ0OTRhNzZiZjQxYWVjNDE0NWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjZWZjNmFiNTc1MTQ3NDc4MzMzYTc2MjUxZjNiODZlID0gJCgnPGRpdiBpZD0iaHRtbF8zY2VmYzZhYjU3NTE0NzQ3ODMzM2E3NjI1MWYzYjg2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFOREE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2NWM0Yzg1Nzc0NTQ0OTRhNzZiZjQxYWVjNDE0NWI2LnNldENvbnRlbnQoaHRtbF8zY2VmYzZhYjU3NTE0NzQ3ODMzM2E3NjI1MWYzYjg2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJmMTMwMGE3YTBmNDRkNjg5ZTU3OWQ2ZmE5NGQyZGExLmJpbmRQb3B1cChwb3B1cF9jNjVjNGM4NTc3NDU0NDk0YTc2YmY0MWFlYzQxNDViNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMTUwMmU3YzBkMTg0Mjg5YTg4YzZjOWJiNDMwZGQ2MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNTg3NTA1MTY5MjcsMTUuNTUxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2ZjODFiN2VjNmJjNDE5NzllMGI5OGFkN2Q1NzI4ZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWZhYjI2YTViZDc2NDZiZWE0MmI5NmRjNjVlMjU1ZmUgPSAkKCc8ZGl2IGlkPSJodG1sX2FmYWIyNmE1YmQ3NjQ2YmVhNDJiOTZkYzY1ZTI1NWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQU5HQU5EVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2ZjODFiN2VjNmJjNDE5NzllMGI5OGFkN2Q1NzI4ZGQuc2V0Q29udGVudChodG1sX2FmYWIyNmE1YmQ3NjQ2YmVhNDJiOTZkYzY1ZTI1NWZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDE1MDJlN2MwZDE4NDI4OWE4OGM2YzliYjQzMGRkNjMuYmluZFBvcHVwKHBvcHVwX2NmYzgxYjdlYzZiYzQxOTc5ZTBiOThhZDdkNTcyOGRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlhZGUyNjliODE3NDRiMDE4ZWVhM2Y1YzE0ZWRlOGMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4zMjAzNTc2NjI0LDI4LjYzMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5ZjEzODcyMGNmNjQ1Y2Q4YTFhNjFjYWM3ODJkZjU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2OTVlY2M2MzlhYjQxMjJiZDQ2OWZmM2E0NTE1YTQyID0gJCgnPGRpdiBpZD0iaHRtbF9mNjk1ZWNjNjM5YWI0MTIyYmQ0NjlmZjNhNDUxNWE0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFOR0JBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OWYxMzg3MjBjZjY0NWNkOGExYTYxY2FjNzgyZGY1NS5zZXRDb250ZW50KGh0bWxfZjY5NWVjYzYzOWFiNDEyMmJkNDY5ZmYzYTQ1MTVhNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YWRlMjY5YjgxNzQ0YjAxOGVlYTNmNWMxNGVkZThjMS5iaW5kUG9wdXAocG9wdXBfOTlmMTM4NzIwY2Y2NDVjZDhhMWE2MWNhYzc4MmRmNTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGY2NjI5OWZkYjNmNDYwNGFkZWVlMjY1YTg0N2QyMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC4zMjI5NiwxNi43MDQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NGRjMmY4YmNjMWE0MTg4OGI0NmQ1OWVlOWFkNzEzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjUwNTIzZDc2NDE0ZDkyYmZmNmI3Mjg4NDk2YWQxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY1MDUyM2Q3NjQxNGQ5MmJmZjZiNzI4ODQ5NmFkMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBTkdJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NGRjMmY4YmNjMWE0MTg4OGI0NmQ1OWVlOWFkNzEzYy5zZXRDb250ZW50KGh0bWxfNWY1MDUyM2Q3NjQxNGQ5MmJmZjZiNzI4ODQ5NmFkMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZjY2Mjk5ZmRiM2Y0NjA0YWRlZWUyNjVhODQ3ZDIwYS5iaW5kUG9wdXAocG9wdXBfNDRkYzJmOGJjYzFhNDE4ODhiNDZkNTllZTlhZDcxM2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGIyM2E4YjY5YmI5NGE3NWE3ZTZiNTVlNGJhMGUzNmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi40NTY2LC0xNi4wNzYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTRmZmEwMjkwZTA0N2I0YWJhODc3NWRjMTNkN2QzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTEwOTRmMWRlNmU0YTM3YjllODUzYmUxYjcxNjgwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWExMDk0ZjFkZTZlNGEzN2I5ZTg1M2JlMWI3MTY4MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBTllVTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzE0ZmZhMDI5MGUwNDdiNGFiYTg3NzVkYzEzZDdkMzUuc2V0Q29udGVudChodG1sX2FhMTA5NGYxZGU2ZTRhMzdiOWU4NTNiZTFiNzE2ODAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGIyM2E4YjY5YmI5NGE3NWE3ZTZiNTVlNGJhMGUzNmQuYmluZFBvcHVwKHBvcHVwXzcxNGZmYTAyOTBlMDQ3YjRhYmE4Nzc1ZGMxM2Q3ZDM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdjZDMyNWU1NzcwNzQyOTRhNDZiMTQ3MGEyZWFkODhkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4zODk4NTAzODQyMywyMC43NThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4NGRmMWQ2ZmM0NDQzNjM4YmM4ZDNjOTZlYzE3MjM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3MWRmZWFhZmZhMDQxM2Y4ZWQ5NDBlMjRhMzNiZGQxID0gJCgnPGRpdiBpZD0iaHRtbF9iNzFkZmVhYWZmYTA0MTNmOGVkOTQwZTI0YTMzYmRkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFOWkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4NGRmMWQ2ZmM0NDQzNjM4YmM4ZDNjOTZlYzE3MjM2LnNldENvbnRlbnQoaHRtbF9iNzFkZmVhYWZmYTA0MTNmOGVkOTQwZTI0YTMzYmRkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdjZDMyNWU1NzcwNzQyOTRhNDZiMTQ3MGEyZWFkODhkLmJpbmRQb3B1cChwb3B1cF9kODRkZjFkNmZjNDQ0MzYzOGJjOGQzYzk2ZWMxNzIzNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMmJkMmE4MGFkZWU0ZWU0YTY0NDM5ZmY0MDk5NTBmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuOTQ0MDU4MTY1OTcsMjAuMjIwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDMwOTI0Zjc2YjY1NDY0NmI5MmNiZmMxM2QwMGYyMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzRjODI2MmY2YTY5NDEzNmI0YTUxZmJlMDBlNzFkZGEgPSAkKCc8ZGl2IGlkPSJodG1sX2M0YzgyNjJmNmE2OTQxMzZiNGE1MWZiZTAwZTcxZGRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQU5aSVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzA5MjRmNzZiNjU0NjQ2YjkyY2JmYzEzZDAwZjIzNi5zZXRDb250ZW50KGh0bWxfYzRjODI2MmY2YTY5NDEzNmI0YTUxZmJlMDBlNzFkZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMmJkMmE4MGFkZWU0ZWU0YTY0NDM5ZmY0MDk5NTBmNS5iaW5kUG9wdXAocG9wdXBfZDMwOTI0Zjc2YjY1NDY0NmI5MmNiZmMxM2QwMGYyMzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzAzOGQyNTcyNWNjNGM3Yzg5MjMxNzJmYjc0M2QzZTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjMuMTYzOSw0NS41MzE1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYWE1YjBhN2NhYWE0NmFiYjNkMDBlZTA3NTM4YzM2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Njk3YzVkYTM3NTE0NWNkOGU0ZTJmMmE5YjYwNmZiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTY5N2M1ZGEzNzUxNDVjZDhlNGUyZjJhOWI2MDZmYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhYTViMGE3Y2FhYTQ2YWJiM2QwMGVlMDc1MzhjMzZlLnNldENvbnRlbnQoaHRtbF81Njk3YzVkYTM3NTE0NWNkOGU0ZTJmMmE5YjYwNmZiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcwMzhkMjU3MjVjYzRjN2M4OTIzMTcyZmI3NDNkM2UxLmJpbmRQb3B1cChwb3B1cF8yYWE1YjBhN2NhYWE0NmFiYjNkMDBlZTA3NTM4YzM2ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMzNiOWUwZTgxNWI0MWQ2YTRiMjY4M2VjOTlhNmEyOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIxLjAzNywzMS4zMDgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOWY2M2VlOWE0ZTA0OTVhODk5OGZjNjA5NmNhYTI3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYmQ3NjNmMjMxNGM0N2NhYTZkY2NlYmEzMGMxNmE0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZWJkNzYzZjIzMTRjNDdjYWE2ZGNjZWJhMzBjMTZhNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBUkFCUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5ZjYzZWU5YTRlMDQ5NWE4OTk4ZmM2MDk2Y2FhMjc1LnNldENvbnRlbnQoaHRtbF9lYmQ3NjNmMjMxNGM0N2NhYTZkY2NlYmEzMGMxNmE0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAzM2I5ZTBlODE1YjQxZDZhNGIyNjgzZWM5OWE2YTI4LmJpbmRQb3B1cChwb3B1cF9lOWY2M2VlOWE0ZTA0OTVhODk5OGZjNjA5NmNhYTI3NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNjk0YzM5YjZhNGU0MzIyOTgxMzU2YTAwNmYwNjI4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuMTc0ODEyNDI3NDIsNDEuMDM2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjZkYjA1NTJjZDM2NGQzYTgyYTM2OWI0YTM2ODA4NDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTFmMmI4YmE4Y2I0NDQ4MGE3ZDVlNWZjNTBjMzExOTUgPSAkKCc8ZGl2IGlkPSJodG1sXzUxZjJiOGJhOGNiNDQ0ODBhN2Q1ZTVmYzUwYzMxMTk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJBUkVUVEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2ZGIwNTUyY2QzNjRkM2E4MmEzNjliNGEzNjgwODQxLnNldENvbnRlbnQoaHRtbF81MWYyYjhiYThjYjQ0NDgwYTdkNWU1ZmM1MGMzMTE5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U2OTRjMzliNmE0ZTQzMjI5ODEzNTZhMDA2ZjA2Mjg3LmJpbmRQb3B1cChwb3B1cF9iNmRiMDU1MmNkMzY0ZDNhODJhMzY5YjRhMzY4MDg0MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMTVlMGI5NWFlN2Y0ZDE1YWFiMTYyZmU0YTZmYWI2MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjYzNTQsMzcuNDA5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE3ZDNlOGRkOTAyNDI4ZjhhYWYyMjRhZmU1MDI4ZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI0MmY4MGFlZDA1NDM0MmI0NDg0YjBiMDk1NWFlYmUgPSAkKCc8ZGl2IGlkPSJodG1sXzYyNDJmODBhZWQwNTQzNDJiNDQ4NGIwYjA5NTVhZWJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJFQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODE3ZDNlOGRkOTAyNDI4ZjhhYWYyMjRhZmU1MDI4ZTAuc2V0Q29udGVudChodG1sXzYyNDJmODBhZWQwNTQzNDJiNDQ4NGIwYjA5NTVhZWJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTE1ZTBiOTVhZTdmNGQxNWFhYjE2MmZlNGE2ZmFiNjMuYmluZFBvcHVwKHBvcHVwXzgxN2QzZThkZDkwMjQyOGY4YWFmMjI0YWZlNTAyOGUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YyN2RhMWEyMjA2ZjQ1NzI5OTliNTc3Njc5ZTAyODhmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNDQzMywyLjg5MzYwMjMxMDZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4ZGQzNzJhZjU4MDQxOWNiZjNhYTQwZGQ5ZTM4OWZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1NWEwZDM0ODRiNDRkMGI4NGIwNjZkMWFkZWE5ZDgyID0gJCgnPGRpdiBpZD0iaHRtbF9mNTVhMGQzNDg0YjQ0ZDBiODRiMDY2ZDFhZGVhOWQ4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFSR1U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4ZGQzNzJhZjU4MDQxOWNiZjNhYTQwZGQ5ZTM4OWZjLnNldENvbnRlbnQoaHRtbF9mNTVhMGQzNDg0YjQ0ZDBiODRiMDY2ZDFhZGVhOWQ4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YyN2RhMWEyMjA2ZjQ1NzI5OTliNTc3Njc5ZTAyODhmLmJpbmRQb3B1cChwb3B1cF81OGRkMzcyYWY1ODA0MTljYmYzYWE0MGRkOWUzODlmYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNTAyNDk0NmMyNWI0OWFmOTMyODc5NGQ2Yjg4OGMwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuNzQzNjAzMDk2NjMsMzEuNzI2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjkxMjE5NTFhOWM3NDllYzliMWJlOWUwMjUzMjcxYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzlhMzQ3N2RmNjY5NDkzZWJkMmFlNGE4OWFkMDk5MTAgPSAkKCc8ZGl2IGlkPSJodG1sXzM5YTM0NzdkZjY2OTQ5M2ViZDJhZTRhODlhZDA5OTEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOTEyMTk1MWE5Yzc0OWVjOWIxYmU5ZTAyNTMyNzFjOS5zZXRDb250ZW50KGh0bWxfMzlhMzQ3N2RmNjY5NDkzZWJkMmFlNGE4OWFkMDk5MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNTAyNDk0NmMyNWI0OWFmOTMyODc5NGQ2Yjg4OGMwYy5iaW5kUG9wdXAocG9wdXBfMjkxMjE5NTFhOWM3NDllYzliMWJlOWUwMjUzMjcxYzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDY1M2NjNWFjOGEyNDQzOGEwNWYwYmZmNjAzMDhmMTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjkzMjA1MDMxMDU3LDcuMjI1MzA5MDU2MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1ZjY2YTMyMjcwODQ4YTBiZWY1YWQwMzcwYjJkMzRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhODgyNDA0ODIxMzRkYjY5OGVlMDI2NjFlNTdhNzhhID0gJCgnPGRpdiBpZD0iaHRtbF80YTg4MjQwNDgyMTM0ZGI2OThlZTAyNjYxZTU3YTc4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFTQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDVmNjZhMzIyNzA4NDhhMGJlZjVhZDAzNzBiMmQzNGUuc2V0Q29udGVudChodG1sXzRhODgyNDA0ODIxMzRkYjY5OGVlMDI2NjFlNTdhNzhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDY1M2NjNWFjOGEyNDQzOGEwNWYwYmZmNjAzMDhmMTUuYmluZFBvcHVwKHBvcHVwXzA1ZjY2YTMyMjcwODQ4YTBiZWY1YWQwMzcwYjJkMzRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ViMWYxMDA5NGVjODQ0OGQ4MGJkMTBiNzgxYWNlN2YwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4xOTY1MjU2ODQ1MiwwLjc5MDc3OTI1OTU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Yjk3NDFmZjQ1YTU0ZWI4YWM3MjNmOTcyNmNjMGVhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTA3ZjllZjQ1MjY0MmMzOTRiMzRjZTNjZTNkYzBjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGEwN2Y5ZWY0NTI2NDJjMzk0YjM0Y2UzY2UzZGMwYzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBU0FSSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmI5NzQxZmY0NWE1NGViOGFjNzIzZjk3MjZjYzBlYTAuc2V0Q29udGVudChodG1sX2RhMDdmOWVmNDUyNjQyYzM5NGIzNGNlM2NlM2RjMGMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWIxZjEwMDk0ZWM4NDQ4ZDgwYmQxMGI3ODFhY2U3ZjAuYmluZFBvcHVwKHBvcHVwXzZiOTc0MWZmNDVhNTRlYjhhYzcyM2Y5NzI2Y2MwZWEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JjZjg4MTc2OWY2ODQ2ZGQ4YjllNmFmMzFhMTYzZDA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNDc0MTUsMjguODI0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjJiNDI1ZWU0MTdiNDNkYThlMTIwMDljYWVkNGZjNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI1Y2U0NWQ4MmIyNGNhNzhhNDdmNGY1MmZkNTkwYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzFiNWNlNDVkODJiMjRjYTc4YTQ3ZjRmNTJmZDU5MGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVNISTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjJiNDI1ZWU0MTdiNDNkYThlMTIwMDljYWVkNGZjNWUuc2V0Q29udGVudChodG1sXzFiNWNlNDVkODJiMjRjYTc4YTQ3ZjRmNTJmZDU5MGFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmNmODgxNzY5ZjY4NDZkZDhiOWU2YWYzMWExNjNkMDUuYmluZFBvcHVwKHBvcHVwX2IyYjQyNWVlNDE3YjQzZGE4ZTEyMDA5Y2FlZDRmYzVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NkZTY1ODNlODhkZTQzNGRiNjFlNzExYzQwNjZkNTk2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4xOTE3NzI1OTM4OSwxLjgzNDcxMzkwNDIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDdhOWQ4NmRhMWM0ZjAwYTU3MGZmOTdjMzhlM2QxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjA0ODBhMTEwODA0Njk2YmVkOGQ3ZjdmY2Q5MzhjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2YwNDgwYTExMDgwNDY5NmJlZDhkN2Y3ZmNkOTM4YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBU0lMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ3YTlkODZkYTFjNGYwMGE1NzBmZjk3YzM4ZTNkMWUuc2V0Q29udGVudChodG1sXzNmMDQ4MGExMTA4MDQ2OTZiZWQ4ZDdmN2ZjZDkzOGMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2RlNjU4M2U4OGRlNDM0ZGI2MWU3MTFjNDA2NmQ1OTYuYmluZFBvcHVwKHBvcHVwXzA0N2E5ZDg2ZGExYzRmMDBhNTcwZmY5N2MzOGUzZDFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE3ZGViZDdkNTUzYzRkODJiMThmNWY4OWU2ZjhmMTFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4yMDYxNDQ4NzExMSwtOS42NzM1NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGFlYmMzOTQ5Y2ZiNDQ1ZDhiNDRmZTgyZTMwZGMzOTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA4NjliNjQ3NjYzNGE4NWJjYzJmOThiMzYyYzY0ZmUgPSAkKCc8ZGl2IGlkPSJodG1sX2QwODY5YjY0NzY2MzRhODViY2MyZjk4YjM2MmM2NGZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVNTQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFlYmMzOTQ5Y2ZiNDQ1ZDhiNDRmZTgyZTMwZGMzOTAuc2V0Q29udGVudChodG1sX2QwODY5YjY0NzY2MzRhODViY2MyZjk4YjM2MmM2NGZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTdkZWJkN2Q1NTNjNGQ4MmIxOGY1Zjg5ZTZmOGYxMWEuYmluZFBvcHVwKHBvcHVwX2RhZWJjMzk0OWNmYjQ0NWQ4YjQ0ZmU4MmUzMGRjMzkwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzOGFkMDE3ZjRmYjQwY2NiNTkyZWI5MGY2NzQzMWYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS43MzQ2Mzc3NDEwOSwxMy4wMzQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODM4Y2ZiZWIyZjI0MmJhYjA2MTJkZTliNGM1MjZiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjU1ZDFhMGNhMzg0OTJhODZhNWFlYWQ4MWM5MGQ5YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTI1NWQxYTBjYTM4NDkyYTg2YTVhZWFkODFjOTBkOWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBVEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4MzhjZmJlYjJmMjQyYmFiMDYxMmRlOWI0YzUyNmI5LnNldENvbnRlbnQoaHRtbF81MjU1ZDFhMGNhMzg0OTJhODZhNWFlYWQ4MWM5MGQ5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAzOGFkMDE3ZjRmYjQwY2NiNTkyZWI5MGY2NzQzMWYzLmJpbmRQb3B1cChwb3B1cF9iODM4Y2ZiZWIyZjI0MmJhYjA2MTJkZTliNGM1MjZiOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZGQ0MDYxOTRiOTY0ZmE3YWI5ODhmNTAxYmI5NTU4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjAxNjQsMzMuODUwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjMyZTU5ZDkzMTg2NDIwZDlmNTZhMWRmODQyMGI1YjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM0ZWUwMzIwYjVhNGNlMWE4ZjBhNWY2ZjQxODZlOGMgPSAkKCc8ZGl2IGlkPSJodG1sXzYzNGVlMDMyMGI1YTRjZTFhOGYwYTVmNmY0MTg2ZThjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVRBSElOPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzJlNTlkOTMxODY0MjBkOWY1NmExZGY4NDIwYjViMC5zZXRDb250ZW50KGh0bWxfNjM0ZWUwMzIwYjVhNGNlMWE4ZjBhNWY2ZjQxODZlOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZGQ0MDYxOTRiOTY0ZmE3YWI5ODhmNTAxYmI5NTU4MS5iaW5kUG9wdXAocG9wdXBfMjMyZTU5ZDkzMTg2NDIwZDlmNTZhMWRmODQyMGI1YjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjIzMTU3NzhkN2UzNGI5ZTgwODg3YmNiYTgxM2E2NDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszLjM3NzcxNDM5ODQ3LDIzLjU1MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxNDg4ZGI2N2NlYjRiYTdiZDBiODFlYmMzOWE5YzNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxZTgxYTEzNGY1MjRjZGRiM2ExMTVkM2M0YjU3MTU3ID0gJCgnPGRpdiBpZD0iaHRtbF9iMWU4MWExMzRmNTI0Y2RkYjNhMTE1ZDNjNGI1NzE1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFUSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE0ODhkYjY3Y2ViNGJhN2JkMGI4MWViYzM5YTljM2Uuc2V0Q29udGVudChodG1sX2IxZTgxYTEzNGY1MjRjZGRiM2ExMTVkM2M0YjU3MTU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjIzMTU3NzhkN2UzNGI5ZTgwODg3YmNiYTgxM2E2NDQuYmluZFBvcHVwKHBvcHVwX2QxNDg4ZGI2N2NlYjRiYTdiZDBiODFlYmMzOWE5YzNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q2OWJiMDEyYTA2MTRmMWRhN2M5Yzg4ODFiNWZhMDQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS44ODY1MjUxNTY3OCwxMC41NTcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmFlOTYyM2M1YWM0NWIwODNhYTliNjE3OGQ0ZjM1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTQ2NzJjNDk5ZDU0ZjU0OTg4YTdkMTg5MzExNjkxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWE0NjcyYzQ5OWQ1NGY1NDk4OGE3ZDE4OTMxMTY5MTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBVUNISTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JhZTk2MjNjNWFjNDViMDgzYWE5YjYxNzhkNGYzNTguc2V0Q29udGVudChodG1sX2FhNDY3MmM0OTlkNTRmNTQ5ODhhN2QxODkzMTE2OTExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDY5YmIwMTJhMDYxNGYxZGE3YzljODg4MWI1ZmEwNDAuYmluZFBvcHVwKHBvcHVwX2NiYWU5NjIzYzVhYzQ1YjA4M2FhOWI2MTc4ZDRmMzU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NhNmU0Mjg5NDNmYzQzYTM4OTg5YzBhZmMzODUyYTg3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4yODUyNDg5MTc3OCwtNC43OTA4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU1NTZmNGM0NGYwNDI4ZDk2ZGU5YTdkZjIwMjIxODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzg5YWI5M2RmMzRkNGM1MWE3ODdkNmIwNDM0ZGIyMjQgPSAkKCc8ZGl2IGlkPSJodG1sXzc4OWFiOTNkZjM0ZDRjNTFhNzg3ZDZiMDQzNGRiMjI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVVMRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU1NTZmNGM0NGYwNDI4ZDk2ZGU5YTdkZjIwMjIxODkuc2V0Q29udGVudChodG1sXzc4OWFiOTNkZjM0ZDRjNTFhNzg3ZDZiMDQzNGRiMjI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2E2ZTQyODk0M2ZjNDNhMzg5ODljMGFmYzM4NTJhODcuYmluZFBvcHVwKHBvcHVwX2ZlNTU2ZjRjNDRmMDQyOGQ5NmRlOWE3ZGYyMDIyMTg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkxMmRmMGU2Njk1YzQzNDk4YzY0MTViYjdjY2Q4NjljID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS41ODMwMTA3NTg4NiwxNS43ODI2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ODViY2FmMTFkODY0MWZlOGM4NjRjYTEwMDFmMjg5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjIzOTVlMzJhMjE0ZmYzOGViOGU5NmVlMzY4MDU1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGYyMzk1ZTMyYTIxNGZmMzhlYjhlOTZlZTM2ODA1NWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBWUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4NWJjYWYxMWQ4NjQxZmU4Yzg2NGNhMTAwMWYyODk4LnNldENvbnRlbnQoaHRtbF9kZjIzOTVlMzJhMjE0ZmYzOGViOGU5NmVlMzY4MDU1YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkxMmRmMGU2Njk1YzQzNDk4YzY0MTViYjdjY2Q4NjljLmJpbmRQb3B1cChwb3B1cF84ODViY2FmMTFkODY0MWZlOGM4NjRjYTEwMDFmMjg5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YTFhMmRiOWM4ZDQ0Y2I2YTA0YmYyZDRlNzQ5NzE3YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjc5NjksMTAuNzQ1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc2NTQ0MmYwZDc2NDEwZTg0MDMzZDMwMGZiNmRiNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFhZDU1ZGViNDU3NDFmZTg0ZDU3ZThmZDhmNTljN2IgPSAkKCc8ZGl2IGlkPSJodG1sXzZhYWQ1NWRlYjQ1NzQxZmU4NGQ1N2U4ZmQ4ZjU5YzdiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRURFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzY1NDQyZjBkNzY0MTBlODQwMzNkMzAwZmI2ZGI2NC5zZXRDb250ZW50KGh0bWxfNmFhZDU1ZGViNDU3NDFmZTg0ZDU3ZThmZDhmNTljN2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTFhMmRiOWM4ZDQ0Y2I2YTA0YmYyZDRlNzQ5NzE3Yy5iaW5kUG9wdXAocG9wdXBfODc2NTQ0MmYwZDc2NDEwZTg0MDMzZDMwMGZiNmRiNjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODY1NWNiZWM1ODBjNGFhZTgwZTA4MGUyMDM1YjBiMTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy4wNDA0LDMwLjM3NDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzM2QyYmE4ZGE0MzQwNGU5NGM0M2U0YWExYjdhNjg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNmQzMTcyOTc1NDRkOWJhOTM0ZjFiYmRjNDU1YmUzID0gJCgnPGRpdiBpZD0iaHRtbF85MzZkMzE3Mjk3NTQ0ZDliYTkzNGYxYmJkYzQ1NWJlMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVERVJJQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTMzZDJiYThkYTQzNDA0ZTk0YzQzZTRhYTFiN2E2ODUuc2V0Q29udGVudChodG1sXzkzNmQzMTcyOTc1NDRkOWJhOTM0ZjFiYmRjNDU1YmUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODY1NWNiZWM1ODBjNGFhZTgwZTA4MGUyMDM1YjBiMTUuYmluZFBvcHVwKHBvcHVwX2UzM2QyYmE4ZGE0MzQwNGU5NGM0M2U0YWExYjdhNjg1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VhMjcyYTFiNGQyNTQ2N2FhM2ZkNzNhNmE2ZmY5ZTgwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEwLjY3MDUsMzEuMzM2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTkxYTc1ZmU2ZjM4NDUyZmI4Y2JlNDNlN2RjMTA3ZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThlMTc4ZmU1Yjc4NDQxOGFjMGFjODUwOGUxYjQ3ZjQgPSAkKCc8ZGl2IGlkPSJodG1sX2E4ZTE3OGZlNWI3ODQ0MThhYzBhYzg1MDhlMWI0N2Y0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRU1CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTkxYTc1ZmU2ZjM4NDUyZmI4Y2JlNDNlN2RjMTA3ZTEuc2V0Q29udGVudChodG1sX2E4ZTE3OGZlNWI3ODQ0MThhYzBhYzg1MDhlMWI0N2Y0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWEyNzJhMWI0ZDI1NDY3YWEzZmQ3M2E2YTZmZjllODAuYmluZFBvcHVwKHBvcHVwXzU5MWE3NWZlNmYzODQ1MmZiOGNiZTQzZTdkYzEwN2UxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RhMWExMTJjYjYwYzQyMjA4Y2QwNDA4NTg1NTFkYjJiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuMTg3OTgsMzUuMzEwOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmUwOTcxYzZmYzljNDI1Mzg5ZDViYjYwNDk1NGI4M2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTM1ODNjZTFkZTAzNDNmNjgyYzQwNjYzZTBhZWM0OTUgPSAkKCc8ZGl2IGlkPSJodG1sXzUzNTgzY2UxZGUwMzQzZjY4MmM0MDY2M2UwYWVjNDk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRU5BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTA5NzFjNmZjOWM0MjUzODlkNWJiNjA0OTU0YjgzYS5zZXRDb250ZW50KGh0bWxfNTM1ODNjZTFkZTAzNDNmNjgyYzQwNjYzZTBhZWM0OTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYTFhMTEyY2I2MGM0MjIwOGNkMDQwODU4NTUxZGIyYi5iaW5kUG9wdXAocG9wdXBfNmUwOTcxYzZmYzljNDI1Mzg5ZDViYjYwNDk1NGI4M2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmZjYTNlYzEzMTJjNDgxYjk0ODY0OTQ2YWI4MzNlZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4wNzAxOCwzMC41NTg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNWI5NjM3ODkwN2Q0ZWIyYjY4Y2I1MTZkNDRmNzRlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDU5YmJiNTU3ZTY0YzZmYTg5NjM3OThkZGZmNDY4MyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDQ1OWJiYjU1N2U2NGM2ZmE4OTYzNzk4ZGRmZjQ2ODMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFTkRFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWI5NjM3ODkwN2Q0ZWIyYjY4Y2I1MTZkNDRmNzRlMC5zZXRDb250ZW50KGh0bWxfMDQ1OWJiYjU1N2U2NGM2ZmE4OTYzNzk4ZGRmZjQ2ODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZmNhM2VjMTMxMmM0ODFiOTQ4NjQ5NDZhYjgzM2VlMi5iaW5kUG9wdXAocG9wdXBfZjViOTYzNzg5MDdkNGViMmI2OGNiNTE2ZDQ0Zjc0ZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGU2OWM0M2IwNWE1NGJjYmEyNTlhMzE3MzMyYjc4ZDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi43ODQzLC01LjIxNTEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTRlZjYyZDMyOGI0Y2M1ODdkYThmYTdlNGU1YTgxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYWE4MWRjOGQyNGQ0N2JkYWVjZmY5MWU1N2I5YjlmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2FhODFkYzhkMjRkNDdiZGFlY2ZmOTFlNTdiOWI5ZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFUkFCRVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1NGVmNjJkMzI4YjRjYzU4N2RhOGZhN2U0ZTVhODE3LnNldENvbnRlbnQoaHRtbF9jYWE4MWRjOGQyNGQ0N2JkYWVjZmY5MWU1N2I5YjlmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBlNjljNDNiMDVhNTRiY2JhMjU5YTMxNzMzMmI3OGQ1LmJpbmRQb3B1cChwb3B1cF85NTRlZjYyZDMyOGI0Y2M1ODdkYThmYTdlNGU1YTgxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMDM4ODU5NzY5NjU0YTQ2ODI3NjNiYTk5MzE3YmZmYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE5Ljg4NTcsLTQuNzI0MzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2NTc3ZDFlZjNlODQwMGI4ZGMxOTQ5MTU4M2QxMzYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwMGRlMDY4ZTBmMTRiMzI5MzhkNDMyYTRiOGIyNjM0ID0gJCgnPGRpdiBpZD0iaHRtbF9hMDBkZTA2OGUwZjE0YjMyOTM4ZDQzMmE0YjhiMjYzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVSQUJJU0g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2NTc3ZDFlZjNlODQwMGI4ZGMxOTQ5MTU4M2QxMzYwLnNldENvbnRlbnQoaHRtbF9hMDBkZTA2OGUwZjE0YjMyOTM4ZDQzMmE0YjhiMjYzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMwMzg4NTk3Njk2NTRhNDY4Mjc2M2JhOTkzMTdiZmZhLmJpbmRQb3B1cChwb3B1cF8wNjU3N2QxZWYzZTg0MDBiOGRjMTk0OTE1ODNkMTM2MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNGIwMDgwOWFlODE0NzI2YmYzOWRmMTRjMWZmMDkyYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yMS44NDExLDE1LjQ4NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhMTk0ZGUzOTYzNzQ2OTlhNmNiYWFmZGQ0ODE5NWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkMTEzMmFlODM2YTRjZTZhY2IzM2IxMTZiMDEwZTJkID0gJCgnPGRpdiBpZD0iaHRtbF8zZDExMzJhZTgzNmE0Y2U2YWNiMzNiMTE2YjAxMGUyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVSR0RBTUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhMTk0ZGUzOTYzNzQ2OTlhNmNiYWFmZGQ0ODE5NWNiLnNldENvbnRlbnQoaHRtbF8zZDExMzJhZTgzNmE0Y2U2YWNiMzNiMTE2YjAxMGUyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q0YjAwODA5YWU4MTQ3MjZiZjM5ZGYxNGMxZmYwOTJiLmJpbmRQb3B1cChwb3B1cF9hYTE5NGRlMzk2Mzc0Njk5YTZjYmFhZmRkNDgxOTVjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84OGY4NzhiNDczNjA0Mjc0YmYyNDY3NDA4YTIwYjI3OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjIwNTgsOS41NjI4OTQ5MjYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OTNjN2UyYWVhOGI0YTcwYmY1N2FjODI5MmE3ZjRkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzRkNGM4OWE3ZjA0NTZiODA2MjBkNGZjMjYwNWRhMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzM0ZDRjODlhN2YwNDU2YjgwNjIwZDRmYzI2MDVkYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFUklCRVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTNjN2UyYWVhOGI0YTcwYmY1N2FjODI5MmE3ZjRkZS5zZXRDb250ZW50KGh0bWxfYzM0ZDRjODlhN2YwNDU2YjgwNjIwZDRmYzI2MDVkYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84OGY4NzhiNDczNjA0Mjc0YmYyNDY3NDA4YTIwYjI3OS5iaW5kUG9wdXAocG9wdXBfODkzYzdlMmFlYThiNGE3MGJmNTdhYzgyOTJhN2Y0ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGI3ZTUzZWRlODc0NDA0YzkxMjBmOWEzNjY5M2ZkZTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC41NjU2LDM0Ljg0ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyYTA5YzRmNTI5MDQ0MzhhNjM4ZDU1YThiZDNhY2UxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlNjJmMzFhOTk1NTQ3NjZhYmJmZDA3MzJhNzNhOTQ1ID0gJCgnPGRpdiBpZD0iaHRtbF8wZTYyZjMxYTk5NTU0NzY2YWJiZmQwNzMyYTczYTk0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVSVEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyYTA5YzRmNTI5MDQ0MzhhNjM4ZDU1YThiZDNhY2UxLnNldENvbnRlbnQoaHRtbF8wZTYyZjMxYTk5NTU0NzY2YWJiZmQwNzMyYTczYTk0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RiN2U1M2VkZTg3NDQwNGM5MTIwZjlhMzY2OTNmZGU1LmJpbmRQb3B1cChwb3B1cF9mMmEwOWM0ZjUyOTA0NDM4YTYzOGQ1NWE4YmQzYWNlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNTQxOGE1YTE0NDQ0MTZiYjEwMTU5NTJjZDhkZDNmOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjAyNjksMjYuNjA3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzkxNWQzNDNkZDg1NGMzMGI3ZDg4ZjcyMzkwOTI3ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODU3M2UxMmE2M2JhNDcxMmJlY2JhNmExNWE5OTc1YzcgPSAkKCc8ZGl2IGlkPSJodG1sXzg1NzNlMTJhNjNiYTQ3MTJiZWNiYTZhMTVhOTk3NWM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRVJUSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzkxNWQzNDNkZDg1NGMzMGI3ZDg4ZjcyMzkwOTI3ZWYuc2V0Q29udGVudChodG1sXzg1NzNlMTJhNjNiYTQ3MTJiZWNiYTZhMTVhOTk3NWM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTU0MThhNWExNDQ0NDE2YmIxMDE1OTUyY2Q4ZGQzZjkuYmluZFBvcHVwKHBvcHVwX2M5MTVkMzQzZGQ4NTRjMzBiN2Q4OGY3MjM5MDkyN2VmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RlZTZjMjJkOTRmNDRjYzY5ZWNlMzVlMjI2MWVjYWI0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi40MDk0MDE0MzEzOSwtNi40ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDgxNzdmYmE5NTU3NDNjMjg1MWE4NjdmZTJmM2JjNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQyNTE2ZTk4NTljNDI2NTg0ZmQxNDFkZmE2YTI1NmEgPSAkKCc8ZGl2IGlkPSJodG1sX2E0MjUxNmU5ODU5YzQyNjU4NGZkMTQxZGZhNmEyNTZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRVRFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODE3N2ZiYTk1NTc0M2MyODUxYTg2N2ZlMmYzYmM1Zi5zZXRDb250ZW50KGh0bWxfYTQyNTE2ZTk4NTljNDI2NTg0ZmQxNDFkZmE2YTI1NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZWU2YzIyZDk0ZjQ0Y2M2OWVjZTM1ZTIyNjFlY2FiNC5iaW5kUG9wdXAocG9wdXBfZDgxNzdmYmE5NTU3NDNjMjg1MWE4NjdmZTJmM2JjNWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjg0NDNjZTA4YjdlNGNlMjliZDhjMmI3NTI2ZDEyNzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjEuMjIwMSw0Ni40NzEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDk3MWQ3OTg3Mzk0NjAyODVjYTc0YTA0Mjk0MjgwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTNlM2Y5ZjI2MWI0ZTg0OTlmZjUyN2ZlZmZmMGY5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWEzZTNmOWYyNjFiNGU4NDk5ZmY1MjdmZWZmZjBmOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFVFNJTEVPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDk3MWQ3OTg3Mzk0NjAyODVjYTc0YTA0Mjk0MjgwZi5zZXRDb250ZW50KGh0bWxfZWEzZTNmOWYyNjFiNGU4NDk5ZmY1MjdmZWZmZjBmOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yODQ0M2NlMDhiN2U0Y2UyOWJkOGMyYjc1MjZkMTI3Mi5iaW5kUG9wdXAocG9wdXBfMzA5NzFkNzk4NzM5NDYwMjg1Y2E3NGEwNDI5NDI4MGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTBkYWE2ZjM0Mzk2NGM0MWIzNDEzZjdhNjU1OWMwYWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMjA3Nyw0OS4yNDYyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzU4Yjg5ZWIxZWE0Zjc0YjFiMmI1OThhNGVlNGQwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NWRhZTIwYzQ3NzM0ODFiOWY4YTNmMWE1ZGFiMDNhNSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTVkYWUyMGM0NzczNDgxYjlmOGEzZjFhNWRhYjAzYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFVFNJTUlTQVJBS0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3NThiODllYjFlYTRmNzRiMWIyYjU5OGE0ZWU0ZDA2LnNldENvbnRlbnQoaHRtbF85NWRhZTIwYzQ3NzM0ODFiOWY4YTNmMWE1ZGFiMDNhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkwZGFhNmYzNDM5NjRjNDFiMzQxM2Y3YTY1NTljMGFmLmJpbmRQb3B1cChwb3B1cF8yNzU4Yjg5ZWIxZWE0Zjc0YjFiMmI1OThhNGVlNGQwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYzE2MDE2OTg3OGI0YTkwYTUxMzgyNWMxYjQ4YmU2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjUyOTYsLTE1LjExNzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwOGZkZGEyOGFkMzRjMjVhN2UwZjY2MTllOGU5ZTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhMDdmYmY4MmIzNjQ5ODk4ZDY4MGIyNmM4OTA0M2FmID0gJCgnPGRpdiBpZD0iaHRtbF83YTA3ZmJmODJiMzY0OTg5OGQ2ODBiMjZjODkwNDNhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QklBRkFEQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjA4ZmRkYTI4YWQzNGMyNWE3ZTBmNjYxOWU4ZTllMTAuc2V0Q29udGVudChodG1sXzdhMDdmYmY4MmIzNjQ5ODk4ZDY4MGIyNmM4OTA0M2FmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmMxNjAxNjk4NzhiNGE5MGE1MTM4MjVjMWI0OGJlNjAuYmluZFBvcHVwKHBvcHVwXzIwOGZkZGEyOGFkMzRjMjVhN2UwZjY2MTllOGU5ZTEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVkMWJlZTE1ZWVhMTRiN2JhZGViOWQzNjIzZTAwZGZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuMzk1NCwyMy43MzIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzcxOWVmNjM1MWE0MGFlYWUzYWJlNzY4MjdiY2Q5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZWNkOTg4NzkyM2I0NmI0YjE4MmUwYmIyYjNiNDExYSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWVjZDk4ODc5MjNiNDZiNGIxODJlMGJiMmIzYjQxMWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJJREVZQVQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzNzE5ZWY2MzUxYTQwYWVhZTNhYmU3NjgyN2JjZDljLnNldENvbnRlbnQoaHRtbF9hZWNkOTg4NzkyM2I0NmI0YjE4MmUwYmIyYjNiNDExYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVkMWJlZTE1ZWVhMTRiN2JhZGViOWQzNjIzZTAwZGZmLmJpbmRQb3B1cChwb3B1cF80MzcxOWVmNjM1MWE0MGFlYWUzYWJlNzY4MjdiY2Q5Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84Y2Y5ZTBhZDdhMmQ0NWQzOGU4ZmUyYTcwOGI3M2QwNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjMxNTksLTE2LjAwMzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzMDk2MGM5M2QxNDQxOTY4ZWQ5YTQyMzUzOTRhZjRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3ZDcwMGJkMWQxMzRmNDJiNzMxN2I1NTU2MjcyZDM3ID0gJCgnPGRpdiBpZD0iaHRtbF85N2Q3MDBiZDFkMTM0ZjQyYjczMTdiNTU1NjI3MmQzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QklKT0dPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MzA5NjBjOTNkMTQ0MTk2OGVkOWE0MjM1Mzk0YWY0Zi5zZXRDb250ZW50KGh0bWxfOTdkNzAwYmQxZDEzNGY0MmI3MzE3YjU1NTYyNzJkMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84Y2Y5ZTBhZDdhMmQ0NWQzOGU4ZmUyYTcwOGI3M2QwNy5iaW5kUG9wdXAocG9wdXBfODMwOTYwYzkzZDE0NDE5NjhlZDlhNDIzNTM5NGFmNGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzc4MTg4YTY5YTM5NGJmZDkwMGZjOWI4MzcyODY3YjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjQ0NjkwMTMyNjU2LDI0LjI0MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkNjY0ZDg3ZWRlNjRlODU5MmIyN2VmMGE5NGUzMzQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjMDc1NTY0MzIzOTRmM2Q4Y2VmZjMxNDhiYjcxNDkwID0gJCgnPGRpdiBpZD0iaHRtbF9hYzA3NTU2NDMyMzk0ZjNkOGNlZmYzMTQ4YmI3MTQ5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QklOWkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkNjY0ZDg3ZWRlNjRlODU5MmIyN2VmMGE5NGUzMzQxLnNldENvbnRlbnQoaHRtbF9hYzA3NTU2NDMyMzk0ZjNkOGNlZmYzMTQ4YmI3MTQ5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc3ODE4OGE2OWEzOTRiZmQ5MDBmYzliODM3Mjg2N2I5LmJpbmRQb3B1cChwb3B1cF84ZDY2NGQ4N2VkZTY0ZTg1OTJiMjdlZjBhOTRlMzM0MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MDg2ZTMzNTk2MDI0NTE5YTUwYzhlNjkwOGNhY2FiYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzAuOTMzNTQzMDYyODYsMjguOTMyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY2NmE1NzVhMDAxNDczMDhhOTFmZTRlNzMwNDBhMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTY1ZTMwZmI4ZjRlNGFjNmFkM2U0ZGFjYWYwYjgzNTIgPSAkKCc8ZGl2IGlkPSJodG1sXzU2NWUzMGZiOGY0ZTRhYzZhZDNlNGRhY2FmMGI4MzUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CSVJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjY2YTU3NWEwMDE0NzMwOGE5MWZlNGU3MzA0MGEwOC5zZXRDb250ZW50KGh0bWxfNTY1ZTMwZmI4ZjRlNGFjNmFkM2U0ZGFjYWYwYjgzNTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MDg2ZTMzNTk2MDI0NTE5YTUwYzhlNjkwOGNhY2FiYy5iaW5kUG9wdXAocG9wdXBfZmY2NmE1NzVhMDAxNDczMDhhOTFmZTRlNzMwNDBhMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGM3ODEzMjYyODI0NGZmN2IyOWNjZTA4YzZiMjE5YjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4yMTYxLC0yLjgxNjE1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOTBlOGEyNTZjMTU0ZDEwOTFiOWQ3ZDNhZWQyNGE0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzFkOTgyYjEwMjY0ZDk4ODA3YWJmNmFjOTBiYzM1ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTcxZDk4MmIxMDI2NGQ5ODgwN2FiZjZhYzkwYmMzNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJJUklGT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5MGU4YTI1NmMxNTRkMTA5MWI5ZDdkM2FlZDI0YTRmLnNldENvbnRlbnQoaHRtbF9hNzFkOTgyYjEwMjY0ZDk4ODA3YWJmNmFjOTBiYzM1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBjNzgxMzI2MjgyNDRmZjdiMjljY2UwOGM2YjIxOWIwLmJpbmRQb3B1cChwb3B1cF9kOTBlOGEyNTZjMTU0ZDEwOTFiOWQ3ZDNhZWQyNGE0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NzQzNWIzMTRlNzM0YTMzYjRmYTYwOTdhNjI3ZDFkZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjkxMSwyNS43MDExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzU5N2Q3YzMxMDg0NDU5YTA3NTlmNjIyYjUzMWI1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTM5ZDQ3YmY3MTg0MTI3OTBkOGMxZjdkMzhlZmZjMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzEzOWQ0N2JmNzE4NDEyNzkwZDhjMWY3ZDM4ZWZmYzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJJUktFRDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjM1OTdkN2MzMTA4NDQ1OWEwNzU5ZjYyMmI1MzFiNTMuc2V0Q29udGVudChodG1sX2MxMzlkNDdiZjcxODQxMjc5MGQ4YzFmN2QzOGVmZmMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDc0MzViMzE0ZTczNGEzM2I0ZmE2MDk3YTYyN2QxZGUuYmluZFBvcHVwKHBvcHVwXzIzNTk3ZDdjMzEwODQ0NTlhMDc1OWY2MjJiNTMxYjUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEzNjk4MTg4N2U1YzQxZmM5N2ZmNDk1NGVhMmRmZjk3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS42NzUxODM2MTAxMSw5LjAzNzk3NTIxMDczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MzY2ZDM4YTQ0ODY0NzY4OTcxNDYxNWZjNTQ2ODBlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjI1MTgyYzNmMDI0YTZmODI0OGFiMzRjMDJmN2EzMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWIyNTE4MmMzZjAyNGE2ZjgyNDhhYjM0YzAyZjdhMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJJUk9NPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzY2ZDM4YTQ0ODY0NzY4OTcxNDYxNWZjNTQ2ODBlNy5zZXRDb250ZW50KGh0bWxfOWIyNTE4MmMzZjAyNGE2ZjgyNDhhYjM0YzAyZjdhMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMzY5ODE4ODdlNWM0MWZjOTdmZjQ5NTRlYTJkZmY5Ny5iaW5kUG9wdXAocG9wdXBfNjM2NmQzOGE0NDg2NDc2ODk3MTQ2MTVmYzU0NjgwZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2U2NDUzNjEzMWExNDA5ZWEwMDJhYWY2OTViNWQyYTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuMjM1MSwzMS4zODkyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTMxNzkyZWMwNjI0MDAzYTEzOWRiY2Y3MmJmMjc1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yM2U1Yjg2YmMyMWU0NGI5OWFjMDg5YmQwOTlhOGE0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjNlNWI4NmJjMjFlNDRiOTlhYzA4OWJkMDk5YThhNDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJJU0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlMzE3OTJlYzA2MjQwMDNhMTM5ZGJjZjcyYmYyNzU5LnNldENvbnRlbnQoaHRtbF8yM2U1Yjg2YmMyMWU0NGI5OWFjMDg5YmQwOTlhOGE0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNlNjQ1MzYxMzFhMTQwOWVhMDAyYWFmNjk1YjVkMmE2LmJpbmRQb3B1cChwb3B1cF8wZTMxNzkyZWMwNjI0MDAzYTEzOWRiY2Y3MmJmMjc1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZWQ3YTFkY2RkYTg0OWU1YmE5Y2E0MDViOTRiMWFiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjE0MTUsMzQuODg3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzU5YWFjZGVhMTY3NDAzZThkZmM3YTIwMDYxMDgyOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM1NTQ2Y2YyNWZmNGQ0OTgzZGYwOTQzMDNlMjgwZWEgPSAkKCc8ZGl2IGlkPSJodG1sX2YzNTU0NmNmMjVmZjRkNDk4M2RmMDk0MzAzZTI4MGVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CSVNIQVJJTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzU5YWFjZGVhMTY3NDAzZThkZmM3YTIwMDYxMDgyOWUuc2V0Q29udGVudChodG1sX2YzNTU0NmNmMjVmZjRkNDk4M2RmMDk0MzAzZTI4MGVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGVkN2ExZGNkZGE4NDllNWJhOWNhNDA1Yjk0YjFhYjEuYmluZFBvcHVwKHBvcHVwXzM1OWFhY2RlYTE2NzQwM2U4ZGZjN2EyMDA2MTA4MjllKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQxZmZjYzFlOTQ4ZjRiNTU4YjNiMDg2ZGJiZTJjMWI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNDM2OSwtMy42OTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGMwNTUzMDAzYjUyNDBjMDk0NzU2NWE1ODA2MzhmNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcxOTMyOGViOTliNGNhZGFiNDlhNjg4NWIxM2FlZmUgPSAkKCc8ZGl2IGlkPSJodG1sXzI3MTkzMjhlYjk5YjRjYWRhYjQ5YTY4ODViMTNhZWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT0JPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzA1NTMwMDNiNTI0MGMwOTQ3NTY1YTU4MDYzOGY3Ni5zZXRDb250ZW50KGh0bWxfMjcxOTMyOGViOTliNGNhZGFiNDlhNjg4NWIxM2FlZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MWZmY2MxZTk0OGY0YjU1OGIzYjA4NmRiYmUyYzFiOS5iaW5kUG9wdXAocG9wdXBfOGMwNTUzMDAzYjUyNDBjMDk0NzU2NWE1ODA2MzhmNzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjk1NmUwNjVmYTcwNDYxZDkyMGZkOTY1NGJlNzYxMDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszLjk5NTE2MjAxMDg3LDE3LjU2MDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNWFlZTliNTU2YzQ2OGVhZmFlNjczMDliNzUxOTdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0NzZlNzk5ZTBkMDQ5YTRhZWRkNTE5ZWQ5YTJiM2ZhID0gJCgnPGRpdiBpZD0iaHRtbF83NDc2ZTc5OWUwZDA0OWE0YWVkZDUxOWVkOWEyYjNmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9GSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE1YWVlOWI1NTZjNDY4ZWFmYWU2NzMwOWI3NTE5N2Euc2V0Q29udGVudChodG1sXzc0NzZlNzk5ZTBkMDQ5YTRhZWRkNTE5ZWQ5YTJiM2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjk1NmUwNjVmYTcwNDYxZDkyMGZkOTY1NGJlNzYxMDYuYmluZFBvcHVwKHBvcHVwX2ExNWFlZTliNTU2YzQ2OGVhZmFlNjczMDliNzUxOTdhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlkMzljNjc4NDRkYjQyZDk4YjBmNzcwOTk5Y2VkZTY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuNzUxMywzOC40NTcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTAxZmEyMTBjYzk0MDVlYjRiYmVjZDJhNjU1ODc3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMWU0MzRhOTRlZjk0ZTdhYWEwMzMwNGZlZDExY2NkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDFlNDM0YTk0ZWY5NGU3YWFhMDMzMDRmZWQxMWNjZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJPR088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1MDFmYTIxMGNjOTQwNWViNGJiZWNkMmE2NTU4NzdiLnNldENvbnRlbnQoaHRtbF8wMWU0MzRhOTRlZjk0ZTdhYWEwMzMwNGZlZDExY2NkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkMzljNjc4NDRkYjQyZDk4YjBmNzcwOTk5Y2VkZTY1LmJpbmRQb3B1cChwb3B1cF9hNTAxZmEyMTBjYzk0MDVlYjRiYmVjZDJhNjU1ODc3Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NmY5OTJjZmM4M2Y0MDQxOWY2Nzg0ODhlMmU5NWFkOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuMjI1NzE2NDE2NTEsOS4wODY4ODU4NDc4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDI3YTY3Y2U5OTA5NGFjY2I5ZDg1NTI2NTBlMzIzNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBkMzM1M2RiNzkwNDMzYWJjNzFmZTIxOTk1ZGYzODMgPSAkKCc8ZGl2IGlkPSJodG1sX2EwZDMzNTNkYjc5MDQzM2FiYzcxZmUyMTk5NWRmMzgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT0tJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMjdhNjdjZTk5MDk0YWNjYjlkODU1MjY1MGUzMjM1OS5zZXRDb250ZW50KGh0bWxfYTBkMzM1M2RiNzkwNDMzYWJjNzFmZTIxOTk1ZGYzODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NmY5OTJjZmM4M2Y0MDQxOWY2Nzg0ODhlMmU5NWFkOS5iaW5kUG9wdXAocG9wdXBfZDI3YTY3Y2U5OTA5NGFjY2I5ZDg1NTI2NTBlMzIzNTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjU0NzU5YmZiOTQ1NDFmZDk2M2E4ODMzNzk2ZDRhOTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS4wODE4LDExLjI5MDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjYWZiNzE3ZWYyNDRiMjViZDAwMmQ3MThiZWY3YTRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExNTY2MGIzZTIyYjRhOTI4Mzk5MzI0NzA5NTk5OWQ2ID0gJCgnPGRpdiBpZD0iaHRtbF8xMTU2NjBiM2UyMmI0YTkyODM5OTMyNDcwOTU5OTlkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9MRVdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Y2FmYjcxN2VmMjQ0YjI1YmQwMDJkNzE4YmVmN2E0YS5zZXRDb250ZW50KGh0bWxfMTE1NjYwYjNlMjJiNGE5MjgzOTkzMjQ3MDk1OTk5ZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNTQ3NTliZmI5NDU0MWZkOTYzYTg4MzM3OTZkNGE5Ni5iaW5kUG9wdXAocG9wdXBfOGNhZmI3MTdlZjI0NGIyNWJkMDAyZDcxOGJlZjdhNGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjI1NjJlYzIxOTAxNGMxNzk3ZTBjNWE0NjExZjIwNzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjkxNDkyMTYxMTg3LDE3LjUxODddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1ZWVlZjlhNTQ5ZDQ1Y2JhM2E4Y2E2MzU3ZTc0ZTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwN2EzZGExMzA4MDRmYjU4MzU5N2FhOTBjZjQ2ZjFmID0gJCgnPGRpdiBpZD0iaHRtbF9lMDdhM2RhMTMwODA0ZmI1ODM1OTdhYTkwY2Y0NmYxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9NSVRBQkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1ZWVlZjlhNTQ5ZDQ1Y2JhM2E4Y2E2MzU3ZTc0ZTcyLnNldENvbnRlbnQoaHRtbF9lMDdhM2RhMTMwODA0ZmI1ODM1OTdhYTkwY2Y0NmYxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IyNTYyZWMyMTkwMTRjMTc5N2UwYzVhNDYxMWYyMDc4LmJpbmRQb3B1cChwb3B1cF82NWVlZWY5YTU0OWQ0NWNiYTNhOGNhNjM1N2U3NGU3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83Mjc3YzdjZDMyZTg0ODVjODYxMzViNjM4MTJhMTdmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy01LjE1ODU3LDM4Ljc1ODRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2N2JlODg4YjQyNjQ4ZGJhZWI2YTE4MmI0ZTVlZjEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlNjExODA5MDExYTRkOGFhZmM3OTA3ZmNiYjhlOTE2ID0gJCgnPGRpdiBpZD0iaHRtbF9lZTYxMTgwOTAxMWE0ZDhhYWZjNzkwN2ZjYmI4ZTkxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9OREVJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjdiZTg4OGI0MjY0OGRiYWViNmExODJiNGU1ZWYxMC5zZXRDb250ZW50KGh0bWxfZWU2MTE4MDkwMTFhNGQ4YWFmYzc5MDdmY2JiOGU5MTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83Mjc3YzdjZDMyZTg0ODVjODYxMzViNjM4MTJhMTdmNS5iaW5kUG9wdXAocG9wdXBfMzY3YmU4ODhiNDI2NDhkYmFlYjZhMTgyYjRlNWVmMTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjYxNjJlMmE5NmZhNGFmODhjYWQ0ZGIxMWI5MjkxOWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjUxNjM1NzEyMTQ4LDE4LjAxNTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3NjczZDNjYTcyZjRkNTJiMzdlYmU3YjNhYTQwNmQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjYTBmNzUyY2JiMDQxZWM5ODY0NmIxMzg2MTFhMmMwID0gJCgnPGRpdiBpZD0iaHRtbF81Y2EwZjc1MmNiYjA0MWVjOTg2NDZiMTM4NjExYTJjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9OREpPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzY3M2QzY2E3MmY0ZDUyYjM3ZWJlN2IzYWE0MDZkNi5zZXRDb250ZW50KGh0bWxfNWNhMGY3NTJjYmIwNDFlYzk4NjQ2YjEzODYxMWEyYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNjE2MmUyYTk2ZmE0YWY4OGNhZDRkYjExYjkyOTE5ZC5iaW5kUG9wdXAocG9wdXBfZjc2NzNkM2NhNzJmNGQ1MmIzN2ViZTdiM2FhNDA2ZDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGE1YjI5NTZmMDNmNDk1MmEzNTYxOGY4NDQyNzRlMmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjgzOTA0NTQzOTYxLDI4LjY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWJlNmJjNWM1MzE0ZjkxOWIwYmMwYWJmZGU0ODlmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGYzODg5ZGQ3YzQ0OGIzYmM5ZTE1ZjIyMjQ3YmQyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGRmMzg4OWRkN2M0NDhiM2JjOWUxNWYyMjI0N2JkMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJPTkdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZWJlNmJjNWM1MzE0ZjkxOWIwYmMwYWJmZGU0ODlmYS5zZXRDb250ZW50KGh0bWxfNGRmMzg4OWRkN2M0NDhiM2JjOWUxNWYyMjI0N2JkMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYTViMjk1NmYwM2Y0OTUyYTM1NjE4Zjg0NDI3NGUyYy5iaW5kUG9wdXAocG9wdXBfY2ViZTZiYzVjNTMxNGY5MTliMGJjMGFiZmRlNDg5ZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmQyOTMxZWU0YzRiNDFkM2E0NWYyNGU1YjhiNjRkODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4zMDU5Myw0MS4wMTczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGYyNDg5NDllODg0YzVjYWQzMmY5M2NmZWFjNWFhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDFiMGRjNmVjY2M0MGJiYTU5NzVmZThjZDg5YTViZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWQxYjBkYzZlY2NjNDBiYmE1OTc1ZmU4Y2Q4OWE1YmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJPTkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkZjI0ODk0OWU4ODRjNWNhZDMyZjkzY2ZlYWM1YWEwLnNldENvbnRlbnQoaHRtbF9lZDFiMGRjNmVjY2M0MGJiYTU5NzVmZThjZDg5YTViZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JkMjkzMWVlNGM0YjQxZDNhNDVmMjRlNWI4YjY0ZDgzLmJpbmRQb3B1cChwb3B1cF83ZGYyNDg5NDllODg0YzVjYWQzMmY5M2NmZWFjNWFhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NDEyNTAyMGEwY2Q0M2ZmODIxZDExMmQ5Y2Y5NzNlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMuMjg2NTA0MzE3MjMsMzguNTI3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjMyYzljYjIwNTkyNGMxMzhmNDVjOTNmNGQ3N2MzNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQxMWE3OTFhMmMxNDFmY2E3ZTViOTViMWEwYjhkMDcgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkMTFhNzkxYTJjMTQxZmNhN2U1Yjk1YjFhMGI4ZDA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT1JBTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjMyYzljYjIwNTkyNGMxMzhmNDVjOTNmNGQ3N2MzNzAuc2V0Q29udGVudChodG1sX2ZkMTFhNzkxYTJjMTQxZmNhN2U1Yjk1YjFhMGI4ZDA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTQxMjUwMjBhMGNkNDNmZjgyMWQxMTJkOWNmOTczZTYuYmluZFBvcHVwKHBvcHVwX2YzMmM5Y2IyMDU5MjRjMTM4ZjQ1YzkzZjRkNzdjMzcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3Nzk5MmU0ZWU0ZjQwMjQ5N2E5ZGFiMWU2ZDdkOGE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS42NzMwNTQ5NDQ2LDEwLjE1MTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhN2E4MGRlZGMyOTQ1NGE5OTdhMDA5NWMyYTQ2YzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmMWE4OThmNTBiZDRhY2ViNDU5NTYxNTVhYWRhMDYyID0gJCgnPGRpdiBpZD0iaHRtbF8zZjFhODk4ZjUwYmQ0YWNlYjQ1OTU2MTU1YWFkYTA2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9SUk9NPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTdhODBkZWRjMjk0NTRhOTk3YTAwOTVjMmE0NmMyNC5zZXRDb250ZW50KGh0bWxfM2YxYTg5OGY1MGJkNGFjZWI0NTk1NjE1NWFhZGEwNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNzc5OTJlNGVlNGY0MDI0OTdhOWRhYjFlNmQ3ZDhhNS5iaW5kUG9wdXAocG9wdXBfMGE3YTgwZGVkYzI5NDU0YTk5N2EwMDk1YzJhNDZjMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGIwNDQyN2ZhMjE3NDYyMjg0ZTBhYzBlMzRhM2M0M2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC42OTIxMDUsMjEuOTg2Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODcwNGYzYWIxNTM1NDdiZjk2ZGRmYWQ1YmQyZjMwNzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzcyYjlkOGMwYzM1NDY3Y2FiMDY1YjQ1NGUxNjA2NzggPSAkKCc8ZGl2IGlkPSJodG1sX2M3MmI5ZDhjMGMzNTQ2N2NhYjA2NWI0NTRlMTYwNjc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT1NBS0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3MDRmM2FiMTUzNTQ3YmY5NmRkZmFkNWJkMmYzMDczLnNldENvbnRlbnQoaHRtbF9jNzJiOWQ4YzBjMzU0NjdjYWIwNjViNDU0ZTE2MDY3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRiMDQ0MjdmYTIxNzQ2MjI4NGUwYWMwZTM0YTNjNDNmLmJpbmRQb3B1cChwb3B1cF84NzA0ZjNhYjE1MzU0N2JmOTZkZGZhZDViZDJmMzA3Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYTgzMDk4Njk3YjA0MzQwOGQ1ZWFmMDJiZWJhNDYyZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjM2NzQsLTQuNzczMjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0NWMxNmEwMWZjYTQwYWM4ZDVlNDhmOTU1ZWQ2NmNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzYjkzNDE4YjhhYzQxNDhiNWRlMmY5OTEwMjYzODcxID0gJCgnPGRpdiBpZD0iaHRtbF9kM2I5MzQxOGI4YWM0MTQ4YjVkZTJmOTkxMDI2Mzg3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9aTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQ1YzE2YTAxZmNhNDBhYzhkNWU0OGY5NTVlZDY2Y2Quc2V0Q29udGVudChodG1sX2QzYjkzNDE4YjhhYzQxNDhiNWRlMmY5OTEwMjYzODcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGE4MzA5ODY5N2IwNDM0MDhkNWVhZjAyYmViYTQ2MmUuYmluZFBvcHVwKHBvcHVwX2M0NWMxNmEwMWZjYTQwYWM4ZDVlNDhmOTU1ZWQ2NmNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM3MjQwNTQ2ZWNhNDRlNjlhNzJjOTIyMTY5NjU1MzFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy45NTExNDE1OTExOSwtMi4xNzA0OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q1MjdkMmU1NGYwNDI2NmI2MTQzMzEwZjJiYWJjNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQ0YTJjZjI4ZjJlNDZiOWI4ZGNiMmI4NmZkNmY3NDkgPSAkKCc8ZGl2IGlkPSJodG1sX2E0NGEyY2YyOGYyZTQ2YjliOGRjYjJiODZmZDZmNzQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CUk9ORzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Q1MjdkMmU1NGYwNDI2NmI2MTQzMzEwZjJiYWJjNDcuc2V0Q29udGVudChodG1sX2E0NGEyY2YyOGYyZTQ2YjliOGRjYjJiODZmZDZmNzQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzcyNDA1NDZlY2E0NGU2OWE3MmM5MjIxNjk2NTUzMWYuYmluZFBvcHVwKHBvcHVwXzdkNTI3ZDJlNTRmMDQyNjZiNjE0MzMxMGYyYmFiYzQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YwNGNmNmU1NzAzMTQ2MjViMWI0YmZjZjE4MjA4YTRmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuMDYxMSwxOC4xODM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDVkODIwYmI3ZDA0MTViOWZkODc0YjQ4NTc1N2FiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjliM2NlMTc0MTM0NzdjYTgwYzQ4N2M2NDU0ODk5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjY5YjNjZTE3NDEzNDc3Y2E4MGM0ODdjNjQ1NDg5OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmQ1ZDgyMGJiN2QwNDE1YjlmZDg3NGI0ODU3NTdhYjUuc2V0Q29udGVudChodG1sX2I2OWIzY2UxNzQxMzQ3N2NhODBjNDg3YzY0NTQ4OTkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjA0Y2Y2ZTU3MDMxNDYyNWIxYjRiZmNmMTgyMDhhNGYuYmluZFBvcHVwKHBvcHVwXzJkNWQ4MjBiYjdkMDQxNWI5ZmQ4NzRiNDg1NzU3YWI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EzNmY4NTZlMGRmYTRjNzc5ZjUyYWJkMzNlMjI1NDQ2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy40ODUzNjE3NzU0Miw4LjY5NjI5MjExOTE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmE1NGUyMmFiMmU0NzVlOGRhMzg1YjRjODM3NjUzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOWYzOWM4NzFjZWQ0N2IwYjBkMTQ1OTQxM2Q4ZjY0YSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzlmMzljODcxY2VkNDdiMGIwZDE0NTk0MTNkOGY2NGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVQkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmYTU0ZTIyYWIyZTQ3NWU4ZGEzODViNGM4Mzc2NTNhLnNldENvbnRlbnQoaHRtbF9jOWYzOWM4NzFjZWQ0N2IwYjBkMTQ1OTQxM2Q4ZjY0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzNmY4NTZlMGRmYTRjNzc5ZjUyYWJkMzNlMjI1NDQ2LmJpbmRQb3B1cChwb3B1cF85ZmE1NGUyMmFiMmU0NzVlOGRhMzg1YjRjODM3NjUzYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZWY5OTExZDcxZTI0ZGUxYjkyZDBiMTQxMzNhZmViZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNTkwNjg1NzI0NzMsMjIuNzk4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRlZWUwY2YyM2Y2NDc5Zjg1MjFhOTg3NDM3Yzk2OTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWNkN2MzMzIyYTQ0NDZiZWE0YjU2ODdjZTNkNWQ4MmUgPSAkKCc8ZGl2IGlkPSJodG1sXzVjZDdjMzMyMmE0NDQ2YmVhNGI1Njg3Y2UzZDVkODJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVURKQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjRlZWUwY2YyM2Y2NDc5Zjg1MjFhOTg3NDM3Yzk2OTMuc2V0Q29udGVudChodG1sXzVjZDdjMzMyMmE0NDQ2YmVhNGI1Njg3Y2UzZDVkODJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmVmOTkxMWQ3MWUyNGRlMWI5MmQwYjE0MTMzYWZlYmYuYmluZFBvcHVwKHBvcHVwXzY0ZWVlMGNmMjNmNjQ3OWY4NTIxYTk4NzQzN2M5NjkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QwNDA5ZjJiMGRlMTRiODJiNzkyNWI5ZmE1YjM3ZTcwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMi4xMTYzODYwMDM5NiwyOC4xMjA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NjQwMDg3ZWY2OWQ0OWQ5ODhhNjU2N2Q3MTliYTI4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTI2Yjk0NjMwOGU0MjBiOTMwMWRkNWEwZDQyNmYyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjEyNmI5NDYzMDhlNDIwYjkzMDFkZDVhMGQ0MjZmMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVRFU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2NDAwODdlZjY5ZDQ5ZDk4OGE2NTY3ZDcxOWJhMjg1LnNldENvbnRlbnQoaHRtbF8yMTI2Yjk0NjMwOGU0MjBiOTMwMWRkNWEwZDQyNmYyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QwNDA5ZjJiMGRlMTRiODJiNzkyNWI5ZmE1YjM3ZTcwLmJpbmRQb3B1cChwb3B1cF83NjQwMDg3ZWY2OWQ0OWQ5ODhhNjU2N2Q3MTliYTI4NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZTk5YjA3MWIxYzk0YzJlOWZjZTA1NjQwNjQxNGI5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjUyNzMsMTQuNDIzN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDc1ZTY2YzExYjlmNDRhMWFhMzIyYjE4ZTFiYjE5ZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ3MjM2Nzc2MzI4NGE2N2IyYTJiOWRhZmYwYTU5NDEgPSAkKCc8ZGl2IGlkPSJodG1sXzM0NzIzNjc3NjMyODRhNjdiMmEyYjlkYWZmMGE1OTQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVURVTUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3NWU2NmMxMWI5ZjQ0YTFhYTMyMmIxOGUxYmIxOWU4LnNldENvbnRlbnQoaHRtbF8zNDcyMzY3NzYzMjg0YTY3YjJhMmI5ZGFmZjBhNTk0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZlOTliMDcxYjFjOTRjMmU5ZmNlMDU2NDA2NDE0Yjk1LmJpbmRQb3B1cChwb3B1cF9kNzVlNjZjMTFiOWY0NGExYWEzMjJiMThlMWJiMTllOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZTkyNzEzY2QzOTg0NTIxOTNjZDAyOGMwNzk5NzdkMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuNDY5ODkwMTgwOTIsMC42MzY4NTgwMjMyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzc5ZDU0MWFiNmI0NGIzYzlmNzQ5ZDM3ZjNkYWZiMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmY1OTk2NWI4ZTFiNDVjNzkwMjY5ZTE4M2YyODcxZTEgPSAkKCc8ZGl2IGlkPSJodG1sX2JmNTk5NjViOGUxYjQ1Yzc5MDI2OWUxODNmMjg3MWUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVUVNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNzlkNTQxYWI2YjQ0YjNjOWY3NDlkMzdmM2RhZmIxNi5zZXRDb250ZW50KGh0bWxfYmY1OTk2NWI4ZTFiNDVjNzkwMjY5ZTE4M2YyODcxZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTkyNzEzY2QzOTg0NTIxOTNjZDAyOGMwNzk5NzdkMy5iaW5kUG9wdXAocG9wdXBfYzc5ZDU0MWFiNmI0NGIzYzlmNzQ5ZDM3ZjNkYWZiMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjk0M2E2N2Q4YjJkNGIyZTllY2VhY2Y3NWYzMWFiZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC40NzQ1LC0xLjIwMDU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2FhZDczNzgwNTE0ZDdmOGI3MmY4MDY5NTA0YjczZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OWM1MWVjYzkwMDI0YzczYWRhYjBhMjQzYjU3NGFkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzljNTFlY2M5MDAyNGM3M2FkYWIwYTI0M2I1NzRhZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVSUxTQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTdhYWQ3Mzc4MDUxNGQ3ZjhiNzJmODA2OTUwNGI3M2Uuc2V0Q29udGVudChodG1sXzc5YzUxZWNjOTAwMjRjNzNhZGFiMGEyNDNiNTc0YWRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjk0M2E2N2Q4YjJkNGIyZTllY2VhY2Y3NWYzMWFiZjEuYmluZFBvcHVwKHBvcHVwX2E3YWFkNzM3ODA1MTRkN2Y4YjcyZjgwNjk1MDRiNzNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI5MDJjOWM1YzkxYTRlZmRhNjZmNjE3NmZjODIyNWYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMTE2NywxNy45NzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyYTY3NWQzNzJiMTQ0OTU4ZmVkOWU0ODdkNTBkYjVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjMDZjMWNkNTAzYjQ4NTNiZGNhNDJjMjFjMWZhMzI4ID0gJCgnPGRpdiBpZD0iaHRtbF8zYzA2YzFjZDUwM2I0ODUzYmRjYTQyYzIxYzFmYTMyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVMR0VEQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJhNjc1ZDM3MmIxNDQ5NThmZWQ5ZTQ4N2Q1MGRiNWMuc2V0Q29udGVudChodG1sXzNjMDZjMWNkNTAzYjQ4NTNiZGNhNDJjMjFjMWZhMzI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjkwMmM5YzVjOTFhNGVmZGE2NmY2MTc2ZmM4MjI1ZjMuYmluZFBvcHVwKHBvcHVwXzIyYTY3NWQzNzJiMTQ0OTU4ZmVkOWU0ODdkNTBkYjVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FhMDNlMDI4NDRjYTQyOGQ4ZjViN2UzNzQxNWVjM2RhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC44NDAwNzcyNzAxMiwtMTMuMDM2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVmOWI3NWY1NDJkNDk1NWFiMWFmMjcwYjgxYTZiMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2M3OWEyZTlhMTBmNDEwOWI2MmQ3ODZjODNkYmU2NGQgPSAkKCc8ZGl2IGlkPSJodG1sX2NjNzlhMmU5YTEwZjQxMDliNjJkNzg2YzgzZGJlNjRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVUxPTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWVmOWI3NWY1NDJkNDk1NWFiMWFmMjcwYjgxYTZiMjEuc2V0Q29udGVudChodG1sX2NjNzlhMmU5YTEwZjQxMDliNjJkNzg2YzgzZGJlNjRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWEwM2UwMjg0NGNhNDI4ZDhmNWI3ZTM3NDE1ZWMzZGEuYmluZFBvcHVwKHBvcHVwXzFlZjliNzVmNTQyZDQ5NTVhYjFhZjI3MGI4MWE2YjIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBjNjVlZjBjZWE3ZDQyMGFiMmQwOThiNWM2ZmQ0ZmYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMDc4MzUsMTkuNjE1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmE1ODQ0MjBiNWUyNDIzMmIwZmJhZWEyMWE1ZjY0MDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzUwMDU2OTI4MDNkNGMyMWE5MzYzMmY1NGEyYjNmNjggPSAkKCc8ZGl2IGlkPSJodG1sX2M1MDA1NjkyODAzZDRjMjFhOTM2MzJmNTRhMmIzZjY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVU5EQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmE1ODQ0MjBiNWUyNDIzMmIwZmJhZWEyMWE1ZjY0MDYuc2V0Q29udGVudChodG1sX2M1MDA1NjkyODAzZDRjMjFhOTM2MzJmNTRhMmIzZjY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGM2NWVmMGNlYTdkNDIwYWIyZDA5OGI1YzZmZDRmZjEuYmluZFBvcHVwKHBvcHVwXzJhNTg0NDIwYjVlMjQyMzJiMGZiYWVhMjFhNWY2NDA2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y4OGQxZTM1MTZhNjRmNDNhZWJkMmExZjZhNGMwOWM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4xNjMxMjI4NzE5NCw2LjA2ODI3Mzg3ODIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzA4NDJhMDRlYjQ0NzEwODA0ZGY4MTQwMmQ4YjkwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MTg4OWNhYzMxZGI0NDBiOGRkZTRkMDA0NDM1YTZkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTE4ODljYWMzMWRiNDQwYjhkZGU0ZDAwNDQzNWE2ZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVTlU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzMDg0MmEwNGViNDQ3MTA4MDRkZjgxNDAyZDhiOTAxLnNldENvbnRlbnQoaHRtbF85MTg4OWNhYzMxZGI0NDBiOGRkZTRkMDA0NDM1YTZkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y4OGQxZTM1MTZhNjRmNDNhZWJkMmExZjZhNGMwOWM3LmJpbmRQb3B1cChwb3B1cF9kMzA4NDJhMDRlYjQ0NzEwODA0ZGY4MTQwMmQ4YjkwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MzhlYzYwMTlkNDk0OGMyOTcxOWRmZDFmZGM3ZGQ5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjg4MiwxMi41Njg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzMwMTg3YzNjN2Q0MmFiYjAxZDk3NjYyZjkyNWI3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGM5ZTE5ZDNkZDk0OWI2OWY3MDhlZjRiYzJmMDQyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjBjOWUxOWQzZGQ5NDliNjlmNzA4ZWY0YmMyZjA0MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3MzAxODdjM2M3ZDQyYWJiMDFkOTc2NjJmOTI1YjcyLnNldENvbnRlbnQoaHRtbF9mMGM5ZTE5ZDNkZDk0OWI2OWY3MDhlZjRiYzJmMDQyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkzOGVjNjAxOWQ0OTQ4YzI5NzE5ZGZkMWZkYzdkZDkxLmJpbmRQb3B1cChwb3B1cF83NzMwMTg3YzNjN2Q0MmFiYjAxZDk3NjYyZjkyNWI3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOWNhYWU5YWE0MTY0NDE0YWI5ZGQ4NzlhMWE5NWM4NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy01LjEwMzAxLDM2LjIzMjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlOGU1NDU0YmI4NDQyYTE5OGZiZWQ3MDU0MWEzYmM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyOGIyMjc2YTZlMzRmZDRhNzU5YmViZDgyYjRhMjc2ID0gJCgnPGRpdiBpZD0iaHRtbF9lMjhiMjI3NmE2ZTM0ZmQ0YTc1OWJlYmQ4MmI0YTI3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSVU5HSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2U4ZTU0NTRiYjg0NDJhMTk4ZmJlZDcwNTQxYTNiYzguc2V0Q29udGVudChodG1sX2UyOGIyMjc2YTZlMzRmZDRhNzU5YmViZDgyYjRhMjc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDljYWFlOWFhNDE2NDQxNGFiOWRkODc5YTFhOTVjODYuYmluZFBvcHVwKHBvcHVwXzNlOGU1NDU0YmI4NDQyYTE5OGZiZWQ3MDU0MWEzYmM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzljZDUwYmQ1ODQyZDRmOTc4OGE1MWY3ZDdlYTQ3ZDM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNTE1LDQuMjAyMzgzOTU4OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlZTQ1NTc0M2Q4NzQ5MzRhZmQwZGMwYTkzMGQzYjc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlMmUwNGMwMmVlOTQyNmI4MjE5MDZmZTVmMWYxZTAyID0gJCgnPGRpdiBpZD0iaHRtbF8zZTJlMDRjMDJlZTk0MjZiODIxOTA2ZmU1ZjFmMWUwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVTQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGVlNDU1NzQzZDg3NDkzNGFmZDBkYzBhOTMwZDNiNzQuc2V0Q29udGVudChodG1sXzNlMmUwNGMwMmVlOTQyNmI4MjE5MDZmZTVmMWYxZTAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWNkNTBiZDU4NDJkNGY5Nzg4YTUxZjdkN2VhNDdkMzUuYmluZFBvcHVwKHBvcHVwXzBlZTQ1NTc0M2Q4NzQ5MzRhZmQwZGMwYTkzMGQzYjc0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg5ODRhOWE2YjkyMTRlMTI4MWEzODNiY2I5OWVkOGM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNDk5NywtMC4zNDg1NjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3YWM5Zjg0NGMyNzRlYmM4ZWYyNThiM2NjZTFlOTJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxNTMyMjI5Yjg1NTRiZmFhZjEzYjVjYWQxMzczZmU3ID0gJCgnPGRpdiBpZD0iaHRtbF9kMTUzMjIyOWI4NTU0YmZhYWYxM2I1Y2FkMTM3M2ZlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVTQU5TSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdhYzlmODQ0YzI3NGViYzhlZjI1OGIzY2NlMWU5MmMuc2V0Q29udGVudChodG1sX2QxNTMyMjI5Yjg1NTRiZmFhZjEzYjVjYWQxMzczZmU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODk4NGE5YTZiOTIxNGUxMjgxYTM4M2JjYjk5ZWQ4YzYuYmluZFBvcHVwKHBvcHVwX2I3YWM5Zjg0NGMyNzRlYmM4ZWYyNThiM2NjZTFlOTJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RlNmQwNjYxNDI2MDQ3ZWVhMTYxZDAzZTM4Y2U2OGQ2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMTI3NCw5LjExNDg2NTY5ODY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjQ3NmUzZDkyYjM0YjU5YmMxYTIxNmQ4NTFkNjA5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNzRiN2RkYjcwOTA0ZjY3YTFhNTczY2MwYjM3MTNjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDc0YjdkZGI3MDkwNGY2N2ExYTU3M2NjMGIzNzEzYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVVEFXQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI0NzZlM2Q5MmIzNGI1OWJjMWEyMTZkODUxZDYwOTcuc2V0Q29udGVudChodG1sXzA3NGI3ZGRiNzA5MDRmNjdhMWE1NzNjYzBiMzcxM2MwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGU2ZDA2NjE0MjYwNDdlZWExNjFkMDNlMzhjZTY4ZDYuYmluZFBvcHVwKHBvcHVwXzFiNDc2ZTNkOTJiMzRiNTliYzFhMjE2ZDg1MWQ2MDk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JlMDc5ZDdhNzM5NzQ2MGNhMmVjYTRhNjFjNjg4ZTRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuODYxMSwyOC4xNDA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzJhYzZjNDEzMDI0YTc3OGIwNTE0MDY2MGI0ODZlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZjMyM2UyMTRiYWE0NGY4OTlhZTgwNGZhMTgxNDJmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWYzMjNlMjE0YmFhNDRmODk5YWU4MDRmYTE4MTQyZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVWUU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjMmFjNmM0MTMwMjRhNzc4YjA1MTQwNjYwYjQ4NmU1LnNldENvbnRlbnQoaHRtbF8xZjMyM2UyMTRiYWE0NGY4OTlhZTgwNGZhMTgxNDJmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlMDc5ZDdhNzM5NzQ2MGNhMmVjYTRhNjFjNjg4ZTRkLmJpbmRQb3B1cChwb3B1cF8xYzJhYzZjNDEzMDI0YTc3OGIwNTE0MDY2MGI0ODZlNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNTI5NTI3OTU0YzE0ZTIzYWE4NjQxNDg1YmU4NGFiYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMuNTQyNzc1MTAyMDYsMTkuMjkxNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQ4MGU5M2FkZTViNGNiY2JhYmJiYzY1MGNkNjZjYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjhhOGM4MGZiNDI0NDhkNDk1Yzg4Zjk3YWZkMzg5NTEgPSAkKCc8ZGl2IGlkPSJodG1sX2Y4YThjODBmYjQyNDQ4ZDQ5NWM4OGY5N2FmZDM4OTUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CV0FLQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQ4MGU5M2FkZTViNGNiY2JhYmJiYzY1MGNkNjZjYjguc2V0Q29udGVudChodG1sX2Y4YThjODBmYjQyNDQ4ZDQ5NWM4OGY5N2FmZDM4OTUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjUyOTUyNzk1NGMxNGUyM2FhODY0MTQ4NWJlODRhYmMuYmluZFBvcHVwKHBvcHVwX2JkODBlOTNhZGU1YjRjYmNiYWJiYmM2NTBjZDY2Y2I4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M0NGZkYzVmNTdjNTQ5MTZiODcwYTE2ZGU0NDI2MGUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMzLjA4ODcsMjEuODk4Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQyMTk2ZDYyZjU2NDFkOGJmMGFmMjg5Zjc2YjRlMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2FiYzllNTc1ZDIyNGUwOWI5YTRjNGE2ZTBjYTgxYzcgPSAkKCc8ZGl2IGlkPSJodG1sXzNhYmM5ZTU3NWQyMjRlMDliOWE0YzRhNmUwY2E4MWM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVBFIEhPVFRFTlRPVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQyMTk2ZDYyZjU2NDFkOGJmMGFmMjg5Zjc2YjRlMjIuc2V0Q29udGVudChodG1sXzNhYmM5ZTU3NWQyMjRlMDliOWE0YzRhNmUwY2E4MWM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzQ0ZmRjNWY1N2M1NDkxNmI4NzBhMTZkZTQ0MjYwZTMuYmluZFBvcHVwKHBvcHVwX2ZkMjE5NmQ2MmY1NjQxZDhiZjBhZjI4OWY3NmI0ZTIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBmOGI3ZjZkOGM5YzQyZTRiYTRiNDkwMGYxNjViYzllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzEuMTM4Myw1LjcwMTU0OTM0OTkyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ODY4ODIxYjI0ZmU0ZTAxOTc1MGM2MzAzZGJjYTNkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjkxMDNlOWQyM2Q0OWEyODk5MThmZjlmNzM0MDk2MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjI5MTAzZTlkMjNkNDlhMjg5OTE4ZmY5ZjczNDA5NjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNIQUFNQkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4Njg4MjFiMjRmZTRlMDE5NzUwYzYzMDNkYmNhM2RiLnNldENvbnRlbnQoaHRtbF9mMjkxMDNlOWQyM2Q0OWEyODk5MThmZjlmNzM0MDk2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBmOGI3ZjZkOGM5YzQyZTRiYTRiNDkwMGYxNjViYzllLmJpbmRQb3B1cChwb3B1cF81ODY4ODIxYjI0ZmU0ZTAxOTc1MGM2MzAzZGJjYTNkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMDQ5YmEyNjQ3YjA0NmMwYTg4YzdkYzYxMWYxNTNiNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjIxNDQyLDM3LjQ1NDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMmQ3YzY5NjEwYjQxMWZiZThmN2Q3MmFhMDIzZGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzMmNkNjUyZjJjYTRkZDFhZWI3YjRiMmU2MWUwMWQxID0gJCgnPGRpdiBpZD0iaHRtbF9lMzJjZDY1MmYyY2E0ZGQxYWViN2I0YjJlNjFlMDFkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0hBR0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyMmQ3YzY5NjEwYjQxMWZiZThmN2Q3MmFhMDIzZGQ4LnNldENvbnRlbnQoaHRtbF9lMzJjZDY1MmYyY2E0ZGQxYWViN2I0YjJlNjFlMDFkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIwNDliYTI2NDdiMDQ2YzBhODhjN2RjNjExZjE1M2I1LmJpbmRQb3B1cChwb3B1cF9kMjJkN2M2OTYxMGI0MTFmYmU4ZjdkNzJhYTAyM2RkOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZGNhYTdjMzk2ZGQ0NzE2YWVmMmU3YTBlYjY5OTUxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjI2MDQsMC40ODU1MjM4NTA5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjdhZDgxMTAzZDFkNDBlNTljNDYzYzk5ZWM0ZTkwNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWZlY2Q2YTZlODI1NDgxZWE0ODdmNzI1ZTE2Yjc3YjggPSAkKCc8ZGl2IGlkPSJodG1sXzFmZWNkNmE2ZTgyNTQ4MWVhNDg3ZjcyNWUxNmI3N2I4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSEFLT1NTSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdhZDgxMTAzZDFkNDBlNTljNDYzYzk5ZWM0ZTkwNjguc2V0Q29udGVudChodG1sXzFmZWNkNmE2ZTgyNTQ4MWVhNDg3ZjcyNWUxNmI3N2I4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmRjYWE3YzM5NmRkNDcxNmFlZjJlN2EwZWI2OTk1MTkuYmluZFBvcHVwKHBvcHVwXzI3YWQ4MTEwM2QxZDQwZTU5YzQ2M2M5OWVjNGU5MDY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjMTkwZTk4ZmVhMTQ3NzBhMTEzNmI0YzU4MGNlODliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4zODk0MjQ5MDk3MSwxMS44NjA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWUxNjNkODY2YjM0ZTFiOTgwMzBmNjg5NzIwOGIyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hN2RmZWY1NmMzZTc0NWYyOGNhNTRkZDczYzAyODlmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTdkZmVmNTZjM2U3NDVmMjhjYTU0ZGQ3M2MwMjg5ZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNIQU1CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFlMTYzZDg2NmIzNGUxYjk4MDMwZjY4OTcyMDhiMmIuc2V0Q29udGVudChodG1sX2E3ZGZlZjU2YzNlNzQ1ZjI4Y2E1NGRkNzNjMDI4OWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGMxOTBlOThmZWExNDc3MGExMTM2YjRjNTgwY2U4OWIuYmluZFBvcHVwKHBvcHVwXzAxZTE2M2Q4NjZiMzRlMWI5ODAzMGY2ODk3MjA4YjJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U4MTQyODdmMTgxOTRhYjViNGJiNzU2ZmZiYWJjNjRjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjIxMTIsMzMuMzUxMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmExYmUxMjY4NDk4NGNjZjkxYzI2ZWNlZjQzZDUzMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjRkNWViZWQ3OGY0NDM3NmExNDljNDJmYzBmNzY2MDcgPSAkKCc8ZGl2IGlkPSJodG1sXzI0ZDVlYmVkNzhmNDQzNzZhMTQ5YzQyZmMwZjc2NjA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSEVXQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmExYmUxMjY4NDk4NGNjZjkxYzI2ZWNlZjQzZDUzMjMuc2V0Q29udGVudChodG1sXzI0ZDVlYmVkNzhmNDQzNzZhMTQ5YzQyZmMwZjc2NjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTgxNDI4N2YxODE5NGFiNWI0YmI3NTZmZmJhYmM2NGMuYmluZFBvcHVwKHBvcHVwX2JhMWJlMTI2ODQ5ODRjY2Y5MWMyNmVjZWY0M2Q1MzIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRlMmVjMGM5M2ViYzRjYTBiN2QxZDIzYWNmOWIyNGQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMTExNDYsMjkuOTY0M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTBiODI5OTgwMzNjNDYzZWFmYWE4ZGQ5NzU1YzdjZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTIzMjU0NzMwYWRkNDYxYWFmZTQ3ZmYyMWM3Yjc3MTYgPSAkKCc8ZGl2IGlkPSJodG1sX2UyMzI1NDczMGFkZDQ2MWFhZmU0N2ZmMjFjN2I3NzE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSElHQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTBiODI5OTgwMzNjNDYzZWFmYWE4ZGQ5NzU1YzdjZDEuc2V0Q29udGVudChodG1sX2UyMzI1NDczMGFkZDQ2MWFhZmU0N2ZmMjFjN2I3NzE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGUyZWMwYzkzZWJjNGNhMGI3ZDFkMjNhY2Y5YjI0ZDkuYmluZFBvcHVwKHBvcHVwX2EwYjgyOTk4MDMzYzQ2M2VhZmFhOGRkOTc1NWM3Y2QxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZiNDdmMDc1YTIwODQ2OWZhZDEzNDU5YzIyY2QxNDNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuNjU3ODMsMjAuMzE4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWMwYzA0NGYzNTlmNDBjNmEwMzMwYjIyMGU4MDhlNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDJhNGRkMTA3ZTY5NDJlZmEwYjU0NzFiMzM1MDJkNTQgPSAkKCc8ZGl2IGlkPSJodG1sXzQyYTRkZDEwN2U2OTQyZWZhMGI1NDcxYjMzNTAyZDU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSE9LV0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjMGMwNDRmMzU5ZjQwYzZhMDMzMGIyMjBlODA4ZTcwLnNldENvbnRlbnQoaHRtbF80MmE0ZGQxMDdlNjk0MmVmYTBiNTQ3MWIzMzUwMmQ1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZiNDdmMDc1YTIwODQ2OWZhZDEzNDU5YzIyY2QxNDNkLmJpbmRQb3B1cChwb3B1cF81YzBjMDQ0ZjM1OWY0MGM2YTAzMzBiMjIwZTgwOGU3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NmJjOTljNTQxY2M0OWRmOTk5MWU0MmM0YmVhNWZlZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yNC40MDEsMzQuNjQ0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODAwNWZiNWI5YjdjNDFjNjkxNzEyNmRlNjFjM2Q2NTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2IxZjM5MmFhNWNmNGE0NjljYzcxZjRjMzcxYzI2NTEgPSAkKCc8ZGl2IGlkPSJodG1sX2NiMWYzOTJhYTVjZjRhNDY5Y2M3MWY0YzM3MWMyNjUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSE9QSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODAwNWZiNWI5YjdjNDFjNjkxNzEyNmRlNjFjM2Q2NTQuc2V0Q29udGVudChodG1sX2NiMWYzOTJhYTVjZjRhNDY5Y2M3MWY0YzM3MWMyNjUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjZiYzk5YzU0MWNjNDlkZjk5OTFlNDJjNGJlYTVmZWQuYmluZFBvcHVwKHBvcHVwXzgwMDVmYjViOWI3YzQxYzY5MTcxMjZkZTYxYzNkNjU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU5NDEyZjU1NGM3NjRlOWI5ZTZhODBkMzlmMjNlNWQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjY3ODQsMzYuMjA5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGExYmQ4MTM4ZWYzNGFlZWIzN2QyZTU1YWE1YTFhNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmViMWUxMmE5MWM3NDVjN2JjNTgzYmYyM2ZkYjY5MTkgPSAkKCc8ZGl2IGlkPSJodG1sX2JlYjFlMTJhOTFjNzQ1YzdiYzU4M2JmMjNmZGI2OTE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSFVBQk88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhMWJkODEzOGVmMzRhZWViMzdkMmU1NWFhNWExYTU5LnNldENvbnRlbnQoaHRtbF9iZWIxZTEyYTkxYzc0NWM3YmM1ODNiZjIzZmRiNjkxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5NDEyZjU1NGM3NjRlOWI5ZTZhODBkMzlmMjNlNWQ1LmJpbmRQb3B1cChwb3B1cF84YTFiZDgxMzhlZjM0YWVlYjM3ZDJlNTVhYTVhMWE1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMjcwMmFiMThjMTg0MjAxYjlhZjI5YWY0ZDhhNmM5NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4wNjg5LDQzLjk1OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkYmIzNzQ2ZDdkNDRiYTg5MWRhNzY5NDc4YzE5MDhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzZjVjMTJjMTE3ODQyNmI4OGZiNjIyNzIwZGZkZmU3ID0gJCgnPGRpdiBpZD0iaHRtbF8wM2Y1YzEyYzExNzg0MjZiODhmYjYyMjcyMGRmZGZlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09NT1JJQU5TPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZGJiMzc0NmQ3ZDQ0YmE4OTFkYTc2OTQ3OGMxOTA4YS5zZXRDb250ZW50KGh0bWxfMDNmNWMxMmMxMTc4NDI2Yjg4ZmI2MjI3MjBkZmRmZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMjcwMmFiMThjMTg0MjAxYjlhZjI5YWY0ZDhhNmM5Ni5iaW5kUG9wdXAocG9wdXBfYmRiYjM3NDZkN2Q0NGJhODkxZGE3Njk0NzhjMTkwOGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmM5MWY1ZjMxOTE1NDhlMDgyOTA2MDU3OTg2NzYxOWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi40MzI4LDIxLjYyOTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkOGMzMzIzZTVlYTQzM2RhMjJhZTNkYTNmYWYwYmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkYTU2NWYxZjIzYzQxYThhYWMyYTIzOTRmM2VmODRjID0gJCgnPGRpdiBpZD0iaHRtbF9jZGE1NjVmMWYyM2M0MWE4YWFjMmEyMzk0ZjNlZjg0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q1lSRU5BSUNBTlM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkOGMzMzIzZTVlYTQzM2RhMjJhZTNkYTNmYWYwYmJlLnNldENvbnRlbnQoaHRtbF9jZGE1NjVmMWYyM2M0MWE4YWFjMmEyMzk0ZjNlZjg0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZjOTFmNWYzMTkxNTQ4ZTA4MjkwNjA1Nzk4Njc2MTllLmJpbmRQb3B1cChwb3B1cF85ZDhjMzMyM2U1ZWE0MzNkYTIyYWUzZGEzZmFmMGJiZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZTlmODE3ZDdlODY0OGRiODE2MTBlYmQ4NzIwY2I3NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjU5NiwtMy4xMzk5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZkNjljOWM0YTIzNGJmOWE3ODgwODM3ZTU4M2NiNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZkNTQ0YjM3ZWI3NDBiOGFmYmY4NjMwY2RkYWE3NzggPSAkKCc8ZGl2IGlkPSJodG1sX2JmZDU0NGIzN2ViNzQwYjhhZmJmODYzMGNkZGFhNzc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EQUZJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmQ2OWM5YzRhMjM0YmY5YTc4ODA4MzdlNTgzY2I1Yi5zZXRDb250ZW50KGh0bWxfYmZkNTQ0YjM3ZWI3NDBiOGFmYmY4NjMwY2RkYWE3NzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTlmODE3ZDdlODY0OGRiODE2MTBlYmQ4NzIwY2I3Ni5iaW5kUG9wdXAocG9wdXBfMmZkNjljOWM0YTIzNGJmOWE3ODgwODM3ZTU4M2NiNWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzAxYmI3MDdlNTdhNGIzNTgzZDI5M2MzNzQ2NDYyM2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC43NzE3LC0yLjU2MDEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OGFkODY1YzdmY2U0MmI0ODNiMjk4Mzg0ZTRmZjAxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTVmMWVmNTc1YjQ0Yjg4ODNiYjEwMjkyYjlkMzg3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfODk1ZjFlZjU3NWI0NGI4ODgzYmIxMDI5MmI5ZDM4NzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRBR0FSSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOThhZDg2NWM3ZmNlNDJiNDgzYjI5ODM4NGU0ZmYwMTMuc2V0Q29udGVudChodG1sXzg5NWYxZWY1NzViNDRiODg4M2JiMTAyOTJiOWQzODczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzAxYmI3MDdlNTdhNGIzNTgzZDI5M2MzNzQ2NDYyM2QuYmluZFBvcHVwKHBvcHVwXzk4YWQ4NjVjN2ZjZTQyYjQ4M2IyOTgzODRlNGZmMDEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UzMmE1ZjViNWUxNTRhZWFhYTc4YzU3ZTBhMjJiMDI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS40NjMzMDgwNDU3NiwtMC4xNjM3NjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczMDdiOWZmMzkwNzQxYWNiMTM4MzJlNWNiNjY5YzMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjYmVlN2U4NmQzYTQ1ZTZhYWU0YThjNDYzYWU4ODY1ID0gJCgnPGRpdiBpZD0iaHRtbF83Y2JlZTdlODZkM2E0NWU2YWFlNGE4YzQ2M2FlODg2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+REFHT01CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzMwN2I5ZmYzOTA3NDFhY2IxMzgzMmU1Y2I2NjljMzMuc2V0Q29udGVudChodG1sXzdjYmVlN2U4NmQzYTQ1ZTZhYWU0YThjNDYzYWU4ODY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTMyYTVmNWI1ZTE1NGFlYWFhNzhjNTdlMGEyMmIwMjYuYmluZFBvcHVwKHBvcHVwXzczMDdiOWZmMzkwNzQxYWNiMTM4MzJlNWNiNjY5YzMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU4M2IwODcwOGQ0YzQ5NTlhMjY5OTcyZGNiZTJmZmVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMzY5MywyNC45MzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMzQ5MDgwMDEzMTM0MWZiOGUyNmE3ZTQzYjU4YmJhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzlhOWQ3NGUyN2E0YTEwOGQ0OTE0MTYyOGQzN2U1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfOGM5YTlkNzRlMjdhNGExMDhkNDkxNDE2MjhkMzdlNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRBR1U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzNDkwODAwMTMxMzQxZmI4ZTI2YTdlNDNiNThiYmE3LnNldENvbnRlbnQoaHRtbF84YzlhOWQ3NGUyN2E0YTEwOGQ0OTE0MTYyOGQzN2U1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU4M2IwODcwOGQ0YzQ5NTlhMjY5OTcyZGNiZTJmZmVjLmJpbmRQb3B1cChwb3B1cF9hMzQ5MDgwMDEzMTM0MWZiOGUyNmE3ZTQzYjU4YmJhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMDcxNGQyNmM4ZGQ0MjAzYTU0MGFhYWZmYjZkMTAzMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzguMzM5MDU2NDIwODcsMTEuMTUxMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzg0NTIxNDA5MmE2NGNkM2EyODlhZTkxYzkxNzQzODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU4YWZjYTgwMDk5NGFiN2FhY2FjMGZkZmZjNjNlZGIgPSAkKCc8ZGl2IGlkPSJodG1sXzllOGFmY2E4MDA5OTRhYjdhYWNhYzBmZGZmYzYzZWRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EQUtBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODQ1MjE0MDkyYTY0Y2QzYTI4OWFlOTFjOTE3NDM4Ny5zZXRDb250ZW50KGh0bWxfOWU4YWZjYTgwMDk5NGFiN2FhY2FjMGZkZmZjNjNlZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMDcxNGQyNmM4ZGQ0MjAzYTU0MGFhYWZmYjZkMTAzMi5iaW5kUG9wdXAocG9wdXBfYzg0NTIxNDA5MmE2NGNkM2EyODlhZTkxYzkxNzQzODcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWVlZTE1NDU4NmFiNGU3OWI2ZmY0MTIxNDk5MzNmNzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS42NTMsMjguOTcyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjJmYjIyMmI2OGE2NDFhYWEyMWU0MjU1MTFmNzdmNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGM5MDg1NDNmMDg4NDk2NzhkNjY4MmY0YTliMmNlYjEgPSAkKCc8ZGl2IGlkPSJodG1sXzBjOTA4NTQzZjA4ODQ5Njc4ZDY2ODJmNGE5YjJjZWIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EQUtITEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyZmIyMjJiNjhhNjQxYWFhMjFlNDI1NTExZjc3ZjRhLnNldENvbnRlbnQoaHRtbF8wYzkwODU0M2YwODg0OTY3OGQ2NjgyZjRhOWIyY2ViMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzllZWUxNTQ1ODZhYjRlNzliNmZmNDEyMTQ5OTMzZjc5LmJpbmRQb3B1cChwb3B1cF9mMmZiMjIyYjY4YTY0MWFhYTIxZTQyNTUxMWY3N2Y0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lM2MyZDUyYWRmYjU0ZTliOWU1MjA5YWRhNzQ3MzhhZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzguODIxNDcwOTA4MDEsMTQuMjg2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzNmY2VlZGY4ODg1NDI5Mzg3ZDJlZjQ3MDA0MDU0OGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU5MGVhYzFlMjE4NGRmMWFmNzhiYWZjMzJlNzBjYTAgPSAkKCc8ZGl2IGlkPSJodG1sXzllOTBlYWMxZTIxODRkZjFhZjc4YmFmYzMyZTcwY2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EQU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zM2ZjZWVkZjg4ODU0MjkzODdkMmVmNDcwMDQwNTQ4ZS5zZXRDb250ZW50KGh0bWxfOWU5MGVhYzFlMjE4NGRmMWFmNzhiYWZjMzJlNzBjYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lM2MyZDUyYWRmYjU0ZTliOWU1MjA5YWRhNzQ3MzhhZC5iaW5kUG9wdXAocG9wdXBfMzNmY2VlZGY4ODg1NDI5Mzg3ZDJlZjQ3MDA0MDU0OGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzBhZjg5ZTViMjEzNGFjMDk0NTVmOWY0ZDJmNmJlY2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjYxMTEyNDM3MzEsLTcuNjc1MzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyYjQ1ZTg4MTRjZTQyOGZiZDcyMTc2YzU5MmFlYjI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhY2IwMTM3OWE1ZTQ4YjFhNWM2NGJlZGI1YTEyNDQ5ID0gJCgnPGRpdiBpZD0iaHRtbF9lYWNiMDEzNzlhNWU0OGIxYTVjNjRiZWRiNWExMjQ0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+REFOPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmI0NWU4ODE0Y2U0MjhmYmQ3MjE3NmM1OTJhZWIyNS5zZXRDb250ZW50KGh0bWxfZWFjYjAxMzc5YTVlNDhiMWE1YzY0YmVkYjVhMTI0NDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMGFmODllNWIyMTM0YWMwOTQ1NWY5ZjRkMmY2YmVjZS5iaW5kUG9wdXAocG9wdXBfZjJiNDVlODgxNGNlNDI4ZmJkNzIxNzZjNTkyYWViMjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWZmOTUzNTIzOWU5NDZlMGE1YjUyMzE1YTA4M2I1ZWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjU5OTk2OTczMzUxLDM4LjY1NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhMzEyNmFhZjkyMDRjYjc5ZTlkYjQxYmNlYTI5MDU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4M2NlMGZiNTVlNTRlZTk4YThmZDNkMzIyMjBhN2EwID0gJCgnPGRpdiBpZD0iaHRtbF84ODNjZTBmYjU1ZTU0ZWU5OGE4ZmQzZDMyMjIwYTdhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+REFSQVNBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTMxMjZhYWY5MjA0Y2I3OWU5ZGI0MWJjZWEyOTA1NC5zZXRDb250ZW50KGh0bWxfODgzY2UwZmI1NWU1NGVlOThhOGZkM2QzMjIyMGE3YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZmY5NTM1MjM5ZTk0NmUwYTViNTIzMTVhMDgzYjVlYi5iaW5kUG9wdXAocG9wdXBfMWEzMTI2YWFmOTIwNGNiNzllOWRiNDFiY2VhMjkwNTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzM2MTA2OWE3MjQxNGU3YmIwZGFhMjM2Y2FiNDA2ZDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4Ljk2OTYyNTEwNDc1LDE1LjAyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQyNDA4Njk5YjJjNDBkYWFkNjMzMmU2MTllYWEwNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGRhM2ZkZTk4NTBiNDk0OGFmODk2YTIwZGMyMTgwYzIgPSAkKCc8ZGl2IGlkPSJodG1sXzBkYTNmZGU5ODUwYjQ5NDhhZjg5NmEyMGRjMjE4MGMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EQVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDI0MDg2OTliMmM0MGRhYWQ2MzMyZTYxOWVhYTA1ZS5zZXRDb250ZW50KGh0bWxfMGRhM2ZkZTk4NTBiNDk0OGFmODk2YTIwZGMyMTgwYzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMzYxMDY5YTcyNDE0ZTdiYjBkYWEyMzZjYWI0MDZkNy5iaW5kUG9wdXAocG9wdXBfZjQyNDA4Njk5YjJjNDBkYWFkNjMzMmU2MTllYWEwNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2Y3MDY5ZDlhZGJlNDdhZGJlMGUyNjZiYjY4MWJlYTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS41NDc2LDEzLjI2MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxNmNiNTcwMzFiYTQ3NDk5OTRjMzUzNzMxNzE4MmYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExYjJiOWU0ZDJlZjQzNjI5MGI4NTU2NDZmMzQxYzc2ID0gJCgnPGRpdiBpZD0iaHRtbF8xMWIyYjllNGQyZWY0MzYyOTBiODU1NjQ2ZjM0MWM3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+REFaQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzE2Y2I1NzAzMWJhNDc0OTk5NGMzNTM3MzE3MTgyZjAuc2V0Q29udGVudChodG1sXzExYjJiOWU0ZDJlZjQzNjI5MGI4NTU2NDZmMzQxYzc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2Y3MDY5ZDlhZGJlNDdhZGJlMGUyNjZiYjY4MWJlYTAuYmluZFBvcHVwKHBvcHVwXzMxNmNiNTcwMzFiYTQ3NDk5OTRjMzUzNzMxNzE4MmYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JjNGViOGI0Y2U4OTRkNjRiNmExZmY2ODQ4MTBhMTdkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMjgwOSwtMS4wNjI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDJmMTI5NzFhMjI0ZTk2OTA0NWU2ZjRjZjA0NTgxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZjU1NmU0OWM1NTE0NGQwYTBlOTk4ZTZjMWJlYzFiOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmY1NTZlNDljNTUxNDRkMGEwZTk5OGU2YzFiZWMxYjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRFRk9STzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQyZjEyOTcxYTIyNGU5NjkwNDVlNmY0Y2YwNDU4MTIuc2V0Q29udGVudChodG1sX2ZmNTU2ZTQ5YzU1MTQ0ZDBhMGU5OThlNmMxYmVjMWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmM0ZWI4YjRjZTg5NGQ2NGI2YTFmZjY4NDgxMGExN2QuYmluZFBvcHVwKHBvcHVwX2JkMmYxMjk3MWEyMjRlOTY5MDQ1ZTZmNGNmMDQ1ODEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2Y2VhNmEzOGMzNTQ4MzVhODlmZDZjZGM3NzYwYjc2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMTc3NSwxNy4yNjQ1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzEyYzgxMmMzZmY0ZDhkOTE5YWFiZDcxNDhiMWQ3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZTVjNzBjNGI2NzE0YTRkOTJhNzkxOTJlNWU2ZmY5NCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGU1YzcwYzRiNjcxNGE0ZDkyYTc5MTkyZTVlNmZmOTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRFS0FLSVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNzEyYzgxMmMzZmY0ZDhkOTE5YWFiZDcxNDhiMWQ3ZC5zZXRDb250ZW50KGh0bWxfOGU1YzcwYzRiNjcxNGE0ZDkyYTc5MTkyZTVlNmZmOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNmNlYTZhMzhjMzU0ODM1YTg5ZmQ2Y2RjNzc2MGI3Ni5iaW5kUG9wdXAocG9wdXBfZDcxMmM4MTJjM2ZmNGQ4ZDkxOWFhYmQ3MTQ4YjFkN2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzcwYmY0NjMwNzdjNDc2MzkyNWE4OTkwMjQ0YWM3YmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyMS41MTU4LC0xNS4xMTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0MTM2M2M2Njk2NjQ5ZTFhOTEwN2ZkYzA4NTgwMjI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1Y2IzZDhlYzg3ODQyMDNiMzJiM2Y5NWUxNGI3ZDllID0gJCgnPGRpdiBpZD0iaHRtbF9kNWNiM2Q4ZWM4Nzg0MjAzYjMyYjNmOTVlMTRiN2Q5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+REVMSU08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0MTM2M2M2Njk2NjQ5ZTFhOTEwN2ZkYzA4NTgwMjI4LnNldENvbnRlbnQoaHRtbF9kNWNiM2Q4ZWM4Nzg0MjAzYjMyYjNmOTVlMTRiN2Q5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M3MGJmNDYzMDc3YzQ3NjM5MjVhODk5MDI0NGFjN2JkLmJpbmRQb3B1cChwb3B1cF9kNDEzNjNjNjY5NjY0OWUxYTkxMDdmZGMwODU4MDIyOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iN2FlNzM5ZmJlYWI0YjY5ODMxNjdjZGNmNmUwZTZiNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjk4MzQsMy4yMTgzMTMyNDY0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTliMjdhNGUwOGVmNGNjZjg5ZDIyOWEwMmIwYmU1Y2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjNiNmFmY2Y1NTdiNDkzYTlmMWFmMGNkZWY3Y2ZjMGYgPSAkKCc8ZGl2IGlkPSJodG1sX2YzYjZhZmNmNTU3YjQ5M2E5ZjFhZjBjZGVmN2NmYzBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ERU5ESTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTliMjdhNGUwOGVmNGNjZjg5ZDIyOWEwMmIwYmU1Y2Muc2V0Q29udGVudChodG1sX2YzYjZhZmNmNTU3YjQ5M2E5ZjFhZjBjZGVmN2NmYzBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjdhZTczOWZiZWFiNGI2OTgzMTY3Y2RjZjZlMGU2YjUuYmluZFBvcHVwKHBvcHVwX2U5YjI3YTRlMDhlZjRjY2Y4OWQyMjlhMDJiMGJlNWNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJiNzlkN2UxYjcyNDRlYTc4ZGM3NzhmYjNlMGY1Mzc5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS45OTQ3ODA0ODgzNSwxMi4yNTA3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODU2MjFlZDFkOTI0ZTRjYTEwYjVhZGRkMDk0YzMyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2E4NDNhMDhmY2M0OTcwYTY4MGI1MGI3YjZhYzM1ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjNhODQzYTA4ZmNjNDk3MGE2ODBiNTBiN2I2YWMzNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRFUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4NTYyMWVkMWQ5MjRlNGNhMTBiNWFkZGQwOTRjMzI5LnNldENvbnRlbnQoaHRtbF9mM2E4NDNhMDhmY2M0OTcwYTY4MGI1MGI3YjZhYzM1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJiNzlkN2UxYjcyNDRlYTc4ZGM3NzhmYjNlMGY1Mzc5LmJpbmRQb3B1cChwb3B1cF8xODU2MjFlZDFkOTI0ZTRjYTEwYjVhZGRkMDk0YzMyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNTc1MTdjMmEwZTY0ZTMyYTQxYjk2NTRjMGJkMjE5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjk5OTUsLTEwLjMxNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmMWI3ZjVhNjc2YzQ5YWQ4MDI1MjE0ZjY5ZmY5Y2Y5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5Y2U4Y2QxNzhiOTRjMTVhYTQwM2VhY2JkOThlMzViID0gJCgnPGRpdiBpZD0iaHRtbF82OWNlOGNkMTc4Yjk0YzE1YWE0MDNlYWNiZDk4ZTM1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RElBTE9OS0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmMWI3ZjVhNjc2YzQ5YWQ4MDI1MjE0ZjY5ZmY5Y2Y5LnNldENvbnRlbnQoaHRtbF82OWNlOGNkMTc4Yjk0YzE1YWE0MDNlYWNiZDk4ZTM1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA1NzUxN2MyYTBlNjRlMzJhNDFiOTY1NGMwYmQyMTk0LmJpbmRQb3B1cChwb3B1cF8wZjFiN2Y1YTY3NmM0OWFkODAyNTIxNGY2OWZmOWNmOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lN2JmMDJiZTIxZTM0Njg5YTFmZmZmZmM1YjA5NzdjMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjAyODgsLTMuNDM5ODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzZTBjNTkwMzY2YjQwNzhiNDMwZmRiMzE4NTMyZDhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2MDNhNTAyYTgwYTQ2YmQ5NWUzNzM1MTBlYThkYTg4ID0gJCgnPGRpdiBpZD0iaHRtbF82NjAzYTUwMmE4MGE0NmJkOTVlMzczNTEwZWE4ZGE4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RElBTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODNlMGM1OTAzNjZiNDA3OGI0MzBmZGIzMTg1MzJkOGYuc2V0Q29udGVudChodG1sXzY2MDNhNTAyYTgwYTQ2YmQ5NWUzNzM1MTBlYThkYTg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTdiZjAyYmUyMWUzNDY4OWExZmZmZmZjNWIwOTc3YzAuYmluZFBvcHVwKHBvcHVwXzgzZTBjNTkwMzY2YjQwNzhiNDMwZmRiMzE4NTMyZDhmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ2YzYxODc5MjBjZTRjODZhMTRkOGVkMTM2MTM5ODE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS41ODczMzU3OTU3NywtNS42NDMyMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjRjYzU2YWM1NDk0NDEwOWEyYTJlMmI1ZmU0ODVhOTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWMxOWZkM2I5NWI3NDY3NGFlZDAzODJlZTA3ZDI2NGEgPSAkKCc8ZGl2IGlkPSJodG1sXzVjMTlmZDNiOTViNzQ2NzRhZWQwMzgyZWUwN2QyNjRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ESURBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGNjNTZhYzU0OTQ0MTA5YTJhMmUyYjVmZTQ4NWE5NC5zZXRDb250ZW50KGh0bWxfNWMxOWZkM2I5NWI3NDY3NGFlZDAzODJlZTA3ZDI2NGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NmM2MTg3OTIwY2U0Yzg2YTE0ZDhlZDEzNjEzOTgxNS5iaW5kUG9wdXAocG9wdXBfMjRjYzU2YWM1NDk0NDEwOWEyYTJlMmI1ZmU0ODVhOTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTg2ZjBkY2RlOWEzNGZlMmJlNGZhMjBiODBkOTFjZjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjM3NDc3MTk0NTMyLDMzLjcwMzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxNWVlODc5MWI1NjQ3ZjI5YTc5MTlhNjgyYzhjZmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmNzI4ZGYyYTUyNTQwZTE4NjlhZTgxZDMxNDAwZjY5ID0gJCgnPGRpdiBpZD0iaHRtbF9kZjcyOGRmMmE1MjU0MGUxODY5YWU4MWQzMTQwMGY2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RElESU5HQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE1ZWU4NzkxYjU2NDdmMjlhNzkxOWE2ODJjOGNmY2Iuc2V0Q29udGVudChodG1sX2RmNzI4ZGYyYTUyNTQwZTE4NjlhZTgxZDMxNDAwZjY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTg2ZjBkY2RlOWEzNGZlMmJlNGZhMjBiODBkOTFjZjIuYmluZFBvcHVwKHBvcHVwXzUxNWVlODc5MWI1NjQ3ZjI5YTc5MTlhNjgyYzhjZmNiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY0M2I1ZTMxMTMxNjQwYmE4M2JiOTMzOGI0N2EwNzllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuMzk0OTcsMzguOTU3OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE4NTQyZTBjODIzNDY2YWE4NTk1NTg2ZTk0ZmY3MGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTcxYzA0MDUwNTA0NDJjNmIwNmVkZjQ1OWFlOWE0M2IgPSAkKCc8ZGl2IGlkPSJodG1sXzE3MWMwNDA1MDUwNDQyYzZiMDZlZGY0NTlhZTlhNDNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ESUdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTg1NDJlMGM4MjM0NjZhYTg1OTU1ODZlOTRmZjcwYy5zZXRDb250ZW50KGh0bWxfMTcxYzA0MDUwNTA0NDJjNmIwNmVkZjQ1OWFlOWE0M2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NDNiNWUzMTEzMTY0MGJhODNiYjkzMzhiNDdhMDc5ZS5iaW5kUG9wdXAocG9wdXBfMTE4NTQyZTBjODIzNDY2YWE4NTk1NTg2ZTk0ZmY3MGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjc2ZDFjMjQ3MDlmNGJmOGFkNjg0MDgxMWI2ZjkyYWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4zMzU3LDMwLjUyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWFhOTEzYzI2ZWQ0NGY0Mjg0Yjc5Y2Y3NTBkNmMwZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU2ZGFiY2MxMGUyNDc1MWFkMjhlMTY1ZjQxZWY1M2UgPSAkKCc8ZGl2IGlkPSJodG1sXzVlNmRhYmNjMTBlMjQ3NTFhZDI4ZTE2NWY0MWVmNTNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ESUxMSU5HPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YWE5MTNjMjZlZDQ0ZjQyODRiNzljZjc1MGQ2YzBlOC5zZXRDb250ZW50KGh0bWxfNWU2ZGFiY2MxMGUyNDc1MWFkMjhlMTY1ZjQxZWY1M2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNzZkMWMyNDcwOWY0YmY4YWQ2ODQwODExYjZmOTJhZS5iaW5kUG9wdXAocG9wdXBfOWFhOTEzYzI2ZWQ0NGY0Mjg0Yjc5Y2Y3NTBkNmMwZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzU5NDIzOTg2OGNkNDFlY2EyMjE3ODA4NTgzMjQ0ZjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjQwODAwNDc1MjYsMjkuNDA0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmUxY2QxZDgzMTRlNGE3ZWI4NzdiMjk5ZWM2MjA2YWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWNiMTI5ZGM5OGNhNGQyMDk0MzUwZTc5ZTU4MzZjYzQgPSAkKCc8ZGl2IGlkPSJodG1sX2VjYjEyOWRjOThjYTRkMjA5NDM1MGU3OWU1ODM2Y2M0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ESU5LQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmUxY2QxZDgzMTRlNGE3ZWI4NzdiMjk5ZWM2MjA2YWMuc2V0Q29udGVudChodG1sX2VjYjEyOWRjOThjYTRkMjA5NDM1MGU3OWU1ODM2Y2M0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzU5NDIzOTg2OGNkNDFlY2EyMjE3ODA4NTgzMjQ0ZjcuYmluZFBvcHVwKHBvcHVwXzZlMWNkMWQ4MzE0ZTRhN2ViODc3YjI5OWVjNjIwNmFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBiNTU1ZDljZDYxMzQwYmJiMzI3ODQ0ODEzNDI2OTc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODM5MywtMTYuNDA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWNhNDAyNWViYmQ0NTgyOWRmZTFkODU4Mjk0MWExOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzU5MmJmN2MyY2Q0NTAwOGExMDYyZTYzY2Y2NTNkZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWM1OTJiZjdjMmNkNDUwMDhhMTA2MmU2M2NmNjUzZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRJT0xBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWNhNDAyNWViYmQ0NTgyOWRmZTFkODU4Mjk0MWExOC5zZXRDb250ZW50KGh0bWxfZWM1OTJiZjdjMmNkNDUwMDhhMTA2MmU2M2NmNjUzZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYjU1NWQ5Y2Q2MTM0MGJiYjMyNzg0NDgxMzQyNjk3NC5iaW5kUG9wdXAocG9wdXBfN2VjYTQwMjVlYmJkNDU4MjlkZmUxZDg1ODI5NDFhMTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjk5ODRiNDU3OTA2NGZjYjhmOGE0ZDMxMTcyNGY1ZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4Ljk3MTUxNjM3MTYzLC00LjE1MjA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGFhYmFmMmI4M2E0NTcxOWIwNzk2MGYyMjhjNDQ5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNDlkMTEzOGVmNDU0Zjk3OGNlMmY2OGI4M2ZjMmZjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzQ5ZDExMzhlZjQ1NGY5NzhjZTJmNjhiODNmYzJmYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRJVUxBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGFhYmFmMmI4M2E0NTcxOWIwNzk2MGYyMjhjNDQ5MS5zZXRDb250ZW50KGh0bWxfYzQ5ZDExMzhlZjQ1NGY5NzhjZTJmNjhiODNmYzJmYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82OTk4NGI0NTc5MDY0ZmNiOGY4YTRkMzExNzI0ZjVmOC5iaW5kUG9wdXAocG9wdXBfZDhhYWJhZjJiODNhNDU3MTliMDc5NjBmMjI4YzQ0OTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzAzOThiMjI2MzgzNDdiNTgxM2M2OTk4MDI5M2ZkNDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC40Mzk4LC0zLjIxNjcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjEzOWJmNTkwZjQ0ZmZlODVhOTJmNmQ2ZDQ0YjQxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTY5YjgxYzhlZjY0NTI3YmUyZTZiMzc5ODhhYmYyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTU2OWI4MWM4ZWY2NDUyN2JlMmU2YjM3OTg4YWJmMjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRPR09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjEzOWJmNTkwZjQ0ZmZlODVhOTJmNmQ2ZDQ0YjQxZC5zZXRDb250ZW50KGh0bWxfZTU2OWI4MWM4ZWY2NDUyN2JlMmU2YjM3OTg4YWJmMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMDM5OGIyMjYzODM0N2I1ODEzYzY5OTgwMjkzZmQ0OC5iaW5kUG9wdXAocG9wdXBfYzIxMzliZjU5MGY0NGZmZTg1YTkyZjZkNmQ0NGI0MWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjE4NzRiZjk5ZDRlNDEwNTllNDg0MWMyZGNhYjhkYTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC4wMzYyMDA0LDM1Ljg0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU1ZDQ0ZjIwZTlkNDcwZmEzY2M4MTNjY2UwYTZiNmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY2MTNhYjRiNzYwNDc2ZmE5ZTY3ZDEzNTk5NGVlM2IgPSAkKCc8ZGl2IGlkPSJodG1sXzc2NjEzYWI0Yjc2MDQ3NmZhOWU2N2QxMzU5OTRlZTNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET1JPQk88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlNWQ0NGYyMGU5ZDQ3MGZhM2NjODEzY2NlMGE2YjZjLnNldENvbnRlbnQoaHRtbF83NjYxM2FiNGI3NjA0NzZmYTllNjdkMTM1OTk0ZWUzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIxODc0YmY5OWQ0ZTQxMDU5ZTQ4NDFjMmRjYWI4ZGEzLmJpbmRQb3B1cChwb3B1cF9lZTVkNDRmMjBlOWQ0NzBmYTNjYzgxM2NjZTBhNmI2Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNmM2N2RlMzQ0ZGY0OGNmOGMwZWU3NzAwZjEwYzk4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjQxNzQsLTMuODI2MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljNjIyZDVkZTAxNTQyM2JhNTE5MDM4OGZiYzczNGI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxMTMwMDEwY2JhOTQ5ZmI5ODczMjhjMTdmMzUzMjk3ID0gJCgnPGRpdiBpZD0iaHRtbF9kMTEzMDAxMGNiYTk0OWZiOTg3MzI4YzE3ZjM1MzI5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RE9ST1NJRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM2MjJkNWRlMDE1NDIzYmE1MTkwMzg4ZmJjNzM0YjUuc2V0Q29udGVudChodG1sX2QxMTMwMDEwY2JhOTQ5ZmI5ODczMjhjMTdmMzUzMjk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjZjNjdkZTM0NGRmNDhjZjhjMGVlNzcwMGYxMGM5ODEuYmluZFBvcHVwKHBvcHVwXzljNjIyZDVkZTAxNTQyM2JhNTE5MDM4OGZiYzczNGI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM1MGY4MDE5NjBkNjQ2YWU4MGE3MTc0OWYyZTFiMmNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzAuNjYwOCwtNi4zNjU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDJhNWFlMzlkZTc0MTczODliNWJlM2Q0MTkwYjllZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTEyZTAyNGUzZjk0MzdkYWZkNzQ0MzgxYmMyOTc2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDExMmUwMjRlM2Y5NDM3ZGFmZDc0NDM4MWJjMjk3NjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRSQVdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDJhNWFlMzlkZTc0MTczODliNWJlM2Q0MTkwYjllZS5zZXRDb250ZW50KGh0bWxfNDExMmUwMjRlM2Y5NDM3ZGFmZDc0NDM4MWJjMjk3NjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zNTBmODAxOTYwZDY0NmFlODBhNzE3NDlmMmUxYjJjZi5iaW5kUG9wdXAocG9wdXBfMjQyYTVhZTM5ZGU3NDE3Mzg5YjViZTNkNDE5MGI5ZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGYwZDI4OTgwMmJlNDM5Njg5MDQ0ZjFmZTRmOGNiOGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4zNTIzLC0xMi4xNDc5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODZiNTlmMjEzYjE0ODUwOWI5MGIyNjFmMjAxODU1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYWIxNWMxOTcyYTM0YWFkYTZhOWM1MGI4OGQ4ZTQ0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmFiMTVjMTk3MmEzNGFhZGE2YTljNTBiODhkOGU0NDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRVQUlTSDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDg2YjU5ZjIxM2IxNDg1MDliOTBiMjYxZjIwMTg1NTIuc2V0Q29udGVudChodG1sX2ZhYjE1YzE5NzJhMzRhYWRhNmE5YzUwYjg4ZDhlNDQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGYwZDI4OTgwMmJlNDM5Njg5MDQ0ZjFmZTRmOGNiOGEuYmluZFBvcHVwKHBvcHVwX2Q4NmI1OWYyMTNiMTQ4NTA5YjkwYjI2MWYyMDE4NTUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUxMmUwZDNjNDM5ODQwNzk5NTg1NWVjNzQ3MDVjNTcyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy43MzI4OTgwNDQxNCw5Ljk1MzQ4OTMwODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiYmFlYjg5NjJiODRlZGE5ZjY4OGEwMjNhNDI4NjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3NmIxYWFlMTFhNDQwNGU4ZmUwNDcxOGU5MDQxYjVjID0gJCgnPGRpdiBpZD0iaHRtbF9jNzZiMWFhZTExYTQ0MDRlOGZlMDQ3MThlOTA0MWI1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RFVBTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiYmFlYjg5NjJiODRlZGE5ZjY4OGEwMjNhNDI4NjkyLnNldENvbnRlbnQoaHRtbF9jNzZiMWFhZTExYTQ0MDRlOGZlMDQ3MThlOTA0MWI1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUxMmUwZDNjNDM5ODQwNzk5NTg1NWVjNzQ3MDVjNTcyLmJpbmRQb3B1cChwb3B1cF9kYmJhZWI4OTYyYjg0ZWRhOWY2ODhhMDIzYTQyODY5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MmJiM2UxNTAwN2E0YjUzOTliMzBhNjg4MTUzZGEzYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjY4MiwtMi40MDE1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTMwZjY5ZDU0ZDU5NDcwNWE2ODZkNzgwMDg4NzRkNGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmFjNzA3MTFmNmYzNGI2ZWE0ZDA3NGJkNDBlYzUzMDUgPSAkKCc8ZGl2IGlkPSJodG1sXzJhYzcwNzExZjZmMzRiNmVhNGQwNzRiZDQwZWM1MzA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EVUktTUVOSUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzMGY2OWQ1NGQ1OTQ3MDVhNjg2ZDc4MDA4ODc0ZDRmLnNldENvbnRlbnQoaHRtbF8yYWM3MDcxMWY2ZjM0YjZlYTRkMDc0YmQ0MGVjNTMwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUyYmIzZTE1MDA3YTRiNTM5OWIzMGE2ODgxNTNkYTNjLmJpbmRQb3B1cChwb3B1cF81MzBmNjlkNTRkNTk0NzA1YTY4NmQ3ODAwODg3NGQ0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YzM1MzdjOWZmNTA0OWE1YmZkYTA3OWQ5OWM1ZTAwZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjg3MjIsMTMuMTYyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGRiOTVhNmY4ZjA5NGNjNTk4OGQ4YjZhOTJiN2FlMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2FlMjcwOWFiMzc2NDFlMjk2YzE0MWM5YWRhMGY5YjYgPSAkKCc8ZGl2IGlkPSJodG1sXzdhZTI3MDlhYjM3NjQxZTI5NmMxNDFjOWFkYTBmOWI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EVU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZGI5NWE2ZjhmMDk0Y2M1OTg4ZDhiNmE5MmI3YWUyMy5zZXRDb250ZW50KGh0bWxfN2FlMjcwOWFiMzc2NDFlMjk2YzE0MWM5YWRhMGY5YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YzM1MzdjOWZmNTA0OWE1YmZkYTA3OWQ5OWM1ZTAwZC5iaW5kUG9wdXAocG9wdXBfZGRiOTVhNmY4ZjA5NGNjNTk4OGQ4YjZhOTJiN2FlMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzAxODBkNzE1OGJkNDQyNGExYjgwODhjMDYxZjY2ZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjA5ODM1ODA4NDE1LDE0LjEzMThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwYTJiMGNkODMyMDRjZDhhNzFlMjk4Y2Q3NTk3NjdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzM2VmMDY0YWU3NTQ1M2NiNzQ2OTQ2NmE0NmM2NTkxID0gJCgnPGRpdiBpZD0iaHRtbF9lMzNlZjA2NGFlNzU0NTNjYjc0Njk0NjZhNDZjNjU5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RFVSVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBhMmIwY2Q4MzIwNGNkOGE3MWUyOThjZDc1OTc2N2Quc2V0Q29udGVudChodG1sX2UzM2VmMDY0YWU3NTQ1M2NiNzQ2OTQ2NmE0NmM2NTkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzAxODBkNzE1OGJkNDQyNGExYjgwODhjMDYxZjY2ZjguYmluZFBvcHVwKHBvcHVwXzAwYTJiMGNkODMyMDRjZDhhNzFlMjk4Y2Q3NTk3NjdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZmMDcwMmMyMmQ0YjRkMzJhZTk3MGI5ODJmNDBlNjY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuODM3MTcsMzkuMjExNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdiNTYxOGJhNGZiNDFkY2E3M2I2MjM1NTZmZDM4MDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQ2N2MxOTE1M2UwNDIxZmIxM2FlZGYyZGY2YzFhYTUgPSAkKCc8ZGl2IGlkPSJodG1sXzJkNjdjMTkxNTNlMDQyMWZiMTNhZWRmMmRmNmMxYWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EVVJVTUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3YjU2MThiYTRmYjQxZGNhNzNiNjIzNTU2ZmQzODA3LnNldENvbnRlbnQoaHRtbF8yZDY3YzE5MTUzZTA0MjFmYjEzYWVkZjJkZjZjMWFhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmMDcwMmMyMmQ0YjRkMzJhZTk3MGI5ODJmNDBlNjY2LmJpbmRQb3B1cChwb3B1cF9mN2I1NjE4YmE0ZmI0MWRjYTczYjYyMzU1NmZkMzgwNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZDE4MTYzMzA0MzI0YmUxODU4NzgwMjEwYjMwZTNiYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNjc1MDExMzE0NzQsMTQuMTY4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWFjNTRmMGU2MmRiNGI0Y2IzYzY2MjVhODljN2JmMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzUzNjdhZjNiMDdjNGMxMTk1Y2VjOTE1M2FiOGQyNGMgPSAkKCc8ZGl2IGlkPSJodG1sXzc1MzY3YWYzYjA3YzRjMTE5NWNlYzkxNTNhYjhkMjRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EWkVNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYWM1NGYwZTYyZGI0YjRjYjNjNjYyNWE4OWM3YmYwOS5zZXRDb250ZW50KGh0bWxfNzUzNjdhZjNiMDdjNGMxMTk1Y2VjOTE1M2FiOGQyNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZDE4MTYzMzA0MzI0YmUxODU4NzgwMjEwYjMwZTNiYy5iaW5kUG9wdXAocG9wdXBfMWFjNTRmMGU2MmRiNGI0Y2IzYzY2MjVhODljN2JmMDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWJhNWRlNTRmODJhNGM2ZWJmYTA0Y2E4NzYxYzBmY2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4yNzE5NywxOS40MzA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMTY2N2IzZDcxMzQ0OTNlYThlMDkzYjkxOGNkNDRmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMTg2YzdkMmYyOWM0ZmIyYTEzZGM0NTEwMTMzNjA1YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDE4NmM3ZDJmMjljNGZiMmExM2RjNDUxMDEzMzYwNWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRaSU5HPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTY2N2IzZDcxMzQ0OTNlYThlMDkzYjkxOGNkNDRmNy5zZXRDb250ZW50KGh0bWxfMDE4NmM3ZDJmMjljNGZiMmExM2RjNDUxMDEzMzYwNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YmE1ZGU1NGY4MmE0YzZlYmZhMDRjYTg3NjFjMGZjZi5iaW5kUG9wdXAocG9wdXBfZjE2NjdiM2Q3MTM0NDkzZWE4ZTA5M2I5MThjZDQ0ZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWIwMTMzMDlmYmI5NGIxZmE4N2M2Nzg3MGY5NDMyYTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjQ3MDk2ODE4MDY4LC0zLjkxODQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWQ4NGY4MmFmOWM0MzYxYTRmZGZjZGE0MjA0MjRhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZWZhZWY1ZjliYjU0YmUzODAwZDI5MzU2MmE0NjcxNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGVmYWVmNWY5YmI1NGJlMzgwMGQyOTM1NjJhNDY3MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVCUklFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWQ4NGY4MmFmOWM0MzYxYTRmZGZjZGE0MjA0MjRhYS5zZXRDb250ZW50KGh0bWxfMGVmYWVmNWY5YmI1NGJlMzgwMGQyOTM1NjJhNDY3MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYjAxMzMwOWZiYjk0YjFmYTg3YzY3ODcwZjk0MzJhMy5iaW5kUG9wdXAocG9wdXBfNGVkODRmODJhZjljNDM2MWE0ZmRmY2RhNDIwNDI0YWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmQwYWFiMjBlMDBiNDI4NWI4ODIyNzExMWQ0YzY2YzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjMyMTI3MTg5MTk2LDUuODAzNjkxNTgwNjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4MWRhNGMyNzQyYTRkMzRhY2I1OTA1MTA1ZjUyYjg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzMDM1OWZjM2RiMzRlYmRhNzlkZDYzN2QyOGNmMjA2ID0gJCgnPGRpdiBpZD0iaHRtbF84MzAzNTlmYzNkYjM0ZWJkYTc5ZGQ2MzdkMjhjZjIwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RURPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODFkYTRjMjc0MmE0ZDM0YWNiNTkwNTEwNWY1MmI4NS5zZXRDb250ZW50KGh0bWxfODMwMzU5ZmMzZGIzNGViZGE3OWRkNjM3ZDI4Y2YyMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZDBhYWIyMGUwMGI0Mjg1Yjg4MjI3MTExZDRjNjZjMS5iaW5kUG9wdXAocG9wdXBfNTgxZGE0YzI3NDJhNGQzNGFjYjU5MDUxMDVmNTJiODUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmI3YTJiMzQ5NDViNGYzNGE3ODkyOTMyMTA3NGIzNDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3Ljg4Nzg4NzI2Nzk0LDIuNjIyNzMwNDEwNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY1MzQzZTM0ODVkNDllMjlkZTAwNzJlZGFjNjFhNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzgxN2M3MzhkYjA1NGQwZWJlNTM0YTg3ODk2ODVhYzAgPSAkKCc8ZGl2IGlkPSJodG1sXzM4MTdjNzM4ZGIwNTRkMGViZTUzNGE4Nzg5Njg1YWMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FR0JBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjUzNDNlMzQ4NWQ0OWUyOWRlMDA3MmVkYWM2MWE3OS5zZXRDb250ZW50KGh0bWxfMzgxN2M3MzhkYjA1NGQwZWJlNTM0YTg3ODk2ODVhYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iYjdhMmIzNDk0NWI0ZjM0YTc4OTI5MzIxMDc0YjM0OS5iaW5kUG9wdXAocG9wdXBfZmY1MzQzZTM0ODVkNDllMjlkZTAwNzJlZGFjNjFhNzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmI3ZGM2YmYwOTRjNGQzOGFmZWRiNmI2YzU5NDE1ZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjU1Njc2MjE4NTAxLDguODMwODgxMjg0MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmMGVmNzA5OWI2YzQyM2ZhNjdhMmVjZjIxY2ViM2ZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U0Y2FmZWQ4YjM4MjRiN2I4ODgxYzcyZTNjZTJiMjkzID0gJCgnPGRpdiBpZD0iaHRtbF9lNGNhZmVkOGIzODI0YjdiODg4MWM3MmUzY2UyYjI5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RUdFREU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmMGVmNzA5OWI2YzQyM2ZhNjdhMmVjZjIxY2ViM2ZkLnNldENvbnRlbnQoaHRtbF9lNGNhZmVkOGIzODI0YjdiODg4MWM3MmUzY2UyYjI5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZiN2RjNmJmMDk0YzRkMzhhZmVkYjZiNmM1OTQxNWYxLmJpbmRQb3B1cChwb3B1cF9kZjBlZjcwOTliNmM0MjNmYTY3YTJlY2YyMWNlYjNmZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZTNlZWVkZWM5YzM0NmI3YTE5MTgxZmNjNTZmMmVhMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzI4LjAxNTMsMzEuMTczOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGExZDUwODE2YjgwNGYxMTk4MGU1ODY2MzU5YmM1NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQ0MjNmODg4NzZjNDRjNDkzYWVmNDg4OWM4YzFhZTEgPSAkKCc8ZGl2IGlkPSJodG1sXzY0NDIzZjg4ODc2YzQ0YzQ5M2FlZjQ4ODljOGMxYWUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FR1lQVElBTlM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhMWQ1MDgxNmI4MDRmMTE5ODBlNTg2NjM1OWJjNTQ1LnNldENvbnRlbnQoaHRtbF82NDQyM2Y4ODg3NmM0NGM0OTNhZWY0ODg5YzhjMWFlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNlM2VlZWRlYzljMzQ2YjdhMTkxODFmY2M1NmYyZWEwLmJpbmRQb3B1cChwb3B1cF9kYTFkNTA4MTZiODA0ZjExOTgwZTU4NjYzNTliYzU0NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NTg2Mjc3ZGUzYTM0MTlkYjg2NGZlMzA2NDk5NzU4OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuMTkwOTIzMDE0NTEsNS4zNjI3NDU3NDM2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY5YTdlZGI5MzVhNGQ0MmIyYWNmNjQ0Y2Q0ZDc3MTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2E3NThhM2ZjNDg5NDA4Y2E4ZTYxOTc2OWViMWI0ZTEgPSAkKCc8ZGl2IGlkPSJodG1sX2NhNzU4YTNmYzQ4OTQwOGNhOGU2MTk3NjllYjFiNGUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FS0lUSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmY5YTdlZGI5MzVhNGQ0MmIyYWNmNjQ0Y2Q0ZDc3MTMuc2V0Q29udGVudChodG1sX2NhNzU4YTNmYzQ4OTQwOGNhOGU2MTk3NjllYjFiNGUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODU4NjI3N2RlM2EzNDE5ZGI4NjRmZTMwNjQ5OTc1ODguYmluZFBvcHVwKHBvcHVwXzJmOWE3ZWRiOTM1YTRkNDJiMmFjZjY0NGNkNGQ3NzEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM1NjM3Y2Q0ZGU3MDQ5MzBhMmE5ZWQyN2NlNzZlNzI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS42MTUyMzM2ODYwNiw4LjgwNTM3Mjc0Mzk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MGNjOGYwMjM1OGY0ZjY1OTM4ODc3MTE5ZWIwOWVhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NWNhMmE3NDJlZWU0MjI4YjBmOTY4MTVjODlmMmNiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDVjYTJhNzQyZWVlNDIyOGIwZjk2ODE1Yzg5ZjJjYjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVLT0k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwY2M4ZjAyMzU4ZjRmNjU5Mzg4NzcxMTllYjA5ZWE0LnNldENvbnRlbnQoaHRtbF80NWNhMmE3NDJlZWU0MjI4YjBmOTY4MTVjODlmMmNiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM1NjM3Y2Q0ZGU3MDQ5MzBhMmE5ZWQyN2NlNzZlNzI1LmJpbmRQb3B1cChwb3B1cF82MGNjOGYwMjM1OGY0ZjY1OTM4ODc3MTE5ZWIwOWVhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NDVlMmQ4ZDFmNmI0MjNlYThhYTFlYzAxMzcxN2NiYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjAwMTA2LDE4LjcyNTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2YTRkODMzYmJjNTQzYzhiNDhlOTlhN2UwNjQ2NTgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NDQ1NmNkNzdiNTQxN2JiMzM0MzMyMTQ0MDE2ZTcxID0gJCgnPGRpdiBpZD0iaHRtbF8xNDQ0NTZjZDc3YjU0MTdiYjMzNDMzMjE0NDAxNmU3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RUtPTkRBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmE0ZDgzM2JiYzU0M2M4YjQ4ZTk5YTdlMDY0NjU4My5zZXRDb250ZW50KGh0bWxfMTQ0NDU2Y2Q3N2I1NDE3YmIzMzQzMzIxNDQwMTZlNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NDVlMmQ4ZDFmNmI0MjNlYThhYTFlYzAxMzcxN2NiYy5iaW5kUG9wdXAocG9wdXBfNzZhNGQ4MzNiYmM1NDNjOGI0OGU5OWE3ZTA2NDY1ODMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDAzY2QxMDIwMjM4NDk5YjgyNGJhMjI3YzZiZGRlOGUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4zNjI3LDQyLjc2NDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1NzA3ZGRjZGYzODQ2NjRhZDgyYzYyNjA3N2EyNzFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjNzE1MDRiOTg1YTQ4YTk5N2ViMGRmMGE5YTQxNjlhID0gJCgnPGRpdiBpZD0iaHRtbF83YzcxNTA0Yjk4NWE0OGE5OTdlYjBkZjBhOWE0MTY5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RVNBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTcwN2RkY2RmMzg0NjY0YWQ4MmM2MjYwNzdhMjcxZS5zZXRDb250ZW50KGh0bWxfN2M3MTUwNGI5ODVhNDhhOTk3ZWIwZGYwYTlhNDE2OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMDNjZDEwMjAyMzg0OTliODI0YmEyMjdjNmJkZGU4ZS5iaW5kUG9wdXAocG9wdXBfMTU3MDdkZGNkZjM4NDY2NGFkODJjNjI2MDc3YTI3MWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWVlMTdlYmU2MTliNDY4Yjk0Nzk4MDRmNzJhMTU2ODkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjYxMTc1MDQ4MDEyLDAuODUzODc1MzYxOTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4OTE5MGQwMGE1NDRkYjk4ODYxMmFhNWNmNDE1ODcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmYWEzYTFjNzM5ZDQ2MTZhZWYyNGU5N2UzYWUwN2EzID0gJCgnPGRpdiBpZD0iaHRtbF8zZmFhM2ExYzczOWQ0NjE2YWVmMjRlOTdlM2FlMDdhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RVdFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODkxOTBkMDBhNTQ0ZGI5ODg2MTJhYTVjZjQxNTg3MC5zZXRDb250ZW50KGh0bWxfM2ZhYTNhMWM3MzlkNDYxNmFlZjI0ZTk3ZTNhZTA3YTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZWUxN2ViZTYxOWI0NjhiOTQ3OTgwNGY3MmExNTY4OS5iaW5kUG9wdXAocG9wdXBfODg5MTkwZDAwYTU0NGRiOTg4NjEyYWE1Y2Y0MTU4NzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjZlNGQ5MGRjZWY3NDQ5OGE4ZTRjM2JlYzNiZjIwYjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjY1Njg5NDk5NzQ0LDMxLjAyODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkNTQ4YjU0Y2QwNDRjZWE5YTA5YmQ0YWY5MzBjZWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzYmE4ZDgyYzk2NTQ5NzdiOTNmOWVhZDBkNDU4ZmRkID0gJCgnPGRpdiBpZD0iaHRtbF8xM2JhOGQ4MmM5NjU0OTc3YjkzZjllYWQwZDQ1OGZkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkFKVUxVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDU0OGI1NGNkMDQ0Y2VhOWEwOWJkNGFmOTMwY2VjMi5zZXRDb250ZW50KGh0bWxfMTNiYThkODJjOTY1NDk3N2I5M2Y5ZWFkMGQ0NThmZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNmU0ZDkwZGNlZjc0NDk4YThlNGMzYmVjM2JmMjBiOS5iaW5kUG9wdXAocG9wdXBfNmQ1NDhiNTRjZDA0NGNlYTlhMDliZDRhZjkzMGNlYzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2QwZDU1NzU2ZjY2NGE3NWE0Y2U2YTdkYWM0MWUyMDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5Ljc5NTc2MzYwOTMxLDEzLjY2NTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzMzZmODE1ODEzNjRiMTE5ZWZmNDM0MzcxMDEyNTA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwZGE4YzE0ZTczOTRhODU5NDdhNGNhZjQ5MmJmYjcxID0gJCgnPGRpdiBpZD0iaHRtbF85MGRhOGMxNGU3Mzk0YTg1OTQ3YTRjYWY0OTJiZmI3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkFMSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDMzNmY4MTU4MTM2NGIxMTllZmY0MzQzNzEwMTI1MDguc2V0Q29udGVudChodG1sXzkwZGE4YzE0ZTczOTRhODU5NDdhNGNhZjQ5MmJmYjcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2QwZDU1NzU2ZjY2NGE3NWE0Y2U2YTdkYWM0MWUyMDYuYmluZFBvcHVwKHBvcHVwX2QzMzZmODE1ODEzNjRiMTE5ZWZmNDM0MzcxMDEyNTA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQyNzZmN2FmNGQ2ZDQxZTM4NTRlN2ZlZDM4OGEwMjc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMS43MzAzMTk2NTExOCwxMS43NDgxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Y2Q2Yjc3Zjc5YTQ0ZjhhYTIwY2NlM2IzYzBhNDdiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNjE4OTc0MGFhYTc0YTdkYWQ4MWQ1M2NhNzljYTRhNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMjYxODk3NDBhYWE3NGE3ZGFkODFkNTNjYTc5Y2E0YTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZBTkc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZDZiNzdmNzlhNDRmOGFhMjBjY2UzYjNjMGE0N2I1LnNldENvbnRlbnQoaHRtbF8yNjE4OTc0MGFhYTc0YTdkYWQ4MWQ1M2NhNzljYTRhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyNzZmN2FmNGQ2ZDQxZTM4NTRlN2ZlZDM4OGEwMjc0LmJpbmRQb3B1cChwb3B1cF84Y2Q2Yjc3Zjc5YTQ0ZjhhYTIwY2NlM2IzYzBhNDdiNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MTc2MWJjMjkzMWI0ZTlkYWRiNjk4YzlhMzgxZjE0NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUuNDQxMjA4MTM3OTksLTAuOTQwODRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjOWY4ZGFlZjE0YzQ0MzNiZDBmZWJjNjkyY2YyMzIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5MGMwYjllNmM4NzRmZTJiYWYxYzMyMmU2NTJkNWMzID0gJCgnPGRpdiBpZD0iaHRtbF8xOTBjMGI5ZTZjODc0ZmUyYmFmMWMzMjJlNjUyZDVjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkFOVEk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjOWY4ZGFlZjE0YzQ0MzNiZDBmZWJjNjkyY2YyMzIwLnNldENvbnRlbnQoaHRtbF8xOTBjMGI5ZTZjODc0ZmUyYmFmMWMzMjJlNjUyZDVjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcxNzYxYmMyOTMxYjRlOWRhZGI2OThjOWEzODFmMTQ2LmJpbmRQb3B1cChwb3B1cF84YzlmOGRhZWYxNGM0NDMzYmQwZmViYzY5MmNmMjMyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ODVkOTQ1ZTQ0OTY0MzQ1OTMxODczYWY1OTFiZDE2MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjc0OCwxOC45NTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTk5ZTU5ODU5MjA0YWQzYjA0ZGE1ODA3YmNmN2Q1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMTc4YzhiNzVlMDA0MDM4YmM1MmJkMzA1YTAzNGJhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDE3OGM4Yjc1ZTAwNDAzOGJjNTJiZDMwNWEwMzRiYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZBTllBTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmE5OWU1OTg1OTIwNGFkM2IwNGRhNTgwN2JjZjdkNTEuc2V0Q29udGVudChodG1sXzAxNzhjOGI3NWUwMDQwMzhiYzUyYmQzMDVhMDM0YmEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjg1ZDk0NWU0NDk2NDM0NTkzMTg3M2FmNTkxYmQxNjMuYmluZFBvcHVwKHBvcHVwX2ZhOTllNTk4NTkyMDRhZDNiMDRkYTU4MDdiY2Y3ZDUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZhZWU0YWViY2MzNDQxNmQ5M2UzNDBhMjUwMWZjM2FhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS42MDQ1MzA5NDUwMiwyNS45MzE0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYWRkZGI5N2M5MTM0MGQwOGY3YjMzNjE3NzMzOGZjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOTFlZTZhYmUwZTg0YWRmYWE2YjUzMzg5ZGY3MjJiYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDkxZWU2YWJlMGU4NGFkZmFhNmI1MzM4OWRmNzIyYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZFUlRJVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGFkZGRiOTdjOTEzNDBkMDhmN2IzMzYxNzczMzhmY2Euc2V0Q29udGVudChodG1sX2Q5MWVlNmFiZTBlODRhZGZhYTZiNTMzODlkZjcyMmJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmFlZTRhZWJjYzM0NDE2ZDkzZTM0MGEyNTAxZmMzYWEuYmluZFBvcHVwKHBvcHVwXzBhZGRkYjk3YzkxMzQwZDA4ZjdiMzM2MTc3MzM4ZmNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE4NmYzMDBkNjU3MTQ4MGVhYTgyMWE2YmRlMzA4OTdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMTE1NiwzMC4wODQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Mzk1MzI2N2QwMmM0NzM0YTYxNGY0NjM5MjM1MDRmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmQyN2JlZmI0MDk0NTE5OWE2ZGY5ZTNjMWJlNGM0OSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZkMjdiZWZiNDA5NDUxOTlhNmRmOWUzYzFiZTRjNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZFWkFSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM5NTMyNjdkMDJjNDczNGE2MTRmNDYzOTIzNTA0ZjAuc2V0Q29udGVudChodG1sX2FmZDI3YmVmYjQwOTQ1MTk5YTZkZjllM2MxYmU0YzQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTg2ZjMwMGQ2NTcxNDgwZWFhODIxYTZiZGUzMDg5N2EuYmluZFBvcHVwKHBvcHVwXzkzOTUzMjY3ZDAyYzQ3MzRhNjE0ZjQ2MzkyMzUwNGYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NhMzNhMjY5Mjc3MDRkMDQ5ZDliYThiZDgzM2U4MGQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMjA3OCwxNS4xMzQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjJlNjI3MTgwN2U0MDM2OWMwMmJlNWVmMTdkMDc2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NGI0ZTU1Zjc1YmU0ZDIzOThkYmVhNDhjMGE0M2UxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTRiNGU1NWY3NWJlNGQyMzk4ZGJlYTQ4YzBhNDNlMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZFWlpBTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2YyZTYyNzE4MDdlNDAzNjljMDJiZTVlZjE3ZDA3NjIuc2V0Q29udGVudChodG1sXzk0YjRlNTVmNzViZTRkMjM5OGRiZWE0OGMwYTQzZTEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2EzM2EyNjkyNzcwNGQwNDlkOWJhOGJkODMzZTgwZDMuYmluZFBvcHVwKHBvcHVwXzNmMmU2MjcxODA3ZTQwMzY5YzAyYmU1ZWYxN2QwNzYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcxNjUwMTQ1ZmRiNjQwMmJhYWQzOGY4YTUyZTEwOTY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC44MTY4MzE2NTE1MiwxMS4zMjgzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDkxYzhjZWIxMGQ0M2I4OGM1Yzk1MDIyNzA3YzUwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDJkODUxZTZiODc0OTVlOWRkOTUwZmEwY2VhOGI1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmQyZDg1MWU2Yjg3NDk1ZTlkZDk1MGZhMGNlYThiNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZJQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjA5MWM4Y2ViMTBkNDNiODhjNWM5NTAyMjcwN2M1MGUuc2V0Q29udGVudChodG1sX2JkMmQ4NTFlNmI4NzQ5NWU5ZGQ5NTBmYTBjZWE4YjU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzE2NTAxNDVmZGI2NDAyYmFhZDM4ZjhhNTJlMTA5NjYuYmluZFBvcHVwKHBvcHVwX2IwOTFjOGNlYjEwZDQzYjg4YzVjOTUwMjI3MDdjNTBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjZDFkZWVhYjMyNTRjNGRiMzAwNDk2YWI0NjE4ZDFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuMTMyLC0wLjg2MDM2Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWQ5ZTAyZTk4ZWU3NGM1ZThiNWIxMTk3NDc0MTBiODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM2OTJhMzc3Mjc2NDJjYTk5ZDMxNDIyY2EyNDdhNWIgPSAkKCc8ZGl2IGlkPSJodG1sXzJjNjkyYTM3NzI3NjQyY2E5OWQzMTQyMmNhMjQ3YTViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GSUdJRzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQ5ZTAyZTk4ZWU3NGM1ZThiNWIxMTk3NDc0MTBiODQuc2V0Q29udGVudChodG1sXzJjNjkyYTM3NzI3NjQyY2E5OWQzMTQyMmNhMjQ3YTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGNkMWRlZWFiMzI1NGM0ZGIzMDA0OTZhYjQ2MThkMWQuYmluZFBvcHVwKHBvcHVwXzlkOWUwMmU5OGVlNzRjNWU4YjViMTE5NzQ3NDEwYjg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y5NTk0YzNlZjY0ZDQyOGE5MjUxMjc4MGNjOTgwZTdmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzEuNDQ2LC00LjQyMzIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZWIyN2NiZTA2NTI0ZmEyOTM1NmU3N2YxZWYzZTc3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YWNjM2ZjYzg1M2Y0ZTUwODM3Nzc5ZWZhNGQ0ODU5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGFjYzNmY2M4NTNmNGU1MDgzNzc3OWVmYTRkNDg1OTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZJTEFMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWViMjdjYmUwNjUyNGZhMjkzNTZlNzdmMWVmM2U3N2Quc2V0Q29udGVudChodG1sXzhhY2MzZmNjODUzZjRlNTA4Mzc3NzllZmE0ZDQ4NTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjk1OTRjM2VmNjRkNDI4YTkyNTEyNzgwY2M5ODBlN2YuYmluZFBvcHVwKHBvcHVwXzVlYjI3Y2JlMDY1MjRmYTI5MzU2ZTc3ZjFlZjNlNzdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4MGI0YjE2MmY4ZTRmYWNhMGI0OGFlMmYzNDVhMTY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuNzI1OTEsMzEuMjQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNWY5YmRjZjliOGU0NTliYTVlMzMzMDI2OWRkNjFlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTViYjMzODhmMWQ0MDYwYjJlZmJhZjRkMWFhMTNhYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYmU1YmIzMzg4ZjFkNDA2MGIyZWZiYWY0ZDFhYTEzYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZJUEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1ZjliZGNmOWI4ZTQ1OWJhNWUzMzMwMjY5ZGQ2MWUxLnNldENvbnRlbnQoaHRtbF9iZTViYjMzODhmMWQ0MDYwYjJlZmJhZjRkMWFhMTNhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc4MGI0YjE2MmY4ZTRmYWNhMGI0OGFlMmYzNDVhMTY0LmJpbmRQb3B1cChwb3B1cF8xNWY5YmRjZjliOGU0NTliYTVlMzMzMDI2OWRkNjFlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMjZmMDEyY2I2MzY0NzIxOTA0N2U5ODY4MjA4Y2JlZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuMjA5MDY1NDUxNzMsMi4xMDMwOTY5MDQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTZkNWMxNDU3MWI0YzkwYWFmZGFhNDc4YWJiZTA2OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzBhZTAyOTA4NTA0ZTRlODY5YzM2ODNjODFiOGFlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMWMwYWUwMjkwODUwNGU0ZTg2OWMzNjgzYzgxYjhhZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGE2ZDVjMTQ1NzFiNGM5MGFhZmRhYTQ3OGFiYmUwNjguc2V0Q29udGVudChodG1sXzFjMGFlMDI5MDg1MDRlNGU4NjljMzY4M2M4MWI4YWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTI2ZjAxMmNiNjM2NDcyMTkwNDdlOTg2ODIwOGNiZWUuYmluZFBvcHVwKHBvcHVwXzRhNmQ1YzE0NTcxYjRjOTBhYWZkYWE0NzhhYmJlMDY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UxNDE1NGQ1ZDAzMDQ3MTNiMDFiMmUwMWQ4Y2E0MDUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNDk3NiwtMTIuNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5ZDEwNTM2YWFmZjQwMTA5Y2M0Zjc3NWFiNmFlYTVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiODhlODk3NDFkNTQ1NjNhZmVlOTAzYTE2ODE3ODZiID0gJCgnPGRpdiBpZD0iaHRtbF8wYjg4ZTg5NzQxZDU0NTYzYWZlZTkwM2ExNjgxNzg2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rk9VVEFESkFMT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5ZDEwNTM2YWFmZjQwMTA5Y2M0Zjc3NWFiNmFlYTVmLnNldENvbnRlbnQoaHRtbF8wYjg4ZTg5NzQxZDU0NTYzYWZlZTkwM2ExNjgxNzg2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UxNDE1NGQ1ZDAzMDQ3MTNiMDFiMmUwMWQ4Y2E0MDUyLmJpbmRQb3B1cChwb3B1cF80OWQxMDUzNmFhZmY0MDEwOWNjNGY3NzVhYjZhZWE1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yY2QxN2FhOWJkOTQ0ZjU3OGUyOWExZjE4ZDY4NTJiYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjMwMDgsLTE0LjYxNTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYzFmMmU4MjUwNzQyMGU4ZmJjM2Y5YjIyYzUzZDdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzMGQ4ZWQ3ZTY3MzQ2ZDRiYWIxMzEzNGJjZTg4MTBlID0gJCgnPGRpdiBpZD0iaHRtbF9lMzBkOGVkN2U2NzM0NmQ0YmFiMTMxMzRiY2U4ODEwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rk9VVEFUT1JPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmMxZjJlODI1MDc0MjBlOGZiYzNmOWIyMmM1M2Q3YS5zZXRDb250ZW50KGh0bWxfZTMwZDhlZDdlNjczNDZkNGJhYjEzMTM0YmNlODgxMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yY2QxN2FhOWJkOTQ0ZjU3OGUyOWExZjE4ZDY4NTJiYi5iaW5kUG9wdXAocG9wdXBfY2JjMWYyZTgyNTA3NDIwZThmYmMzZjliMjJjNTNkN2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWIzNDRhYWU4NzNiNDBhMGFlODQ1NGFlY2UyYzAxYzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ljc2NzE0NDk2MjQ0LDEwLjI2NTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzMDE1YThiNjJjYzRhMjhhNzFhZTYzM2IzYWZhZGRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmMjJmN2Q3YjE0YTRhMzI4MDg4ZDEwOWIzNjgxMTg3ID0gJCgnPGRpdiBpZD0iaHRtbF85ZjIyZjdkN2IxNGE0YTMyODA4OGQxMDliMzY4MTE4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RlVOR09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzAxNWE4YjYyY2M0YTI4YTcxYWU2MzNiM2FmYWRkYS5zZXRDb250ZW50KGh0bWxfOWYyMmY3ZDdiMTRhNGEzMjgwODhkMTA5YjM2ODExODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YjM0NGFhZTg3M2I0MGEwYWU4NDU0YWVjZTJjMDFjMS5iaW5kUG9wdXAocG9wdXBfOTMwMTVhOGI2MmNjNGEyOGE3MWFlNjMzYjNhZmFkZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDZmNDdiMzQwOTQ3NGQwYmI3ZmU5ZjU1YjU3NmE3NWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi44NDUzLDIzLjczMTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNmM2MjhkOWM4MzRjNzlhYzIyZWZhYWY4ZGQ3MTlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5OWM0YWZkNTVmNTRmYzhhNWRkYTdlZTZiMTIyNzI1ID0gJCgnPGRpdiBpZD0iaHRtbF9hOTljNGFmZDU1ZjU0ZmM4YTVkZGE3ZWU2YjEyMjcyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RlVSPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDZjNjI4ZDljODM0Yzc5YWMyMmVmYWFmOGRkNzE5Zi5zZXRDb250ZW50KGh0bWxfYTk5YzRhZmQ1NWY1NGZjOGE1ZGRhN2VlNmIxMjI3MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NmY0N2IzNDA5NDc0ZDBiYjdmZTlmNTViNTc2YTc1Zi5iaW5kUG9wdXAocG9wdXBfZjA2YzYyOGQ5YzgzNGM3OWFjMjJlZmFhZjhkZDcxOWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWYyM2E3Nzg4MmY3NGUzYTk1YTQ1ZmE1OTlkYzg0YWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjA3Nzc5MzQwNTY4LDEwLjE5MjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1N2Q4M2JiYzNkYTQxZGRiZGRiMzE2YWFiOTcxY2Y2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhYjBjZjU1YjgxNTRjNmVhZjZjMjQwZWIzZjk3OGJkID0gJCgnPGRpdiBpZD0iaHRtbF85YWIwY2Y1NWI4MTU0YzZlYWY2YzI0MGViM2Y5NzhiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RlVUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTdkODNiYmMzZGE0MWRkYmRkYjMxNmFhYjk3MWNmNi5zZXRDb250ZW50KGh0bWxfOWFiMGNmNTViODE1NGM2ZWFmNmMyNDBlYjNmOTc4YmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZjIzYTc3ODgyZjc0ZTNhOTVhNDVmYTU5OWRjODRhYS5iaW5kUG9wdXAocG9wdXBfZjU3ZDgzYmJjM2RhNDFkZGJkZGIzMTZhYWI5NzFjZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTY0MTgyMDU0YjYwNDQ2N2I3MTlmZjk5Y2JiMTZiZTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjcwMDQ4NTUwMzM1LC0wLjE5MzQxNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JmNzBlMWIwZWQxNDc5ODhmNTIwMjFkMzFmOTliMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzdkZjE2YzE5YTdjNGQzYThhMmI0MTFiMjcwNzgxZGQgPSAkKCc8ZGl2IGlkPSJodG1sXzM3ZGYxNmMxOWE3YzRkM2E4YTJiNDExYjI3MDc4MWRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JmNzBlMWIwZWQxNDc5ODhmNTIwMjFkMzFmOTliMWEuc2V0Q29udGVudChodG1sXzM3ZGYxNmMxOWE3YzRkM2E4YTJiNDExYjI3MDc4MWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTY0MTgyMDU0YjYwNDQ2N2I3MTlmZjk5Y2JiMTZiZTEuYmluZFBvcHVwKHBvcHVwX2NiZjcwZTFiMGVkMTQ3OTg4ZjUyMDIxZDMxZjk5YjFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2YWIyZGU3ZTU0YjRjYTA4ZGYxYzNjZDc2M2ZjMzk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMjU0NywzMy4xNDY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZjAyNmM0NmNhMzI0ODg4OWNlZWY4ZGIxMmZhNWQyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDA3Mjk2MjZlMzM0NzBmYWI1ZDJkNTc5ZjFmYzAxOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGQwNzI5NjI2ZTMzNDcwZmFiNWQyZDU3OWYxZmMwMTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBQUxJSU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMDI2YzQ2Y2EzMjQ4ODg5Y2VlZjhkYjEyZmE1ZDJhLnNldENvbnRlbnQoaHRtbF9kZDA3Mjk2MjZlMzM0NzBmYWI1ZDJkNTc5ZjFmYzAxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I2YWIyZGU3ZTU0YjRjYTA4ZGYxYzNjZDc2M2ZjMzk4LmJpbmRQb3B1cChwb3B1cF84ZjAyNmM0NmNhMzI0ODg4OWNlZWY4ZGIxMmZhNWQyYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNzYyNjc0OTZiZWM0OTgxYThhOTdlNThhMjRkMGQ5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMzY2NTU4OTQxNDgsMTYuNDA1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDYzZTRjNzZiYTc3NDg0NTg1NzllNTI0MTUzMGFkMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzQyMTM4YWYzZmM3NGU4NWJlOWNiZWU5ZTkxODYyMWIgPSAkKCc8ZGl2IGlkPSJodG1sX2M0MjEzOGFmM2ZjNzRlODViZTljYmVlOWU5MTg2MjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HQUJFUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2M2U0Yzc2YmE3NzQ4NDU4NTc5ZTUyNDE1MzBhZDE5LnNldENvbnRlbnQoaHRtbF9jNDIxMzhhZjNmYzc0ZTg1YmU5Y2JlZTllOTE4NjIxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M3NjI2NzQ5NmJlYzQ5ODFhOGE5N2U1OGEyNGQwZDk5LmJpbmRQb3B1cChwb3B1cF80NjNlNGM3NmJhNzc0ODQ1ODU3OWU1MjQxNTMwYWQxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNTkwYmJiMjIwOGM0ZjNlOWY5NDA0MWJiNGNiMzk0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjM2NjIsOS40OTg1MjY1NjA1NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjllYjlmYzM0MDE0NDk4YjkwN2QzNjMwMzFkZGVhODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGJiYTQ2OGJkMzZiNDQ1MmI2MDdiYzE3YjcyMzkwNDYgPSAkKCc8ZGl2IGlkPSJodG1sX2RiYmE0NjhiZDM2YjQ0NTJiNjA3YmMxN2I3MjM5MDQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HQURBTUVTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOWViOWZjMzQwMTQ0OThiOTA3ZDM2MzAzMWRkZWE4MS5zZXRDb250ZW50KGh0bWxfZGJiYTQ2OGJkMzZiNDQ1MmI2MDdiYzE3YjcyMzkwNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNTkwYmJiMjIwOGM0ZjNlOWY5NDA0MWJiNGNiMzk0NC5iaW5kUG9wdXAocG9wdXBfZjllYjlmYzM0MDE0NDk4YjkwN2QzNjMwMzFkZGVhODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDU1OTYzODg0ZjYzNGNmY2I2MDczOWZjOGI5MjdkNmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC40Mzg0LDguODYwMTQyNTUyNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViNzkwNzZiZGIwMDQxNzM4ZjM3ZDdjNzljNjQ0NmNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NDgwYTA4ZWU1MTQzM2M5Y2ZmYjVlN2NhODJkMGU2ID0gJCgnPGRpdiBpZD0iaHRtbF8zODQ4MGEwOGVlNTE0MzNjOWNmZmI1ZTdjYTgyZDBlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0FGU0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViNzkwNzZiZGIwMDQxNzM4ZjM3ZDdjNzljNjQ0NmNmLnNldENvbnRlbnQoaHRtbF8zODQ4MGEwOGVlNTE0MzNjOWNmZmI1ZTdjYTgyZDBlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q1NTk2Mzg4NGY2MzRjZmNiNjA3MzlmYzhiOTI3ZDZhLmJpbmRQb3B1cChwb3B1cF9lYjc5MDc2YmRiMDA0MTczOGYzN2Q3Yzc5YzY0NDZjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZGNjYWYyMzlkNjE0ZDMxYTk1OGRlMDcwNWVlYTM4YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuNDA5NTQ3MDE1MTUsLTUuNjYwMjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYjdiM2E3OGM5MDRmOWRhMzg5YmRlNmY5M2E0Y2UzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5M2E5NjMwN2Y2YzRhZTU5NDBlNWNiZWQ3NDEyNmEwID0gJCgnPGRpdiBpZD0iaHRtbF8yOTNhOTYzMDdmNmM0YWU1OTQwZTVjYmVkNzQxMjZhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0FHVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTNiN2IzYTc4YzkwNGY5ZGEzODliZGU2ZjkzYTRjZTMuc2V0Q29udGVudChodG1sXzI5M2E5NjMwN2Y2YzRhZTU5NDBlNWNiZWQ3NDEyNmEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2RjY2FmMjM5ZDYxNGQzMWE5NThkZTA3MDVlZWEzOGMuYmluZFBvcHVwKHBvcHVwXzUzYjdiM2E3OGM5MDRmOWRhMzg5YmRlNmY5M2E0Y2UzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk2NGFiM2I1ZGJhZjRjMGNiYWQxMGY0MTc2NTk2ZjJkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy40ODQ2ODU5NDE2MSwxMi42Mzk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTlmMmIwZTkyZWE0NTYyOTUyZmFkNzcyOGZlOTAxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MTcyNDRjOTI3Y2Y0YzEzYjk4OWFmOTU5NWQ5YzcxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTE3MjQ0YzkyN2NmNGMxM2I5ODlhZjk1OTVkOWM3MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBTElNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTlmMmIwZTkyZWE0NTYyOTUyZmFkNzcyOGZlOTAxNi5zZXRDb250ZW50KGh0bWxfOTE3MjQ0YzkyN2NmNGMxM2I5ODlhZjk1OTVkOWM3MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NjRhYjNiNWRiYWY0YzBjYmFkMTBmNDE3NjU5NmYyZC5iaW5kUG9wdXAocG9wdXBfMTE5ZjJiMGU5MmVhNDU2Mjk1MmZhZDc3MjhmZTkwMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjMyMGYyYzEyMjQ0NGY5ZmFlNTkyNDNlOGNhMWJmZWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjczMzU4MzgwNTE5LC00LjE1MTQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzZjYmY2OGE0ZGE0NTZlOTgzZmJiNGU4NTQ3MTVkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzk0M2Q3YmQ2MDI0MGMxOTAwZTljNTFhYTM0NTExZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzc5NDNkN2JkNjAyNDBjMTkwMGU5YzUxYWEzNDUxMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2M2Y2JmNjhhNGRhNDU2ZTk4M2ZiYjRlODU0NzE1ZDMuc2V0Q29udGVudChodG1sXzM3OTQzZDdiZDYwMjQwYzE5MDBlOWM1MWFhMzQ1MTFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjMyMGYyYzEyMjQ0NGY5ZmFlNTkyNDNlOGNhMWJmZWEuYmluZFBvcHVwKHBvcHVwX2NjNmNiZjY4YTRkYTQ1NmU5ODNmYmI0ZTg1NDcxNWQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZiMTZmOGQ4ODhlNTQzNGM5MzRjZTJjNzFlNGI2ZmU5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMC40MTc4OTU5NzQxNSwzMS45NzA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzJiNGZjMmU1Yjg0ZjQ4YTU1N2Q1ODgzNTJhOTA2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYTMwZWJhNTZjZTM0ZjY5YmQ0ZjIwODMwMDM5NjdmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmEzMGViYTU2Y2UzNGY2OWJkNGYyMDgzMDAzOTY3ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBTkRBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzJiNGZjMmU1Yjg0ZjQ4YTU1N2Q1ODgzNTJhOTA2Zi5zZXRDb250ZW50KGh0bWxfMmEzMGViYTU2Y2UzNGY2OWJkNGYyMDgzMDAzOTY3ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YjE2ZjhkODg4ZTU0MzRjOTM0Y2UyYzcxZTRiNmZlOS5iaW5kUG9wdXAocG9wdXBfMjcyYjRmYzJlNWI4NGY0OGE1NTdkNTg4MzUyYTkwNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDg0OGUzZTJmZGI5NDhlMDllZjNmMjk2YjJjMmVmMGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3Ljc3NDUwMTgxNTA0LC05LjkwODg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Y2YyOWZmZGZlM2M0MTZhOWUzY2FlYWM2OGExNzFmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Y2Y2NmJjZGViNWQ0MDk2OGQyM2Y1OGNmZWQyYTY4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWNmNjZiY2RlYjVkNDA5NjhkMjNmNThjZmVkMmE2OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdCQU5ERTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNmMjlmZmRmZTNjNDE2YTllM2NhZWFjNjhhMTcxZjcuc2V0Q29udGVudChodG1sXzVjZjY2YmNkZWI1ZDQwOTY4ZDIzZjU4Y2ZlZDJhNjhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDg0OGUzZTJmZGI5NDhlMDllZjNmMjk2YjJjMmVmMGYuYmluZFBvcHVwKHBvcHVwXzZjZjI5ZmZkZmUzYzQxNmE5ZTNjYWVhYzY4YTE3MWY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q5YjllNmM3ZTRjYzRhNTU4MjQ0ZTMyZjU5MDVkZjkxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS43MjA3NjcxNDk0LDcuMDcxMzQ4ODgwNjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlZjYwOGZmOWQ3NDRlYjE4MzhiYWM0ZjY5YmFhNjMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzM2EyZjQ2OWZmNTQ4OWQ4NGQ5YjAwMzRkNWM3Y2Y3ID0gJCgnPGRpdiBpZD0iaHRtbF80MzNhMmY0NjlmZjU0ODlkODRkOWIwMDM0ZDVjN2NmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0JBUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlZjYwOGZmOWQ3NDRlYjE4MzhiYWM0ZjY5YmFhNjMyLnNldENvbnRlbnQoaHRtbF80MzNhMmY0NjlmZjU0ODlkODRkOWIwMDM0ZDVjN2NmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5YjllNmM3ZTRjYzRhNTU4MjQ0ZTMyZjU5MDVkZjkxLmJpbmRQb3B1cChwb3B1cF9mZWY2MDhmZjlkNzQ0ZWIxODM4YmFjNGY2OWJhYTYzMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYjYzODcyMDljZjc0NmYyODNmNjllYzYwOGI4OWEwZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjYyMzcsOS45MjM2ODAyMzAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ODRmNzUyNDkzMzA0ZGJkYjE4ZDA0YTVmNTEwOTkwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDUzMjM3ZWUyMWU0MjEwOTc3MzU0NTRjN2I4MWVlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDQ1MzIzN2VlMjFlNDIxMDk3NzM1NDU0YzdiODFlZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdFUkFXQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODg0Zjc1MjQ5MzMwNGRiZGIxOGQwNGE1ZjUxMDk5MGUuc2V0Q29udGVudChodG1sXzA0NTMyMzdlZTIxZTQyMTA5NzczNTQ1NGM3YjgxZWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmI2Mzg3MjA5Y2Y3NDZmMjgzZjY5ZWM2MDhiODlhMGQuYmluZFBvcHVwKHBvcHVwXzg4NGY3NTI0OTMzMDRkYmRiMThkMDRhNWY1MTA5OTBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFjMDAzZmIzMjVhZTQwNTNiMWVhN2JlZDM2ODg1ZTJiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4xMzYyNTgxNDQ2Miw0Mi45NzgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDY3NjM3MzNmMzg0NzFhYTA2M2ZmYmM0OTlkMzJlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzI5M2EwMWU0Yjk0MTI1OTU5NTJjNzM1ZmU3OTdhYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjMyOTNhMDFlNGI5NDEyNTk1OTUyYzczNWZlNzk3YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdFUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0Njc2MzczM2YzODQ3MWFhMDYzZmZiYzQ5OWQzMmVhLnNldENvbnRlbnQoaHRtbF9mMzI5M2EwMWU0Yjk0MTI1OTU5NTJjNzM1ZmU3OTdhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFjMDAzZmIzMjVhZTQwNTNiMWVhN2JlZDM2ODg1ZTJiLmJpbmRQb3B1cChwb3B1cF85NDY3NjM3MzNmMzg0NzFhYTA2M2ZmYmM0OTlkMzJlYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YmNlMGZkZmE1MmE0NDZkOTdiODQ5M2ZiODY5MmJjNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuOTgyMzI1NDE3MTIsMzYuNzMzNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjFhZWYyYzNiNWQxNDVkZDk1OGI1YTAzOWQ1MThiZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGIxNjAzOGYzMTIwNGUyMzk2YWY4MTA4MDdjNjA0NmEgPSAkKCc8ZGl2IGlkPSJodG1sXzRiMTYwMzhmMzEyMDRlMjM5NmFmODEwODA3YzYwNDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HSUJFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MWFlZjJjM2I1ZDE0NWRkOTU4YjVhMDM5ZDUxOGJkOS5zZXRDb250ZW50KGh0bWxfNGIxNjAzOGYzMTIwNGUyMzk2YWY4MTA4MDdjNjA0NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YmNlMGZkZmE1MmE0NDZkOTdiODQ5M2ZiODY5MmJjNS5iaW5kUG9wdXAocG9wdXBfNjFhZWYyYzNiNWQxNDVkZDk1OGI1YTAzOWQ1MThiZDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODhiZDE2OTQ4YjZiNDBiNTgxOTIxYThmNDE1N2E5YjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi44ODIyLC0yLjI0MDk1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lN2IyNzIwMGViM2I0YzFmYjllNjVhMWNlY2I3MjBjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTNkNzdiZGYyOGU0OTNkOGJkODJhMTE2MjllNDBlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGUzZDc3YmRmMjhlNDkzZDhiZDgyYTExNjI5ZTQwZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdJTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTdiMjcyMDBlYjNiNGMxZmI5ZTY1YTFjZWNiNzIwY2Muc2V0Q29udGVudChodG1sX2RlM2Q3N2JkZjI4ZTQ5M2Q4YmQ4MmExMTYyOWU0MGUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODhiZDE2OTQ4YjZiNDBiNTgxOTIxYThmNDE1N2E5YjUuYmluZFBvcHVwKHBvcHVwX2U3YjI3MjAwZWIzYjRjMWZiOWU2NWExY2VjYjcyMGNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I4ZjY4MzgyMjc4NzRjNTA4NDI5MDY3OTNkNmUxODczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC40OTYxOTQ2NDcyMiw4Ljg1NjA4MjIwMjk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjgyNDNkMWE4NGQ0OWYwYWQ0YjA3ZjllZmIwM2ZlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZTYzOGQzNWIyM2U0NDBlOTc4ZjhkMzcyY2M3ZWMzNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWU2MzhkMzViMjNlNDQwZTk3OGY4ZDM3MmNjN2VjMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdJTEk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyODI0M2QxYTg0ZDQ5ZjBhZDRiMDdmOWVmYjAzZmU4LnNldENvbnRlbnQoaHRtbF9hZTYzOGQzNWIyM2U0NDBlOTc4ZjhkMzcyY2M3ZWMzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I4ZjY4MzgyMjc4NzRjNTA4NDI5MDY3OTNkNmUxODczLmJpbmRQb3B1cChwb3B1cF9mMjgyNDNkMWE4NGQ0OWYwYWQ0YjA3ZjllZmIwM2ZlOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYTc3NTY5YjUzOGU0MjRiOTNmMzM1YTBiZTAyZTlhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTYyOTc0Njc4MTIsMzUuNDU3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU3MDdmOTMwMTIzNGI4NzgzM2IxNjJlMWY3OTA3ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzYyMTlmMjMyM2NlNDA3ODg4YmEzYTdlZDY3NGUyMzcgPSAkKCc8ZGl2IGlkPSJodG1sXzM2MjE5ZjIzMjNjZTQwNzg4OGJhM2E3ZWQ2NzRlMjM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HSU1JUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1NzA3ZjkzMDEyMzRiODc4MzNiMTYyZTFmNzkwN2RlLnNldENvbnRlbnQoaHRtbF8zNjIxOWYyMzIzY2U0MDc4ODhiYTNhN2VkNjc0ZTIzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBhNzc1NjliNTM4ZTQyNGI5M2YzMzVhMGJlMDJlOWE1LmJpbmRQb3B1cChwb3B1cF9lNTcwN2Y5MzAxMjM0Yjg3ODMzYjE2MmUxZjc5MDdkZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMjI0ODY0OTM1NDE0MTZiODcwNzE0YTA3OTgwMjNjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjk2NjksMzIuNDY1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjc4MTRhMmZjNTA5NDI4ZGJjYTU3NjU0YWU1Y2UxMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDIwMWE4YmFhMzllNDRlMTk5Y2Y4NTQwZmQxMTQ5OGYgPSAkKCc8ZGl2IGlkPSJodG1sXzQyMDFhOGJhYTM5ZTQ0ZTE5OWNmODU0MGZkMTE0OThmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HSU1NQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjc4MTRhMmZjNTA5NDI4ZGJjYTU3NjU0YWU1Y2UxMTQuc2V0Q29udGVudChodG1sXzQyMDFhOGJhYTM5ZTQ0ZTE5OWNmODU0MGZkMTE0OThmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjIyNDg2NDkzNTQxNDE2Yjg3MDcxNGEwNzk4MDIzYzMuYmluZFBvcHVwKHBvcHVwX2I3ODE0YTJmYzUwOTQyOGRiY2E1NzY1NGFlNWNlMTE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FkYzNlNDQwY2JlNzQzZWM5OTMwOGRjYTAzYmU0Y2Q4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNjg2MiwxNC40OTg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDViNWYyMDQwNDM0ZWM4OWMzOWUzZWY2YjBiNWZiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTM0MWFmNzgxMjc0YmNiOWIzNWE3NTRjZDk3NDAzZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTUzNDFhZjc4MTI3NGJjYjliMzVhNzU0Y2Q5NzQwM2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdJU0lHQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzA1YjVmMjA0MDQzNGVjODljMzllM2VmNmIwYjVmYjQuc2V0Q29udGVudChodG1sXzU1MzQxYWY3ODEyNzRiY2I5YjM1YTc1NGNkOTc0MDNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWRjM2U0NDBjYmU3NDNlYzk5MzA4ZGNhMDNiZTRjZDguYmluZFBvcHVwKHBvcHVwXzMwNWI1ZjIwNDA0MzRlYzg5YzM5ZTNlZjZiMGI1ZmI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU5ZDAyNzk1NjIyODRjMGU4MzY2YzgxZTNlNTc3YjZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4yOTc4OTc4MDg3NywzNC4yNjE1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYWEwNDBhMmQ1NDg0MjFlOGJlYjNmN2UzZDljYjlkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MGEzYmQyODEyZGY0NTZhYmE3NWM5NTE0OGRiNjEwNSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTBhM2JkMjgxMmRmNDU2YWJhNzVjOTUxNDhkYjYxMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdJU1U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhYTA0MGEyZDU0ODQyMWU4YmViM2Y3ZTNkOWNiOWRjLnNldENvbnRlbnQoaHRtbF85MGEzYmQyODEyZGY0NTZhYmE3NWM5NTE0OGRiNjEwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5ZDAyNzk1NjIyODRjMGU4MzY2YzgxZTNlNTc3YjZkLmJpbmRQb3B1cChwb3B1cF8wYWEwNDBhMmQ1NDg0MjFlOGJlYjNmN2UzZDljYjlkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOTNmNjRlNjFhYTk0ODJjOGRiMzI1ODMxOTlmYTA3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuNjUyNzkxODY0OTMsMTkuODMzNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYyMjU5ZDI4ZTc1NGM4MDkyMmIxMzEwNGI4MjMxNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWFmMGY2YjVkZjFlNGM2MTgwYTAzOTVkNzZlZTMwMzQgPSAkKCc8ZGl2IGlkPSJodG1sX2FhZjBmNmI1ZGYxZTRjNjE4MGEwMzk1ZDc2ZWUzMDM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HT0JVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjIyNTlkMjhlNzU0YzgwOTIyYjEzMTA0YjgyMzE3NC5zZXRDb250ZW50KGh0bWxfYWFmMGY2YjVkZjFlNGM2MTgwYTAzOTVkNzZlZTMwMzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOTNmNjRlNjFhYTk0ODJjOGRiMzI1ODMxOTlmYTA3ZS5iaW5kUG9wdXAocG9wdXBfNjYyMjU5ZDI4ZTc1NGM4MDkyMmIxMzEwNGI4MjMxNzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTcyOWYzMWE1ZjllNGNhZDhkYzhlNmFkYzE1NWY2YzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4xOTkwNiwzNS42NTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODRiNDMzNjViMDE0NGVlYWUyY2M4MjUxMGE3NjZkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGEyNTgxZWQ4MDY0MDFmYTQyZjc4Y2UzZmE3ZjVlYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjRhMjU4MWVkODA2NDAxZmE0MmY3OGNlM2ZhN2Y1ZWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdPR088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4NGI0MzM2NWIwMTQ0ZWVhZTJjYzgyNTEwYTc2NmRhLnNldENvbnRlbnQoaHRtbF82NGEyNTgxZWQ4MDY0MDFmYTQyZjc4Y2UzZmE3ZjVlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E3MjlmMzFhNWY5ZTRjYWQ4ZGM4ZTZhZGMxNTVmNmM5LmJpbmRQb3B1cChwb3B1cF85ODRiNDMzNjViMDE0NGVlYWUyY2M4MjUxMGE3NjZkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yODM5NzQ2NzJiNTU0OGI2YTYyYjE2YmMwYWI3NWRhOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuMTQxMTM3Mzc1NjYsLTEwLjUzODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzYWIzMmViMTgyNTRiZTVhYTRkNDZiMTM1ZGQ3MWU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyMGJjMmFiNDBkNDRjOGFhNTA2NDYwOTAwOGFkYWM3ID0gJCgnPGRpdiBpZD0iaHRtbF83MjBiYzJhYjQwZDQ0YzhhYTUwNjQ2MDkwMDhhZGFjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R09MQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDNhYjMyZWIxODI1NGJlNWFhNGQ0NmIxMzVkZDcxZTguc2V0Q29udGVudChodG1sXzcyMGJjMmFiNDBkNDRjOGFhNTA2NDYwOTAwOGFkYWM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjgzOTc0NjcyYjU1NDhiNmE2MmIxNmJjMGFiNzVkYTguYmluZFBvcHVwKHBvcHVwXzAzYWIzMmViMTgyNTRiZTVhYTRkNDZiMTM1ZGQ3MWU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q4N2UwZThkM2M2OTRiNjk4MzY3MjFjODZiODgxMzYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjIxMjgsMzQuMzk1NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODM3NzhhODA0MmFmNGFhNTgyZjE2MGRiOTY4ODZmYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhiY2M0YmU3NzM5NGUyYmE4MTc4YmY5YjFiNTE1YWMgPSAkKCc8ZGl2IGlkPSJodG1sXzA4YmNjNGJlNzczOTRlMmJhODE3OGJmOWIxYjUxNWFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HT01BTkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzNzc4YTgwNDJhZjRhYTU4MmYxNjBkYjk2ODg2ZmIwLnNldENvbnRlbnQoaHRtbF8wOGJjYzRiZTc3Mzk0ZTJiYTgxNzhiZjliMWI1MTVhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q4N2UwZThkM2M2OTRiNjk4MzY3MjFjODZiODgxMzYxLmJpbmRQb3B1cChwb3B1cF84Mzc3OGE4MDQyYWY0YWE1ODJmMTYwZGI5Njg4NmZiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZWM0NjFhY2VkMWU0MmMyOWU1Njk4ZGQzNmVmNmFmMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy00LjIzMzg4LDM1LjkwNzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjZWU5NWFjODUzNzRkOTJiNmI5Y2QzMjhkMzM4OTE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkODRjNzJlNWM3MzRiODY4YjRiOTU4MDY4ODE2ZjhkID0gJCgnPGRpdiBpZD0iaHRtbF80ZDg0YzcyZTVjNzM0Yjg2OGI0Yjk1ODA2ODgxNmY4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R09ST0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjZWU5NWFjODUzNzRkOTJiNmI5Y2QzMjhkMzM4OTE1LnNldENvbnRlbnQoaHRtbF80ZDg0YzcyZTVjNzM0Yjg2OGI0Yjk1ODA2ODgxNmY4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRlYzQ2MWFjZWQxZTQyYzI5ZTU2OThkZDM2ZWY2YWYwLmJpbmRQb3B1cChwb3B1cF83Y2VlOTVhYzg1Mzc0ZDkyYjZiOWNkMzI4ZDMzODkxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81Nzg1MDBhYjJlMzc0N2Q1OGQ2N2JhYWIyZjExNTg3ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzAuODEwNTQ0NzI1MTYsNDIuODE5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjZiYTNkNTczZTI5NGU2ZTlkODU3OWUzMTE0OWY4MDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTZiMGUzMGE5MzRlNGI3OWFjODFkNDE2NWFhN2JiZDQgPSAkKCc8ZGl2IGlkPSJodG1sX2U2YjBlMzBhOTM0ZTRiNzlhYzgxZDQxNjVhYTdiYmQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HT1NIQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjZiYTNkNTczZTI5NGU2ZTlkODU3OWUzMTE0OWY4MDUuc2V0Q29udGVudChodG1sX2U2YjBlMzBhOTM0ZTRiNzlhYzgxZDQxNjVhYTdiYmQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTc4NTAwYWIyZTM3NDdkNThkNjdiYWFiMmYxMTU4N2YuYmluZFBvcHVwKHBvcHVwX2I2YmEzZDU3M2UyOTRlNmU5ZDg1NzllMzExNDlmODA1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NkZDhhYmI5NTI1ZTQ4OTI4NTIwNjQ1ZWIzMWFlMWIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC45MjQ3NTk1ODM5OSwtNy42NTU0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWJmOGQ4MWFjMzcwNDUxMGIwOGE0MDM4OWU1Y2I4N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA0ZjJmMDM4Y2M2NDgzNTliNDA1ODk3NTkxMjE1ZGYgPSAkKCc8ZGl2IGlkPSJodG1sX2UwNGYyZjAzOGNjNjQ4MzU5YjQwNTg5NzU5MTIxNWRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HUkVCTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWJmOGQ4MWFjMzcwNDUxMGIwOGE0MDM4OWU1Y2I4N2Muc2V0Q29udGVudChodG1sX2UwNGYyZjAzOGNjNjQ4MzU5YjQwNTg5NzU5MTIxNWRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2RkOGFiYjk1MjVlNDg5Mjg1MjA2NDVlYjMxYWUxYjMuYmluZFBvcHVwKHBvcHVwX2ViZjhkODFhYzM3MDQ1MTBiMDhhNDAzODllNWNiODdjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIyMTU5YTRlYTI0OTRmZDM4ODJmMzUxMDliZTMyNDQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNzkzNiwtMS41NDg4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWExZjM1MmZjYzE4NDdhNmFhMmRhZDM5MTY1YTQwYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzM5ZDE5ZjYzZTI2NGZmNmEwYTIxY2EzMjRmMDA0N2YgPSAkKCc8ZGl2IGlkPSJodG1sXzMzOWQxOWY2M2UyNjRmZjZhMGEyMWNhMzI0ZjAwNDdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HUlVOU0hJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTFmMzUyZmNjMTg0N2E2YWEyZGFkMzkxNjVhNDBiNS5zZXRDb250ZW50KGh0bWxfMzM5ZDE5ZjYzZTI2NGZmNmEwYTIxY2EzMjRmMDA0N2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMjE1OWE0ZWEyNDk0ZmQzODgyZjM1MTA5YmUzMjQ0NS5iaW5kUG9wdXAocG9wdXBfYWExZjM1MmZjYzE4NDdhNmFhMmRhZDM5MTY1YTQwYjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDA1NDA1NTBiMjM2NGEwNWI5YTc4ZDhhMTg0ZjA4MTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC4zMzU0LC0xNS42NzM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NGFkOTkwNzBlNDQ0ZTkwYmIyZTYyNDc5OGM1N2M2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzQ0OGJlMTJkZjk0MDg4OTJhMjg1NTA1YmJkYjE5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjc0NDhiZTEyZGY5NDA4ODkyYTI4NTUwNWJiZGIxOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdVQU5DSEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0YWQ5OTA3MGU0NDRlOTBiYjJlNjI0Nzk4YzU3YzZmLnNldENvbnRlbnQoaHRtbF82NzQ0OGJlMTJkZjk0MDg4OTJhMjg1NTA1YmJkYjE5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQwNTQwNTUwYjIzNjRhMDViOWE3OGQ4YTE4NGYwODE2LmJpbmRQb3B1cChwb3B1cF82NGFkOTkwNzBlNDQ0ZTkwYmIyZTYyNDc5OGM1N2M2Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iOTRmNzI2ODg1MDI0YTVkOWUyNGQxYzM5NTlmOWZlMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMDc5MjUzMzYxNzYsLTEuMzE4MjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjOTlhODNlOWQwNzRjN2Y5NTY0ZTVkMmYyYmVlYWMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3NTNkMmRkOGM2MDQzZTI5NzZlOGEwYjZkZWVjNGEzID0gJCgnPGRpdiBpZD0iaHRtbF9iNzUzZDJkZDhjNjA0M2UyOTc2ZThhMGI2ZGVlYzRhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1VBTkc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjOTlhODNlOWQwNzRjN2Y5NTY0ZTVkMmYyYmVlYWMwLnNldENvbnRlbnQoaHRtbF9iNzUzZDJkZDhjNjA0M2UyOTc2ZThhMGI2ZGVlYzRhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I5NGY3MjY4ODUwMjRhNWQ5ZTI0ZDFjMzk1OWY5ZmUxLmJpbmRQb3B1cChwb3B1cF9mYzk5YTgzZTlkMDc0YzdmOTU2NGU1ZDJmMmJlZWFjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MGM0MjViMGJlMmM0MjMwOTYxOGY5MmUwMTkxNjhmYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjIwMzksMTMuNzgxN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdjZGU0ZGIxZWFjNDA1ODlkNDI3MzcwM2RmOWNkM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M0ZWJmZmZhOTU1NGE1ZmI4MjRkYWIyYjQ0MGE1YWQgPSAkKCc8ZGl2IGlkPSJodG1sXzdjNGViZmZmYTk1NTRhNWZiODI0ZGFiMmI0NDBhNWFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVURFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2NkZTRkYjFlYWM0MDU4OWQ0MjczNzAzZGY5Y2QzZi5zZXRDb250ZW50KGh0bWxfN2M0ZWJmZmZhOTU1NGE1ZmI4MjRkYWIyYjQ0MGE1YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MGM0MjViMGJlMmM0MjMwOTYxOGY5MmUwMTkxNjhmYy5iaW5kUG9wdXAocG9wdXBfYzdjZGU0ZGIxZWFjNDA1ODlkNDI3MzcwM2RmOWNkM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzg3YTAyNzY0M2EyNDUyMTliN2Y1OWQ5NTljMDMzZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4xOTQxLC00LjcwNzA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjA5NGVhZDhjMzQ0NGEzOTJkNzFiZjViODkzMDRjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjY4ZTI4NWEzYTc0ODBiODJlMmQ4MjZkYjE5MTg2YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzI2OGUyODVhM2E3NDgwYjgyZTJkODI2ZGIxOTE4NmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdVSU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VmMDk0ZWFkOGMzNDQ0YTM5MmQ3MWJmNWI4OTMwNGM2LnNldENvbnRlbnQoaHRtbF8zMjY4ZTI4NWEzYTc0ODBiODJlMmQ4MjZkYjE5MTg2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc4N2EwMjc2NDNhMjQ1MjE5YjdmNTlkOTU5YzAzM2ZjLmJpbmRQb3B1cChwb3B1cF9lZjA5NGVhZDhjMzQ0NGEzOTJkNzFiZjViODkzMDRjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMGZhZDI2ODlmNzk0NzdjYjc0OWQyM2Q1YjNlODhlYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuNDkyMDc1NjgzNzUsMjAuMzIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBjNWY5ZjFhNTU5NGJjOWExZGY3MThjOTI1MDRmMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhjNjNlZGUxYmE2NGY5OWIwMTk1ZmYyMWE2MDM0MTcgPSAkKCc8ZGl2IGlkPSJodG1sXzM4YzYzZWRlMWJhNjRmOTliMDE5NWZmMjFhNjAzNDE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVUxBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MGM1ZjlmMWE1NTk0YmM5YTFkZjcxOGM5MjUwNGYyZC5zZXRDb250ZW50KGh0bWxfMzhjNjNlZGUxYmE2NGY5OWIwMTk1ZmYyMWE2MDM0MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMGZhZDI2ODlmNzk0NzdjYjc0OWQyM2Q1YjNlODhlYS5iaW5kUG9wdXAocG9wdXBfNzBjNWY5ZjFhNTU5NGJjOWExZGY3MThjOTI1MDRmMmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDQzNTQ4NDhhZWVkNDk3MmE1OTNkZjFkMjhhMTFkMTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS44MjYxLDM0LjMzOTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiMDBlNDQ5Y2ViZjQ2NzY4YzBjNDRiMzc3ZTAyMGY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2NzNjNjRkM2VmODRjMTg5NGE4MThmNTIzMDI4ODQzID0gJCgnPGRpdiBpZD0iaHRtbF8zNjczYzY0ZDNlZjg0YzE4OTRhODE4ZjUyMzAyODg0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1VMRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGIwMGU0NDljZWJmNDY3NjhjMGM0NGIzNzdlMDIwZjguc2V0Q29udGVudChodG1sXzM2NzNjNjRkM2VmODRjMTg5NGE4MThmNTIzMDI4ODQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDQzNTQ4NDhhZWVkNDk3MmE1OTNkZjFkMjhhMTFkMTguYmluZFBvcHVwKHBvcHVwXzhiMDBlNDQ5Y2ViZjQ2NzY4YzBjNDRiMzc3ZTAyMGY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IxODAwMWQ0N2JjNjQ4MTE5YmE1NDgyNDQ2OGYzOGRlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMzg5LDM1LjY0NThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkN2M0YjEyNTIwZjQ5ZTQ4NzZjZWQ3YWU4ODFmMzUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzMDYwNWM4NDg2NjRhNTJhZTQ3MjNjYjY5NzUxOGVhID0gJCgnPGRpdiBpZD0iaHRtbF81MzA2MDVjODQ4NjY0YTUyYWU0NzIzY2I2OTc1MThlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1VNVVo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkN2M0YjEyNTIwZjQ5ZTQ4NzZjZWQ3YWU4ODFmMzUyLnNldENvbnRlbnQoaHRtbF81MzA2MDVjODQ4NjY0YTUyYWU0NzIzY2I2OTc1MThlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IxODAwMWQ0N2JjNjQ4MTE5YmE1NDgyNDQ2OGYzOGRlLmJpbmRQb3B1cChwb3B1cF8xZDdjNGIxMjUyMGY0OWU0ODc2Y2VkN2FlODgxZjM1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNTIwNWIwZmVlMWY0YTUyOGJmMWNiYTQwZWUxOTBlZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuNjExMzE4OTMxODUsMi43NjA0NzgzMTY1NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWFiZWYyMGEzOGIxNGEzZGFiMjFkNWRmYWU3ODg0ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODgyY2YzMDhhM2I0NDc4Mzk1NDE2MmMwMDRiYjZjNjEgPSAkKCc8ZGl2IGlkPSJodG1sXzg4MmNmMzA4YTNiNDQ3ODM5NTQxNjJjMDA0YmI2YzYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhYmVmMjBhMzhiMTRhM2RhYjIxZDVkZmFlNzg4NGU0LnNldENvbnRlbnQoaHRtbF84ODJjZjMwOGEzYjQ0NzgzOTU0MTYyYzAwNGJiNmM2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E1MjA1YjBmZWUxZjRhNTI4YmYxY2JhNDBlZTE5MGVlLmJpbmRQb3B1cChwb3B1cF8xYWJlZjIwYTM4YjE0YTNkYWIyMWQ1ZGZhZTc4ODRlNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNzBkOThkZmNiNWQ0MTAzYTEzOWRhNWI1MWUxNjc0NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuODg1NjM3MTM0OTUsMzguNjEwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjgwNGRmZjRkMGJmNDE3ZGI0NjQzNGYxOGFkYzdiMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmJhMjAyNTZjOWY2NGM4ZmI1M2Y5YWFlZGY5Y2I0NjggPSAkKCc8ZGl2IGlkPSJodG1sXzJiYTIwMjU2YzlmNjRjOGZiNTNmOWFhZWRmOWNiNDY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVVJBR0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4MDRkZmY0ZDBiZjQxN2RiNDY0MzRmMThhZGM3YjE2LnNldENvbnRlbnQoaHRtbF8yYmEyMDI1NmM5ZjY0YzhmYjUzZjlhYWVkZjljYjQ2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I3MGQ5OGRmY2I1ZDQxMDNhMTM5ZGE1YjUxZTE2NzQ2LmJpbmRQb3B1cChwb3B1cF8yODA0ZGZmNGQwYmY0MTdkYjQ2NDM0ZjE4YWRjN2IxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82YjQ0ZmY5YWVmZjI0YjM0OTA4MzBiNzVmM2ZkZTg2YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjgyMjUsLTAuNDM5MTMyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTczYjdmM2Q5ZDY0NzM4YjAzMzRlYzFmMTY3NzRhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjJkZGE4NGU0ZmU0NDdlYTNmZWM0ZDQ0OTFkZTdlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmIyZGRhODRlNGZlNDQ3ZWEzZmVjNGQ0NDkxZGU3ZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdVUkVOU0k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxNzNiN2YzZDlkNjQ3MzhiMDMzNGVjMWYxNjc3NGE3LnNldENvbnRlbnQoaHRtbF9mYjJkZGE4NGU0ZmU0NDdlYTNmZWM0ZDQ0OTFkZTdlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZiNDRmZjlhZWZmMjRiMzQ5MDgzMGI3NWYzZmRlODZjLmJpbmRQb3B1cChwb3B1cF83MTczYjdmM2Q5ZDY0NzM4YjAzMzRlYzFmMTY3NzRhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYWEzODZiNDA1NmE0MjlkYjU1YTU1MzViYTRmZWM3NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjA4OTMsMS4yMzIyNDMzMDQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjcwMGUzNzM4OTIyNGU3NmIyMjllZWE2Mzk2ZTg2MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjkzOTVmMzI0MDliNDViMjk4YjNjOTVjNTdkMmZmYWEgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5Mzk1ZjMyNDA5YjQ1YjI5OGIzYzk1YzU3ZDJmZmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVVJNQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjcwMGUzNzM4OTIyNGU3NmIyMjllZWE2Mzk2ZTg2MGUuc2V0Q29udGVudChodG1sX2Y5Mzk1ZjMyNDA5YjQ1YjI5OGIzYzk1YzU3ZDJmZmFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmFhMzg2YjQwNTZhNDI5ZGI1NWE1NTM1YmE0ZmVjNzUuYmluZFBvcHVwKHBvcHVwXzI3MDBlMzczODkyMjRlNzZiMjI5ZWVhNjM5NmU4NjBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VkYjI0YzQwMjJlZDQ0NTQ4YjBhOGYzNTVkMDdkMzE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4zNjI1NzI5NTcwNywtNi4wMTY2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjM3ZGFiMGRmMmY5NDQzMjhjM2MwM2E5NTUyNDY1NzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJjMzIxNTBmMmY3NGNhZmJjZjYyYzRhYzM3ZDU4YjQgPSAkKCc8ZGl2IGlkPSJodG1sXzZiYzMyMTUwZjJmNzRjYWZiY2Y2MmM0YWMzN2Q1OGI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVVJPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzdkYWIwZGYyZjk0NDMyOGMzYzAzYTk1NTI0NjU3NC5zZXRDb250ZW50KGh0bWxfNmJjMzIxNTBmMmY3NGNhZmJjZjYyYzRhYzM3ZDU4YjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZGIyNGM0MDIyZWQ0NDU0OGIwYThmMzU1ZDA3ZDMxNy5iaW5kUG9wdXAocG9wdXBfMjM3ZGFiMGRmMmY5NDQzMjhjM2MwM2E5NTUyNDY1NzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzk3OTdkYTc2MWFmNGJjNmE4MjRkZTRlYTRhZTkzMmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4xNjAxNCwzNC40Nzg3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmQ1MGUyNDA4YWY0YjE0YjczZDliYzlhNTdiNjZjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOGY3ODg4YzI3NDg0ZGM1YWQ1YmJjMTQ3YmVjM2E5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzhmNzg4OGMyNzQ4NGRjNWFkNWJiYzE0N2JlYzNhOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdVU0lJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmQ1MGUyNDA4YWY0YjE0YjczZDliYzlhNTdiNjZjYi5zZXRDb250ZW50KGh0bWxfMzhmNzg4OGMyNzQ4NGRjNWFkNWJiYzE0N2JlYzNhOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOTc5N2RhNzYxYWY0YmM2YTgyNGRlNGVhNGFlOTMyYi5iaW5kUG9wdXAocG9wdXBfNDJkNTBlMjQwOGFmNGIxNGI3M2Q5YmM5YTU3YjY2Y2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWEyNWQzNTRlMTQ2NGZlZmFhYzNiMDgxODliNDI0NmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4Ljc0MTI1OTAzNjYsNy44OTA0OTQyNzk5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTZmZmE1ZmZhZjA5NGJiZGJhOTllY2U5Nzg1YTIyMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTY4NzU5NTgwNTgyNDAwZTk0YThkMTI3ZGRlM2NiZTggPSAkKCc8ZGl2IGlkPSJodG1sXzk2ODc1OTU4MDU4MjQwMGU5NGE4ZDEyN2RkZTNjYmU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HV0FOREFSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTZmZmE1ZmZhZjA5NGJiZGJhOTllY2U5Nzg1YTIyMDMuc2V0Q29udGVudChodG1sXzk2ODc1OTU4MDU4MjQwMGU5NGE4ZDEyN2RkZTNjYmU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWEyNWQzNTRlMTQ2NGZlZmFhYzNiMDgxODliNDI0NmMuYmluZFBvcHVwKHBvcHVwXzU2ZmZhNWZmYWYwOTRiYmRiYTk5ZWNlOTc4NWEyMjAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzllMmU0ODQ5MTFkZjQxZWY5NDI1OWI1NDM1YjA4NTg0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuMjQ4NDEsMzkuNTM5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjEzNzAwYzY4MDEzNDVmMGIyNDE1MDgyMmUyNDE5MDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWZlNTYzNWM2NDM1NDc3ODhjMWEyYmQ0NDEyNjlkZjIgPSAkKCc8ZGl2IGlkPSJodG1sX2VmZTU2MzVjNjQzNTQ3Nzg4YzFhMmJkNDQxMjY5ZGYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HWVJJQU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTM3MDBjNjgwMTM0NWYwYjI0MTUwODIyZTI0MTkwMy5zZXRDb250ZW50KGh0bWxfZWZlNTYzNWM2NDM1NDc3ODhjMWEyYmQ0NDEyNjlkZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZTJlNDg0OTExZGY0MWVmOTQyNTliNTQzNWIwODU4NC5iaW5kUG9wdXAocG9wdXBfZjEzNzAwYzY4MDEzNDVmMGIyNDE1MDgyMmUyNDE5MDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmZlOTE0OTZhNTU2NDQ3OTkxNDQxNjc5NTYwYTIyNzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNC40NTQwOSwzMC42Mjg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZmZkMTU1N2MxYjg0ZDAzYmQ5ZjMxOGQzZDRlMmU5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOTgwZGMwZmU4YjY0NWQzOWNhYTMyYWRkOWRlYTA2OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjk4MGRjMGZlOGI2NDVkMzljYWEzMmFkZDlkZWEwNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZmZkMTU1N2MxYjg0ZDAzYmQ5ZjMxOGQzZDRlMmU5MC5zZXRDb250ZW50KGh0bWxfZjk4MGRjMGZlOGI2NDVkMzljYWEzMmFkZDlkZWEwNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZmU5MTQ5NmE1NTY0NDc5OTE0NDE2Nzk1NjBhMjI3NC5iaW5kUG9wdXAocG9wdXBfZWZmZDE1NTdjMWI4NGQwM2JkOWYzMThkM2Q0ZTJlOTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzU2YjY5ZmIyYTRhNGE2YjhkMzU1MWUwOTFjNDFjYzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS4wMjc0LDI1LjIzNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2Mjc3Y2JmOGYyZDQ0ZjE4NzE0YTZhOWMyNTVjMDJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4NmI4YjI1NGM0ZDQ2MDViM2U4ZjdjM2FjNGI5ZmI0ID0gJCgnPGRpdiBpZD0iaHRtbF84ODZiOGIyNTRjNGQ0NjA1YjNlOGY3YzNhYzRiOWZiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFCQkFOSUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2Mjc3Y2JmOGYyZDQ0ZjE4NzE0YTZhOWMyNTVjMDJkLnNldENvbnRlbnQoaHRtbF84ODZiOGIyNTRjNGQ0NjA1YjNlOGY3YzNhYzRiOWZiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M1NmI2OWZiMmE0YTRhNmI4ZDM1NTFlMDkxYzQxY2M4LmJpbmRQb3B1cChwb3B1cF9mNjI3N2NiZjhmMmQ0NGYxODcxNGE2YTljMjU1YzAyZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMjVkZGI1ZGEyZGM0OGFhYmRiMzE3Y2EyZmU0M2NjOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjM5NjIsMzYuMjI0M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTk0YzEyNGRiYWY1NDExNzgwN2Y4YTA0YmQxZjYyMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODczNDQxMzU5YjQ1NDQ1MjlkNmQ3MDQ4YTE2OTA3ZTMgPSAkKCc8ZGl2IGlkPSJodG1sXzg3MzQ0MTM1OWI0NTQ0NTI5ZDZkNzA0OGExNjkwN2UzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IQURFTkRPV0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5NGMxMjRkYmFmNTQxMTc4MDdmOGEwNGJkMWY2MjJkLnNldENvbnRlbnQoaHRtbF84NzM0NDEzNTliNDU0NDUyOWQ2ZDcwNDhhMTY5MDdlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IyNWRkYjVkYTJkYzQ4YWFiZGIzMTdjYTJmZTQzY2M4LmJpbmRQb3B1cChwb3B1cF85OTRjMTI0ZGJhZjU0MTE3ODA3ZjhhMDRiZDFmNjIyZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MzdmOTZhNzQ4N2Q0OGU5YTg2ZThiMTM0ZGQzZmFjNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy02LjEzNTIyLDM5LjM1NDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3MzM0ZWNmOGEzYjQzMzFhMjY2YjAzYjJlZmEyY2RkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1Y2FlMGExZTVmMzQwNWFhOGI0ODdkZTU1ZTU1ZTgxID0gJCgnPGRpdiBpZD0iaHRtbF9iNWNhZTBhMWU1ZjM0MDVhYThiNDg3ZGU1NWU1NWU4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFESU1VPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzMzNGVjZjhhM2I0MzMxYTI2NmIwM2IyZWZhMmNkZC5zZXRDb250ZW50KGh0bWxfYjVjYWUwYTFlNWYzNDA1YWE4YjQ4N2RlNTVlNTVlODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MzdmOTZhNzQ4N2Q0OGU5YTg2ZThiMTM0ZGQzZmFjNi5iaW5kUG9wdXAocG9wdXBfNDczMzRlY2Y4YTNiNDMzMWEyNjZiMDNiMmVmYTJjZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQyNzdiNjAzMmQ1NGM2NWFhNWQ3N2Q4MjU5NzIyYjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wNTE3LDkuMTA4OTY3MzM5NDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0OTg1NTFjY2YyMTRlMGQ4MTlhY2MxMDRmMmIwOGNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1ZDViYWExNGNhOTQyMmQ4Y2M3ZTQwN2EyNDM4NWVjID0gJCgnPGRpdiBpZD0iaHRtbF9jNWQ1YmFhMTRjYTk0MjJkOGNjN2U0MDdhMjQzODVlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFNQU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NDk4NTUxY2NmMjE0ZTBkODE5YWNjMTA0ZjJiMDhjYS5zZXRDb250ZW50KGh0bWxfYzVkNWJhYTE0Y2E5NDIyZDhjYzdlNDA3YTI0Mzg1ZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNDI3N2I2MDMyZDU0YzY1YWE1ZDc3ZDgyNTk3MjJiMC5iaW5kUG9wdXAocG9wdXBfOTQ5ODU1MWNjZjIxNGUwZDgxOWFjYzEwNGYyYjA4Y2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDBjNjVhY2Q5M2U0NGFjZGJiNDQ3Mjg5ODAwODgzZWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi43NTAyLDI3Ljg0NDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyMjgyMGE5ZDI2YTRjZjc5MTE1ZGQ0N2Y3OWQzYzhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3MzdiODJjNDBmMTQ5N2NiODYyNTk2OTcxMTRiYTE4ID0gJCgnPGRpdiBpZD0iaHRtbF80NzM3YjgyYzQwZjE0OTdjYjg2MjU5Njk3MTE0YmExOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFNQVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyMjgyMGE5ZDI2YTRjZjc5MTE1ZGQ0N2Y3OWQzYzhlLnNldENvbnRlbnQoaHRtbF80NzM3YjgyYzQwZjE0OTdjYjg2MjU5Njk3MTE0YmExOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QwYzY1YWNkOTNlNDRhY2RiYjQ0NzI4OTgwMDg4M2VjLmJpbmRQb3B1cChwb3B1cF8yMjI4MjBhOWQyNmE0Y2Y3OTExNWRkNDdmNzlkM2M4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYmM1ZjZhYzZjNTQ0YWFhOTY4NTU1NDBlYjIyMjkwMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjQ4MjQsMS40MTAxMDgzMzM4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJjZTMzMDgyOTliNGM0MTk5MmFiZGY0NWYwNDdjNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmU5MDU1ZTg4YWEwNDA3ZGExNmQwZWMzOWUxMGJiNDQgPSAkKCc8ZGl2IGlkPSJodG1sXzZlOTA1NWU4OGFhMDQwN2RhMTZkMGVjMzllMTBiYjQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IQU1ZQU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiY2UzMzA4Mjk5YjRjNDE5OTJhYmRmNDVmMDQ3YzRhLnNldENvbnRlbnQoaHRtbF82ZTkwNTVlODhhYTA0MDdkYTE2ZDBlYzM5ZTEwYmI0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RiYzVmNmFjNmM1NDRhYWE5Njg1NTU0MGViMjIyOTAyLmJpbmRQb3B1cChwb3B1cF8xYmNlMzMwODI5OWI0YzQxOTkyYWJkZjQ1ZjA0N2M0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lOTFjMTBmMTUwYjA0MmJhOGM3M2EzMjBhM2FmNWNmMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMjIzNTk1NDgzNzgsNDIuMjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxMzVkOWFmY2NmNzRiNzI4ZTU3YmQyYzhlZjFjN2E4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2MWYwMjhkZGQzYjQ3ZDVhOWI4Y2Y2OTI2MmMxZmNlID0gJCgnPGRpdiBpZD0iaHRtbF82NjFmMDI4ZGRkM2I0N2Q1YTliOGNmNjkyNjJjMWZjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFSQVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTM1ZDlhZmNjZjc0YjcyOGU1N2JkMmM4ZWYxYzdhOC5zZXRDb250ZW50KGh0bWxfNjYxZjAyOGRkZDNiNDdkNWE5YjhjZjY5MjYyYzFmY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lOTFjMTBmMTUwYjA0MmJhOGM3M2EzMjBhM2FmNWNmMC5iaW5kUG9wdXAocG9wdXBfZDEzNWQ5YWZjY2Y3NGI3MjhlNTdiZDJjOGVmMWM3YTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmRmMjA4OTBkMTc3NDY3ZWJkOWFjNDA0ZjFlMDEzMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC41OTY5LDMyLjMyNjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JlZmFhOTEwODk4ODQ5MjJiNDkxNDhhZDY0ZWI1MDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzNGMwZWE0NmI5NzRiMjNhMGEwZWJhMWI0M2ZlNTg5ID0gJCgnPGRpdiBpZD0iaHRtbF84MzRjMGVhNDZiOTc0YjIzYTBhMGViYTFiNDNmZTU4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFTQU5JQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmVmYWE5MTA4OTg4NDkyMmI0OTE0OGFkNjRlYjUwN2Yuc2V0Q29udGVudChodG1sXzgzNGMwZWE0NmI5NzRiMjNhMGEwZWJhMWI0M2ZlNTg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmRmMjA4OTBkMTc3NDY3ZWJkOWFjNDA0ZjFlMDEzMmEuYmluZFBvcHVwKHBvcHVwX2JlZmFhOTEwODk4ODQ5MjJiNDkxNDhhZDY0ZWI1MDdmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNjNGY4NzczYTE2YjQyNDFhMGRmMDI2Mjc4MzI3ZjljID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMzcyMiw3LjE0ODgzMDU2MjYyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGQ4MDIyYmZhYTc0OWMyODQwMDgyOWViZDFmODFjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMmM3YWYxN2JkYjU0NzU1OWNjYzYyYjI4NjA0M2I2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTJjN2FmMTdiZGI1NDc1NTljY2M2MmIyODYwNDNiNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhBVVNBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGQ4MDIyYmZhYTc0OWMyODQwMDgyOWViZDFmODFjYS5zZXRDb250ZW50KGh0bWxfYTJjN2FmMTdiZGI1NDc1NTljY2M2MmIyODYwNDNiNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYzRmODc3M2ExNmI0MjQxYTBkZjAyNjI3ODMyN2Y5Yy5iaW5kUG9wdXAocG9wdXBfZDhkODAyMmJmYWE3NDljMjg0MDA4MjllYmQxZjgxY2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTM3MDAyZDc4ZThjNGQ0ZGI2ODkwODhjZmRmOWE0ZDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjY1MzM1MzA1NDAxLDQ2Ljc0MzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkOWQ3ZDk3Yjk4YjRjYjc4YWU4ZGQzNTU5ZDg4Y2ZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxYjQzNmFhYWRmNjQzYTA5NjE0NWU2OGI0ODMyYzY3ID0gJCgnPGRpdiBpZD0iaHRtbF9jMWI0MzZhYWFkZjY0M2EwOTYxNDVlNjhiNDgzMmM2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEFXSVlBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDlkN2Q5N2I5OGI0Y2I3OGFlOGRkMzU1OWQ4OGNmYy5zZXRDb250ZW50KGh0bWxfYzFiNDM2YWFhZGY2NDNhMDk2MTQ1ZTY4YjQ4MzJjNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMzcwMDJkNzhlOGM0ZDRkYjY4OTA4OGNmZGY5YTRkMC5iaW5kUG9wdXAocG9wdXBfNmQ5ZDdkOTdiOThiNGNiNzhhZThkZDM1NTlkODhjZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGMwMzJlMjIzMGZhNDQ2Y2JjY2YwMjkzOTY5ZDRjNWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMS42MTU3NCwzMS4yOTYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjFmMTU1ZWQ3NzU0MmMxOWVlOTFkNjQzOGQ5NzRlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZWI5YzgxNTJiOTU0NmJiYmU4N2YxZTY3NDMzYmY0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2ViOWM4MTUyYjk1NDZiYmJlODdmMWU2NzQzM2JmNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhBWUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyMWYxNTVlZDc3NTQyYzE5ZWU5MWQ2NDM4ZDk3NGVjLnNldENvbnRlbnQoaHRtbF8zZWI5YzgxNTJiOTU0NmJiYmU4N2YxZTY3NDMzYmY0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjMDMyZTIyMzBmYTQ0NmNiY2NmMDI5Mzk2OWQ0YzVjLmJpbmRQb3B1cChwb3B1cF8wMjFmMTU1ZWQ3NzU0MmMxOWVlOTFkNjQzOGQ5NzRlYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNDNmNDMzYWIzNGM0NTM5OGIzZmE4MTU5OTIyNzYyNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy03LjY5NDY2LDM1LjQwMThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkOTc1NmVhNTk3ODQyN2Y5OTNjNTRlMzVkN2Q2OTk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzNjA0ZTVmZTUyMTQzMDJiODVkNTM1NWE5Yzc4ZDE1ID0gJCgnPGRpdiBpZD0iaHRtbF8zMzYwNGU1ZmU1MjE0MzAyYjg1ZDUzNTVhOWM3OGQxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SEVIRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2Q5NzU2ZWE1OTc4NDI3Zjk5M2M1NGUzNWQ3ZDY5OTkuc2V0Q29udGVudChodG1sXzMzNjA0ZTVmZTUyMTQzMDJiODVkNTM1NWE5Yzc4ZDE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjQzZjQzM2FiMzRjNDUzOThiM2ZhODE1OTkyMjc2MjUuYmluZFBvcHVwKHBvcHVwXzNkOTc1NmVhNTk3ODQyN2Y5OTNjNTRlMzVkN2Q2OTk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhiYzhiZjgyMDdiYjRjNDhhOTU0MjE2NzYxY2QwMTg4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjY0ODUsMTguNDIyMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjVlMzdlNGMxMzk0NGI1Mjk3ZWIyNTRkZGMyMDI5NDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDU2ZTQwY2QzNTQ3NDBmY2I0NGM0YTZjM2NkNjRiNjAgPSAkKCc8ZGl2IGlkPSJodG1sXzQ1NmU0MGNkMzU0NzQwZmNiNDRjNGE2YzNjZDY0YjYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IRUlLVU08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1ZTM3ZTRjMTM5NDRiNTI5N2ViMjU0ZGRjMjAyOTQ5LnNldENvbnRlbnQoaHRtbF80NTZlNDBjZDM1NDc0MGZjYjQ0YzRhNmMzY2Q2NGI2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhiYzhiZjgyMDdiYjRjNDhhOTU0MjE2NzYxY2QwMTg4LmJpbmRQb3B1cChwb3B1cF82NWUzN2U0YzEzOTQ0YjUyOTdlYjI1NGRkYzIwMjk0OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hODVkMmJlM2M1ODM0NjdhYTg5YTFlYWYxZTE5Njc3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjg1ODEsMjAuMTc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNTBhNDUzNmNmMzQ0YzBjYTIzNmU5ZmJlNDAwZWQ1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDdhYzM2NjFkOWU0YWMxYTFjZDEwMjYyZTc4YTMyMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQ3YWMzNjYxZDllNGFjMWExY2QxMDI2MmU3OGEzMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhFTUFUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTBhNDUzNmNmMzQ0YzBjYTIzNmU5ZmJlNDAwZWQ1ZS5zZXRDb250ZW50KGh0bWxfMzQ3YWMzNjYxZDllNGFjMWExY2QxMDI2MmU3OGEzMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hODVkMmJlM2M1ODM0NjdhYTg5YTFlYWYxZTE5Njc3NC5iaW5kUG9wdXAocG9wdXBfMDUwYTQ1MzZjZjM0NGMwY2EyMzZlOWZiZTQwMGVkNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2U5NjE1ZWViNWE1NGFmMDlkY2JiMDNlY2JjMjFmMjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ5MywxNS4yMjIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWY1ODVkNzVlMWE0ZDI2YjBmMWMzN2VjMjFhOWZmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTAzZDgxZTY2OWQ0MzZjOGQ2ZGRhN2RkNzBkZmI4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGEwM2Q4MWU2NjlkNDM2YzhkNmRkYTdkZDcwZGZiODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhFUkVSTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTFmNTg1ZDc1ZTFhNGQyNmIwZjFjMzdlYzIxYTlmZmMuc2V0Q29udGVudChodG1sXzhhMDNkODFlNjY5ZDQzNmM4ZDZkZGE3ZGQ3MGRmYjg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2U5NjE1ZWViNWE1NGFmMDlkY2JiMDNlY2JjMjFmMjAuYmluZFBvcHVwKHBvcHVwX2UxZjU4NWQ3NWUxYTRkMjZiMGYxYzM3ZWMyMWE5ZmZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUyNTBhODZlZTIzNzQzNWQ5MDFmYWY5NTBkYjdiNTZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljc1ODIsMjUuODE4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDU5YjE3YTVkM2YyNDFiMjkzM2Y4YmE0YjRmODQ0OTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGVhOWMwYzljMmVhNDFjMDkxYmI4YjUwNjdhMjA5MmIgPSAkKCc8ZGl2IGlkPSJodG1sXzBlYTljMGM5YzJlYTQxYzA5MWJiOGI1MDY3YTIwOTJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ISUVDSFdBUkU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1OWIxN2E1ZDNmMjQxYjI5MzNmOGJhNGI0Zjg0NDkzLnNldENvbnRlbnQoaHRtbF8wZWE5YzBjOWMyZWE0MWMwOTFiYjhiNTA2N2EyMDkyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUyNTBhODZlZTIzNzQzNWQ5MDFmYWY5NTBkYjdiNTZjLmJpbmRQb3B1cChwb3B1cF8wNTliMTdhNWQzZjI0MWIyOTMzZjhiYTRiNGY4NDQ5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZWViMzk0MmY5OWM0NGE0ODhjMzAzYjdhZWYyYzliNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yMi40OTA5LDMzLjI5NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzYTc5NTlhYzNkOTQwZGY4ZWRiZWMxNWQ5YmVhMzUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmYTdmYWFjNzgwYTQyZWFhMDlmZDQ4MmZjNTYxMGFlID0gJCgnPGRpdiBpZD0iaHRtbF9kZmE3ZmFhYzc4MGE0MmVhYTA5ZmQ0ODJmYzU2MTBhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SExFTkdXRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjNhNzk1OWFjM2Q5NDBkZjhlZGJlYzE1ZDliZWEzNTAuc2V0Q29udGVudChodG1sX2RmYTdmYWFjNzgwYTQyZWFhMDlmZDQ4MmZjNTYxMGFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmVlYjM5NDJmOTljNDRhNDg4YzMwM2I3YWVmMmM5YjcuYmluZFBvcHVwKHBvcHVwX2IzYTc5NTlhYzNkOTQwZGY4ZWRiZWMxNWQ5YmVhMzUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUxZWE4MmFiOTM0MzRjYzM5OGYzMGYxOGQwMGNkMWQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMjYxODksMTcuNDExNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY3ZTE0NDk2ZWNkNDAzMjkxZmVlNDQ1NWFjMmIzMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU1ZjNiOTY5NDY0NDU3NDhhNmYzOTJkMDNjOWY2N2QgPSAkKCc8ZGl2IGlkPSJodG1sXzVlNWYzYjk2OTQ2NDQ1NzQ4YTZmMzkyZDAzYzlmNjdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IT0xPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZjdlMTQ0OTZlY2Q0MDMyOTFmZWU0NDU1YWMyYjMwZS5zZXRDb250ZW50KGh0bWxfNWU1ZjNiOTY5NDY0NDU3NDhhNmYzOTJkMDNjOWY2N2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MWVhODJhYjkzNDM0Y2MzOThmMzBmMThkMDBjZDFkOS5iaW5kUG9wdXAocG9wdXBfYWY3ZTE0NDk2ZWNkNDAzMjkxZmVlNDQ1NWFjMmIzMGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDdmMmVhYTRmNzEzNGU0NjkzMGI0NWJlNTgzNzE3MTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNi40MzUwOCwyOS4yMjQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZTI3MzcxNWUxNzY0YTZkOTU2MjkwZTdiMDA4OWMxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZGMyOWY2NzU5YWQ0MmZlOGM4MmVhNjExNWM0YmRkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWRjMjlmNjc1OWFkNDJmZThjODJlYTYxMTVjNGJkZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhPTE9IT0xPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZTI3MzcxNWUxNzY0YTZkOTU2MjkwZTdiMDA4OWMxMi5zZXRDb250ZW50KGh0bWxfZWRjMjlmNjc1OWFkNDJmZThjODJlYTYxMTVjNGJkZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kN2YyZWFhNGY3MTM0ZTQ2OTMwYjQ1YmU1ODM3MTcxOC5iaW5kUG9wdXAocG9wdXBfZGUyNzM3MTVlMTc2NGE2ZDk1NjI5MGU3YjAwODljMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTM0OGY4MjllMjNiNGYxNzhlZGVlMjE0NjljMmU1ZDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4wMjc1NiwyOC42MjA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MmI2YTg3ZDI3NzA0OGU5OGIwY2E3ZDdhNmRhNDBiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjA0YzIzODg1YjA0M2U1YjU1ZmRkMDBmNTMyODJmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDYwNGMyMzg4NWIwNDNlNWI1NWZkZDAwZjUzMjgyZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhVTkRFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MmI2YTg3ZDI3NzA0OGU5OGIwY2E3ZDdhNmRhNDBiMS5zZXRDb250ZW50KGh0bWxfMDYwNGMyMzg4NWIwNDNlNWI1NWZkZDAwZjUzMjgyZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MzQ4ZjgyOWUyM2I0ZjE3OGVkZWUyMTQ2OWMyZTVkNi5iaW5kUG9wdXAocG9wdXBfODJiNmE4N2QyNzcwNDhlOThiMGNhN2Q3YTZkYTQwYjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGJiNzc4NjUxZDFjNGQ0YjhiOWVlMjMyM2NhMzNlYTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjYuMDYxLDI3LjAwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWM3ZDI2NDllYTA3NDk2Njg5NjM1NjMyOGU3YTQ5ODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTViMzc2ZmUyMmQ0NDVjNjhjOGRmMWI2OWViYWIwNjQgPSAkKCc8ZGl2IGlkPSJodG1sX2E1YjM3NmZlMjJkNDQ1YzY4YzhkZjFiNjllYmFiMDY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IVVJVVFNIRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWM3ZDI2NDllYTA3NDk2Njg5NjM1NjMyOGU3YTQ5ODMuc2V0Q29udGVudChodG1sX2E1YjM3NmZlMjJkNDQ1YzY4YzhkZjFiNjllYmFiMDY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGJiNzc4NjUxZDFjNGQ0YjhiOWVlMjMyM2NhMzNlYTkuYmluZFBvcHVwKHBvcHVwX2FjN2QyNjQ5ZWEwNzQ5NjY4OTYzNTYzMjhlN2E0OTgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk1OTU1N2U1NDE4YjRkZTA5ZGJmZWYzOTY3MmQxNjcyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC44MzU3NTUxNTI1Miw4LjA2MjAwMzg0MTg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDcyZTY3MTZhMDQ0MzA2Yjk4Yzk4YjliZjE5MDFjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNWUxYjk0MmY4NjA0Yzg1ODcxZTUwMjRlNmUzM2E4MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjVlMWI5NDJmODYwNGM4NTg3MWU1MDI0ZTZlMzNhODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklCSUJJTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ3MmU2NzE2YTA0NDMwNmI5OGM5OGI5YmYxOTAxY2Euc2V0Q29udGVudChodG1sXzI1ZTFiOTQyZjg2MDRjODU4NzFlNTAyNGU2ZTMzYTgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTU5NTU3ZTU0MThiNGRlMDlkYmZlZjM5NjcyZDE2NzIuYmluZFBvcHVwKHBvcHVwXzQ0NzJlNjcxNmEwNDQzMDZiOThjOThiOWJmMTkwMWNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RjZjRjZDU4MjExYTRmYWY4ZWUzZTJlMWYyYjQ5Nzc1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS44Njg5NjQ4NTE5Nyw3LjMyMDYwMjc5MjA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YzYxYzY0MjU5OTM0NWExYTUxOGU4ZTM0NWUyZDEwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZWQxMTk3NzI0OWI0NjIxOGQ3ZWQ4Y2E3ZTg1ZGYyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmVkMTE5NzcyNDliNDYyMThkN2VkOGNhN2U4NWRmMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklCTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmM2MWM2NDI1OTkzNDVhMWE1MThlOGUzNDVlMmQxMDMuc2V0Q29udGVudChodG1sXzJlZDExOTc3MjQ5YjQ2MjE4ZDdlZDhjYTdlODVkZjIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGNmNGNkNTgyMTFhNGZhZjhlZTNlMmUxZjJiNDk3NzUuYmluZFBvcHVwKHBvcHVwXzZjNjFjNjQyNTk5MzQ1YTFhNTE4ZThlMzQ1ZTJkMTAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ0YzMzZDk3ODE5YzQ4MTM5NTM2YTk4MDY4Y2I4ZGViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC41NDQzMDY2NTc3MSwzMC41Mjc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmYyYmY2NGZlZmE0MjVlYmUzZDUzMjQ3YWRkODFkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTg5NWQzYWYxYWE0YWZiYTVjNjY3YWJjOWJlZTZmZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjE4OTVkM2FmMWFhNGFmYmE1YzY2N2FiYzliZWU2ZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklESU88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmZjJiZjY0ZmVmYTQyNWViZTNkNTMyNDdhZGQ4MWQ4LnNldENvbnRlbnQoaHRtbF9mMTg5NWQzYWYxYWE0YWZiYTVjNjY3YWJjOWJlZTZmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0YzMzZDk3ODE5YzQ4MTM5NTM2YTk4MDY4Y2I4ZGViLmJpbmRQb3B1cChwb3B1cF8yZmYyYmY2NGZlZmE0MjVlYmUzZDUzMjQ3YWRkODFkOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yM2Y1NjRkN2MwM2U0OGU3YWY2ODNjYTFiNWZlMzU4YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuNDQ2MjkzNzIyNDcsNy45OTM4NTYwOTc5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWJiZWQ4MzE5NzYwNGE2NmFkMzAxNmU3ZTY1NmY0OTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDM5ZmQ0ODJhZjcxNDI1ZmFmODM4YzUwZjRkYWI1NDcgPSAkKCc8ZGl2IGlkPSJodG1sXzQzOWZkNDgyYWY3MTQyNWZhZjgzOGM1MGY0ZGFiNTQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRE9NQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWJiZWQ4MzE5NzYwNGE2NmFkMzAxNmU3ZTY1NmY0OTIuc2V0Q29udGVudChodG1sXzQzOWZkNDgyYWY3MTQyNWZhZjgzOGM1MGY0ZGFiNTQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjNmNTY0ZDdjMDNlNDhlN2FmNjgzY2ExYjVmZTM1OGMuYmluZFBvcHVwKHBvcHVwXzliYmVkODMxOTc2MDRhNjZhZDMwMTZlN2U2NTZmNDkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ2MGIzOWU3MDJiMjRkNzliN2Q1OTkzZDIzYzlmZGIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy40NTg1MDI0MzQ4LDQuNzkwMDM1MjExNjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjOGMzNGJhNDZjZjQ5NDA4ODBjN2RkMWE3YjNkNGZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjNDY1M2M0NDNmZDQ5MzZhNGZiNGYzNTUzMTE1NGM5ID0gJCgnPGRpdiBpZD0iaHRtbF8yYzQ2NTNjNDQzZmQ0OTM2YTRmYjRmMzU1MzExNTRjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUZFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzhjMzRiYTQ2Y2Y0OTQwODgwYzdkZDFhN2IzZDRmZC5zZXRDb250ZW50KGh0bWxfMmM0NjUzYzQ0M2ZkNDkzNmE0ZmI0ZjM1NTMxMTU0YzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NjBiMzllNzAyYjI0ZDc5YjdkNTk5M2QyM2M5ZmRiMy5iaW5kUG9wdXAocG9wdXBfYWM4YzM0YmE0NmNmNDk0MDg4MGM3ZGQxYTdiM2Q0ZmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjQ0Nzk2ZjJiZGE4NGU1ODk2YTUxNDlkYWFlNzUzMDEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC41MTI2LDIuNTIyNjQ1MjU4MjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2ZTY1YjM0ZmY0YzQ5YTc5MDg5MThmYzY2ZjMwNmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiNmJmMDMyNmVjNTQxOGZiY2I2YzAwZjM4NjNkMzk4ID0gJCgnPGRpdiBpZD0iaHRtbF9iYjZiZjAzMjZlYzU0MThmYmNiNmMwMGYzODYzZDM5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUZPUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2ZTY1YjM0ZmY0YzQ5YTc5MDg5MThmYzY2ZjMwNmU4LnNldENvbnRlbnQoaHRtbF9iYjZiZjAzMjZlYzU0MThmYmNiNmMwMGYzODYzZDM5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y0NDc5NmYyYmRhODRlNTg5NmE1MTQ5ZGFhZTc1MzAxLmJpbmRQb3B1cChwb3B1cF9jNmU2NWIzNGZmNGM0OWE3OTA4OTE4ZmM2NmYzMDZlOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmJiNmQwNjI3ZTA0N2IwYWE1OGU2ODIzYWYxM2M1MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuMjA2NTQ3Mjc3NTEsNy4zMDM5ODE4NDIxNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUyZmNmOWNlMjZkNDU0ZmJlZWQyZTgzNGFiMTEyOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTljMTNhZDdhZTBkNGUxMGI0MzkyZGEyNmJlNDg1MmMgPSAkKCc8ZGl2IGlkPSJodG1sXzE5YzEzYWQ3YWUwZDRlMTBiNDM5MmRhMjZiZTQ4NTJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JR0FMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmUyZmNmOWNlMjZkNDU0ZmJlZWQyZTgzNGFiMTEyOTMuc2V0Q29udGVudChodG1sXzE5YzEzYWQ3YWUwZDRlMTBiNDM5MmRhMjZiZTQ4NTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTZiYjZkMDYyN2UwNDdiMGFhNThlNjgyM2FmMTNjNTEuYmluZFBvcHVwKHBvcHVwX2ZlMmZjZjljZTI2ZDQ1NGZiZWVkMmU4MzRhYjExMjkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2MzE0ZjBkZmYzNzQ2OTg4ZTMzZjM3MzJiNTcxYWQxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy45MTkxOTY5NzY1Miw2LjcyNjQ3ODk0NDE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODc2MGJjMzAwYjU0NmQwYjg5ODE1ZmY3N2QxOGYxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2NiNmQxMTY5ZjM0MTc4YWQ4ZWU3MTQ1MTUzMzAxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzNjYjZkMTE2OWYzNDE3OGFkOGVlNzE0NTE1MzMwMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklHQklSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg3NjBiYzMwMGI1NDZkMGI4OTgxNWZmNzdkMThmMTMuc2V0Q29udGVudChodG1sXzMzY2I2ZDExNjlmMzQxNzhhZDhlZTcxNDUxNTMzMDE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTYzMTRmMGRmZjM3NDY5ODhlMzNmMzczMmI1NzFhZDEuYmluZFBvcHVwKHBvcHVwXzI4NzYwYmMzMDBiNTQ2ZDBiODk4MTVmZjc3ZDE4ZjEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA1YmZjZjYwZmQ2ZjQ0ZjRiYzAxM2UzYzAzMjJiNmEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC44MDY5NTUyOTk4Nyw2LjI3ODgzNzE0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWY4MWM0Nzg4OTE5NDNiNWFkM2NmY2I0MjMyN2NkNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjdlZGIyNmQzMWNiNGVlN2I0ZWI4YWNmYTJkZDQwZGEgPSAkKCc8ZGl2IGlkPSJodG1sX2Y3ZWRiMjZkMzFjYjRlZTdiNGViOGFjZmEyZGQ0MGRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JSkFXPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZjgxYzQ3ODg5MTk0M2I1YWQzY2ZjYjQyMzI3Y2Q0Ni5zZXRDb250ZW50KGh0bWxfZjdlZGIyNmQzMWNiNGVlN2I0ZWI4YWNmYTJkZDQwZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNWJmY2Y2MGZkNmY0NGY0YmMwMTNlM2MwMzIyYjZhMi5iaW5kUG9wdXAocG9wdXBfMWY4MWM0Nzg4OTE5NDNiNWFkM2NmY2I0MjMyN2NkNDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjVkNTI2ZmQ3NjExNGVjOTgyYWMxZjA0Mzg0MGU0NTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjY3MjgxMjE5MDI4LDQuMDg2NzIyMDU5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M5NDE3Zjg2Nzg1NDBiYzk4ZDZkMzA5OTY2MWIzNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZkODY2MDI0OGU5NGJhZGE0MzY3NjIzMGZlYWU1ZTggPSAkKCc8ZGl2IGlkPSJodG1sX2JmZDg2NjAyNDhlOTRiYWRhNDM2NzYyMzBmZWFlNWU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JSkVCVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2M5NDE3Zjg2Nzg1NDBiYzk4ZDZkMzA5OTY2MWIzNWQuc2V0Q29udGVudChodG1sX2JmZDg2NjAyNDhlOTRiYWRhNDM2NzYyMzBmZWFlNWU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjVkNTI2ZmQ3NjExNGVjOTgyYWMxZjA0Mzg0MGU0NTEuYmluZFBvcHVwKHBvcHVwX2NjOTQxN2Y4Njc4NTQwYmM5OGQ2ZDMwOTk2NjFiMzVkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA0NmZhYjk2YjZkYjQyNGY5NDMxMjg2Yjc1Nzc3NGJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMS40NjkxMTE5NjM0MywxNy4yNzAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZDcyN2JmNjM2NTM0NGIzYjdkMjkxZWY2Y2ZjMzQ2OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Mjg4YTNjYmM3NDI0Y2MwYTljYTRkODkzMTUwZTlmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTI4OGEzY2JjNzQyNGNjMGE5Y2E0ZDg5MzE1MGU5ZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklLQVNBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDcyN2JmNjM2NTM0NGIzYjdkMjkxZWY2Y2ZjMzQ2OC5zZXRDb250ZW50KGh0bWxfOTI4OGEzY2JjNzQyNGNjMGE5Y2E0ZDg5MzE1MGU5ZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNDZmYWI5NmI2ZGI0MjRmOTQzMTI4NmI3NTc3NzRiYy5iaW5kUG9wdXAocG9wdXBfMWQ3MjdiZjYzNjUzNDRiM2I3ZDI5MWVmNmNmYzM0NjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWY0MTU5Nzg2NjhmNDAxZDlmYzk1MGY5NDNhYjlkYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuNjkyNywyNi44MDEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNjY0MDZhYTk3ODE0M2NmYmQ0MDc5ZmJjOTc4ZmIxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MWY5MGY2MmNmZjM0YWQ5YTQ1NzQ4YjkxODY3Y2YwOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjFmOTBmNjJjZmYzNGFkOWE0NTc0OGI5MTg2N2NmMDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTY2NDA2YWE5NzgxNDNjZmJkNDA3OWZiYzk3OGZiMWMuc2V0Q29udGVudChodG1sXzYxZjkwZjYyY2ZmMzRhZDlhNDU3NDhiOTE4NjdjZjA4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWY0MTU5Nzg2NjhmNDAxZDlmYzk1MGY5NDNhYjlkYjIuYmluZFBvcHVwKHBvcHVwX2E2NjQwNmFhOTc4MTQzY2ZiZDQwNzlmYmM5NzhmYjFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M3Y2EyZmE5NDRlYzRmZWNiM2EwZTdhYjVmNGMzNmZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuMjc2LC0xNC44OTc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjVkNjAyZTcyMDg0ZmFjYmRjOWM3NjljYTQ4OWE3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzQyZmE2NWNjY2Q0NjA5OTM5MjE3M2FlNmI4MDE5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzc0MmZhNjVjY2NkNDYwOTkzOTIxNzNhZTZiODAxOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklNUkFHRU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEyNWQ2MDJlNzIwODRmYWNiZGM5Yzc2OWNhNDg5YTc3LnNldENvbnRlbnQoaHRtbF9jNzQyZmE2NWNjY2Q0NjA5OTM5MjE3M2FlNmI4MDE5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M3Y2EyZmE5NDRlYzRmZWNiM2EwZTdhYjVmNGMzNmZjLmJpbmRQb3B1cChwb3B1cF8xMjVkNjAyZTcyMDg0ZmFjYmRjOWM3NjljYTQ4OWE3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOGFiNGQ3YmFlMjA0MTI2YWViNzMwNzJhYzY4ZjU0YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjM1MzMsMzMuODgyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTljNWE4NzE4MTAxNDVlMDg0OTVmZWM0ZmM1NDQxN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTBkZGQ2YTMwMTZiNDA3MWIxYzAyMjA1ZGEwOTM4ZWIgPSAkKCc8ZGl2IGlkPSJodG1sXzUwZGRkNmEzMDE2YjQwNzFiMWMwMjIwNWRhMDkzOGViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JTkdBU1NBTkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5YzVhODcxODEwMTQ1ZTA4NDk1ZmVjNGZjNTQ0MTdmLnNldENvbnRlbnQoaHRtbF81MGRkZDZhMzAxNmI0MDcxYjFjMDIyMDVkYTA5MzhlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM4YWI0ZDdiYWUyMDQxMjZhZWI3MzA3MmFjNjhmNTRjLmJpbmRQb3B1cChwb3B1cF9hOWM1YTg3MTgxMDE0NWUwODQ5NWZlYzRmYzU0NDE3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MTlhMjUwNmE2YWM0MGE3YmVmYzM0OTgxNDg0MzQxNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy00LjM0NTQ3LDM0LjQyNjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1OWE3OTAxZDhhZTRlN2ZiMmJjZDQ5NTJhOTFkMGMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4MDJiYjFmNDllNTQ3ZmZhZTA1M2RmZThiZGE1ZGMxID0gJCgnPGRpdiBpZD0iaHRtbF82ODAyYmIxZjQ5ZTU0N2ZmYWUwNTNkZmU4YmRhNWRjMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVJBTUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTlhNzkwMWQ4YWU0ZTdmYjJiY2Q0OTUyYTkxZDBjMy5zZXRDb250ZW50KGh0bWxfNjgwMmJiMWY0OWU1NDdmZmFlMDUzZGZlOGJkYTVkYzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MTlhMjUwNmE2YWM0MGE3YmVmYzM0OTgxNDg0MzQxNi5iaW5kUG9wdXAocG9wdXBfZTU5YTc5MDFkOGFlNGU3ZmIyYmNkNDk1MmE5MWQwYzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjZjMTYxMTQwM2U5NGEwMWI3NDQ0YWIxYmUwMTA3ZWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMy44MTMyOSwzNS40MDgxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hY2Y5MGViMzczNDM0OTRlODEyODYwYTkyM2JjMTQ3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTRjOTk3MDE4N2Q0N2RhODI0ZTgyMDI5NmVkNWQ1ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjE0Yzk5NzAxODdkNDdkYTgyNGU4MjAyOTZlZDVkNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklSQVFXPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hY2Y5MGViMzczNDM0OTRlODEyODYwYTkyM2JjMTQ3OS5zZXRDb250ZW50KGh0bWxfNjE0Yzk5NzAxODdkNDdkYTgyNGU4MjAyOTZlZDVkNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NmMxNjExNDAzZTk0YTAxYjc0NDRhYjFiZTAxMDdlYi5iaW5kUG9wdXAocG9wdXBfYWNmOTBlYjM3MzQzNDk0ZTgxMjg2MGE5MjNiYzE0NzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjVmYjc3MmI0NTNkNDY1MGI5MDM0N2U0YmExMGUxNzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjQzOTIyMjMyNjg0LDQ1LjY3MzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwOGQ0YmVmMDdkMTQwODBhZGU3ZjI4MzljMzFhODJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1MjgwYjg5ZTBkZjQxOWNhOGQyNjg3YjRkMTEyNzFiID0gJCgnPGRpdiBpZD0iaHRtbF83NTI4MGI4OWUwZGY0MTljYThkMjY4N2I0ZDExMjcxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVNIQUFLPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDhkNGJlZjA3ZDE0MDgwYWRlN2YyODM5YzMxYTgyYS5zZXRDb250ZW50KGh0bWxfNzUyODBiODllMGRmNDE5Y2E4ZDI2ODdiNGQxMTI3MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNWZiNzcyYjQ1M2Q0NjUwYjkwMzQ3ZTRiYTEwZTE3Ni5iaW5kUG9wdXAocG9wdXBfZTA4ZDRiZWYwN2QxNDA4MGFkZTdmMjgzOWMzMWE4MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjg5Njc5Y2ZjMGZkNGQ1Y2E1ZWNmN2FiMTQzMmRkNmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjYwNDQ2MjQ1OTcxLDYuMTMwNDIzMjczNDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjZDgxMWNhNDc1ODQ2NTY4M2I3NjM2YWU3YjFjMThmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxNDk2MGRjNmI5MzQ3MThhY2NiOTNkNTFmOGEyNGJhID0gJCgnPGRpdiBpZD0iaHRtbF9lMTQ5NjBkYzZiOTM0NzE4YWNjYjkzZDUxZjhhMjRiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVNPS088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjZDgxMWNhNDc1ODQ2NTY4M2I3NjM2YWU3YjFjMThmLnNldENvbnRlbnQoaHRtbF9lMTQ5NjBkYzZiOTM0NzE4YWNjYjkzZDUxZjhhMjRiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y4OTY3OWNmYzBmZDRkNWNhNWVjZjdhYjE0MzJkZDZlLmJpbmRQb3B1cChwb3B1cF9mY2Q4MTFjYTQ3NTg0NjU2ODNiNzYzNmFlN2IxYzE4Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYWI0ZWE3NTM5MjI0OWVkYjI1MThhYWY2Y2JhNjdhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUuNTkxMDIzNzIyNzUsNS40OTE2MTQ2MTg2NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE0Y2FjZmMyMDM3NDJiY2IxZDFlZTNmOTljOGQ4ODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM1NzBhZjNjZmM2NGZmNGJhNGE3ZTg2ZDA4OWRkYmYgPSAkKCc8ZGl2IGlkPSJodG1sX2QzNTcwYWYzY2ZjNjRmZjRiYTRhN2U4NmQwODlkZGJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JVFNFS0lSSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE0Y2FjZmMyMDM3NDJiY2IxZDFlZTNmOTljOGQ4ODYuc2V0Q29udGVudChodG1sX2QzNTcwYWYzY2ZjNjRmZjRiYTRhN2U4NmQwODlkZGJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWFiNGVhNzUzOTIyNDllZGIyNTE4YWFmNmNiYTY3YTUuYmluZFBvcHVwKHBvcHVwXzkxNGNhY2ZjMjAzNzQyYmNiMWQxZWUzZjk5YzhkODg2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE3YWIzMzRjNjUxMDQxNjg5MjE5ZmI2Mzk1ZTY0ZGYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC45NDQ5NzU1OTI0LDQxLjQzMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcyZWE0YzdmMzY3ZjQzNDBhYzBmZjIyNjllOWViYWM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0N2ZjZmNjY2UwYTQ3MjhhYjA2MTNjOTA2ZDk3YWViID0gJCgnPGRpdiBpZD0iaHRtbF8wNDdmY2ZjY2NlMGE0NzI4YWIwNjEzYzkwNmQ5N2FlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVRUVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzJlYTRjN2YzNjdmNDM0MGFjMGZmMjI2OWU5ZWJhYzYuc2V0Q29udGVudChodG1sXzA0N2ZjZmNjY2UwYTQ3MjhhYjA2MTNjOTA2ZDk3YWViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTdhYjMzNGM2NTEwNDE2ODkyMTlmYjYzOTVlNjRkZjEuYmluZFBvcHVwKHBvcHVwXzcyZWE0YzdmMzY3ZjQzNDBhYzBmZjIyNjllOWViYWM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMxYTYxMTBiNjExYzQ3ZjM5NTAzODBmNzI2YWJmNzZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuNDY4NjYsMzIuNTE4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjc5ODc3NDJhYzQ3NDI3MGJiYTRiYWE2N2NhNThkZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzE5N2JiMTQ2MmQ4NDljN2EwNmE5MjJjNzIxMTE3ZWYgPSAkKCc8ZGl2IGlkPSJodG1sX2MxOTdiYjE0NjJkODQ5YzdhMDZhOTIyYzcyMTExN2VmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JV0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3OTg3NzQyYWM0NzQyNzBiYmE0YmFhNjdjYTU4ZGRjLnNldENvbnRlbnQoaHRtbF9jMTk3YmIxNDYyZDg0OWM3YTA2YTkyMmM3MjExMTdlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMxYTYxMTBiNjExYzQ3ZjM5NTAzODBmNzI2YWJmNzZmLmJpbmRQb3B1cChwb3B1cF82Nzk4Nzc0MmFjNDc0MjcwYmJhNGJhYTY3Y2E1OGRkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYjhiM2RkMjYzYjg0ODYwYjZlYjE1NWMyYzY0Mjk0YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuODkyMTUzMDIzNTEsOC41Mzc2OTA5ODQwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE1ZWIxN2E1MjI3NDU0OWI1ODYxYzg4NDM1NjI4ZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDE2NTg1YmQyMDBiNGJmZmJiMDdhYjA0NGQ5MWY1NGYgPSAkKCc8ZGl2IGlkPSJodG1sXzAxNjU4NWJkMjAwYjRiZmZiYjA3YWIwNDRkOTFmNTRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JWUFMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE1ZWIxN2E1MjI3NDU0OWI1ODYxYzg4NDM1NjI4ZTIuc2V0Q29udGVudChodG1sXzAxNjU4NWJkMjAwYjRiZmZiYjA3YWIwNDRkOTFmNTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmI4YjNkZDI2M2I4NDg2MGI2ZWIxNTVjMmM2NDI5NGMuYmluZFBvcHVwKHBvcHVwXzUxNWViMTdhNTIyNzQ1NDliNTg2MWM4ODQzNTYyOGUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc5YzljN2Y2YWMxMzRjYzFhNzNlYWFhZTBlYzkzOWE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguOTcyNywyMS4yNjEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODIyNWY5OGYzMjc0ZTQ5YjUzYmUyMTliYzNkZjk1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODAzZjdhZGRlYWQ0ZGM3OTBlYjc5OWE4NjdiNmVmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjgwM2Y3YWRkZWFkNGRjNzkwZWI3OTlhODY3YjZlZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBTE88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4MjI1Zjk4ZjMyNzRlNDliNTNiZTIxOWJjM2RmOTU1LnNldENvbnRlbnQoaHRtbF9iODAzZjdhZGRlYWQ0ZGM3OTBlYjc5OWE4NjdiNmVmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5YzljN2Y2YWMxMzRjYzFhNzNlYWFhZTBlYzkzOWE5LmJpbmRQb3B1cChwb3B1cF9hODIyNWY5OGYzMjc0ZTQ5YjUzYmUyMTliYzNkZjk1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NDNmYzIxNTk4ODI0MWI4OTFhMzcwZTdiNDhjNTE4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuODA5NzM0MzkyNDUsMzcuNDg3OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTIxNjM2MmIyNTZhNDliMDkxMDI1YzViYzY2M2U2NDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzFlZDg1NmI2MTU3NDE4MmJhZjU4ZjA4MmNhOWM0ZmYgPSAkKCc8ZGl2IGlkPSJodG1sX2MxZWQ4NTZiNjE1NzQxODJiYWY1OGYwODJjYTljNGZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQU5KRVJPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjE2MzYyYjI1NmE0OWIwOTEwMjVjNWJjNjYzZTY0My5zZXRDb250ZW50KGh0bWxfYzFlZDg1NmI2MTU3NDE4MmJhZjU4ZjA4MmNhOWM0ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NDNmYzIxNTk4ODI0MWI4OTFhMzcwZTdiNDhjNTE4MS5iaW5kUG9wdXAocG9wdXBfYTIxNjM2MmIyNTZhNDliMDkxMDI1YzViYzY2M2U2NDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2NiYWY1YjlkMTQ3NDk5Mzk0ZDMzOGIzMTBkNTc2ZmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4wOTk4LDkuNTYwNjE1Mjc4NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzZWM0MzBkMzVkMjQ0ZDVhNzMyMDRmZTJiNGJmZjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhOGVkZTExMThkZTRmYmY5MmFjOTI0NWFhYzdlMWM5ID0gJCgnPGRpdiBpZD0iaHRtbF9kYThlZGUxMTE4ZGU0ZmJmOTJhYzkyNDVhYWM3ZTFjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSQVdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mM2VjNDMwZDM1ZDI0NGQ1YTczMjA0ZmUyYjRiZmYwYi5zZXRDb250ZW50KGh0bWxfZGE4ZWRlMTExOGRlNGZiZjkyYWM5MjQ1YWFjN2UxYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jY2JhZjViOWQxNDc0OTkzOTRkMzM4YjMxMGQ1NzZmYi5iaW5kUG9wdXAocG9wdXBfZjNlYzQzMGQzNWQyNDRkNWE3MzIwNGZlMmI0YmZmMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGRmNzk4NDVlZjg1NGQyN2I1MjhlYTZiNTRkZGJmNmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC44NTA2LC01LjI4MDM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTJlNmNmMjE3ODU0OTY0YTJlZmQzN2FhNTc0YTRhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzQxODVlOTRiNTY0YmE0OWIyMWRlODhhNjBmZTQ1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzc0MTg1ZTk0YjU2NGJhNDliMjFkZTg4YTYwZmU0NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpFQkFMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTkyZTZjZjIxNzg1NDk2NGEyZWZkMzdhYTU3NGE0YTYuc2V0Q29udGVudChodG1sXzc3NDE4NWU5NGI1NjRiYTQ5YjIxZGU4OGE2MGZlNDU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGRmNzk4NDVlZjg1NGQyN2I1MjhlYTZiNTRkZGJmNmQuYmluZFBvcHVwKHBvcHVwX2U5MmU2Y2YyMTc4NTQ5NjRhMmVmZDM3YWE1NzRhNGE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVkYzc3MTQ4OTNjODQwODA5NjJlY2EyOWFkZWI1NGI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS43MTQyMDI5OTQ5NiwxMS42NzAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGI0NDFiMWZmY2Q0OGFlOWE5ZjU1NmY2ODAxYmU5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YmI2MGM0YWQ2NTQ0ZDQzYjk2NWY5OWU3MzNlNzUxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWJiNjBjNGFkNjU0NGQ0M2I5NjVmOTllNzMzZTc1MTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpFTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBiNDQxYjFmZmNkNDhhZTlhOWY1NTZmNjgwMWJlOTIuc2V0Q29udGVudChodG1sXzliYjYwYzRhZDY1NDRkNDNiOTY1Zjk5ZTczM2U3NTEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWRjNzcxNDg5M2M4NDA4MDk2MmVjYTI5YWRlYjU0YjcuYmluZFBvcHVwKHBvcHVwX2YwYjQ0MWIxZmZjZDQ4YWU5YTlmNTU2ZjY4MDFiZTkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcyNzRiMTlhYjBmMTQ4MjViODVkZDgxYWMwNDRjMDk2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuMjAxMyw4Ljg3NjMyMjExOTM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZmExOTk1MWI4NjU0MjZlODU2ODUyZWQwYjVlZmZlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZWFmMzQ0NTI0YmY0ZjcxOTE3NjMzNWZjNzljN2ZjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMWVhZjM0NDUyNGJmNGY3MTkxNzYzMzVmYzc5YzdmYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpFUkFXQSwgQ0hBV0FJIChTVyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmYTE5OTUxYjg2NTQyNmU4NTY4NTJlZDBiNWVmZmUwLnNldENvbnRlbnQoaHRtbF8xZWFmMzQ0NTI0YmY0ZjcxOTE3NjMzNWZjNzljN2ZjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyNzRiMTlhYjBmMTQ4MjViODVkZDgxYWMwNDRjMDk2LmJpbmRQb3B1cChwb3B1cF9jZmExOTk1MWI4NjU0MjZlODU2ODUyZWQwYjVlZmZlMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZWZmYmU2NDY1OGM0ZDc5YTBlZjRjYjFiNWJkOTZhOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5MzUsMTAuODY0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDI0Yzg0ZTkzY2M5NGZhYjgxYWI3YWIxNDQwNTEzNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThmZjA2YmViZmJmNDM3NTg0YzAwZGVhMjQ4ZDRhYTkgPSAkKCc8ZGl2IGlkPSJodG1sXzU4ZmYwNmJlYmZiZjQzNzU4NGMwMGRlYTI0OGQ0YWE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KRVJCQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDI0Yzg0ZTkzY2M5NGZhYjgxYWI3YWIxNDQwNTEzNzUuc2V0Q29udGVudChodG1sXzU4ZmYwNmJlYmZiZjQzNzU4NGMwMGRlYTI0OGQ0YWE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2VmZmJlNjQ2NThjNGQ3OWEwZWY0Y2IxYjViZDk2YTkuYmluZFBvcHVwKHBvcHVwX2QyNGM4NGU5M2NjOTRmYWI4MWFiN2FiMTQ0MDUxMzc1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RjZDljM2ZkZmE4ODRiMmZiOGZhZTMwNmMyZDQ5OTQxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuODkyMiw4LjQwNzgyMDcwNjYyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZmUyYzk3NzYyN2E0NDFmYjRiNGViNjVmZTBhZjRiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80Y2YxMDNmYzRhOGE0NmMxYmI0NjM1ZDdiOGJmNWNkMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGNmMTAzZmM0YThhNDZjMWJiNDYzNWQ3YjhiZjVjZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpFUklEPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmUyYzk3NzYyN2E0NDFmYjRiNGViNjVmZTBhZjRiZS5zZXRDb250ZW50KGh0bWxfNGNmMTAzZmM0YThhNDZjMWJiNDYzNWQ3YjhiZjVjZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kY2Q5YzNmZGZhODg0YjJmYjhmYWUzMDZjMmQ0OTk0MS5iaW5kUG9wdXAocG9wdXBfN2ZlMmM5Nzc2MjdhNDQxZmI0YjRlYjY1ZmUwYWY0YmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTIzMjQzYTcxNjA0NDdkMThmZjI1Y2EwYjMwN2M1ZjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3Ljc3NjU4MjgzNzgyLDExLjI5NTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwMmQ1MGUyMjU2MzQ5ZjE5OTg5YTQ3MmY4Y2Y5MGY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyZTU4YmYwY2YzYzQ5ZGRiNzVhMmI1ZDkwYmI1NzVmID0gJCgnPGRpdiBpZD0iaHRtbF85MmU1OGJmMGNmM2M0OWRkYjc1YTJiNWQ5MGJiNTc1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SklCVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODAyZDUwZTIyNTYzNDlmMTk5ODlhNDcyZjhjZjkwZjkuc2V0Q29udGVudChodG1sXzkyZTU4YmYwY2YzYzQ5ZGRiNzVhMmI1ZDkwYmI1NzVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTIzMjQzYTcxNjA0NDdkMThmZjI1Y2EwYjMwN2M1ZjcuYmluZFBvcHVwKHBvcHVwXzgwMmQ1MGUyMjU2MzQ5ZjE5OTg5YTQ3MmY4Y2Y5MGY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFlM2EzYzRkYjFiZDQ2NzFhMDM5OTRiOWIwZGFkZDVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy40MTI4ODA3MTMwNSwzNC4xMzcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMzZhM2Q0MzNkMzY0YTMwOGYzNTc3ZTA2ZGRlMTkyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kODVlMDkyYmJkYzk0NTViOWY1YzEyZTA5YzA2ZDg1ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDg1ZTA5MmJiZGM5NDU1YjlmNWMxMmUwOWMwNmQ4NWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpJRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzM2YTNkNDMzZDM2NGEzMDhmMzU3N2UwNmRkZTE5MmQuc2V0Q29udGVudChodG1sX2Q4NWUwOTJiYmRjOTQ1NWI5ZjVjMTJlMDljMDZkODVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWUzYTNjNGRiMWJkNDY3MWEwMzk5NGI5YjBkYWRkNWUuYmluZFBvcHVwKHBvcHVwX2MzNmEzZDQzM2QzNjRhMzA4ZjM1NzdlMDZkZGUxOTJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M4ZTMyZWY5MTNjODQ1Mzg5ODFiZWViZmQ3ZDM3ODQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguODIyNCwxNi41MzkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDRjOGE4YzQ4N2U0NTRlYTI4YWQyYjBiZTU0ZWU5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTEwMTFhMzFhYjE0ZjEyODY4ZjRlNWY2ODExNGE5YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMWUxMDExYTMxYWIxNGYxMjg2OGY0ZTVmNjgxMTRhOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpPRlJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDRjOGE4YzQ4N2U0NTRlYTI4YWQyYjBiZTU0ZWU5Mi5zZXRDb250ZW50KGh0bWxfMWUxMDExYTMxYWIxNGYxMjg2OGY0ZTVmNjgxMTRhOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOGUzMmVmOTEzYzg0NTM4OTgxYmVlYmZkN2QzNzg0OC5iaW5kUG9wdXAocG9wdXBfMjQ0YzhhOGM0ODdlNDU0ZWEyOGFkMmIwYmU1NGVlOTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGU5YmRiMDY0MDNkNGIxOTkzMzc0N2M1ZWUxYjU1ZDEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjU5Njk0MTY5NjUsMTAuNTg3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YTcxYTA4MTc0NmU0ZTU2ODcxMWJkYmZkMmUzZDZmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wM2EzNjNiNmNiMWE0ODE5OTlmYjViZWQwMjY0NGI1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDNhMzYzYjZjYjFhNDgxOTk5ZmI1YmVkMDI2NDRiNTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpVS1VOPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YTcxYTA4MTc0NmU0ZTU2ODcxMWJkYmZkMmUzZDZmNC5zZXRDb250ZW50KGh0bWxfMDNhMzYzYjZjYjFhNDgxOTk5ZmI1YmVkMDI2NDRiNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZTliZGIwNjQwM2Q0YjE5OTMzNzQ3YzVlZTFiNTVkMS5iaW5kUG9wdXAocG9wdXBfOGE3MWEwODE3NDZlNGU1Njg3MTFiZGJmZDJlM2Q2ZjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGQwOGE2OTU3ZDViNDZjOWFlNTY4YzE1NDhjODg2NjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjA3ODgyODc3MTIyLDI4LjA0MjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiNGExMTljNmQwMTQ3NWFhYTI0MjYxOGQ4OGI1OTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExMGRlNTU0MDI3ODQ3ODc5MjQzY2Y0MjdlNDQ4YzNkID0gJCgnPGRpdiBpZD0iaHRtbF8xMTBkZTU1NDAyNzg0Nzg3OTI0M2NmNDI3ZTQ0OGMzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SlVSPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjRhMTE5YzZkMDE0NzVhYWEyNDI2MThkODhiNTk0NC5zZXRDb250ZW50KGh0bWxfMTEwZGU1NTQwMjc4NDc4NzkyNDNjZjQyN2U0NDhjM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZDA4YTY5NTdkNWI0NmM5YWU1NjhjMTU0OGM4ODY2NC5iaW5kUG9wdXAocG9wdXBfNGI0YTExOWM2ZDAxNDc1YWFhMjQyNjE4ZDg4YjU5NDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDllZDU3YmE4Njk0NGJmY2FlN2EyOTUzYzA2Nzc2MzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi42ODQxLDI5LjQ0NjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmMTAwYTAyNmY3MTRhMDJhZDJlMDVmMTNhNTM1OTYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5MzQyN2FjZmJkMzQxYjg5ZTkzNzRiZWNmNGEzZDJmID0gJCgnPGRpdiBpZD0iaHRtbF82OTM0MjdhY2ZiZDM0MWI4OWU5Mzc0YmVjZjRhM2QyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FCQUJJU0g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMTAwYTAyNmY3MTRhMDJhZDJlMDVmMTNhNTM1OTYzLnNldENvbnRlbnQoaHRtbF82OTM0MjdhY2ZiZDM0MWI4OWU5Mzc0YmVjZjRhM2QyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5ZWQ1N2JhODY5NDRiZmNhZTdhMjk1M2MwNjc3NjMyLmJpbmRQb3B1cChwb3B1cF84ZjEwMGEwMjZmNzE0YTAyYWQyZTA1ZjEzYTUzNTk2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYTc4NTlhN2Q1NTg0ZTVkYWFhM2MwMjllOWFiODVhOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuODE5MDYxODM0ODYsMS4yMjU0MjE5MzQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTNhZTUzNGRkNDFjNDE1YWJhOGE1NTE2OWE3MmY3MjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGI5YWUxMzA3ODU5NDZmODhjZTNjYjVjMWJmODQxNDEgPSAkKCc8ZGl2IGlkPSJodG1sX2RiOWFlMTMwNzg1OTQ2Zjg4Y2UzY2I1YzFiZjg0MTQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQUJSRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTNhZTUzNGRkNDFjNDE1YWJhOGE1NTE2OWE3MmY3MjMuc2V0Q29udGVudChodG1sX2RiOWFlMTMwNzg1OTQ2Zjg4Y2UzY2I1YzFiZjg0MTQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2E3ODU5YTdkNTU4NGU1ZGFhYTNjMDI5ZTlhYjg1YTkuYmluZFBvcHVwKHBvcHVwX2EzYWU1MzRkZDQxYzQxNWFiYThhNTUxNjlhNzJmNzIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFhMGQxYzdmNzk2NzRhYmI5ZmQyM2VlYjlhNTJjZDUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNTQ5NSw0LjMwNzA2MzkzNDg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODNlMjk5YTg1NzY0OGRkOTE3YWY5ZmZjODRjMTM4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzAwZjQxMzZjMjQ0NTE1OGMxYWRkNDIyM2JmMDgxMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTcwMGY0MTM2YzI0NDUxNThjMWFkZDQyMjNiZjA4MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBQllMRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzgzZTI5OWE4NTc2NDhkZDkxN2FmOWZmYzg0YzEzOGIuc2V0Q29udGVudChodG1sXzE3MDBmNDEzNmMyNDQ1MTU4YzFhZGQ0MjIzYmYwODEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWEwZDFjN2Y3OTY3NGFiYjlmZDIzZWViOWE1MmNkNTMuYmluZFBvcHVwKHBvcHVwX2M4M2UyOTlhODU3NjQ4ZGQ5MTdhZjlmZmM4NGMxMzhiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y5NzQ1M2IwNmZlYjQ3ZTA5YTU2NGZkMjBhYjVlZjFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS45OTM2OTA0NjkwNSw3Ljc0ODkwODQ3NzA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmE0MDM3OGQ5OGQ0MTk0YjU0ZTE1NWQwMWIzMzhkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MDgwOGYyNjZjNjM0OTgwYjU5YmUwM2I3OThlYzVhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfODA4MDhmMjY2YzYzNDk4MGI1OWJlMDNiNzk4ZWM1YTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBREFSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmZhNDAzNzhkOThkNDE5NGI1NGUxNTVkMDFiMzM4ZGIuc2V0Q29udGVudChodG1sXzgwODA4ZjI2NmM2MzQ5ODBiNTliZTAzYjc5OGVjNWEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjk3NDUzYjA2ZmViNDdlMDlhNTY0ZmQyMGFiNWVmMWYuYmluZFBvcHVwKHBvcHVwXzJmYTQwMzc4ZDk4ZDQxOTRiNTRlMTU1ZDAxYjMzOGRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlhZjNlYThkYjM3MDQyMWZhNjk5MjNjZWU3OWI2ZWI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4zODU1Mzk2NTc5NSwzNi4xMDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZTM2MzIwYzQ0MTM0MjhkODUzNzE3YzA5NDNmNjQyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWEwOWIwNTBlNzQ0OTNjYmYzYWI0OTJhZGFjZjhmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDlhMDliMDUwZTc0NDkzY2JmM2FiNDkyYWRhY2Y4ZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBRkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlMzYzMjBjNDQxMzQyOGQ4NTM3MTdjMDk0M2Y2NDI3LnNldENvbnRlbnQoaHRtbF8wOWEwOWIwNTBlNzQ0OTNjYmYzYWI0OTJhZGFjZjhmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlhZjNlYThkYjM3MDQyMWZhNjk5MjNjZWU3OWI2ZWI2LmJpbmRQb3B1cChwb3B1cF8xZTM2MzIwYzQ0MTM0MjhkODUzNzE3YzA5NDNmNjQyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NTZmYjAwYzNmMzE0MDI1YTk4NjZmZDM4ODQzNGY1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjEzOSwtOC43NDM0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjUzZDNiY2QxNmNkNGQxODgxOWVhNGNiNGJkZDg0OTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZhZTIzZmQ3YjQzNDA5MmE1ZmJjMDUyYzFlNjI0ODkgPSAkKCc8ZGl2IGlkPSJodG1sX2NmYWUyM2ZkN2I0MzQwOTJhNWZiYzA1MmMxZTYyNDg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQUdPUk88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1M2QzYmNkMTZjZDRkMTg4MTllYTRjYjRiZGQ4NDk2LnNldENvbnRlbnQoaHRtbF9jZmFlMjNmZDdiNDM0MDkyYTVmYmMwNTJjMWU2MjQ4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg1NmZiMDBjM2YzMTQwMjVhOTg2NmZkMzg4NDM0ZjVjLmJpbmRQb3B1cChwb3B1cF8yNTNkM2JjZDE2Y2Q0ZDE4ODE5ZWE0Y2I0YmRkODQ5Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MmFmZThiMWEwMDk0MmZmODk4YjUyZDU3M2I2NzUyMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuMzc2MDgyMTUyMzYsMTQuNDQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJiN2EzMjQ4N2Y0NGVhZDg5MTczMzRlZDAyMzJjY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjJiNGJlYzk3MTI3NGJkNGIxZmQ3NGIxMzE4ODljNjAgPSAkKCc8ZGl2IGlkPSJodG1sXzYyYjRiZWM5NzEyNzRiZDRiMWZkNzRiMTMxODg5YzYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQUtBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YmI3YTMyNDg3ZjQ0ZWFkODkxNzMzNGVkMDIzMmNjZC5zZXRDb250ZW50KGh0bWxfNjJiNGJlYzk3MTI3NGJkNGIxZmQ3NGIxMzE4ODljNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MmFmZThiMWEwMDk0MmZmODk4YjUyZDU3M2I2NzUyMi5iaW5kUG9wdXAocG9wdXBfNmJiN2EzMjQ4N2Y0NGVhZDg5MTczMzRlZDAyMzJjY2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDBjOTAwODBhMTgyNDUzYzkyODc2ZjI3NGFhYmZhMTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC44MzQ1MDQsMTEuMzI3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTk0MmUxM2U0ZjkyNDcwYzk2NzRkNmQ3YjE0ZDBhMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQ4ZTdiNDBkODE1NGY1OTkxMTk1N2FlM2JlNDg3OGMgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0OGU3YjQwZDgxNTRmNTk5MTE5NTdhZTNiZTQ4NzhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQUxBSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTk0MmUxM2U0ZjkyNDcwYzk2NzRkNmQ3YjE0ZDBhMDIuc2V0Q29udGVudChodG1sX2Y0OGU3YjQwZDgxNTRmNTk5MTE5NTdhZTNiZTQ4NzhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDBjOTAwODBhMTgyNDUzYzkyODc2ZjI3NGFhYmZhMTIuYmluZFBvcHVwKHBvcHVwXzk5NDJlMTNlNGY5MjQ3MGM5Njc0ZDZkN2IxNGQwYTAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc1YzU4ZDJkZDMwNjQzYmVhYmRlMGRmMTAyODkyYTFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC41MTk5Nzk3OTI3NCwxMS4wMjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlNDg3OWJkODc3YzRmMDY4ZjQ0OWFkZmM3Zjk0NWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhODg5M2Y3YjdmZDRhZTNhYWYyZDBiZTM2OGI1ZTA2ID0gJCgnPGRpdiBpZD0iaHRtbF9iYTg4OTNmN2I3ZmQ0YWUzYWFmMmQwYmUzNjhiNWUwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZTQ4NzliZDg3N2M0ZjA2OGY0NDlhZGZjN2Y5NDVhOS5zZXRDb250ZW50KGh0bWxfYmE4ODkzZjdiN2ZkNGFlM2FhZjJkMGJlMzY4YjVlMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NWM1OGQyZGQzMDY0M2JlYWJkZTBkZjEwMjg5MmExZC5iaW5kUG9wdXAocG9wdXBfYWU0ODc5YmQ4NzdjNGYwNjhmNDQ5YWRmYzdmOTQ1YTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2I5NGViYWNjNGExNDJmYjg5YjI0YzAwMWY1M2Y5NzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMS42MTkxMywzOC4xNjY2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjEwZjYyNzBiNzA0YWQ2YjY2ZTgwNmI4OTU0NjJlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTdmNmU4YjJjYjE0ZjIwYTc3Nzg1ZjBjOGRkZDRlNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTU3ZjZlOGIyY2IxNGYyMGE3Nzc4NWYwYzhkZGQ0ZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBTUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjEwZjYyNzBiNzA0YWQ2YjY2ZTgwNmI4OTU0NjJlZi5zZXRDb250ZW50KGh0bWxfMTU3ZjZlOGIyY2IxNGYyMGE3Nzc4NWYwYzhkZGQ0ZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYjk0ZWJhY2M0YTE0MmZiODliMjRjMDAxZjUzZjk3Ni5iaW5kUG9wdXAocG9wdXBfYjYxMGY2MjcwYjcwNGFkNmI2NmU4MDZiODk1NDYyZWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzY1NTE2MjNlNmIwNDAzMWFlMzZiYjBiMzdmYzE1YzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjUxNDU2MTcyMzY0LDM4LjAwNDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2NDMwZDVlYmJkNjQzMjQ5OThlZWEyOGU3MWIzNDIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhNzViNjM2Nzg0MDRmOWViZGZjNjYyMjc2OWVhYTliID0gJCgnPGRpdiBpZD0iaHRtbF84YTc1YjYzNjc4NDA0ZjllYmRmYzY2MjI3NjllYWE5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FNQkFUQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTY0MzBkNWViYmQ2NDMyNDk5OGVlYTI4ZTcxYjM0MjIuc2V0Q29udGVudChodG1sXzhhNzViNjM2Nzg0MDRmOWViZGZjNjYyMjc2OWVhYTliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzY1NTE2MjNlNmIwNDAzMWFlMzZiYjBiMzdmYzE1YzQuYmluZFBvcHVwKHBvcHVwXzU2NDMwZDVlYmJkNjQzMjQ5OThlZWEyOGU3MWIzNDIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NhNmY5NjIzYjczMzRjOTliNGVmZTRmMzFkYmYzNmFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNDA4Nyw1LjQ5ODQ1MjY0ODA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wN2I2MzBhMDQ2NzQ0ZjFmOTA5NGE0NTBkMzA0MDAzNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODAzOTRhNjk5YWY0YTc4OGM2YjA4ZjIxYzVjYjI2NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTgwMzk0YTY5OWFmNGE3ODhjNmIwOGYyMWM1Y2IyNjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBTUJFUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3YjYzMGEwNDY3NDRmMWY5MDk0YTQ1MGQzMDQwMDM2LnNldENvbnRlbnQoaHRtbF8xODAzOTRhNjk5YWY0YTc4OGM2YjA4ZjIxYzVjYjI2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NhNmY5NjIzYjczMzRjOTliNGVmZTRmMzFkYmYzNmFlLmJpbmRQb3B1cChwb3B1cF8wN2I2MzBhMDQ2NzQ0ZjFmOTA5NGE0NTBkMzA0MDAzNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MTljYmU3NGNlODk0ZGVkODkwMTMxNDliZjU5NDNlYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjE3NTYsMzguODE5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRkYzk4MmI2Yzc4NDg1N2I2OWZhZDRkODZjNzZmYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzIxNmYzZWYxZjYyNDU3MmI5MmM5OWZmOWFiN2U2NjEgPSAkKCc8ZGl2IGlkPSJodG1sXzcyMTZmM2VmMWY2MjQ1NzJiOTJjOTlmZjlhYjdlNjYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQU1JUjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzRkYzk4MmI2Yzc4NDg1N2I2OWZhZDRkODZjNzZmYjEuc2V0Q29udGVudChodG1sXzcyMTZmM2VmMWY2MjQ1NzJiOTJjOTlmZjlhYjdlNjYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzE5Y2JlNzRjZTg5NGRlZDg5MDEzMTQ5YmY1OTQzZWEuYmluZFBvcHVwKHBvcHVwXzc0ZGM5ODJiNmM3ODQ4NTdiNjlmYWQ0ZDg2Yzc2ZmIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RmY2MwZDRjYzA4NjQ4ZWFhNTZiMGMwNzUyYmM0ZjUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNDY0Miw2LjM4MTIwNDIyMTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyNmJmOWZkODBkNzRiNzM4YzFhZDAzOTQzZGUzZmU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0NWY0NzU0NDdhZTRiNzI5YzU2MWQ3ZDJjNmZmZGMwID0gJCgnPGRpdiBpZD0iaHRtbF85NDVmNDc1NDQ3YWU0YjcyOWM1NjFkN2QyYzZmZmRjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FNVUtVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjZiZjlmZDgwZDc0YjczOGMxYWQwMzk0M2RlM2ZlNS5zZXRDb250ZW50KGh0bWxfOTQ1ZjQ3NTQ0N2FlNGI3MjljNTYxZDdkMmM2ZmZkYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZmNjMGQ0Y2MwODY0OGVhYTU2YjBjMDc1MmJjNGY1MS5iaW5kUG9wdXAocG9wdXBfMzI2YmY5ZmQ4MGQ3NGI3MzhjMWFkMDM5NDNkZTNmZTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGYxYjM5YzI3NDE3NDExYmI2MTg5NTljZDA1N2ZiYjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy45OTQxLDE0LjQzNDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzZWZmMzFmZDVjNTQ4MzE4NWMzNzE1YzI5NjMwYTNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwMWM0YWUwOGRjYzRjNGY4YWY5ODE2M2UyNWNmMzE2ID0gJCgnPGRpdiBpZD0iaHRtbF9hMDFjNGFlMDhkY2M0YzRmOGFmOTgxNjNlMjVjZjMxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FORU1CVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNlZmYzMWZkNWM1NDgzMTg1YzM3MTVjMjk2MzBhM2Yuc2V0Q29udGVudChodG1sX2EwMWM0YWUwOGRjYzRjNGY4YWY5ODE2M2UyNWNmMzE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGYxYjM5YzI3NDE3NDExYmI2MTg5NTljZDA1N2ZiYjAuYmluZFBvcHVwKHBvcHVwX2QzZWZmMzFmZDVjNTQ4MzE4NWMzNzE1YzI5NjMwYTNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY4YzA0NDI4NmEyYjRkZWI5YTEzYjliYjMzOTE3YWExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMDUxLDEyLjc0ODRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5Y2Q0ZjY5YjBlNTQwNGNiYjdhYjIzYjA2NjNiMzZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxMjcyODBmNmRlOTQyM2JhNzFjMDY3NzNhZmI0MThjID0gJCgnPGRpdiBpZD0iaHRtbF8zMTI3MjgwZjZkZTk0MjNiYTcxYzA2NzczYWZiNDE4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FOVVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWNkNGY2OWIwZTU0MDRjYmI3YWIyM2IwNjYzYjM2Yy5zZXRDb250ZW50KGh0bWxfMzEyNzI4MGY2ZGU5NDIzYmE3MWMwNjc3M2FmYjQxOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82OGMwNDQyODZhMmI0ZGViOWExM2I5YmIzMzkxN2FhMS5iaW5kUG9wdXAocG9wdXBfZDljZDRmNjliMGU1NDA0Y2JiN2FiMjNiMDY2M2IzNmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTZlYmUyMjIzYzU4NDBlNDgyYTBlZjE0YWYyNzMzNGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMDM5NywyNS45Njg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMWJiZmFhZTUwNzE0OWUyYTJkMjMwY2U2YTk1NWI2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzczMzY3N2FhMmY0YmY4YTQyNzY5N2ZkNGU1Zjc3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTc3MzM2NzdhYTJmNGJmOGE0Mjc2OTdmZDRlNWY3NzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBT05ERTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjFiYmZhYWU1MDcxNDllMmEyZDIzMGNlNmE5NTViNjAuc2V0Q29udGVudChodG1sX2U3NzMzNjc3YWEyZjRiZjhhNDI3Njk3ZmQ0ZTVmNzcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTZlYmUyMjIzYzU4NDBlNDgyYTBlZjE0YWYyNzMzNGQuYmluZFBvcHVwKHBvcHVwX2IxYmJmYWFlNTA3MTQ5ZTJhMmQyMzBjZTZhOTU1YjYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZhMjllYzdkNGEyODRmOTdhNTM3NzliOWIyY2Y5ZTYyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNTIwMSwxMy42NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZmQ1MGQ2NjU2NDQ0OWYzODU0ZDk0ZjBiMmZlNjUwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjQxMDI0OTA0ZDM0YWM1YTA4MWY5MDRjZDQ1M2Y5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfODI0MTAyNDkwNGQzNGFjNWEwODFmOTA0Y2Q0NTNmOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBUFNJS0k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZmZDUwZDY2NTY0NDQ5ZjM4NTRkOTRmMGIyZmU2NTA1LnNldENvbnRlbnQoaHRtbF84MjQxMDI0OTA0ZDM0YWM1YTA4MWY5MDRjZDQ1M2Y5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZhMjllYzdkNGEyODRmOTdhNTM3NzliOWIyY2Y5ZTYyLmJpbmRQb3B1cChwb3B1cF9mZmQ1MGQ2NjU2NDQ0OWYzODU0ZDk0ZjBiMmZlNjUwNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOWRhZTRiYjMyNjk0NWNjODgxZmE1OWI4ZWU4MzFjOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuNDc0NjE2ODk4ODEsMjIuODQ5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2NmNWY4MTRmN2VlNGVmYzg0N2RkNTFhN2NhYmRjOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE2NDRmYjExYWZmNGNkN2FjMWJmYjQ2ODc2YTU2YTcgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhNjQ0ZmIxMWFmZjRjZDdhYzFiZmI0Njg3NmE1NmE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQVJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Y2Y1ZjgxNGY3ZWU0ZWZjODQ3ZGQ1MWE3Y2FiZGM5MS5zZXRDb250ZW50KGh0bWxfZmE2NDRmYjExYWZmNGNkN2FjMWJmYjQ2ODc2YTU2YTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOWRhZTRiYjMyNjk0NWNjODgxZmE1OWI4ZWU4MzFjOC5iaW5kUG9wdXAocG9wdXBfN2NmNWY4MTRmN2VlNGVmYzg0N2RkNTFhN2NhYmRjOTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjEyYTQ1NTJmMTA4NGRhN2E1OGYzZjRjNjg3MjgwZGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC40OTE0LC00LjMwOTI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDMwMDQyZDRkNGI0MDA4OTViMTE3NTljMjU4N2RmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTE5MWVhM2JmMmE0MDg1OWQ2NjQwMDdiNTljOGE5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjExOTFlYTNiZjJhNDA4NTlkNjY0MDA3YjU5YzhhOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBUkFCT1JPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDMwMDQyZDRkNGI0MDA4OTViMTE3NTljMjU4N2RmOS5zZXRDb250ZW50KGh0bWxfMjExOTFlYTNiZjJhNDA4NTlkNjY0MDA3YjU5YzhhOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMTJhNDU1MmYxMDg0ZGE3YTU4ZjNmNGM2ODcyODBkZi5iaW5kUG9wdXAocG9wdXBfMDAzMDA0MmQ0ZDRiNDAwODk1YjExNzU5YzI1ODdkZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2ZjODY2ZGMzMDEzNDRhNjliZGEyM2ExZWQwYWU5N2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjM0MTA1MTA4OTUyLDM0LjY4NzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxZGI5MjE4NTc4ODQ1N2ZhZGI1MjViYTMyYzY4ZDI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxM2MwYmQxN2RkNjQyYzI4OTA0NWY0ZjM0ODNiZGRlID0gJCgnPGRpdiBpZD0iaHRtbF9mMTNjMGJkMTdkZDY0MmMyODkwNDVmNGYzNDgzYmRkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FSQU1PSk9ORzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjFkYjkyMTg1Nzg4NDU3ZmFkYjUyNWJhMzJjNjhkMjcuc2V0Q29udGVudChodG1sX2YxM2MwYmQxN2RkNjQyYzI4OTA0NWY0ZjM0ODNiZGRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2ZjODY2ZGMzMDEzNDRhNjliZGEyM2ExZWQwYWU5N2YuYmluZFBvcHVwKHBvcHVwX2IxZGI5MjE4NTc4ODQ1N2ZhZGI1MjViYTMyYzY4ZDI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IzZGZkNjZiZmRiNzRlYzVhYjYwZTJjMzI0YzAxOTFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjI4NjMsMzAuNTA4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDU5MGU0Njc1OTkzNDJiOGEyNzhkM2IzZDU5MjVjYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmE2NmNmM2Y4YWUxNDU0ZDgyNDFlN2E5YzUxYmFhNzggPSAkKCc8ZGl2IGlkPSJodG1sXzZhNjZjZjNmOGFlMTQ1NGQ4MjQxZTdhOWM1MWJhYTc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQVJBTkdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NTkwZTQ2NzU5OTM0MmI4YTI3OGQzYjNkNTkyNWNhOC5zZXRDb250ZW50KGh0bWxfNmE2NmNmM2Y4YWUxNDU0ZDgyNDFlN2E5YzUxYmFhNzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iM2RmZDY2YmZkYjc0ZWM1YWI2MGUyYzMyNGMwMTkxZi5iaW5kUG9wdXAocG9wdXBfNDU5MGU0Njc1OTkzNDJiOGEyNzhkM2IzZDU5MjVjYTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzQzNTE1NmM0NzkxNGZjNzk0NGYwYjk0Y2NkOTc5MTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjA0MTMzODIxODE4LDI1Ljk0MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhM2QzNjBiMDhhNjQ0NDE4NjgyNTJhNjE2ZTIyM2FiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4OWIyMGM2MWU1ZTQyNzViOWI4ZjFmZGNjOTg1NTk1ID0gJCgnPGRpdiBpZD0iaHRtbF8wODliMjBjNjFlNWU0Mjc1YjliOGYxZmRjYzk4NTU5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FSRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmEzZDM2MGIwOGE2NDQ0MTg2ODI1MmE2MTZlMjIzYWIuc2V0Q29udGVudChodG1sXzA4OWIyMGM2MWU1ZTQyNzViOWI4ZjFmZGNjOTg1NTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzQzNTE1NmM0NzkxNGZjNzk0NGYwYjk0Y2NkOTc5MTcuYmluZFBvcHVwKHBvcHVwX2JhM2QzNjBiMDhhNjQ0NDE4NjgyNTJhNjE2ZTIyM2FiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VhNDU5MzVlOGQ0MjQ5NzNiYjhmYTJhYTNhYWYxNWUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNjc2NCwxMS4xOTEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODM2NDUxYzkzODQ0OWJkOGU3ZWYzZGQ2MGE3NTM5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDVmOTk0ZTA3Njg0OGM3OGUwOGUxMzI0OWM3YTRmNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDQ1Zjk5NGUwNzY4NDhjNzhlMDhlMTMyNDljN2E0ZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBUkVLQVJFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODM2NDUxYzkzODQ0OWJkOGU3ZWYzZGQ2MGE3NTM5ZS5zZXRDb250ZW50KGh0bWxfNDQ1Zjk5NGUwNzY4NDhjNzhlMDhlMTMyNDljN2E0ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lYTQ1OTM1ZThkNDI0OTczYmI4ZmEyYWEzYWFmMTVlMS5iaW5kUG9wdXAocG9wdXBfNjgzNjQ1MWM5Mzg0NDliZDhlN2VmM2RkNjBhNzUzOWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjcwMTlmMGUwY2EwNDk2YjhlMGZhNDI4NzJjY2M0YTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC4zMTUsLTEwLjY1NTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4M2RlMjJkNTAzZTRlNzM5ZDA0YmY0NDk4NDA2ZTAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxZDg3N2IwMGI5OTQ1Y2M5MDBlZTUyZDRmMjYwNDY4ID0gJCgnPGRpdiBpZD0iaHRtbF9mMWQ4NzdiMDBiOTk0NWNjOTAwZWU1MmQ0ZjI2MDQ2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FTT05LRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjgzZGUyMmQ1MDNlNGU3MzlkMDRiZjQ0OTg0MDZlMDEuc2V0Q29udGVudChodG1sX2YxZDg3N2IwMGI5OTQ1Y2M5MDBlZTUyZDRmMjYwNDY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjcwMTlmMGUwY2EwNDk2YjhlMGZhNDI4NzJjY2M0YTMuYmluZFBvcHVwKHBvcHVwXzY4M2RlMjJkNTAzZTRlNzM5ZDA0YmY0NDk4NDA2ZTAxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUyYTA5ODdhYzc3ODQzNGY5OWMzY2U5YTc4ZDgwYjBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS43NjIzNzU3ODU2NSw4LjMxNjU2OTgzNTY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNGU4NDY0NTY2MmI0YTZmOTQ3YjQ4Y2IzNzUzYzk2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ODM2OWEwN2U3ODY0NTYxOWNmOTJjNGE1YzYwZWRkMiA9ICQoJzxkaXYgaWQ9Imh0bWxfODgzNjlhMDdlNzg2NDU2MTljZjkyYzRhNWM2MGVkZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktBVEFCPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGU4NDY0NTY2MmI0YTZmOTQ3YjQ4Y2IzNzUzYzk2Ni5zZXRDb250ZW50KGh0bWxfODgzNjlhMDdlNzg2NDU2MTljZjkyYzRhNWM2MGVkZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MmEwOTg3YWM3Nzg0MzRmOTljM2NlOWE3OGQ4MGIwYy5iaW5kUG9wdXAocG9wdXBfMjRlODQ2NDU2NjJiNGE2Zjk0N2I0OGNiMzc1M2M5NjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzBlZmRmNmQzY2VlNDRlNjkwZDgzZjEyZDA3ZDdjMWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MTU0LDI5LjQ2NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkYjU3MTFmOGRhYjQwMjlhZjM2NjUyYWU2ZGZmMmIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlYjVkNGY4ODRhNDRhYzdiZGQzNTljNjM5MjhmZDU4ID0gJCgnPGRpdiBpZD0iaHRtbF9mZWI1ZDRmODg0YTQ0YWM3YmRkMzU5YzYzOTI4ZmQ1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0FUTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkYjU3MTFmOGRhYjQwMjlhZjM2NjUyYWU2ZGZmMmIwLnNldENvbnRlbnQoaHRtbF9mZWI1ZDRmODg0YTQ0YWM3YmRkMzU5YzYzOTI4ZmQ1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MwZWZkZjZkM2NlZTQ0ZTY5MGQ4M2YxMmQwN2Q3YzFhLmJpbmRQb3B1cChwb3B1cF9hZGI1NzExZjhkYWI0MDI5YWYzNjY1MmFlNmRmZjJiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZmI1NGQ2Yjg5YjE0ZGVhYTc2MzY1YTQwOGQ3ODE0YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE4LjIwNTIsMTIuODE2M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFjMjQwODAwN2EyNDYxNTgyYzJmY2RmNDY5ZDJiYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWIyZjg2ZWZlZTQ2NDdiMGE0MDFlMzZjMmY0YTExMzQgPSAkKCc8ZGl2IGlkPSJodG1sXzFiMmY4NmVmZWU0NjQ3YjBhNDAxZTM2YzJmNGExMTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LQVdBUjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFjMjQwODAwN2EyNDYxNTgyYzJmY2RmNDY5ZDJiYWYuc2V0Q29udGVudChodG1sXzFiMmY4NmVmZWU0NjQ3YjBhNDAxZTM2YzJmNGExMTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmZiNTRkNmI4OWIxNGRlYWE3NjM2NWE0MDhkNzgxNGEuYmluZFBvcHVwKHBvcHVwX2FhYzI0MDgwMDdhMjQ2MTU4MmMyZmNkZjQ2OWQyYmFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI2NzBmNTBkOTdkNTQ3ZTJhMmVlM2FmNmU0YWQ4NmUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy43NDE0ODI0NDExNywwLjg0MDY0NTE0ODU0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjdmZWZkOTA0OTg0MzJjYjBhYTNkODM3ZDYzZmQ2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZWMwMWM5YTQ1ZjE0MjgxYTA2NTJhYjc5N2FmNDExZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmVjMDFjOWE0NWYxNDI4MWEwNjUyYWI3OTdhZjQxMWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktFQlU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2N2ZlZmQ5MDQ5ODQzMmNiMGFhM2Q4MzdkNjNmZDYxLnNldENvbnRlbnQoaHRtbF9mZWMwMWM5YTQ1ZjE0MjgxYTA2NTJhYjc5N2FmNDExZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI2NzBmNTBkOTdkNTQ3ZTJhMmVlM2FmNmU0YWQ4NmUzLmJpbmRQb3B1cChwb3B1cF80NjdmZWZkOTA0OTg0MzJjYjBhYTNkODM3ZDYzZmQ2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZDE1NjMwMzVjYWY0NzA0YTE0ODU2ZDI0ZTA4NmU0OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjk4MDM2LDIzLjcwODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1M2U5Nzk5MDdmYzQ4ZTY4ZjA3Y2RhZWM4MjFiZGYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5ZjAzYTM3ZWE0NzQ4M2Y4NDdmYzYzYjUyMjVlNWFjID0gJCgnPGRpdiBpZD0iaHRtbF9jOWYwM2EzN2VhNDc0ODNmODQ3ZmM2M2I1MjI1ZTVhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0VMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjUzZTk3OTkwN2ZjNDhlNjhmMDdjZGFlYzgyMWJkZjMuc2V0Q29udGVudChodG1sX2M5ZjAzYTM3ZWE0NzQ4M2Y4NDdmYzYzYjUyMjVlNWFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGQxNTYzMDM1Y2FmNDcwNGExNDg1NmQyNGUwODZlNDkuYmluZFBvcHVwKHBvcHVwX2I1M2U5Nzk5MDdmYzQ4ZTY4ZjA3Y2RhZWM4MjFiZGYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRlMTY4OGI0ZDJlYzRmYzFhZWM1ZTBlZmQ2ODBhNjUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNTIwNiwzNy4yMjM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDJmYzU0MTA2NjA0ZGE4YTMxMGEzOWFiM2VmNjY1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZWRmNTc1OWU5NzM0ZmY0OGZmN2M3MzMwNTRlOGNhOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWVkZjU3NTllOTczNGZmNDhmZjdjNzMzMDU0ZThjYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktFTUFOVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQyZmM1NDEwNjYwNGRhOGEzMTBhMzlhYjNlZjY2NWIuc2V0Q29udGVudChodG1sX2FlZGY1NzU5ZTk3MzRmZjQ4ZmY3YzczMzA1NGU4Y2E5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGUxNjg4YjRkMmVjNGZjMWFlYzVlMGVmZDY4MGE2NTAuYmluZFBvcHVwKHBvcHVwX2VkMmZjNTQxMDY2MDRkYThhMzEwYTM5YWIzZWY2NjViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y0YzBjMzE0OGFmMDRlMzdhZjA0NTE4Njg0NzllODQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMTM4NiwxOC40NTgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZmQzM2VkYjcyOWE0Yzg5ODRlYWNmYjI2ZGQyNTMyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YWY3MWM5ZTQzYzg0NjYyYWM3OTk2OGU5MDZjZTMzYSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2FmNzFjOWU0M2M4NDY2MmFjNzk5NjhlOTA2Y2UzM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktFTkdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmQzM2VkYjcyOWE0Yzg5ODRlYWNmYjI2ZGQyNTMyZS5zZXRDb250ZW50KGh0bWxfN2FmNzFjOWU0M2M4NDY2MmFjNzk5NjhlOTA2Y2UzM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNGMwYzMxNDhhZjA0ZTM3YWYwNDUxODY4NDc5ZTg0Mi5iaW5kUG9wdXAocG9wdXBfM2ZkMzNlZGI3MjlhNGM4OTg0ZWFjZmIyNmRkMjUzMmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2I5YWQ0MzA4OTUzNDZlYzgxN2YxMTEyNTQxNGJjOWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjI5ODkyMzMwOTIyLDEwLjUxNTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwZjIxNWE2YjdlYjQwZGVhYTZjYTU5YzdkZTFhMWQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiOGYxMTU1MTQ2YTRhYTg5MGU1OGVhNDAwZGJiOTUyID0gJCgnPGRpdiBpZD0iaHRtbF82YjhmMTE1NTE0NmE0YWE4OTBlNThlYTQwMGRiYjk1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0VOVFU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwZjIxNWE2YjdlYjQwZGVhYTZjYTU5YzdkZTFhMWQzLnNldENvbnRlbnQoaHRtbF82YjhmMTE1NTE0NmE0YWE4OTBlNThlYTQwMGRiYjk1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNiOWFkNDMwODk1MzQ2ZWM4MTdmMTExMjU0MTRiYzliLmJpbmRQb3B1cChwb3B1cF9jMGYyMTVhNmI3ZWI0MGRlYWE2Y2E1OWM3ZGUxYTFkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZWRhNzVhMjEyZWI0Mjg2YTI3Y2VlYmFjMjA0YmIwMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUuMzM0OTI3MTcwMTksMTMuMzI4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjAxNGVkNzhjODI3NDI2NWIxYTE0N2YzNDk1OThmNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQ2YWNlYWVkNDNhNDBkNzlmMTQ5Nzc0Y2YyNDU2NDUgPSAkKCc8ZGl2IGlkPSJodG1sX2U0NmFjZWFlZDQzYTQwZDc5ZjE0OTc3NGNmMjQ1NjQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LRVBFUkU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwMTRlZDc4YzgyNzQyNjViMWExNDdmMzQ5NTk4ZjQyLnNldENvbnRlbnQoaHRtbF9lNDZhY2VhZWQ0M2E0MGQ3OWYxNDk3NzRjZjI0NTY0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlZGE3NWEyMTJlYjQyODZhMjdjZWViYWMyMDRiYjAzLmJpbmRQb3B1cChwb3B1cF8yMDE0ZWQ3OGM4Mjc0MjY1YjFhMTQ3ZjM0OTU5OGY0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNWM3OGYyNzk2ODk0MDVmOTNlYTNiNjcxZWE5ZmU4MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjM1MTUsMjguOTgyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmYwOWY1ZGYyNTgwNGM2MTgzMTM1Y2M5NTRjNjUxNjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI0NTk3Y2U0NGUwNDNkYjg3OTY4NTE5ZTQxNzc5NzQgPSAkKCc8ZGl2IGlkPSJodG1sXzkyNDU5N2NlNDRlMDQzZGI4Nzk2ODUxOWU0MTc3OTc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LRVJBUklTSDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmYwOWY1ZGYyNTgwNGM2MTgzMTM1Y2M5NTRjNjUxNjIuc2V0Q29udGVudChodG1sXzkyNDU5N2NlNDRlMDQzZGI4Nzk2ODUxOWU0MTc3OTc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzVjNzhmMjc5Njg5NDA1ZjkzZWEzYjY3MWVhOWZlODAuYmluZFBvcHVwKHBvcHVwX2JmMDlmNWRmMjU4MDRjNjE4MzEzNWNjOTU0YzY1MTYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FlYzc5OGNmMmU1NzQzMjBhNDQ5N2YwMDc0MGYwYzFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuMDgxMDMsMzMuNDczM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThjZDc2ZTNmNTUwNDUxMWE3ODljZGE1ZWFhYmU5YmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWRjNWJlZGQ2NzlhNGZjY2FkZmFmMzdjOTYzYjUzNDMgPSAkKCc8ZGl2IGlkPSJodG1sX2VkYzViZWRkNjc5YTRmY2NhZGZhZjM3Yzk2M2I1MzQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LRVJFV0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4Y2Q3NmUzZjU1MDQ1MTFhNzg5Y2RhNWVhYWJlOWJlLnNldENvbnRlbnQoaHRtbF9lZGM1YmVkZDY3OWE0ZmNjYWRmYWYzN2M5NjNiNTM0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FlYzc5OGNmMmU1NzQzMjBhNDQ5N2YwMDc0MGYwYzFlLmJpbmRQb3B1cChwb3B1cF85OGNkNzZlM2Y1NTA0NTExYTc4OWNkYTVlYWFiZTliZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNzA1MWQ0MTk4ZWY0YTU0ODQ5MTM1ZmFhYTQ3ZTE3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzAuNTYxMjEyNDI3MjcsMzUuNzM4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY3Njk2MGI2MjQ1NGZmOGFkZGEzNWRmOWNiY2I2MDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWI1ODFiMWE4MDgwNDI2NWI3MmFkNWQ0OWM5ZDgzOWMgPSAkKCc8ZGl2IGlkPSJodG1sX2ViNTgxYjFhODA4MDQyNjViNzJhZDVkNDljOWQ4MzljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LRVlVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjc2OTYwYjYyNDU0ZmY4YWRkYTM1ZGY5Y2JjYjYwNC5zZXRDb250ZW50KGh0bWxfZWI1ODFiMWE4MDgwNDI2NWI3MmFkNWQ0OWM5ZDgzOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNzA1MWQ0MTk4ZWY0YTU0ODQ5MTM1ZmFhYTQ3ZTE3OC5iaW5kUG9wdXAocG9wdXBfMmY3Njk2MGI2MjQ1NGZmOGFkZGEzNWRmOWNiY2I2MDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzMzYjY2ZTQ3YTIwNGY2MWI2OTI0NjMwNzZhYTg4NDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjQuMTA2MSwyMi43MDk0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MDNmYTU1Nzk0ODM0YjE3ODg1YmM1NTUzZTY0MzMzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGZlMDg3ZjhjMTM0MGM1YTBjNTlkM2M4YzZkODQzMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzBmZTA4N2Y4YzEzNDBjNWEwYzU5ZDNjOGM2ZDg0MzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktHQUxBR0FESTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzAzZmE1NTc5NDgzNGIxNzg4NWJjNTU1M2U2NDMzMzUuc2V0Q29udGVudChodG1sXzcwZmUwODdmOGMxMzQwYzVhMGM1OWQzYzhjNmQ4NDMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzMzYjY2ZTQ3YTIwNGY2MWI2OTI0NjMwNzZhYTg4NDAuYmluZFBvcHVwKHBvcHVwXzcwM2ZhNTU3OTQ4MzRiMTc4ODViYzU1NTNlNjQzMzM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVlYmEyNDY4ZjcxMDRjMzY4ZTY0ZmVmZWRkNDgzYzM5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI0LjUzMzIsMjcuMzY3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA1NmE5NDU0NjBjNDAwNGJjNzlkODY4NGE4MmJhZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzdmY2E2ZDlmNTQ3NDAxYzhhYjFmYjc3MDU2NzZhODEgPSAkKCc8ZGl2IGlkPSJodG1sXzM3ZmNhNmQ5ZjU0NzQwMWM4YWIxZmI3NzA1Njc2YTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LR0FUTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwNTZhOTQ1NDYwYzQwMDRiYzc5ZDg2ODRhODJiYWVlLnNldENvbnRlbnQoaHRtbF8zN2ZjYTZkOWY1NDc0MDFjOGFiMWZiNzcwNTY3NmE4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVlYmEyNDY4ZjcxMDRjMzY4ZTY0ZmVmZWRkNDgzYzM5LmJpbmRQb3B1cChwb3B1cF85MDU2YTk0NTQ2MGM0MDA0YmM3OWQ4Njg0YTgyYmFlZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOTk5ZGFkN2Q5YzU0NmMzYTJiOWI0ZTg5NjI2NWM0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzI0LjE4ODYsMzAuNDgyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTlkZDIzNjRkNDllNDIxMThjZDAyYjkxZWE5MDc3NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZjY2JlN2IxNDhjNDkyYThjODNkZGY1OTVlOGQyZjQgPSAkKCc8ZGl2IGlkPSJodG1sX2I2Y2NiZTdiMTQ4YzQ5MmE4YzgzZGRmNTk1ZThkMmY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LSEFSR0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5ZGQyMzY0ZDQ5ZTQyMTE4Y2QwMmI5MWVhOTA3NzU1LnNldENvbnRlbnQoaHRtbF9iNmNjYmU3YjE0OGM0OTJhOGM4M2RkZjU5NWU4ZDJmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5OTlkYWQ3ZDljNTQ2YzNhMmI5YjRlODk2MjY1YzQ0LmJpbmRQb3B1cChwb3B1cF81OWRkMjM2NGQ0OWU0MjExOGNkMDJiOTFlYTkwNzc1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZDg5ODcxNzc5YmI0MjJiYjI4ZjZmZDkyMThjMWJmOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjg0NzIsMzYuOTkzNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWEyMGYwY2FkODA5NDgxNWJhZWRlM2U1YWM5MGM1YzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNkOWE0NTljMDU3NDZmN2I2MGEzZGYwNGY4NTA0MjggPSAkKCc8ZGl2IGlkPSJodG1sXzYzZDlhNDU5YzA1NzQ2ZjdiNjBhM2RmMDRmODUwNDI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LSUtVWVU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhMjBmMGNhZDgwOTQ4MTViYWVkZTNlNWFjOTBjNWM0LnNldENvbnRlbnQoaHRtbF82M2Q5YTQ1OWMwNTc0NmY3YjYwYTNkZjA0Zjg1MDQyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkODk4NzE3NzliYjQyMmJiMjhmNmZkOTIxOGMxYmY4LmJpbmRQb3B1cChwb3B1cF8xYTIwZjBjYWQ4MDk0ODE1YmFlZGUzZTVhYzkwYzVjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ODJlMTk5ODg1MjY0ZTU1ODIzOTlkYjdhMzVkOTQ4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuNTM5NTg2Mjc2ODEsMi4wNDc3NDA2MDI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWM0MDc4ZDEzYjNjNGEzZmJjZTcwZWE5OTI5ZGY2MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI4NjM4MmY4MTJlNGMzY2FhYmM4ZTc5NWNjM2U3ZDIgPSAkKCc8ZGl2IGlkPSJodG1sXzEyODYzODJmODEyZTRjM2NhYWJjOGU3OTVjYzNlN2QyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LSUxJTkdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzQwNzhkMTNiM2M0YTNmYmNlNzBlYTk5MjlkZjYzOS5zZXRDb250ZW50KGh0bWxfMTI4NjM4MmY4MTJlNGMzY2FhYmM4ZTc5NWNjM2U3ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ODJlMTk5ODg1MjY0ZTU1ODIzOTlkYjdhMzVkOTQ4OS5iaW5kUG9wdXAocG9wdXBfNWM0MDc4ZDEzYjNjNGEzZmJjZTcwZWE5OTI5ZGY2MzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2NlOTdhMjYwNTkzNDZiNWJhMDg0YTg5NzFlMzRhZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4xODM0MywzMy40ODg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODNhM2I1NTgxYzc0ZWM1YmZjYzQxZTE2NGY0YTMzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lY2EzNDEyNWJkMDc0MjM1YWQwOTdmYWM2YjZmMjM4OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWNhMzQxMjViZDA3NDIzNWFkMDk3ZmFjNmI2ZjIzODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktJTUJVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODNhM2I1NTgxYzc0ZWM1YmZjYzQxZTE2NGY0YTMzZS5zZXRDb250ZW50KGh0bWxfZWNhMzQxMjViZDA3NDIzNWFkMDk3ZmFjNmI2ZjIzODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zY2U5N2EyNjA1OTM0NmI1YmEwODRhODk3MWUzNGFmYy5iaW5kUG9wdXAocG9wdXBfZjgzYTNiNTU4MWM3NGVjNWJmY2M0MWUxNjRmNGEzM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWU2MWNjOTEyODBmNGE3OGE3OTY1N2QwNWE3Y2UxODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOC44MTM1NSwxNS40ODQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDU4ZTQxYzZjNDU0YjI4YTBmOThhYTJmYWVjOWM1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMWI4Yjc4YzIyOGQ0MGZiOTAwMWUwNWFhZTBiMmQwZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDFiOGI3OGMyMjhkNDBmYjkwMDFlMDVhYWUwYjJkMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktJTUJVTkRVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMDU4ZTQxYzZjNDU0YjI4YTBmOThhYTJmYWVjOWM1Ny5zZXRDb250ZW50KGh0bWxfZDFiOGI3OGMyMjhkNDBmYjkwMDFlMDVhYWUwYjJkMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZTYxY2M5MTI4MGY0YTc4YTc5NjU3ZDA1YTdjZTE4Mi5iaW5kUG9wdXAocG9wdXBfMTA1OGU0MWM2YzQ1NGIyOGEwZjk4YWEyZmFlYzljNTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWM3YmYwNzI2Mjc3NGRjZThiOWZkM2M0MDY4ZjRiMDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC42NTQ5LDIzLjQzNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjYzg3OTMwYWQzNTQ3NWI4NWY1ZDNjZDE3YWI2ZTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4NGY0ZjYxOGFjMDQ2OTc4MzM4NWMyOTEzYmM1ZDFmID0gJCgnPGRpdiBpZD0iaHRtbF9lODRmNGY2MThhYzA0Njk3ODMzODVjMjkxM2JjNWQxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0lNUjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNjODc5MzBhZDM1NDc1Yjg1ZjVkM2NkMTdhYjZlNWEuc2V0Q29udGVudChodG1sX2U4NGY0ZjYxOGFjMDQ2OTc4MzM4NWMyOTEzYmM1ZDFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWM3YmYwNzI2Mjc3NGRjZThiOWZkM2M0MDY4ZjRiMDguYmluZFBvcHVwKHBvcHVwXzJjYzg3OTMwYWQzNTQ3NWI4NWY1ZDNjZDE3YWI2ZTVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5NmQyYzZmOTlhNjRlMzZiOTU5OWUxYzI4MWQ5YWQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuNjE2MTcsMzQuNzczMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzY4Y2NlMTI0NjIwNGJmOWI1OWY4MzhkMDI0YzllZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTUzNjUzZTc4OTc3NDBkODg3M2ZlZmM2OWVlYjE3MzYgPSAkKCc8ZGl2IGlkPSJodG1sX2U1MzY1M2U3ODk3NzQwZDg4NzNmZWZjNjllZWIxNzM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LSU5ESUdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjhjY2UxMjQ2MjA0YmY5YjU5ZjgzOGQwMjRjOWVkNS5zZXRDb250ZW50KGh0bWxfZTUzNjUzZTc4OTc3NDBkODg3M2ZlZmM2OWVlYjE3MzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80OTZkMmM2Zjk5YTY0ZTM2Yjk1OTllMWMyODFkOWFkMi5iaW5kUG9wdXAocG9wdXBfMzY4Y2NlMTI0NjIwNGJmOWI1OWY4MzhkMDI0YzllZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDAzZjZiOTQzYWEwNGNkODkxM2NlZjFhZWU2MmYzY2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOS41NDk3NCwzNC43MDQyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDA3OWFjZDZkYTI0ZDA3Yjk1MzE4ZTkzMjkwYWE4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjlmN2NmMzI5MjA0YTZiOTExZjZlM2VjYjNlYjI3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmY5ZjdjZjMyOTIwNGE2YjkxMWY2ZTNlY2IzZWIyNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktJTkdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDA3OWFjZDZkYTI0ZDA3Yjk1MzE4ZTkzMjkwYWE4Yi5zZXRDb250ZW50KGh0bWxfMmY5ZjdjZjMyOTIwNGE2YjkxMWY2ZTNlY2IzZWIyNzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMDNmNmI5NDNhYTA0Y2Q4OTEzY2VmMWFlZTYyZjNjZC5iaW5kUG9wdXAocG9wdXBfNDQwNzlhY2Q2ZGEyNGQwN2I5NTMxOGU5MzI5MGFhOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTIxNTUwZGMyNzc2NGZkNThmMTExZWEwZWY1NmNkYjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC40Mzg1ODEsMzUuMjMwNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFhZWE1Njg2ODMyNDdhMmExMzQ0Mzc0MzU0OTFlMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODEyYTZhZjkzNGQ5NDYzMDk0ZmI3ZGMwNTEyMTQ1NWMgPSAkKCc8ZGl2IGlkPSJodG1sXzgxMmE2YWY5MzRkOTQ2MzA5NGZiN2RjMDUxMjE0NTVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LSVBTSUdJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYWFlYTU2ODY4MzI0N2EyYTEzNDQzNzQzNTQ5MWUzNi5zZXRDb250ZW50KGh0bWxfODEyYTZhZjkzNGQ5NDYzMDk0ZmI3ZGMwNTEyMTQ1NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMjE1NTBkYzI3NzY0ZmQ1OGYxMTFlYTBlZjU2Y2RiNC5iaW5kUG9wdXAocG9wdXBfYWFhZWE1Njg2ODMyNDdhMmExMzQ0Mzc0MzU0OTFlMzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2JmMTk3MmE1ODljNDQ3YmIzMWI1NTE3OWVkZWE1YTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOS44LDEzLjcwMDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjZWMwZTQyYjhjMjRjMWZhOTA0NGE2MTdjNmRjZjZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlZDI2NDcwOTY0ZTQ0OWU5YzA3YmVmOGUzZGU5NDRlID0gJCgnPGRpdiBpZD0iaHRtbF9mZWQyNjQ3MDk2NGU0NDllOWMwN2JlZjhlM2RlOTQ0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0lTQU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hY2VjMGU0MmI4YzI0YzFmYTkwNDRhNjE3YzZkY2Y2Zi5zZXRDb250ZW50KGh0bWxfZmVkMjY0NzA5NjRlNDQ5ZTljMDdiZWY4ZTNkZTk0NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYmYxOTcyYTU4OWM0NDdiYjMxYjU1MTc5ZWRlYTVhNS5iaW5kUG9wdXAocG9wdXBfYWNlYzBlNDJiOGMyNGMxZmE5MDQ0YTYxN2M2ZGNmNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTMyOTk2YmE0NTY2NGRjN2E0ZTVmNDFmMmQ5OTQxNjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOS44MzksMzQuNTA3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRjNGQyMzE0ZjlmNGQ5MzgwMDcwOThiNTc2ODBlMmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWFkZjc2MGMxZWMxNGE4NDlhYTEzY2JjZGM1YWQwNTQgPSAkKCc8ZGl2IGlkPSJodG1sX2VhZGY3NjBjMWVjMTRhODQ5YWExM2NiY2RjNWFkMDU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LSVNJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGM0ZDIzMTRmOWY0ZDkzODAwNzA5OGI1NzY4MGUyYS5zZXRDb250ZW50KGh0bWxfZWFkZjc2MGMxZWMxNGE4NDlhYTEzY2JjZGM1YWQwNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MzI5OTZiYTQ1NjY0ZGM3YTRlNWY0MWYyZDk5NDE2MS5iaW5kUG9wdXAocG9wdXBfOGRjNGQyMzE0ZjlmNGQ5MzgwMDcwOThiNTc2ODBlMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzU1YzYxNmUyNTBjNDJjNjkwMjEyOGZhZjU3NTM2MzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4Ljg4NTM1MDU1NjI2LC0xMC4wNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyZTY1MWViM2FkNzRlMGE4MGU5ZDBjYjI4OWRmN2IwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljOTk0NGNkYmRjNTRmYmVhNmIzNjQ1NjhkMmU4NzQ4ID0gJCgnPGRpdiBpZD0iaHRtbF85Yzk5NDRjZGJkYzU0ZmJlYTZiMzY0NTY4ZDJlODc0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0lTU0k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEyZTY1MWViM2FkNzRlMGE4MGU5ZDBjYjI4OWRmN2IwLnNldENvbnRlbnQoaHRtbF85Yzk5NDRjZGJkYzU0ZmJlYTZiMzY0NTY4ZDJlODc0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM1NWM2MTZlMjUwYzQyYzY5MDIxMjhmYWY1NzUzNjM1LmJpbmRQb3B1cChwb3B1cF8xMmU2NTFlYjNhZDc0ZTBhODBlOWQwY2IyODlkZjdiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMDRjZjdiMjliZDk0NGM5ODBhOWY1YzgwZWU2ZTUyMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjI0MzMsLTguOTI5NzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjNWU5YjJiMTNiNTQ0NmVhNzcwODQ4MWIxMjUyOGMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwZmMxZmZmM2UxNTQyMThhNzlhYTk0MWI2M2FlZGY3ID0gJCgnPGRpdiBpZD0iaHRtbF9mMGZjMWZmZjNlMTU0MjE4YTc5YWE5NDFiNjNhZWRmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S0lUQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWM1ZTliMmIxM2I1NDQ2ZWE3NzA4NDgxYjEyNTI4YzEuc2V0Q29udGVudChodG1sX2YwZmMxZmZmM2UxNTQyMThhNzlhYTk0MWI2M2FlZGY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDA0Y2Y3YjI5YmQ5NDRjOTgwYTlmNWM4MGVlNmU1MjEuYmluZFBvcHVwKHBvcHVwXzVjNWU5YjJiMTNiNTQ0NmVhNzcwODQ4MWIxMjUyOGMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FmZTA5NzMyZmY5ZDRhYzI4NmIzNzA4YjFkZTRmNWUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMjc2NiwzMC43Njc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGJiZjk0OTM1Y2Y0ZjU0OGI5YzBjMzlhYzU0YTI1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjQyNjYyYTZiZWE0MDM3OWRkZTg4NTc1ZTIwNGZmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTY0MjY2MmE2YmVhNDAzNzlkZGU4ODU3NWUyMDRmZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPQUxJQjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThiYmY5NDkzNWNmNGY1NDhiOWMwYzM5YWM1NGEyNTMuc2V0Q29udGVudChodG1sX2E2NDI2NjJhNmJlYTQwMzc5ZGRlODg1NzVlMjA0ZmY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWZlMDk3MzJmZjlkNGFjMjg2YjM3MDhiMWRlNGY1ZTEuYmluZFBvcHVwKHBvcHVwXzE4YmJmOTQ5MzVjZjRmNTQ4YjljMGMzOWFjNTRhMjUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NmM2ZjZTFlZmUyMjRjZjY4NmJkYTY0OWFmNjNlZmRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE4Ljg5NTQsMjMuNTE3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMjQ2OWNmYWIzYWY0YmI1YTkzM2YwOWNhY2I4MWVjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODk1ODBiZDc5YmY0Nzk4ODVjODUyMWZmYzU4ZDkwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjg5NTgwYmQ3OWJmNDc5ODg1Yzg1MjFmZmM1OGQ5MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPQkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyNDY5Y2ZhYjNhZjRiYjVhOTMzZjA5Y2FjYjgxZWMwLnNldENvbnRlbnQoaHRtbF82ODk1ODBiZDc5YmY0Nzk4ODVjODUyMWZmYzU4ZDkwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmM2ZjZTFlZmUyMjRjZjY4NmJkYTY0OWFmNjNlZmRiLmJpbmRQb3B1cChwb3B1cF9lMjQ2OWNmYWIzYWY0YmI1YTkzM2YwOWNhY2I4MWVjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZWY4MmQ1MjgyNWQ0ZWEyYmMyOGZkNzhhOTlmYWRmOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuMDc3NDYwNTg4OTQsMTAuNjM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWEzMWU1NzNlYzg0OTQwOTkwNzhlYzdkNTFjZTk2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzFhN2I4NmU5NjQ0OTc4ODc3ZmQwMzEwOWNkOTgxOSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2MxYTdiODZlOTY0NDk3ODg3N2ZkMDMxMDljZDk4MTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPS088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxYTMxZTU3M2VjODQ5NDA5OTA3OGVjN2Q1MWNlOTY1LnNldENvbnRlbnQoaHRtbF9jYzFhN2I4NmU5NjQ0OTc4ODc3ZmQwMzEwOWNkOTgxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VlZjgyZDUyODI1ZDRlYTJiYzI4ZmQ3OGE5OWZhZGY5LmJpbmRQb3B1cChwb3B1cF9mMWEzMWU1NzNlYzg0OTQwOTkwNzhlYzdkNTFjZTk2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYmY0ODBjOTdiY2Y0Yjg4ODhlZDc1NmU5ODg1N2E2ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuMzcxMzMwNjI4MTYsMTAuMzEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83N2Y0YmI5NTg0ZWM0M2JmYTRlOWFlYjM2M2FmNGYwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTA3NTU4ZDgzMzk0ZTM3OTM5ZTlhNmY1OTI0ZDgxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2UwNzU1OGQ4MzM5NGUzNzkzOWU5YTZmNTkyNGQ4MTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzdmNGJiOTU4NGVjNDNiZmE0ZTlhZWIzNjNhZjRmMDAuc2V0Q29udGVudChodG1sX2NlMDc1NThkODMzOTRlMzc5MzllOWE2ZjU5MjRkODE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmJmNDgwYzk3YmNmNGI4ODg4ZWQ3NTZlOTg4NTdhNmUuYmluZFBvcHVwKHBvcHVwXzc3ZjRiYjk1ODRlYzQzYmZhNGU5YWViMzYzYWY0ZjAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhiODY3ZGRmOTY2ZTQwN2Y5Y2FhNmJlMDkzOWM3YWE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4zNTk5MzA1Mzk5MywzNC4yMTQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTkzOGU2MGMyNzQ0NDE3OGM3MGJhMzhhOGI4OTM4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OGQzODcyZWM4ZTg0MTg1ODMxMmJjMmM3MTIzNTcxNyA9ICQoJzxkaXYgaWQ9Imh0bWxfOThkMzg3MmVjOGU4NDE4NTgzMTJiYzJjNzEyMzU3MTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPTUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5OTM4ZTYwYzI3NDQ0MTc4YzcwYmEzOGE4Yjg5MzhmLnNldENvbnRlbnQoaHRtbF85OGQzODcyZWM4ZTg0MTg1ODMxMmJjMmM3MTIzNTcxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhiODY3ZGRmOTY2ZTQwN2Y5Y2FhNmJlMDkzOWM3YWE4LmJpbmRQb3B1cChwb3B1cF83OTkzOGU2MGMyNzQ0NDE3OGM3MGJhMzhhOGI4OTM4Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81OWM1ZTJiYjkxZmE0MWRlYWY0NTYzY2I2YWI0NjNjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuNzc2MTgwMjY3NjcsLTQuMTQzNTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkNjQzNWU2MDcwYjRhMDhiZTNjOWM3MzMzZGRlNWRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiMTJhOGU4MjEwZDQwMWY5YTVkMjJhNDhiMDYwYWNlID0gJCgnPGRpdiBpZD0iaHRtbF9hYjEyYThlODIxMGQ0MDFmOWE1ZDIyYTQ4YjA2MGFjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09NT05PPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDY0MzVlNjA3MGI0YTA4YmUzYzljNzMzM2RkZTVkYi5zZXRDb250ZW50KGh0bWxfYWIxMmE4ZTgyMTBkNDAxZjlhNWQyMmE0OGIwNjBhY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OWM1ZTJiYjkxZmE0MWRlYWY0NTYzY2I2YWI0NjNjZS5iaW5kUG9wdXAocG9wdXBfYmQ2NDM1ZTYwNzBiNGEwOGJlM2M5YzczMzNkZGU1ZGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2JiMGY4MzBlNzIyNDM3MTk4Nzc1YWJmNmYxYzI0ZGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4zNzAzLDEyLjY0NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwMDk5MTNmNTQwYTQyM2U4YTIwNjBiNTNjZTFhNDlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5MDc4NjI0ZTYzODRhOWJhNzA4OWNlMjViMGQ5M2JiID0gJCgnPGRpdiBpZD0iaHRtbF8yOTA3ODYyNGU2Mzg0YTliYTcwODljZTI1YjBkOTNiYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09OQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjAwOTkxM2Y1NDBhNDIzZThhMjA2MGI1M2NlMWE0OWQuc2V0Q29udGVudChodG1sXzI5MDc4NjI0ZTYzODRhOWJhNzA4OWNlMjViMGQ5M2JiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2JiMGY4MzBlNzIyNDM3MTk4Nzc1YWJmNmYxYzI0ZGMuYmluZFBvcHVwKHBvcHVwXzIwMDk5MTNmNTQwYTQyM2U4YTIwNjBiNTNjZTFhNDlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRkMjNkYTE2NWY4OTRlMjRiZjc5ZjBhODJhZjRlZmQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNjIzOTgsMTQuNjE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NzRiZjgwZjlkOTg0ODM1ODhmOTlmMWYxMDI0ZGYzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOWQxZjBjNDUwZTI0Y2JlOGM3OTBiMTc5MDA2NWY0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzlkMWYwYzQ1MGUyNGNiZThjNzkwYjE3OTAwNjVmNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPTkdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NzRiZjgwZjlkOTg0ODM1ODhmOTlmMWYxMDI0ZGYzZS5zZXRDb250ZW50KGh0bWxfYzlkMWYwYzQ1MGUyNGNiZThjNzkwYjE3OTAwNjVmNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZDIzZGExNjVmODk0ZTI0YmY3OWYwYTgyYWY0ZWZkOC5iaW5kUG9wdXAocG9wdXBfOTc0YmY4MGY5ZDk4NDgzNTg4Zjk5ZjFmMTAyNGRmM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzA4MTRkZmI1MzRhNDE0MmI1ZmE0Nzg1ODZkODQ5ZDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC4xNzk0MTUsMjkuMzg2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTI3MzQ3ZmIyMmI4NDY3ZDg1ZDRlZTMyNjk0ZGU2MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmRkYWVhYTlmMGQxNDI1ZWI1YTYwZGVmNmM3MmM2YTIgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkZGFlYWE5ZjBkMTQyNWViNWE2MGRlZjZjNzJjNmEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT05KTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTI3MzQ3ZmIyMmI4NDY3ZDg1ZDRlZTMyNjk0ZGU2Mzkuc2V0Q29udGVudChodG1sX2ZkZGFlYWE5ZjBkMTQyNWViNWE2MGRlZjZjNzJjNmEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzA4MTRkZmI1MzRhNDE0MmI1ZmE0Nzg1ODZkODQ5ZDIuYmluZFBvcHVwKHBvcHVwX2UyNzM0N2ZiMjJiODQ2N2Q4NWQ0ZWUzMjY5NGRlNjM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VmZGM3YzY2Yzc1NTRmM2Q4N2E5M2JlYjM3MWFiMDQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS44NDE3NjI3MDIyNSwwLjU2ODAxNTIzMjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYjI5NTM1MWU4MWQ0NjZkYjQ4Njg2MGJlZTNjNGJiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2YxNDZiMDM3MTc0Yjg4YTE4OThhOTQ0MDUxMjlhZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmNmMTQ2YjAzNzE3NGI4OGExODk4YTk0NDA1MTI5YWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPTktPTUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjI5NTM1MWU4MWQ0NjZkYjQ4Njg2MGJlZTNjNGJiMi5zZXRDb250ZW50KGh0bWxfMmNmMTQ2YjAzNzE3NGI4OGExODk4YTk0NDA1MTI5YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZmRjN2M2NmM3NTU0ZjNkODdhOTNiZWIzNzFhYjA0Mi5iaW5kUG9wdXAocG9wdXBfYmIyOTUzNTFlODFkNDY2ZGI0ODY4NjBiZWUzYzRiYjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWI5YTdlMjUzNzhmNGExZGI4ODA5OGI2YTFiMzY1ZTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4Ljc0MDY5MzA2MTU4LC0xMC43NjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5ZDFhMzEyMzQ0YzQ3MTliODU0YjI4OTdlZWFlNmUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxMDJkNDA2YjMwNzQzZjliNTc1MjcwYzMwZjljZDlkID0gJCgnPGRpdiBpZD0iaHRtbF9lMTAyZDQwNmIzMDc0M2Y5YjU3NTI3MGMzMGY5Y2Q5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09OTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODlkMWEzMTIzNDRjNDcxOWI4NTRiMjg5N2VlYWU2ZTEuc2V0Q29udGVudChodG1sX2UxMDJkNDA2YjMwNzQzZjliNTc1MjcwYzMwZjljZDlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWI5YTdlMjUzNzhmNGExZGI4ODA5OGI2YTFiMzY1ZTcuYmluZFBvcHVwKHBvcHVwXzg5ZDFhMzEyMzQ0YzQ3MTliODU0YjI4OTdlZWFlNmUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZhNDhiMWEwNmI3NzQxZGU5YzA1NGUyNGI3ZDgxYWU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNDQxMTgsMzIuMDExNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRjNThmNzM1YzIxNGNlZTlkOTcwOGYzYTQ3MDEwMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQzNjg0ZjZmNzc3NDAxYTk0YzA2N2NlZjUyNTYyZDMgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkMzY4NGY2Zjc3NzQwMWE5NGMwNjdjZWY1MjU2MmQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT05PTkdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGM1OGY3MzVjMjE0Y2VlOWQ5NzA4ZjNhNDcwMTAxOS5zZXRDb250ZW50KGh0bWxfZmQzNjg0ZjZmNzc3NDAxYTk0YzA2N2NlZjUyNTYyZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYTQ4YjFhMDZiNzc0MWRlOWMwNTRlMjRiN2Q4MWFlOC5iaW5kUG9wdXAocG9wdXBfOGRjNThmNzM1YzIxNGNlZTlkOTcwOGYzYTQ3MDEwMTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTk3MmM5YWM5MjMxNDU5MDlmNTVmMTcyZDBlOGIwYWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjU4NDk4NTc0OTYsMzcuNTg5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmY5ZDM4MzRiZTM1NGJiMWE2Njk0ZjRmZmNmMzhiMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYwZmMwODdjYmU0NDlhZDhlODY0NWY0OGJjMjc1MTkgPSAkKCc8ZGl2IGlkPSJodG1sXzA2MGZjMDg3Y2JlNDQ5YWQ4ZTg2NDVmNDhiYzI3NTE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT05TTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmY5ZDM4MzRiZTM1NGJiMWE2Njk0ZjRmZmNmMzhiMjcuc2V0Q29udGVudChodG1sXzA2MGZjMDg3Y2JlNDQ5YWQ4ZTg2NDVmNDhiYzI3NTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTk3MmM5YWM5MjMxNDU5MDlmNTVmMTcyZDBlOGIwYWEuYmluZFBvcHVwKHBvcHVwXzZmOWQzODM0YmUzNTRiYjFhNjY5NGY0ZmZjZjM4YjI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc0OWE2MGUyOGY3MzRhNTM4M2ExN2M3MzBiNzMwNGI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC42ODgzNjg2MDQzNSwtOC4yMzc2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I0Y2I4Y2I2MTU4NGY3ZmE1MzQ0NjZkNjJlMDE5M2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODg5YTE4ZTM1ODYyNGYxNThiY2IzYmQwOTY3YjIyMDkgPSAkKCc8ZGl2IGlkPSJodG1sXzg4OWExOGUzNTg2MjRmMTU4YmNiM2JkMDk2N2IyMjA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT05ZQU5LRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I0Y2I4Y2I2MTU4NGY3ZmE1MzQ0NjZkNjJlMDE5M2Quc2V0Q29udGVudChodG1sXzg4OWExOGUzNTg2MjRmMTU4YmNiM2JkMDk2N2IyMjA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzQ5YTYwZTI4ZjczNGE1MzgzYTE3YzczMGI3MzA0YjcuYmluZFBvcHVwKHBvcHVwXzNiNGNiOGNiNjE1ODRmN2ZhNTM0NDY2ZDYyZTAxOTNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QwNWU2YWYzNzY3OTQ1NDg5NzY2Y2ZkZjQyM2E2ODVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI4LjY3NDUsMjMuODEyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Y3NzcwYTUzYTYyNDQ3NWI5ZjRmMDA2MGUxNjE4NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM0ZWY5ZGNmNWZhNGU5MjhlMzUzY2I5Zjk3MWZkMjcgPSAkKCc8ZGl2IGlkPSJodG1sX2QzNGVmOWRjZjVmYTRlOTI4ZTM1M2NiOWY5NzFmZDI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT1JBTkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmNzc3MGE1M2E2MjQ0NzViOWY0ZjAwNjBlMTYxODY0LnNldENvbnRlbnQoaHRtbF9kMzRlZjlkY2Y1ZmE0ZTkyOGUzNTNjYjlmOTcxZmQyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QwNWU2YWYzNzY3OTQ1NDg5NzY2Y2ZkZjQyM2E2ODVlLmJpbmRQb3B1cChwb3B1cF83Zjc3NzBhNTNhNjI0NDc1YjlmNGYwMDYwZTE2MTg2NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMjY1N2ZjMzAzOTE0NmE2OGU1ZjJiMTI3NTZkNTRjNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMzg1MjQ5NDE5NDEsLTEwLjQ4OTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmZGQ3ZDBjMjBkYTQ2NGM4ZDFmODRhNzgyMWMzZDZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxMDU4YWQzMDg3YjRhNDc4NjUyY2EzYjYyZmEzMGQyID0gJCgnPGRpdiBpZD0iaHRtbF83MTA1OGFkMzA4N2I0YTQ3ODY1MmNhM2I2MmZhMzBkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09SQU5LTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmZkZDdkMGMyMGRhNDY0YzhkMWY4NGE3ODIxYzNkNmQuc2V0Q29udGVudChodG1sXzcxMDU4YWQzMDg3YjRhNDc4NjUyY2EzYjYyZmEzMGQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTI2NTdmYzMwMzkxNDZhNjhlNWYyYjEyNzU2ZDU0YzcuYmluZFBvcHVwKHBvcHVwXzZmZGQ3ZDBjMjBkYTQ2NGM4ZDFmODRhNzgyMWMzZDZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzViYjk1N2U2MzVlOTQ3ODViOGUwMmI3YmQxZmYwN2EwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjExNSwyOS41MTE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMGFmYWNlOWVhYmQ0YTViYWU0ZjQzYmY3MjgxNGRlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDYyYzA0YTVlODk0ZjE5YjBlYTA4Y2ZkNmM2YWY1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjQ2MmMwNGE1ZTg5NGYxOWIwZWEwOGNmZDZjNmFmNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPUkVLT1JFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMGFmYWNlOWVhYmQ0YTViYWU0ZjQzYmY3MjgxNGRlYS5zZXRDb250ZW50KGh0bWxfMjQ2MmMwNGE1ZTg5NGYxOWIwZWEwOGNmZDZjNmFmNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YmI5NTdlNjM1ZTk0Nzg1YjhlMDJiN2JkMWZmMDdhMC5iaW5kUG9wdXAocG9wdXBfYzBhZmFjZTllYWJkNGE1YmFlNGY0M2JmNzI4MTRkZWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWNmMWM3ZmY0NWYwNDk2NzlmMThmMmY4ZDZkZDc0OTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjQ1NjMwNjk5NTQ3LDcuNTI5MzY1MzUxNzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3ZjlhMWEyYmY1MzRhOGQ5MThlOTFiMWQzMTg2OWM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyMGU1NmRjMGQ0MDQ4OTg5NWE4ZTE1NTEyYzlkMDQwID0gJCgnPGRpdiBpZD0iaHRtbF8yMjBlNTZkYzBkNDA0ODk4OTVhOGUxNTUxMmM5ZDA0MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09STzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdmOWExYTJiZjUzNGE4ZDkxOGU5MWIxZDMxODY5Yzkuc2V0Q29udGVudChodG1sXzIyMGU1NmRjMGQ0MDQ4OTg5NWE4ZTE1NTEyYzlkMDQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWNmMWM3ZmY0NWYwNDk2NzlmMThmMmY4ZDZkZDc0OTYuYmluZFBvcHVwKHBvcHVwX2Q3ZjlhMWEyYmY1MzRhOGQ5MThlOTFiMWQzMTg2OWM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YwZWYxZGZjYTc2MTQ4YTI5Y2NkZWJiNWE3NTFhNjk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjU4MjQsMTIuNDEwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU1Y2MwOTRiZDQ1NDY2Yjg0NmFlODgxYWYyZmI0ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzZjZjIwMGJmNTNiNDkwNGFmOTEyMzAxMzc5MjZkYzQgPSAkKCc8ZGl2IGlkPSJodG1sXzM2Y2YyMDBiZjUzYjQ5MDRhZjkxMjMwMTM3OTI2ZGM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT1JPQ0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1NWNjMDk0YmQ0NTQ2NmI4NDZhZTg4MWFmMmZiNGQzLnNldENvbnRlbnQoaHRtbF8zNmNmMjAwYmY1M2I0OTA0YWY5MTIzMDEzNzkyNmRjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YwZWYxZGZjYTc2MTQ4YTI5Y2NkZWJiNWE3NTFhNjk4LmJpbmRQb3B1cChwb3B1cF9lNTVjYzA5NGJkNDU0NjZiODQ2YWU4ODFhZjJmYjRkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMmU1MWIxYjZhMTY0NGRlYTU5ZjhhOWVmN2YxYmM5NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuODI4NjY2MjAzNCw5Ljc5MDE5Mjg2NjE0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzQyZWMyZTI5YmE0YzE0YWVjNGEwNjY0NDliNDBmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNWI5Y2U3ZTg3MTQ0ZDk3OGU1YjM4YTJlODJjOWIyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTViOWNlN2U4NzE0NGQ5NzhlNWIzOGEyZTgyYzliMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktPU1NJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzQyZWMyZTI5YmE0YzE0YWVjNGEwNjY0NDliNDBmMy5zZXRDb250ZW50KGh0bWxfYTViOWNlN2U4NzE0NGQ5NzhlNWIzOGEyZTgyYzliMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMmU1MWIxYjZhMTY0NGRlYTU5ZjhhOWVmN2YxYmM5Ni5iaW5kUG9wdXAocG9wdXBfOGM0MmVjMmUyOWJhNGMxNGFlYzRhMDY2NDQ5YjQwZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjNkYjg4NzA0ZmUzNDljZGJkOGU4NTRkNDQ0MTVlODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFswLjM3Mzc2MDM5OTIzLDE0LjQ0NDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5MDIzNWI0MzZkYjRjNzlhYmQ0OGZmMzU1NGZkYTJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0ODgzNTEyMjEwYzRiZWRiZmMxMWE5NWM4Njk3MzMwID0gJCgnPGRpdiBpZD0iaHRtbF9jNDg4MzUxMjIxMGM0YmVkYmZjMTFhOTVjODY5NzMzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09UQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzkwMjM1YjQzNmRiNGM3OWFiZDQ4ZmYzNTU0ZmRhMmMuc2V0Q29udGVudChodG1sX2M0ODgzNTEyMjEwYzRiZWRiZmMxMWE5NWM4Njk3MzMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjNkYjg4NzA0ZmUzNDljZGJkOGU4NTRkNDQ0MTVlODIuYmluZFBvcHVwKHBvcHVwXzc5MDIzNWI0MzZkYjRjNzlhYmQ0OGZmMzU1NGZkYTJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRmYTRkNWNmMGNhNTRmMThiODYxMTliMTEzZDcyODU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNjk2NywxNS4xNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiMmQ3NjFiYjVlMTRiYzViZjJjYThmNTgwZmUwNWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxMDc1M2JkYzgxNzQyYzBiOGRlNzI4NjFmZjc3M2E5ID0gJCgnPGRpdiBpZD0iaHRtbF81MTA3NTNiZGM4MTc0MmMwYjhkZTcyODYxZmY3NzNhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09UT0tPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYjJkNzYxYmI1ZTE0YmM1YmYyY2E4ZjU4MGZlMDVkMi5zZXRDb250ZW50KGh0bWxfNTEwNzUzYmRjODE3NDJjMGI4ZGU3Mjg2MWZmNzczYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZmE0ZDVjZjBjYTU0ZjE4Yjg2MTE5YjExM2Q3Mjg1NS5iaW5kUG9wdXAocG9wdXBfMmIyZDc2MWJiNWUxNGJjNWJmMmNhOGY1ODBmZTA1ZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTdmNTc0NDgyMDM5NGZiMDljMmRiNTgwYmZjZmRhZWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjIxMjExODA0OTI1LDEyLjUzNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhZWEzYjM3NjdiYTQ2NmNiYjI1Y2Q2NjFmZTg1NDA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlNTc1NjhkN2U5MTQ1MzJiZTM0ZTk3ODg0YzIwZjQyID0gJCgnPGRpdiBpZD0iaHRtbF9mZTU3NTY4ZDdlOTE0NTMyYmUzNGU5Nzg4NGMyMGY0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S09UT1BPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YWVhM2IzNzY3YmE0NjZjYmIyNWNkNjYxZmU4NTQwNS5zZXRDb250ZW50KGh0bWxfZmU1NzU2OGQ3ZTkxNDUzMmJlMzRlOTc4ODRjMjBmNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hN2Y1NzQ0ODIwMzk0ZmIwOWMyZGI1ODBiZmNmZGFlZS5iaW5kUG9wdXAocG9wdXBfNmFlYTNiMzc2N2JhNDY2Y2JiMjVjZDY2MWZlODU0MDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDNjMWI5MGE1MGVkNGU5MmE1ZTMwOGRiNTUyMjg3ZjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy4xMzgzLDEyLjg1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQwZWU0Mzc2NmI5NDdjYjhiYmY2MTUxY2NkOWVhYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA1NDNlNzhhYzg5NGIyOGJmYzEzMGM5YmZhZjIyOWUgPSAkKCc8ZGl2IGlkPSJodG1sX2UwNTQzZTc4YWM4OTRiMjhiZmMxMzBjOWJmYWYyMjllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LT1lBTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQwZWU0Mzc2NmI5NDdjYjhiYmY2MTUxY2NkOWVhYmMuc2V0Q29udGVudChodG1sX2UwNTQzZTc4YWM4OTRiMjhiZmMxMzBjOWJmYWYyMjllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDNjMWI5MGE1MGVkNGU5MmE1ZTMwOGRiNTUyMjg3ZjYuYmluZFBvcHVwKHBvcHVwX2Y0MGVlNDM3NjZiOTQ3Y2I4YmJmNjE1MWNjZDllYWJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdiNTllNDgyNjQzNjQyMWY4M2M4MzE0YTMxNzYyOTMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC4yMjY1Mjg1MDY5NSw5LjM0NTQ0MTM4NTIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mY2Q5MmFlZGZlNjg0MGI0YTgwZmIwYjRkNDgyNDNiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzM4NDI4NzZlZDM0NzQ5OGU1MTA4ZTJlZTJiMjVkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfODczODQyODc2ZWQzNDc0OThlNTEwOGUyZWUyYjI1ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktQRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmNkOTJhZWRmZTY4NDBiNGE4MGZiMGI0ZDQ4MjQzYmQuc2V0Q29udGVudChodG1sXzg3Mzg0Mjg3NmVkMzQ3NDk4ZTUxMDhlMmVlMmIyNWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2I1OWU0ODI2NDM2NDIxZjgzYzgzMTRhMzE3NjI5MzMuYmluZFBvcHVwKHBvcHVwX2ZjZDkyYWVkZmU2ODQwYjRhODBmYjBiNGQ0ODI0M2JkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NhYjc1YzY1MTBiYTQ0ZWViMjdjMmNiZTE4MzlmYTZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy40MzQyNDU3MDIyNywtOS4xMTE1NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODUzYTQ3NzE0OTEwNDkzYThkZjNlYzRmMzE0ODk4ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJhNzdlMzUyNWQ4NGVjMjk3MDRkYWM5MzQxNTZjYjkgPSAkKCc8ZGl2IGlkPSJodG1sXzRiYTc3ZTM1MjVkODRlYzI5NzA0ZGFjOTM0MTU2Y2I5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LUEVMTEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1M2E0NzcxNDkxMDQ5M2E4ZGYzZWM0ZjMxNDg5OGQxLnNldENvbnRlbnQoaHRtbF80YmE3N2UzNTI1ZDg0ZWMyOTcwNGRhYzkzNDE1NmNiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NhYjc1YzY1MTBiYTQ0ZWViMjdjMmNiZTE4MzlmYTZhLmJpbmRQb3B1cChwb3B1cF84NTNhNDc3MTQ5MTA0OTNhOGRmM2VjNGYzMTQ4OThkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYTNmN2ZkZGRhNGQ0OTFhYTQ1NTc4ZDZiYjM4ZGRlOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzguMDY5NzY1NjQwODksMC4xMTk0MTg1NjM5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE5NzdiOGZlYTQ1NDRmOWI4YzU4ZTEwNzQ1Yzg4MDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYzYTRkMDFiM2I4NDVlY2IyZWZlYjRmZTgwMWYyNjUgPSAkKCc8ZGl2IGlkPSJodG1sXzA2M2E0ZDAxYjNiODQ1ZWNiMmVmZWI0ZmU4MDFmMjY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LUkFDSEk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxOTc3YjhmZWE0NTQ0ZjliOGM1OGUxMDc0NWM4ODAwLnNldENvbnRlbnQoaHRtbF8wNjNhNGQwMWIzYjg0NWVjYjJlZmViNGZlODAxZjI2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JhM2Y3ZmRkZGE0ZDQ5MWFhNDU1NzhkNmJiMzhkZGU5LmJpbmRQb3B1cChwb3B1cF8zMTk3N2I4ZmVhNDU0NGY5YjhjNThlMTA3NDVjODgwMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lY2NiZTRkNmRhODI0NjE5OGIzMDA1NmEyNGY3OWJmZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUuOTg5ODYxNDY4NSwtOC4wMzUzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OWFkZGE4NDBkNjE0ODJhODY3NmU2ZGMzYzU2NzZhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOTg2YTM0YjllODE0ZDA4OWI1Y2NkZWU4ZjQwZDJjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDk4NmEzNGI5ZTgxNGQwODliNWNjZGVlOGY0MGQyYzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktSQU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YWRkYTg0MGQ2MTQ4MmE4Njc2ZTZkYzNjNTY3NmFmLnNldENvbnRlbnQoaHRtbF9kOTg2YTM0YjllODE0ZDA4OWI1Y2NkZWU4ZjQwZDJjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VjY2JlNGQ2ZGE4MjQ2MTk4YjMwMDU2YTI0Zjc5YmZmLmJpbmRQb3B1cChwb3B1cF81OWFkZGE4NDBkNjE0ODJhODY3NmU2ZGMzYzU2NzZhZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mM2VkZTZiYjBmZjQ0MWQ2OWU0MjdhODRhMzMyMDdmZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjQxMDMsMTcuMzUyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgwN2UzMTJhYjYyNDg5Nzg5OGVkMzYyMzYyM2E4OGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWY5Nzk3Yjg0YTE5NDBlYTkwM2JlMTMzMzdlMzc0ZDUgPSAkKCc8ZGl2IGlkPSJodG1sX2FmOTc5N2I4NGExOTQwZWE5MDNiZTEzMzM3ZTM3NGQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LUkVEQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgwN2UzMTJhYjYyNDg5Nzg5OGVkMzYyMzYyM2E4OGUuc2V0Q29udGVudChodG1sX2FmOTc5N2I4NGExOTQwZWE5MDNiZTEzMzM3ZTM3NGQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjNlZGU2YmIwZmY0NDFkNjllNDI3YTg0YTMzMjA3ZmYuYmluZFBvcHVwKHBvcHVwXzU4MDdlMzEyYWI2MjQ4OTc4OThlZDM2MjM2MjNhODhlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU3NWU0YzY2OWY1NzQzMGI4YjYwNTllYWU4ZTk4NTZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC44MDIyMDMwODg4NCwyNC44NzAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjNhMjExMjdkYzA0NGQ2OTQzYjgyODQwYTg5MGM1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMmMxNDUxZDM4Yjc0NzU3OWVmYWUxMWUzZDJiY2JjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjJjMTQ1MWQzOGI3NDc1NzllZmFlMTFlM2QyYmNiYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktSRUlTSDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjYzYTIxMTI3ZGMwNDRkNjk0M2I4Mjg0MGE4OTBjNTIuc2V0Q29udGVudChodG1sX2IyYzE0NTFkMzhiNzQ3NTc5ZWZhZTExZTNkMmJjYmM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTc1ZTRjNjY5ZjU3NDMwYjhiNjA1OWVhZThlOTg1NmIuYmluZFBvcHVwKHBvcHVwX2I2M2EyMTEyN2RjMDQ0ZDY5NDNiODI4NDBhODkwYzUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEwMWFiMWZlNDM0YTQxNWY5ZmI5YmVjMDBiZDU4OWM0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4xNjg5NDIyMDA4MywtOC42NzIzMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzIzM2FkNmM1ZjRjNDBmZDkyY2IxMGM4YjM0MjA2MzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ3OGNlYTZmZjNkNDhmMTliN2ZmZjQ3NjlmOWZmOGUgPSAkKCc8ZGl2IGlkPSJodG1sXzM0NzhjZWE2ZmYzZDQ4ZjE5YjdmZmY0NzY5ZjlmZjhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LUlU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyMzNhZDZjNWY0YzQwZmQ5MmNiMTBjOGIzNDIwNjM2LnNldENvbnRlbnQoaHRtbF8zNDc4Y2VhNmZmM2Q0OGYxOWI3ZmZmNDc2OWY5ZmY4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzEwMWFiMWZlNDM0YTQxNWY5ZmI5YmVjMDBiZDU4OWM0LmJpbmRQb3B1cChwb3B1cF8zMjMzYWQ2YzVmNGM0MGZkOTJjYjEwYzhiMzQyMDYzNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NGQ5YjZiZGU4MTA0MTFhYTcwM2MxNmEyZGVhOWQ5MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy00LjY5MDkzLDIxLjg4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRkNmE0ZDA4MDIyNGM1ZGE3NmU5NjE3NDU4MGY0N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWFlMmRlYmFlZjg0NDI1Yjg5YjM3Mzk4Y2ViYzI5OTcgPSAkKCc8ZGl2IGlkPSJodG1sX2FhZTJkZWJhZWY4NDQyNWI4OWIzNzM5OGNlYmMyOTk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LVUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNGQ2YTRkMDgwMjI0YzVkYTc2ZTk2MTc0NTgwZjQ3Yy5zZXRDb250ZW50KGh0bWxfYWFlMmRlYmFlZjg0NDI1Yjg5YjM3Mzk4Y2ViYzI5OTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NGQ5YjZiZGU4MTA0MTFhYTcwM2MxNmEyZGVhOWQ5Mi5iaW5kUG9wdXAocG9wdXBfYzRkNmE0ZDA4MDIyNGM1ZGE3NmU5NjE3NDU4MGY0N2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDFlNmZkOWE2YWU0NGI3Mjk4MDM1OGFiNjhhZTJkYzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC4zMjI5LDIyLjI5MTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxZWRjMGQ3MDlkYjQzOTE5YmJiZjk1MDk2Y2Y2YjE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhMmQyOGIwYzA2YTQyZjU5MjNlZGYyMjg3MWI0MTFjID0gJCgnPGRpdiBpZD0iaHRtbF84YTJkMjhiMGMwNmE0MmY1OTIzZWRmMjI4NzFiNDExYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S1VGUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxZWRjMGQ3MDlkYjQzOTE5YmJiZjk1MDk2Y2Y2YjE4LnNldENvbnRlbnQoaHRtbF84YTJkMjhiMGMwNmE0MmY1OTIzZWRmMjI4NzFiNDExYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxZTZmZDlhNmFlNDRiNzI5ODAzNThhYjY4YWUyZGMxLmJpbmRQb3B1cChwb3B1cF84MWVkYzBkNzA5ZGI0MzkxOWJiYmY5NTA5NmNmNmIxOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNGNiNzMzMGFiOGQ0MWU2OGQ4ZTNjNzcyYTE2ZTk5MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMuOTI5MjAzNjg1MDksMzEuNTM5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmNhOGMzNDVmZThkNGY5YTkzZjIzMzM4YmU1ZGI2OGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JhYzBjMmIyY2RiNGQxY2IyYjhlYmE4MjYxNTVlM2QgPSAkKCc8ZGl2IGlkPSJodG1sXzNiYWMwYzJiMmNkYjRkMWNiMmI4ZWJhODI2MTU1ZTNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LVUtVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2E4YzM0NWZlOGQ0ZjlhOTNmMjMzMzhiZTVkYjY4ZS5zZXRDb250ZW50KGh0bWxfM2JhYzBjMmIyY2RiNGQxY2IyYjhlYmE4MjYxNTVlM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNGNiNzMzMGFiOGQ0MWU2OGQ4ZTNjNzcyYTE2ZTk5My5iaW5kUG9wdXAocG9wdXBfNmNhOGMzNDVmZThkNGY5YTkzZjIzMzM4YmU1ZGI2OGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmQyMWFiNjU1ZjAxNDI2ZDk0Y2MyZDhiM2JmYzdiODcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjAyNzUyNjE1NDk3LDYuMzc4MDI5NzU0NTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1M2E3N2NhNGVkNTQwODM5Y2U1OTUxMWJjNGZhYzQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4ZDFkOThiYTg3MzQxMmU4N2MzNGRjZDU0NTljMDM2ID0gJCgnPGRpdiBpZD0iaHRtbF85OGQxZDk4YmE4NzM0MTJlODdjMzRkY2Q1NDU5YzAzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S1VLVVJVS1U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1M2E3N2NhNGVkNTQwODM5Y2U1OTUxMWJjNGZhYzQ2LnNldENvbnRlbnQoaHRtbF85OGQxZDk4YmE4NzM0MTJlODdjMzRkY2Q1NDU5YzAzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJkMjFhYjY1NWYwMTQyNmQ5NGNjMmQ4YjNiZmM3Yjg3LmJpbmRQb3B1cChwb3B1cF85NTNhNzdjYTRlZDU0MDgzOWNlNTk1MTFiYzRmYWM0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZGUwNTJhMWNiODM0ZDQ2ODc4MzNkM2YzNDk4ZTg1NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzguNjg0MzI4MTU3NTgsLTMuMzA1OTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2NmEwMmQzZDgzZDQ1MjU5ZGNkZjk2YzY5NDFiN2UzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkMWVjM2NhNjljYTQyOTk4ZWJmNzg2ZmYzZTgzNjUxID0gJCgnPGRpdiBpZD0iaHRtbF85ZDFlYzNjYTY5Y2E0Mjk5OGViZjc4NmZmM2U4MzY1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S1VMQU5HTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDY2YTAyZDNkODNkNDUyNTlkY2RmOTZjNjk0MWI3ZTMuc2V0Q29udGVudChodG1sXzlkMWVjM2NhNjljYTQyOTk4ZWJmNzg2ZmYzZTgzNjUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGRlMDUyYTFjYjgzNGQ0Njg3ODMzZDNmMzQ5OGU4NTQuYmluZFBvcHVwKHBvcHVwXzA2NmEwMmQzZDgzZDQ1MjU5ZGNkZjk2YzY5NDFiN2UzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M4YTJkZjAyNWVkNTRiOTE4NWRhYzI1YzBjZTIxZTlkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTAuMzkyNjM5LDI2LjgyMDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjM2ZmMDhhZTU3NTQ4OWU4ODJjZDY5OTVlMTE3ZDNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxMTk1MGQ3MGU4YTQyM2I5NDY1YTUzMDZhODkxNjQxID0gJCgnPGRpdiBpZD0iaHRtbF82MTE5NTBkNzBlOGE0MjNiOTQ2NWE1MzA2YTg5MTY0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S1VNVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWMzZmYwOGFlNTc1NDg5ZTg4MmNkNjk5NWUxMTdkM2Quc2V0Q29udGVudChodG1sXzYxMTk1MGQ3MGU4YTQyM2I5NDY1YTUzMDZhODkxNjQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzhhMmRmMDI1ZWQ1NGI5MTg1ZGFjMjVjMGNlMjFlOWQuYmluZFBvcHVwKHBvcHVwXzVjM2ZmMDhhZTU3NTQ4OWU4ODJjZDY5OTVlMTE3ZDNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y1NjBiZGJhZTIzMzQwMjQ4M2NmYzIxYjA3NjEwZjczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuMzQ5OCwxNi4xNDczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NmIwZmEzYTA5ZmM0ODUyYjA3YjI1ZjYwZmVmYmI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODkyZDk0Njc5ZjE0MzNiOTUwMDI5MWMyNGQyZTMyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjg5MmQ5NDY3OWYxNDMzYjk1MDAyOTFjMjRkMmUzMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktVTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDZiMGZhM2EwOWZjNDg1MmIwN2IyNWY2MGZlZmJiNDYuc2V0Q29udGVudChodG1sXzI4OTJkOTQ2NzlmMTQzM2I5NTAwMjkxYzI0ZDJlMzIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjU2MGJkYmFlMjMzNDAyNDgzY2ZjMjFiMDc2MTBmNzMuYmluZFBvcHVwKHBvcHVwXzQ2YjBmYTNhMDlmYzQ4NTJiMDdiMjVmNjBmZWZiYjQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzNjg4OTNkNWEyNDQ4MTE5ODFmYzg4ODY3YzY1MTEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMTQ3MywzNy4zNTg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MWVlNWZjNWRhODk0YjJkYWVmN2RmNzdlNWQ3NjY5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzk5YjhkMTc1YmQ0MDI0OWRkODZkZjc4ZDVhOTJmMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzM5OWI4ZDE3NWJkNDAyNDlkZDg2ZGY3OGQ1YTkyZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktVTkFNQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTFlZTVmYzVkYTg5NGIyZGFlZjdkZjc3ZTVkNzY2OTMuc2V0Q29udGVudChodG1sX2MzOTliOGQxNzViZDQwMjQ5ZGQ4NmRmNzhkNWE5MmYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDM2ODg5M2Q1YTI0NDgxMTk4MWZjODg4NjdjNjUxMTMuYmluZFBvcHVwKHBvcHVwXzkxZWU1ZmM1ZGE4OTRiMmRhZWY3ZGY3N2U1ZDc2NjkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YxNzIwNzA0MGU4OTRhNzE5MTQ0MDFmZjRkZDM5ZmI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjM5OTgsMzEuOTUxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQ2ZDJkNjI5OWFmNGQ5ZDlkNDc2N2IzYjcwMjkzOGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWUxYzJjNDJhNzk0NDFhY2E3MWZlMWI1YjI2NGViOWIgPSAkKCc8ZGl2IGlkPSJodG1sXzVlMWMyYzQyYTc5NDQxYWNhNzFmZTFiNWIyNjRlYjliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LVU5EQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQ2ZDJkNjI5OWFmNGQ5ZDlkNDc2N2IzYjcwMjkzOGQuc2V0Q29udGVudChodG1sXzVlMWMyYzQyYTc5NDQxYWNhNzFmZTFiNWIyNjRlYjliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjE3MjA3MDQwZTg5NGE3MTkxNDQwMWZmNGRkMzlmYjguYmluZFBvcHVwKHBvcHVwXzU0NmQyZDYyOTlhZjRkOWQ5ZDQ3NjdiM2I3MDI5MzhkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM1ZjJjMGQ1NzBlNTQ5ZWE4ODI2NzQ1YzRhMTY1OTI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC44NDcwNzE0MzI1OCw5LjE0NzYwNTczODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Yjc2ZTQxZjZkNzU0MDcxOGI5MjcyYTk2MDk4NTg5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNWY1ZjhkZGQ3MGU0NzcyYjliMjViMWNlOTM0MmZjMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzVmNWY4ZGRkNzBlNDc3MmI5YjI1YjFjZTkzNDJmYzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktVTkRVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Yjc2ZTQxZjZkNzU0MDcxOGI5MjcyYTk2MDk4NTg5OC5zZXRDb250ZW50KGh0bWxfMzVmNWY4ZGRkNzBlNDc3MmI5YjI1YjFjZTkzNDJmYzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zNWYyYzBkNTcwZTU0OWVhODgyNjc0NWM0YTE2NTkyOC5iaW5kUG9wdXAocG9wdXBfOWI3NmU0MWY2ZDc1NDA3MThiOTI3MmE5NjA5ODU4OTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzkyYTY4NzRjYWQ5NDhjMzk3ZDg3MTZmOTcwNTQ1YzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuMTI4MiwyMC4xMDM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDFkMTcyNDU1ZDI0NDBjYmExNzNiMmQzNzlmZWU1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZGJjOTlhZGNiM2I0NjA1YTFlZjhkYzA5NGExMGM1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWRiYzk5YWRjYjNiNDYwNWExZWY4ZGMwOTRhMTBjNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktVTkc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwMWQxNzI0NTVkMjQ0MGNiYTE3M2IyZDM3OWZlZTViLnNldENvbnRlbnQoaHRtbF8xZGJjOTlhZGNiM2I0NjA1YTFlZjhkYzA5NGExMGM1MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5MmE2ODc0Y2FkOTQ4YzM5N2Q4NzE2Zjk3MDU0NWM4LmJpbmRQb3B1cChwb3B1cF9iMDFkMTcyNDU1ZDI0NDBjYmExNzNiMmQzNzlmZWU1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNWQ1NzhmZmE0ZDM0MGY0OWRjMzZmZTM4MDFlOTg1ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjQ4NzgsLTAuODYyMjExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGQyNTlmYWE4NzY0OGE5ODNhYTM0MTFjMGFkY2MzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzZmYjcyOWI5NTE0OWFhYmQwNTRjNzdjNWM2YTdhYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzc2ZmI3MjliOTUxNDlhYWJkMDU0Yzc3YzVjNmE3YWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktVTlRBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGQyNTlmYWE4NzY0OGE5ODNhYTM0MTFjMGFkY2MzYi5zZXRDb250ZW50KGh0bWxfYzc2ZmI3MjliOTUxNDlhYWJkMDU0Yzc3YzVjNmE3YWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNWQ1NzhmZmE0ZDM0MGY0OWRjMzZmZTM4MDFlOTg1ZS5iaW5kUG9wdXAocG9wdXBfYzhkMjU5ZmFhODc2NDhhOTgzYWEzNDExYzBhZGNjM2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmQ3MDRkMzZjYjdlNDM0OThhNmQwYjdhYmZlNWJkYmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMy41MzYxNSwxMi43NzM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTk0ZGJmNDc1MGU0NGMxYTE1MTE4YTZlNmVkY2VhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODc5M2Q0M2ViM2U0NTY0OTU1OGQzOGQ0ZmJkZjY4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMjg3OTNkNDNlYjNlNDU2NDk1NThkMzhkNGZiZGY2OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktVTllJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTk0ZGJmNDc1MGU0NGMxYTE1MTE4YTZlNmVkY2VhNi5zZXRDb250ZW50KGh0bWxfMjg3OTNkNDNlYjNlNDU2NDk1NThkMzhkNGZiZGY2OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZDcwNGQzNmNiN2U0MzQ5OGE2ZDBiN2FiZmU1YmRiZi5iaW5kUG9wdXAocG9wdXBfOTE5NGRiZjQ3NTBlNDRjMWExNTExOGE2ZTZlZGNlYTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjU4NGIzODFjMjM3NDk1MWFhZWE1YTQyZjFhM2I1Y2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4zOTE3LDguNDk5NTA0NzEwNjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4ZTViMDhmMmE4OTQzNGU5ZDEzOGZhOGM5ZjAzZWRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MGY2ZDA3MzMzNjRjMjZhZjIyYWZiNmEwYjM0ZTlmID0gJCgnPGRpdiBpZD0iaHRtbF82NzBmNmQwNzMzMzY0YzI2YWYyMmFmYjZhMGIzNGU5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S1VSQU1BLCBHVVJFIChORSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4ZTViMDhmMmE4OTQzNGU5ZDEzOGZhOGM5ZjAzZWRkLnNldENvbnRlbnQoaHRtbF82NzBmNmQwNzMzMzY0YzI2YWYyMmFmYjZhMGIzNGU5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1ODRiMzgxYzIzNzQ5NTFhYWVhNWE0MmYxYTNiNWNlLmJpbmRQb3B1cChwb3B1cF85OGU1YjA4ZjJhODk0MzRlOWQxMzhmYThjOWYwM2VkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NjllZjU2NGU4ZTA0M2VhOTZkYzA3NjdlMzNiMGIwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjEzMzQsMy44NjA4NDEzNDU5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE4ODIxNjlkNGZkNGJkZThiZTg2NjM3YWI2MmM1ZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQzMzQxZTU4ODE1NDY0MGJiN2VjNTlhNmNhZjE0ZGIgPSAkKCc8ZGl2IGlkPSJodG1sXzZkMzM0MWU1ODgxNTQ2NDBiYjdlYzU5YTZjYWYxNGRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LVVJGRUk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxODgyMTY5ZDRmZDRiZGU4YmU4NjYzN2FiNjJjNWVhLnNldENvbnRlbnQoaHRtbF82ZDMzNDFlNTg4MTU0NjQwYmI3ZWM1OWE2Y2FmMTRkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2OWVmNTY0ZThlMDQzZWE5NmRjMDc2N2UzM2IwYjBlLmJpbmRQb3B1cChwb3B1cF9kMTg4MjE2OWQ0ZmQ0YmRlOGJlODY2MzdhYjYyYzVlYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNGJlMjQ1ODZjOTc0Mjc1OTI5ZmVkYzMwNjc4MzExMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjE3NTA4LDIwLjkwNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3NzgyOGFkMTc5OTQzNjJhOWE5ODNiMDM2YTgwNTdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiZmI3YjhhZTA5ZTRhODFiMzViYTMyNWYzYjJjMmQ5ID0gJCgnPGRpdiBpZD0iaHRtbF8xYmZiN2I4YWUwOWU0YTgxYjM1YmEzMjVmM2IyYzJkOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S1VUU0hVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzc4MjhhZDE3OTk0MzYyYTlhOTgzYjAzNmE4MDU3Yi5zZXRDb250ZW50KGh0bWxfMWJmYjdiOGFlMDllNGE4MWIzNWJhMzI1ZjNiMmMyZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNGJlMjQ1ODZjOTc0Mjc1OTI5ZmVkYzMwNjc4MzExMi5iaW5kUG9wdXAocG9wdXBfMjc3ODI4YWQxNzk5NDM2MmE5YTk4M2IwMzZhODA1N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2RhNDJkYWU2Yzc4NDA5OGJhNWU2YWE1ZWU2Y2M1NGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMTc0MiwxOS4wNzczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YmZmZWYzNTY0NmQ0OTBkYjViMDU3NzQzNGNiNzQ0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTk3ZWE2ZWU5MzA0YmM3YWQ2NjM0YTgzNmQzN2Q2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTk5N2VhNmVlOTMwNGJjN2FkNjYzNGE4MzZkMzdkNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktXQU5HQVJFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YmZmZWYzNTY0NmQ0OTBkYjViMDU3NzQzNGNiNzQ0ZS5zZXRDb250ZW50KGh0bWxfMTk5N2VhNmVlOTMwNGJjN2FkNjYzNGE4MzZkMzdkNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZGE0MmRhZTZjNzg0MDk4YmE1ZTZhYTVlZTZjYzU0Yi5iaW5kUG9wdXAocG9wdXBfN2JmZmVmMzU2NDZkNDkwZGI1YjA1Nzc0MzRjYjc0NGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2ZlMWI5Njk2MjcwNDk1ZWI3OTRhMzA4OGVlYzgyNDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjQuMjMxNiwyNS40NDE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjU3ODNiZTI2YzA0M2U2OWMzZmNiMWY0MWMyYzJkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGU0ZmZhZjM5OTc0ZGE4OGE5NWZlYmQwOGQxZDNjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmRlNGZmYWYzOTk3NGRhODhhOTVmZWJkMDhkMWQzY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktXRU5BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjU3ODNiZTI2YzA0M2U2OWMzZmNiMWY0MWMyYzJkZi5zZXRDb250ZW50KGh0bWxfMmRlNGZmYWYzOTk3NGRhODhhOTVmZWJkMDhkMWQzY2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZmUxYjk2OTYyNzA0OTVlYjc5NGEzMDg4ZWVjODI0Ni5iaW5kUG9wdXAocG9wdXBfMzI1NzgzYmUyNmMwNDNlNjljM2ZjYjFmNDFjMmMyZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjU2NTMzNDhmYTE1NDBiOGFmZTg5YTkyNjY4ZjE3ZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4zMDMxMywzOC4zOTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80M2Q2OTg4ODBmNzU0Y2JiYTFlNDcxNzdlNjBmNmE2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDcwYzI1NjA2MWU0ZjdkYmVlYmQwYmJiN2FkZTljMiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Q3MGMyNTYwNjFlNGY3ZGJlZWJkMGJiYjdhZGU5YzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktXRVJFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2Q2OTg4ODBmNzU0Y2JiYTFlNDcxNzdlNjBmNmE2MC5zZXRDb250ZW50KGh0bWxfN2Q3MGMyNTYwNjFlNGY3ZGJlZWJkMGJiYjdhZGU5YzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNTY1MzM0OGZhMTU0MGI4YWZlODlhOTI2NjhmMTdlMi5iaW5kUG9wdXAocG9wdXBfNDNkNjk4ODgwZjc1NGNiYmExZTQ3MTc3ZTYwZjZhNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWNiNzE0MmVjZGZjNGEzOWE3MjQ1ODVkODZlN2Y1OTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNS45NjczMiwxOC42MDY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYzhmNDVlMTgyNjM0ZjhjYjE2MmFhZGY4NzQwNjFmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjM2MGU3MWM0YTA0ZDc2OTNjYzIzNDQ4M2U3MDVlNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzYzNjBlNzFjNGEwNGQ3NjkzY2MyMzQ0ODNlNzA1ZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktXRVNFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzhmNDVlMTgyNjM0ZjhjYjE2MmFhZGY4NzQwNjFmYS5zZXRDb250ZW50KGh0bWxfMzYzNjBlNzFjNGEwNGQ3NjkzY2MyMzQ0ODNlNzA1ZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lY2I3MTQyZWNkZmM0YTM5YTcyNDU4NWQ4NmU3ZjU5NS5iaW5kUG9wdXAocG9wdXBfYmM4ZjQ1ZTE4MjYzNGY4Y2IxNjJhYWRmODc0MDYxZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjVjODUxNzNkZWE4NDc2M2I5NDNhNDM0ODZkMDQzNDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjY2NjcyNTIyNTg2LDMzLjg2ODVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMDg4NTgwMDM4MDRhNzlhZWExNWY4Y2M4NmQ2MDhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmNTg3NGVhMjI1MzQ5YTJhNzRiNmUyZDZiNzhjY2NkID0gJCgnPGRpdiBpZD0iaHRtbF80ZjU4NzRlYTIyNTM0OWEyYTc0YjZlMmQ2Yjc4Y2NjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFCV09SPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzA4ODU4MDAzODA0YTc5YWVhMTVmOGNjODZkNjA4Zi5zZXRDb250ZW50KGh0bWxfNGY1ODc0ZWEyMjUzNDlhMmE3NGI2ZTJkNmI3OGNjY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NWM4NTE3M2RlYTg0NzYzYjk0M2E0MzQ4NmQwNDM0NC5iaW5kUG9wdXAocG9wdXBfNTMwODg1ODAwMzgwNGE3OWFlYTE1ZjhjYzg2ZDYwOGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTg4N2JiNzg0NGExNGE2NTg2MzYyOWJhMmJhNDQwODcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy44MTgyLDMuMDc5NTMxNTg0OTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4YjVhMmU1ODE1MDQ3Y2M5YWVjMmI5NWU5NzBlOGNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlY2E0Y2YzNjY0YzRiMzI4MTczYjI4N2UwODJjZGFmID0gJCgnPGRpdiBpZD0iaHRtbF80ZWNhNGNmMzY2NGM0YjMyODE3M2IyODdlMDgyY2RhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFHVUFUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OGI1YTJlNTgxNTA0N2NjOWFlYzJiOTVlOTcwZThjZC5zZXRDb250ZW50KGh0bWxfNGVjYTRjZjM2NjRjNGIzMjgxNzNiMjg3ZTA4MmNkYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ODg3YmI3ODQ0YTE0YTY1ODYzNjI5YmEyYmE0NDA4Ny5iaW5kUG9wdXAocG9wdXBfNThiNWEyZTU4MTUwNDdjYzlhZWMyYjk1ZTk3MGU4Y2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODgyOTk0NmQ4YzM0NDk5MGJlM2NiMzFlNmMzZDY1ZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjE2NTU1MTIyMjYsMTUuNzgzMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmFlOTA1MzdhMzZlNDgwM2I0OTIyZTMyYzY0ZWZmMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzdlNmFmOTFkZDE0NDIwZTk0MWU4MzFkNTVhMWYxMzQgPSAkKCc8ZGl2IGlkPSJodG1sX2M3ZTZhZjkxZGQxNDQyMGU5NDFlODMxZDU1YTFmMTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQUtBIChBREFNQVdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYWU5MDUzN2EzNmU0ODAzYjQ5MjJlMzJjNjRlZmYxYy5zZXRDb250ZW50KGh0bWxfYzdlNmFmOTFkZDE0NDIwZTk0MWU4MzFkNTVhMWYxMzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ODI5OTQ2ZDhjMzQ0OTkwYmUzY2IzMWU2YzNkNjVmNS5iaW5kUG9wdXAocG9wdXBfYmFlOTA1MzdhMzZlNDgwM2I0OTIyZTMyYzY0ZWZmMWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGU4YmUyZDdlZWI2NDZkNGI4ODdhNmI0MzI0YzA1MzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjQuMjIyNiwyOC42MzUzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZGEzYjYyM2QxZjQ0MTBjYmY5OWRlODJhZjNkYWY0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMGJmMDdiYzI2NjQ0MWRjOTYyNGM5YmRkNmE5MmY0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTBiZjA3YmMyNjY0NDFkYzk2MjRjOWJkZDZhOTJmNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBS0EgKE5ERUJFTEUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZGEzYjYyM2QxZjQ0MTBjYmY5OWRlODJhZjNkYWY0MC5zZXRDb250ZW50KGh0bWxfZTBiZjA3YmMyNjY0NDFkYzk2MjRjOWJkZDZhOTJmNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZThiZTJkN2VlYjY0NmQ0Yjg4N2E2YjQzMjRjMDUzMy5iaW5kUG9wdXAocG9wdXBfZGRhM2I2MjNkMWY0NDEwY2JmOTlkZTgyYWYzZGFmNDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTVmYmUwZTZiMTRkNDllODkzMzAxMzcxNzY3MThjNWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuNTg4LDMwLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTU2YzZhODg2OTIzNGNmMThjYjk0NTExYWJmZjMxNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQ1ZTY2MTU2NTI0NDkyNTg1ZWI4YjE3YTk1MTg2OGYgPSAkKCc8ZGl2IGlkPSJodG1sXzlkNWU2NjE1NjUyNDQ5MjU4NWViOGIxN2E5NTE4NjhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQUxBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTZjNmE4ODY5MjM0Y2YxOGNiOTQ1MTFhYmZmMzE1Ni5zZXRDb250ZW50KGh0bWxfOWQ1ZTY2MTU2NTI0NDkyNTg1ZWI4YjE3YTk1MTg2OGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNWZiZTBlNmIxNGQ0OWU4OTMzMDEzNzE3NjcxOGM1Zi5iaW5kUG9wdXAocG9wdXBfNTU2YzZhODg2OTIzNGNmMThjYjk0NTExYWJmZjMxNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjhlNjkzMTE2NzExNDM5ZjhhOGUzODI2MGZhNjRhMDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNzUyLDI3LjkwOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZlNTJhNzBkNGYxNDNhZjg0OWQ2ZGY3ZTgyYWFmZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI5MzllYjRiYTY5NGJhZGEyYjcxYmE2NTgyZjdiNDYgPSAkKCc8ZGl2IGlkPSJodG1sX2YyOTM5ZWI0YmE2OTRiYWRhMmI3MWJhNjU4MmY3YjQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQU1CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjZlNTJhNzBkNGYxNDNhZjg0OWQ2ZGY3ZTgyYWFmZjguc2V0Q29udGVudChodG1sX2YyOTM5ZWI0YmE2OTRiYWRhMmI3MWJhNjU4MmY3YjQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjhlNjkzMTE2NzExNDM5ZjhhOGUzODI2MGZhNjRhMDUuYmluZFBvcHVwKHBvcHVwXzI2ZTUyYTcwZDRmMTQzYWY4NDlkNmRmN2U4MmFhZmY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NmNjA3YTQ3Y2JmMDRhN2ZhMWU4NjNlMzkyZmNiMzRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuNjAxODQsMzMuMDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDA4MDQwNTRmMTIyNDJlYTg0MWJlM2JlN2U1ZDg1NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTNiZWJmOGFhZmIyNDM1YWE3ODQwMGMzOWQ2MTAzZmYgPSAkKCc8ZGl2IGlkPSJodG1sXzUzYmViZjhhYWZiMjQzNWFhNzg0MDBjMzlkNjEwM2ZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQU1CWUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwODA0MDU0ZjEyMjQyZWE4NDFiZTNiZTdlNWQ4NTVmLnNldENvbnRlbnQoaHRtbF81M2JlYmY4YWFmYjI0MzVhYTc4NDAwYzM5ZDYxMDNmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmNjA3YTQ3Y2JmMDRhN2ZhMWU4NjNlMzkyZmNiMzRhLmJpbmRQb3B1cChwb3B1cF8wMDgwNDA1NGYxMjI0MmVhODQxYmUzYmU3ZTVkODU1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNDFmMWU2NWI3OTY0MzhkYjY4MzVkM2JhMGFhMzExMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjkwNDUsLTE0LjI3MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4ODQ2ODJlNWM1NDRjOWQ4OTVhNTc5YmNhMGZkMzE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4ZDVlZTdlMjdhODRkZmViYjMzYTAyYzNhYjZmMTdjID0gJCgnPGRpdiBpZD0iaHRtbF8wOGQ1ZWU3ZTI3YTg0ZGZlYmIzM2EwMmMzYWI2ZjE3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFORFVNQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzg4NDY4MmU1YzU0NGM5ZDg5NWE1NzliY2EwZmQzMTguc2V0Q29udGVudChodG1sXzA4ZDVlZTdlMjdhODRkZmViYjMzYTAyYzNhYjZmMTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzQxZjFlNjViNzk2NDM4ZGI2ODM1ZDNiYTBhYTMxMTAuYmluZFBvcHVwKHBvcHVwXzM4ODQ2ODJlNWM1NDRjOWQ4OTVhNTc5YmNhMGZkMzE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkwZWRjNGQ5YTJiMzQzNzZhMTQyZTY2NjFkZGE0ZmRmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMi4xMjM0NzA1NTU5NSwzMi45ODY2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2JhNjQzMDQ4N2U0ZjA5OThiMjg0NzY0ZDQzNjVhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZGM1YTg3OTdjMzY0MDI5OTRhMzU3NWYwNTk1MWJlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2RjNWE4Nzk3YzM2NDAyOTk0YTM1NzVmMDU5NTFiZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBTkdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81M2JhNjQzMDQ4N2U0ZjA5OThiMjg0NzY0ZDQzNjVhNy5zZXRDb250ZW50KGh0bWxfM2RjNWE4Nzk3YzM2NDAyOTk0YTM1NzVmMDU5NTFiZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MGVkYzRkOWEyYjM0Mzc2YTE0MmU2NjYxZGRhNGZkZi5iaW5kUG9wdXAocG9wdXBfNTNiYTY0MzA0ODdlNGYwOTk4YjI4NDc2NGQ0MzY1YTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWZmYWEyNzk1MmY2NDA3N2FiNjA5Mjg4ZTQwNzliMDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4wNzU0MSwyMC41MjA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTVmNzQ3ZDMwN2I0MTgwOTZkZDI5OTU4YjQ1OGU0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNmNmN2RhOTMyZjI0ZGQ1YjY5ZWNiMmE2ZWU0ODdmMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDZjZjdkYTkzMmYyNGRkNWI2OWVjYjJhNmVlNDg3ZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxFTEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExNWY3NDdkMzA3YjQxODA5NmRkMjk5NThiNDU4ZTRkLnNldENvbnRlbnQoaHRtbF8wNmNmN2RhOTMyZjI0ZGQ1YjY5ZWNiMmE2ZWU0ODdmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlmZmFhMjc5NTJmNjQwNzdhYjYwOTI4OGU0MDc5YjA0LmJpbmRQb3B1cChwb3B1cF8xMTVmNzQ3ZDMwN2I0MTgwOTZkZDI5OTU4YjQ1OGU0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMGUxZDBjYTVkNGQ0NjU4OTAyMGYyMzhjOTI3YzZhNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEuOTE5NTY2NzA2OTgsMzAuNTI0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmYxNTc2ODdhOWIzNDc4OTgyZDhlNDI5MjZhMDdiMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzdhZjNhZDdkNWI3NDk5Y2FhYTBlMjcyYTdkYTUxMDkgPSAkKCc8ZGl2IGlkPSJodG1sXzc3YWYzYWQ3ZDViNzQ5OWNhYWEwZTI3MmE3ZGE1MTA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MRU5EVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmYxNTc2ODdhOWIzNDc4OTgyZDhlNDI5MjZhMDdiMWMuc2V0Q29udGVudChodG1sXzc3YWYzYWQ3ZDViNzQ5OWNhYWEwZTI3MmE3ZGE1MTA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTBlMWQwY2E1ZDRkNDY1ODkwMjBmMjM4YzkyN2M2YTcuYmluZFBvcHVwKHBvcHVwX2ZmMTU3Njg3YTliMzQ3ODk4MmQ4ZTQyOTI2YTA3YjFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk1Y2I0ZTRiZjVhYzRlNzFhMTY1YWJiNmQyZDc4MDE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTAuNzcwNTM1LDI1LjQxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQ2MDg2ZDE0YzZlNDIxMWIwMzMzNGYyZTc3Mzc1NjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDkxY2QyZDNmYWY3NDI1ZmFlNTdhODQ3ZDBlZDZlOTMgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5MWNkMmQzZmFmNzQyNWZhZTU3YTg0N2QwZWQ2ZTkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MRU5HT0xBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDYwODZkMTRjNmU0MjExYjAzMzM0ZjJlNzczNzU2Ny5zZXRDb250ZW50KGh0bWxfNDkxY2QyZDNmYWY3NDI1ZmFlNTdhODQ3ZDBlZDZlOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NWNiNGU0YmY1YWM0ZTcxYTE2NWFiYjZkMmQ3ODAxOC5iaW5kUG9wdXAocG9wdXBfNTQ2MDg2ZDE0YzZlNDIxMWIwMzMzNGYyZTc3Mzc1NjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmIxOTc0MWJiMmM4NGRhMzk1MjZlMWVhMTQyZjk4YjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuNzEzNiwyOC40NTg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWQyNjdlNGJiNDk0NzIxOTc2NTdkMTNkY2Y3NjNiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjhhN2IzYmZhYmE0OGYyOGQ1YzI3NWMzODQ3N2MzMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNmY4YTdiM2JmYWJhNDhmMjhkNWMyNzVjMzg0NzdjMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxFTkpFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMWQyNjdlNGJiNDk0NzIxOTc2NTdkMTNkY2Y3NjNiNi5zZXRDb250ZW50KGh0bWxfNmY4YTdiM2JmYWJhNDhmMjhkNWMyNzVjMzg0NzdjMzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YjE5NzQxYmIyYzg0ZGEzOTUyNmUxZWExNDJmOThiMy5iaW5kUG9wdXAocG9wdXBfZjFkMjY3ZTRiYjQ5NDcyMTk3NjU3ZDEzZGNmNzYzYjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQ3MDQ1YjQ1ZTU2NDY5NDg3MWQ3MGRmYjhlNDdkMjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjk4MjA0MTM4NTk5LDI5LjE3MTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMmUwY2VkOTVmMTRiYTA4YjllMzM2M2QxODlkZjc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0OWUzYmVhODI5YzQ2ZjdhMTk2YTYwMWUxNWQ4OTRmID0gJCgnPGRpdiBpZD0iaHRtbF81NDllM2JlYTgyOWM0NmY3YTE5NmE2MDFlMTVkODk0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEVTRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIyZTBjZWQ5NWYxNGJhMDhiOWUzMzYzZDE4OWRmNzcuc2V0Q29udGVudChodG1sXzU0OWUzYmVhODI5YzQ2ZjdhMTk2YTYwMWUxNWQ4OTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjQ3MDQ1YjQ1ZTU2NDY5NDg3MWQ3MGRmYjhlNDdkMjAuYmluZFBvcHVwKHBvcHVwX2QyMmUwY2VkOTVmMTRiYTA4YjllMzM2M2QxODlkZjc3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E5OGJlNjY3M2VlODQxYzRhNzZmYzczNGI2Y2JmNzY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS45MDM0NTMzODE5NywxMC4wNDU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYzI2MzgzYTM3ZmI0NmUxYjI1Y2Q2NDI3ZTFjZGY2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODU2MDdlNTcxN2U0ODhlYmI2ZjdjMjhmZjBmZTUzZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjg1NjA3ZTU3MTdlNDg4ZWJiNmY3YzI4ZmYwZmU1M2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzI2MzgzYTM3ZmI0NmUxYjI1Y2Q2NDI3ZTFjZGY2OS5zZXRDb250ZW50KGh0bWxfYjg1NjA3ZTU3MTdlNDg4ZWJiNmY3YzI4ZmYwZmU1M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOThiZTY2NzNlZTg0MWM0YTc2ZmM3MzRiNmNiZjc2Ny5iaW5kUG9wdXAocG9wdXBfYmMyNjM4M2EzN2ZiNDZlMWIyNWNkNjQyN2UxY2RmNjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGIwMGM1OWQ0N2YyNGRhM2EyNDhhNjE3ZTE4OWZhMjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjY2Mjc2MDE1MzEyLC0yLjUwMDE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmE3N2MwODM2Yjk0YzdmODliMTNiZWY3OWFkZTYzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTAyOTgxYTBmYzc0ZDRkOWYyZGM3MTU3YWQwNGQxMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmUwMjk4MWEwZmM3NGQ0ZDlmMmRjNzE1N2FkMDRkMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxJR0JJLCBERUdIQSAoU0UpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZmE3N2MwODM2Yjk0YzdmODliMTNiZWY3OWFkZTYzZi5zZXRDb250ZW50KGh0bWxfMmUwMjk4MWEwZmM3NGQ0ZDlmMmRjNzE1N2FkMDRkMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYjAwYzU5ZDQ3ZjI0ZGEzYTI0OGE2MTdlMTg5ZmEyNi5iaW5kUG9wdXAocG9wdXBfNWZhNzdjMDgzNmI5NGM3Zjg5YjEzYmVmNzlhZGU2M2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGVlOGI3MjJiMzBhNDA3NmJlMmFmYzU3NjM2NmFhNGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjEyMTc1NTIwNDI1LDI3LjQ2NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2ZDRiNzAzOWFmODQ5Zjc5YWQyNzA4MzI0MjZhZjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwODFjY2ZhNmFmNjQ5ZWZiYmUxMzU0MDBiMTQ2MDJjID0gJCgnPGRpdiBpZD0iaHRtbF80MDgxY2NmYTZhZjY0OWVmYmJlMTM1NDAwYjE0NjAyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TElLQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjZkNGI3MDM5YWY4NDlmNzlhZDI3MDgzMjQyNmFmNWEuc2V0Q29udGVudChodG1sXzQwODFjY2ZhNmFmNjQ5ZWZiYmUxMzU0MDBiMTQ2MDJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGVlOGI3MjJiMzBhNDA3NmJlMmFmYzU3NjM2NmFhNGQuYmluZFBvcHVwKHBvcHVwX2I2ZDRiNzAzOWFmODQ5Zjc5YWQyNzA4MzI0MjZhZjVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdjNmIzZmQ3ODYwYzRlN2Y5OTQ5MDBhZTUxNDM4MDAzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMzQ4OSwtMi42MTk0OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODdhMmUyMzQwNTFmNDZkYmI1YmFlOTRlMGY0MDNmODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDEyNmI4YjdkNWIzNDZlOGEyMTUyYWYwNGViNTRmMGQgPSAkKCc8ZGl2IGlkPSJodG1sXzAxMjZiOGI3ZDViMzQ2ZThhMjE1MmFmMDRlYjU0ZjBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MSUxTRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODdhMmUyMzQwNTFmNDZkYmI1YmFlOTRlMGY0MDNmODkuc2V0Q29udGVudChodG1sXzAxMjZiOGI3ZDViMzQ2ZThhMjE1MmFmMDRlYjU0ZjBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2M2YjNmZDc4NjBjNGU3Zjk5NDkwMGFlNTE0MzgwMDMuYmluZFBvcHVwKHBvcHVwXzg3YTJlMjM0MDUxZjQ2ZGJiNWJhZTk0ZTBmNDAzZjg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YzMWM3ZDVmNjM5ODRhMDM4YmFjMjg3MGM5ZmZlNjdjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS40NjQxODc4NTMwNywtMTEuOTUzMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzAzMzhjZWVlMTRiNGM3NGI5YmYyODdjNDY1MzUwMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjI5OTA2M2RlOTg3NDExYTliNTE4YTEwNjNmNTdiODcgPSAkKCc8ZGl2IGlkPSJodG1sXzIyOTkwNjNkZTk4NzQxMWE5YjUxOGExMDYzZjU3Yjg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MSU1CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzAzMzhjZWVlMTRiNGM3NGI5YmYyODdjNDY1MzUwMTQuc2V0Q29udGVudChodG1sXzIyOTkwNjNkZTk4NzQxMWE5YjUxOGExMDYzZjU3Yjg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjMxYzdkNWY2Mzk4NGEwMzhiYWMyODcwYzlmZmU2N2MuYmluZFBvcHVwKHBvcHVwXzMwMzM4Y2VlZTE0YjRjNzRiOWJmMjg3YzQ2NTM1MDE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcyNGY1Y2IwNmQyMjRlMWU4ZjhhNzU2MGJhM2I1ZmU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuNzExNSwwLjA3NTkxNzEzNTA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTAxODcyNDJiY2U0YWU0YjI5Mjc2OGQxYzJiYTZlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNWFkODY4ZTAxOWY0MTliYjUzZjAwNjFlNGM5ZWRlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjVhZDg2OGUwMTlmNDE5YmI1M2YwMDYxZTRjOWVkZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxJUFRBS088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5MDE4NzI0MmJjZTRhZTRiMjkyNzY4ZDFjMmJhNmVhLnNldENvbnRlbnQoaHRtbF8yNWFkODY4ZTAxOWY0MTliYjUzZjAwNjFlNGM5ZWRlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyNGY1Y2IwNmQyMjRlMWU4ZjhhNzU2MGJhM2I1ZmU4LmJpbmRQb3B1cChwb3B1cF81OTAxODcyNDJiY2U0YWU0YjI5Mjc2OGQxYzJiYTZlYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZDMyZGY5MmRkZGY0YjVjYTUyNGYzNDU1NWRjM2QwOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjk0MTksMTcuOTgyNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmMwMWVkM2VhMWQwNDA2ZDhkNzdhZjk5NzA0YTM5YWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjcyMzY2ZDY2ZDRhNGI0OWI0YWIyMThmYzI5MmEyMDAgPSAkKCc8ZGl2IGlkPSJodG1sX2I3MjM2NmQ2NmQ0YTRiNDliNGFiMjE4ZmMyOTJhMjAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MSVNJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzAxZWQzZWExZDA0MDZkOGQ3N2FmOTk3MDRhMzlhZC5zZXRDb250ZW50KGh0bWxfYjcyMzY2ZDY2ZDRhNGI0OWI0YWIyMThmYzI5MmEyMDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZDMyZGY5MmRkZGY0YjVjYTUyNGYzNDU1NWRjM2QwOS5iaW5kUG9wdXAocG9wdXBfZmMwMWVkM2VhMWQwNDA2ZDhkNzdhZjk5NzA0YTM5YWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTFmMjM1ZTI0NDM5NGJkZGE2YjNmNjFjM2Y5YThjYWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4wMTQxLC0zLjM0MjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjZmViNWUzYTg3YTQyMzA5ODcyY2NmNjYyNGRiZmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjMzUyNGYzZjRiNjQ3NThhNTU1YjYxNGIxMTIzZDQzID0gJCgnPGRpdiBpZD0iaHRtbF84YzM1MjRmM2Y0YjY0NzU4YTU1NWI2MTRiMTEyM2Q0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TE9CSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNmZWI1ZTNhODdhNDIzMDk4NzJjY2Y2NjI0ZGJmYTMuc2V0Q29udGVudChodG1sXzhjMzUyNGYzZjRiNjQ3NThhNTU1YjYxNGIxMTIzZDQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTFmMjM1ZTI0NDM5NGJkZGE2YjNmNjFjM2Y5YThjYWQuYmluZFBvcHVwKHBvcHVwXzBjZmViNWUzYTg3YTQyMzA5ODcyY2NmNjYyNGRiZmEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiODRmMjRjYmM4NTQ2MDU4NGYwOWExNGY5NTc1YzQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy40MjgzNTQxNzU1OSwzMC4wNjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwNTFjYjlhMDA5MDQyMzdiOTcxMmVhY2VmODlmZjU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiMTczMjYxNWQ5OTQ2MTI5NDlkYjM3NDllN2MxZmU3ID0gJCgnPGRpdiBpZD0iaHRtbF9hYjE3MzI2MTVkOTk0NjEyOTQ5ZGIzNzQ5ZTdjMWZlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TE9HTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDA1MWNiOWEwMDkwNDIzN2I5NzEyZWFjZWY4OWZmNTYuc2V0Q29udGVudChodG1sX2FiMTczMjYxNWQ5OTQ2MTI5NDlkYjM3NDllN2MxZmU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWI4NGYyNGNiYzg1NDYwNTg0ZjA5YTE0Zjk1NzVjNDkuYmluZFBvcHVwKHBvcHVwXzAwNTFjYjlhMDA5MDQyMzdiOTcxMmVhY2VmODlmZjU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA0OWYxNzE3Y2RhZTQ4NWI4Y2VjOGU3ZDg2OGRlOGYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMC43NTgxNTU0NDM1MywyNC43MzU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjc3YTA3MDVlZTk0NjYwYWM0YTI1MDM4M2NkOWM5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDYxODZiMDBmYzc0NjM5YjQ4MjM1ODk1NTZkNjUyNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTQ2MTg2YjAwZmM3NDYzOWI0ODIzNTg5NTU2ZDY1MjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxPS0VMRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjY3N2EwNzA1ZWU5NDY2MGFjNGEyNTAzODNjZDljOWMuc2V0Q29udGVudChodG1sXzE0NjE4NmIwMGZjNzQ2MzliNDgyMzU4OTU1NmQ2NTI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDQ5ZjE3MTdjZGFlNDg1YjhjZWM4ZTdkODY4ZGU4ZjMuYmluZFBvcHVwKHBvcHVwX2I2NzdhMDcwNWVlOTQ2NjBhYzRhMjUwMzgzY2Q5YzljKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc3ODFmOGI4OTM5YzQ1NmNhZWUyN2RmMzgyZmY2ZGNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4xNjI0MDM0MzQ5MiwtMTIuMTU4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQxM2Y3MTY3OTEwNGJiZTgyYzJjZTE0NDkxYmQxOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWRiYWZkMzk3ZmI1NDU0Mzg1ZWUwYjE5MDMwNGIwZjkgPSAkKCc8ZGl2IGlkPSJodG1sXzFkYmFmZDM5N2ZiNTQ1NDM4NWVlMGIxOTAzMDRiMGY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MT0tPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDEzZjcxNjc5MTA0YmJlODJjMmNlMTQ0OTFiZDE4Zi5zZXRDb250ZW50KGh0bWxfMWRiYWZkMzk3ZmI1NDU0Mzg1ZWUwYjE5MDMwNGIwZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NzgxZjhiODkzOWM0NTZjYWVlMjdkZjM4MmZmNmRjZS5iaW5kUG9wdXAocG9wdXBfOGQxM2Y3MTY3OTEwNGJiZTgyYzJjZTE0NDkxYmQxOGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGE0ODNkNTMxMjEzNDUxMTk4NDMwMDY0ZTczNzVmZjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuNDgyMSwzNy44MDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNWRhZWY3YjIwZDA0YjA5ODA3OGQzMjFiNWZkNGM3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjE3MmVjNDIyODg0OWM5ODE5MWI5NDg4NzdlY2NmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2IxNzJlYzQyMjg4NDljOTgxOTFiOTQ4ODc3ZWNjZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxPTVdFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNWRhZWY3YjIwZDA0YjA5ODA3OGQzMjFiNWZkNGM3MS5zZXRDb250ZW50KGh0bWxfY2IxNzJlYzQyMjg4NDljOTgxOTFiOTQ4ODc3ZWNjZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTQ4M2Q1MzEyMTM0NTExOTg0MzAwNjRlNzM3NWZmOS5iaW5kUG9wdXAocG9wdXBfYjVkYWVmN2IyMGQwNGIwOTgwNzhkMzIxYjVmZDRjNzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTNmOTZjNmY2NDY5NGIwMDg0ZDlhYzI1ODUxNWZhYjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjkwNzEwODM1MjUxLDEyLjAwNDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1Zjk3YmM2OTJjMzQ0ZWRiMGE4YmFlNzBmZDE3ZmQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1OGZjMWIwOTIzOTQ3NjhhMDBlNWQ4ZTExZDlhY2IzID0gJCgnPGRpdiBpZD0iaHRtbF8zNThmYzFiMDkyMzk0NzY4YTAwZTVkOGUxMWQ5YWNiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TE9OR1VEQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVmOTdiYzY5MmMzNDRlZGIwYThiYWU3MGZkMTdmZDguc2V0Q29udGVudChodG1sXzM1OGZjMWIwOTIzOTQ3NjhhMDBlNWQ4ZTExZDlhY2IzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTNmOTZjNmY2NDY5NGIwMDg0ZDlhYzI1ODUxNWZhYjkuYmluZFBvcHVwKHBvcHVwX2M1Zjk3YmM2OTJjMzQ0ZWRiMGE4YmFlNzBmZDE3ZmQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA1ZWY2MWRiNmViNzQ5ZGQ4ZjA3MDZlNzRlNWVlMzI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC41MjE2ODM5ODQ2NiwzMi43MTIxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MWQ1NjE5MzBmMzQ0N2VjODI3NzY2OGMyM2ZmYzNiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTQ4OWM0NGM0MDI0MDg1YWI2NTVkNDBhYmJmOWU5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGU0ODljNDRjNDAyNDA4NWFiNjU1ZDQwYWJiZjllOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxPVFVLTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzFkNTYxOTMwZjM0NDdlYzgyNzc2NjhjMjNmZmMzYmMuc2V0Q29udGVudChodG1sX2RlNDg5YzQ0YzQwMjQwODVhYjY1NWQ0MGFiYmY5ZTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDVlZjYxZGI2ZWI3NDlkZDhmMDcwNmU3NGU1ZWUzMjUuYmluZFBvcHVwKHBvcHVwXzcxZDU2MTkzMGYzNDQ3ZWM4Mjc3NjY4YzIzZmZjM2JjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q1NjQwYjRmNTgyMDQyNmFhYmJlMzA1MzZhNTFjNzA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI0LjI2MjIsMzAuNjA3Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRhY2Q5NjU0NWY4NDBkMjg1MzcxODdkMTM0NTk2MjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTU0MGY1MWFkZmZiNDY5M2JhNmFiOTAxMDE1YWE3OTIgPSAkKCc8ZGl2IGlkPSJodG1sXzE1NDBmNTFhZGZmYjQ2OTNiYTZhYjkwMTAxNWFhNzkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MT1ZFRFU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0YWNkOTY1NDVmODQwZDI4NTM3MTg3ZDEzNDU5NjI4LnNldENvbnRlbnQoaHRtbF8xNTQwZjUxYWRmZmI0NjkzYmE2YWI5MDEwMTVhYTc5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q1NjQwYjRmNTgyMDQyNmFhYmJlMzA1MzZhNTFjNzA1LmJpbmRQb3B1cChwb3B1cF8wNGFjZDk2NTQ1Zjg0MGQyODUzNzE4N2QxMzQ1OTYyOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85YjA3ZGNhZGViMmI0ODExYmU2YWYyNjNhMzNhYzllMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS4zODM5LDIzLjM0MDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjYzE5ZDRkNjQ3NTQwMWY5NzZmMWNkYTFjM2Q1NmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0ZDI0MDM5MDI0OTQyY2I4ZjNlZDAwYTMyMjQ5OWU0ID0gJCgnPGRpdiBpZD0iaHRtbF9mNGQyNDAzOTAyNDk0MmNiOGYzZWQwMGEzMjI0OTllNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TE9aSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmNjMTlkNGQ2NDc1NDAxZjk3NmYxY2RhMWMzZDU2Yjcuc2V0Q29udGVudChodG1sX2Y0ZDI0MDM5MDI0OTQyY2I4ZjNlZDAwYTMyMjQ5OWU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWIwN2RjYWRlYjJiNDgxMWJlNmFmMjYzYTMzYWM5ZTIuYmluZFBvcHVwKHBvcHVwX2JjYzE5ZDRkNjQ3NTQwMWY5NzZmMWNkYTFjM2Q1NmI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZhNDkwM2ZmY2YxOTQ0YzFiNTk3YjExZjE3NDU1MzU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuOTcxMDQsMjguOTMwNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQxNTM5NmU2ZmQzNDZlMGE1MjQ0OTM0YzRmYTA1YTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDE3MDI3NmYxMjkxNDFkYmFhNTczZGM4NjQzODgyZjIgPSAkKCc8ZGl2IGlkPSJodG1sX2QxNzAyNzZmMTI5MTQxZGJhYTU3M2RjODY0Mzg4MmYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MVUFQVUxBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNDE1Mzk2ZTZmZDM0NmUwYTUyNDQ5MzRjNGZhMDVhMy5zZXRDb250ZW50KGh0bWxfZDE3MDI3NmYxMjkxNDFkYmFhNTczZGM4NjQzODgyZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YTQ5MDNmZmNmMTk0NGMxYjU5N2IxMWYxNzQ1NTM1Ni5iaW5kUG9wdXAocG9wdXBfZTQxNTM5NmU2ZmQzNDZlMGE1MjQ0OTM0YzRmYTA1YTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmQ3MzM2MGE2NGU1NDBlMjkzNWY4MDkyZDg0M2Q5ZGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4yMDY0NiwyNS43NTIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYzQxZjdjOWQyMmE0OWI1OThmOTIxZTA5NjI4ODc4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODY4NjQwM2Y5MDA0NjdiOGJlYzhjYTc1M2E4NDZmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjg2ODY0MDNmOTAwNDY3YjhiZWM4Y2E3NTNhODQ2ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVQkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNDFmN2M5ZDIyYTQ5YjU5OGY5MjFlMDk2Mjg4NzhjLnNldENvbnRlbnQoaHRtbF9mODY4NjQwM2Y5MDA0NjdiOGJlYzhjYTc1M2E4NDZmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JkNzMzNjBhNjRlNTQwZTI5MzVmODA5MmQ4NDNkOWRiLmJpbmRQb3B1cChwb3B1cF9lYzQxZjdjOWQyMmE0OWI1OThmOTIxZTA5NjI4ODc4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNzlkMTAzMjAzMDk0NzAyYjgwMmM4NjYwNzA0ZDk5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy4xNDk1LDIwLjE4MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1ZmJhNjBjNTNjODQ0NzZiYjQ0ZmJmZDdjZDIxOTFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjNWJiMWFiN2Y0YTRkZTM5Y2VlYzBlNzRiNGY2ZjliID0gJCgnPGRpdiBpZD0iaHRtbF84YzViYjFhYjdmNGE0ZGUzOWNlZWMwZTc0YjRmNmY5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFVDSEFaSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVmYmE2MGM1M2M4NDQ3NmJiNDRmYmZkN2NkMjE5MWIuc2V0Q29udGVudChodG1sXzhjNWJiMWFiN2Y0YTRkZTM5Y2VlYzBlNzRiNGY2ZjliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjc5ZDEwMzIwMzA5NDcwMmI4MDJjODY2MDcwNGQ5OTcuYmluZFBvcHVwKHBvcHVwX2Y1ZmJhNjBjNTNjODQ0NzZiYjQ0ZmJmZDdjZDIxOTFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdiYjBiNTI3ZDQzNjQ2NmQ5YmRhZTA5Y2RhNTJkNDg5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4yMDM4OTE1MjY0OSwzMC44NzA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZjMxZDA4OWVmMmE0YTVjYWM0NTRhZWJkZGNhMDUwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjE0NGYwOThiYWY0OTk1OGVkMGQ3NDMzNDlhN2M5OCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2IxNDRmMDk4YmFmNDk5NThlZDBkNzQzMzQ5YTdjOTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVR0JBUkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMzFkMDg5ZWYyYTRhNWNhYzQ1NGFlYmRkY2EwNTA5LnNldENvbnRlbnQoaHRtbF9jYjE0NGYwOThiYWY0OTk1OGVkMGQ3NDMzNDlhN2M5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdiYjBiNTI3ZDQzNjQ2NmQ5YmRhZTA5Y2RhNTJkNDg5LmJpbmRQb3B1cChwb3B1cF84ZjMxZDA4OWVmMmE0YTVjYWM0NTRhZWJkZGNhMDUwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYTY4ZjFjYzU0YTg0YmRmYmJmOTgwOGEwNTdiYmNjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy03LjI2NTYxLDM3Ljg1MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmNzI5ZGU0YzlhNzQxYTJhOGZmZjcyOTI4NGNlNzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3NjU5Mzk4MjFlOTQyODU5NDZmZDAzZmU2NmUzMDExID0gJCgnPGRpdiBpZD0iaHRtbF83NzY1OTM5ODIxZTk0Mjg1OTQ2ZmQwM2ZlNjZlMzAxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFVHVVJVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjcyOWRlNGM5YTc0MWEyYThmZmY3MjkyODRjZTcyNy5zZXRDb250ZW50KGh0bWxfNzc2NTkzOTgyMWU5NDI4NTk0NmZkMDNmZTY2ZTMwMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYTY4ZjFjYzU0YTg0YmRmYmJmOTgwOGEwNTdiYmNjMy5iaW5kUG9wdXAocG9wdXBfZGY3MjlkZTRjOWE3NDFhMmE4ZmZmNzI5Mjg0Y2U3MjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzk1MzgzNGRkM2E0NDY2NWE0ZTlkNmExMmIwMTZiMTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuODM5OCwxNy42MjYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzE1ZGEyZGM0ZWU0NzEyYjViMjJhYjY2YmRhOTkwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mN2NmNzM4OGIzZWY0NWI0YTAxYmNlMGUxZjhlNDc3NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjdjZjczODhiM2VmNDViNGEwMWJjZTBlMWY4ZTQ3NzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVSU1CRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTMxNWRhMmRjNGVlNDcxMmI1YjIyYWI2NmJkYTk5MDcuc2V0Q29udGVudChodG1sX2Y3Y2Y3Mzg4YjNlZjQ1YjRhMDFiY2UwZTFmOGU0Nzc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzk1MzgzNGRkM2E0NDY2NWE0ZTlkNmExMmIwMTZiMTcuYmluZFBvcHVwKHBvcHVwX2UzMTVkYTJkYzRlZTQ3MTJiNWIyMmFiNjZiZGE5OTA3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZlZTg3OTA5ZWUzODQxMTI4ZGJjNDc2N2YyNDAwZWMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjY4NDEsMjQuMjM0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWVjMjk4MTBhOGQxNGQzNjg5MTY1ODRlNTRlYmEwYjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGMxNjU5NzFjMWM0NGY0NGJhMzI5MGIwYmM1OGNhMGUgPSAkKCc8ZGl2IGlkPSJodG1sX2RjMTY1OTcxYzFjNDRmNDRiYTMyOTBiMGJjNThjYTBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MVUtPS1dFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZWMyOTgxMGE4ZDE0ZDM2ODkxNjU4NGU1NGViYTBiNi5zZXRDb250ZW50KGh0bWxfZGMxNjU5NzFjMWM0NGY0NGJhMzI5MGIwYmM1OGNhMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZWU4NzkwOWVlMzg0MTEyOGRiYzQ3NjdmMjQwMGVjMC5iaW5kUG9wdXAocG9wdXBfOWVjMjk4MTBhOGQxNGQzNjg5MTY1ODRlNTRlYmEwYjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODc5YzAzZTg1NWRlNDJjZjk1NjIwZmU1OTkyZTdjNTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNS45MzY5NiwyMi4zNTIxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWU4YTQ0ZmViOTg0NDA3YjRlZTY0ZjY5MDhhODg5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTY4ZDc0ODYwYmE0NzAyODZjYzk4NzBhNzIzZGZiYSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTk2OGQ3NDg2MGJhNDcwMjg2Y2M5ODcwYTcyM2RmYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVTFVBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NWU4YTQ0ZmViOTg0NDA3YjRlZTY0ZjY5MDhhODg5OC5zZXRDb250ZW50KGh0bWxfOTk2OGQ3NDg2MGJhNDcwMjg2Y2M5ODcwYTcyM2RmYmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NzljMDNlODU1ZGU0MmNmOTU2MjBmZTU5OTJlN2M1NC5iaW5kUG9wdXAocG9wdXBfNTVlOGE0NGZlYjk4NDQwN2I0ZWU2NGY2OTA4YTg4OTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODM4MzJmY2Y4YmI4NGY5OTk5ZDZkMTRlNWQ2ZTA3MWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMi41MDUzNSwxMC44OTc2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYjBiYmRkMGI1NjU0NjkwODgyNzQxYTBmNDVjNGMyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGY1MjcwNWQ0NGQ0OGY5YTFmZWFmMDkzYzljZTRhZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzBmNTI3MDVkNDRkNDhmOWExZmVhZjA5M2M5Y2U0YWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVTUJPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjBiYmRkMGI1NjU0NjkwODgyNzQxYTBmNDVjNGMyNy5zZXRDb250ZW50KGh0bWxfNzBmNTI3MDVkNDRkNDhmOWExZmVhZjA5M2M5Y2U0YWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MzgzMmZjZjhiYjg0Zjk5OTlkNmQxNGU1ZDZlMDcxYi5iaW5kUG9wdXAocG9wdXBfYmIwYmJkZDBiNTY1NDY5MDg4Mjc0MWEwZjQ1YzRjMjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTBlYTA1NTIwODYxNDI0MGI0YmUyYTc2ZTVmYzZlMmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOC41Njg1NiwyMi41ODQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWUyMTM5NGFiMzA0NmUzYThkYjY4YTlkMWVjOTJlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YzMyMTcyYzQ1YmM0ZWY0OGNiZjY5MDcwZTYzYjVkZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNGMzMjE3MmM0NWJjNGVmNDhjYmY2OTA3MGU2M2I1ZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVTkRBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWUyMTM5NGFiMzA0NmUzYThkYjY4YTlkMWVjOTJlNi5zZXRDb250ZW50KGh0bWxfNGMzMjE3MmM0NWJjNGVmNDhjYmY2OTA3MGU2M2I1ZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMGVhMDU1MjA4NjE0MjQwYjRiZTJhNzZlNWZjNmUyYy5iaW5kUG9wdXAocG9wdXBfN2FlMjEzOTRhYjMwNDZlM2E4ZGI2OGE5ZDFlYzkyZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTYwOWNiZDQzNmY2NDU1YWI3ZDUxZGQxMGU4NWU3NjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstOS4wNTA1MSwzMS4yNzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzODQyNTc1YjA5YzRkYWFhNDVjMGEyNjg2MWI5ZjgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0YjkzMTZhYjNjNDQ3OThiNTY2ZDU5NTkxYWZhMjBiID0gJCgnPGRpdiBpZD0iaHRtbF84NGI5MzE2YWIzYzQ0Nzk4YjU2NmQ1OTU5MWFmYTIwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFVOR1U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzODQyNTc1YjA5YzRkYWFhNDVjMGEyNjg2MWI5ZjgxLnNldENvbnRlbnQoaHRtbF84NGI5MzE2YWIzYzQ0Nzk4YjU2NmQ1OTU5MWFmYTIwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk2MDljYmQ0MzZmNjQ1NWFiN2Q1MWRkMTBlODVlNzY2LmJpbmRQb3B1cChwb3B1cF85Mzg0MjU3NWIwOWM0ZGFhYTQ1YzBhMjY4NjFiOWY4MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MTk2MWMxNWVkZmY0OGYwYTdkNmNlNzgzYzdiZTE3MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjI5Mzg0MywzNC40MThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmMzUyODY4ZGI2OTRhOGFhMjVjYTRmYmEzYzUxNzc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwY2FjNTI5ZmU1ZDQxZGZiZDhkOTRmZTMxOThlMDM4ID0gJCgnPGRpdiBpZD0iaHRtbF80MGNhYzUyOWZlNWQ0MWRmYmQ4ZDk0ZmUzMTk4ZTAzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFVPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZjM1Mjg2OGRiNjk0YThhYTI1Y2E0ZmJhM2M1MTc3NC5zZXRDb250ZW50KGh0bWxfNDBjYWM1MjlmZTVkNDFkZmJkOGQ5NGZlMzE5OGUwMzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MTk2MWMxNWVkZmY0OGYwYTdkNmNlNzgzYzdiZTE3My5iaW5kUG9wdXAocG9wdXBfNWYzNTI4NjhkYjY5NGE4YWEyNWNhNGZiYTNjNTE3NzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmM1N2U2NGRkZWExNDYwZmEzNzEyNjBjNTk1MTI5M2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuMzI2MiwxNS4xMzUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzQ0MWE1NWRmNzY0MzFmODFiZWI2ZjUxMjM3MmVmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzNkMjk1NDc4MTk0OGNjODFjNWJlODY1NTgwODljMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjMzZDI5NTQ3ODE5NDhjYzgxYzViZTg2NTU4MDg5YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxVUE9MTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWM0NDFhNTVkZjc2NDMxZjgxYmViNmY1MTIzNzJlZjYuc2V0Q29udGVudChodG1sX2YzM2QyOTU0NzgxOTQ4Y2M4MWM1YmU4NjU1ODA4OWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmM1N2U2NGRkZWExNDYwZmEzNzEyNjBjNTk1MTI5M2MuYmluZFBvcHVwKHBvcHVwX2FjNDQxYTU1ZGY3NjQzMWY4MWJlYjZmNTEyMzcyZWY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBlYTc5ZDVjZTA1MjRlNzViZjA3MDAwZjk5OWZmODQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjI2NDQsMjEuODE0Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZlYmVhOTcwZWY0NDFmNjg5NzVkZDQ5OTQ2Mzc3YzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjc3MmUzZTZjNzFlNGZlYThhMzEzMTE4YWFkZTc0YzEgPSAkKCc8ZGl2IGlkPSJodG1sX2I3NzJlM2U2YzcxZTRmZWE4YTMxMzExOGFhZGU3NGMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MVVZBTEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZWJlYTk3MGVmNDQxZjY4OTc1ZGQ0OTk0NjM3N2M4LnNldENvbnRlbnQoaHRtbF9iNzcyZTNlNmM3MWU0ZmVhOGEzMTMxMThhYWRlNzRjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBlYTc5ZDVjZTA1MjRlNzViZjA3MDAwZjk5OWZmODQ1LmJpbmRQb3B1cChwb3B1cF82NmViZWE5NzBlZjQ0MWY2ODk3NWRkNDk5NDYzNzdjOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNGQ3OTVmMDc0MTA0ZWQxYmUwMDhiYmFjZjk5YTZlMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy02LjgxNjMxLDE4LjU3NThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyNzUwY2QyZmIzNzQ5Zjg4ZTljM2FhZTZlN2EyNjQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyZDhmOWFlMDkzYTQ3OTViZTFiNWU5ZmJlMTY2ODViID0gJCgnPGRpdiBpZD0iaHRtbF8yMmQ4ZjlhZTA5M2E0Nzk1YmUxYjVlOWZiZTE2Njg1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFVXQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzI3NTBjZDJmYjM3NDlmODhlOWMzYWFlNmU3YTI2NDcuc2V0Q29udGVudChodG1sXzIyZDhmOWFlMDkzYTQ3OTViZTFiNWU5ZmJlMTY2ODViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjRkNzk1ZjA3NDEwNGVkMWJlMDA4YmJhY2Y5OWE2ZTAuYmluZFBvcHVwKHBvcHVwXzMyNzUwY2QyZmIzNzQ5Zjg4ZTljM2FhZTZlN2EyNjQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM0NDFlZTMzYmIzYTQ4OTY4MTlkZTA1ZGY1ODJjYTRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguMjc1NSwzMi4zMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkNzUzMjZlZjIxYzQwMzM4MWY5ZTBhZWFjN2E0MTdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2YjhmOTA3YWE3MzRhZTJhZWQ5MmUwOTc3Yzc0MzUwID0gJCgnPGRpdiBpZD0iaHRtbF9lNmI4ZjkwN2FhNzM0YWUyYWVkOTJlMDk3N2M3NDM1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFBWkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkNzUzMjZlZjIxYzQwMzM4MWY5ZTBhZWFjN2E0MTdmLnNldENvbnRlbnQoaHRtbF9lNmI4ZjkwN2FhNzM0YWUyYWVkOTJlMDk3N2M3NDM1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0NDFlZTMzYmIzYTQ4OTY4MTlkZTA1ZGY1ODJjYTRkLmJpbmRQb3B1cChwb3B1cF83ZDc1MzI2ZWYyMWM0MDMzODFmOWUwYWVhYzdhNDE3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMGJmNWY2YjhmM2Q0NjJhYWI1NTUwZDBhNGJjYWYxMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjc0OTQsMjAuMTgwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzMwMzA1OTY0MmExNGI3OWJiZjQyYjc2Y2UyNjJhOTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWNhODMwMzdjOTA1NGM1OGEwZWU1ZTQ4NjVlYjE5ODQgPSAkKCc8ZGl2IGlkPSJodG1sXzFjYTgzMDM3YzkwNTRjNThhMGVlNWU0ODY1ZWIxOTg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzAzMDU5NjQyYTE0Yjc5YmJmNDJiNzZjZTI2MmE5OC5zZXRDb250ZW50KGh0bWxfMWNhODMwMzdjOTA1NGM1OGEwZWU1ZTQ4NjVlYjE5ODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMGJmNWY2YjhmM2Q0NjJhYWI1NTUwZDBhNGJjYWYxMi5iaW5kUG9wdXAocG9wdXBfNzMwMzA1OTY0MmExNGI3OWJiZjQyYjc2Y2UyNjJhOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDE0MzYzOTdhMWJhNDMxOWI3NjM0NzQxMThlMzllOWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjMzMjU0OTYzNTEsMzcuMTU5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDMwNzczNGU4YmY0NDFkN2I5ZGYzYjA0NWM2NmYzMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRhZTNkNTA1ZGQyNGVlYmE2MGU2NDAyMzQ4MTYxY2UgPSAkKCc8ZGl2IGlkPSJodG1sX2E0YWUzZDUwNWRkMjRlZWJhNjBlNjQwMjM0ODE2MWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQUNIQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDMwNzczNGU4YmY0NDFkN2I5ZGYzYjA0NWM2NmYzMTMuc2V0Q29udGVudChodG1sX2E0YWUzZDUwNWRkMjRlZWJhNjBlNjQwMjM0ODE2MWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDE0MzYzOTdhMWJhNDMxOWI3NjM0NzQxMThlMzllOWIuYmluZFBvcHVwKHBvcHVwX2QzMDc3MzRlOGJmNDQxZDdiOWRmM2IwNDVjNjZmMzEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RjMzcyOTJlYzM1OTQwOTE4MjkyZjc1MzlmYzBmZDZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4wNDQ0NTI5MTUxOSw4LjYwMDU2ODEzNDEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjZjYzk3MDkzYWM0ODgyYTIzMDU2YWEwZmIwMTZmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOThkNWQxZTM2MzQ0MGNjYmYyNDI0OTJlZWYxNmRkOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTk4ZDVkMWUzNjM0NDBjY2JmMjQyNDkyZWVmMTZkZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BREE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyNmNjOTcwOTNhYzQ4ODJhMjMwNTZhYTBmYjAxNmYyLnNldENvbnRlbnQoaHRtbF9hOThkNWQxZTM2MzQ0MGNjYmYyNDI0OTJlZWYxNmRkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RjMzcyOTJlYzM1OTQwOTE4MjkyZjc1MzlmYzBmZDZjLmJpbmRQb3B1cChwb3B1cF9jMjZjYzk3MDkzYWM0ODgyYTIzMDU2YWEwZmIwMTZmMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82YzEyNGVlMzUzNWU0YzcxOGFhZDA0MzE3NDg5Nzc1NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMuNjEwODYzOTQxOTYsMzEuODMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTJmZjI3NWI4ODFiNGQ1N2IxODc0YTYxNzI5YTU2YWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGUwNWI3YWY2NGQ1NDg1M2I4NmFmMTBmOWJmYTkyYjUgPSAkKCc8ZGl2IGlkPSJodG1sX2RlMDViN2FmNjRkNTQ4NTNiODZhZjEwZjliZmE5MmI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQURJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMmZmMjc1Yjg4MWI0ZDU3YjE4NzRhNjE3MjlhNTZhZi5zZXRDb250ZW50KGh0bWxfZGUwNWI3YWY2NGQ1NDg1M2I4NmFmMTBmOWJmYTkyYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzEyNGVlMzUzNWU0YzcxOGFhZDA0MzE3NDg5Nzc1NC5iaW5kUG9wdXAocG9wdXBfZTJmZjI3NWI4ODFiNGQ1N2IxODc0YTYxNzI5YTU2YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTBlZmM1ZDE0YzBhNGFjNzk0ZTQwZDFiN2I3MTM3NTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDQyLDguODg1NjkxOTc5NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhYzRlM2RiNzE4ZjQ4MjM4MzU2MTA2ZmIwYjcxOTg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4MzMyMDRjNDNkNDQ0YTU4NzY2YmQ4N2FiNTI2ODcxID0gJCgnPGRpdiBpZD0iaHRtbF82ODMzMjA0YzQzZDQ0NGE1ODc2NmJkODdhYjUyNjg3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFHVVpBV0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhYzRlM2RiNzE4ZjQ4MjM4MzU2MTA2ZmIwYjcxOTg4LnNldENvbnRlbnQoaHRtbF82ODMzMjA0YzQzZDQ0NGE1ODc2NmJkODdhYjUyNjg3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkwZWZjNWQxNGMwYTRhYzc5NGU0MGQxYjdiNzEzNzU2LmJpbmRQb3B1cChwb3B1cF82YWM0ZTNkYjcxOGY0ODIzODM1NjEwNmZiMGI3MTk4OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZGY0MGE4NmJhM2I0NDc5ODk3MDQ4YTk2OWMzNDRmYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC40NzUyLDM2LjAyMTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2ZjA1MTgzYTA3ZDRjMDRiMjEzM2UyYjljNDFkODY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZDMzNTM4MjNiZjQxNmI5MjFmODRhNTQ3YTUxZDBmID0gJCgnPGRpdiBpZD0iaHRtbF8xZGQzMzUzODIzYmY0MTZiOTIxZjg0YTU0N2E1MWQwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFHV0FOR0FSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZmMDUxODNhMDdkNGMwNGIyMTMzZTJiOWM0MWQ4NjQuc2V0Q29udGVudChodG1sXzFkZDMzNTM4MjNiZjQxNmI5MjFmODRhNTQ3YTUxZDBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmRmNDBhODZiYTNiNDQ3OTg5NzA0OGE5NjljMzQ0ZmIuYmluZFBvcHVwKHBvcHVwXzM2ZjA1MTgzYTA3ZDRjMDRiMjEzM2UyYjljNDFkODY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhjYWMyM2YzODY0ZTQ5MTQ4NjJmYjU3N2EwMjc2YjI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI0LjQ1NTYsNDQuMzgwOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTgxY2U0N2MwNWQwNGExN2FlZjdkMmMyMjQ4MTE2NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWZiMTc2OGYzMGRmNDY5ZWExMzRhOWY5MWU3ZGQ5ZDQgPSAkKCc8ZGl2IGlkPSJodG1sX2VmYjE3NjhmMzBkZjQ2OWVhMTM0YTlmOTFlN2RkOWQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQUhBRkFMWTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTgxY2U0N2MwNWQwNGExN2FlZjdkMmMyMjQ4MTE2NDQuc2V0Q29udGVudChodG1sX2VmYjE3NjhmMzBkZjQ2OWVhMTM0YTlmOTFlN2RkOWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGNhYzIzZjM4NjRlNDkxNDg2MmZiNTc3YTAyNzZiMjkuYmluZFBvcHVwKHBvcHVwXzE4MWNlNDdjMDVkMDRhMTdhZWY3ZDJjMjI0ODExNjQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRlNzA3ZGEwMTI1MTQ0MmFhYjczYmU3ZTQ5OGM5ZTE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMjkzOSwyMC41MTA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZWM3YTJkY2Y5OTY0M2Q5YmQ2OGYzZmZmZDcyZTRiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDA2Mzk0MWIwYTM0ZjFmOGJiN2Y5OTc0ZmE3ZjZkOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDQwNjM5NDFiMGEzNGYxZjhiYjdmOTk3NGZhN2Y2ZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BSEFNSUQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JlYzdhMmRjZjk5NjQzZDliZDY4ZjNmZmZkNzJlNGI0LnNldENvbnRlbnQoaHRtbF8wNDA2Mzk0MWIwYTM0ZjFmOGJiN2Y5OTc0ZmE3ZjZkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRlNzA3ZGEwMTI1MTQ0MmFhYjczYmU3ZTQ5OGM5ZTE2LmJpbmRQb3B1cChwb3B1cF9iZWM3YTJkY2Y5OTY0M2Q5YmQ2OGYzZmZmZDcyZTRiNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MTI5Yjg5MjIxNzY0NGFlOTY5ZjE1MGEyMzFjMWY5YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuMTQ3MjI1MjYyNzEsMTMuMjQzOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I2ZGNhOTUyY2YyNGMwMjgxOTFkMzJlMWM3NGRiMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2Y2YzEzMTYzNDdiNGQ1OTkzMWNkZTFiNjg0MDYzMjAgPSAkKCc8ZGl2IGlkPSJodG1sXzNmNmMxMzE2MzQ3YjRkNTk5MzFjZGUxYjY4NDA2MzIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQUtBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjZkY2E5NTJjZjI0YzAyODE5MWQzMmUxYzc0ZGIxYi5zZXRDb250ZW50KGh0bWxfM2Y2YzEzMTYzNDdiNGQ1OTkzMWNkZTFiNjg0MDYzMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MTI5Yjg5MjIxNzY0NGFlOTY5ZjE1MGEyMzFjMWY5YS5iaW5kUG9wdXAocG9wdXBfM2I2ZGNhOTUyY2YyNGMwMjgxOTFkMzJlMWM3NGRiMWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTk4NzZhNTcyYmYzNDljMmJjZjQyOTZmMTdjYjdmODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjYyMjkwODQ0MTk4LDI2LjQyNzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1NzVkNTRkYTYzMDQ3NWE5NWJmYzYwMWM2MjY2NzY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmNjI5YmIxM2FlNDRkNGRiNzA1OWQzYzgzNjMyYmI2ID0gJCgnPGRpdiBpZD0iaHRtbF81ZjYyOWJiMTNhZTQ0ZDRkYjcwNTlkM2M4MzYzMmJiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFLRVJFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTc1ZDU0ZGE2MzA0NzVhOTViZmM2MDFjNjI2Njc2Ni5zZXRDb250ZW50KGh0bWxfNWY2MjliYjEzYWU0NGQ0ZGI3MDU5ZDNjODM2MzJiYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OTg3NmE1NzJiZjM0OWMyYmNmNDI5NmYxN2NiN2Y4OC5iaW5kUG9wdXAocG9wdXBfMDU3NWQ1NGRhNjMwNDc1YTk1YmZjNjAxYzYyNjY3NjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjVmMGVlNmE2YzM0NDVlMGI3ZjI0MzViMjAyMjBlZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuOTk5MiwzOS43ODM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZjg1MzdhMThhZGY0YzI1YWQ2MzJhYmFlZjZmMmZhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDc4ZjU1ZDlkOTQ0OThhOWM5YzA4MjY0MDVhY2MzNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzA3OGY1NWQ5ZDk0NDk4YTljOWMwODI2NDA1YWNjMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BS09OREU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmODUzN2ExOGFkZjRjMjVhZDYzMmFiYWVmNmYyZmEwLnNldENvbnRlbnQoaHRtbF83MDc4ZjU1ZDlkOTQ0OThhOWM5YzA4MjY0MDVhY2MzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY1ZjBlZTZhNmMzNDQ1ZTBiN2YyNDM1YjIwMjIwZWZjLmJpbmRQb3B1cChwb3B1cF9jZjg1MzdhMThhZGY0YzI1YWQ2MzJhYmFlZjZmMmZhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NDQyNzIwNmRhN2M0MWFkYjNkMmQ3YjA4MmY4YjQyNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy42ODUyLDM4LjkxMzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiYTUwY2RkMTdlNzRkOTY5MDkxNjdmYTgwYTUzMmUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5ZjIyOTAzNzVjNzQwZjk5ZTdmZWJkMjg2NjNkMzk0ID0gJCgnPGRpdiBpZD0iaHRtbF9iOWYyMjkwMzc1Yzc0MGY5OWU3ZmViZDI4NjYzZDM5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFLVUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiYTUwY2RkMTdlNzRkOTY5MDkxNjdmYTgwYTUzMmUxLnNldENvbnRlbnQoaHRtbF9iOWYyMjkwMzc1Yzc0MGY5OWU3ZmViZDI4NjYzZDM5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0NDI3MjA2ZGE3YzQxYWRiM2QyZDdiMDgyZjhiNDI0LmJpbmRQb3B1cChwb3B1cF9mYmE1MGNkZDE3ZTc0ZDk2OTA5MTY3ZmE4MGE1MzJlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80OTM3ZWExMWM4Y2I0ZWJiYTRhMTE4Mzk3NWIwOTgzZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjg2NjMsLTEwLjY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTVhYTk1OGI0MmI0ZmRlOTVlOWI2YzNkMWRmMDU0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Zjk3MDA4ZTdhMTU0MzMyYjRkMTM2YjA3NGJlNmRjMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY5NzAwOGU3YTE1NDMzMmI0ZDEzNmIwNzRiZTZkYzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BTElOS0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlNWFhOTU4YjQyYjRmZGU5NWU5YjZjM2QxZGYwNTQ3LnNldENvbnRlbnQoaHRtbF81Zjk3MDA4ZTdhMTU0MzMyYjRkMTM2YjA3NGJlNmRjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ5MzdlYTExYzhjYjRlYmJhNGExMTgzOTc1YjA5ODNlLmJpbmRQb3B1cChwb3B1cF8wZTVhYTk1OGI0MmI0ZmRlOTVlOWI2YzNkMWRmMDU0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYzk4NjVhM2Y2Zjc0MWY1YjVjNWY1MDE3ZDgzZjNjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMTIzNTgxNzEwNTYsOS4wMjU0ODg0OTgyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNkNzJjNzQ5NDIyNDQ1OTgxMmQzYjcyZmI2NjgyZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ0YTNiMWVjNDQ5NDg4ZmIwODkwMmJjN2YxYzAxODUgPSAkKCc8ZGl2IGlkPSJodG1sXzFkNGEzYjFlYzQ0OTQ4OGZiMDg5MDJiYzdmMWMwMTg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84M2Q3MmM3NDk0MjI0NDU5ODEyZDNiNzJmYjY2ODJlMS5zZXRDb250ZW50KGh0bWxfMWQ0YTNiMWVjNDQ5NDg4ZmIwODkwMmJjN2YxYzAxODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYzk4NjVhM2Y2Zjc0MWY1YjVjNWY1MDE3ZDgzZjNjMy5iaW5kUG9wdXAocG9wdXBfODNkNzJjNzQ5NDIyNDQ1OTgxMmQzYjcyZmI2NjgyZTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmUwMWNlYWMyZmFmNGZlMDkxOTRlODIxNmEyZTNmMjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ljg5NjQzNTIyNDkzLDExLjY2OTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2OWFmNzYwNzgyOTRhMjc5MjM0NTQ2N2ZkOWIxYmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxNTZlNTI1MTExZjQyODY5OGJlZWM1NWM2ZjIyODVhID0gJCgnPGRpdiBpZD0iaHRtbF84MTU2ZTUyNTExMWY0Mjg2OThiZWVjNTVjNmYyMjg1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFNQklMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzY5YWY3NjA3ODI5NGEyNzkyMzQ1NDY3ZmQ5YjFiZTguc2V0Q29udGVudChodG1sXzgxNTZlNTI1MTExZjQyODY5OGJlZWM1NWM2ZjIyODVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmUwMWNlYWMyZmFmNGZlMDkxOTRlODIxNmEyZTNmMjYuYmluZFBvcHVwKHBvcHVwXzc2OWFmNzYwNzgyOTRhMjc5MjM0NTQ2N2ZkOWIxYmU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg1YjZiMGQzMzEyODQzMDI5ZDE3YjA2NmRhMDJmMGJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuMzYxNiwtMC41MTYyNjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmYzcyYzkwZDM4NjRlNTA4MmJjMDQwYTkxMmE5NTg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1NGZiYTBiMWU3MDRmZmE5OGUxMmRjM2E2M2Y5ODU2ID0gJCgnPGRpdiBpZD0iaHRtbF9mNTRmYmEwYjFlNzA0ZmZhOThlMTJkYzNhNjNmOTg1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFNUFJVU0k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmYzcyYzkwZDM4NjRlNTA4MmJjMDQwYTkxMmE5NTg0LnNldENvbnRlbnQoaHRtbF9mNTRmYmEwYjFlNzA0ZmZhOThlMTJkYzNhNjNmOTg1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg1YjZiMGQzMzEyODQzMDI5ZDE3YjA2NmRhMDJmMGJhLmJpbmRQb3B1cChwb3B1cF9hZmM3MmM5MGQzODY0ZTUwODJiYzA0MGE5MTJhOTU4NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZjJmZGYxN2MyZWI0ZGY3OGE0NWQ1OTRmOTQwMWQ2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNzE0Mzc3ODI1MjUsMjkuMzg0M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQwNzA0YzM4NmM4NGE1ZGE2NWNlMzExNzRiOWM3NmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTYyODgxNDFiZDI5NDRhY2FhYjRmZTdiMjQzMGY3ZjEgPSAkKCc8ZGl2IGlkPSJodG1sX2U2Mjg4MTQxYmQyOTQ0YWNhYWI0ZmU3YjI0MzBmN2YxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU1WVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQwNzA0YzM4NmM4NGE1ZGE2NWNlMzExNzRiOWM3NmIuc2V0Q29udGVudChodG1sX2U2Mjg4MTQxYmQyOTQ0YWNhYWI0ZmU3YjI0MzBmN2YxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGYyZmRmMTdjMmViNGRmNzhhNDVkNTk0Zjk0MDFkNjAuYmluZFBvcHVwKHBvcHVwXzU0MDcwNGMzODZjODRhNWRhNjVjZTMxMTc0YjljNzZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2MGJiNzgzYWMxNjRkZTlhM2ZmMDc3MjkyOTJmNmMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI1LjkwNjYsMjguMzI2M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQzNzIxOTBjZDU4NGY0ZDg3YjJjMTk5Y2ZhOWQ5NGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTkyMWU2MjE5NjYyNGUxZThiNTliM2I4NjQyODBjZjkgPSAkKCc8ZGl2IGlkPSJodG1sX2E5MjFlNjIxOTY2MjRlMWU4YjU5YjNiODY0MjgwY2Y5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU5BTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0MzcyMTkwY2Q1ODRmNGQ4N2IyYzE5OWNmYTlkOTRjLnNldENvbnRlbnQoaHRtbF9hOTIxZTYyMTk2NjI0ZTFlOGI1OWIzYjg2NDI4MGNmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2MGJiNzgzYWMxNjRkZTlhM2ZmMDc3MjkyOTJmNmMyLmJpbmRQb3B1cChwb3B1cF9lNDM3MjE5MGNkNTg0ZjRkODdiMmMxOTljZmE5ZDk0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NjQyNDYzMjdmZGY0ZGQ3YmJiNjYxNzYxYmMzZjNlZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjQ0NjIsMTQuMTkxMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThhMDFlZTU4MWIxNGQzYTllYzllNTg3NTcwNGM1OWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmMzZTQ3ZDQxNjA1NDczMmI0OWE1ZDNiOTUyMjgyNGQgPSAkKCc8ZGl2IGlkPSJodG1sXzZjM2U0N2Q0MTYwNTQ3MzJiNDlhNWQzYjk1MjI4MjRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU5EQVJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OGEwMWVlNTgxYjE0ZDNhOWVjOWU1ODc1NzA0YzU5ZC5zZXRDb250ZW50KGh0bWxfNmMzZTQ3ZDQxNjA1NDczMmI0OWE1ZDNiOTUyMjgyNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NjQyNDYzMjdmZGY0ZGQ3YmJiNjYxNzYxYmMzZjNlZC5iaW5kUG9wdXAocG9wdXBfOThhMDFlZTU4MWIxNGQzYTllYzllNTg3NTcwNGM1OWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2RkODJhMGE5NGNhNDJhYTg3NjIwNWQwNTIzZDY1ODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Ljk1NjMzODk3MjE2LDE4LjMyNDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkMTIzZTg0YTM1ZTRkNzk4ZjI4NWJjYjhjYWUwYjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3ZjJhZGNlNDRkYjRjZTdiNTkwZDZmNTE3OTJlOGNjID0gJCgnPGRpdiBpZD0iaHRtbF84N2YyYWRjZTQ0ZGI0Y2U3YjU5MGQ2ZjUxNzkyZThjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFOREpBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDEyM2U4NGEzNWU0ZDc5OGYyODViY2I4Y2FlMGIwYi5zZXRDb250ZW50KGh0bWxfODdmMmFkY2U0NGRiNGNlN2I1OTBkNmY1MTc5MmU4Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZGQ4MmEwYTk0Y2E0MmFhODc2MjA1ZDA1MjNkNjU4OC5iaW5kUG9wdXAocG9wdXBfMGQxMjNlODRhMzVlNGQ3OThmMjg1YmNiOGNhZTBiMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjVmMTg3OWNhNTU3NDllZThlMTI5MDdhZjk1ZTQ3ODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy40MDcxLDExLjM0ODFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2N2ZjN2MzNWNjNDQ1ZGRhMzUyZGQ2ZGVkNmZkODE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5NDhjNDI4ZjYxNjQxYjViZDg3NzNhY2E3MzljMzBlID0gJCgnPGRpdiBpZD0iaHRtbF8yOTQ4YzQyOGY2MTY0MWI1YmQ4NzczYWNhNzM5YzMwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFOR0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2N2ZjN2MzNWNjNDQ1ZGRhMzUyZGQ2ZGVkNmZkODE5LnNldENvbnRlbnQoaHRtbF8yOTQ4YzQyOGY2MTY0MWI1YmQ4NzczYWNhNzM5YzMwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY1ZjE4NzljYTU1NzQ5ZWU4ZTEyOTA3YWY5NWU0NzgzLmJpbmRQb3B1cChwb3B1cF81NjdmYzdjMzVjYzQ0NWRkYTM1MmRkNmRlZDZmZDgxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZDllMGNhNjkzMTg0ZmE2OTZmMzFhNjM2ZWIzZTg0ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMuMzk2NzI2MTk5OTIsMjcuNzk1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTdhOThmYTAxNDY0NjJiODE5ZDJkNjM0MmU1OTQ3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTM3NGQxMGU4ZGU0NzU3ODQyZWE1YWU3ZWNmYmQ5ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDEzNzRkMTBlOGRlNDc1Nzg0MmVhNWFlN2VjZmJkOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BTkdCRVRVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTdhOThmYTAxNDY0NjJiODE5ZDJkNjM0MmU1OTQ3My5zZXRDb250ZW50KGh0bWxfNDEzNzRkMTBlOGRlNDc1Nzg0MmVhNWFlN2VjZmJkOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZDllMGNhNjkzMTg0ZmE2OTZmMzFhNjM2ZWIzZTg0ZS5iaW5kUG9wdXAocG9wdXBfZDE3YTk4ZmEwMTQ2NDYyYjgxOWQyZDYzNDJlNTk0NzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGZjNGJkZWMxZjcxNGI5YmFkZDhiYzE1YTQ2ZmRjMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTguODE3NSwzMi43NzQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDU1YTJlNjgxMjM0N2VlODc2Y2EwZWE3NzMwNjhhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NGY2YTIzNzFkMTU0MTA0ODgyZDhjNTZlMWE0NDBmNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTRmNmEyMzcxZDE1NDEwNDg4MmQ4YzU2ZTFhNDQwZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BTllJS0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0NTVhMmU2ODEyMzQ3ZWU4NzZjYTBlYTc3MzA2OGFhLnNldENvbnRlbnQoaHRtbF81NGY2YTIzNzFkMTU0MTA0ODgyZDhjNTZlMWE0NDBmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRmYzRiZGVjMWY3MTRiOWJhZGQ4YmMxNWE0NmZkYzJhLmJpbmRQb3B1cChwb3B1cF83NDU1YTJlNjgxMjM0N2VlODc2Y2EwZWE3NzMwNjhhYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNmRlNDgyYmZkZjU0MjE2ODQwNGM4YTc5OTc3MjJkZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMDI1OTc1MTI5MzUsMzQuNzc4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGYxZTQzOTg3OTNiNGJmMTkwMTNhOTZlNDgwNzBkNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGNkOGZlOTA1NWExNDRmYWExNDg3Y2ZhYjQ2Y2YyYjcgPSAkKCc8ZGl2IGlkPSJodG1sXzBjZDhmZTkwNTVhMTQ0ZmFhMTQ4N2NmYWI0NmNmMmI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMWU0Mzk4NzkzYjRiZjE5MDEzYTk2ZTQ4MDcwZDc5LnNldENvbnRlbnQoaHRtbF8wY2Q4ZmU5MDU1YTE0NGZhYTE0ODdjZmFiNDZjZjJiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M2ZGU0ODJiZmRmNTQyMTY4NDA0YzhhNzk5NzcyMmRmLmJpbmRQb3B1cChwb3B1cF84ZjFlNDM5ODc5M2I0YmYxOTAxM2E5NmU0ODA3MGQ3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMTg4ZjQ5ZGRjYTQ0M2M2YTMxNGEzZTA4MTJjYTIzMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjc3NzksMTMuMjEwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTUzYWE2NGE2ODY2NDBhOWE4ZmJmYmRlNDExOTA4NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWU3ZWIzMTVlNDIzNDY5ZmIxMjdhOWNkNDU0ZTQwN2YgPSAkKCc8ZGl2IGlkPSJodG1sXzFlN2ViMzE1ZTQyMzQ2OWZiMTI3YTljZDQ1NGU0MDdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQVJHSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUzYWE2NGE2ODY2NDBhOWE4ZmJmYmRlNDExOTA4NmEuc2V0Q29udGVudChodG1sXzFlN2ViMzE1ZTQyMzQ2OWZiMTI3YTljZDQ1NGU0MDdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTE4OGY0OWRkY2E0NDNjNmEzMTRhM2UwODEyY2EyMzEuYmluZFBvcHVwKHBvcHVwX2E1M2FhNjRhNjg2NjQwYTlhOGZiZmJkZTQxMTkwODZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJlZGMwYzRkYWM1NjQ5N2I5NWE3ZWQwMTQ3NzA2ZGZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS45MjkzMjczNzU5OSwxNS42NTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMGIyNzFlNTFjZTg0MmFhYTgxNDdlZDEyOTdjN2Y3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDVlYjE3MTk5ZWU0OTEzOGMxNjc2ZmYwOTFlNDM0YSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjQ1ZWIxNzE5OWVlNDkxMzhjMTY3NmZmMDkxZTQzNGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BU0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwYjI3MWU1MWNlODQyYWFhODE0N2VkMTI5N2M3ZjcyLnNldENvbnRlbnQoaHRtbF9mNDVlYjE3MTk5ZWU0OTEzOGMxNjc2ZmYwOTFlNDM0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJlZGMwYzRkYWM1NjQ5N2I5NWE3ZWQwMTQ3NzA2ZGZiLmJpbmRQb3B1cChwb3B1cF9hMGIyNzFlNTFjZTg0MmFhYTgxNDdlZDEyOTdjN2Y3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNmIxY2JkNmYxZWU0YWE3ODVjNGVmZTkwYzNhZWU3MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjkyMTI2LDM2LjQxN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGY1OTk4ZjFlNDVmNGQ2MjlhMTk5MWM0ZGU5NDc5ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU3MGEwOGZkZDZjNGNlNmI5MmJjN2NiMjkwZTUxY2UgPSAkKCc8ZGl2IGlkPSJodG1sX2Q1NzBhMDhmZGQ2YzRjZTZiOTJiYzdjYjI5MGU1MWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQVNBSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY1OTk4ZjFlNDVmNGQ2MjlhMTk5MWM0ZGU5NDc5ZGMuc2V0Q29udGVudChodG1sX2Q1NzBhMDhmZGQ2YzRjZTZiOTJiYzdjYjI5MGU1MWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjZiMWNiZDZmMWVlNGFhNzg1YzRlZmU5MGMzYWVlNzMuYmluZFBvcHVwKHBvcHVwXzBmNTk5OGYxZTQ1ZjRkNjI5YTE5OTFjNGRlOTQ3OWRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I4MmI2MDc4NjEzNzQwYjRiZmNhMTllZTFkMDIzMmI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuMTg3MywyMi40NzkyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Yzg0NTNjN2FiMjc0ZjE0YjNhMjdkNmUxODdlZjJiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTdiY2RkN2Y0NmQ0NjA2OWM5MTFkYTkxMTA0NDY5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfZmU3YmNkZDdmNDZkNDYwNjljOTExZGE5MTEwNDQ2OWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BU0FMSVQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjODQ1M2M3YWIyNzRmMTRiM2EyN2Q2ZTE4N2VmMmJkLnNldENvbnRlbnQoaHRtbF9mZTdiY2RkN2Y0NmQ0NjA2OWM5MTFkYTkxMTA0NDY5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I4MmI2MDc4NjEzNzQwYjRiZmNhMTllZTFkMDIzMmI5LmJpbmRQb3B1cChwb3B1cF82Yzg0NTNjN2FiMjc0ZjE0YjNhMjdkNmUxODdlZjJiZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MWMzODJhMzJiNmU0NGRlYmJmMDNkOTc3NzQ4YmQ0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS4zOTg5LDI1LjM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTI2ZjM0N2ExMmI0OWE1YWM0ZTY0NjIwYWNiMTQ3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmY1NWRmYTgxN2Y0ODgyOTIzYzg0NTZhZDA5ZjRkNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWJmNTVkZmE4MTdmNDg4MjkyM2M4NDU2YWQwOWY0ZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BU0hBU0hBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTI2ZjM0N2ExMmI0OWE1YWM0ZTY0NjIwYWNiMTQ3Yi5zZXRDb250ZW50KGh0bWxfYWJmNTVkZmE4MTdmNDg4MjkyM2M4NDU2YWQwOWY0ZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MWMzODJhMzJiNmU0NGRlYmJmMDNkOTc3NzQ4YmQ0Zi5iaW5kUG9wdXAocG9wdXBfMGEyNmYzNDdhMTJiNDlhNWFjNGU2NDYyMGFjYjE0N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTQzMWVlOGQ3MTkwNDdhMTg5ZDRiMTQwZjYwZDJjZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTYuMTY1MSwyMi41Mzk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTNkNWJiYTBiODE0OWFiODhiMWIzNzFkZWE4MWU0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTllN2Y1N2ZlZDI0ODJmYmYwNjA5N2E1NWMxNjcxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2E5ZTdmNTdmZWQyNDgyZmJmMDYwOTdhNTVjMTY3MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BU0hJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OTNkNWJiYTBiODE0OWFiODhiMWIzNzFkZWE4MWU0Zi5zZXRDb250ZW50KGh0bWxfY2E5ZTdmNTdmZWQyNDgyZmJmMDYwOTdhNTVjMTY3MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNDMxZWU4ZDcxOTA0N2ExODlkNGIxNDBmNjBkMmNmMS5iaW5kUG9wdXAocG9wdXBfNjkzZDViYmEwYjgxNDlhYjg4YjFiMzcxZGVhODFlNGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmE2NmEyYTQzZTJmNDczNTgxYzhkMTNjMTBlNjI4NTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4yMDQxLC0zLjg1MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlMDMwNGM5NWE4NjQzMWNhNjFlYjVhZTU1MWNiMWIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhNDU2ZmE0ZmMwZDQ0OGRiYTYzYTdhZmZkODdkZTNlID0gJCgnPGRpdiBpZD0iaHRtbF8xYTQ1NmZhNGZjMGQ0NDhkYmE2M2E3YWZmZDg3ZGUzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFTSU5BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZTAzMDRjOTVhODY0MzFjYTYxZWI1YWU1NTFjYjFiMC5zZXRDb250ZW50KGh0bWxfMWE0NTZmYTRmYzBkNDQ4ZGJhNjNhN2FmZmQ4N2RlM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYTY2YTJhNDNlMmY0NzM1ODFjOGQxM2MxMGU2Mjg1Ny5iaW5kUG9wdXAocG9wdXBfYWUwMzA0Yzk1YTg2NDMxY2E2MWViNWFlNTUxY2IxYjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjZiYjE1MmE1NGRjNDZhNWFlNmI5M2E0NmM0NzIwMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3Ljg2OTk4OTIzNzg3LDM0Ljk5NDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjMmY5YTk5NzNiZTRhY2RhOTliOWI5NjBlYmExZDg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5ZWY3NDA3MWNlZjQ3MTA5NTI0NjA4Zjc0MDZkYTc1ID0gJCgnPGRpdiBpZD0iaHRtbF9hOWVmNzQwNzFjZWY0NzEwOTUyNDYwOGY3NDA2ZGE3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFTT05HTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGMyZjlhOTk3M2JlNGFjZGE5OWI5Yjk2MGViYTFkODQuc2V0Q29udGVudChodG1sX2E5ZWY3NDA3MWNlZjQ3MTA5NTI0NjA4Zjc0MDZkYTc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjZiYjE1MmE1NGRjNDZhNWFlNmI5M2E0NmM0NzIwMjguYmluZFBvcHVwKHBvcHVwXzhjMmY5YTk5NzNiZTRhY2RhOTliOWI5NjBlYmExZDg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EyOGJkNWU5NWMxNTQyOWVhNjc0ZjYwOGQ4ZmFlNGVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuODIwOCwxMy43OTA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjQ2ODA3ZDM4NTg0NDFkOGEwMDNkNjY1ODMyNDYzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTgxMmJkNjc1YzI0YjEzOTllOTAwMzYzMzA2MTU3ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmU4MTJiZDY3NWMyNGIxMzk5ZTkwMDM2MzMwNjE1N2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BVEFLQU08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyNDY4MDdkMzg1ODQ0MWQ4YTAwM2Q2NjU4MzI0NjM0LnNldENvbnRlbnQoaHRtbF8yZTgxMmJkNjc1YzI0YjEzOTllOTAwMzYzMzA2MTU3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EyOGJkNWU5NWMxNTQyOWVhNjc0ZjYwOGQ4ZmFlNGVmLmJpbmRQb3B1cChwb3B1cF8zMjQ2ODA3ZDM4NTg0NDFkOGEwMDNkNjY1ODMyNDYzNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NGVmYWY3N2JjOTc0ZDY3OTIwYmViZjU0Y2VlNmI5ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS4wMDg2LDM1LjE4MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxNWU5NGRmMWNmYjRhMzJhOTIwNTA5Nzc1OWMyNDJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlNTcyZmU3YjU0ODRjODRhNjI2OWM1ZGIxNTUyMzdjID0gJCgnPGRpdiBpZD0iaHRtbF8yZTU3MmZlN2I1NDg0Yzg0YTYyNjljNWRiMTU1MjM3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFURU5HTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE1ZTk0ZGYxY2ZiNGEzMmE5MjA1MDk3NzU5YzI0MmMuc2V0Q29udGVudChodG1sXzJlNTcyZmU3YjU0ODRjODRhNjI2OWM1ZGIxNTUyMzdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTRlZmFmNzdiYzk3NGQ2NzkyMGJlYmY1NGNlZTZiOWYuYmluZFBvcHVwKHBvcHVwX2MxNWU5NGRmMWNmYjRhMzJhOTIwNTA5Nzc1OWMyNDJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ3ZjlhMGQ5YjVmMDRjMzk5YmE4NWRmNmNjNzJiYmVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNTM1NCw5LjQ5NjM2MTQzMDAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OGY4MjkxZDQ5MDU0NWEyYmY3NTI3NGZmZmRlYzZkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDc2ZDA3Y2EzYWE0OWIwYjdiZDc4MmI5YmZkODE1ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGQ3NmQwN2NhM2FhNDliMGI3YmQ3ODJiOWJmZDgxNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BVE1BVEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4ZjgyOTFkNDkwNTQ1YTJiZjc1Mjc0ZmZmZGVjNmRiLnNldENvbnRlbnQoaHRtbF84ZDc2ZDA3Y2EzYWE0OWIwYjdiZDc4MmI5YmZkODE1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ3ZjlhMGQ5YjVmMDRjMzk5YmE4NWRmNmNjNzJiYmVlLmJpbmRQb3B1cChwb3B1cF84OGY4MjkxZDQ5MDU0NWEyYmY3NTI3NGZmZmRlYzZkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZjY1ZTJjNmJmMzc0NzFkYWRlMWQyOTdhOGRhZTU2YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy05LjM3ODMxLDM2LjIwOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3MTI3OGEyN2NmYzQ1NzhhMWIyYmMwMTA3NjMwY2VjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmYzc0OThhOTM0ZTRiOTQ5MmQ4OTk1NjI3ZjFhNGQxID0gJCgnPGRpdiBpZD0iaHRtbF9jZmM3NDk4YTkzNGU0Yjk0OTJkODk5NTYyN2YxYTRkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFUVU1CSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODcxMjc4YTI3Y2ZjNDU3OGExYjJiYzAxMDc2MzBjZWMuc2V0Q29udGVudChodG1sX2NmYzc0OThhOTM0ZTRiOTQ5MmQ4OTk1NjI3ZjFhNGQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWY2NWUyYzZiZjM3NDcxZGFkZTFkMjk3YThkYWU1NmMuYmluZFBvcHVwKHBvcHVwXzg3MTI3OGEyN2NmYzQ1NzhhMWIyYmMwMTA3NjMwY2VjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgxYmNmNDg3ZmI1ODQ2NzE4NzQ4M2MwZGJjYzVhNmZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuMzMzMSwzLjc3NjA2MTYwODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNjA1ODFhMzk1NmI0ZDRmYTU2OTc0NjM4N2Y2ZWI2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTcwNDVhNjQwZTI0Mzc2ODc4MTc2NTZiOGYwY2FhNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTE3MDQ1YTY0MGUyNDM3Njg3ODE3NjU2YjhmMGNhYTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BVVJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNjA1ODFhMzk1NmI0ZDRmYTU2OTc0NjM4N2Y2ZWI2YS5zZXRDb250ZW50KGh0bWxfMTE3MDQ1YTY0MGUyNDM3Njg3ODE3NjU2YjhmMGNhYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MWJjZjQ4N2ZiNTg0NjcxODc0ODNjMGRiY2M1YTZmZi5iaW5kUG9wdXAocG9wdXBfYTYwNTgxYTM5NTZiNGQ0ZmE1Njk3NDYzODdmNmViNmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGI1OGExMGRmN2E5NGIzMGI1OGRjOTI1Y2M4NTYxODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjY2MzIwNDU0NTI1LDI3Ljk4MTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliOGFjNWRiZTE4NjQxY2U5NzdlNDk2Y2U1NDljZmQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1ODgyM2UzOWUzOTRkMTFhMmY2ZDI1YThhMmRjZWM0ID0gJCgnPGRpdiBpZD0iaHRtbF8zNTg4MjNlMzllMzk0ZDExYTJmNmQyNWE4YTJkY2VjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFZT0dPLCBCQURKTyAoTkUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YjhhYzVkYmUxODY0MWNlOTc3ZTQ5NmNlNTQ5Y2ZkNC5zZXRDb250ZW50KGh0bWxfMzU4ODIzZTM5ZTM5NGQxMWEyZjZkMjVhOGEyZGNlYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YjU4YTEwZGY3YTk0YjMwYjU4ZGM5MjVjYzg1NjE4OC5iaW5kUG9wdXAocG9wdXBfOWI4YWM1ZGJlMTg2NDFjZTk3N2U0OTZjZTU0OWNmZDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWIxMmE1ZTBlYzE1NGQwMTk5MGQ1YTFjODVhZDI5MDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjE5NDQ2NTQzNjQ5LDI1LjI1MzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjMDgyMmUzNDViMzQyZWRiMzQ3MzkzYjNmNjdhMjNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkMzNjZjAyYzUzMjRlNWQ4MzVlNzU3ZDI5YWNmMDc0ID0gJCgnPGRpdiBpZD0iaHRtbF83ZDMzY2YwMmM1MzI0ZTVkODM1ZTc1N2QyOWFjZjA3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUJBRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWMwODIyZTM0NWIzNDJlZGIzNDczOTNiM2Y2N2EyM2Euc2V0Q29udGVudChodG1sXzdkMzNjZjAyYzUzMjRlNWQ4MzVlNzU3ZDI5YWNmMDc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWIxMmE1ZTBlYzE1NGQwMTk5MGQ1YTFjODVhZDI5MDQuYmluZFBvcHVwKHBvcHVwX2VjMDgyMmUzNDViMzQyZWRiMzQ3MzkzYjNmNjdhMjNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE0MDIwMzRhNWEyMjQ2ZGU5YzI2NmVkMjZhMzliMTY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMDgzNTYsMjIuMjQ4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzRjYzdjODBmNGQ0Nzg3YTJmYzNjYmQ2ZmNiZTVmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTExMmUzZWRmYmI0MTY0OTU3N2QzZDUyNWUwYmIzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzExMTJlM2VkZmJiNDE2NDk1NzdkM2Q1MjVlMGJiMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CQUdBTkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczNGNjN2M4MGY0ZDQ3ODdhMmZjM2NiZDZmY2JlNWZmLnNldENvbnRlbnQoaHRtbF9jMTExMmUzZWRmYmI0MTY0OTU3N2QzZDUyNWUwYmIzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE0MDIwMzRhNWEyMjQ2ZGU5YzI2NmVkMjZhMzliMTY2LmJpbmRQb3B1cChwb3B1cF83MzRjYzdjODBmNGQ0Nzg3YTJmYzNjYmQ2ZmNiZTVmZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZTU4OWUxMmJjZjk0NmExYmI4ZTM3ZTJkODM0ZGM0YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy00LjgyMDYxLDE4LjIxMzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhNTNmYTkzMzI0MTRkOTI4ZTg3OWZjZTgwZjI0MDVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1MmYzOTVkNmMwYTRkMjNhNmU2ODUzOGViMTcwMGU1ID0gJCgnPGRpdiBpZD0iaHRtbF85NTJmMzk1ZDZjMGE0ZDIzYTZlNjg1MzhlYjE3MDBlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUJBTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhNTNmYTkzMzI0MTRkOTI4ZTg3OWZjZTgwZjI0MDVlLnNldENvbnRlbnQoaHRtbF85NTJmMzk1ZDZjMGE0ZDIzYTZlNjg1MzhlYjE3MDBlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVlNTg5ZTEyYmNmOTQ2YTFiYjhlMzdlMmQ4MzRkYzRhLmJpbmRQb3B1cChwb3B1cF9mYTUzZmE5MzMyNDE0ZDkyOGU4NzlmY2U4MGYyNDA1ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85M2E5NDkwOWY4M2M0ZDg3YTdlMzdiMDJmNjlmYWVmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy05LjI5ODA0LDE4LjIyODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhN2IzMWFhODE0NjRiMDg5YWU5NDE5Nzk1YjgxYzViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0YzgxMmQ5NTg3NjRmMmViYWRhYTgwMDZkMDZkMTA3ID0gJCgnPGRpdiBpZD0iaHRtbF83NGM4MTJkOTU4NzY0ZjJlYmFkYWE4MDA2ZDA2ZDEwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUJBTkdBTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhN2IzMWFhODE0NjRiMDg5YWU5NDE5Nzk1YjgxYzViLnNldENvbnRlbnQoaHRtbF83NGM4MTJkOTU4NzY0ZjJlYmFkYWE4MDA2ZDA2ZDEwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkzYTk0OTA5ZjgzYzRkODdhN2UzN2IwMmY2OWZhZWY1LmJpbmRQb3B1cChwb3B1cF81YTdiMzFhYTgxNDY0YjA4OWFlOTQxOTc5NWI4MWM1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMzczODIzZjk5Yjg0ZTA0YWE0NTJkOTBiYzg2MTk1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuMTEwNzU1MTAzMDMsOC40NjQyNTY5MTI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzQ2MGJjOTYxODY0MjkxOGYyMjM2NGVlNjk0MjUzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMmRmNjA0OWJkYTE0MDMxOGU3MDFiMjk4Zjk3OTllMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDJkZjYwNDliZGExNDAzMThlNzAxYjI5OGY5Nzk5ZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CRU1CRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGM0NjBiYzk2MTg2NDI5MThmMjIzNjRlZTY5NDI1Mzcuc2V0Q29udGVudChodG1sXzAyZGY2MDQ5YmRhMTQwMzE4ZTcwMWIyOThmOTc5OWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjM3MzgyM2Y5OWI4NGUwNGFhNDUyZDkwYmM4NjE5NWIuYmluZFBvcHVwKHBvcHVwXzhjNDYwYmM5NjE4NjQyOTE4ZjIyMzY0ZWU2OTQyNTM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JiMGJhNDg1NTM5MzRmMTY5NzM5MGNhZjMyNzVmNjUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4xMTY0MDc2MTQwNSwxNS44NTk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYTk4OTdiNTZkZmM0NDZhOTI0ZjIyZjNmYTMxNTVlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTRhYjRlNTE5NDI0NTU5YTg5YmEwOWFjZjE5MDVlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmE0YWI0ZTUxOTQyNDU1OWE4OWJhMDlhY2YxOTA1ZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CRVJFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYTk4OTdiNTZkZmM0NDZhOTI0ZjIyZjNmYTMxNTVlNy5zZXRDb250ZW50KGh0bWxfZmE0YWI0ZTUxOTQyNDU1OWE4OWJhMDlhY2YxOTA1ZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iYjBiYTQ4NTUzOTM0ZjE2OTczOTBjYWYzMjc1ZjY1MC5iaW5kUG9wdXAocG9wdXBfY2E5ODk3YjU2ZGZjNDQ2YTkyNGYyMmYzZmEzMTU1ZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjA2NmZkOWYzMzgyNGVhMTkzN2U4MjFiMmNkYmVmN2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjU1Mzg5NzYxNDksMjIuOTY3Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2JjYzI5MjRlNDkxNDI3YzljZTAzNzA4ZWQ1MjJmYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTY4NTE3M2Y1ZmI5NDRmYWI2NGI4ZjFlZDE0MGVhMGYgPSAkKCc8ZGl2IGlkPSJodG1sX2E2ODUxNzNmNWZiOTQ0ZmFiNjRiOGYxZWQxNDBlYTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQkVTQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JjYzI5MjRlNDkxNDI3YzljZTAzNzA4ZWQ1MjJmYjkuc2V0Q29udGVudChodG1sX2E2ODUxNzNmNWZiOTQ0ZmFiNjRiOGYxZWQxNDBlYTBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjA2NmZkOWYzMzgyNGVhMTkzN2U4MjFiMmNkYmVmN2EuYmluZFBvcHVwKHBvcHVwXzNiY2MyOTI0ZTQ5MTQyN2M5Y2UwMzcwOGVkNTIyZmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JiNWNkOWQ0ZmUwZTRiOGJhYzBlZThjYWQyNWM2MzgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuNjQzNDMsMjEuMDA0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmZkMGI3MGQ5ZjczNDdhYWJmOWVlZWEzZjQ5MTdjMDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjMyMmM1M2YwNmU1NDY0MGI0M2VjZDVmOWRlMmJjZTggPSAkKCc8ZGl2IGlkPSJodG1sX2YzMjJjNTNmMDZlNTQ2NDBiNDNlY2Q1ZjlkZTJiY2U4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQk9MRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmZkMGI3MGQ5ZjczNDdhYWJmOWVlZWEzZjQ5MTdjMDYuc2V0Q29udGVudChodG1sX2YzMjJjNTNmMDZlNTQ2NDBiNDNlY2Q1ZjlkZTJiY2U4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmI1Y2Q5ZDRmZTBlNGI4YmFjMGVlOGNhZDI1YzYzODEuYmluZFBvcHVwKHBvcHVwXzZmZDBiNzBkOWY3MzQ3YWFiZjllZWVhM2Y0OTE3YzA2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JlZGIwNmY3MTUwOTQ1N2Q4NDgzMzE3OTc5Yjk3YmZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOS42MDQ4Njg3MjgzOSwxMi4zNjc2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTZiODhmZmNlZWQ0NjU4YTdjYzg2NDRkOGQzNmZiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NGE2YmJhZGM4MzE0N2ZiOTM4MGViMWRlZjc2YTVlNiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTRhNmJiYWRjODMxNDdmYjkzODBlYjFkZWY3NmE1ZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CVUJVTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1NmI4OGZmY2VlZDQ2NThhN2NjODY0NGQ4ZDM2ZmJhLnNldENvbnRlbnQoaHRtbF85NGE2YmJhZGM4MzE0N2ZiOTM4MGViMWRlZjc2YTVlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlZGIwNmY3MTUwOTQ1N2Q4NDgzMzE3OTc5Yjk3YmZhLmJpbmRQb3B1cChwb3B1cF8zNTZiODhmZmNlZWQ0NjU4YTdjYzg2NDRkOGQzNmZiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NDU1YjQ3MDllNzU0NDZlODdkNjMxY2Q5OGQ4MWFhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy00LjQ5OTksMzguMjg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU0ZDk4MjUyOWQ2NDA3NWI1MWRhODcyNTMzYzk4YTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThjM2QzOWJmNjc0NDJiZDgyMWM1MTk5MDBjYzU4Y2IgPSAkKCc8ZGl2IGlkPSJodG1sX2E4YzNkMzliZjY3NDQyYmQ4MjFjNTE5OTAwY2M1OGNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQlVHVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU0ZDk4MjUyOWQ2NDA3NWI1MWRhODcyNTMzYzk4YTIuc2V0Q29udGVudChodG1sX2E4YzNkMzliZjY3NDQyYmQ4MjFjNTE5OTAwY2M1OGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDQ1NWI0NzA5ZTc1NDQ2ZTg3ZDYzMWNkOThkODFhYWUuYmluZFBvcHVwKHBvcHVwXzg1NGQ5ODI1MjlkNjQwNzViNTFkYTg3MjUzM2M5OGEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQyYzdhMTYyYWExMTQ2YjFiNGI1ODFjOTUyMmJkMmUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuNzU1LDM1LjkwMzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1ZTBhNGM1N2NmODQzMTY5ZGYxMDdmYzQ4ODE3YTg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyN2VmYzIxYWYwYjQyZDM5ZWE4MjQwMjgxNjgyZDQ4ID0gJCgnPGRpdiBpZD0iaHRtbF82MjdlZmMyMWFmMGI0MmQzOWVhODI0MDI4MTY4MmQ0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUJVR1dFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNWUwYTRjNTdjZjg0MzE2OWRmMTA3ZmM0ODgxN2E4NS5zZXRDb250ZW50KGh0bWxfNjI3ZWZjMjFhZjBiNDJkMzllYTgyNDAyODE2ODJkNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MmM3YTE2MmFhMTE0NmIxYjRiNTgxYzk1MjJiZDJlMy5iaW5kUG9wdXAocG9wdXBfMjVlMGE0YzU3Y2Y4NDMxNjlkZjEwN2ZjNDg4MTdhODUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjM1ODg5NDZlYTMxNDk2ZDg4NjgxNDQwZjc5NzRmMWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMzEyOSwyMS4yNzgzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWJjYzM0Yjc4NjU0OGUzODE0MDhmYmE2MWYyZWFkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84Njk3ZjM1MjY1MjE0NjI3Yjc3ZTE5ZmJlMDJiMjY1NSA9ICQoJzxkaXYgaWQ9Imh0bWxfODY5N2YzNTI2NTIxNDYyN2I3N2UxOWZiZTAyYjI2NTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CVUtVU0hVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZWJjYzM0Yjc4NjU0OGUzODE0MDhmYmE2MWYyZWFkMS5zZXRDb250ZW50KGh0bWxfODY5N2YzNTI2NTIxNDYyN2I3N2UxOWZiZTAyYjI2NTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMzU4ODk0NmVhMzE0OTZkODg2ODE0NDBmNzk3NGYxYi5iaW5kUG9wdXAocG9wdXBfM2ViY2MzNGI3ODY1NDhlMzgxNDA4ZmJhNjFmMmVhZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmFkOWQzMjBjN2I4NDBlMWEzYjIyYmJjNTllMDhjMjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjQ1ODE4OTc3NDUyLDEzLjY3MzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhNmMzOTBmZDU2YzRiMTk5OWVlYWFhODY2NTg3NGNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljNzEyM2MwYTRkZjRiZGZiOTRjMWU3MDIyZDVmYjdhID0gJCgnPGRpdiBpZD0iaHRtbF85YzcxMjNjMGE0ZGY0YmRmYjk0YzFlNzAyMmQ1ZmI3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUJVTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmE2YzM5MGZkNTZjNGIxOTk5ZWVhYWE4NjY1ODc0Y2Uuc2V0Q29udGVudChodG1sXzljNzEyM2MwYTRkZjRiZGZiOTRjMWU3MDIyZDVmYjdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmFkOWQzMjBjN2I4NDBlMWEzYjIyYmJjNTllMDhjMjYuYmluZFBvcHVwKHBvcHVwX2JhNmMzOTBmZDU2YzRiMTk5OWVlYWFhODY2NTg3NGNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUwZmRhMTMwMjY1MzQ1MjlhNDU1MWMxYjdkY2QwYjM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjQzMDgsMjEuMTA3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZDMzZWM2NjE0YWM0Y2NkOWMxMzlhYzEwODg3N2FkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGM1ODY3ZWFjNGE0OWM4ODc2N2JjNWE1MGMwOGE0ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzRjNTg2N2VhYzRhNDljODg3NjdiYzVhNTBjMDhhNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CVU5EQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQzM2VjNjYxNGFjNGNjZDljMTM5YWMxMDg4NzdhZDguc2V0Q29udGVudChodG1sXzc0YzU4NjdlYWM0YTQ5Yzg4NzY3YmM1YTUwYzA4YTRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTBmZGExMzAyNjUzNDUyOWE0NTUxYzFiN2RjZDBiMzUuYmluZFBvcHVwKHBvcHVwX2FkMzNlYzY2MTRhYzRjY2Q5YzEzOWFjMTA4ODc3YWQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZjYzUzNDRkNzAzODQzNGI5ODFkOGRiNDQ5MzQzMTg4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjQxNzgsMTUuNzkyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhjNTg4NDVkODNjNDQ1Njk0ZmJmMmIzNzRkZDI0MGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGYzYzY0ZWUwODk0NDEwMDlkNzllYjk3MjJkYTM2MzIgPSAkKCc8ZGl2IGlkPSJodG1sXzhmM2M2NGVlMDg5NDQxMDA5ZDc5ZWI5NzIyZGEzNjMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQlVORFU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4YzU4ODQ1ZDgzYzQ0NTY5NGZiZjJiMzc0ZGQyNDBiLnNldENvbnRlbnQoaHRtbF84ZjNjNjRlZTA4OTQ0MTAwOWQ3OWViOTcyMmRhMzYzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZjYzUzNDRkNzAzODQzNGI5ODFkOGRiNDQ5MzQzMTg4LmJpbmRQb3B1cChwb3B1cF9iOGM1ODg0NWQ4M2M0NDU2OTRmYmYyYjM3NGRkMjQwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yY2EzMTk5MjE2ZmU0YTk1ODU5ZGQ1MDI0ZmZiOTljYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy04LjEwNzg3LDM2Ljk4NDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5NzQwZmZlNjNmNDRhYmY5OTJmOTZmNzgyODYwZDNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhNWMwNzhhMDAyMjQ4OTliOTVmY2ZiNzc0M2Y1ZTIwID0gJCgnPGRpdiBpZD0iaHRtbF83YTVjMDc4YTAwMjI0ODk5Yjk1ZmNmYjc3NDNmNWUyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUJVTkdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTc0MGZmZTYzZjQ0YWJmOTkyZjk2Zjc4Mjg2MGQzZS5zZXRDb250ZW50KGh0bWxfN2E1YzA3OGEwMDIyNDg5OWI5NWZjZmI3NzQzZjVlMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yY2EzMTk5MjE2ZmU0YTk1ODU5ZGQ1MDI0ZmZiOTljYS5iaW5kUG9wdXAocG9wdXBfNzk3NDBmZmU2M2Y0NGFiZjk5MmY5NmY3ODI4NjBkM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjk2ZWE2ZmIyODc1NDVlYTg2NmE4NmYzOTRiNTg1OTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuMzAxMSwxOS4xODU0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzIzMWQwYjM3N2M0MmI5YmZiOGQ5MWE0ZmNiMTUyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNjlmZWRiM2JmNjk0ZWQxYTc2ODc4MzVhZmQwOWIwNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjY5ZmVkYjNiZjY5NGVkMWE3Njg3ODM1YWZkMDliMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1CV0VMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzMyMzFkMGIzNzdjNDJiOWJmYjhkOTFhNGZjYjE1MmMuc2V0Q29udGVudChodG1sXzI2OWZlZGIzYmY2OTRlZDFhNzY4NzgzNWFmZDA5YjA1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjk2ZWE2ZmIyODc1NDVlYTg2NmE4NmYzOTRiNTg1OTUuYmluZFBvcHVwKHBvcHVwXzczMjMxZDBiMzc3YzQyYjliZmI4ZDkxYTRmY2IxNTJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FjMTQzMjIxMzczMzQzZGI4NDZhYzA0ZWEyYTg5MGIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuMjkyMiwzMy41NThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyMTNhODNmYzBlNjRmNDU5ZTIwZTg3NGIwNTllZjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlZjZiZjcxN2ZkNTQwMDliOTc0ZmYwNjk5OTE1NDE2ID0gJCgnPGRpdiBpZD0iaHRtbF9iZWY2YmY3MTdmZDU0MDA5Yjk3NGZmMDY5OTkxNTQxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUVCQU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyMTNhODNmYzBlNjRmNDU5ZTIwZTg3NGIwNTllZjVhLnNldENvbnRlbnQoaHRtbF9iZWY2YmY3MTdmZDU0MDA5Yjk3NGZmMDY5OTkxNTQxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FjMTQzMjIxMzczMzQzZGI4NDZhYzA0ZWEyYTg5MGIyLmJpbmRQb3B1cChwb3B1cF9lMjEzYTgzZmMwZTY0ZjQ1OWUyMGU4NzRiMDU5ZWY1YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NmM0ZDY2YTYwMGM0ZDgzOWJiZDQyMDIyZDNkOWYwNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuNjMxMjkxMzM0MTYsMjcuMjgxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTE5MmQ2ZTg5N2IwNDA3ZDg1OWNiNGE4MDhhODVkODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NkNWFjZDM4YjQ1NDVhNDliMWZiOTI4NWZlOGIxNmIgPSAkKCc8ZGl2IGlkPSJodG1sXzNjZDVhY2QzOGI0NTQ1YTQ5YjFmYjkyODVmZThiMTZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NRURKSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE5MmQ2ZTg5N2IwNDA3ZDg1OWNiNGE4MDhhODVkODIuc2V0Q29udGVudChodG1sXzNjZDVhY2QzOGI0NTQ1YTQ5YjFmYjkyODVmZThiMTZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTZjNGQ2NmE2MDBjNGQ4MzliYmQ0MjAyMmQzZDlmMDQuYmluZFBvcHVwKHBvcHVwX2UxOTJkNmU4OTdiMDQwN2Q4NTljYjRhODA4YTg1ZDgyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAyZTE5ZGY3MzJjZTRhMGZhNzFlNDY4NjM5YWExMzY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS40NDIzMDg0NzI3NiwtMy4xMTMxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDcwMzQwNmRkM2NjNDMyYzk2MmVmOTZiYmY2YjE5NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzlmZjYyYzkzOTljNDQ1MWIyZTA5NDY5OTFkNDdjYjAgPSAkKCc8ZGl2IGlkPSJodG1sX2M5ZmY2MmM5Mzk5YzQ0NTFiMmUwOTQ2OTkxZDQ3Y2IwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NRUtZSUJPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzAzNDA2ZGQzY2M0MzJjOTYyZWY5NmJiZjZiMTk2NC5zZXRDb250ZW50KGh0bWxfYzlmZjYyYzkzOTljNDQ1MWIyZTA5NDY5OTFkNDdjYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMmUxOWRmNzMyY2U0YTBmYTcxZTQ2ODYzOWFhMTM2Ni5iaW5kUG9wdXAocG9wdXBfNDcwMzQwNmRkM2NjNDMyYzk2MmVmOTZiYmY2YjE5NjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWZiNGYyMWE3OTg4NGI4YThkZTFiY2VlYjJmMDljOWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi40NDc0LDIuMDgyMDIwMjE0NzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmODY3ZWRjY2JkNTQwNDViMjQ3ZTM3OTRlYmZiZDljID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5ZGZkOGY5NTQ1OTQ5MjU4NTU0MTc1NmEwZDQxMDgwID0gJCgnPGRpdiBpZD0iaHRtbF85OWRmZDhmOTU0NTk0OTI1ODU1NDE3NTZhMGQ0MTA4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUVOQVNTRVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmODY3ZWRjY2JkNTQwNDViMjQ3ZTM3OTRlYmZiZDljLnNldENvbnRlbnQoaHRtbF85OWRmZDhmOTU0NTk0OTI1ODU1NDE3NTZhMGQ0MTA4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlmYjRmMjFhNzk4ODRiOGE4ZGUxYmNlZWIyZjA5YzlhLmJpbmRQb3B1cChwb3B1cF8yZjg2N2VkY2NiZDU0MDQ1YjI0N2UzNzk0ZWJmYmQ5Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hY2NiZmZmZjg3MTQ0MTk1ODlmYzI2YmRhMTc2ODQ3YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuOTUxMzA1MzQzNjIsLTExLjE4MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzOTc2N2VkYzljNzRhOTc4OTNkMGFiZTEwYjA4NDExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliNjJjNWU3MDk2MzRjZmZiNmM3MzM3ZTE1ZWIwYWE1ID0gJCgnPGRpdiBpZD0iaHRtbF85YjYyYzVlNzA5NjM0Y2ZmYjZjNzMzN2UxNWViMGFhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUVOREU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzOTc2N2VkYzljNzRhOTc4OTNkMGFiZTEwYjA4NDExLnNldENvbnRlbnQoaHRtbF85YjYyYzVlNzA5NjM0Y2ZmYjZjNzMzN2UxNWViMGFhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FjY2JmZmZmODcxNDQxOTU4OWZjMjZiZGExNzY4NDdiLmJpbmRQb3B1cChwb3B1cF84Mzk3NjdlZGM5Yzc0YTk3ODkzZDBhYmUxMGIwODQxMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZWVkZTMyODNjNmE0MjkxYmFmZDMzOTMxYzc4MTBjNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjQyMDksMjEuNTQzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmNkZGRiMjM4NWI1NDgyYzg5OWYxNWIzZGYzYTU2NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVhZjUxNDUwOGIyNDFkZmExODI1MmEzNDIxMmRhZjggPSAkKCc8ZGl2IGlkPSJodG1sXzc1YWY1MTQ1MDhiMjQxZGZhMTgyNTJhMzQyMTJkYWY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NRVJBUklUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2RkZGIyMzg1YjU0ODJjODk5ZjE1YjNkZjNhNTY0YS5zZXRDb250ZW50KGh0bWxfNzVhZjUxNDUwOGIyNDFkZmExODI1MmEzNDIxMmRhZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZWVkZTMyODNjNmE0MjkxYmFmZDMzOTMxYzc4MTBjNy5iaW5kUG9wdXAocG9wdXBfZmNkZGRiMjM4NWI1NDgyYzg5OWYxNWIzZGYzYTU2NGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWJlMmQ2OTk1OTIzNGFhNmE4YWU4NDM4OGFiNjk5ZmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTguMzI4Miw0Ni45NzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyOTY0OGI2ZGQ3MDQ5YWNhNzZlYTEyZjAzNmE4OTc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViZWM0OWNhNDYwOTQyY2U4MzgwMWYwZWNmZGExMjE3ID0gJCgnPGRpdiBpZD0iaHRtbF9lYmVjNDljYTQ2MDk0MmNlODM4MDFmMGVjZmRhMTIxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUVSSU5BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjk2NDhiNmRkNzA0OWFjYTc2ZWExMmYwMzZhODk3NS5zZXRDb250ZW50KGh0bWxfZWJlYzQ5Y2E0NjA5NDJjZTgzODAxZjBlY2ZkYTEyMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYmUyZDY5OTU5MjM0YWE2YThhZTg0Mzg4YWI2OTlmZC5iaW5kUG9wdXAocG9wdXBfYzI5NjQ4YjZkZDcwNDlhY2E3NmVhMTJmMDM2YTg5NzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTY2ZDI0NjIwNmFkNDBkMDkwNzc2OGNmN2I2NzNlYTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFswLjAxNjY2MTAwNDI4LDM4LjEwNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkYzRmODkxMjQzNjQzZjJiNzkyM2UwNTUxZWM5MzFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZjhkY2U2MmNiMjRkZjNiOTM3MmU1OTY3OGJmZTNiID0gJCgnPGRpdiBpZD0iaHRtbF9kY2Y4ZGNlNjJjYjI0ZGYzYjkzNzJlNTk2NzhiZmUzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUVSVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmRjNGY4OTEyNDM2NDNmMmI3OTIzZTA1NTFlYzkzMWMuc2V0Q29udGVudChodG1sX2RjZjhkY2U2MmNiMjRkZjNiOTM3MmU1OTY3OGJmZTNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTY2ZDI0NjIwNmFkNDBkMDkwNzc2OGNmN2I2NzNlYTAuYmluZFBvcHVwKHBvcHVwX2ZkYzRmODkxMjQzNjQzZjJiNzkyM2UwNTUxZWM5MzFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E2NmUxYmY4Y2FlNDRjMTJiMTRkZTFkNWYyN2I0MWNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMDg2NiwyOC4zNDIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNWRiZGNmZDVjYjU0MmM3YWU3NTA2MjEwYWMwNTkzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDVmNWI1M2FiMmI0Nzc3OGI2NTE2MzY3OTIwNWFhZiA9ICQoJzxkaXYgaWQ9Imh0bWxfODQ1ZjViNTNhYjJiNDc3NzhiNjUxNjM2NzkyMDVhYWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1FU1NJUklBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNWRiZGNmZDVjYjU0MmM3YWU3NTA2MjEwYWMwNTkzMi5zZXRDb250ZW50KGh0bWxfODQ1ZjViNTNhYjJiNDc3NzhiNjUxNjM2NzkyMDVhYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNjZlMWJmOGNhZTQ0YzEyYjE0ZGUxZDVmMjdiNDFjZC5iaW5kUG9wdXAocG9wdXBfMzVkYmRjZmQ1Y2I1NDJjN2FlNzUwNjIxMGFjMDU5MzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjdmZWU1NWU3YWNlNGE0MGE2M2ZiZDRkNWFjZDgyZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4zNzY4LDI2LjYyNDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3Y2VmYWJkZGVkZDQ0YTc4MWFkMGM4NjYwZjVhNjFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjNTAzZDE2MmI5ZjQ5ZDg4NTY5MDczNWFhY2JiYzA2ID0gJCgnPGRpdiBpZD0iaHRtbF8wYzUwM2QxNjJiOWY0OWQ4ODU2OTA3MzVhYWNiYmMwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlET0JJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2NlZmFiZGRlZGQ0NGE3ODFhZDBjODY2MGY1YTYxYS5zZXRDb250ZW50KGh0bWxfMGM1MDNkMTYyYjlmNDlkODg1NjkwNzM1YWFjYmJjMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yN2ZlZTU1ZTdhY2U0YTQwYTYzZmJkNGQ1YWNkODJmMy5iaW5kUG9wdXAocG9wdXBfZjdjZWZhYmRkZWRkNDRhNzgxYWQwYzg2NjBmNWE2MWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjRkN2EwOTdmMGUzNGE1NWEwNDM1MWU5NDgzNzU2NWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjAxODE4Mjk2MjM0LDQ4Ljc3NDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhYmJlNDAyZWIxNDRkOWI5MjE0ZjQ4ZGJkYTkwY2VhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2ZGE2MzY4YTkyYjQ1MTRiNmM0MThkMmU3ZGE2ZGM5ID0gJCgnPGRpdiBpZD0iaHRtbF83NmRhNjM2OGE5MmI0NTE0YjZjNDE4ZDJlN2RhNmRjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlKRVJURUlOPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYWJiZTQwMmViMTQ0ZDliOTIxNGY0OGRiZGE5MGNlYS5zZXRDb250ZW50KGh0bWxfNzZkYTYzNjhhOTJiNDUxNGI2YzQxOGQyZTdkYTZkYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNGQ3YTA5N2YwZTM0YTU1YTA0MzUxZTk0ODM3NTY1ZS5iaW5kUG9wdXAocG9wdXBfYmFiYmU0MDJlYjE0NGQ5YjkyMTRmNDhkYmRhOTBjZWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWQwZmNjNTM4MDhjNGJlNjkyNmZmZmI0MDc1OTllMDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC43ODcsMjAuMjc4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYThhODdkYzVkNDljNGIzMWEyNjc1OWY1ZTdlYzYzNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2E5NGEyZDIzNjAzNDkxNGFiZTA5YWE5MDZhMDFkNTggPSAkKCc8ZGl2IGlkPSJodG1sXzNhOTRhMmQyMzYwMzQ5MTRhYmUwOWFhOTA2YTAxZDU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSU1JPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOGE4N2RjNWQ0OWM0YjMxYTI2NzU5ZjVlN2VjNjM0NC5zZXRDb250ZW50KGh0bWxfM2E5NGEyZDIzNjAzNDkxNGFiZTA5YWE5MDZhMDFkNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZDBmY2M1MzgwOGM0YmU2OTI2ZmZmYjQwNzU5OWUwNS5iaW5kUG9wdXAocG9wdXBfYThhODdkYzVkNDljNGIzMWEyNjc1OWY1ZTdlYzYzNDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjg4NTVjZjVmYjk4NDA3ZWI4MGIxMmE4YjlhNmZkMjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43NTg1LC01LjI5OTI2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDc2ODlkNzc1MTU0OWUyYjUxNGRhOGFkYTBhNTc1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NDBjOGQ1ZjVkNzk0ZWQwOGRkYmFhMTc3NDhmNTYxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzQwYzhkNWY1ZDc5NGVkMDhkZGJhYTE3NzQ4ZjU2MTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTklBTktBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMDc2ODlkNzc1MTU0OWUyYjUxNGRhOGFkYTBhNTc1Yy5zZXRDb250ZW50KGh0bWxfNzQwYzhkNWY1ZDc5NGVkMDhkZGJhYTE3NzQ4ZjU2MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ODg1NWNmNWZiOTg0MDdlYjgwYjEyYThiOWE2ZmQyNy5iaW5kUG9wdXAocG9wdXBfMjA3Njg5ZDc3NTE1NDllMmI1MTRkYThhZGEwYTU3NWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWI3ZmUxNzU4ZWJmNDc4NDhjNjZkYjllYWE4YzQxNjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjgwODcwMDE3NDEyLDI5LjczODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzN2I0M2Q4OTNkMzQ4ODA5ZmRhNjE3NjFkYTUwNmRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1MmI2NmEzYmE1MDQ1NzFiMDY1MDA0MTViMDM2ZWRlID0gJCgnPGRpdiBpZD0iaHRtbF8xNTJiNjZhM2JhNTA0NTcxYjA2NTAwNDE1YjAzNmVkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlUVFU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzN2I0M2Q4OTNkMzQ4ODA5ZmRhNjE3NjFkYTUwNmRiLnNldENvbnRlbnQoaHRtbF8xNTJiNjZhM2JhNTA0NTcxYjA2NTAwNDE1YjAzNmVkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzliN2ZlMTc1OGViZjQ3ODQ4YzY2ZGI5ZWFhOGM0MTYyLmJpbmRQb3B1cChwb3B1cF84MzdiNDNkODkzZDM0ODgwOWZkYTYxNzYxZGE1MDZkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NzYwZGM1YTU2M2Y0YzM0OGIxOTcwNjE3OGNlOTRlYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjIxMjM2LDI1LjEwMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5NzAxYjU5ZTgyNTRhMzhiYThlNWQyNDk2Zjk1MDg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzOGI3OTNjNTUzYzRlZDZhYzVlMDAzZDZkOGJlMDY3ID0gJCgnPGRpdiBpZD0iaHRtbF9iMzhiNzkzYzU1M2M0ZWQ2YWM1ZTAwM2Q2ZDhiZTA2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlUVUtVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTcwMWI1OWU4MjU0YTM4YmE4ZTVkMjQ5NmY5NTA4OS5zZXRDb250ZW50KGh0bWxfYjM4Yjc5M2M1NTNjNGVkNmFjNWUwMDNkNmQ4YmUwNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NzYwZGM1YTU2M2Y0YzM0OGIxOTcwNjE3OGNlOTRlYi5iaW5kUG9wdXAocG9wdXBfZDk3MDFiNTllODI1NGEzOGJhOGU1ZDI0OTZmOTUwODkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2M3MGY2Nzc5YWNlNDNlMmFjYTYzYWJiYWE3ZDc0MWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC42NjEyLDAuNDY5NTc4MTk2NjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1YWIwYThlNzUwZDQxOTJiNmE1MjMzYTUzMWJhNjM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5YTM1ODEzY2FkZjRkM2Y5MDMxZWJlZmY3NjgzMDViID0gJCgnPGRpdiBpZD0iaHRtbF8xOWEzNTgxM2NhZGY0ZDNmOTAzMWViZWZmNzY4MzA1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TU9CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjVhYjBhOGU3NTBkNDE5MmI2YTUyMzNhNTMxYmE2Mzkuc2V0Q29udGVudChodG1sXzE5YTM1ODEzY2FkZjRkM2Y5MDMxZWJlZmY3NjgzMDViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2M3MGY2Nzc5YWNlNDNlMmFjYTYzYWJiYWE3ZDc0MWYuYmluZFBvcHVwKHBvcHVwXzI1YWIwYThlNzUwZDQxOTJiNmE1MjMzYTUzMWJhNjM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3NGFjNzgyNDU0MjQ2YmM4Mjc3MDcxNmM4MmUyYjY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuNDMyLDEyLjU1MDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyZTM4MTIwMmU5MjQyZjZiMmRkYWNiMGQ3MGUzZDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0NGFhN2JmNzVmMDRkMDk5ZjVhMTlmMTY5ZjVmNGI2ID0gJCgnPGRpdiBpZD0iaHRtbF8zNDRhYTdiZjc1ZjA0ZDA5OWY1YTE5ZjE2OWY1ZjRiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TU9CRVI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyZTM4MTIwMmU5MjQyZjZiMmRkYWNiMGQ3MGUzZDdmLnNldENvbnRlbnQoaHRtbF8zNDRhYTdiZjc1ZjA0ZDA5OWY1YTE5ZjE2OWY1ZjRiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3NGFjNzgyNDU0MjQ2YmM4Mjc3MDcxNmM4MmUyYjY1LmJpbmRQb3B1cChwb3B1cF9hMmUzODEyMDJlOTI0MmY2YjJkZGFjYjBkNzBlM2Q3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YjZmY2Q5NDA4N2I0ZjRiODNmNjQzZDE4NWJiZTBlYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS45ODg1LDMzLjQ3MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5YjhmM2ZhYWE0OTRmODRhYTE2NjE2MmM1NzU1M2IxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0MWJiODljYTc5OTQwZjM5NWU4Zjk5Nzg0MDhmMTgzID0gJCgnPGRpdiBpZD0iaHRtbF85NDFiYjg5Y2E3OTk0MGYzOTVlOGY5OTc4NDA4ZjE4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TU9NQkVSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjliOGYzZmFhYTQ5NGY4NGFhMTY2MTYyYzU3NTUzYjEuc2V0Q29udGVudChodG1sXzk0MWJiODljYTc5OTQwZjM5NWU4Zjk5Nzg0MDhmMTgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGI2ZmNkOTQwODdiNGY0YjgzZjY0M2QxODViYmUwZWEuYmluZFBvcHVwKHBvcHVwXzY5YjhmM2ZhYWE0OTRmODRhYTE2NjE2MmM1NzU1M2IxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiYjY2OGEyNGIyNDRlNTFhNTMzZWFlMGU2MmQyM2YwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS44NTU2NDc3NjMwNywzMS4zOTM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzlhNGY0YzEyYzk0N2VlOGJiNDQxNzA5YzhmZmM1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjMzMWJjMjQ3MmY0NDRjOGY5ZjU1Y2VhOGY5OGEzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2IzMzFiYzI0NzJmNDQ0YzhmOWY1NWNlYThmOThhMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1PTkRBUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3OWE0ZjRjMTJjOTQ3ZWU4YmI0NDE3MDljOGZmYzU3LnNldENvbnRlbnQoaHRtbF83YjMzMWJjMjQ3MmY0NDRjOGY5ZjU1Y2VhOGY5OGEzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFiYjY2OGEyNGIyNDRlNTFhNTMzZWFlMGU2MmQyM2YwLmJpbmRQb3B1cChwb3B1cF80NzlhNGY0YzEyYzk0N2VlOGJiNDQxNzA5YzhmZmM1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYWZmODg3NzE5MmM0NDczYjEyZjAyYTEwOTUzMWQ4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzAuOTQwMDg0NTI2MzIsMjEuMDg3Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzI3YTBmMjBkMTQ1NGFkYzllMzY5M2M5ODRjNDVmZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWRjY2QyYzU0MjlmNGQ4NWI3MDlmMDQ4N2U1Y2UyOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzVkY2NkMmM1NDI5ZjRkODViNzA5ZjA0ODdlNWNlMjljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NT05HTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzI3YTBmMjBkMTQ1NGFkYzllMzY5M2M5ODRjNDVmZTIuc2V0Q29udGVudChodG1sXzVkY2NkMmM1NDI5ZjRkODViNzA5ZjA0ODdlNWNlMjljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmFmZjg4NzcxOTJjNDQ3M2IxMmYwMmExMDk1MzFkODEuYmluZFBvcHVwKHBvcHVwX2MyN2EwZjIwZDE0NTRhZGM5ZTM2OTNjOTg0YzQ1ZmUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM0NWJjOWE1OWU1NDRmNDM4YzBiYTM2M2QyNTIxYzU5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuNzQ1LC03LjU3ODgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTllZWE2ZjFmMDk0MjFmYTMxYmQ2ZDk0NTM3NDYzNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTcyMzBkN2IzODI0NGY1YjM4YmVhYjgyNWJmNmMxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2E3MjMwZDdiMzgyNDRmNWIzOGJlYWI4MjViZjZjMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1PUk9DQ0FOUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE5ZWVhNmYxZjA5NDIxZmEzMWJkNmQ5NDUzNzQ2MzYuc2V0Q29udGVudChodG1sXzNhNzIzMGQ3YjM4MjQ0ZjViMzhiZWFiODI1YmY2YzE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzQ1YmM5YTU5ZTU0NGY0MzhjMGJhMzYzZDI1MjFjNTkuYmluZFBvcHVwKHBvcHVwXzkxOWVlYTZmMWYwOTQyMWZhMzFiZDZkOTQ1Mzc0NjM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhlYWMyNWEwNzU1OTRjMzU5ZmMzNDkxMzU4ODNjYzA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yNTMyNjMwOTM0OSwzMC40MTAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzU5YTEyMjY3ZGU0YmYxYjMzMmFmMmViZGMyNDA1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZWZjY2Q3ZDBiZGQ0N2YzYTczYTNkZjFjNzdkYzE5NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWVmY2NkN2QwYmRkNDdmM2E3M2EzZGYxYzc3ZGMxOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1PUlU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzNTlhMTIyNjdkZTRiZjFiMzMyYWYyZWJkYzI0MDU4LnNldENvbnRlbnQoaHRtbF9hZWZjY2Q3ZDBiZGQ0N2YzYTczYTNkZjFjNzdkYzE5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhlYWMyNWEwNzU1OTRjMzU5ZmMzNDkxMzU4ODNjYzA1LmJpbmRQb3B1cChwb3B1cF9lMzU5YTEyMjY3ZGU0YmYxYjMzMmFmMmViZGMyNDA1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hOGZlZmI5N2EwZDY0YjJlOWVmMjk2YjM0NzZhMjI0MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjcyNjUsLTEuMTcwNDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0NDdmYzEyN2NkMTRkMWNiMWI0MmVmNWI5OWY1YTM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkMDE0YTRlOGQxODQ4NjA5MWZjMjkyNDRjYTY5NGEzID0gJCgnPGRpdiBpZD0iaHRtbF84ZDAxNGE0ZThkMTg0ODYwOTFmYzI5MjQ0Y2E2OTRhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TU9TU0k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0NDdmYzEyN2NkMTRkMWNiMWI0MmVmNWI5OWY1YTM2LnNldENvbnRlbnQoaHRtbF84ZDAxNGE0ZThkMTg0ODYwOTFmYzI5MjQ0Y2E2OTRhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E4ZmVmYjk3YTBkNjRiMmU5ZWYyOTZiMzQ3NmEyMjQyLmJpbmRQb3B1cChwb3B1cF9kNDQ3ZmMxMjdjZDE0ZDFjYjFiNDJlZjViOTlmNWEzNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Y2YyMDM4MGQxYzM0ZTFjODUwNTdkNWRhMTg4Yjk3MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy41NjI0LDMyLjM4NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5ODRkMDQyYjJjZTRjOWE4ZDBlNjNlM2Q3YjQyZGU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkMzRiMDQ1NWM4NzQxMjE4NjI5OTA4NTQyYTRhYThjID0gJCgnPGRpdiBpZD0iaHRtbF81ZDM0YjA0NTVjODc0MTIxODYyOTkwODU0MmE0YWE4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TVBFWkVOSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk4NGQwNDJiMmNlNGM5YThkMGU2M2UzZDdiNDJkZTcuc2V0Q29udGVudChodG1sXzVkMzRiMDQ1NWM4NzQxMjE4NjI5OTA4NTQyYTRhYThjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmNmMjAzODBkMWMzNGUxYzg1MDU3ZDVkYTE4OGI5NzAuYmluZFBvcHVwKHBvcHVwX2Y5ODRkMDQyYjJjZTRjOWE4ZDBlNjNlM2Q3YjQyZGU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgzMzMxOTIwYzExYzQzZjJiMGJhYWQ2MDMwMWVlNjAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTAuOTg2ODg1LDkuNjI1NTgzNzcwODddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3YTNmYThiNmU2ZDRhMzg4MDc0M2I3YWVjZGZhODcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjZGE5N2U0M2NmMjRmMTViYzQyODIyYmY4NGViYmU4ID0gJCgnPGRpdiBpZD0iaHRtbF83Y2RhOTdlNDNjZjI0ZjE1YmM0MjgyMmJmODRlYmJlOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TVBPTkdXRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdhM2ZhOGI2ZTZkNGEzODgwNzQzYjdhZWNkZmE4NzEuc2V0Q29udGVudChodG1sXzdjZGE5N2U0M2NmMjRmMTViYzQyODIyYmY4NGViYmU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODMzMzE5MjBjMTFjNDNmMmIwYmFhZDYwMzAxZWU2MDIuYmluZFBvcHVwKHBvcHVwX2Q3YTNmYThiNmU2ZDRhMzg4MDc0M2I3YWVjZGZhODcxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y1MWFkN2E1OGRjMTRkZjM5NDRhMTVjN2VmNzYyY2RmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNTE5OSwxOS42NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZWM2ZTY1Zjc3YTE0ODM1ODRhNThiOTdkOWE0MmFhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmJlOTkyY2NhYWM0MDQzYjQ3NmUzNDE4ZmY4NDRmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDZiZTk5MmNjYWFjNDA0M2I0NzZlMzQxOGZmODQ0ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1VQkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlYzZlNjVmNzdhMTQ4MzU4NGE1OGI5N2Q5YTQyYWFiLnNldENvbnRlbnQoaHRtbF80NmJlOTkyY2NhYWM0MDQzYjQ3NmUzNDE4ZmY4NDRmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y1MWFkN2E1OGRjMTRkZjM5NDRhMTVjN2VmNzYyY2RmLmJpbmRQb3B1cChwb3B1cF9mZWM2ZTY1Zjc3YTE0ODM1ODRhNThiOTdkOWE0MmFhYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTc1MWI3MDA2MzY0ODQ3ODE0NjViZjQwNGVkMjAxNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUuNjc0Mjk4NjI4NDcsMTEuMDU0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjA0YTdkNDkwZWYyNGI3OWJjMDIxYjBmYTE3MjViNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM5NjA2NjA3YWRkNDE4OWE2YTgxZjI5NzkzMjlhMTcgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjOTYwNjYwN2FkZDQxODlhNmE4MWYyOTc5MzI5YTE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NVU08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwNGE3ZDQ5MGVmMjRiNzliYzAyMWIwZmExNzI1YjYxLnNldENvbnRlbnQoaHRtbF9mYzk2MDY2MDdhZGQ0MTg5YTZhODFmMjk3OTMyOWExNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZlNzUxYjcwMDYzNjQ4NDc4MTQ2NWJmNDA0ZWQyMDE0LmJpbmRQb3B1cChwb3B1cF8yMDRhN2Q0OTBlZjI0Yjc5YmMwMjFiMGZhMTcyNWI2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYzBjMjJkODIxYmE0MjIxOWEwMTA2NDZmYTNlM2Y3OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMDEzMTQ1Mjk2NjIsMTEuODE4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdkMzg3ODU2MmMyNGJlYmIzMTUxZmEwODdiMjcxMDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZlNmI4YWU3NDVjNDNmNDg0YThiYTUwNTE3NzhhMzAgPSAkKCc8ZGl2IGlkPSJodG1sXzE2ZTZiOGFlNzQ1YzQzZjQ4NGE4YmE1MDUxNzc4YTMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NVU1VWUU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3ZDM4Nzg1NjJjMjRiZWJiMzE1MWZhMDg3YjI3MTA2LnNldENvbnRlbnQoaHRtbF8xNmU2YjhhZTc0NWM0M2Y0ODRhOGJhNTA1MTc3OGEzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNjMGMyMmQ4MjFiYTQyMjE5YTAxMDY0NmZhM2UzZjc5LmJpbmRQb3B1cChwb3B1cF9jN2QzODc4NTYyYzI0YmViYjMxNTFmYTA4N2IyNzEwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lODMyMWVkYWQ2N2E0MDQzYTVlMjkxNTMxZmZjOTMzNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuNjg4NTUxODYwOTUsMTQuNjc2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNmFhYzU4ZjhkMzk0MjIyODFkYWJiNjlhZmM1ZjlkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZjk0Y2ViOTdiYTk0OWU2ODhkNGUzNDY5OGFmYjcyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWY5NGNlYjk3YmE5NDllNjg4ZDRlMzQ2OThhZmI3MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1VTkRBTkc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2YWFjNThmOGQzOTQyMjI4MWRhYmI2OWFmYzVmOWQxLnNldENvbnRlbnQoaHRtbF9hZjk0Y2ViOTdiYTk0OWU2ODhkNGUzNDY5OGFmYjcyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U4MzIxZWRhZDY3YTQwNDNhNWUyOTE1MzFmZmM5MzM1LmJpbmRQb3B1cChwb3B1cF8zNmFhYzU4ZjhkMzk0MjIyODFkYWJiNjlhZmM1ZjlkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84Y2IzMzdlZGIyNGY0YTc2OTkxZTU5MjQ1ZjBkMjVkMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuMzQ1NjMwOTY3MjQsMzAuMTMxMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjhlNjg4MWI4NmYyNGY5MGEwOWIzYTBiNGU4NjUwNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGNhMTJjNzI2MDdhNDFkZDkwNWRjZTQ4MWJiYmQwYjYgPSAkKCc8ZGl2IGlkPSJodG1sX2RjYTEyYzcyNjA3YTQxZGQ5MDVkY2U0ODFiYmJkMGI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NVU5EVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhlNjg4MWI4NmYyNGY5MGEwOWIzYTBiNGU4NjUwNjEuc2V0Q29udGVudChodG1sX2RjYTEyYzcyNjA3YTQxZGQ5MDVkY2U0ODFiYmJkMGI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGNiMzM3ZWRiMjRmNGE3Njk5MWU1OTI0NWYwZDI1ZDEuYmluZFBvcHVwKHBvcHVwX2Y4ZTY4ODFiODZmMjRmOTBhMDliM2EwYjRlODY1MDYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q5ZGY3MDBhYmRkMTQyN2JiYjIzOTc1Njk1NTVkM2RiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4yNjU4MzUzOTIyOSwzMy4zMTEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDk1ZjNlODI5ODY0NzI3YjBmNmMyODM1MmNmMzViMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOGM3ZjkzZGQ0Njg0YWUyOTQ0NmZhOWJjYTE3MGY0NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjhjN2Y5M2RkNDY4NGFlMjk0NDZmYTliY2ExNzBmNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1VUkxFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDk1ZjNlODI5ODY0NzI3YjBmNmMyODM1MmNmMzViMC5zZXRDb250ZW50KGh0bWxfYjhjN2Y5M2RkNDY4NGFlMjk0NDZmYTliY2ExNzBmNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOWRmNzAwYWJkZDE0MjdiYmIyMzk3NTY5NTU1ZDNkYi5iaW5kUG9wdXAocG9wdXBfZTA5NWYzZTgyOTg2NDcyN2IwZjZjMjgzNTJjZjM1YjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDQ1YWZmZDMxMTQ3NGQ3NThhNTdmNGNiMjYzYzc2OWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC45OTQ3LDE1LjMwNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlZTdkMmM3ZjI5MzRhZWM5ZDhlZjFlMWRhNTYwMTdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3MGEwZTgzZmRjNDRhMGRiYzI1MzU5NDhlYzVlODkwID0gJCgnPGRpdiBpZD0iaHRtbF9lNzBhMGU4M2ZkYzQ0YTBkYmMyNTM1OTQ4ZWM1ZTg5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TVVTR1U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlZTdkMmM3ZjI5MzRhZWM5ZDhlZjFlMWRhNTYwMTdhLnNldENvbnRlbnQoaHRtbF9lNzBhMGU4M2ZkYzQ0YTBkYmMyNTM1OTQ4ZWM1ZTg5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA0NWFmZmQzMTE0NzRkNzU4YTU3ZjRjYjI2M2M3NjljLmJpbmRQb3B1cChwb3B1cF8xZWU3ZDJjN2YyOTM0YWVjOWQ4ZWYxZTFkYTU2MDE3YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mODQwNTVlNDQyMDE0ZDM0OGE1ZTA0ZjgyM2M5ZTZmMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy05LjYzMTIsMzkuMDQ0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmJjZmQ2NGRjMDE0NDlhNDk2NDg2MWFkNmRkYTZkMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y4Yzk3MTUyNGZmNGFiOTljMzU3MTU5MGM1NTE2NDEgPSAkKCc8ZGl2IGlkPSJodG1sX2NmOGM5NzE1MjRmZjRhYjk5YzM1NzE1OTBjNTUxNjQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NV0VSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJjZmQ2NGRjMDE0NDlhNDk2NDg2MWFkNmRkYTZkMGEuc2V0Q29udGVudChodG1sX2NmOGM5NzE1MjRmZjRhYjk5YzM1NzE1OTBjNTUxNjQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjg0MDU1ZTQ0MjAxNGQzNDhhNWUwNGY4MjNjOWU2ZjIuYmluZFBvcHVwKHBvcHVwX2ZiY2ZkNjRkYzAxNDQ5YTQ5NjQ4NjFhZDZkZGE2ZDBhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VkNjY5ZTFmNDUwOTQ0YWJiMWFjMDBhODU5OWMwZGFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuNjg1NSwzLjc1NzQ4OTk4NTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZDQxN2M5MTMyMmY0M2NhYmQ1NjBlMGYxYjdkNzhjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZmQ0YjAwNTI2YzI0ZjVhOWZmOGZlNjQ1ZDU5MTRmMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmZkNGIwMDUyNmMyNGY1YTlmZjhmZTY0NWQ1OTE0ZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1aQUI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkNDE3YzkxMzIyZjQzY2FiZDU2MGUwZjFiN2Q3OGM1LnNldENvbnRlbnQoaHRtbF9iZmQ0YjAwNTI2YzI0ZjVhOWZmOGZlNjQ1ZDU5MTRmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VkNjY5ZTFmNDUwOTQ0YWJiMWFjMDBhODU5OWMwZGFhLmJpbmRQb3B1cChwb3B1cF8xZDQxN2M5MTMyMmY0M2NhYmQ1NjBlMGYxYjdkNzhjNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mN2YwN2UwZDBkYjI0MzdjODc2Yjg4Zjk0ZTcxMTFlNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzguMzA0NjM1OTQ0NjQsLTIuMzk3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWIwZDBhY2IxYzc3NDAyNTk1Mzg5ZDRiNTMwNjJlYjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQzZjkwOTkzMmY5NGIwNzhhZmYxMWNiODgxMGMzMWEgPSAkKCc8ZGl2IGlkPSJodG1sX2E0M2Y5MDk5MzJmOTRiMDc4YWZmMTFjYjg4MTBjMzFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQUZBTkE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliMGQwYWNiMWM3NzQwMjU5NTM4OWQ0YjUzMDYyZWI2LnNldENvbnRlbnQoaHRtbF9hNDNmOTA5OTMyZjk0YjA3OGFmZjExY2I4ODEwYzMxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y3ZjA3ZTBkMGRiMjQzN2M4NzZiODhmOTRlNzExMWU1LmJpbmRQb3B1cChwb3B1cF85YjBkMGFjYjFjNzc0MDI1OTUzODlkNGI1MzA2MmViNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lM2NiNzQwOGU2MTk0N2Y0YjQ0OTE0M2ZjNTUxZjczNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk3NTgsNC41MzI5ODY2MjU1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTQ3MmEwNDUxN2Q0Y2RhOTJmMzcxY2ZmNGE4ZjdkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NTFlYmQ4MWQ0ZjA0MTI5OTM1OTdlMmVjOGRhYWUzZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjUxZWJkODFkNGYwNDEyOTkzNTk3ZTJlYzhkYWFlM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5BSUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlNDcyYTA0NTE3ZDRjZGE5MmYzNzFjZmY0YThmN2Q5LnNldENvbnRlbnQoaHRtbF82NTFlYmQ4MWQ0ZjA0MTI5OTM1OTdlMmVjOGRhYWUzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UzY2I3NDA4ZTYxOTQ3ZjRiNDQ5MTQzZmM1NTFmNzM2LmJpbmRQb3B1cChwb3B1cF81ZTQ3MmEwNDUxN2Q0Y2RhOTJmMzcxY2ZmNGE4ZjdkOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MmY0M2NlNDZkZjI0OTQ1YTA3Mjk5OGZmZGExYmY0MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuMjk4MzUxNzgzMTUsMzUuNzMyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjUyOTdkNWZkYWY0MjRhOWUxNTJjZTZhZmVmM2I4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MDJlODk0ZmVkZTI0NzEzYTYwZjIxMThhMzg4Y2U4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjAyZTg5NGZlZGUyNDcxM2E2MGYyMTE4YTM4OGNlODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5BSkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmNTI5N2Q1ZmRhZjQyNGE5ZTE1MmNlNmFmZWYzYjgzLnNldENvbnRlbnQoaHRtbF82MDJlODk0ZmVkZTI0NzEzYTYwZjIxMThhMzg4Y2U4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkyZjQzY2U0NmRmMjQ5NDVhMDcyOTk4ZmZkYTFiZjQzLmJpbmRQb3B1cChwb3B1cF8wZjUyOTdkNWZkYWY0MjRhOWUxNTJjZTZhZmVmM2I4Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NjhkNmM4ZDlmZDI0YWIyYmI1NGFkMmJmZmIyZjZiNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjAzNjEsLTE0Ljg5NzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0ZWRkYjlmNTI1NDRkMWJhYTBmNDA0YTIyZDIyNGNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiZjE4MWNkZmNhYjQ5MGViOTIwNmVlMGY3YzZlYTk4ID0gJCgnPGRpdiBpZD0iaHRtbF8xYmYxODFjZGZjYWI0OTBlYjkyMDZlZTBmN2M2ZWE5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkFMVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDRlZGRiOWY1MjU0NGQxYmFhMGY0MDRhMjJkMjI0Y2Euc2V0Q29udGVudChodG1sXzFiZjE4MWNkZmNhYjQ5MGViOTIwNmVlMGY3YzZlYTk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzY4ZDZjOGQ5ZmQyNGFiMmJiNTRhZDJiZmZiMmY2YjQuYmluZFBvcHVwKHBvcHVwXzQ0ZWRkYjlmNTI1NDRkMWJhYTBmNDA0YTIyZDIyNGNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBiZGY3Y2NkNDAzYzRjMDRiZDU3ODNhZmE1ZTQ2Mzg1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI2LjM3MzMsMTcuNjQ5M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTZjMDA3OThjNDE2NGU3MGEzYWYyZjdlZGQ0ZDhjNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDg2ZTcyMDIzNTUxNDdkMDk2ZmY4ZTQwNDc5ODJmNzkgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4NmU3MjAyMzU1MTQ3ZDA5NmZmOGU0MDQ3OTgyZjc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQU1BPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NmMwMDc5OGM0MTY0ZTcwYTNhZjJmN2VkZDRkOGM3MC5zZXRDb250ZW50KGh0bWxfNDg2ZTcyMDIzNTUxNDdkMDk2ZmY4ZTQwNDc5ODJmNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYmRmN2NjZDQwM2M0YzA0YmQ1NzgzYWZhNWU0NjM4NS5iaW5kUG9wdXAocG9wdXBfOTZjMDA3OThjNDE2NGU3MGEzYWYyZjdlZGQ0ZDhjNzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGNiYmUyZmQ4NWE0NDhhN2FiMGEyYjFiODY1MDE5ZjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjYuNDE4OCwxNS43MjAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmY1M2UyNTM0NjU0OTI4OWNhMTA5NzA2NTY5YWYzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNGE3ZjI1YWI4NjQ0MjI4YTRhNzhmZDc3N2Y1OWUwNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzRhN2YyNWFiODY0NDIyOGE0YTc4ZmQ3NzdmNTllMDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5BTUlCPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYmY1M2UyNTM0NjU0OTI4OWNhMTA5NzA2NTY5YWYzZi5zZXRDb250ZW50KGh0bWxfMzRhN2YyNWFiODY0NDIyOGE0YTc4ZmQ3NzdmNTllMDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wY2JiZTJmZDg1YTQ0OGE3YWIwYTJiMWI4NjUwMTlmMC5iaW5kUG9wdXAocG9wdXBfMGJmNTNlMjUzNDY1NDkyODljYTEwOTcwNjU2OWFmM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTZhMjQxNzU3YmVlNDljMDk0NTE4YzI5MTgxMmY4YTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUwMjMyMTAyNjYzLDEzLjM4MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4MzEyMTE5NTk5ZTRhM2Q4MzM3YWE0MDJjMWY4ZDY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2MjQ2NmZkMjdlYTRmM2JhYzkyN2ZiMThkMGZhZTdjID0gJCgnPGRpdiBpZD0iaHRtbF9mNjI0NjZmZDI3ZWE0ZjNiYWM5MjdmYjE4ZDBmYWU3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkFNU0hJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODMxMjExOTU5OWU0YTNkODMzN2FhNDAyYzFmOGQ2OS5zZXRDb250ZW50KGh0bWxfZjYyNDY2ZmQyN2VhNGYzYmFjOTI3ZmIxOGQwZmFlN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNmEyNDE3NTdiZWU0OWMwOTQ1MThjMjkxODEyZjhhNi5iaW5kUG9wdXAocG9wdXBfZjgzMTIxMTk1OTllNGEzZDgzMzdhYTQwMmMxZjhkNjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTQyODk1ODM4Y2FlNGI2ZmFhZTA3ZWRjOTYwMWRiNDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFswLjQ3NjgwMDY5NTE1LDM1LjIzMzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5OWE2MDljZTE0NDQ2ZjRhMmEwNjVhNmNlYzM1NWNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczNGNkYmI0ZDFlNDQ0OWZhNDRjMmFmYzMxNTVmZTQwID0gJCgnPGRpdiBpZD0iaHRtbF83MzRjZGJiNGQxZTQ0NDlmYTQ0YzJhZmMzMTU1ZmU0MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkFOREk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5OWE2MDljZTE0NDQ2ZjRhMmEwNjVhNmNlYzM1NWNmLnNldENvbnRlbnQoaHRtbF83MzRjZGJiNGQxZTQ0NDlmYTQ0YzJhZmMzMTU1ZmU0MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk0Mjg5NTgzOGNhZTRiNmZhYWUwN2VkYzk2MDFkYjQ1LmJpbmRQb3B1cChwb3B1cF9jOTlhNjA5Y2UxNDQ0NmY0YTJhMDY1YTZjZWMzNTVjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNWE0YTMzZDU5YTQ0YzIwOTlmNzFiZGUzMDU0N2U3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yMS43OTM3LDIxLjI5MTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1MGVjNzU4YTkzNzRmZDhhNDBiOGY3NjMxZWI2YjczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3ZWJlZjM0Y2Q3MzRhZGVhOGM2YWVjM2JhZjA3Mjk1ID0gJCgnPGRpdiBpZD0iaHRtbF81N2ViZWYzNGNkNzM0YWRlYThjNmFlYzNiYWYwNzI5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkFST048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MGVjNzU4YTkzNzRmZDhhNDBiOGY3NjMxZWI2YjczLnNldENvbnRlbnQoaHRtbF81N2ViZWYzNGNkNzM0YWRlYThjNmFlYzNiYWYwNzI5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA1YTRhMzNkNTlhNDRjMjA5OWY3MWJkZTMwNTQ3ZTc4LmJpbmRQb3B1cChwb3B1cF9iNTBlYzc1OGE5Mzc0ZmQ4YTQwYjhmNzYzMWViNmI3Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNjRkYjNhYTczNDA0NzFjODRiOTJhNDBjMDc2YmMyZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjA3ODQsMS40MDg3MzUyNjgyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA3ODk2MTBiZDkxNDRmMmFkYTRlN2QxYzY4NjFlMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWRlOWVmODI1Y2EyNDcyNWFlOTE3MDIwODU4ZmY2NzYgPSAkKCc8ZGl2IGlkPSJodG1sX2VkZTllZjgyNWNhMjQ3MjVhZTkxNzAyMDg1OGZmNjc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQVVERUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MDc4OTYxMGJkOTE0NGYyYWRhNGU3ZDFjNjg2MWUwMS5zZXRDb250ZW50KGh0bWxfZWRlOWVmODI1Y2EyNDcyNWFlOTE3MDIwODU4ZmY2NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zNjRkYjNhYTczNDA0NzFjODRiOTJhNDBjMDc2YmMyZS5iaW5kUG9wdXAocG9wdXBfNTA3ODk2MTBiZDkxNDRmMmFkYTRlN2QxYzY4NjFlMDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWZjNWIzMTc2ZDY5NDNiMmFiMzk5NDIwNmY0YzFmYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjM2NDE3NTI0NDA4LDI3LjEzNDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhMDY4MzE2NGRiMTQ0NTE4MzU4ODRmNmZhYjIyOTFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyYWQ3MzRmZThjOTRkNjhhZTM5NzZhMTMyMGZkMTc0ID0gJCgnPGRpdiBpZD0iaHRtbF85MmFkNzM0ZmU4Yzk0ZDY4YWUzOTc2YTEzMjBmZDE3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkRBS0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhMDY4MzE2NGRiMTQ0NTE4MzU4ODRmNmZhYjIyOTFkLnNldENvbnRlbnQoaHRtbF85MmFkNzM0ZmU4Yzk0ZDY4YWUzOTc2YTEzMjBmZDE3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FmYzViMzE3NmQ2OTQzYjJhYjM5OTQyMDZmNGMxZmJiLmJpbmRQb3B1cChwb3B1cF9lYTA2ODMxNjRkYjE0NDUxODM1ODg0ZjZmYWIyMjkxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZjcxYzhhNjhkMWM0MWY5OWE1ZWE4ZTk1MDAxYjA5ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy04LjU3NzYxLDM1Ljk0MDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5ZWJjNTdlMzlmZjQ5YTE4NWNlZjczNzY4MTIwNGM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhNzJhZTk4OGEyZjQwYjc4YzMyMGE1MDgyNmI3NDY3ID0gJCgnPGRpdiBpZD0iaHRtbF8wYTcyYWU5ODhhMmY0MGI3OGMzMjBhNTA4MjZiNzQ2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkRBTUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOWViYzU3ZTM5ZmY0OWExODVjZWY3Mzc2ODEyMDRjNy5zZXRDb250ZW50KGh0bWxfMGE3MmFlOTg4YTJmNDBiNzhjMzIwYTUwODI2Yjc0NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZjcxYzhhNjhkMWM0MWY5OWE1ZWE4ZTk1MDAxYjA5Zi5iaW5kUG9wdXAocG9wdXBfMDllYmM1N2UzOWZmNDlhMTg1Y2VmNzM3NjgxMjA0YzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTYxODQ1MWY5OTE4NDFiYWJjYzU2NjljY2NiNWJlOWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuMjQ1OSwzMy43MjA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjE1MDdmOWFjZmM0ODI1OTFjNDIzZmViZjZlMzcyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYmU2YTI2YmE1M2E0NzIzOTY4OWQ1MWVjZjU3NjhlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMGJlNmEyNmJhNTNhNDcyMzk2ODlkNTFlY2Y1NzY4ZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5EQVU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEyMTUwN2Y5YWNmYzQ4MjU5MWM0MjNmZWJmNmUzNzIxLnNldENvbnRlbnQoaHRtbF8wYmU2YTI2YmE1M2E0NzIzOTY4OWQ1MWVjZjU3NjhlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk2MTg0NTFmOTkxODQxYmFiY2M1NjY5Y2NjYjViZTliLmJpbmRQb3B1cChwb3B1cF8xMjE1MDdmOWFjZmM0ODI1OTFjNDIzZmViZjZlMzcyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MzZlOTM3MTFiZWY0ZjM4ODQyMzU3ZWNiMDQzZmU2NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43MTMzLDI4LjE0Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmRjMjJkYzA4MjQxNDdmMjkwMjdiZGRkMTk4YjZjMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWYxMDRkNmQ3NTg5NDhiN2E2NmMxN2Y2YzZmZjhhYmQgPSAkKCc8ZGl2IGlkPSJodG1sXzlmMTA0ZDZkNzU4OTQ4YjdhNjZjMTdmNmM2ZmY4YWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OREVCRUxFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZGMyMmRjMDgyNDE0N2YyOTAyN2JkZGQxOThiNmMxMS5zZXRDb250ZW50KGh0bWxfOWYxMDRkNmQ3NTg5NDhiN2E2NmMxN2Y2YzZmZjhhYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MzZlOTM3MTFiZWY0ZjM4ODQyMzU3ZWNiMDQzZmU2NS5iaW5kUG9wdXAocG9wdXBfYmRjMjJkYzA4MjQxNDdmMjkwMjdiZGRkMTk4YjZjMTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjYyZTZjNTJiM2MzNGI2Nzg5NmFkZDQ3NjcwMjMwMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNjEyMiwyNC4wNDQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYWFlYmJhNjM5ZmQ0ZTEyOWFhMTgyZjlmZDMxY2Y4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjhiN2ZjZDA0N2I0YjVkYjg1YjViNmE4NTVmZjdjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNmY4YjdmY2QwNDdiNGI1ZGI4NWI1YjZhODU1ZmY3Y2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ERU1CVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2FhZWJiYTYzOWZkNGUxMjlhYTE4MmY5ZmQzMWNmODMuc2V0Q29udGVudChodG1sXzZmOGI3ZmNkMDQ3YjRiNWRiODViNWI2YTg1NWZmN2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjYyZTZjNTJiM2MzNGI2Nzg5NmFkZDQ3NjcwMjMwMmEuYmluZFBvcHVwKHBvcHVwXzNhYWViYmE2MzlmZDRlMTI5YWExODJmOWZkMzFjZjgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ0OTNmNTlhNjg0ODQ1YzI4N2VmZjliNWRjMzNjMmQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS45NDIzNDg4NzcyOSwxMC41OTAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGZkNGY1NjZhODU0MTI0OGRmYjZjODc1NzBmMDFhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMmJiNjkwZTVlYjY0NjBiYTI0ZTZiN2RiNDg5Yjk4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzJiYjY5MGU1ZWI2NDYwYmEyNGU2YjdkYjQ4OWI5ODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ET0I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4ZmQ0ZjU2NmE4NTQxMjQ4ZGZiNmM4NzU3MGYwMWEyLnNldENvbnRlbnQoaHRtbF8zMmJiNjkwZTVlYjY0NjBiYTI0ZTZiN2RiNDg5Yjk4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0OTNmNTlhNjg0ODQ1YzI4N2VmZjliNWRjMzNjMmQyLmJpbmRQb3B1cChwb3B1cF83OGZkNGY1NjZhODU0MTI0OGRmYjZjODc1NzBmMDFhMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZDNhOGNjNWIwYjE0ZWIyYjZlNmUyYWZhMjg4ZDk1NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTU5NzY5MDI2MTEsMjYuOTI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY1ZWMwOGY2NzJhNDExMzg5OTIxNTY1NDVmZWFhYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmIxNDA0M2IxMDdkNDU2Yjk5NDcxOGM3MjM1YTY3ZTcgPSAkKCc8ZGl2IGlkPSJodG1sX2JiMTQwNDNiMTA3ZDQ1NmI5OTQ3MThjNzIzNWE2N2U3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ORE9HTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY1ZWMwOGY2NzJhNDExMzg5OTIxNTY1NDVmZWFhYjQuc2V0Q29udGVudChodG1sX2JiMTQwNDNiMTA3ZDQ1NmI5OTQ3MThjNzIzNWE2N2U3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmQzYThjYzViMGIxNGViMmI2ZTZlMmFmYTI4OGQ5NTcuYmluZFBvcHVwKHBvcHVwX2ZmNWVjMDhmNjcyYTQxMTM4OTkyMTU2NTQ1ZmVhYWI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q3MWI5ZGNkMjdkMDQ1NTU4ODMxZmUwM2JjODU0M2YzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMi4wNjMyNDMyNDc5MiwyMC44MTcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTNkZjNhNzgyNTY0YzMxOWM4NzhkNDJkMzRkYjcyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NjU5MjBlNGJmOTk0OGMxYmVmMjhkODQ2YzQ2MTY4ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfODY1OTIwZTRiZjk5NDhjMWJlZjI4ZDg0NmM0NjE2OGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ET0tPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTNkZjNhNzgyNTY0YzMxOWM4NzhkNDJkMzRkYjcyYS5zZXRDb250ZW50KGh0bWxfODY1OTIwZTRiZjk5NDhjMWJlZjI4ZDg0NmM0NjE2OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNzFiOWRjZDI3ZDA0NTU1ODgzMWZlMDNiYzg1NDNmMy5iaW5kUG9wdXAocG9wdXBfNDEzZGYzYTc4MjU2NGMzMTljODc4ZDQyZDM0ZGI3MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDcxYWI2OTRjMDJmNDc2MDgwMzA1NmU0MzdkOTIzZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMzgzOCwxMy41NjQyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGNiMjk1YTg3OWU0NjA0ODMwMTJiODBiOTc1MjY4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTk5M2Y2ZmMxMjM0ZDFiOTRiMzlmODM3NmRiNTBiMSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2U5OTNmNmZjMTIzNGQxYjk0YjM5ZjgzNzZkYjUwYjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ET01CRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RjYjI5NWE4NzllNDYwNDgzMDEyYjgwYjk3NTI2ODEuc2V0Q29udGVudChodG1sXzNlOTkzZjZmYzEyMzRkMWI5NGIzOWY4Mzc2ZGI1MGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDcxYWI2OTRjMDJmNDc2MDgwMzA1NmU0MzdkOTIzZGEuYmluZFBvcHVwKHBvcHVwXzNkY2IyOTVhODc5ZTQ2MDQ4MzAxMmI4MGI5NzUyNjgxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5MDU1YzBiNjA1MDQ5ZDJiNWU1MTg0OTEyYTNiOGNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy41NTA1MjQyMDI4MiwxMC44NDQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDQ1MmMwMmFjMjM0YzVmYjRhNzUxMDI4MGRlZDAwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MGU4YjM4NzBkY2U0ZjcyOGVkZDRjNWRlYzFhODhhOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTBlOGIzODcwZGNlNGY3MjhlZGQ0YzVkZWMxYTg4YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ET1JPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDQ1MmMwMmFjMjM0YzVmYjRhNzUxMDI4MGRlZDAwYi5zZXRDb250ZW50KGh0bWxfNTBlOGIzODcwZGNlNGY3MjhlZGQ0YzVkZWMxYTg4YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80OTA1NWMwYjYwNTA0OWQyYjVlNTE4NDkxMmEzYjhjZS5iaW5kUG9wdXAocG9wdXBfZTA0NTJjMDJhYzIzNGM1ZmI0YTc1MTAyODBkZWQwMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDIzZWFmZDEwMTdlNGZhZThkMzExMjRlMzFkOTcwYzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjMwNDU3ODgwMTA4LDE5LjI1MTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4NGVkNDliMmJhNzQ3Y2JhMDMxYmM2ODllOWQwZjM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwYTYxYTM3NWE3ZTQ3ZDVhYmY3NDAzNjhiMjA4ZGY0ID0gJCgnPGRpdiBpZD0iaHRtbF9iMGE2MWEzNzVhN2U0N2Q1YWJmNzQwMzY4YjIwOGRmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkRVS0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4NGVkNDliMmJhNzQ3Y2JhMDMxYmM2ODllOWQwZjM0LnNldENvbnRlbnQoaHRtbF9iMGE2MWEzNzVhN2U0N2Q1YWJmNzQwMzY4YjIwOGRmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyM2VhZmQxMDE3ZTRmYWU4ZDMxMTI0ZTMxZDk3MGM2LmJpbmRQb3B1cChwb3B1cF9kODRlZDQ5YjJiYTc0N2NiYTAzMWJjNjg5ZTlkMGYzNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNGQ4OWRhNjgzMGE0NzkyODMxNTY2NGNmOWYxNTMyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjc2NDgsMTEuNTAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTAyMjMyMzM3ZmE0OTZlODdmODUyZmNjNzIzN2FjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZWU1YjdlMWVmODA0NjhiYTg2MmYxNzc2MjgzZmJlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWVlNWI3ZTFlZjgwNDY4YmE4NjJmMTc3NjI4M2ZiZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5FRlVTQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTkwMjIzMjMzN2ZhNDk2ZTg3Zjg1MmZjYzcyMzdhYzQuc2V0Q29udGVudChodG1sXzVlZTViN2UxZWY4MDQ2OGJhODYyZjE3NzYyODNmYmVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjRkODlkYTY4MzBhNDc5MjgzMTU2NjRjZjlmMTUzMmMuYmluZFBvcHVwKHBvcHVwXzU5MDIyMzIzMzdmYTQ5NmU4N2Y4NTJmY2M3MjM3YWM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI1ZGIxZDE0YTgyZTRmYzI5YTBkOTYyMWNkODNhNTdiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNC43MDMyMjc2MjA1MywxMC43NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4OTBiN2I3Y2IzNjQ2ZmY4M2U3YThjYjI5MTlhYWQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MzE5NGU4MzFkYjRlNTJiMjQyOGZjZjk1MzhiMWRiID0gJCgnPGRpdiBpZD0iaHRtbF9kNjMxOTRlODMxZGI0ZTUyYjI0MjhmY2Y5NTM4YjFkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkVOPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODkwYjdiN2NiMzY0NmZmODNlN2E4Y2IyOTE5YWFkMC5zZXRDb250ZW50KGh0bWxfZDYzMTk0ZTgzMWRiNGU1MmIyNDI4ZmNmOTUzOGIxZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNWRiMWQxNGE4MmU0ZmMyOWEwZDk2MjFjZDgzYTU3Yi5iaW5kUG9wdXAocG9wdXBfNDg5MGI3YjdjYjM2NDZmZjgzZTdhOGNiMjkxOWFhZDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGFkYzcyMjhiYjQ5NDlhODhlMDViZmY4NjIwZGFlYTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjI2OTUyNzkwNDM4LDE4Ljg2MjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyMDhjNjljNjQ2ZDQ4ZTVhNDU3Yjc0YzQ2NDJiNTlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmYzc4NjU3MWFhNzRhMzRiZDdlODU2ZTQ1ZGQ2NDY5ID0gJCgnPGRpdiBpZD0iaHRtbF82ZmM3ODY1NzFhYTc0YTM0YmQ3ZTg1NmU0NWRkNjQ2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkdBTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyMDhjNjljNjQ2ZDQ4ZTVhNDU3Yjc0YzQ2NDJiNTlhLnNldENvbnRlbnQoaHRtbF82ZmM3ODY1NzFhYTc0YTM0YmQ3ZTg1NmU0NWRkNjQ2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRhZGM3MjI4YmI0OTQ5YTg4ZTA1YmZmODYyMGRhZWE2LmJpbmRQb3B1cChwb3B1cF81MjA4YzY5YzY0NmQ0OGU1YTQ1N2I3NGM0NjQyYjU5YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNDE4Mzg1Yzg1NzY0NTNmYmMzYmY5OTVhZmQyMDI1MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuNjU0MTE2NjQ2ODUsMTcuNDYzNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRiNWQ4YzgyMDM3NDdiZDgzYjY0ZjIwMTAzNTY0OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTIxODk1YzYxNjMyNDRjZWFkZmQ4YTc0ZDJkNDc4OGEgPSAkKCc8ZGl2IGlkPSJodG1sX2UyMTg5NWM2MTYzMjQ0Y2VhZGZkOGE3NGQyZDQ3ODhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OR0FNQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRiNWQ4YzgyMDM3NDdiZDgzYjY0ZjIwMTAzNTY0OTQuc2V0Q29udGVudChodG1sX2UyMTg5NWM2MTYzMjQ0Y2VhZGZkOGE3NGQyZDQ3ODhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjQxODM4NWM4NTc2NDUzZmJjM2JmOTk1YWZkMjAyNTMuYmluZFBvcHVwKHBvcHVwX2M0YjVkOGM4MjAzNzQ3YmQ4M2I2NGYyMDEwMzU2NDk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZiY2I5Njc0YTBlMzRmMjBhZmVlODkzMWRjZmIyYTRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4wMjY3OTc0NzI5NiwyMy4zNTg3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kM2QxMWRhZjZiZTA0NzIwOWE3NTlmYjYwNGQxNTNiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTY3MGE5MTU1ODc0OTIzOTJiMDZlODlhM2Y0Mjk0MyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzE2NzBhOTE1NTg3NDkyMzkyYjA2ZTg5YTNmNDI5NDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5HQU5EVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNkMTFkYWY2YmUwNDcyMDlhNzU5ZmI2MDRkMTUzYmYuc2V0Q29udGVudChodG1sXzMxNjcwYTkxNTU4NzQ5MjM5MmIwNmU4OWEzZjQyOTQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmJjYjk2NzRhMGUzNGYyMGFmZWU4OTMxZGNmYjJhNGEuYmluZFBvcHVwKHBvcHVwX2QzZDExZGFmNmJlMDQ3MjA5YTc1OWZiNjA0ZDE1M2JmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JkN2Y0NGFmNDVhMDRkOTc4MjlmYTMwZTc3MWZkNzdlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy43NjY4NTkxNDEzMSwyMS44MzI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNWYxZTlmNjBkNWM0YWIzYmNkOTI1NDM1NjhkMTUwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81N2Q5ZGU3ODhjZDg0NDRmOTI1MmNiYzc3NzIyZjQzYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTdkOWRlNzg4Y2Q4NDQ0ZjkyNTJjYmM3NzcyMmY0M2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5HQkFOREk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1ZjFlOWY2MGQ1YzRhYjNiY2Q5MjU0MzU2OGQxNTA3LnNldENvbnRlbnQoaHRtbF81N2Q5ZGU3ODhjZDg0NDRmOTI1MmNiYzc3NzIyZjQzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JkN2Y0NGFmNDVhMDRkOTc4MjlmYTMwZTc3MWZkNzdlLmJpbmRQb3B1cChwb3B1cF9hNWYxZTlmNjBkNWM0YWIzYmNkOTI1NDM1NjhkMTUwNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNGFjMmVkNGU5NmI0MDAyODM0OWZlZjIxZjc5NTVjZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzIuODg0NDkxMTEyOTYsMjguMzM4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBlNjkxYTg4NDRkNGRkMmFkOWViYTM4MTJkMmEwMjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGUyNTdmYWI5ZGQyNGQ1OGFiMWRhMTk0MzY3MGFmZjYgPSAkKCc8ZGl2IGlkPSJodG1sX2RlMjU3ZmFiOWRkMjRkNThhYjFkYTE5NDM2NzBhZmY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OR0JFTEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwZTY5MWE4ODQ0ZDRkZDJhZDllYmEzODEyZDJhMDIwLnNldENvbnRlbnQoaHRtbF9kZTI1N2ZhYjlkZDI0ZDU4YWIxZGExOTQzNjcwYWZmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q0YWMyZWQ0ZTk2YjQwMDI4MzQ5ZmVmMjFmNzk1NWNmLmJpbmRQb3B1cChwb3B1cF83MGU2OTFhODg0NGQ0ZGQyYWQ5ZWJhMzgxMmQyYTAyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Y2UwZmFiYTA5OTU0YTA0OWYyZGQ0YzljNzUyNDQ4ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzcuNTkyMjU2NjYxMTksNi45ODEzOTg2MDg5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODgwNjVmMDFkNWE5NGRjMTljMzNmNDQ1MzRjNDJiYTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGYxZjY2ODc1MzRmNGQ2ZjkyNWJhZjE4NTM2OTJlYmQgPSAkKCc8ZGl2IGlkPSJodG1sXzhmMWY2Njg3NTM0ZjRkNmY5MjViYWYxODUzNjkyZWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OR0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4MDY1ZjAxZDVhOTRkYzE5YzMzZjQ0NTM0YzQyYmE5LnNldENvbnRlbnQoaHRtbF84ZjFmNjY4NzUzNGY0ZDZmOTI1YmFmMTg1MzY5MmViZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZjZTBmYWJhMDk5NTRhMDQ5ZjJkZDRjOWM3NTI0NDhmLmJpbmRQb3B1cChwb3B1cF84ODA2NWYwMWQ1YTk0ZGMxOWMzM2Y0NDUzNGM0MmJhOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83N2FmNjc1MDE4MWQ0MjdhODc4ZDZhZTI5MDQ4NjBiOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuODU2MDQwMDgzODUsLTguMDIzNDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxYThiNTg0NDQ2NDQwZWE4MGU0ZWQ0MjA1ZGYxMzcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhZWE1MWIzNDQwYzQ5N2U5MTQzMmU1ODc1ZDIzZmYwID0gJCgnPGRpdiBpZD0iaHRtbF9kYWVhNTFiMzQ0MGM0OTdlOTE0MzJlNTg3NWQyM2ZmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkdFUkU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxYThiNTg0NDQ2NDQwZWE4MGU0ZWQ0MjA1ZGYxMzcwLnNldENvbnRlbnQoaHRtbF9kYWVhNTFiMzQ0MGM0OTdlOTE0MzJlNTg3NWQyM2ZmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc3YWY2NzUwMTgxZDQyN2E4NzhkNmFlMjkwNDg2MGI4LmJpbmRQb3B1cChwb3B1cF9jMWE4YjU4NDQ0NjQ0MGVhODBlNGVkNDIwNWRmMTM3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYjQ4YjZiZWJiM2I0NGQ0ODdlMTRjYmM1MjAzNmY4OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy05LjM3NTE0LDM3Ljg2OTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxZmQyNGYxZmJhMTRmZGM4NzU5NDZlZDE1MDVmNzBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhZDJhZDBjMzgzMzRiZWE4NGQzOTQyMWYzNmEwYThkID0gJCgnPGRpdiBpZD0iaHRtbF85YWQyYWQwYzM4MzM0YmVhODRkMzk0MjFmMzZhMGE4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkdJTkRPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMWZkMjRmMWZiYTE0ZmRjODc1OTQ2ZWQxNTA1ZjcwYi5zZXRDb250ZW50KGh0bWxfOWFkMmFkMGMzODMzNGJlYTg0ZDM5NDIxZjM2YTBhOGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iYjQ4YjZiZWJiM2I0NGQ0ODdlMTRjYmM1MjAzNmY4OC5iaW5kUG9wdXAocG9wdXBfMjFmZDI0ZjFmYmExNGZkYzg3NTk0NmVkMTUwNWY3MGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDkxYWVkNGM3MjBmNGQwZDkxOTFhOWY5MjNjMzMwYzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4xMjQ2LDEwLjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzYzIwY2U5MmY3ZDQzYmNiNTY4NjUwZjQzNjQ0MTA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxMzAzYWQ1MzUxZjRlMDRiM2JlNGY5ZTM1MzAyMzBkID0gJCgnPGRpdiBpZD0iaHRtbF81MTMwM2FkNTM1MWY0ZTA0YjNiZTRmOWUzNTMwMjMwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkdJWklNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84M2MyMGNlOTJmN2Q0M2JjYjU2ODY1MGY0MzY0NDEwOC5zZXRDb250ZW50KGh0bWxfNTEzMDNhZDUzNTFmNGUwNGIzYmU0ZjllMzUzMDIzMGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80OTFhZWQ0YzcyMGY0ZDBkOTE5MWE5ZjkyM2MzMzBjOC5iaW5kUG9wdXAocG9wdXBfODNjMjBjZTkyZjdkNDNiY2I1Njg2NTBmNDM2NDQxMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDcyMTNiMTE1MTUwNGVhODhmMDNhODYyNDQ0OWE3MjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC44OTU3NjQsMjEuNDY4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWFlOTBkYjVhODg0NDllNGExMGEyNjAzNDIxYjUzODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2Q5MTc5ZWYyOGU2NGVmYzhhYTJhNDI3MDRlZmU3MzAgPSAkKCc8ZGl2IGlkPSJodG1sXzNkOTE3OWVmMjhlNjRlZmM4YWEyYTQyNzA0ZWZlNzMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OR09NQkU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhZTkwZGI1YTg4NDQ5ZTRhMTBhMjYwMzQyMWI1Mzg2LnNldENvbnRlbnQoaHRtbF8zZDkxNzllZjI4ZTY0ZWZjOGFhMmE0MjcwNGVmZTczMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q3MjEzYjExNTE1MDRlYTg4ZjAzYTg2MjQ0NDlhNzIzLmJpbmRQb3B1cChwb3B1cF8xYWU5MGRiNWE4ODQ0OWU0YTEwYTI2MDM0MjFiNTM4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YjQ4MDI3NzI4YTk0N2YzOTg4MjBmNzUzMTY0ZGU0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy01LjMyODk1LDE4LjM4NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNmFkMGJiZDM4MzQ1YmQ4MmE1MmZhZGY5NjQ4YTM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4NzM2ZmZkMGRhMTQzMDJhNWYwYThlZmUzZmJhZjAzID0gJCgnPGRpdiBpZD0iaHRtbF8wODczNmZmZDBkYTE0MzAyYTVmMGE4ZWZlM2ZiYWYwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkdPTkdPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzZhZDBiYmQzODM0NWJkODJhNTJmYWRmOTY0OGEzNS5zZXRDb250ZW50KGh0bWxfMDg3MzZmZmQwZGExNDMwMmE1ZjBhOGVmZTNmYmFmMDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YjQ4MDI3NzI4YTk0N2YzOTg4MjBmNzUzMTY0ZGU0Zi5iaW5kUG9wdXAocG9wdXBfMDM2YWQwYmJkMzgzNDViZDgyYTUyZmFkZjk2NDhhMzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjZiYTcyNTk5NmFmNDBhMWJmNDZjYmM0NTVmYWM4ODYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuNDk2MiwxNi45Mzg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjFmZTE0MzA2ZTc0NWZhOTNkNGU0YzAyODRmYTUxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2Y5ZTRmMGExYTA0ZmExYmJiMGNiYzg2NzNmNjdmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdmOWU0ZjBhMWEwNGZhMWJiYjBjYmM4NjczZjY3ZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5HT05ZRUxVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjFmZTE0MzA2ZTc0NWZhOTNkNGU0YzAyODRmYTUxMy5zZXRDb250ZW50KGh0bWxfMDdmOWU0ZjBhMWEwNGZhMWJiYjBjYmM4NjczZjY3ZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNmJhNzI1OTk2YWY0MGExYmY0NmNiYzQ1NWZhYzg4Ni5iaW5kUG9wdXAocG9wdXBfMzYxZmUxNDMwNmU3NDVmYTkzZDRlNGMwMjg0ZmE1MTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjUyZWMzN2QzMjljNGQ3ZThmN2U3YTFmMmJmODM1YTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjQ3OTgzNTkwMTY2LDEwLjQyODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyZGQ3N2JhODk0MTQyMjY5M2NhYzViZWY0MmVhM2E4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5MDU3YjkzODc0NDQ3ZDhiY2IyNjE4ODAxNmM0ZTQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9mOTA1N2I5Mzg3NDQ0N2Q4YmNiMjYxODgwMTZjNGU0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkdVTUJBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMmRkNzdiYTg5NDE0MjI2OTNjYWM1YmVmNDJlYTNhOC5zZXRDb250ZW50KGh0bWxfZjkwNTdiOTM4NzQ0NDdkOGJjYjI2MTg4MDE2YzRlNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NTJlYzM3ZDMyOWM0ZDdlOGY3ZTdhMWYyYmY4MzVhOC5iaW5kUG9wdXAocG9wdXBfMjJkZDc3YmE4OTQxNDIyNjkzY2FjNWJlZjQyZWEzYTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWI5MzczZDc5MDE1NDlmZDlhNGRlYzBhNTI5OTA3NjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuMTczNCwxNS4xOTc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMGI2YjFkYjc4NGY0MDM3ODc5YjVkNjQyMGEwODE4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZGUxYjdjYWEzYTA0OGFhOTBlYzgyNGZlMDliOTRkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWRlMWI3Y2FhM2EwNDhhYTkwZWM4MjRmZTA5Yjk0ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5HVU1CRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBiNmIxZGI3ODRmNDAzNzg3OWI1ZDY0MjBhMDgxOGUuc2V0Q29udGVudChodG1sX2FkZTFiN2NhYTNhMDQ4YWE5MGVjODI0ZmUwOWI5NGRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWI5MzczZDc5MDE1NDlmZDlhNGRlYzBhNTI5OTA3NjAuYmluZFBvcHVwKHBvcHVwXzAwYjZiMWRiNzg0ZjQwMzc4NzliNWQ2NDIwYTA4MThlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiNzVlZWVjYmQ4MzQ1YjA5ZDI5NDg1MjAzOTU4ZTM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMTM2MTEsMzcuNjA3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzI4MjNkYmVlZjQwNDM3MDk4NGI2MDhiYjFiMDA1NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk1YzdiMzU3ZWMzNGIzNDgwZTE4YzhiZjAyMjVhYmQgPSAkKCc8ZGl2IGlkPSJodG1sXzg5NWM3YjM1N2VjMzRiMzQ4MGUxOGM4YmYwMjI1YWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OR1VSVTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzI4MjNkYmVlZjQwNDM3MDk4NGI2MDhiYjFiMDA1NmUuc2V0Q29udGVudChodG1sXzg5NWM3YjM1N2VjMzRiMzQ4MGUxOGM4YmYwMjI1YWJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWI3NWVlZWNiZDgzNDViMDlkMjk0ODUyMDM5NThlMzYuYmluZFBvcHVwKHBvcHVwXzMyODIzZGJlZWY0MDQzNzA5ODRiNjA4YmIxYjAwNTZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkyMmRlODFkMzJjMTQ2MzQ5YmJiYzc4Y2UwZTI1ODE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI1LjI0MiwyNS4yNDA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZWQwMzVhY2ExMzE0ZDQ4OWQyNTc0MDg1MmZjNzQwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGQxZTIwNjE1NDI0NTlmOTk0NTQ3NTQzZThhNWIyZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjRkMWUyMDYxNTQyNDU5Zjk5NDU0NzU0M2U4YTViMmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5HV0FLRVRTRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWVkMDM1YWNhMTMxNGQ0ODlkMjU3NDA4NTJmYzc0MDIuc2V0Q29udGVudChodG1sXzY0ZDFlMjA2MTU0MjQ1OWY5OTQ1NDc1NDNlOGE1YjJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTIyZGU4MWQzMmMxNDYzNDliYmJjNzhjZTBlMjU4MTYuYmluZFBvcHVwKHBvcHVwXzVlZDAzNWFjYTEzMTRkNDg5ZDI1NzQwODUyZmM3NDAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY4OGQ0Y2UyNmI0ODRhYjg5ZDg2NDg3NTFkZGMzZGUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjY0NDksMjcuMDE3NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDA4NDJmYTAyNzRiNDgwNmEwNDNjOTU0YjM2ODRkMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTMyMDg5NTc3OWJmNGQ3ZGI1MWRjZDdkMWIwMmQ4ZmQgPSAkKCc8ZGl2IGlkPSJodG1sXzEzMjA4OTU3NzliZjRkN2RiNTFkY2Q3ZDFiMDJkOGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OR1dBVE88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwODQyZmEwMjc0YjQ4MDZhMDQzYzk1NGIzNjg0ZDFiLnNldENvbnRlbnQoaHRtbF8xMzIwODk1Nzc5YmY0ZDdkYjUxZGNkN2QxYjAyZDhmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY4OGQ0Y2UyNmI0ODRhYjg5ZDg2NDg3NTFkZGMzZGUwLmJpbmRQb3B1cChwb3B1cF9kMDg0MmZhMDI3NGI0ODA2YTA0M2M5NTRiMzY4NGQxYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82M2Y4Y2VjOTZjNDY0ODljOGE3M2ZmOTU5YmVlMzRkYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjU3MTc1NSwzMC40OTg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNDk0YzkzNTI3ZmQ0OTI4YjZlNTc5MjA2MTNkYjgyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTQ3OTY2ZWE4ZWU0MGYzOTZlNjdkMmRjMTM0OGZjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjE0Nzk2NmVhOGVlNDBmMzk2ZTY3ZDJkYzEzNDhmYzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5LT0xFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDk0YzkzNTI3ZmQ0OTI4YjZlNTc5MjA2MTNkYjgyZC5zZXRDb250ZW50KGh0bWxfMjE0Nzk2NmVhOGVlNDBmMzk2ZTY3ZDJkYzEzNDhmYzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82M2Y4Y2VjOTZjNDY0ODljOGE3M2ZmOTU5YmVlMzRkYi5iaW5kUG9wdXAocG9wdXBfMTQ5NGM5MzUyN2ZkNDkyOGI2ZTU3OTIwNjEzZGI4MmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjk4NDZlODZjYzJhNDk0ZTkxMzY0ZjVlYzIxYjI2NDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuODMxMSwyNC4zMjQyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2EyNGU1ZmJiZGY0NWY0OGJjMThlNGVlOGI0NDBlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjY1MThkN2NlNzQ0OTRhOWIwMTY5NDhhYmI4NGIzNyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDI2NTE4ZDdjZTc0NDk0YTliMDE2OTQ4YWJiODRiMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5LT1lBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hN2EyNGU1ZmJiZGY0NWY0OGJjMThlNGVlOGI0NDBlNy5zZXRDb250ZW50KGh0bWxfZDI2NTE4ZDdjZTc0NDk0YTliMDE2OTQ4YWJiODRiMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mOTg0NmU4NmNjMmE0OTRlOTEzNjRmNWVjMjFiMjY0Ni5iaW5kUG9wdXAocG9wdXBfYTdhMjRlNWZiYmRmNDVmNDhiYzE4ZTRlZThiNDQwZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODc3MmQ4ZDg4MzcxNDFhMmJkY2I4MDVkMDgxMTJjMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC4zMTczNTksMTkuNDkxNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA0ZGYxNzIyZTNhNGQwY2IyZjcwOWNmMWVkNDYwZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGVkMjY2ZDQ3YTNjNDFhZWIzMjYwM2M0OTU2ODJiODAgPSAkKCc8ZGl2IGlkPSJodG1sX2RlZDI2NmQ0N2EzYzQxYWViMzI2MDNjNDk1NjgyYjgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OS1VORE88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwNGRmMTcyMmUzYTRkMGNiMmY3MDljZjFlZDQ2MGRiLnNldENvbnRlbnQoaHRtbF9kZWQyNjZkNDdhM2M0MWFlYjMyNjAzYzQ5NTY4MmI4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3NzJkOGQ4ODM3MTQxYTJiZGNiODA1ZDA4MTEyYzBhLmJpbmRQb3B1cChwb3B1cF8xMDRkZjE3MjJlM2E0ZDBjYjJmNzA5Y2YxZWQ0NjBkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYzI3ZThlOWVhOTg0MWY2YjU3YzMwYzFiMWY2NjI1YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjk2MzcsLTQuMTIxMjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5NTlmZjQzMWFlZDQ2MGI4MGMzNDZhNGI1MmU2NDBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhZjYzNmE3NGE1ZTQyNWY5MTU0MmQzOWVmNzVkNDlhID0gJCgnPGRpdiBpZD0iaHRtbF9lYWY2MzZhNzRhNWU0MjVmOTE1NDJkMzllZjc1ZDQ5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OTzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTk1OWZmNDMxYWVkNDYwYjgwYzM0NmE0YjUyZTY0MGQuc2V0Q29udGVudChodG1sX2VhZjYzNmE3NGE1ZTQyNWY5MTU0MmQzOWVmNzVkNDlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmMyN2U4ZTllYTk4NDFmNmI1N2MzMGMxYjFmNjYyNWEuYmluZFBvcHVwKHBvcHVwX2U5NTlmZjQzMWFlZDQ2MGI4MGMzNDZhNGI1MmU2NDBkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y4ZjZkMmM0YzA5YjQ2M2I4ZWRmNDg1NjJmZmQzN2NmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4yNTQxNjQwMjAwMSwxMC44Mjk0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmExMGRiMmUzODY0ZjA5ODE5NDQwZmM0OThlYmI1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MWJmNzk0ZGRhZmY0MzI0YjgwZDA0OWE2NWMyYmNlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTFiZjc5NGRkYWZmNDMyNGI4MGQwNDlhNjVjMmJjZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5TQVc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmYTEwZGIyZTM4NjRmMDk4MTk0NDBmYzQ5OGViYjViLnNldENvbnRlbnQoaHRtbF81MWJmNzk0ZGRhZmY0MzI0YjgwZDA0OWE2NWMyYmNlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y4ZjZkMmM0YzA5YjQ2M2I4ZWRmNDg1NjJmZmQzN2NmLmJpbmRQb3B1cChwb3B1cF85ZmExMGRiMmUzODY0ZjA5ODE5NDQwZmM0OThlYmI1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMWY2NWI5NTU2OTc0Y2ZmODRlYTVlMzZlOWMwMjVkNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC44ODg3LDMwLjUzNDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkNzMxYzE1MmYxNzRmYzI5NGQ2NzNmNWI2MTI4NjAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4YjQ2YjMyNTU3YTQzNGVhYWI0OGRmNDJjNzQ0YTUzID0gJCgnPGRpdiBpZD0iaHRtbF80OGI0NmIzMjU1N2E0MzRlYWFiNDhkZjQyYzc0NGE1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TlNFTkdBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDczMWMxNTJmMTc0ZmMyOTRkNjczZjViNjEyODYwMi5zZXRDb250ZW50KGh0bWxfNDhiNDZiMzI1NTdhNDM0ZWFhYjQ4ZGY0MmM3NDRhNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMWY2NWI5NTU2OTc0Y2ZmODRlYTVlMzZlOWMwMjVkNS5iaW5kUG9wdXAocG9wdXBfMGQ3MzFjMTUyZjE3NGZjMjk0ZDY3M2Y1YjYxMjg2MDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTIyYWUzYmFiNmVhNGRjMDgxYjRlZTM3MTQ4ODczMWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjQ5NDM3MTQ0ODQxLDExLjE0NzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkMTgyNzg1ZWY3NzRhMTE4MzViNTQ2ZWM4MjU1ZjNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzNjNlYThjOTc0ZDQ1NWNiMjBkZDcyZGU5N2JiZTM2ID0gJCgnPGRpdiBpZD0iaHRtbF9kMzYzZWE4Yzk3NGQ0NTVjYjIwZGQ3MmRlOTdiYmUzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TlNVTkdMSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2QxODI3ODVlZjc3NGExMTgzNWI1NDZlYzgyNTVmM2Muc2V0Q29udGVudChodG1sX2QzNjNlYThjOTc0ZDQ1NWNiMjBkZDcyZGU5N2JiZTM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTIyYWUzYmFiNmVhNGRjMDgxYjRlZTM3MTQ4ODczMWIuYmluZFBvcHVwKHBvcHVwXzNkMTgyNzg1ZWY3NzRhMTE4MzViNTQ2ZWM4MjU1ZjNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA1YWE0ODdlMGVkZjQ5Y2ZiMWZiZTI4YzU2YWJhYmMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbOC41MzIyMzgzNDAyLDMxLjc2NzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4ODc4OTU3Y2E1NjQxZDM5Yzk5ZGY0YzNmYWQ1ZjBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJiNTdhNGYzOTc0ZjQ0NmE5MTg0ZDFiMDM1ZTAzM2Q2ID0gJCgnPGRpdiBpZD0iaHRtbF8yYjU3YTRmMzk3NGY0NDZhOTE4NGQxYjAzNWUwMzNkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TlVFUjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDg4Nzg5NTdjYTU2NDFkMzljOTlkZjRjM2ZhZDVmMGUuc2V0Q29udGVudChodG1sXzJiNTdhNGYzOTc0ZjQ0NmE5MTg0ZDFiMDM1ZTAzM2Q2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDVhYTQ4N2UwZWRmNDljZmIxZmJlMjhjNTZhYmFiYzAuYmluZFBvcHVwKHBvcHVwXzA4ODc4OTU3Y2E1NjQxZDM5Yzk5ZGY0YzNmYWQ1ZjBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBjNDZkNzVjNzlkMDRiOThiNTRkMWIwZGIzZTdkNDllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3Ljc3NzIsMjIuODA2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzQ0M2JmZTZiMThmNDZhNzg1YzM0MjVjMmRmMDIwNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBjNTFkZTBkYTBmNDQzMzgyYTIxZGRmZTg3ODlmMTMgPSAkKCc8ZGl2IGlkPSJodG1sX2IwYzUxZGUwZGEwZjQ0MzM4MmEyMWRkZmU4Nzg5ZjEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OVUtXRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQ0M2JmZTZiMThmNDZhNzg1YzM0MjVjMmRmMDIwNTMuc2V0Q29udGVudChodG1sX2IwYzUxZGUwZGEwZjQ0MzM4MmEyMWRkZmU4Nzg5ZjEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGM0NmQ3NWM3OWQwNGI5OGI1NGQxYjBkYjNlN2Q0OWUuYmluZFBvcHVwKHBvcHVwX2M0NDNiZmU2YjE4ZjQ2YTc4NWMzNDI1YzJkZjAyMDUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U4ZDMwZjdkYjFkNDRlM2Q4ODk2ZTY2Njg4N2I4MzM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNTEwMSwtMi4wOTAzN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE5ZjEwMTBmZjY2NDZhYjg2YzhhYzg2MzczNTlhOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRkYTE1MzNkZGFmNDIzYWIxNmI0YjExNmFiYmU3MGYgPSAkKCc8ZGl2IGlkPSJodG1sX2E0ZGExNTMzZGRhZjQyM2FiMTZiNGIxMTZhYmJlNzBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OVU5VTUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxOWYxMDEwZmY2NjQ2YWI4NmM4YWM4NjM3MzU5YThmLnNldENvbnRlbnQoaHRtbF9hNGRhMTUzM2RkYWY0MjNhYjE2YjRiMTE2YWJiZTcwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U4ZDMwZjdkYjFkNDRlM2Q4ODk2ZTY2Njg4N2I4MzM2LmJpbmRQb3B1cChwb3B1cF81MTlmMTAxMGZmNjY0NmFiODZjOGFjODYzNzM1OWE4Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMDA2MWU2MDBlMjA0ZTUxOGUxZGZkMjc1Y2Y2Mjk5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzkuMTAyODYwMTkzOSw1Ljc2Mjg1MTE3NTY0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODBiNWNlNDA2M2M0MThkYmEwMTIzNDIxOGUyYTdkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTM2MjU4NWZjMDQ0NzdkYmI1NGY1NjQyN2ZhZjdhZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTUzNjI1ODVmYzA0NDc3ZGJiNTRmNTY0MjdmYWY3YWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5VUEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4MGI1Y2U0MDYzYzQxOGRiYTAxMjM0MjE4ZTJhN2QxLnNldENvbnRlbnQoaHRtbF9hNTM2MjU4NWZjMDQ0NzdkYmI1NGY1NjQyN2ZhZjdhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MwMDYxZTYwMGUyMDRlNTE4ZTFkZmQyNzVjZjYyOTk1LmJpbmRQb3B1cChwb3B1cF83ODBiNWNlNDA2M2M0MThkYmEwMTIzNDIxOGUyYTdkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMGEwMGQwMGY4YWQ0MDNhOTdhMmRhNmI4YzlkZjdjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yNS43MzgzLDIwLjQ3MThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4ZTFmN2Y2Y2JlZjRiZGNhM2E1NDc2MGM1OWViYmEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlMmZmMGQ1OWFiMzQ4MDY4YTBlOGUxNjRkNjBkMTViID0gJCgnPGRpdiBpZD0iaHRtbF8yZTJmZjBkNTlhYjM0ODA2OGEwZThlMTY0ZDYwZDE1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TlVTQU48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4ZTFmN2Y2Y2JlZjRiZGNhM2E1NDc2MGM1OWViYmEyLnNldENvbnRlbnQoaHRtbF8yZTJmZjBkNTlhYjM0ODA2OGEwZThlMTY0ZDYwZDE1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzEwYTAwZDAwZjhhZDQwM2E5N2EyZGE2YjhjOWRmN2NlLmJpbmRQb3B1cChwb3B1cF83OGUxZjdmNmNiZWY0YmRjYTNhNTQ3NjBjNTllYmJhMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZDcxNGFlNzZlYjM0NGZhOTI4OTVkY2I3NjkyNjAxNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy05LjI4OTU5LDMzLjcwNTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyOGQ0Y2I1MjMxYTQxOThiNGYyOWI2ODI2MWQzMWMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4NmRmYWI3OTM1ZTQxNjdhOGZjNTc0NzZiNjE5NjliID0gJCgnPGRpdiBpZD0iaHRtbF9kODZkZmFiNzkzNWU0MTY3YThmYzU3NDc2YjYxOTY5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBS1lVU0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyOGQ0Y2I1MjMxYTQxOThiNGYyOWI2ODI2MWQzMWMwLnNldENvbnRlbnQoaHRtbF9kODZkZmFiNzkzNWU0MTY3YThmYzU3NDc2YjYxOTY5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NkNzE0YWU3NmViMzQ0ZmE5Mjg5NWRjYjc2OTI2MDE0LmJpbmRQb3B1cChwb3B1cF9lMjhkNGNiNTIzMWE0MTk4YjRmMjliNjgyNjFkMzFjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZjFjYWUwMjA1ODk0MTA3Yjk2NmUwNTFmN2ZkYzBjOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy01LjA3Mjg5LDMyLjgxNDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3Yjg2Mjg0NGY0YTQ4MDI5MGRkYmI3MmVhZGNhZTI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxMDZhZWExYzcyYzRmNmY4ZTA2MDk4MmEyOGUyNjNkID0gJCgnPGRpdiBpZD0iaHRtbF9iMTA2YWVhMWM3MmM0ZjZmOGUwNjA5ODJhMjhlMjYzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBTVdFWkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3Yjg2Mjg0NGY0YTQ4MDI5MGRkYmI3MmVhZGNhZTI2LnNldENvbnRlbnQoaHRtbF9iMTA2YWVhMWM3MmM0ZjZmOGUwNjA5ODJhMjhlMjYzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmMWNhZTAyMDU4OTQxMDdiOTY2ZTA1MWY3ZmRjMGM4LmJpbmRQb3B1cChwb3B1cF8zN2I4NjI4NDRmNGE0ODAyOTBkZGJiNzJlYWRjYWUyNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zODgwMGUwNThhZTk0NDA2YTRhMDBkYzU5Y2RiYTgzNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS41NTA5LDEzLjk1NjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyMTYyMWJkYmU3ZTQyMDJiZTA2YWExNzhiNTA0NGNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxZDA1YzA2YzI4MDQ2NjliMTA1MjNiMmYwYzdjMzllID0gJCgnPGRpdiBpZD0iaHRtbF9iMWQwNWMwNmMyODA0NjY5YjEwNTIzYjJmMGM3YzM5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBTkVLQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjIxNjIxYmRiZTdlNDIwMmJlMDZhYTE3OGI1MDQ0Y2Uuc2V0Q29udGVudChodG1sX2IxZDA1YzA2YzI4MDQ2NjliMTA1MjNiMmYwYzdjMzllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzg4MDBlMDU4YWU5NDQwNmE0YTAwZGM1OWNkYmE4MzcuYmluZFBvcHVwKHBvcHVwX2IyMTYyMWJkYmU3ZTQyMDJiZTA2YWExNzhiNTA0NGNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA0M2NhNTQ0NTZiMTRhZDE4MjE4OWYyMjJkZGExMGYyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy43Nzk2NzEyNzI4LDMzLjcxMjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1OTkwMzc5YTg4YzRhMjNiNWIzMjNkZDZlZWI1ZjBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3YjRhNjQ5ZDhhMjQ2MDlhNGMzMGFmMDc5YjVlYTUxID0gJCgnPGRpdiBpZD0iaHRtbF8xN2I0YTY0OWQ4YTI0NjA5YTRjMzBhZjA3OWI1ZWE1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBTkdJWUE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1OTkwMzc5YTg4YzRhMjNiNWIzMjNkZDZlZWI1ZjBkLnNldENvbnRlbnQoaHRtbF8xN2I0YTY0OWQ4YTI0NjA5YTRjMzBhZjA3OWI1ZWE1MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA0M2NhNTQ0NTZiMTRhZDE4MjE4OWYyMjJkZGExMGYyLmJpbmRQb3B1cChwb3B1cF82NTk5MDM3OWE4OGM0YTIzYjViMzIzZGQ2ZWViNWYwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMjk3ZGQyMzk5M2Q0YTU0OTUxZGFhOWQzYWVjNWNlZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS43MTk1LDM1LjQyMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjY2QxMWFiMjk2MjRjYWY4N2ExZDRkYTU4Mjc2ZGE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MyN2U0ODE1OWFhZDRlNjI5NTgxZGVhMDg3YzRhZDQ2ID0gJCgnPGRpdiBpZD0iaHRtbF9jMjdlNDgxNTlhYWQ0ZTYyOTU4MWRlYTA4N2M0YWQ0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBTkpBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Y2NkMTFhYjI5NjI0Y2FmODdhMWQ0ZGE1ODI3NmRhNy5zZXRDb250ZW50KGh0bWxfYzI3ZTQ4MTU5YWFkNGU2Mjk1ODFkZWEwODdjNGFkNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMjk3ZGQyMzk5M2Q0YTU0OTUxZGFhOWQzYWVjNWNlZi5iaW5kUG9wdXAocG9wdXBfN2NjZDExYWIyOTYyNGNhZjg3YTFkNGRhNTgyNzZkYTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDIwZjliNTRhNmRhNDgxMzk3NzdjNWExNmNkNjFkZDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjE3NzYyNjkyNTkxLDMwLjE1MzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyYjQ0MDJkY2IzMzRjNmU5Njg1MTE2N2ZhMDE2OGUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5OTVlNTJjYzY3ODQ3ZDBiZjFiOTZmMTA3OGQyY2M5ID0gJCgnPGRpdiBpZD0iaHRtbF85OTk1ZTUyY2M2Nzg0N2QwYmYxYjk2ZjEwNzhkMmNjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyYjQ0MDJkY2IzMzRjNmU5Njg1MTE2N2ZhMDE2OGUyLnNldENvbnRlbnQoaHRtbF85OTk1ZTUyY2M2Nzg0N2QwYmYxYjk2ZjEwNzhkMmNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QyMGY5YjU0YTZkYTQ4MTM5Nzc3YzVhMTZjZDYxZGQ2LmJpbmRQb3B1cChwb3B1cF9jMmI0NDAyZGNiMzM0YzZlOTY4NTExNjdmYTAxNjhlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NDkzZWE2MzZiMmY0MTI3OGUwNDY4MDVjZDc3ZTFhNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4yNDI2LDM0Ljk1MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiYmFmYjI4OTBiZTRmODFiNTgyOWVkMWMxYTcwMzU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZThkYTdjZGE0MjQ4MTJiYTE0NWQzODk3YTMxMjkwID0gJCgnPGRpdiBpZD0iaHRtbF9iZGU4ZGE3Y2RhNDI0ODEyYmExNDVkMzg5N2EzMTI5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TllBU0E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiYmFmYjI4OTBiZTRmODFiNTgyOWVkMWMxYTcwMzU0LnNldENvbnRlbnQoaHRtbF9iZGU4ZGE3Y2RhNDI0ODEyYmExNDVkMzg5N2EzMTI5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc0OTNlYTYzNmIyZjQxMjc4ZTA0NjgwNWNkNzdlMWE3LmJpbmRQb3B1cChwb3B1cF9iYmJhZmIyODkwYmU0ZjgxYjU4MjllZDFjMWE3MDM1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZDYxNTliNDlmNDQ0ZjA1ODdkNDM1MjQ3MjNiNmQyNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjAwMDUsMjkuMzczNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTY0YWU0MmY2YTZhNDExNGJlMTc2YjYzNGJiY2E4NjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTE2YWE5ZDc4ZTc0NGIzNDkwZGU1MzAzNzM3ZTI0ZjAgPSAkKCc8ZGl2IGlkPSJodG1sXzUxNmFhOWQ3OGU3NDRiMzQ5MGRlNTMwMzczN2UyNGYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OWUlNQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY0YWU0MmY2YTZhNDExNGJlMTc2YjYzNGJiY2E4Njcuc2V0Q29udGVudChodG1sXzUxNmFhOWQ3OGU3NDRiMzQ5MGRlNTMwMzczN2UyNGYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWQ2MTU5YjQ5ZjQ0NGYwNTg3ZDQzNTI0NzIzYjZkMjcuYmluZFBvcHVwKHBvcHVwXzk2NGFlNDJmNmE2YTQxMTRiZTE3NmI2MzRiYmNhODY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUyMmE4MDI5NWY4NDQ1OTdhMzI3OWQ3YTBhYjkwNmZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMS43Mzc0MTY1ODQzNiwzMS42OTE0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMGEwYWQ1ZDY3ZTg0MTZhYTRkNjdjMmU0N2JhNjQzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTQ3MDE2ZTRhMzQ0ZmU3YjY5OWRiYjZjYmFmMjA4MCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2U0NzAxNmU0YTM0NGZlN2I2OTlkYmI2Y2JhZjIwODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ZT1JPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMGEwYWQ1ZDY3ZTg0MTZhYTRkNjdjMmU0N2JhNjQzZi5zZXRDb250ZW50KGh0bWxfY2U0NzAxNmU0YTM0NGZlN2I2OTlkYmI2Y2JhZjIwODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MjJhODAyOTVmODQ0NTk3YTMyNzlkN2EwYWI5MDZmZC5iaW5kUG9wdXAocG9wdXBfMDBhMGFkNWQ2N2U4NDE2YWE0ZDY3YzJlNDdiYTY0M2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzY0MWJlNmM2ODRjNDc0ZTg5NThhYWYyZDY0ZWI2YWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjcxODcwNDgxOTYyLDIyLjgyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDA3NmMzYzhjYTg1NGQ4OTgyMzRmZGQ2ODU3ODU2Y2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQyZGMwMGY0YTU3NDcxOWIzZmFlY2M1MGM2ZTA2YTAgPSAkKCc8ZGl2IGlkPSJodG1sXzU0MmRjMDBmNGE1NzQ3MTliM2ZhZWNjNTBjNmUwNmEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OWkFOS0FSQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA3NmMzYzhjYTg1NGQ4OTgyMzRmZGQ2ODU3ODU2Y2Quc2V0Q29udGVudChodG1sXzU0MmRjMDBmNGE1NzQ3MTliM2ZhZWNjNTBjNmUwNmEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzY0MWJlNmM2ODRjNDc0ZTg5NThhYWYyZDY0ZWI2YWMuYmluZFBvcHVwKHBvcHVwX2QwNzZjM2M4Y2E4NTRkODk4MjM0ZmRkNjg1Nzg1NmNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMzNWI1YTNhZGQ2ZTRhNmNhMTc1ZDI2NWQxZmY2ZjE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yMTg0NTEyOTU4Nyw4LjQxODg2NjIyODY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Y2M3OTFjYjA2OTk0YWZkOGM3NmJmMDVhZjBmOTRlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYzJhYWVkODliY2U0YjQxOTBjZGJmMDkyMmZlZDhiMSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmMyYWFlZDg5YmNlNGI0MTkwY2RiZjA5MjJmZWQ4YjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9ET0RPUDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNjNzkxY2IwNjk5NGFmZDhjNzZiZjA1YWYwZjk0ZTEuc2V0Q29udGVudChodG1sX2JjMmFhZWQ4OWJjZTRiNDE5MGNkYmYwOTIyZmVkOGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzM1YjVhM2FkZDZlNGE2Y2ExNzVkMjY1ZDFmZjZmMTUuYmluZFBvcHVwKHBvcHVwXzZjYzc5MWNiMDY5OTRhZmQ4Yzc2YmYwNWFmMGY5NGUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA4M2RiYmZjMzJhNTQ4Y2ViMDRmMzQ1OTBiOGJmMDU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi41MzAxMTAxMjM3OSw0NC4xMDEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZDlkZDVjZDNjNmU0YzMyYWZiYjM0YTA5NzQ1NjEyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmM2ZjVhNzA0OGU0Y2Y4OTliZTJlMjkwYjJlNzFlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmJjNmY1YTcwNDhlNGNmODk5YmUyZTI5MGIyZTcxZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9HQURFTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQ5ZGQ1Y2QzYzZlNGMzMmFmYmIzNGEwOTc0NTYxMjcuc2V0Q29udGVudChodG1sX2ZiYzZmNWE3MDQ4ZTRjZjg5OWJlMmUyOTBiMmU3MWU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDgzZGJiZmMzMmE1NDhjZWIwNGYzNDU5MGI4YmYwNTUuYmluZFBvcHVwKHBvcHVwX2FkOWRkNWNkM2M2ZTRjMzJhZmJiMzRhMDk3NDU2MTI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY0Mjk4MjcwZGJjZDRkMDJiMGE2MDg2YzhlNGZiOWQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIxLjcxNjYsMjQuMzAzNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTVkY2E4YWU1NGQ4NDU0OWJjNzQ2MGNkMmM2YzgzOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NjZDM4NWNiNTM3NDE5Mjg5NTZiOGY2MzE1NzkwZmQgPSAkKCc8ZGl2IGlkPSJodG1sXzNjY2QzODVjYjUzNzQxOTI4OTU2YjhmNjMxNTc5MGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PSEVLV0U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1ZGNhOGFlNTRkODQ1NDliYzc0NjBjZDJjNmM4MzkyLnNldENvbnRlbnQoaHRtbF8zY2NkMzg1Y2I1Mzc0MTkyODk1NmI4ZjYzMTU3OTBmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0Mjk4MjcwZGJjZDRkMDJiMGE2MDg2YzhlNGZiOWQ4LmJpbmRQb3B1cChwb3B1cF85NWRjYThhZTU0ZDg0NTQ5YmM3NDYwY2QyYzZjODM5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NjM2OThhMWM4MzM0N2Y3OThmYWRmNzMwMDRiNDkwNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjM2MTYsMTcuOTU2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTE5Njc4ZWM0NDVkNDhjYTk3MDliODcwZTZmYjIzNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmNjN2Q1NzgzY2IzNGI0M2IxZDk5ZjViMDI1OTY5NzMgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjYzdkNTc4M2NiMzRiNDNiMWQ5OWY1YjAyNTk2OTczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PS09STzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE5Njc4ZWM0NDVkNDhjYTk3MDliODcwZTZmYjIzNDIuc2V0Q29udGVudChodG1sX2ZjYzdkNTc4M2NiMzRiNDNiMWQ5OWY1YjAyNTk2OTczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTYzNjk4YTFjODMzNDdmNzk4ZmFkZjczMDA0YjQ5MDUuYmluZFBvcHVwKHBvcHVwX2ExOTY3OGVjNDQ1ZDQ4Y2E5NzA5Yjg3MGU2ZmIyMzQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U0MjZkMzYyOGRlYTRmMzM5N2FmOGFhMWFhMmEwYWY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi41MDg4MjU4MTQxMywzNy4zNjI2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNGM0MDhiYjY2MGM0M2VkYTAyNmMxYWY0NzFlNTEyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmZiNmE5NjQ3OTU0NTVmOGY0YmNkYjE3Njg3MDY3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMWJmYjZhOTY0Nzk1NDU1ZjhmNGJjZGIxNzY4NzA2NzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9NRVRPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGM0MDhiYjY2MGM0M2VkYTAyNmMxYWY0NzFlNTEyZS5zZXRDb250ZW50KGh0bWxfMWJmYjZhOTY0Nzk1NDU1ZjhmNGJjZGIxNzY4NzA2NzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNDI2ZDM2MjhkZWE0ZjMzOTdhZjhhYTFhYTJhMGFmNy5iaW5kUG9wdXAocG9wdXBfMDRjNDA4YmI2NjBjNDNlZGEwMjZjMWFmNDcxZTUxMmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWQwODg1ZmY4ODU4NDQyNzkwZjU1MjlmYzkwNTcwN2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjU3NTE0NjYwNDQ4LDguMzU4MTc0MTU0OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjE5ZWRmMjhhMjhjNDlkYWI5ZTZlZDg0Y2Y4ZTc5YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjg0MmRjZDczN2IwNDFiMDk3YTEwZGNhZTc5ZTY5MGYgPSAkKCc8ZGl2IGlkPSJodG1sX2I4NDJkY2Q3MzdiMDQxYjA5N2ExMGRjYWU3OWU2OTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PUlJJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTllZGYyOGEyOGM0OWRhYjllNmVkODRjZjhlNzlhMS5zZXRDb250ZW50KGh0bWxfYjg0MmRjZDczN2IwNDFiMDk3YTEwZGNhZTc5ZTY5MGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZDA4ODVmZjg4NTg0NDI3OTBmNTUyOWZjOTA1NzA3ZS5iaW5kUG9wdXAocG9wdXBfZjE5ZWRmMjhhMjhjNDlkYWI5ZTZlZDg0Y2Y4ZTc5YTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzU5MzM4ZGM5ODFjNDI4Zjk3ZDY5MGQ3YmNjYmY4NzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4xODQsMzIuNTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyNjZiMThjNWMxYzQ3ZmNiMzYzNmFjM2ZjMzg1ZjA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmMDFjZDZkNGMwYjQ4NDNhODliM2E4MTE4NTcwNzkyID0gJCgnPGRpdiBpZD0iaHRtbF9iZjAxY2Q2ZDRjMGI0ODQzYTg5YjNhODExODU3MDc5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFEQU5HPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjY2YjE4YzVjMWM0N2ZjYjM2MzZhYzNmYzM4NWYwNC5zZXRDb250ZW50KGh0bWxfYmYwMWNkNmQ0YzBiNDg0M2E4OWIzYTgxMTg1NzA3OTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNTkzMzhkYzk4MWM0MjhmOTdkNjkwZDdiY2NiZjg3MS5iaW5kUG9wdXAocG9wdXBfODI2NmIxOGM1YzFjNDdmY2IzNjM2YWMzZmMzODVmMDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjVmNGJlMmIyYmYxNGYwMDhkMGNjMzI3ZDMwMWNiYmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszLjM2MTczNzcwNTI2LDE3LjAyMjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyODE5MGEyY2EyNDQyOWU4ODY4ODZmNDkzNTk0MWRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwYmExNDljMDRiZDRkNjI5ZGQzNmRjZDQxMGJmOTUyID0gJCgnPGRpdiBpZD0iaHRtbF83MGJhMTQ5YzA0YmQ0ZDYyOWRkMzZkY2Q0MTBiZjk1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFOREU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyODE5MGEyY2EyNDQyOWU4ODY4ODZmNDkzNTk0MWRlLnNldENvbnRlbnQoaHRtbF83MGJhMTQ5YzA0YmQ0ZDYyOWRkMzZkY2Q0MTBiZjk1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI1ZjRiZTJiMmJmMTRmMDA4ZDBjYzMyN2QzMDFjYmJlLmJpbmRQb3B1cChwb3B1cF81MjgxOTBhMmNhMjQ0MjllODg2ODg2ZjQ5MzU5NDFkZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NzcwM2IxNjBmMzI0Mjk5OGQzMTgyMjBiMmI2Nzc2MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy00LjEwNjg0LDM3Ljg5NjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyYTMxMzc5YWJlNzQyNmQ5NzZiY2MzNzVjZjk2N2Y1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzM2JjNDBlMWUxNTQ5MTg5ZDIyMzJkNGJlM2U3ODg0ID0gJCgnPGRpdiBpZD0iaHRtbF85MzNiYzQwZTFlMTU0OTE4OWQyMjMyZDRiZTNlNzg4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFSRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTJhMzEzNzlhYmU3NDI2ZDk3NmJjYzM3NWNmOTY3ZjUuc2V0Q29udGVudChodG1sXzkzM2JjNDBlMWUxNTQ5MTg5ZDIyMzJkNGJlM2U3ODg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzc3MDNiMTYwZjMyNDI5OThkMzE4MjIwYjJiNjc3NjIuYmluZFBvcHVwKHBvcHVwXzUyYTMxMzc5YWJlNzQyNmQ5NzZiY2MzNzVjZjk2N2Y1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY3MTlhZTVlYWMxZDRkZThhZmQ1Njg1ZmI2YjJjZWYyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4zMTg1ODc0MjY3MSwzMi42OTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTlkOTliMWE3OGQ0NzFmOTA2M2RlNjA4ZDhjZGFhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjc1MTY0NDRhYzM0MGFkODE2YTE2OGViYzllNGI5MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTY3NTE2NDQ0YWMzNDBhZDgxNmExNjhlYmM5ZTRiOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBUkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1OWQ5OWIxYTc4ZDQ3MWY5MDYzZGU2MDhkOGNkYWE3LnNldENvbnRlbnQoaHRtbF9hNjc1MTY0NDRhYzM0MGFkODE2YTE2OGViYzllNGI5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY3MTlhZTVlYWMxZDRkZThhZmQ1Njg1ZmI2YjJjZWYyLmJpbmRQb3B1cChwb3B1cF9kNTlkOTliMWE3OGQ0NzFmOTA2M2RlNjA4ZDhjZGFhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MzI2OTY5YjI0MzI0YjA4OTRhMzQwZDgzZjMwYTljZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yNS45MjA3LDI5LjgxMjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwOTlmY2VkYmE1OTRkNjI4Yzg5NTViMzg4MGMzOTYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5OGI2NTcwMzNlMjQwMmU4NWQ4YjFhNzRmNzMyMzA0ID0gJCgnPGRpdiBpZD0iaHRtbF8zOThiNjU3MDMzZTI0MDJlODVkOGIxYTc0ZjczMjMwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEVESTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjA5OWZjZWRiYTU5NGQ2MjhjODk1NWIzODgwYzM5NjMuc2V0Q29udGVudChodG1sXzM5OGI2NTcwMzNlMjQwMmU4NWQ4YjFhNzRmNzMyMzA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDMyNjk2OWIyNDMyNGIwODk0YTM0MGQ4M2YzMGE5Y2QuYmluZFBvcHVwKHBvcHVwX2IwOTlmY2VkYmE1OTRkNjI4Yzg5NTViMzg4MGMzOTYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA4MzJmMjdlOGRkNzRjNzY4NTA3ZGQ5M2MxNTAzMDI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMTgxNzEsMzkuNzU3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDYxMThhMjNhNDU4NDFiM2FjMDA1ZDQ3MzFlZjIxYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2E2MzgwMGE0Njk0NDZkOTgxNTc2YWQwODg4YmIyNWIgPSAkKCc8ZGl2IGlkPSJodG1sXzNhNjM4MDBhNDY5NDQ2ZDk4MTU3NmFkMDg4OGJiMjViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QRU1CQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDYxMThhMjNhNDU4NDFiM2FjMDA1ZDQ3MzFlZjIxYzEuc2V0Q29udGVudChodG1sXzNhNjM4MDBhNDY5NDQ2ZDk4MTU3NmFkMDg4OGJiMjViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDgzMmYyN2U4ZGQ3NGM3Njg1MDdkZDkzYzE1MDMwMjguYmluZFBvcHVwKHBvcHVwXzQ2MTE4YTIzYTQ1ODQxYjNhYzAwNWQ0NzMxZWYyMWMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkyYmQ2NTI4YTVjODRhNDdhNGFhNzYzMDBmMTQwYmY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMDM2MTIsMTkuNzE4NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODgwZmZiY2Y0YzU1NDI3NGJmNmMzM2Y1ZmYyZWEwNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjU2MDM5OThlZGFhNGRmN2E4NjJjNGM5YmEzNjA5NWMgPSAkKCc8ZGl2IGlkPSJodG1sXzI1NjAzOTk4ZWRhYTRkZjdhODYyYzRjOWJhMzYwOTVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QRU5ERTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODgwZmZiY2Y0YzU1NDI3NGJmNmMzM2Y1ZmYyZWEwNDkuc2V0Q29udGVudChodG1sXzI1NjAzOTk4ZWRhYTRkZjdhODYyYzRjOWJhMzYwOTVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTJiZDY1MjhhNWM4NGE0N2E0YWE3NjMwMGYxNDBiZjYuYmluZFBvcHVwKHBvcHVwXzg4MGZmYmNmNGM1NTQyNzRiZjZjMzNmNWZmMmVhMDQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk4N2VmMjk4M2VkNTRiNmI4YWQwMDZkZWUxNjliYmEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMDQ3NCwtMTUuOTM4NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmVlOTAyMjRiZjNjNDJhYzhhMDJkMjFmNGQ3YTc2MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM5NTUwMDVmNDIyNDAwMWJhODg2OTY0ODRkZmRlZjUgPSAkKCc8ZGl2IGlkPSJodG1sX2YzOTU1MDA1ZjQyMjQwMDFiYTg4Njk2NDg0ZGZkZWY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QRVBFTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmVlOTAyMjRiZjNjNDJhYzhhMDJkMjFmNGQ3YTc2Mjcuc2V0Q29udGVudChodG1sX2YzOTU1MDA1ZjQyMjQwMDFiYTg4Njk2NDg0ZGZkZWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTg3ZWYyOTgzZWQ1NGI2YjhhZDAwNmRlZTE2OWJiYTIuYmluZFBvcHVwKHBvcHVwXzZlZTkwMjI0YmYzYzQyYWM4YTAyZDIxZjRkN2E3NjI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiZTQ3OGYyNWUzMzQxNDBhZGY2NDM1MTJhMTYwN2U4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMTY4NzMsMzEuNjA0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDM1ZDViMGExOTk0NTliODM5OGMzYzkxOWUzNGU2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83N2IyNmMxZjQ1OWY0Y2VkYjc1MDkzNjNiNzc0NjE3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzdiMjZjMWY0NTlmNGNlZGI3NTA5MzYzYjc3NDYxNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBJTUJXRTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTAzNWQ1YjBhMTk5NDU5YjgzOThjM2M5MTllMzRlNmUuc2V0Q29udGVudChodG1sXzc3YjI2YzFmNDU5ZjRjZWRiNzUwOTM2M2I3NzQ2MTcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWJlNDc4ZjI1ZTMzNDE0MGFkZjY0MzUxMmExNjA3ZTguYmluZFBvcHVwKHBvcHVwX2UwMzVkNWIwYTE5OTQ1OWI4Mzk4YzNjOTE5ZTM0ZTZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNkMTJlYTAzNzkxZjQwMmI4OWQ3NTk4M2UzYTc1MTMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMDU1NywxNC4xMjk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYWQxZmQ1YWJkNDI0MjJlYWY4YzliZjczMDQ0ZTkxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMjdjNjQwNTRmNjk0ZWJkOGNiZmVlZDdlM2M4MGUzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTI3YzY0MDU0ZjY5NGViZDhjYmZlZWQ3ZTNjODBlM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBPRE9LV088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhZDFmZDVhYmQ0MjQyMmVhZjhjOWJmNzMwNDRlOTFlLnNldENvbnRlbnQoaHRtbF8xMjdjNjQwNTRmNjk0ZWJkOGNiZmVlZDdlM2M4MGUzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNkMTJlYTAzNzkxZjQwMmI4OWQ3NTk4M2UzYTc1MTMwLmJpbmRQb3B1cChwb3B1cF9hYWQxZmQ1YWJkNDI0MjJlYWY4YzliZjczMDQ0ZTkxZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYzgyNzgyMmQ1MDQ0OTI0YjQ0MDNjODA0YThkNjUwOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy04Ljc5MzczLDM2LjY1NjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiMThkNmE3MDMwMTRlYzBiYzVkYjc1NjQwMWU5MTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViZmViZTI1ZmE2MDRhZDNiNTY4YTRhYTExMzc0M2MzID0gJCgnPGRpdiBpZD0iaHRtbF9lYmZlYmUyNWZhNjA0YWQzYjU2OGE0YWExMTM3NDNjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9HT1JPPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjE4ZDZhNzAzMDE0ZWMwYmM1ZGI3NTY0MDFlOTE1My5zZXRDb250ZW50KGh0bWxfZWJmZWJlMjVmYTYwNGFkM2I1NjhhNGFhMTEzNzQzYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYzgyNzgyMmQ1MDQ0OTI0YjQ0MDNjODA0YThkNjUwOC5iaW5kUG9wdXAocG9wdXBfM2IxOGQ2YTcwMzAxNGVjMGJjNWRiNzU2NDAxZTkxNTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2EyMzNiYjBmZDZmNGJkZjhkOTNjZDAyNWQ1NGU4MWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMC45NTM5NzUsMzkuODIyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2I3Zjk5MmIxZTk5NDg5YWE5YWZkNTZmODRkODExYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI3ZGYxYmExMjcyNDg0NzhhNDUxYWQyY2RjNWFlMTcgPSAkKCc8ZGl2IGlkPSJodG1sX2YyN2RmMWJhMTI3MjQ4NDc4YTQ1MWFkMmNkYzVhZTE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QT0tPTU88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiN2Y5OTJiMWU5OTQ4OWFhOWFmZDU2Zjg0ZDgxMWE4LnNldENvbnRlbnQoaHRtbF9mMjdkZjFiYTEyNzI0ODQ3OGE0NTFhZDJjZGM1YWUxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNhMjMzYmIwZmQ2ZjRiZGY4ZDkzY2QwMjVkNTRlODFiLmJpbmRQb3B1cChwb3B1cF9jYjdmOTkyYjFlOTk0ODlhYTlhZmQ1NmY4NGQ4MTFhOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZGQ2NzEwMmI0ZGM0ZjcxODQxYjVkNzk5NTg4Mzk1MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0zMS4zODk0LDI5LjMxMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1YTIzMTlhODNlNTRkY2FiNzQyNjExMzAxN2MxNjIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1M2E4ZGM0NzlkZDQyZmI4NGM2YjQ3N2MwYzVlYjA5ID0gJCgnPGRpdiBpZD0iaHRtbF80NTNhOGRjNDc5ZGQ0MmZiODRjNmI0NzdjMGM1ZWIwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9ORE88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1YTIzMTlhODNlNTRkY2FiNzQyNjExMzAxN2MxNjIyLnNldENvbnRlbnQoaHRtbF80NTNhOGRjNDc5ZGQ0MmZiODRjNmI0NzdjMGM1ZWIwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkZDY3MTAyYjRkYzRmNzE4NDFiNWQ3OTk1ODgzOTUzLmJpbmRQb3B1cChwb3B1cF9kNWEyMzE5YTgzZTU0ZGNhYjc0MjYxMTMwMTdjMTYyMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNjIxY2FmYjk3MWI0M2I3OGJjNDg5YTM3MThmNzgwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzYuMzk0ODE2NjExMywxLjg4NDc2NTQ5OTE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjIyMjhkNmI0ZmM0ZjZiODdhYzAyZDMxZDMwZmNjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NDNmMGMzNDQ4YTU0MGE2YjY4MTFmMmYyMjgwZjFlZSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTQzZjBjMzQ0OGE1NDBhNmI2ODExZjJmMjI4MGYxZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBPUE88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2MjIyOGQ2YjRmYzRmNmI4N2FjMDJkMzFkMzBmY2M1LnNldENvbnRlbnQoaHRtbF85NDNmMGMzNDQ4YTU0MGE2YjY4MTFmMmYyMjgwZjFlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI2MjFjYWZiOTcxYjQzYjc4YmM0ODlhMzcxOGY3ODBjLmJpbmRQb3B1cChwb3B1cF9iNjIyMjhkNmI0ZmM0ZjZiODdhYzAyZDMxZDMwZmNjNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xM2ZiNDUxY2NkNGY0NjM2YjE0ZDBkZThmMWJjMDY5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEuOTkzNTQ3NTUzNDcsMjYuMTcwOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ5NDU2YzU1YWFjNDQ1MzkxZjcyNDQ2NWE4ZDMxZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDBhZjc2MWFiZTA3NGY1OTk0N2I0ODQ3YjdlY2ZmMTEgPSAkKCc8ZGl2IGlkPSJodG1sXzQwYWY3NjFhYmUwNzRmNTk5NDdiNDg0N2I3ZWNmZjExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QT1BPSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQ5NDU2YzU1YWFjNDQ1MzkxZjcyNDQ2NWE4ZDMxZmQuc2V0Q29udGVudChodG1sXzQwYWY3NjFhYmUwNzRmNTk5NDdiNDg0N2I3ZWNmZjExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTNmYjQ1MWNjZDRmNDYzNmIxNGQwZGU4ZjFiYzA2OTUuYmluZFBvcHVwKHBvcHVwX2E0OTQ1NmM1NWFhYzQ0NTM5MWY3MjQ0NjVhOGQzMWZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJhODQxYWZlODA4ZDRhM2Q5ZjBhNmViMWMwNWIyOTdiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMi4xNDIxNDgxOTE3NiwyMi4wMjkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Y2RlZmZmM2VkZjA0MjY0ODQwMDg4NWQxZTQ1M2UwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjFjMGU0ZDFlYTY0OGI5YmQwZjQ1NDExMWNiOGZhYyA9ICQoJzxkaXYgaWQ9Imh0bWxfOWIxYzBlNGQxZWE2NDhiOWJkMGY0NTQxMTFjYjhmYWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBPVE88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjZGVmZmYzZWRmMDQyNjQ4NDAwODg1ZDFlNDUzZTBkLnNldENvbnRlbnQoaHRtbF85YjFjMGU0ZDFlYTY0OGI5YmQwZjQ1NDExMWNiOGZhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJhODQxYWZlODA4ZDRhM2Q5ZjBhNmViMWMwNWIyOTdiLmJpbmRQb3B1cChwb3B1cF83Y2RlZmZmM2VkZjA0MjY0ODQwMDg4NWQxZTQ1M2UwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZDViY2Q4Yzk2ZjQ0ODI2ODdhZjk0MTkwNjNiODdkNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzEuNzMzMzkzNTIzNTYsOS44MTE5MTA2MDM1NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2U4NGE4OGU5OWVhNDk3NDgwZDEzNDJjY2I1YTgyYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhhNGEwODk2NzIxNGI0ZWEwZjRhM2E5Y2JlZGFmNjMgPSAkKCc8ZGl2IGlkPSJodG1sXzA4YTRhMDg5NjcyMTRiNGVhMGY0YTNhOWNiZWRhZjYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QVUtVPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZTg0YTg4ZTk5ZWE0OTc0ODBkMTM0MmNjYjVhODJhZi5zZXRDb250ZW50KGh0bWxfMDhhNGEwODk2NzIxNGI0ZWEwZjRhM2E5Y2JlZGFmNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZDViY2Q4Yzk2ZjQ0ODI2ODdhZjk0MTkwNjNiODdkNS5iaW5kUG9wdXAocG9wdXBfY2U4NGE4OGU5OWVhNDk3NDgwZDEzNDJjY2I1YTgyYWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODc3YWUwYTc2MzhjNDUyYzgxYmI3MGIyMDhhMTgxY2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNC42MzA4MSwzNi4wMzY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDU2ODJmYTE1Yzk0MzgzOTVmYWMwOWQ5YTIwMmY0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTA2ZmMzYzM1MjM0MDJmOGFhOTI3MTc3YjkzYzE0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTUwNmZjM2MzNTIzNDAyZjhhYTkyNzE3N2I5M2MxNDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJBTkdJPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDU2ODJmYTE1Yzk0MzgzOTVmYWMwOWQ5YTIwMmY0My5zZXRDb250ZW50KGh0bWxfMTUwNmZjM2MzNTIzNDAyZjhhYTkyNzE3N2I5M2MxNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NzdhZTBhNzYzOGM0NTJjODFiYjcwYjIwOGExODFjZS5iaW5kUG9wdXAocG9wdXBfNWQ1NjgyZmExNWM5NDM4Mzk1ZmFjMDlkOWEyMDJmNDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWExZDU3MGY1NzhhNDQ2ODllZTJiMzYxZDRkNjExMTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMi45MzIwMywyNy43MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkMmNjNDg5YTE2NzQ0ODg4MGUwMGJiNzJiNTA4NjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0OWY4NDgxNGU2NzRlNWE4NTk5NjE3OTg1NTI1NDg3ID0gJCgnPGRpdiBpZD0iaHRtbF8xNDlmODQ4MTRlNjc0ZTVhODU5OTYxNzk4NTUyNTQ4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UkVHQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQyY2M0ODlhMTY3NDQ4ODgwZTAwYmI3MmI1MDg2MTUuc2V0Q29udGVudChodG1sXzE0OWY4NDgxNGU2NzRlNWE4NTk5NjE3OTg1NTI1NDg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWExZDU3MGY1NzhhNDQ2ODllZTJiMzYxZDRkNjExMTkuYmluZFBvcHVwKHBvcHVwX2JkMmNjNDg5YTE2NzQ0ODg4MGUwMGJiNzJiNTA4NjE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE5NTIzMzJlZDhjYjRkODI4M2JhYjZkNjc4YTBkNDBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuODUzMywtMTIuMTY0OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDg1NmUwOGExM2RhNGY2MjkyMmEyZDBkMmUwZjRkYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM2OTg5M2Q0MDJiNGY4N2IyOTgyMzA1YzhkMDMzYmQgPSAkKCc8ZGl2IGlkPSJodG1sX2IzNjk4OTNkNDAyYjRmODdiMjk4MjMwNWM4ZDAzM2JkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SRUdFSUJBVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDg1NmUwOGExM2RhNGY2MjkyMmEyZDBkMmUwZjRkYTEuc2V0Q29udGVudChodG1sX2IzNjk4OTNkNDAyYjRmODdiMjk4MjMwNWM4ZDAzM2JkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTk1MjMzMmVkOGNiNGQ4MjgzYmFiNmQ2NzhhMGQ0MGEuYmluZFBvcHVwKHBvcHVwXzQ4NTZlMDhhMTNkYTRmNjI5MjJhMmQwZDJlMGY0ZGExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I4ZmUxY2QxYjZhOTQxZGY4YmEzNWYzYTkyNzJlZjk1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMy40NzAyMjU3MDMwMywzNi45NjkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmI4ODE2NzVhYTU0NzQ0YjYxYzZkZTVjNDE1MTE0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDBlOWE4ZmYxZjM0MmY0YjhkY2M4YzdjMTA1MjhhNiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2QwZTlhOGZmMWYzNDJmNGI4ZGNjOGM3YzEwNTI4YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFTkRJTEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiYjg4MTY3NWFhNTQ3NDRiNjFjNmRlNWM0MTUxMTRmLnNldENvbnRlbnQoaHRtbF83ZDBlOWE4ZmYxZjM0MmY0YjhkY2M4YzdjMTA1MjhhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I4ZmUxY2QxYjZhOTQxZGY4YmEzNWYzYTkyNzJlZjk1LmJpbmRQb3B1cChwb3B1cF9mYmI4ODE2NzVhYTU0NzQ0YjYxYzZkZTVjNDE1MTE0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MGRjYjU0YzljMmQ0NDQyODEyNmVhMTAxODI1MmUwMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzExLjE1Niw0LjY5ODk3NzAyODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2ZjA2ZWZkODAwMjQ5ZmE4MDk5Mjk2MWUyMGQ4ZjJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiMjYyOWJhN2ZjODRhYzI5MGQxMmNiNzY2MzZhNDNiID0gJCgnPGRpdiBpZD0iaHRtbF82YjI2MjliYTdmYzg0YWMyOTBkMTJjYjc2NjM2YTQzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UkVTSEU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2ZjA2ZWZkODAwMjQ5ZmE4MDk5Mjk2MWUyMGQ4ZjJjLnNldENvbnRlbnQoaHRtbF82YjI2MjliYTdmYzg0YWMyOTBkMTJjYjc2NjM2YTQzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcwZGNiNTRjOWMyZDQ0NDI4MTI2ZWExMDE4MjUyZTAxLmJpbmRQb3B1cChwb3B1cF9jNmYwNmVmZDgwMDI0OWZhODA5OTI5NjFlMjBkOGYyYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZjkwZmI0ZTM4ZDg0NjYxODVjMjU4YjM5NzI0NDI0ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQuOTIxNDQ3NDkyNTIsMzYuMzA4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDk1ZWQ2MDRhOWU4NGJjMWIwYzUyOWNmMWRjOTI5YjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThjOGNhOWM3MmJkNDBhYmE3N2FkZjZiNjM2OTc1ZTcgPSAkKCc8ZGl2IGlkPSJodG1sXzU4YzhjYTljNzJiZDQwYWJhNzdhZGY2YjYzNjk3NWU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SRVNISUFUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTVlZDYwNGE5ZTg0YmMxYjBjNTI5Y2YxZGM5MjliMC5zZXRDb250ZW50KGh0bWxfNThjOGNhOWM3MmJkNDBhYmE3N2FkZjZiNjM2OTc1ZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZjkwZmI0ZTM4ZDg0NjYxODVjMjU4YjM5NzI0NDI0ZS5iaW5kUG9wdXAocG9wdXBfZDk1ZWQ2MDRhOWU4NGJjMWIwYzUyOWNmMWRjOTI5YjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2I3NzE4MWVjZjlhNDQwN2I4NTFlZDVmNmVmZjM3YjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC43OTA4LC0zLjcxODI5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNTc4ZTRmZDhhNWY0M2VhYmVlMDcwZjJlZWQ5YmNiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YWViMGVmZmFkNmQ0MGQ5OWI4YTA0ZWU1ZWRhNThkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWFlYjBlZmZhZDZkNDBkOTliOGEwNGVlNWVkYTU4ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJJRjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjU3OGU0ZmQ4YTVmNDNlYWJlZTA3MGYyZWVkOWJjYmQuc2V0Q29udGVudChodG1sXzVhZWIwZWZmYWQ2ZDQwZDk5YjhhMDRlZTVlZGE1OGRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2I3NzE4MWVjZjlhNDQwN2I4NTFlZDVmNmVmZjM3YjguYmluZFBvcHVwKHBvcHVwXzI1NzhlNGZkOGE1ZjQzZWFiZWUwNzBmMmVlZDliY2JkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE1ZTU1YTRhZTA1YzRiM2E5Y2UzM2E2ZjI1Y2UzODg1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjkuMzk0NiwxMi4zNDM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODA4MWVkZDk2N2U0Y2I2OTQ5MGFhOTY3YzkyZjk5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMWVkZmEwOThlMTY0NzIwYTkyYWU5MGZiNDZiNzc3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTFlZGZhMDk4ZTE2NDcyMGE5MmFlOTBmYjQ2Yjc3NzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJJWUFIPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wODA4MWVkZDk2N2U0Y2I2OTQ5MGFhOTY3YzkyZjk5Mi5zZXRDb250ZW50KGh0bWxfZTFlZGZhMDk4ZTE2NDcyMGE5MmFlOTBmYjQ2Yjc3NzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNWU1NWE0YWUwNWM0YjNhOWNlMzNhNmYyNWNlMzg4NS5iaW5kUG9wdXAocG9wdXBfMDgwODFlZGQ5NjdlNGNiNjk0OTBhYTk2N2M5MmY5OTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGMwODg2YzlhOWMyNDc1NmEzY2NlOTA1MTY0ODhhMWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMjYuOTE2OCwyNS41NjU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTJiNTMyNGM2MzM0ZjViODMxM2Y4YTRlYTIzOTI5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYzUzNTdkZWMxYjU0YmI5YTMxYjIxNTBkMTIwZjRiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGM1MzU3ZGVjMWI1NGJiOWEzMWIyMTUwZDEyMGY0YjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJPTE9ORzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2EyYjUzMjRjNjMzNGY1YjgzMTNmOGE0ZWEyMzkyOTUuc2V0Q29udGVudChodG1sX2RjNTM1N2RlYzFiNTRiYjlhMzFiMjE1MGQxMjBmNGIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGMwODg2YzlhOWMyNDc1NmEzY2NlOTA1MTY0ODhhMWYuYmluZFBvcHVwKHBvcHVwXzdhMmI1MzI0YzYzMzRmNWI4MzEzZjhhNGVhMjM5Mjk1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAyZDQ4ZDNhY2Y3NTQwY2Q5OTJmNTcyN2NmZTUxOTUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI2LjUxODEsMzIuNDIzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfYzYwN2JkN2ZlYTU1NDZjMGIyM2ExZjZhMGU5ZmFmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTRkYmFmOTE1OGRiNDBjZDg2MjkzY2I2YmM3NmE0MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTAxZDIwMDg5YzdjNDU0YmFhYjU1MTZhOWMzMjk3ZDUgPSAkKCc8ZGl2IGlkPSJodG1sXzUwMWQyMDA4OWM3YzQ1NGJhYWI1NTE2YTljMzI5N2Q1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ST05HQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRkYmFmOTE1OGRiNDBjZDg2MjkzY2I2YmM3NmE0MWMuc2V0Q29udGVudChodG1sXzUwMWQyMDA4OWM3YzQ1NGJhYWI1NTE2YTljMzI5N2Q1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDJkNDhkM2FjZjc1NDBjZDk5MmY1NzI3Y2ZlNTE5NTIuYmluZFBvcHVwKHBvcHVwX2E0ZGJhZjkxNThkYjQwY2Q4NjI5M2NiNmJjNzZhNDFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZiNjgxY2NhYzk3MTQ1NDBiNWYxYmE2NGUyZGM0ZDMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuOTMxMSwyOS45MzU0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmU3M2MyMzc3ZGM0Y2FkODFhZmE1MmRkMmQ5ZGVhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjBhZTZmMDJkOTY0YmNmYjI2ZDUyODVlYjdiNzExYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDYwYWU2ZjAyZDk2NGJjZmIyNmQ1Mjg1ZWI3YjcxMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJVQU5EQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJlNzNjMjM3N2RjNGNhZDgxYWZhNTJkZDJkOWRlYWIuc2V0Q29udGVudChodG1sXzA2MGFlNmYwMmQ5NjRiY2ZiMjZkNTI4NWViN2I3MTFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmI2ODFjY2FjOTcxNDU0MGI1ZjFiYTY0ZTJkYzRkMzIuYmluZFBvcHVwKHBvcHVwXzZiZTczYzIzNzdkYzRjYWQ4MWFmYTUyZGQyZDlkZWFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUzM2Y2MmRiNmFjNTQ4N2E5ODRhZDA0MjY3YWRmMGUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMzIyNiw1LjkxMTU5NzUyMjE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOTUxNWNmZGEyNjg0NmI5YWM3NDlhOWRmYjIyOWU3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTNiNzQwMTAzNmQ0N2NmOThlZjQ0ZDM1M2NiZTg0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTUzYjc0MDEwMzZkNDdjZjk4ZWY0NGQzNTNjYmU4NDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJVQVJIQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjk1MTVjZmRhMjY4NDZiOWFjNzQ5YTlkZmIyMjllN2Iuc2V0Q29udGVudChodG1sXzU1M2I3NDAxMDM2ZDQ3Y2Y5OGVmNDRkMzUzY2JlODQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTMzZjYyZGI2YWM1NDg3YTk4NGFkMDQyNjdhZGYwZTIuYmluZFBvcHVwKHBvcHVwX2I5NTE1Y2ZkYTI2ODQ2YjlhYzc0OWE5ZGZiMjI5ZTdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNiZjgyODlhOWMxMDQ5Mjk4NDVlZWRjMDMwN2QwYjQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuMTY1NywzNC4yNTIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl9jNjA3YmQ3ZmVhNTU0NmMwYjIzYTFmNmEwZTlmYWY0Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzQ2ODE0NGNiNjE0Y2I3OTFiODViODZjODA2ZGRlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTM4ZjBhODRiMTY0ODEwODk2ODk0ZGI5MjMxOGJiYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmUzOGYwYTg0YjE2NDgxMDg5Njg5NGRiOTIzMThiYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJVRkZBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMzQ2ODE0NGNiNjE0Y2I3OTFiODViODZjODA2ZGRlNy5zZXRDb250ZW50KGh0bWxfYmUzOGYwYTg0YjE2NDgxMDg5Njg5NGRiOTIzMThiYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYmY4Mjg5YTljMTA0OTI5ODQ1ZWVkYzAzMDdkMGI0My5iaW5kUG9wdXAocG9wdXBfZjM0NjgxNDRjYjYxNGNiNzkxYjg1Yjg2YzgwNmRkZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzY1MWU0ODIyZjFkNGJmMzk2ZTdlODVlYTIxMTU5ZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFswLjYzMzE1NDA1NDM1LDI3LjA3MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyX2M2MDdiZDdmZWE1NTQ2YzBiMjNhMWY2YTBlOWZhZjRmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwZWIwMjEzMDJkMTRkZjY4NTA3Yzk5NzQwYmM1MjBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiNjZhODVjMmFhNzRjY2ZiNjdmYTI4MmM5OGUxMzRiID0gJCgnPGRpdiBpZD0iaHRtbF8xYjY2YTg1YzJhYTc0Y2NmYjY3ZmEyODJjOThlMTM0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UlVNQkk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwZWIwMjEzMDJkMTRkZjY4NTA3Yzk5NzQwYmM1MjBjLnNldENvbnRlbnQoaHRtbF8xYjY2YTg1YzJhYTc0Y2NmYjY3ZmEyODJjOThlMTM0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc2NTFlNDgyMmYxZDRiZjM5NmU3ZTg1ZWEyMTE1OWZjLmJpbmRQb3B1cChwb3B1cF9jMGViMDIxMzAyZDE0ZGY2ODUwN2M5OTc0MGJjNTIwYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNDI3NGY5MGM4N2I0YmMzYWNmNTIzYmZhNDIwNDkyZSA9IEwubWFya |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment