Skip to content

Instantly share code, notes, and snippets.

@du2x
Created January 27, 2020 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save du2x/6cf30724df41b938a26de2cf215c2d71 to your computer and use it in GitHub Desktop.
Save du2x/6cf30724df41b938a26de2cf215c2d71 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will use the data from the \"Fundação Instituto de Pesquisas Econômicas Administrativas e Contábeis de Minas Gerais\" social classes report and the venues data from Foursquare.\n",
"\n",
"Let's explore them."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Social classes report"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Unfortunately, the report was published in pdf only. So I had to copy and paste it's content and save into a csv file. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"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>Neighborhood</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AARAO REIS</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>ALTO DOS PINHEIROS</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>ALTO PARAISO</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>ALVARO CAMARGOS</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ALVORADA</td>\n",
" <td>low</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Class\n",
"0 AARAO REIS low\n",
"1 ALTO DOS PINHEIROS low\n",
"2 ALTO PARAISO low\n",
"3 ALVARO CAMARGOS low\n",
"4 ALVORADA low"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bairros = pd.read_csv('bh_bairros_classes.csv')\n",
"bairros.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"low 169\n",
"regular 45\n",
"high 29\n",
"luxury 23\n",
"Name: Class, dtype: int64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bairros['Class'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I had also to get the geolocalization data for each neighborhood, because Foursquare require them.\n",
"\n",
"So I used the geopy library."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting geopy\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/80/93/d384479da0ead712bdaf697a8399c13a9a89bd856ada5a27d462fb45e47b/geopy-1.20.0-py2.py3-none-any.whl (100kB)\n",
"\u001b[K |████████████████████████████████| 102kB 6.0MB/s ta 0:00:011\n",
"\u001b[?25hCollecting geographiclib<2,>=1.49 (from geopy)\n",
" Downloading https://files.pythonhosted.org/packages/8b/62/26ec95a98ba64299163199e95ad1b0e34ad3f4e176e221c40245f211e425/geographiclib-1.50-py3-none-any.whl\n",
"Installing collected packages: geographiclib, geopy\n",
"Successfully installed geographiclib-1.50 geopy-1.20.0\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"Geocoder unavailable or timed out... will try again!\n",
"(250, 4)\n"
]
},
{
"data": {
"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>Neighborhood</th>\n",
" <th>Class</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AARAO REIS</td>\n",
" <td>low</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>ALTO DOS PINHEIROS</td>\n",
" <td>low</td>\n",
" <td>-19.932567</td>\n",
" <td>-44.004875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>ALVARO CAMARGOS</td>\n",
" <td>low</td>\n",
" <td>-19.916339</td>\n",
" <td>-44.007857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ALVORADA</td>\n",
" <td>low</td>\n",
" <td>-30.031715</td>\n",
" <td>-51.049711</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>ANA LUCIA</td>\n",
" <td>low</td>\n",
" <td>-19.887783</td>\n",
" <td>-43.906368</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Class Latitude Longitude\n",
"0 AARAO REIS low -19.847221 -43.919508\n",
"1 ALTO DOS PINHEIROS low -19.932567 -44.004875\n",
"3 ALVARO CAMARGOS low -19.916339 -44.007857\n",
"4 ALVORADA low -30.031715 -51.049711\n",
"5 ANA LUCIA low -19.887783 -43.906368"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#!pip install geopy\n",
"from geopy import Nominatim\n",
"from geopy.exc import GeocoderUnavailable, GeocoderTimedOut, GeocoderServiceError\n",
"\n",
"geolocator = Nominatim(user_agent=\"ny_explorer\")\n",
"\n",
"def geolocator_belohorizonte(neighborhood): \n",
" try:\n",
" locator = geolocator.geocode(neighborhood +', Belo Horizonte')\n",
" except (GeocoderUnavailable, GeocoderTimedOut, GeocoderServiceError):\n",
" print('Geocoder unavailable or timed out... will try again!')\n",
" locator = geolocator_belohorizonte(neighborhood)\n",
" return locator\n",
"\n",
"locators = bairros['Neighborhood'].apply(geolocator_belohorizonte)\n",
"\n",
"bairros['Latitude'] = locators.apply(lambda v: v.latitude if v is not None else None)\n",
"bairros['Longitude'] = locators.apply(lambda v: v.longitude if v is not None else None)\n",
"\n",
"bairros.dropna(inplace=True)\n",
"\n",
"print(bairros.shape)\n",
"bairros.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's visualize the neighborhoods in the map to see if it's everything alright."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Solving environment: done\n",
"\n",
"\n",
"==> WARNING: A newer version of conda exists. <==\n",
" current version: 4.5.11\n",
" latest version: 4.8.1\n",
"\n",
"Please update conda by running\n",
"\n",
" $ conda update -n base -c defaults conda\n",
"\n",
"\n",
"\n",
"## Package Plan ##\n",
"\n",
" environment location: /home/jupyterlab/conda/envs/python\n",
"\n",
" added / updated specs: \n",
" - folium=0.5.0\n",
"\n",
"\n",
"The following packages will be downloaded:\n",
"\n",
" package | build\n",
" ---------------------------|-----------------\n",
" scikit-learn-0.20.1 | py36h22eb022_0 5.7 MB\n",
" certifi-2019.11.28 | py36_0 149 KB conda-forge\n",
" liblapack-3.8.0 | 11_openblas 10 KB conda-forge\n",
" liblapacke-3.8.0 | 11_openblas 10 KB conda-forge\n",
" libopenblas-0.3.6 | h5a2b251_2 7.7 MB\n",
" scipy-1.4.1 | py36h921218d_0 18.9 MB conda-forge\n",
" libcblas-3.8.0 | 11_openblas 10 KB conda-forge\n",
" libblas-3.8.0 | 11_openblas 10 KB conda-forge\n",
" numpy-1.17.5 | py36h95a1406_0 5.2 MB conda-forge\n",
" blas-2.11 | openblas 10 KB conda-forge\n",
" ------------------------------------------------------------\n",
" Total: 37.7 MB\n",
"\n",
"The following NEW packages will be INSTALLED:\n",
"\n",
" libblas: 3.8.0-11_openblas conda-forge\n",
" libcblas: 3.8.0-11_openblas conda-forge\n",
" liblapack: 3.8.0-11_openblas conda-forge\n",
" liblapacke: 3.8.0-11_openblas conda-forge\n",
" libopenblas: 0.3.6-h5a2b251_2 \n",
"\n",
"The following packages will be UPDATED:\n",
"\n",
" blas: 1.1-openblas conda-forge --> 2.11-openblas conda-forge\n",
" certifi: 2019.9.11-py36_0 conda-forge --> 2019.11.28-py36_0 conda-forge\n",
" numpy: 1.16.2-py36_blas_openblash1522bff_0 conda-forge [blas_openblas] --> 1.17.5-py36h95a1406_0 conda-forge\n",
" scipy: 1.2.1-py36_blas_openblash1522bff_0 conda-forge [blas_openblas] --> 1.4.1-py36h921218d_0 conda-forge\n",
"\n",
"The following packages will be DOWNGRADED:\n",
"\n",
" scikit-learn: 0.20.1-py36_blas_openblashebff5e3_1200 conda-forge [blas_openblas] --> 0.20.1-py36h22eb022_0 \n",
"\n",
"\n",
"Downloading and Extracting Packages\n",
"scikit-learn-0.20.1 | 5.7 MB | ##################################### | 100% \n",
"certifi-2019.11.28 | 149 KB | ##################################### | 100% \n",
"liblapack-3.8.0 | 10 KB | ##################################### | 100% \n",
"liblapacke-3.8.0 | 10 KB | ##################################### | 100% \n",
"libopenblas-0.3.6 | 7.7 MB | ##################################### | 100% \n",
"scipy-1.4.1 | 18.9 MB | ##################################### | 100% \n",
"libcblas-3.8.0 | 10 KB | ##################################### | 100% \n",
"libblas-3.8.0 | 10 KB | ##################################### | 100% \n",
"numpy-1.17.5 | 5.2 MB | ##################################### | 100% \n",
"blas-2.11 | 10 KB | ##################################### | 100% \n",
"Preparing transaction: done\n",
"Verifying transaction: done\n",
"Executing transaction: done\n"
]
},
{
"data": {
"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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbLTE5LjkyMjczMTgsLTQzLjk0NTA5NDhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyX2VmNzU1MDEzODAxZDQxMjRhMzFhZTRmNzVmMGZiZDEwID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMjI4NTAwYTI3MmM0ZDU2YmEyMTU4YmZlZjg3ZjFhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NDcyMjExLC00My45MTk1MDgyMDExNTI2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2Q4YmU0NmY5Yjk0NTliOGVkYTI0MjYxNzg4M2E3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjMyMDQxYTIxZWE0YzY4OWRkZmUxNmRkMWNiM2YzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjIzMjA0MWEyMWVhNGM2ODlkZGZlMTZkZDFjYjNmM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFBUkFPIFJFSVM6ICgtMTkuODQ3MjIxMSwgLTQzLjkxOTUwODIwMTE1MjYzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdkOGJlNDZmOWI5NDU5YjhlZGEyNDI2MTc4ODNhNzcuc2V0Q29udGVudChodG1sXzIyMzIwNDFhMjFlYTRjNjg5ZGRmZTE2ZGQxY2IzZjNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEyMjg1MDBhMjcyYzRkNTZiYTIxNThiZmVmODdmMWFlLmJpbmRQb3B1cChwb3B1cF9kN2Q4YmU0NmY5Yjk0NTliOGVkYTI0MjYxNzg4M2E3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNjNmM2IxMzliMGY0NmQ0OWQ4YzY0ZGZkM2MyNThkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzI1Njc0LC00NC4wMDQ4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmUxYzc4ZWYzMDJhNGI5ZTgyMGI4YWM3ZGYyN2VjZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQyOWFmM2Y4MzM4NGYyZjkzYWFiYmQ1NzUxYjM1YzYgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0MjlhZjNmODMzODRmMmY5M2FhYmJkNTc1MWIzNWM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTFRPIERPUyBQSU5IRUlST1M6ICgtMTkuOTMyNTY3NCwgLTQ0LjAwNDg3NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JlMWM3OGVmMzAyYTRiOWU4MjBiOGFjN2RmMjdlY2QxLnNldENvbnRlbnQoaHRtbF9kNDI5YWYzZjgzMzg0ZjJmOTNhYWJiZDU3NTFiMzVjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNjNmM2IxMzliMGY0NmQ0OWQ4YzY0ZGZkM2MyNThkNC5iaW5kUG9wdXAocG9wdXBfYmUxYzc4ZWYzMDJhNGI5ZTgyMGI4YWM3ZGYyN2VjZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzExMTdlNjJiYTRmNDI5NmEyN2U0ZmI5NTU5MmRlNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE2MzM4NywtNDQuMDA3ODU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjRjOGY4MjU1MjU0OTVlOGMyYjMxMGFlNWJhN2Q4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDYyNTIwODBkYTQ0ZDc2YmQ0ZGFiNzY2MzdkYzdmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmQ2MjUyMDgwZGE0NGQ3NmJkNGRhYjc2NjM3ZGM3ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVkFSTyBDQU1BUkdPUzogKC0xOS45MTYzMzg3LCAtNDQuMDA3ODU2Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2NGM4ZjgyNTUyNTQ5NWU4YzJiMzEwYWU1YmE3ZDg0LnNldENvbnRlbnQoaHRtbF9iZDYyNTIwODBkYTQ0ZDc2YmQ0ZGFiNzY2MzdkYzdmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MTExN2U2MmJhNGY0Mjk2YTI3ZTRmYjk1NTkyZGU0Yy5iaW5kUG9wdXAocG9wdXBfMDY0YzhmODI1NTI1NDk1ZThjMmIzMTBhZTViYTdkODQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ4NDE5MzRhY2Y4NDdiNGFkZDFlNjgxYzA4OTQ4MWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzAuMDMxNzE1LC01MS4wNDk3MTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhMjE5OTlmNTA3ODRiMGY5MTMyMzFiODQyYjE1NzNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyOTAwNmI1MWM2NzRhY2I5MGUwNzdkMDY4OGJiN2ExID0gJCgnPGRpdiBpZD0iaHRtbF9lMjkwMDZiNTFjNjc0YWNiOTBlMDc3ZDA2ODhiYjdhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QUxWT1JBREE6ICgtMzAuMDMxNzE1LCAtNTEuMDQ5NzExMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhMjE5OTlmNTA3ODRiMGY5MTMyMzFiODQyYjE1NzNjLnNldENvbnRlbnQoaHRtbF9lMjkwMDZiNTFjNjc0YWNiOTBlMDc3ZDA2ODhiYjdhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZDg0MTkzNGFjZjg0N2I0YWRkMWU2ODFjMDg5NDgxZS5iaW5kUG9wdXAocG9wdXBfMGEyMTk5OWY1MDc4NGIwZjkxMzIzMWI4NDJiMTU3M2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTcyMGZjYTgwNTk3NDUxM2I3ZGRlMzRhYmRlNTVjMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg3NzgyNSwtNDMuOTA2MzY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNjRkNTMxYWJiNzQ5ZmRiNjc3ZmRkM2ZkOWIwMGM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjY2IzYzgzYzQzNDQ0MzM5YTRlMzlkM2Q0NmNiM2EzID0gJCgnPGRpdiBpZD0iaHRtbF9kY2NiM2M4M2M0MzQ0NDMzOWE0ZTM5ZDNkNDZjYjNhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU5BIExVQ0lBOiAoLTE5Ljg4Nzc4MjUsIC00My45MDYzNjgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzY0ZDUzMWFiYjc0OWZkYjY3N2ZkZDNmZDliMDBjNy5zZXRDb250ZW50KGh0bWxfZGNjYjNjODNjNDM0NDQzMzlhNGUzOWQzZDQ2Y2IzYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTcyMGZjYTgwNTk3NDUxM2I3ZGRlMzRhYmRlNTVjMDUuYmluZFBvcHVwKHBvcHVwX2QzNjRkNTMxYWJiNzQ5ZmRiNjc3ZmRkM2ZkOWIwMGM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1NjgzODdmNTMwNTQxZjliMzk2ZGJiNzQ0YTRiNTRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NDQwMjc0OTk5OTk5OCwtNDMuOTU2NTE2MTkyMzk3Mjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjNWZkYjc2ZWMwMjQwMDg4MDM0NTdmMDEzNDQ4MGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1MWU0ZWQ2OTVkNjRmMjk5MWM4NjU5OWUyNmFhY2RiID0gJCgnPGRpdiBpZD0iaHRtbF9mNTFlNGVkNjk1ZDY0ZjI5OTFjODY1OTllMjZhYWNkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVBBUkVDSURBOiAoLTE5Ljg5NDQwMjc0OTk5OTk5OCwgLTQzLjk1NjUxNjE5MjM5NzI3NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjNWZkYjc2ZWMwMjQwMDg4MDM0NTdmMDEzNDQ4MGQ3LnNldENvbnRlbnQoaHRtbF9mNTFlNGVkNjk1ZDY0ZjI5OTFjODY1OTllMjZhYWNkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNTY4Mzg3ZjUzMDU0MWY5YjM5NmRiYjc0NGE0YjU0ZC5iaW5kUG9wdXAocG9wdXBfNWM1ZmRiNzZlYzAyNDAwODgwMzQ1N2YwMTM0NDgwZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQ2OGFiZTdkMDU1NGQ0ODg0N2E1YzAyNjg4MzY5ZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwNzkyOSwtNDMuOTYxNjU0OTcwOTkwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODI0YTEzNTg0NWUxNDFkMGIxMDYwNTZmZjdmMDQxMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk1NzZiM2IzZGEwNDBlMzg2N2IxZDM4NGQ2NjAwZTIgPSAkKCc8ZGl2IGlkPSJodG1sXzk5NTc2YjNiM2RhMDQwZTM4NjdiMWQzODRkNjYwMGUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BUEFSRUNJREEgN0EgU0VDQU86ICgtMTkuODkwNzkyOSwgLTQzLjk2MTY1NDk3MDk5MDY5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODI0YTEzNTg0NWUxNDFkMGIxMDYwNTZmZjdmMDQxMDUuc2V0Q29udGVudChodG1sXzk5NTc2YjNiM2RhMDQwZTM4NjdiMWQzODRkNjYwMGUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0NjhhYmU3ZDA1NTRkNDg4NDdhNWMwMjY4ODM2OWRkLmJpbmRQb3B1cChwb3B1cF84MjRhMTM1ODQ1ZTE0MWQwYjEwNjA1NmZmN2YwNDEwNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmVhOTllZjBkMWQ0ZTdlYmYyN2UxYzYwOGU3OTNlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTkwMTE5NSwtNDMuOTk5MDcyMDIyNjU4MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjRiZmJhOWJmYjdjNGFjODhjNDZmOTlkMDFmYmMzNjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODViZjdhYTEyMzFmNDU3MThhNjQ1MjQ3NzM1NmUzN2QgPSAkKCc8ZGl2IGlkPSJodG1sXzg1YmY3YWExMjMxZjQ1NzE4YTY0NTI0NzczNTZlMzdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUlSUk8gREFTIElORFVTVFJJQVM6ICgtMTkuOTU5MDExOTUsIC00My45OTkwNzIwMjI2NTgzMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0YmZiYTliZmI3YzRhYzg4YzQ2Zjk5ZDAxZmJjMzYwLnNldENvbnRlbnQoaHRtbF84NWJmN2FhMTIzMWY0NTcxOGE2NDUyNDc3MzU2ZTM3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMmVhOTllZjBkMWQ0ZTdlYmYyN2UxYzYwOGU3OTNlNC5iaW5kUG9wdXAocG9wdXBfMjRiZmJhOWJmYjdjNGFjODhjNDZmOTlkMDFmYmMzNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkzMjQ3ZGI5ODg3NDUwMjhiNjhkYmQyODQ4NDYwNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM0MTc3NTUsLTQzLjg5MjM1MTQxMjEzNTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkMzg3MWVhZGJhMzQ0MDc4ZDNhMmIzMGUxZGIxZTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxNTg3YWQ0MGY0ZDQyYTViYjAzNDUzYTBjZjJhY2ZiID0gJCgnPGRpdiBpZD0iaHRtbF8yMTU4N2FkNDBmNGQ0MmE1YmIwMzQ1M2EwY2YyYWNmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFMRUlBOiAoLTE5LjkzNDE3NzU1LCAtNDMuODkyMzUxNDEyMTM1MzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDM4NzFlYWRiYTM0NDA3OGQzYTJiMzBlMWRiMWU1MC5zZXRDb250ZW50KGh0bWxfMjE1ODdhZDQwZjRkNDJhNWJiMDM0NTNhMGNmMmFjZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzkzMjQ3ZGI5ODg3NDUwMjhiNjhkYmQyODQ4NDYwNTEuYmluZFBvcHVwKHBvcHVwXzJkMzg3MWVhZGJhMzQ0MDc4ZDNhMmIzMGUxZGIxZTUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwMjRmYjAwN2Q3ODQzMjU5NTZkY2Q5NzhmYmU3ZTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk3NzczNzE1MDAwMDAwMywtNDQuMDE5MjA1MjUzMjIzNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjFlNmJkYTI1NjVkNGEwN2JlZjg3Yjc5OTQ2Nzc2MTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzJlM2JiNDYwM2E1NDIzNGE0NmJlZmExYmI2NDhhMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2MyZTNiYjQ2MDNhNTQyMzRhNDZiZWZhMWJiNjQ4YTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJSRUlSTyBlIEJBUlJFSVJPIERFOiAoLTE5Ljk3NzczNzE1MDAwMDAwMywgLTQ0LjAxOTIwNTI1MzIyMzQyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjFlNmJkYTI1NjVkNGEwN2JlZjg3Yjc5OTQ2Nzc2MTguc2V0Q29udGVudChodG1sX2MyZTNiYjQ2MDNhNTQyMzRhNDZiZWZhMWJiNjQ4YTI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MwMjRmYjAwN2Q3ODQzMjU5NTZkY2Q5NzhmYmU3ZTNiLmJpbmRQb3B1cChwb3B1cF9iMWU2YmRhMjU2NWQ0YTA3YmVmODdiNzk5NDY3NzYxOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWI0ZjI4NTQ5MmM0NjcwODlmMzc3NDk4YTI3ZmJjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS4zNzc4OTIsLTQzLjU3MDAxNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI1MWI2YzFmNjMzNDVlZDg0ZDVmNjZlNGVkZWQ5OWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmY2ZGFlMzNiNTM4NDI3NWI3ZTg4NmVlMDEwYjA1NTkgPSAkKCc8ZGl2IGlkPSJodG1sX2JmNmRhZTMzYjUzODQyNzViN2U4ODZlZTAxMGIwNTU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSU1BOiAoLTE5LjM3Nzg5MiwgLTQzLjU3MDAxNDYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjUxYjZjMWY2MzM0NWVkODRkNWY2NmU0ZWRlZDk5ZS5zZXRDb250ZW50KGh0bWxfYmY2ZGFlMzNiNTM4NDI3NWI3ZTg4NmVlMDEwYjA1NTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjViNGYyODU0OTJjNDY3MDg5ZjM3NzQ5OGEyN2ZiYzAuYmluZFBvcHVwKHBvcHVwX2IyNTFiNmMxZjYzMzQ1ZWQ4NGQ1ZjY2ZTRlZGVkOTllKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3ZDI1NjFiYmQ1MDRmMDE5NDkwYmE3MWI5OWZhNzNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1ODYxMDksLTQzLjk5MjIyNTEyMzY3MDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllNTlmODMxZGZjZTQwODc5Mjk1ZWE3ZTQ4OTc3ZjE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjYWNkYTUwNDkyNTQwYWU5YWNmNjQ0ZDUxOGYzYWYzID0gJCgnPGRpdiBpZD0iaHRtbF84Y2FjZGE1MDQ5MjU0MGFlOWFjZjY0NGQ1MThmM2FmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVUQU5JQTogKC0xOS45NTg2MTA5LCAtNDMuOTkyMjI1MTIzNjcwMDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTU5ZjgzMWRmY2U0MDg3OTI5NWVhN2U0ODk3N2YxNi5zZXRDb250ZW50KGh0bWxfOGNhY2RhNTA0OTI1NDBhZTlhY2Y2NDRkNTE4ZjNhZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTdkMjU2MWJiZDUwNGYwMTk0OTBiYTcxYjk5ZmE3M2YuYmluZFBvcHVwKHBvcHVwXzllNTlmODMxZGZjZTQwODc5Mjk1ZWE3ZTQ4OTc3ZjE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3NDk1MDAzNzg4ZjRlNzdiM2RhZTQwMjdhMWM3OTRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NDA3MTE1MDAwMDAwMiwtNDMuOTAzNjczODcyMjIwNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWZiMTk3YWNhY2ZhNGE1ZWFjZmE3OGQ4ZWMwOWYxNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzY4NmIyYTYwMDNkNDdmN2I3MGY0NzE3ZDk4NTUzYTAgPSAkKCc8ZGl2IGlkPSJodG1sX2M2ODZiMmE2MDAzZDQ3ZjdiNzBmNDcxN2Q5ODU1M2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT0EgVklTVEE6ICgtMTkuODk0MDcxMTUwMDAwMDAyLCAtNDMuOTAzNjczODcyMjIwNTgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZmIxOTdhY2FjZmE0YTVlYWNmYTc4ZDhlYzA5ZjE3MC5zZXRDb250ZW50KGh0bWxfYzY4NmIyYTYwMDNkNDdmN2I3MGY0NzE3ZDk4NTUzYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDc0OTUwMDM3ODhmNGU3N2IzZGFlNDAyN2ExYzc5NGYuYmluZFBvcHVwKHBvcHVwX2VmYjE5N2FjYWNmYTRhNWVhY2ZhNzhkOGVjMDlmMTcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiZmQ2ODhlYjI4OTRjODc4YzAzYmU1MjFjZjY5MDNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NTk1NzcsLTQzLjk1NDM5MzgyMTQ1MTI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Y2Q0MGVjOTZhZTY0M2I4YTk2MDU1MjI1ODNlN2MwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Nzk5NTgzYzZkOTc0MjIyOGYyODk5MTgxNGRmMTdmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTc5OTU4M2M2ZDk3NDIyMjhmMjg5OTE4MTRkZjE3ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJPTSBKRVNVUzogKC0xOS44OTU5NTc3LCAtNDMuOTU0MzkzODIxNDUxMjc2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWNkNDBlYzk2YWU2NDNiOGE5NjA1NTIyNTgzZTdjMDkuc2V0Q29udGVudChodG1sXzU3OTk1ODNjNmQ5NzQyMjI4ZjI4OTkxODE0ZGYxN2ZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiZmQ2ODhlYjI4OTRjODc4YzAzYmU1MjFjZjY5MDNkLmJpbmRQb3B1cChwb3B1cF85Y2Q0MGVjOTZhZTY0M2I4YTk2MDU1MjI1ODNlN2MwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWVkMzVlOWVlN2Y0MjQzYTUxMTYyMjg5MjI5ZGY1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43NDE2NDM3LC00My4zNDYzMjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5YzI0MmQ2NmY1ZjQzNjhhNjI3YWY4ZGJhNDFkZDdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4MWQ5ZTgyMmZlMjQ2ZWRhZTE5M2I2ZDdkMDRiNTk5ID0gJCgnPGRpdiBpZD0iaHRtbF9kODFkOWU4MjJmZTI0NmVkYWUxOTNiNmQ3ZDA0YjU5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9NIFNVQ0VTU086ICgtMTkuNzQxNjQzNywgLTQzLjM0NjMyNjEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWMyNDJkNjZmNWY0MzY4YTYyN2FmOGRiYTQxZGQ3ZS5zZXRDb250ZW50KGh0bWxfZDgxZDllODIyZmUyNDZlZGFlMTkzYjZkN2QwNGI1OTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmFlZDM1ZTllZTdmNDI0M2E1MTE2MjI4OTIyOWRmNTUuYmluZFBvcHVwKHBvcHVwXzE5YzI0MmQ2NmY1ZjQzNjhhNjI3YWY4ZGJhNDFkZDdlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2ZGQ1YzdjNTI2ODRmYzU5MTBhZWU3MDU0ZTY1ZWJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4zODMxOTc0LC01OS44NTk4MTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyNTFiZjg1OWM1YzRlNWU4ODM0Y2YwNzdjM2M5YWE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4ZmU4NGMwNjA0ZTQzYjY4YTlhNWYwM2Q2NGNkMTM4ID0gJCgnPGRpdiBpZD0iaHRtbF83OGZlODRjMDYwNGU0M2I2OGE5YTVmMDNkNjRjZDEzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9ORklNOiAoMy4zODMxOTc0LCAtNTkuODU5ODE5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyNTFiZjg1OWM1YzRlNWU4ODM0Y2YwNzdjM2M5YWE3LnNldENvbnRlbnQoaHRtbF83OGZlODRjMDYwNGU0M2I2OGE5YTVmMDNkNjRjZDEzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNmRkNWM3YzUyNjg0ZmM1OTEwYWVlNzA1NGU2NWViYy5iaW5kUG9wdXAocG9wdXBfMDI1MWJmODU5YzVjNGU1ZTg4MzRjZjA3N2MzYzlhYTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NmNDQzNDM1ZTJlNDcwYTg1ZmZjYjNkMTk5MTFjMDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTk5OTc2LC00NC4wMTQ0Mjk2NjczOTUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMzdiNWVkMTA5N2Y0ZmZjYTdkM2FmYTQ2MzBhZDQ2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZDBhY2Y0ODJjYjM0ZmI4YmU4MzExNjYyM2YxYTM1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNGQwYWNmNDgyY2IzNGZiOGJlODMxMTY2MjNmMWEzNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJSQVNJTCBJTkRVU1RSSUFMOiAoLTE5Ljk5OTk3NiwgLTQ0LjAxNDQyOTY2NzM5NTE5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjM3YjVlZDEwOTdmNGZmY2E3ZDNhZmE0NjMwYWQ0NmUuc2V0Q29udGVudChodG1sXzRkMGFjZjQ4MmNiMzRmYjhiZTgzMTE2NjIzZjFhMzU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjZjQ0MzQzNWUyZTQ3MGE4NWZmY2IzZDE5OTExYzAzLmJpbmRQb3B1cChwb3B1cF9iMzdiNWVkMTA5N2Y0ZmZjYTdkM2FmYTQ2MzBhZDQ2ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mY2MwNjc5YjM0OTg0N2E3YjY5MzFjYTc2YmZlODZlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDYwNDc4MDAwMDAwMDIsLTQ0LjAwMDQzMzAzOTM3MTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViNzhkMmIzZmIzMzQxNThiMzU1YzE2MzY0MzRiMDI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4NTBiMWVjOTQ5MjRjMTM4ZGNmMWYyNTNmOGYzOTYzID0gJCgnPGRpdiBpZD0iaHRtbF84ODUwYjFlYzk0OTI0YzEzOGRjZjFmMjUzZjhmMzk2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FCQU5BOiAoLTE5Ljk0NjA0NzgwMDAwMDAwMiwgLTQ0LjAwMDQzMzAzOTM3MTkxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWI3OGQyYjNmYjMzNDE1OGIzNTVjMTYzNjQzNGIwMjYuc2V0Q29udGVudChodG1sXzg4NTBiMWVjOTQ5MjRjMTM4ZGNmMWYyNTNmOGYzOTYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjYzA2NzliMzQ5ODQ3YTdiNjkzMWNhNzZiZmU4NmU1LmJpbmRQb3B1cChwb3B1cF9lYjc4ZDJiM2ZiMzM0MTU4YjM1NWMxNjM2NDM0YjAyNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODcyNWY3YWE2ZDg0NjkyOTE5YjJmMzRlZTM5YjI5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTAyMDAzLC00My45NDc0NTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1OTU2ZDgyYzI2MTQ4MzdhNDJiZjIyNDNhNzQ5ZTkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4NjE2Zjg2NTgyODRhYWJhODdlZmExN2VlNjU0MmFiID0gJCgnPGRpdiBpZD0iaHRtbF9lODYxNmY4NjU4Mjg0YWFiYTg3ZWZhMTdlZTY1NDJhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FDSE9FSVJJTkhBOiAoLTE5Ljg5MDIwMDMsIC00My45NDc0NTU2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDU5NTZkODJjMjYxNDgzN2E0MmJmMjI0M2E3NDllOTIuc2V0Q29udGVudChodG1sX2U4NjE2Zjg2NTgyODRhYWJhODdlZmExN2VlNjU0MmFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4NzI1ZjdhYTZkODQ2OTI5MTliMmYzNGVlMzliMjk1LmJpbmRQb3B1cChwb3B1cF80NTk1NmQ4MmMyNjE0ODM3YTQyYmYyMjQzYTc0OWU5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmZkMzBiYjNmNzM0ZTFhYTdmNDY1ZmJkYWVjNzljMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDMwMDYzLC00My44ODk4Nzg1NDI1MDExOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzJlNzM5NGYyZjQxNDYzNTg5YzJiMGRiY2FmYTg3ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM0MzU3MTU3ZDI4NDU0NWFmNzkwNmNiMzdmNDhkM2UgPSAkKCc8ZGl2IGlkPSJodG1sX2JjNDM1NzE1N2QyODQ1NDVhZjc5MDZjYjM3ZjQ4ZDNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQUVUQU5PIEZVUlFVSU06ICgtMTkuOTAzMDA2MywgLTQzLjg4OTg3ODU0MjUwMTE5NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyZTczOTRmMmY0MTQ2MzU4OWMyYjBkYmNhZmE4N2ZlLnNldENvbnRlbnQoaHRtbF9iYzQzNTcxNTdkMjg0NTQ1YWY3OTA2Y2IzN2Y0OGQzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZmZkMzBiYjNmNzM0ZTFhYTdmNDY1ZmJkYWVjNzljMS5iaW5kUG9wdXAocG9wdXBfYzJlNzM5NGYyZjQxNDYzNTg5YzJiMGRiY2FmYTg3ZmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjI1N2EwOGFjYTAwNGNmOGI3MzAwYzU0NzViZWUzMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI0NzM4MiwtNDQuMDEyMTEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NjU2YzQyNDgzNDg0NzAwOTYxOWI0NjcyZGM3Y2I5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMzJiY2VmZjE1YjQ0ZGIzOWMwZmFiNDVjNGY0OWQ0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjMyYmNlZmYxNWI0NGRiMzljMGZhYjQ1YzRmNDlkNDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTElGT1JOSUE6ICgtMTkuOTI0NzM4MiwgLTQ0LjAxMjExMDEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjU2YzQyNDgzNDg0NzAwOTYxOWI0NjcyZGM3Y2I5Yy5zZXRDb250ZW50KGh0bWxfYjMyYmNlZmYxNWI0NGRiMzljMGZhYjQ1YzRmNDlkNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjI1N2EwOGFjYTAwNGNmOGI3MzAwYzU0NzViZWUzMjkuYmluZFBvcHVwKHBvcHVwXzc2NTZjNDI0ODM0ODQ3MDA5NjE5YjQ2NzJkYzdjYjljKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkNzQ2NzdlOGM3NzQ5NDNiNmY2ZGMzOGRkOThiMGM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MDA2OTMsLTQ0LjAxODU2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZmJhMTZhZjFiOTA0YTczODAyN2JiNDU3ZTc3MTZiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWYwN2QzZmE4MDM0YjgwYTQwOWY1OTMzZmQ1NWQwZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjlmMDdkM2ZhODAzNGI4MGE0MDlmNTkzM2ZkNTVkMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTUFSR09TOiAoLTE5Ljk0MDA2OTMsIC00NC4wMTg1NjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmJhMTZhZjFiOTA0YTczODAyN2JiNDU3ZTc3MTZiNi5zZXRDb250ZW50KGh0bWxfZjlmMDdkM2ZhODAzNGI4MGE0MDlmNTkzM2ZkNTVkMGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWQ3NDY3N2U4Yzc3NDk0M2I2ZjZkYzM4ZGQ5OGIwYzcuYmluZFBvcHVwKHBvcHVwXzNmYmExNmFmMWI5MDRhNzM4MDI3YmI0NTdlNzcxNmI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3NWQ0OGYyNmJkZDQ0ZWViOTNlZWZjMjdmZDY4NWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzMDM5OTM5OTk5OTk5NywtNDMuOTQ3MDc5MzU0NzQ2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTZiZTY5ZDYyYWFhNGIwOTlhOWFlNWNiNzE1N2IxMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTcyYmE0M2YxODNhNDZiNWE1YThlMTY3ODk2N2Y4MDAgPSAkKCc8ZGl2IGlkPSJodG1sX2U3MmJhNDNmMTgzYTQ2YjVhNWE4ZTE2Nzg5NjdmODAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQU1QTyBBTEVHUkU6ICgtMTkuODMwMzk5Mzk5OTk5OTk3LCAtNDMuOTQ3MDc5MzU0NzQ2ODMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNmJlNjlkNjJhYWE0YjA5OWE5YWU1Y2I3MTU3YjEyNS5zZXRDb250ZW50KGh0bWxfZTcyYmE0M2YxODNhNDZiNWE1YThlMTY3ODk2N2Y4MDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjc1ZDQ4ZjI2YmRkNDRlZWI5M2VlZmMyN2ZkNjg1ZjAuYmluZFBvcHVwKHBvcHVwX2E2YmU2OWQ2MmFhYTRiMDk5YTlhZTVjYjcxNTdiMTI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxZTJiNTViYWM4ODQyZTdhZjQ4OTAyNGEyZTdhNjM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljc5NjE0MjksLTQzLjk0NzQzNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ3ZjdkNDQ3ZGRlNDg4MzgyMjU5MDNhNjhlNTgyNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JhYzExZDgxMjNjNGJmYTliZjk4NTlhNTViZDE2YzQgPSAkKCc8ZGl2IGlkPSJodG1sXzNiYWMxMWQ4MTIzYzRiZmE5YmY5ODU5YTU1YmQxNmM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQU5BQTogKC0xOS43OTYxNDI5LCAtNDMuOTQ3NDM3Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0N2Y3ZDQ0N2RkZTQ4ODM4MjI1OTAzYTY4ZTU4MjU5LnNldENvbnRlbnQoaHRtbF8zYmFjMTFkODEyM2M0YmZhOWJmOTg1OWE1NWJkMTZjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MWUyYjU1YmFjODg0MmU3YWY0ODkwMjRhMmU3YTYzOC5iaW5kUG9wdXAocG9wdXBfNzQ3ZjdkNDQ3ZGRlNDg4MzgyMjU5MDNhNjhlNTgyNTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzBmYWEzNDE2YzlmNDlhN2I1NGY3NWQ1NTM2MTNhMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODExNDU4MTAwMDAwMDAzLC00My45NzI0NTA1MzM2NDY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NTAzZTNhN2ZhNTU0N2ZiOTJiNjhmMjhmYTg2NWI2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTRjODZmNzU5MDk0ZmM2ODM2M2UwNTI4NTM3MjQ0ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTU0Yzg2Zjc1OTA5NGZjNjgzNjNlMDUyODUzNzI0NGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTkRFTEFSSUE6ICgtMTkuODExNDU4MTAwMDAwMDAzLCAtNDMuOTcyNDUwNTMzNjQ2NTgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTAzZTNhN2ZhNTU0N2ZiOTJiNjhmMjhmYTg2NWI2ZS5zZXRDb250ZW50KGh0bWxfYTU0Yzg2Zjc1OTA5NGZjNjgzNjNlMDUyODUzNzI0NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzBmYWEzNDE2YzlmNDlhN2I1NGY3NWQ1NTM2MTNhMWEuYmluZFBvcHVwKHBvcHVwXzU1MDNlM2E3ZmE1NTQ3ZmI5MmI2OGYyOGZhODY1YjZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVkYTMxZTQ3MmEyMzRjZjVhZjVkZTRhM2FjMTIyZDlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyNzA3MTA5OTk5OTk5OCwtNDMuODgyODg5ODIyMDY1NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODJkNTRhZmExNmZjNDQ3NDllZGMxMjgwNDAxNjg5MTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM1MjM3MmNlMmE2NDU0MDkyNTg3ZjhhY2MyOGI0YjkgPSAkKCc8ZGl2IGlkPSJodG1sX2JjNTIzNzJjZTJhNjQ1NDA5MjU4N2Y4YWNjMjhiNGI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVBJVEFPIEVEVUFSRE86ICgtMTkuODI3MDcxMDk5OTk5OTk4LCAtNDMuODgyODg5ODIyMDY1NjgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MmQ1NGFmYTE2ZmM0NDc0OWVkYzEyODA0MDE2ODkxNC5zZXRDb250ZW50KGh0bWxfYmM1MjM3MmNlMmE2NDU0MDkyNTg3ZjhhY2MyOGI0YjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWRhMzFlNDcyYTIzNGNmNWFmNWRlNGEzYWMxMjJkOWYuYmluZFBvcHVwKHBvcHVwXzgyZDU0YWZhMTZmYzQ0NzQ5ZWRjMTI4MDQwMTY4OTE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlZDdhYTIyYzNiMTQ4YTI4NzkwMzU1YTMyYjEzZTkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjAwMjYzNTY1MDAwMDAwMiwtNDQuMDA3MzgwNDA1ODE1OTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1MjZmZmY2ZDljMzQ1MmNhODYxMDFmZDg1Y2UyOGI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkYTE3ZjU4ZTg1MzRkY2ZiYTM2NWRiNmU5ZWVlYmU2ID0gJCgnPGRpdiBpZD0iaHRtbF85ZGExN2Y1OGU4NTM0ZGNmYmEzNjVkYjZlOWVlZWJlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FSRE9TTzogKC0yMC4wMDI2MzU2NTAwMDAwMDIsIC00NC4wMDczODA0MDU4MTU5NjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTI2ZmZmNmQ5YzM0NTJjYTg2MTAxZmQ4NWNlMjhiOS5zZXRDb250ZW50KGh0bWxfOWRhMTdmNThlODUzNGRjZmJhMzY1ZGI2ZTllZWViZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWVkN2FhMjJjM2IxNDhhMjg3OTAzNTVhMzJiMTNlOTAuYmluZFBvcHVwKHBvcHVwXzA1MjZmZmY2ZDljMzQ1MmNhODYxMDFmZDg1Y2UyOGI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmZDAxMmE5MmFlYjQ4M2JhZWNlN2RkODY4YTFiZjU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5OTAxNjY1LC00My44ODc2NzExNzIwOTQ4NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjIyZDc4NThkNjVmNDJhMmIzODRkYWVhYWEwYjc1NDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY3MDUwZjA2MDRhNGNiMjg3MGIwNmRjNzFjZjBlZTMgPSAkKCc8ZGl2IGlkPSJodG1sXzc2NzA1MGYwNjA0YTRjYjI4NzBiMDZkYzcxY2YwZWUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVNBIEJSQU5DQTogKC0xOS44OTkwMTY2NSwgLTQzLjg4NzY3MTE3MjA5NDg1NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyMmQ3ODU4ZDY1ZjQyYTJiMzg0ZGFlYWFhMGI3NTQwLnNldENvbnRlbnQoaHRtbF83NjcwNTBmMDYwNGE0Y2IyODcwYjA2ZGM3MWNmMGVlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZmQwMTJhOTJhZWI0ODNiYWVjZTdkZDg2OGExYmY1NC5iaW5kUG9wdXAocG9wdXBfNjIyZDc4NThkNjVmNDJhMmIzODRkYWVhYWEwYjc1NDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjc4NDdiYjU5YjgyNDllMGIyNWRiZjI1ZTY5NDRjZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODIyNzQ5OSwtNDQuMDAzOTc5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZTcyNWY1MjU5MWU0NGQ5OTJjZTg5YTUyNzM1ZjFiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MzMzMTMwY2FjODg0ZWY2YWNkYWIzZmU0ZGMyYWY2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTMzMzEzMGNhYzg4NGVmNmFjZGFiM2ZlNGRjMmFmNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNFVSBBWlVMOiAoLTE5LjgyMjc0OTksIC00NC4wMDM5Nzk5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU3MjVmNTI1OTFlNDRkOTkyY2U4OWE1MjczNWYxYmQuc2V0Q29udGVudChodG1sXzUzMzMxMzBjYWM4ODRlZjZhY2RhYjNmZTRkYzJhZjY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3ODQ3YmI1OWI4MjQ5ZTBiMjVkYmYyNWU2OTQ0Y2UxLmJpbmRQb3B1cChwb3B1cF9iZTcyNWY1MjU5MWU0NGQ5OTJjZTg5YTUyNzM1ZjFiZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjQ5ZjBkOGU3M2Y0YTY5OGI0ZWM1MTY3ZWJjYmE1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzU3MjU1NSwtNDMuOTkwNTIzMjU0NzE4ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjJhMjNiNzM1NmE5NGM2NWFlOTgxY2RmZWE3NzJiM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM2MjBhOTUzNjQxNGFmYTlhYTdiMTQxNGUyOGRhMmQgPSAkKCc8ZGl2IGlkPSJodG1sXzEzNjIwYTk1MzY0MTRhZmE5YWE3YjE0MTRlMjhkYTJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DT1BBQ0FCQU5BOiAoLTE5LjgzNTcyNTU1LCAtNDMuOTkwNTIzMjU0NzE4ODUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMmEyM2I3MzU2YTk0YzY1YWU5ODFjZGZlYTc3MmIzYy5zZXRDb250ZW50KGh0bWxfMTM2MjBhOTUzNjQxNGFmYTlhYTdiMTQxNGUyOGRhMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Y0OWYwZDhlNzNmNGE2OThiNGVjNTE2N2ViY2JhNTUuYmluZFBvcHVwKHBvcHVwX2IyYTIzYjczNTZhOTRjNjVhZTk4MWNkZmVhNzcyYjNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmNGUwMWEzY2MwZjQ1Yzg5NzVmYjQwNDI2ZDhjN2EyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMDM3ODQsLTQ0LjAyMTIzODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2JjYzg4Yzc1ZTQ4NGNjYjk0NzBkNTAxYzhlZGVjMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY1MDUxM2IyMzE0NDQ2OTllMWFhZTk0ODhlNjJmOWYgPSAkKCc8ZGl2IGlkPSJodG1sXzBmNTA1MTNiMjMxNDQ0Njk5ZTFhYWU5NDg4ZTYyZjlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DT1FVRUlST1M6ICgtMTkuOTAwMzc4NCwgLTQ0LjAyMTIzODMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YmNjODhjNzVlNDg0Y2NiOTQ3MGQ1MDFjOGVkZWMyOC5zZXRDb250ZW50KGh0bWxfMGY1MDUxM2IyMzE0NDQ2OTllMWFhZTk0ODhlNjJmOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y0ZTAxYTNjYzBmNDVjODk3NWZiNDA0MjZkOGM3YTIuYmluZFBvcHVwKHBvcHVwXzdiY2M4OGM3NWU0ODRjY2I5NDcwZDUwMWM4ZWRlYzI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiMWYzY2M2ZjViYzQyNmQ4ODk0M2Q0ZTdiNTIwOTUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk5MjQyMjA1MDAwMDAwMiwtNDQuMDE5MjExNjE3ODczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJjNzExNmIwNjIwNDQwY2IzY2E1MjQ2OWVmNWJhNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTlmNzdkODg0YWU3NDk3N2E4MTQ1N2YzMGI2ZGVhZGQgPSAkKCc8ZGl2IGlkPSJodG1sX2U5Zjc3ZDg4NGFlNzQ5NzdhODE0NTdmMzBiNmRlYWRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ESUFNQU5URTogKC0xOS45OTI0MjIwNTAwMDAwMDIsIC00NC4wMTkyMTE2MTc4NzMxNSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViYzcxMTZiMDYyMDQ0MGNiM2NhNTI0NjllZjViYTU5LnNldENvbnRlbnQoaHRtbF9lOWY3N2Q4ODRhZTc0OTc3YTgxNDU3ZjMwYjZkZWFkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YjFmM2NjNmY1YmM0MjZkODg5NDNkNGU3YjUyMDk1Mi5iaW5kUG9wdXAocG9wdXBfNWJjNzExNmIwNjIwNDQwY2IzY2E1MjQ2OWVmNWJhNTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVhMDNhZjIxM2ZmNGE1Njg4MjMyOTMwMmNiMDgzMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE1ODU4MiwtNDMuOTk5NTc1MTAxMjU4NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc4MWIwODFlZjVmNDIwZDk3ZDE0YTBlY2YyNjFmMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmRlMGRhZGE2ZjQxNDgyOWEwOTY2ZTk3MGY3MzExNTggPSAkKCc8ZGl2IGlkPSJodG1sX2ZkZTBkYWRhNmY0MTQ4MjlhMDk2NmU5NzBmNzMxMTU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gQk9TQ086ICgtMTkuOTE1ODU4MiwgLTQzLjk5OTU3NTEwMTI1ODc0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc4MWIwODFlZjVmNDIwZDk3ZDE0YTBlY2YyNjFmMTcuc2V0Q29udGVudChodG1sX2ZkZTBkYWRhNmY0MTQ4MjlhMDk2NmU5NzBmNzMxMTU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVlYTAzYWYyMTNmZjRhNTY4ODIzMjkzMDJjYjA4MzMyLmJpbmRQb3B1cChwb3B1cF84NzgxYjA4MWVmNWY0MjBkOTdkMTRhMGVjZjI2MWYxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGRkYzQ4MmNjNWM0N2VhOGZkMGE2NTUxMGU3YmEyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzY5NDA1NSwtNDMuOTE3MTM2Mjg4ODU1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmU5NThmZTQ1MGVjNDRhZmI5MDc5MDQ2MDJlYzE2MDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmM2MjVhOTJjNDZkNDgwMTg2YTM0N2JhZGE1YjE1NTIgPSAkKCc8ZGl2IGlkPSJodG1sXzZjNjI1YTkyYzQ2ZDQ4MDE4NmEzNDdiYWRhNWIxNTUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gSk9BUVVJTTogKC0xOS44NzY5NDA1NSwgLTQzLjkxNzEzNjI4ODg1NTAyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU5NThmZTQ1MGVjNDRhZmI5MDc5MDQ2MDJlYzE2MDEuc2V0Q29udGVudChodG1sXzZjNjI1YTkyYzQ2ZDQ4MDE4NmEzNDdiYWRhNWIxNTUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0ZGRjNDgyY2M1YzQ3ZWE4ZmQwYTY1NTEwZTdiYTI3LmJpbmRQb3B1cChwb3B1cF9iZTk1OGZlNDUwZWM0NGFmYjkwNzkwNDYwMmVjMTYwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2QwODk3NDMzNTM0NGVjODg4MDUzODJjZjRkODY1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTQ1OTExNSwtNDMuOTA0NTk1NDc0NjA0NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzExNjk4NGFkZjIxNDFlY2I0MWFmZTBkZmM2NWIxMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzA4ZTBmZDU4MDQ2NDY3OGI1NTFhYTEwZDdmMTEzYzkgPSAkKCc8ZGl2IGlkPSJodG1sXzcwOGUwZmQ1ODA0NjQ2NzhiNTUxYWExMGQ3ZjExM2M5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gU0lMVkVSSU86ICgtMTkuODU0NTkxMTUsIC00My45MDQ1OTU0NzQ2MDQ1OSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMTY5ODRhZGYyMTQxZWNiNDFhZmUwZGZjNjViMTAyLnNldENvbnRlbnQoaHRtbF83MDhlMGZkNTgwNDY0Njc4YjU1MWFhMTBkN2YxMTNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kM2QwODk3NDMzNTM0NGVjODg4MDUzODJjZjRkODY1Ny5iaW5kUG9wdXAocG9wdXBfNzExNjk4NGFkZjIxNDFlY2I0MWFmZTBkZmM2NWIxMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmIzNjE1Zjg5Y2I2NDU3Nzg5Y2Y2NWI3MmY4MDVhZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg3Mjc1NDUsLTQzLjk3NTQxOTE5MTk2OTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0MjhkOTY2MGY4MjRjZmRiNjhmZjIwNzJmOTI3ZTdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmNGMyMDQxYmE0NzRlZWY5NmMzZDc4NWM2YTJlOTY2ID0gJCgnPGRpdiBpZD0iaHRtbF8xZjRjMjA0MWJhNDc0ZWVmOTZjM2Q3ODVjNmEyZTk2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RU5HRU5ITyBOT0dVRUlSQTogKC0xOS44ODcyNzU0NSwgLTQzLjk3NTQxOTE5MTk2OTU1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQyOGQ5NjYwZjgyNGNmZGI2OGZmMjA3MmY5MjdlN2Yuc2V0Q29udGVudChodG1sXzFmNGMyMDQxYmE0NzRlZWY5NmMzZDc4NWM2YTJlOTY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiMzYxNWY4OWNiNjQ1Nzc4OWNmNjViNzJmODA1YWVkLmJpbmRQb3B1cChwb3B1cF83NDI4ZDk2NjBmODI0Y2ZkYjY4ZmYyMDcyZjkyN2U3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYmJkYTY1YTBjYzQ0MDU1OTIxZmNlMGI5OWFjYWY2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODY5MTYyLC00My45NTk5OTUzMTQ4ODQ4NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmYyZjEyZDcwYmJjNDE5NmJmNDM0YTNhMTBlOTI2ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2EzMDNiODMzODRiNDYzOWJkMTEyZDJlMmQ4M2MyMGUgPSAkKCc8ZGl2IGlkPSJodG1sX2NhMzAzYjgzMzg0YjQ2MzliZDExMmQyZTJkODNjMjBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FUk1FTElOREE6ICgtMTkuODg2OTE2MiwgLTQzLjk1OTk5NTMxNDg4NDg2NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmMmYxMmQ3MGJiYzQxOTZiZjQzNGEzYTEwZTkyNmRhLnNldENvbnRlbnQoaHRtbF9jYTMwM2I4MzM4NGI0NjM5YmQxMTJkMmUyZDgzYzIwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYmJkYTY1YTBjYzQ0MDU1OTIxZmNlMGI5OWFjYWY2My5iaW5kUG9wdXAocG9wdXBfYmYyZjEyZDcwYmJjNDE5NmJmNDM0YTNhMTBlOTI2ZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDI5ZTNmYmMyZGNhNDU1MTlhNmRjMzdmZWZiOThlMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYzOTc2NiwtNDQuMDI0NjIyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NGE0NGVlOWFjZWY0ZTJhOGFiYWYxNDViNGM5NmFmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzVmYTQ3MzY5NzY0N2VjYmQ3MzJmNmJmYzQ1MmRlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTc1ZmE0NzM2OTc2NDdlY2JkNzMyZjZiZmM0NTJkZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVTVFJFTEEgREFMVkE6ICgtMTkuODYzOTc2NiwgLTQ0LjAyNDYyMjcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NGE0NGVlOWFjZWY0ZTJhOGFiYWYxNDViNGM5NmFmOS5zZXRDb250ZW50KGh0bWxfYTc1ZmE0NzM2OTc2NDdlY2JkNzMyZjZiZmM0NTJkZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDI5ZTNmYmMyZGNhNDU1MTlhNmRjMzdmZWZiOThlMTAuYmluZFBvcHVwKHBvcHVwXzY0YTQ0ZWU5YWNlZjRlMmE4YWJhZjE0NWI0Yzk2YWY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjZjI0ZjllMTA1YzRkZGU5OWE4NTRkODFlMWY3ZWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgxMTUwMTMsLTQzLjkzNDUyOTE3MjQ1MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJmYzA0YWFiNTA2NDU2MWJiM2E1NDI5Y2UyMTdlZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmNhOTFjYzBjOTRkNDE4ZGIwM2U4ZDYwYzBmMzAzOTMgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjYTkxY2MwYzk0ZDQxOGRiMDNlOGQ2MGMwZjMwMzkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FVEVMVklOQSBDQVJORUlSTzogKC0xOS44MTE1MDEzLCAtNDMuOTM0NTI5MTcyNDUyMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiZmMwNGFhYjUwNjQ1NjFiYjNhNTQyOWNlMjE3ZWRhLnNldENvbnRlbnQoaHRtbF9mY2E5MWNjMGM5NGQ0MThkYjAzZThkNjBjMGYzMDM5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Y2YyNGY5ZTEwNWM0ZGRlOTlhODU0ZDgxZTFmN2VlMy5iaW5kUG9wdXAocG9wdXBfMWJmYzA0YWFiNTA2NDU2MWJiM2E1NDI5Y2UyMTdlZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI1MWEwOTgwMTdiNGRlMWJlZTUzMDRkOWI4ZDJlOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYyNzY5MDQ5OTk5OTk3LC00My45MTg2NzM4MjI4OTQ5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzFjMzc2Mzg0ZGI0OGRjYTAxNDRjYjUzNmVkNDE5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2I0OWQ4YWU5MzI0ZmE3ODgzZjVhNTY0NTJmZGU3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzNiNDlkOGFlOTMyNGZhNzg4M2Y1YTU2NDUyZmRlN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVZTUFSRDogKC0xOS44NjI3NjkwNDk5OTk5OTcsIC00My45MTg2NzM4MjI4OTQ5Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczMWMzNzYzODRkYjQ4ZGNhMDE0NGNiNTM2ZWQ0MTk4LnNldENvbnRlbnQoaHRtbF8zM2I0OWQ4YWU5MzI0ZmE3ODgzZjVhNTY0NTJmZGU3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYjUxYTA5ODAxN2I0ZGUxYmVlNTMwNGQ5YjhkMmU5NS5iaW5kUG9wdXAocG9wdXBfNzMxYzM3NjM4NGRiNDhkY2EwMTQ0Y2I1MzZlZDQxOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U5NDRkMTZmMzM3NDExYjlmM2E5YzYzNjIxYjAwNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODcyNDQ0MTUsLTQzLjkxNzQxMjAyMTk5MzE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzMTIxZDc0OTFlYTQwOGM4ODJmMzJlMDYzZmQ2NTdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkYjc1NjgzNDc2MjQwMmVhZWY1ZTNhMmI5MWUyOGM1ID0gJCgnPGRpdiBpZD0iaHRtbF84ZGI3NTY4MzQ3NjI0MDJlYWVmNWUzYTJiOTFlMjhjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkVSTkFPIERJQVM6ICgtMTkuODcyNDQ0MTUsIC00My45MTc0MTIwMjE5OTMxNyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzMTIxZDc0OTFlYTQwOGM4ODJmMzJlMDYzZmQ2NTdmLnNldENvbnRlbnQoaHRtbF84ZGI3NTY4MzQ3NjI0MDJlYWVmNWUzYTJiOTFlMjhjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZTk0NGQxNmYzMzc0MTFiOWYzYTljNjM2MjFiMDA0Yy5iaW5kUG9wdXAocG9wdXBfOTMxMjFkNzQ5MWVhNDA4Yzg4MmYzMmUwNjNmZDY1N2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjdlMDRmMWNlNWU0NDE4MmI4YmIyNmFlYTA4YjM2YzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTk0NzQzMDUsLTQzLjk5OTkwODI3ODU2ODA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjOTkzYWY4NDk1MDQ1MmQ4M2FiOThmM2E4MmZhYTVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmZjFlMDIwYjcxMzQ0MmRhZGYyZGRkMWQ3YTMzNTA0ID0gJCgnPGRpdiBpZD0iaHRtbF8wZmYxZTAyMGI3MTM0NDJkYWRmMmRkZDFkN2EzMzUwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkxBVklPIE1BUlFVRVMgTElTQk9BOiAoLTE5Ljk5NDc0MzA1LCAtNDMuOTk5OTA4Mjc4NTY4MDQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzk5M2FmODQ5NTA0NTJkODNhYjk4ZjNhODJmYWE1Zi5zZXRDb250ZW50KGh0bWxfMGZmMWUwMjBiNzEzNDQyZGFkZjJkZGQxZDdhMzM1MDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjdlMDRmMWNlNWU0NDE4MmI4YmIyNmFlYTA4YjM2YzMuYmluZFBvcHVwKHBvcHVwXzNjOTkzYWY4NDk1MDQ1MmQ4M2FiOThmM2E4MmZhYTVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwYWU5MDFkMzdhYjRjNTNiOWM3NzMyM2Y1OTcyNWUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNzEwMjc1LC00My45MzQ4NjI0ODQyMzcwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2Y5MmY4MzkyOGI0YjZkYmE5YTg5NzMxYzA4OTZlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZjVlY2FkZDIwNmI0Y2UxYTFkODQ4NzgzNDk3NjIyNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWY1ZWNhZGQyMDZiNGNlMWExZDg0ODc4MzQ5NzYyMjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZMT1JBTUFSOiAoLTE5LjgzNzEwMjc1LCAtNDMuOTM0ODYyNDg0MjM3MDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hN2Y5MmY4MzkyOGI0YjZkYmE5YTg5NzMxYzA4OTZlZi5zZXRDb250ZW50KGh0bWxfZWY1ZWNhZGQyMDZiNGNlMWExZDg0ODc4MzQ5NzYyMjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzBhZTkwMWQzN2FiNGM1M2I5Yzc3MzIzZjU5NzI1ZTIuYmluZFBvcHVwKHBvcHVwX2E3ZjkyZjgzOTI4YjRiNmRiYTlhODk3MzFjMDg5NmVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4NDRkZmI2ODY2ZDQ2ZGU5YjA2NWFiMzc2MGY5MTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwNzE3OTMsLTQ0LjAwMTcxOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWViMzU4ZjM2NmM3NGVjMWJlYmE3N2U0YjQyMDdlZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVlYWQyNjc1NzY5NGMwZjkxZGVkYTg1YjBkMjZjNmIgPSAkKCc8ZGl2IGlkPSJodG1sXzM1ZWFkMjY3NTc2OTRjMGY5MWRlZGE4NWIwZDI2YzZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GUkVJIEVVU1RBUVVJTzogKC0xOS45MDcxNzkzLCAtNDQuMDAxNzE5OCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlYjM1OGYzNjZjNzRlYzFiZWJhNzdlNGI0MjA3ZWQwLnNldENvbnRlbnQoaHRtbF8zNWVhZDI2NzU3Njk0YzBmOTFkZWRhODViMGQyNmM2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODQ0ZGZiNjg2NmQ0NmRlOWIwNjVhYjM3NjBmOTE2NS5iaW5kUG9wdXAocG9wdXBfNWViMzU4ZjM2NmM3NGVjMWJlYmE3N2U0YjQyMDdlZDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWNlZmU3MzdkMDRiNDc5MWJkNWJiYmM4ZjA0MWY5MjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODA3NzA4NCwtNDMuOTM3ODQxNzUwMzE4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWFjNGM4ODZlZDU0MDY3ODMzNWQ1NmQ1NjQ0YWMyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTBkMGQ5YTg0NmM0ZDUzOTJhMzM4NGQ3ZWE3MTk5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWEwZDBkOWE4NDZjNGQ1MzkyYTMzODRkN2VhNzE5OTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZSRUkgTEVPUE9MRE86ICgtMTkuODA3NzA4NCwgLTQzLjkzNzg0MTc1MDMxODQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWFjNGM4ODZlZDU0MDY3ODMzNWQ1NmQ1NjQ0YWMyMi5zZXRDb250ZW50KGh0bWxfZWEwZDBkOWE4NDZjNGQ1MzkyYTMzODRkN2VhNzE5OTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWNlZmU3MzdkMDRiNDc5MWJkNWJiYmM4ZjA0MWY5MjcuYmluZFBvcHVwKHBvcHVwXzVhYWM0Yzg4NmVkNTQwNjc4MzM1ZDU2ZDU2NDRhYzIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwOGQyMDE2ZGI3MjRjMmJhYjU0ZWNiNzAxMmExN2Q5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMjUyMDgsLTQzLjk4ODYxMzY1NjE2OTEzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDU0YjUyM2FlZDk0OWYwODQyZjA0ZmYwNWU2ZGI1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZmE2NmMzZmQxZjE0NWQxYTgzMzE5NTY3NzFkZTI5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWZhNjZjM2ZkMWYxNDVkMWE4MzMxOTU2NzcxZGUyOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBTUVMRUlSQTogKC0xOS45MzI1MjA4LCAtNDMuOTg4NjEzNjU2MTY5MTM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQ1NGI1MjNhZWQ5NDlmMDg0MmYwNGZmMDVlNmRiNTAuc2V0Q29udGVudChodG1sX2VmYTY2YzNmZDFmMTQ1ZDFhODMzMTk1Njc3MWRlMjk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwOGQyMDE2ZGI3MjRjMmJhYjU0ZWNiNzAxMmExN2Q5LmJpbmRQb3B1cChwb3B1cF85NDU0YjUyM2FlZDk0OWYwODQyZjA0ZmYwNWU2ZGI1MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMGM5M2RmOWQ2M2E0ODNiOTIxZWY0MzQ5MDU2ZDM2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDUwNTAzLC00NC4wMDk0NDYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmNDYzYjEyOTI2MDQyNDI5YzI0YzFkYTM2Yzc5ZDZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyYmIwZjhlMzA3MjQ4ZTM4YmI3ZTcyMDc0NTY4ZmU0ID0gJCgnPGRpdiBpZD0iaHRtbF9hMmJiMGY4ZTMwNzI0OGUzOGJiN2U3MjA3NDU2OGZlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0xBTElKQTogKC0xOS45NDUwNTAzLCAtNDQuMDA5NDQ2Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmNDYzYjEyOTI2MDQyNDI5YzI0YzFkYTM2Yzc5ZDZmLnNldENvbnRlbnQoaHRtbF9hMmJiMGY4ZTMwNzI0OGUzOGJiN2U3MjA3NDU2OGZlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMGM5M2RmOWQ2M2E0ODNiOTIxZWY0MzQ5MDU2ZDM2YS5iaW5kUG9wdXAocG9wdXBfMGY0NjNiMTI5MjYwNDI0MjljMjRjMWRhMzZjNzlkNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTk4MjY4NzUyOTAzNDQ1YjliYzcwODIzNzU2MmIxODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk4MzgzMSwtNDQuMDE0MTQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MjZmMTUyYWZiOTY0Yjc3YTZiZWYxYTlkZGJmZjE1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmJhZThkNjE2ZjE0NGJkOWYwZDk2YmNmMzliNTM5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzJiYWU4ZDYxNmYxNDRiZDlmMGQ5NmJjZjM5YjUzOTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdMT1JJQTogKC0xOS44OTgzODMxLCAtNDQuMDE0MTQ4OSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyNmYxNTJhZmI5NjRiNzdhNmJlZjFhOWRkYmZmMTUxLnNldENvbnRlbnQoaHRtbF9jMmJhZThkNjE2ZjE0NGJkOWYwZDk2YmNmMzliNTM5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTgyNjg3NTI5MDM0NDViOWJjNzA4MjM3NTYyYjE4Ni5iaW5kUG9wdXAocG9wdXBfNjI2ZjE1MmFmYjk2NGI3N2E2YmVmMWE5ZGRiZmYxNTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjM3MTZjYzRjMDczNGI3Y2FkODJhYzQzZjBlMmFhOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODY1NzAxMTAwMDAwMDAzLC00My45MDAwODkyNTg0NjQzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iM2NmMmFmOTZjNDY0YThkOTlmZjcyYjZhNjA0YjczYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YjY3NjgwMDAwMzQ0OTc2OTU3NTIyNTc4MGY0MzhhMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmI2NzY4MDAwMDM0NDk3Njk1NzUyMjU3ODBmNDM4YTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdPSUFOSUE6ICgtMTkuODY1NzAxMTAwMDAwMDAzLCAtNDMuOTAwMDg5MjU4NDY0MzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iM2NmMmFmOTZjNDY0YThkOTlmZjcyYjZhNjA0YjczYi5zZXRDb250ZW50KGh0bWxfNmI2NzY4MDAwMDM0NDk3Njk1NzUyMjU3ODBmNDM4YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjM3MTZjYzRjMDczNGI3Y2FkODJhYzQzZjBlMmFhOGYuYmluZFBvcHVwKHBvcHVwX2IzY2YyYWY5NmM0NjRhOGQ5OWZmNzJiNmE2MDRiNzNiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwMzM5YmIxMjJlYzQ4ZGI4MWVkZmMwMDk3MjU5YTVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjIxMDQ2OTcsLTQ0LjAwMzM1OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWZlNDY2OGM1ZTM2NGM4OGEzNzRiZDIzY2RhZWMwNzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBlNDgxYzBlNDY2NDRkZTkzZjJhMWI0MjE1ZDUxMjEgPSAkKCc8ZGl2IGlkPSJodG1sX2MwZTQ4MWMwZTQ2NjQ0ZGU5M2YyYTFiNDIxNWQ1MTIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HT1JEVVJBUzogKC0yMC4yMTA0Njk3LCAtNDQuMDAzMzU5Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmZTQ2NjhjNWUzNjRjODhhMzc0YmQyM2NkYWVjMDczLnNldENvbnRlbnQoaHRtbF9jMGU0ODFjMGU0NjY0NGRlOTNmMmExYjQyMTVkNTEyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMDMzOWJiMTIyZWM0OGRiODFlZGZjMDA5NzI1OWE1ZC5iaW5kUG9wdXAocG9wdXBfNWZlNDY2OGM1ZTM2NGM4OGEzNzRiZDIzY2RhZWMwNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzA4NWU4YmRhMmVlNDkzZGEwYWU5OTc2ODk1NzA2M2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQ0MTA0NTUsLTQzLjkyNTUzNDMyMzM5NzI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0ZmVjYTJmYjAwNDQwZjQ4ZWUyYWUzMDVlMGRjYjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjOGNlMjI5ZjI5YjQxZjA4NThlMmUwYzk3NzMyOTA5ID0gJCgnPGRpdiBpZD0iaHRtbF82YzhjZTIyOWYyOWI0MWYwODU4ZTJlMGM5NzczMjkwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1VBUkFOSTogKC0xOS44NDQxMDQ1NSwgLTQzLjkyNTUzNDMyMzM5NzI4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRmZWNhMmZiMDA0NDBmNDhlZTJhZTMwNWUwZGNiOTIuc2V0Q29udGVudChodG1sXzZjOGNlMjI5ZjI5YjQxZjA4NThlMmUwYzk3NzMyOTA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwODVlOGJkYTJlZTQ5M2RhMGFlOTk3Njg5NTcwNjNmLmJpbmRQb3B1cChwb3B1cF9hNGZlY2EyZmIwMDQ0MGY0OGVlMmFlMzA1ZTBkY2I5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWQyMWQxNzQ2MDk0YWMwYTkyODkzYWJiNjBmMjdjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTM4ODE0LC00My45Nzg3MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkwMDEzMjcyOTIyNDMwYWExZGJiYzFmMDU3ODNiOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjgyODg1NzU4ZTA0NDQ1M2JkODgyODFkODZhZjBhYTcgPSAkKCc8ZGl2IGlkPSJodG1sX2Y4Mjg4NTc1OGUwNDQ0NTNiZDg4MjgxZDg2YWYwYWE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IQVZBSTogKC0xOS45NTM4ODE0LCAtNDMuOTc4NzI5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODkwMDEzMjcyOTIyNDMwYWExZGJiYzFmMDU3ODNiOTEuc2V0Q29udGVudChodG1sX2Y4Mjg4NTc1OGUwNDQ0NTNiZDg4MjgxZDg2YWYwYWE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhZDIxZDE3NDYwOTRhYzBhOTI4OTNhYmI2MGYyN2M0LmJpbmRQb3B1cChwb3B1cF84OTAwMTMyNzI5MjI0MzBhYTFkYmJjMWYwNTc4M2I5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODM0MDYxMzc0Yjc0MGJlYjk5NTZjZWZmOWNjYzViNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NDE2OTM2NSwtNDMuOTM4MTM0OTU5NTQ2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NzliZDAzNjQwYmY0MzdmOTY3ZDcxMjZlZDZhMGNkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTZmMGQ3MTYwYzQ0OGQwYWY2YjE3NGM0YzhiZmU5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDU2ZjBkNzE2MGM0NDhkMGFmNmIxNzRjNGM4YmZlOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhFTElPUE9MSVM6ICgtMTkuODQxNjkzNjUsIC00My45MzgxMzQ5NTk1NDY0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTc5YmQwMzY0MGJmNDM3Zjk2N2Q3MTI2ZWQ2YTBjZDMuc2V0Q29udGVudChodG1sXzA1NmYwZDcxNjBjNDQ4ZDBhZjZiMTc0YzRjOGJmZTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4MzQwNjEzNzRiNzQwYmViOTk1NmNlZmY5Y2NjNWI3LmJpbmRQb3B1cChwb3B1cF81NzliZDAzNjQwYmY0MzdmOTY3ZDcxMjZlZDZhMGNkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTc2MTNhZjYzM2M0MDkyYTQ1ZDRlNmExZjM1YjljNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDIxNzMyNSwtNDMuOTQ2NjkxNzI5MDQ1MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUzYjcxODk3ODE1NGFiMTlhN2MxNWQ5NjEyNWFhNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZjOWM4MDZmZjcwNDMyY2EzYzE0M2MyYjA0N2E0YzQgPSAkKCc8ZGl2IGlkPSJodG1sX2Y2YzljODA2ZmY3MDQzMmNhM2MxNDNjMmIwNDdhNGM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JQVBJOiAoLTE5LjkwMjE3MzI1LCAtNDMuOTQ2NjkxNzI5MDQ1MDkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTNiNzE4OTc4MTU0YWIxOWE3YzE1ZDk2MTI1YWE2Ni5zZXRDb250ZW50KGh0bWxfZjZjOWM4MDZmZjcwNDMyY2EzYzE0M2MyYjA0N2E0YzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjk3NjEzYWY2MzNjNDA5MmE0NWQ0ZTZhMWYzNWI5YzQuYmluZFBvcHVwKHBvcHVwXzE1M2I3MTg5NzgxNTRhYjE5YTdjMTVkOTYxMjVhYTY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmNjA4ZGFiNjljNjRmOWI5NmUxM2RhNTY0NDE0NDM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwNjkyNzY5OTk5OTk5NywtNDMuOTk4MTMxMzEyOTUxNTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0NDdhZWM0ZWVmOTRlNTdhYThlMzhiY2I0Y2Y2NDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzNTViYjQ3YmZjODQ2OGM4ZThjOWFiM2YwM2NhYjM1ID0gJCgnPGRpdiBpZD0iaHRtbF82MzU1YmI0N2JmYzg0NjhjOGU4YzlhYjNmMDNjYWIzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SU5DT05GSURFTkNJQTogKC0xOS45MDY5Mjc2OTk5OTk5OTcsIC00My45OTgxMzEzMTI5NTE1MTQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNDQ3YWVjNGVlZjk0ZTU3YWE4ZTM4YmNiNGNmNjQ3Zi5zZXRDb250ZW50KGh0bWxfNjM1NWJiNDdiZmM4NDY4YzhlOGM5YWIzZjAzY2FiMzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y2MDhkYWI2OWM2NGY5Yjk2ZTEzZGE1NjQ0MTQ0MzUuYmluZFBvcHVwKHBvcHVwX2U0NDdhZWM0ZWVmOTRlNTdhYThlMzhiY2I0Y2Y2NDdmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5YjBkN2FjNzUyOTQwZjY4MmVmOGRmMzhkNjk2OGZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjAxOTI2OTI1LC00NC4wMzM1NTIyMjgzMzA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODFhOTZhYWFkMzc0Yjc2OTE0M2FjMWM3Y2IzNzY1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZGUzMzZkYjY0YzE0ZTVjOWRkNzI4NGUzMDczZmE5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGRlMzM2ZGI2NGMxNGU1YzlkZDcyODRlMzA3M2ZhOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklOREVQRU5ERU5DSUE6ICgtMjAuMDE5MjY5MjUsIC00NC4wMzM1NTIyMjgzMzA0Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4MWE5NmFhYWQzNzRiNzY5MTQzYWMxYzdjYjM3NjVjLnNldENvbnRlbnQoaHRtbF9kZGUzMzZkYjY0YzE0ZTVjOWRkNzI4NGUzMDczZmE5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOWIwZDdhYzc1Mjk0MGY2ODJlZjhkZjM4ZDY5NjhmYi5iaW5kUG9wdXAocG9wdXBfYzgxYTk2YWFhZDM3NGI3NjkxNDNhYzFjN2NiMzc2NWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2MzOGFkZjVjZTY4NDg0MmI5Yjg4NTdkZjAzZTExNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODE3ODE3NCwtNDMuODkyNjQxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjgwY2U5Y2Y5N2E0YWRhOWFmYzc1ZjcwOTliN2RjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjc1OGYzM2E3MDk0YjBkOTMzYjhiMGRkNzIzZDU5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I3NThmMzNhNzA5NGIwZDkzM2I4YjBkZDcyM2Q1OWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklORFVTVFJJQUwgUk9EUklHVUVTOiAoLTE5LjgxNzgxNzQsIC00My44OTI2NDEyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzI4MGNlOWNmOTdhNGFkYTlhZmM3NWY3MDk5YjdkYzIuc2V0Q29udGVudChodG1sX2NiNzU4ZjMzYTcwOTRiMGQ5MzNiOGIwZGQ3MjNkNTllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdjMzhhZGY1Y2U2ODQ4NDJiOWI4ODU3ZGYwM2UxMTRmLmJpbmRQb3B1cChwb3B1cF9jMjgwY2U5Y2Y5N2E0YWRhOWFmYzc1ZjcwOTliN2RjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNDgyZDE1YTA2YzA0YzAzYTkzNGI2ZGI5YjViY2FmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Njc5MjYzLC00My45NzcwODMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyMTc4Zjk3N2NjMjRmOGY5MjY1YjU4ODc5MjFhYmMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExYTNkZGE0YjYzZjQwN2JiMjkzZTBlNzQ5NjA0ZTllID0gJCgnPGRpdiBpZD0iaHRtbF8xMWEzZGRhNGI2M2Y0MDdiYjI5M2UwZTc0OTYwNGU5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q1VOSEE6ICgtMTkuOTY3OTI2MywgLTQzLjk3NzA4MzMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjE3OGY5NzdjYzI0ZjhmOTI2NWI1ODg3OTIxYWJjMy5zZXRDb250ZW50KGh0bWxfMTFhM2RkYTRiNjNmNDA3YmIyOTNlMGU3NDk2MDRlOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzQ4MmQxNWEwNmMwNGMwM2E5MzRiNmRiOWI1YmNhZjcuYmluZFBvcHVwKHBvcHVwX2EyMTc4Zjk3N2NjMjRmOGY5MjY1YjU4ODc5MjFhYmMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgzMTg5NzBhNDI1ZjRmYjk5YzRmZmI1Mjg2YzU2ZTdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxMjAyMTQsLTQzLjk5ODUyMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjJlNDU2NGEwMmJhNDM2ZDkxNGRkODRjZWFjM2JlYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU4YWU1NmQ5ODI3NGUzMmJhOGY1Yzk5YWY0NGFjMDkgPSAkKCc8ZGl2IGlkPSJodG1sX2RlOGFlNTZkOTgyNzRlMzJiYThmNWM5OWFmNDRhYzA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JUEFORU1BOiAoLTE5LjkxMjAyMTQsIC00My45OTg1MjI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJlNDU2NGEwMmJhNDM2ZDkxNGRkODRjZWFjM2JlYWYuc2V0Q29udGVudChodG1sX2RlOGFlNTZkOTgyNzRlMzJiYThmNWM5OWFmNDRhYzA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzMTg5NzBhNDI1ZjRmYjk5YzRmZmI1Mjg2YzU2ZTdlLmJpbmRQb3B1cChwb3B1cF8yMmU0NTY0YTAyYmE0MzZkOTE0ZGQ4NGNlYWMzYmVhZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTA2OGYyYWE3NDM0ZjQwYmQyYTA3N2Y1MWM0ZjA0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODE3NzQ2LC00My45MzIyNjU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0Yzc5Y2I5MTk1NTRiZGY4NGQ3M2JkMTk2YWI5YjhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExOWE4MTRmM2NlYTRjMjBhNjA1ZjM2M2VkYzg4NTY4ID0gJCgnPGRpdiBpZD0iaHRtbF9hMTlhODE0ZjNjZWE0YzIwYTYwNWYzNjNlZGM4ODU2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVBJUkFOR0E6ICgtMTkuODgxNzc0NiwgLTQzLjkzMjI2NTkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGM3OWNiOTE5NTU0YmRmODRkNzNiZDE5NmFiOWI4ZC5zZXRDb250ZW50KGh0bWxfYTE5YTgxNGYzY2VhNGMyMGE2MDVmMzYzZWRjODg1NjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjkwNjhmMmFhNzQzNGY0MGJkMmEwNzdmNTFjNGYwNDguYmluZFBvcHVwKHBvcHVwXzA0Yzc5Y2I5MTk1NTRiZGY4NGQ3M2JkMTk2YWI5YjhkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3NzQzNDlhN2YxNzRkZDA5YjdiZjY3YzRmNzdhNzFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgwMzM1MzY1LC00My45MzIzNDg3NzQ4OTc3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzA0NTgwNTQwMjc0YjllYWMzOTNjNzdmYjdiMmNiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OWZjMjg2YzYwYmQ0ODZjYjk3NTExNzAyZDYwZGQ0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzlmYzI4NmM2MGJkNDg2Y2I5NzUxMTcwMmQ2MGRkNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUVVFTElORTogKC0xOS44MDMzNTM2NSwgLTQzLjkzMjM0ODc3NDg5Nzc5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTMwNDU4MDU0MDI3NGI5ZWFjMzkzYzc3ZmI3YjJjYjMuc2V0Q29udGVudChodG1sXzc5ZmMyODZjNjBiZDQ4NmNiOTc1MTE3MDJkNjBkZDRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3NzQzNDlhN2YxNzRkZDA5YjdiZjY3YzRmNzdhNzFjLmJpbmRQb3B1cChwb3B1cF81MzA0NTgwNTQwMjc0YjllYWMzOTNjNzdmYjdiMmNiMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZmFkNTU3OTdhOGY0MTk5YTk1Y2U2OWVjZTVmNzAzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTc0NzIzNSwtNDMuOTg4ODM1NTEzODY0ODU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiMmQ5YzIwNDllOTRhYmY4NTIzNzVkZTQ4ZjExOTM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4NDEwMWVmNWYwZTQ0YzY5N2Q3ZTNhMTE4MGQxNDJlID0gJCgnPGRpdiBpZD0iaHRtbF9lODQxMDFlZjVmMGU0NGM2OTdkN2UzYTExODBkMTQyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEFMVk9SQURBOiAoLTE5Ljg5NzQ3MjM1LCAtNDMuOTg4ODM1NTEzODY0ODU2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmIyZDljMjA0OWU5NGFiZjg1MjM3NWRlNDhmMTE5Mzkuc2V0Q29udGVudChodG1sX2U4NDEwMWVmNWYwZTQ0YzY5N2Q3ZTNhMTE4MGQxNDJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmYWQ1NTc5N2E4ZjQxOTlhOTVjZTY5ZWNlNWY3MDMwLmJpbmRQb3B1cChwb3B1cF9mYjJkOWMyMDQ5ZTk0YWJmODUyMzc1ZGU0OGYxMTkzOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjg5NjliY2VkMDU0ODEwYTE3OGIyM2ViNjBkY2I3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43OTIzNTk0MDAwMDAwMDIsLTQzLjk3MDA0OTUxMjAzODYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4ZGY3MjFkOWY4NjRmYjJhZTc0MWE4OTM0NzgxYjAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhYjMxMTU3ODg2YTQ0OTFhZDUxYmM0ZWE0NmE0ZDZlID0gJCgnPGRpdiBpZD0iaHRtbF9mYWIzMTE1Nzg4NmE0NDkxYWQ1MWJjNGVhNDZhNGQ2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIENPTUVSQ0lBUklPUzogKC0xOS43OTIzNTk0MDAwMDAwMDIsIC00My45NzAwNDk1MTIwMzg2Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4ZGY3MjFkOWY4NjRmYjJhZTc0MWE4OTM0NzgxYjAyLnNldENvbnRlbnQoaHRtbF9mYWIzMTE1Nzg4NmE0NDkxYWQ1MWJjNGVhNDZhNGQ2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjg5NjliY2VkMDU0ODEwYTE3OGIyM2ViNjBkY2I3Ni5iaW5kUG9wdXAocG9wdXBfYjhkZjcyMWQ5Zjg2NGZiMmFlNzQxYTg5MzQ3ODFiMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzNkNTI5M2IyMWFlNDVlNWJkMWY4OGQ5YjEyMDhhNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODAyMjEzLC00My45NjcwNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhYzc5ODg2ZjEyOTQwYzJiMGYxZjYyNzA2MjI3NjZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhYmRlOGJiODNkMTRkYzA4MjZjNDY4MGJiNmI4NGEyID0gJCgnPGRpdiBpZD0iaHRtbF9lYWJkZThiYjgzZDE0ZGMwODI2YzQ2ODBiYjZiODRhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEVVUk9QQTogKC0xOS44MDIyMTMsIC00My45NjcwNjY3KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFjNzk4ODZmMTI5NDBjMmIwZjFmNjI3MDYyMjc2NmQuc2V0Q29udGVudChodG1sX2VhYmRlOGJiODNkMTRkYzA4MjZjNDY4MGJiNmI4NGEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzZDUyOTNiMjFhZTQ1ZTViZDFmODhkOWIxMjA4YTcyLmJpbmRQb3B1cChwb3B1cF9iYWM3OTg4NmYxMjk0MGMyYjBmMWY2MjcwNjIyNzY2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGEzZmY5YzExY2Q0M2M4YTllYjBlYjc2MWY1ODRhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MjczMTA3LC00My45MjY5MjExMjI4MTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YjVlNjJlOGRkNzA0ODMwYTNkOWI0ZWZhMzc1MjIzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTBlZDc0ZDNiMGY0YTk4YTQ4ODc5MzBiYjg2YWVhMyA9ICQoJzxkaXYgaWQ9Imh0bWxfODUwZWQ3NGQzYjBmNGE5OGE0ODg3OTMwYmI4NmFlYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBGRUxJQ0lEQURFOiAoLTE5LjgyNzMxMDcsIC00My45MjY5MjExMjI4MTMxNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiNWU2MmU4ZGQ3MDQ4MzBhM2Q5YjRlZmEzNzUyMjM5LnNldENvbnRlbnQoaHRtbF84NTBlZDc0ZDNiMGY0YTk4YTQ4ODc5MzBiYjg2YWVhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OGEzZmY5YzExY2Q0M2M4YTllYjBlYjc2MWY1ODRhZS5iaW5kUG9wdXAocG9wdXBfNmI1ZTYyZThkZDcwNDgzMGEzZDliNGVmYTM3NTIyMzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNjNzdlZDU4YzU1NDg0MDhiODg2ZjcwNTBjMjIyNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEwNzkwNywtNDQuMDA3Njg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMDdkOGFmNGE3NjQyMTc5MzVlYWZkZjY5Y2MzYzI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhOTcwMjJlYTljODQyMThiNzc4NjVlYjI5YmEzZWI2ID0gJCgnPGRpdiBpZD0iaHRtbF8wYTk3MDIyZWE5Yzg0MjE4Yjc3ODY1ZWIyOWJhM2ViNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEZJTEFERUxGSUE6ICgtMTkuOTEwNzkwNywgLTQ0LjAwNzY4NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzMDdkOGFmNGE3NjQyMTc5MzVlYWZkZjY5Y2MzYzI4LnNldENvbnRlbnQoaHRtbF8wYTk3MDIyZWE5Yzg0MjE4Yjc3ODY1ZWIyOWJhM2ViNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Y2M3N2VkNThjNTU0ODQwOGI4ODZmNzA1MGMyMjI1Yi5iaW5kUG9wdXAocG9wdXBfNTMwN2Q4YWY0YTc2NDIxNzkzNWVhZmRmNjljYzNjMjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTc1NjI1ZjI1NzE3NGIyMjlkMWEyNGRjZmFkNTU4ZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODI3NjMxMiwtNDMuOTM1ODc0OTQzNzI5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDdlNDlkOGMyZTM0NDQ2NGI5NTZiNDE3MDVmNDJhOWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzBmN2IxNWU5MzBhNDkxYWFiODQzOTdhMWNiYTllYmQgPSAkKCc8ZGl2IGlkPSJodG1sXzMwZjdiMTVlOTMwYTQ5MWFhYjg0Mzk3YTFjYmE5ZWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJESU0gR1VBTkFCQVJBOiAoLTE5LjgyNzYzMTIsIC00My45MzU4NzQ5NDM3Mjk5OSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3ZTQ5ZDhjMmUzNDQ0NjRiOTU2YjQxNzA1ZjQyYTlkLnNldENvbnRlbnQoaHRtbF8zMGY3YjE1ZTkzMGE0OTFhYWI4NDM5N2ExY2JhOWViZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NzU2MjVmMjU3MTc0YjIyOWQxYTI0ZGNmYWQ1NThmOS5iaW5kUG9wdXAocG9wdXBfNDdlNDlkOGMyZTM0NDQ2NGI5NTZiNDE3MDVmNDJhOWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2FkM2I0ZmI0ZjkyNDRiMTk4MTZjZTNiMTU1NTA3MjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA3MjIxOTUsLTQzLjk4MTYzNzI2MDc3MTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhNTU5MzRkYjFiMDQ4N2NiZWU2ZTZjY2YyYWFjYmQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0YmQzMTBkYzhmZjRiNGU5NTRkZDUxYjg5MTJhNjdlID0gJCgnPGRpdiBpZD0iaHRtbF81NGJkMzEwZGM4ZmY0YjRlOTU0ZGQ1MWI4OTEyYTY3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIE1PTlRBTkhFUzogKC0xOS45MDcyMjE5NSwgLTQzLjk4MTYzNzI2MDc3MTY2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2E1NTkzNGRiMWIwNDg3Y2JlZTZlNmNjZjJhYWNiZDUuc2V0Q29udGVudChodG1sXzU0YmQzMTBkYzhmZjRiNGU5NTRkZDUxYjg5MTJhNjdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhZDNiNGZiNGY5MjQ0YjE5ODE2Y2UzYjE1NTUwNzIxLmJpbmRQb3B1cChwb3B1cF8zYTU1OTM0ZGIxYjA0ODdjYmVlNmU2Y2NmMmFhY2JkNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MzRkMDg3NTJhNGQ0NmNlYjNhNzI2MjQ4NjE1ZDhjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTMyMTAzLC00My44NzIxNjg2NTQ1OTAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YmQ5NWQwM2MxOTg0MzYyOGNkMTNlMTM5OGI4MDBlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NWUzZWM0ZGZlM2U0Yzc2OWFiNjk2Y2Y2NjJlNDZkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTVlM2VjNGRmZTNlNGM3NjlhYjY5NmNmNjYyZTQ2ZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBWSVRPUklBOiAoLTE5Ljg1MzIxMDMsIC00My44NzIxNjg2NTQ1OTAwNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZDk1ZDAzYzE5ODQzNjI4Y2QxM2UxMzk4YjgwMGU5LnNldENvbnRlbnQoaHRtbF85NWUzZWM0ZGZlM2U0Yzc2OWFiNjk2Y2Y2NjJlNDZkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzRkMDg3NTJhNGQ0NmNlYjNhNzI2MjQ4NjE1ZDhjZC5iaW5kUG9wdXAocG9wdXBfOWJkOTVkMDNjMTk4NDM2MjhjZDEzZTEzOThiODAwZTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWMzOGYwNTc1YTgyNDY5YjlhNWIxNjJlNDAwNzFkM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQxODg0NCwtNDQuMDAzMDU1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNzcyZGVhNzU5M2I0ZmI3ODk1N2RhMDIyNGI0MzNlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTY1NTQwNzY4MTQ0NDM2YjhhNDEzZjY1YmMwMTc4MyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjU2NTU0MDc2ODE0NDQzNmI4YTQxM2Y2NWJjMDE3ODMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTk9QT0xJUzogKC0xOS45NDE4ODQ0LCAtNDQuMDAzMDU1NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3NzJkZWE3NTkzYjRmYjc4OTU3ZGEwMjI0YjQzM2VhLnNldENvbnRlbnQoaHRtbF9iNTY1NTQwNzY4MTQ0NDM2YjhhNDEzZjY1YmMwMTc4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYzM4ZjA1NzVhODI0NjliOWE1YjE2MmU0MDA3MWQzYS5iaW5kUG9wdXAocG9wdXBfYjc3MmRlYTc1OTNiNGZiNzg5NTdkYTAyMjRiNDMzZWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQzMWVjNWU3NDZjNGJkMmFmMDNlNzNlM2U1MGJkYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTkxNDkyMzUsLTQ0LjA1NDUwMDcxODYwMjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxYzliOWI4ZmRhNjRmMTU5Yzc0MWNmODFmMGMxNDYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzMjIxMzcyZmEzODQxNjA5NzkzNWZjZDIwNTk4MTY4ID0gJCgnPGRpdiBpZD0iaHRtbF82MzIyMTM3MmZhMzg0MTYwOTc5MzVmY2QyMDU5ODE2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFUT0JBOiAoLTE5Ljk5MTQ5MjM1LCAtNDQuMDU0NTAwNzE4NjAyNjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMWM5YjliOGZkYTY0ZjE1OWM3NDFjZjgxZjBjMTQ2MS5zZXRDb250ZW50KGh0bWxfNjMyMjEzNzJmYTM4NDE2MDk3OTM1ZmNkMjA1OTgxNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGQzMWVjNWU3NDZjNGJkMmFmMDNlNzNlM2U1MGJkYTkuYmluZFBvcHVwKHBvcHVwX2UxYzliOWI4ZmRhNjRmMTU5Yzc0MWNmODFmMGMxNDYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZGM5NzZkNjU5MTRkMDZiNzgzMDFhMDYzOTY1ZjA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgxNjMyODYsLTQzLjk0MzYwODI2OTA0OTc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxZjk3ZTQwNDk5YjQxYjlhYTBlYTBiNmMwZGE1NzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmMTcyNThiOTZmYjQxODc5YjVjYjc0YjUzNDkxMjY2ID0gJCgnPGRpdiBpZD0iaHRtbF82ZjE3MjU4Yjk2ZmI0MTg3OWI1Y2I3NGI1MzQ5MTI2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SlVMSUFOQTogKC0xOS44MTYzMjg2LCAtNDMuOTQzNjA4MjY5MDQ5NzQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMWY5N2U0MDQ5OWI0MWI5YWEwZWEwYjZjMGRhNTcyNC5zZXRDb250ZW50KGh0bWxfNmYxNzI1OGI5NmZiNDE4NzliNWNiNzRiNTM0OTEyNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYThkYzk3NmQ2NTkxNGQwNmI3ODMwMWEwNjM5NjVmMDUuYmluZFBvcHVwKHBvcHVwXzAxZjk3ZTQwNDk5YjQxYjlhYTBlYTBiNmMwZGE1NzI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhZGFhZDliNTA1NTQ3ZDQ4MGNiZDczYmZhYmZkNmI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgxMDIwMzcsLTQ0LjAwMDQ0Mjg0NTU1NjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmZjBmZjkzMmMxNDQ3ZjY5OGI1N2EzOTJhYTYwOTMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjYjQwZjNkMGQ2ZTQwMjI5NmRjMzEwYjNlOWNkZTUxID0gJCgnPGRpdiBpZD0iaHRtbF8yY2I0MGYzZDBkNmU0MDIyOTZkYzMxMGIzZTljZGU1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFHT0E6ICgtMTkuODEwMjAzNywgLTQ0LjAwMDQ0Mjg0NTU1NjIyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGZmMGZmOTMyYzE0NDdmNjk4YjU3YTM5MmFhNjA5MzMuc2V0Q29udGVudChodG1sXzJjYjQwZjNkMGQ2ZTQwMjI5NmRjMzEwYjNlOWNkZTUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhZGFhZDliNTA1NTQ3ZDQ4MGNiZDczYmZhYmZkNmI1LmJpbmRQb3B1cChwb3B1cF80ZmYwZmY5MzJjMTQ0N2Y2OThiNTdhMzkyYWE2MDkzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTM2YTg0MGNkOTI0MTU3YTBjNGNlMDhjODEyYjFlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjIzOTExLC00My45NTg2NTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3MjMxZjhhYzY1ODRmYzJiNzM1MGE3ZmI4YmY0MmZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1ZThlZmJkMjNkNTRkYjdhNmRiODlhODIwYzM3YjY1ID0gJCgnPGRpdiBpZD0iaHRtbF83NWU4ZWZiZDIzZDU0ZGI3YTZkYjg5YTgyMGMzN2I2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEVCTE9OOiAoLTE5LjkyMjM5MTEsIC00My45NTg2NTM5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjcyMzFmOGFjNjU4NGZjMmI3MzUwYTdmYjhiZjQyZmEuc2V0Q29udGVudChodG1sXzc1ZThlZmJkMjNkNTRkYjdhNmRiODlhODIwYzM3YjY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxMzZhODQwY2Q5MjQxNTdhMGM0Y2UwOGM4MTJiMWVlLmJpbmRQb3B1cChwb3B1cF9iNzIzMWY4YWM2NTg0ZmMyYjczNTBhN2ZiOGJmNDJmYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYmJmMGNlNDg5OTE0ZDM5YmEwMzg0ODJlNzViN2Q0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MDczODczMDAwMDAwMDIsLTQzLjk3ODMzNDM4NTk0MzUyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTExNjFiYTg2YzE0YzNmOGYxZjc3ODk0NGYxNWQ1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjFiZDRkMzI4Njc0ZjI2OGUxMGNlMDAzMjg4Y2M5OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTYxYmQ0ZDMyODY3NGYyNjhlMTBjZTAwMzI4OGNjOTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxFVElDSUE6ICgtMTkuODA3Mzg3MzAwMDAwMDAyLCAtNDMuOTc4MzM0Mzg1OTQzNTI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGExMTYxYmE4NmMxNGMzZjhmMWY3Nzg5NDRmMTVkNTcuc2V0Q29udGVudChodG1sX2U2MWJkNGQzMjg2NzRmMjY4ZTEwY2UwMDMyODhjYzk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiYmYwY2U0ODk5MTRkMzliYTAzODQ4MmU3NWI3ZDQ0LmJpbmRQb3B1cChwb3B1cF9kYTExNjFiYTg2YzE0YzNmOGYxZjc3ODk0NGYxNWQ1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjA5ZjQ2ZWY2ZTA0Mzg1OTliNzJjNmY1Mjg2ZTJkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Nzc0MTM3LC00NC4wNTA2MzU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjMjA1ZjZmNjMwZTRmMjg4ZTM0MDkxYzQyYmQzMWEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxYmU4MDQ0N2VjMjRjN2U4ZTM2NzgwZWY1NGE1MmZmID0gJCgnPGRpdiBpZD0iaHRtbF84MWJlODA0NDdlYzI0YzdlOGUzNjc4MGVmNTRhNTJmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TElOREVJQTogKC0xOS45Nzc0MTM3LCAtNDQuMDUwNjM1NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjMjA1ZjZmNjMwZTRmMjg4ZTM0MDkxYzQyYmQzMWEwLnNldENvbnRlbnQoaHRtbF84MWJlODA0NDdlYzI0YzdlOGUzNjc4MGVmNTRhNTJmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZjA5ZjQ2ZWY2ZTA0Mzg1OTliNzJjNmY1Mjg2ZTJkMy5iaW5kUG9wdXAocG9wdXBfMWMyMDVmNmY2MzBlNGYyODhlMzQwOTFjNDJiZDMxYTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDdjZDhmNjg5NDBmNDZhYzg1YmUxY2UwM2I3MmQ5NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTUwMzI2MSwtNDQuMDA2ODIxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZGFlNzc4YmY2ZGQ0OTcyODJkN2VhYTZlNGU1ZmY3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWUwYTAxNTgwZmY0NGNhOTUzYjE0ZmI5YjM4ODNlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDllMGEwMTU4MGZmNDRjYTk1M2IxNGZiOWIzODgzZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BRFJFIEdFUlRSVURFUzogKC0xOS45NTAzMjYxLCAtNDQuMDA2ODIxMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkYWU3NzhiZjZkZDQ5NzI4MmQ3ZWFhNmU0ZTVmZjdhLnNldENvbnRlbnQoaHRtbF8wOWUwYTAxNTgwZmY0NGNhOTUzYjE0ZmI5YjM4ODNlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wN2NkOGY2ODk0MGY0NmFjODViZTFjZTAzYjcyZDk3Mi5iaW5kUG9wdXAocG9wdXBfNWRhZTc3OGJmNmRkNDk3MjgyZDdlYWE2ZTRlNWZmN2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTk3YWZkZDJkMTIyNGU5ZDhhN2FkZmIzZGMxZjYzN2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ5NDg1NywtNDQuMDk3MjU2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNmE0NzM1NjExMWM0MmIxOWYxYmRmMTlmYmEzOTNiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MmY3YTYzZjBjMGM0MTM0ODBlNjZiODRiNDQ5NmIwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTJmN2E2M2YwYzBjNDEzNDgwZTY2Yjg0YjQ0OTZiMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BR05FU0lUQTogKC0xOS45NDk0ODU3LCAtNDQuMDk3MjU2Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2YTQ3MzU2MTExYzQyYjE5ZjFiZGYxOWZiYTM5M2I4LnNldENvbnRlbnQoaHRtbF81MmY3YTYzZjBjMGM0MTM0ODBlNjZiODRiNDQ5NmIwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OTdhZmRkMmQxMjI0ZTlkOGE3YWRmYjNkYzFmNjM3ZC5iaW5kUG9wdXAocG9wdXBfMTZhNDczNTYxMTFjNDJiMTlmMWJkZjE5ZmJhMzkzYjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjBjNWY5ZDc5YmE1NDQyYTljYzdhMDExMTgyYjQwZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuNzkyODcwNTUsLTQzLjk4MzMzMTU2MTY4MTkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWUyYzIzZjcwM2M0YmMxYTcxMmQ5OTBmMjJmMGNkMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTBkOTlkZjEyYWY0MjYwYWY2MGE5Y2QzOGM1ZTczZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzUwZDk5ZGYxMmFmNDI2MGFmNjBhOWNkMzhjNWU3M2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BTlRJUVVFSVJBOiAoLTE5Ljc5Mjg3MDU1LCAtNDMuOTgzMzMxNTYxNjgxOTM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFlMmMyM2Y3MDNjNGJjMWE3MTJkOTkwZjIyZjBjZDIuc2V0Q29udGVudChodG1sXzM1MGQ5OWRmMTJhZjQyNjBhZjYwYTljZDM4YzVlNzNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYwYzVmOWQ3OWJhNTQ0MmE5Y2M3YTAxMTE4MmI0MGQ5LmJpbmRQb3B1cChwb3B1cF84MWUyYzIzZjcwM2M0YmMxYTcxMmQ5OTBmMjJmMGNkMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmQwNzI3NmE5MmI0YjU0YjkzMWNhZGZkNzAxZTM2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTg5MDU3LC00My45ODEwMjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4YjkzODkzZTliMzRkNDRiNmQ3OGRkMTczMTQ5MWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyMWU1ZTkxY2E3NDQwOGE5NGIyYThiY2VkMWZkOTJjID0gJCgnPGRpdiBpZD0iaHRtbF9hMjFlNWU5MWNhNzQ0MDhhOTRiMmE4YmNlZDFmZDkyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSQUpPOiAoLTE5Ljk1ODkwNTcsIC00My45ODEwMjIzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzhiOTM4OTNlOWIzNGQ0NGI2ZDc4ZGQxNzMxNDkxYmMuc2V0Q29udGVudChodG1sX2EyMWU1ZTkxY2E3NDQwOGE5NGIyYThiY2VkMWZkOTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ2ZDA3Mjc2YTkyYjRiNTRiOTMxY2FkZmQ3MDFlMzZhLmJpbmRQb3B1cChwb3B1cF8zOGI5Mzg5M2U5YjM0ZDQ0YjZkNzhkZDE3MzE0OTFiYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ODhmMWFjNzM5YjI0NzVjYWU2M2ZjMDJkN2UxM2EwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43OTg4NTgwNSwtNDMuOTk0ODU1ODk5MTgwMjE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FiM2M0NThmYzY3NDRmMzk4NjAyYTczYzA1NjZjNGE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjNjllYjM4NDYzNDRmYTU5MjNkYWEzZGU1Yzk1MTNkID0gJCgnPGRpdiBpZD0iaHRtbF8zYzY5ZWIzODQ2MzQ0ZmE1OTIzZGFhM2RlNWM5NTEzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSSUEgSEVMRU5BOiAoLTE5Ljc5ODg1ODA1LCAtNDMuOTk0ODU1ODk5MTgwMjE2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWIzYzQ1OGZjNjc0NGYzOTg2MDJhNzNjMDU2NmM0YTcuc2V0Q29udGVudChodG1sXzNjNjllYjM4NDYzNDRmYTU5MjNkYWEzZGU1Yzk1MTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk4OGYxYWM3MzliMjQ3NWNhZTYzZmMwMmQ3ZTEzYTAzLmJpbmRQb3B1cChwb3B1cF9hYjNjNDU4ZmM2NzQ0ZjM5ODYwMmE3M2MwNTY2YzRhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjc2Y2E4NTA0ODk0MmNjYWYzMjE5Y2U1NzcyMDVmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44Njg3MzEwNSwtNDMuOTMzNzU4NTQ1ODg2MjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjMDQ1OTc0NmY0MDRmYjJhMzQyNjQ1Zjg4ZTI5NjllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1N2JiMWFkYjIyNzRiZjk5MWUwMDYxYTljMDgxZjE1ID0gJCgnPGRpdiBpZD0iaHRtbF9kNTdiYjFhZGIyMjc0YmY5OTFlMDA2MWE5YzA4MWYxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSSUEgVklSR0lOSUE6ICgtMTkuODY4NzMxMDUsIC00My45MzM3NTg1NDU4ODYyMzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzA0NTk3NDZmNDA0ZmIyYTM0MjY0NWY4OGUyOTY5ZS5zZXRDb250ZW50KGh0bWxfZDU3YmIxYWRiMjI3NGJmOTkxZTAwNjFhOWMwODFmMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDY3NmNhODUwNDg5NDJjY2FmMzIxOWNlNTc3MjA1ZjcuYmluZFBvcHVwKHBvcHVwXzJjMDQ1OTc0NmY0MDRmYjJhMzQyNjQ1Zjg4ZTI5NjllKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MzODE5YTg0MWEzNTRkNGE4OGI5YTE1NmQwZWQwMGM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMTYyMDQsLTQzLjk0MTIzNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmMyNWI4NjM3MTY3NGEyMjk0N2U5YzlhNzE1ODhmMzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTI3NDNlNWQ2NzdmNGU5YmJjMjA4NDQzN2JiY2ZlZjggPSAkKCc8ZGl2IGlkPSJodG1sX2UyNzQzZTVkNjc3ZjRlOWJiYzIwODQ0MzdiYmNmZWY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQVJJWkU6ICgtMTkuODIxNjIwNCwgLTQzLjk0MTIzNzEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzI1Yjg2MzcxNjc0YTIyOTQ3ZTljOWE3MTU4OGYzNC5zZXRDb250ZW50KGh0bWxfZTI3NDNlNWQ2NzdmNGU5YmJjMjA4NDQzN2JiY2ZlZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzM4MTlhODQxYTM1NGQ0YTg4YjlhMTU2ZDBlZDAwYzcuYmluZFBvcHVwKHBvcHVwX2JjMjViODYzNzE2NzRhMjI5NDdlOWM5YTcxNTg4ZjM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjN2JjN2E3NzJmNDQ4YWU4ZWEyODM5MTBiZWFiMDY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk4MDUwNTYsLTQ0LjAwMTgzMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzMwNzZiNmU3MjBjNDk0OWFmMDhmZTIzMjc3MjRlZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzczYjE3NmM5Y2U5NDQ0ZTlmMDc3OWZmYWEyNzg0ZTIgPSAkKCc8ZGl2IGlkPSJodG1sXzM3M2IxNzZjOWNlOTQ0NGU5ZjA3NzlmZmFhMjc4NGUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSUxJT05BUklPUzogKC0xOS45ODA1MDU2LCAtNDQuMDAxODMwNyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzMDc2YjZlNzIwYzQ5NDlhZjA4ZmUyMzI3NzI0ZWQwLnNldENvbnRlbnQoaHRtbF8zNzNiMTc2YzljZTk0NDRlOWYwNzc5ZmZhYTI3ODRlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYzdiYzdhNzcyZjQ0OGFlOGVhMjgzOTEwYmVhYjA2NS5iaW5kUG9wdXAocG9wdXBfMzMwNzZiNmU3MjBjNDk0OWFmMDhmZTIzMjc3MjRlZDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjNhOWE3ZGIwMmFjNGNmYThkMmNlMzM4NDA0MTg4ZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODA4OTMzMSwtNDMuOTU0NzUwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNjg2ODBiNTAzNDQ0ZTMwYmVkYTQwOTI0YjY4NGFkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZmY1MDg0YTczZGQ0MjE4ODJhMDU4OTc4OTFlNmYwNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMGZmNTA4NGE3M2RkNDIxODgyYTA1ODk3ODkxZTZmMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTkFTIENBSVhBOiAoLTE5LjgwODkzMzEsIC00My45NTQ3NTAzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY4NjgwYjUwMzQ0NGUzMGJlZGE0MDkyNGI2ODRhZDQuc2V0Q29udGVudChodG1sXzBmZjUwODRhNzNkZDQyMTg4MmEwNTg5Nzg5MWU2ZjA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzYTlhN2RiMDJhYzRjZmE4ZDJjZTMzODQwNDE4OGZjLmJpbmRQb3B1cChwb3B1cF9kNjg2ODBiNTAzNDQ0ZTMwYmVkYTQwOTI0YjY4NGFkNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OTMwMTJjY2U4NTk0ZWJlYWI2MGE2MDQwMzBlNzY5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTIxMDMyNSwtNDMuOTMwNzkwOTYzODkzMjE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzM2JhNmQxZDQ1MjRiNjVhYzhhMDU5Y2NiNDc0MTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhZThmZTU3YTJmZjRiOGZhYjYxYmNjMTczMmU3NzQ5ID0gJCgnPGRpdiBpZD0iaHRtbF8yYWU4ZmU1N2EyZmY0YjhmYWI2MWJjYzE3MzJlNzc0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlOQVNMQU5ESUE6ICgtMTkuODUyMTAzMjUsIC00My45MzA3OTA5NjM4OTMyMTYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzNiYTZkMWQ0NTI0YjY1YWM4YTA1OWNjYjQ3NDE4OS5zZXRDb250ZW50KGh0bWxfMmFlOGZlNTdhMmZmNGI4ZmFiNjFiY2MxNzMyZTc3NDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDkzMDEyY2NlODU5NGViZWFiNjBhNjA0MDMwZTc2OTQuYmluZFBvcHVwKHBvcHVwXzUzM2JhNmQxZDQ1MjRiNjVhYzhhMDU5Y2NiNDc0MTg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiY2FkYmIzZDhjMjRkZTk4MDAyYjk4Y2RkOGNjMTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1MTU1MDA5OTk5OTk5NywtNDMuODk2MjkyOTQ4NDY5NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZjNDNkNTE5Y2Q1NDZiNjljNjY1OGZhMDNhYWRjMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNmNzIyNDgwY2JhNDVmMTk2NDE2ZmJhOWUwMjdlMWQgPSAkKCc8ZGl2IGlkPSJodG1sXzEzZjcyMjQ4MGNiYTQ1ZjE5NjQxNmZiYTllMDI3ZTFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQVpBUkU6ICgtMTkuODUxNTUwMDk5OTk5OTk3LCAtNDMuODk2MjkyOTQ4NDY5NTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmM0M2Q1MTljZDU0NmI2OWM2NjU4ZmEwM2FhZGMxZS5zZXRDb250ZW50KGh0bWxfMTNmNzIyNDgwY2JhNDVmMTk2NDE2ZmJhOWUwMjdlMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmJjYWRiYjNkOGMyNGRlOTgwMDJiOThjZGQ4Y2MxNjguYmluZFBvcHVwKHBvcHVwXzJmYzQzZDUxOWNkNTQ2YjY5YzY2NThmYTAzYWFkYzFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmN2Q0OTNmZWQ1NTQ5NWY4MWM1OWUxMjczNjkxZTBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljc5NjUzMTEsLTQzLjk4ODgwNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjg4MDdjMTVhYWE3NGE2MGEyZjg2M2M0YjkyMmM2MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWJmNjA2NWVjYTM1NDQ2YTg1NWM1ZWRhMzgzZTFmODkgPSAkKCc8ZGl2IGlkPSJodG1sXzFiZjYwNjVlY2EzNTQ0NmE4NTVjNWVkYTM4M2UxZjg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEFNRVJJQ0E6ICgtMTkuNzk2NTMxMSwgLTQzLjk4ODgwNTMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODgwN2MxNWFhYTc0YTYwYTJmODYzYzRiOTIyYzYxYy5zZXRDb250ZW50KGh0bWxfMWJmNjA2NWVjYTM1NDQ2YTg1NWM1ZWRhMzgzZTFmODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGY3ZDQ5M2ZlZDU1NDk1ZjgxYzU5ZTEyNzM2OTFlMGIuYmluZFBvcHVwKHBvcHVwXzY4ODA3YzE1YWFhNzRhNjBhMmY4NjNjNGI5MjJjNjFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5YmJmNTZhZTA3ZDQ1ZDg5YTYzMzVjMzk4NGY2OTNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4NDAxNDI5OTk5OTk5NywtNDMuOTU2MzM5NjkxNzcyMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTVkOTdhYmRmMjY0NDZhMDg0ZjNkZTk5MTZiMjM5NTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU0OTVlOWY3MWRiNGFmZmExOTAzZTdlODJlN2NmNjMgPSAkKCc8ZGl2IGlkPSJodG1sXzllNDk1ZTlmNzFkYjRhZmZhMTkwM2U3ZTgyZTdjZjYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIENBQ0hPRUlSSU5IQTogKC0xOS44ODQwMTQyOTk5OTk5OTcsIC00My45NTYzMzk2OTE3NzIwOSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZDk3YWJkZjI2NDQ2YTA4NGYzZGU5OTE2YjIzOTU3LnNldENvbnRlbnQoaHRtbF85ZTQ5NWU5ZjcxZGI0YWZmYTE5MDNlN2U4MmU3Y2Y2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOWJiZjU2YWUwN2Q0NWQ4OWE2MzM1YzM5ODRmNjkzZi5iaW5kUG9wdXAocG9wdXBfZTVkOTdhYmRmMjY0NDZhMDg0ZjNkZTk5MTZiMjM5NTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYwZWNiZTk4ZjIxNDgyM2FjNDA1MWNlYmM5MGY4NWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ5Nzc5MjUsLTQzLjk5MTY4NDQ2ODYyMzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2ODQ4MzdmMDY0NTQ5Y2M4NjViNmMxZTYxN2JiOTJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4ZTgwYWYxNDc3ZjQ4NTFiNjI3MDYyZWM3MmViMmIwID0gJCgnPGRpdiBpZD0iaHRtbF9lOGU4MGFmMTQ3N2Y0ODUxYjYyNzA2MmVjNzJlYjJiMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9WQSBDSU5UUkE6ICgtMTkuOTQ5Nzc5MjUsIC00My45OTE2ODQ0Njg2MjM5MSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2ODQ4MzdmMDY0NTQ5Y2M4NjViNmMxZTYxN2JiOTJlLnNldENvbnRlbnQoaHRtbF9lOGU4MGFmMTQ3N2Y0ODUxYjYyNzA2MmVjNzJlYjJiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZjBlY2JlOThmMjE0ODIzYWM0MDUxY2ViYzkwZjg1YS5iaW5kUG9wdXAocG9wdXBfMDY4NDgzN2YwNjQ1NDljYzg2NWI2YzFlNjE3YmI5MmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTcyNzc0YWE4NWM2NDc5ZmJjOWM2MmY2MjIzZGRmYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5NDA1MiwtNDMuOTU5MzgzMTY3NTIwMzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzBjYjdlNmMzY2NhNDc1Zjk2NzU5NzE5MjQ3MGNhNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI4ODQxZTE2YzljNGVjZmEyYzJiNmFmMmFjMzlhNWUgPSAkKCc8ZGl2IGlkPSJodG1sXzYyODg0MWUxNmM5YzRlY2ZhMmMyYjZhZjJhYzM5YTVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEVTUEVSQU5DQTogKC0xOS44OTk0MDUyLCAtNDMuOTU5MzgzMTY3NTIwMzcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMGNiN2U2YzNjY2E0NzVmOTY3NTk3MTkyNDcwY2E2OS5zZXRDb250ZW50KGh0bWxfNjI4ODQxZTE2YzljNGVjZmEyYzJiNmFmMmFjMzlhNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTcyNzc0YWE4NWM2NDc5ZmJjOWM2MmY2MjIzZGRmYTYuYmluZFBvcHVwKHBvcHVwX2MwY2I3ZTZjM2NjYTQ3NWY5Njc1OTcxOTI0NzBjYTY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0N2U2MWI5NzU3MzQ2MjZhMGU1Mjc0Y2IxMGNlM2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MTc5NzIsLTQzLjk5MjY4NjcyMjQ1MDUxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWJkMzlhMjdkMGY0N2VkYjMxM2Q0YjlkNmJhN2NlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2RjNmJhMmUwYTU0NGRjYmI3MmFlZjdhYmVkYzQ5YiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGNkYzZiYTJlMGE1NDRkY2JiNzJhZWY3YWJlZGM0OWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgR0FNRUxFSVJBOiAoLTE5Ljk0MTc5NzIsIC00My45OTI2ODY3MjI0NTA1MTQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWJkMzlhMjdkMGY0N2VkYjMxM2Q0YjlkNmJhN2NlMi5zZXRDb250ZW50KGh0bWxfZGNkYzZiYTJlMGE1NDRkY2JiNzJhZWY3YWJlZGM0OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQ3ZTYxYjk3NTczNDYyNmEwZTUyNzRjYjEwY2UzYzYuYmluZFBvcHVwKHBvcHVwX2ZhYmQzOWEyN2QwZjQ3ZWRiMzEzZDRiOWQ2YmE3Y2UyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzN2Y0ZjRjYjRjNzRlOGU4ZWI5NzgwYTk4MjJiMTFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzMTkzOSwtNDQuMDE3NjkyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWIxOTBkMjg5Yzc0MDlmODBjOGYzYTk4ZjAyN2FkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYmNkMjkzNzAyZGU0MGMwODBjYTMyZDUzYTI0MWIxYSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2JjZDI5MzcwMmRlNDBjMDgwY2EzMmQ1M2EyNDFiMWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgUEFNUFVMSEE6ICgtMTkuODMxOTM5LCAtNDQuMDE3NjkyMyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhYjE5MGQyODljNzQwOWY4MGM4ZjNhOThmMDI3YWQwLnNldENvbnRlbnQoaHRtbF8zYmNkMjkzNzAyZGU0MGMwODBjYTMyZDUzYTI0MWIxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MzdmNGY0Y2I0Yzc0ZThlOGViOTc4MGE5ODIyYjExZC5iaW5kUG9wdXAocG9wdXBfN2FiMTkwZDI4OWM3NDA5ZjgwYzhmM2E5OGYwMjdhZDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZThmYTljNTU2OTJkNGE5NGFhNGNjNzQ2OTE2NDU3N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg4MDY3NTUwMDAwMDAyLC00My44OTgwMzAyNTExOTIyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NDk3NDdkN2U5MTA0NmI3OGMxYTZiOTIxMTRmMmEwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTM3NjI1ZWFmZmQ0MDg0OTgyZWVlMzBlMTM1NjYxYSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2UzNzYyNWVhZmZkNDA4NDk4MmVlZTMwZTEzNTY2MWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgVklTVEE6ICgtMTkuODg4MDY3NTUwMDAwMDAyLCAtNDMuODk4MDMwMjUxMTkyMjEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDk3NDdkN2U5MTA0NmI3OGMxYTZiOTIxMTRmMmEwZS5zZXRDb250ZW50KGh0bWxfN2UzNzYyNWVhZmZkNDA4NDk4MmVlZTMwZTEzNTY2MWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZThmYTljNTU2OTJkNGE5NGFhNGNjNzQ2OTE2NDU3N2EuYmluZFBvcHVwKHBvcHVwXzg0OTc0N2Q3ZTkxMDQ2Yjc4YzFhNmI5MjExNGYyYTBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxYTY4NmQyYjAyNTQyN2Q4NGM3NGUyNzc0MzEwMjkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk5MDc3NCwtNDQuMDI3OTQ1MjY0ODI2NTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhNTRlZWUzYzBiYjQxZjhiMTU5ZjExZTNmOTZjZDlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjMDM4MWUzYTljNjQ5MmVhYjIzMzlhYmJmZWJlNjU2ID0gJCgnPGRpdiBpZD0iaHRtbF9hYzAzODFlM2E5YzY0OTJlYWIyMzM5YWJiZmViZTY1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T0xBUklBOiAoLTE5Ljk5MDc3NCwgLTQ0LjAyNzk0NTI2NDgyNjU1Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhNTRlZWUzYzBiYjQxZjhiMTU5ZjExZTNmOTZjZDlhLnNldENvbnRlbnQoaHRtbF9hYzAzODFlM2E5YzY0OTJlYWIyMzM5YWJiZmViZTY1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MWE2ODZkMmIwMjU0MjdkODRjNzRlMjc3NDMxMDI5MS5iaW5kUG9wdXAocG9wdXBfMWE1NGVlZTNjMGJiNDFmOGIxNTlmMTFlM2Y5NmNkOWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTg1ZjlkNjBlOGIyNDg2NDk2ZDA1MzgzMThlMzVmOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTkwMDQ1OCwtNDMuOTYzMTI0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTU3NWM0ZWI4Yjc0ZTJiYWJjOTk5MGQ0NGI0MTc1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDBjNmNjMzMyMGQ0ZTQ1ODZjYmZmY2Y2YzhkNmQ1ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzAwYzZjYzMzMjBkNGU0NTg2Y2JmZmNmNmM4ZDZkNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9MSE9TIEQmIzM5O0FHVUE6ICgtMTkuOTkwMDQ1OCwgLTQzLjk2MzEyNDkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OTU3NWM0ZWI4Yjc0ZTJiYWJjOTk5MGQ0NGI0MTc1OS5zZXRDb250ZW50KGh0bWxfNzAwYzZjYzMzMjBkNGU0NTg2Y2JmZmNmNmM4ZDZkNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTg1ZjlkNjBlOGIyNDg2NDk2ZDA1MzgzMThlMzVmOTIuYmluZFBvcHVwKHBvcHVwXzU5NTc1YzRlYjhiNzRlMmJhYmM5OTkwZDQ0YjQxNzU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2NmJlM2ViNjk3YzRkYjg5ZWRmM2ZkYzI4NGJmMDg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk3NTUwMzIsLTQzLjk4MzczNTcxOTg0OTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliN2JjYzVkNWNkZjQ3YzNhNjNhODdiMDQzZGQ0N2FjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlM2U5YzQ2YzFjZDQ1ZTE5MzVmMTk1N2NiMDA3Njg5ID0gJCgnPGRpdiBpZD0iaHRtbF9iZTNlOWM0NmMxY2Q0NWUxOTM1ZjE5NTdjYjAwNzY4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFMTUVJUkFTOiAoLTE5Ljk3NTUwMzIsIC00My45ODM3MzU3MTk4NDkwNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliN2JjYzVkNWNkZjQ3YzNhNjNhODdiMDQzZGQ0N2FjLnNldENvbnRlbnQoaHRtbF9iZTNlOWM0NmMxY2Q0NWUxOTM1ZjE5NTdjYjAwNzY4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNjZiZTNlYjY5N2M0ZGI4OWVkZjNmZGMyODRiZjA4OC5iaW5kUG9wdXAocG9wdXBfOWI3YmNjNWQ1Y2RmNDdjM2E2M2E4N2IwNDNkZDQ3YWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTgyODAwMGMwMmEwNGY3MmE2MzZjODAwNzA2YjZmZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTIyNDUzMzQ5OTk5OTk4LC00My45MDQ4Njc0OTY2MDgxNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTljYmVkZDI1OTAyNDQ4OWFkYmFkYjJlYzY2Yzc5YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDcyNjRjZWUwMWY1NGYxZmJmYzYwNGE2YTVkYTQzNWUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3MjY0Y2VlMDFmNTRmMWZiZmM2MDRhNmE1ZGE0MzVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVJBSVNPOiAoLTE5LjkyMjQ1MzM0OTk5OTk5OCwgLTQzLjkwNDg2NzQ5NjYwODE1NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5Y2JlZGQyNTkwMjQ0ODlhZGJhZGIyZWM2NmM3OWJmLnNldENvbnRlbnQoaHRtbF80NzI2NGNlZTAxZjU0ZjFmYmZjNjA0YTZhNWRhNDM1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xODI4MDAwYzAyYTA0ZjcyYTYzNmM4MDA3MDZiNmZlMi5iaW5kUG9wdXAocG9wdXBfZTljYmVkZDI1OTAyNDQ4OWFkYmFkYjJlYzY2Yzc5YmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdlNTE5N2VhMjgxNDhmNGI2MGMwNDE0MmJjODhiYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwODAzNywtNDMuOTUyNjA4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYThiOTRjZWMyZDM0ODcwODAxNzI4YTQ1ZjdiNGVmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTE0YjQ5NzI3OTI0YmZiOTBkZDIxMDgyZjEwMGYwNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTkxNGI0OTcyNzkyNGJmYjkwZGQyMTA4MmYxMDBmMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBUlFVRSBSSUFDSFVFTE86ICgtMTkuODkwODAzNywgLTQzLjk1MjYwODMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYThiOTRjZWMyZDM0ODcwODAxNzI4YTQ1ZjdiNGVmMC5zZXRDb250ZW50KGh0bWxfMTkxNGI0OTcyNzkyNGJmYjkwZGQyMTA4MmYxMDBmMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTdlNTE5N2VhMjgxNDhmNGI2MGMwNDE0MmJjODhiYzEuYmluZFBvcHVwKHBvcHVwX2ZhOGI5NGNlYzJkMzQ4NzA4MDE3MjhhNDVmN2I0ZWYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZTdmOTU5ZWQyNzRlYjM4Y2IwODMwMDA4NTE5MzFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NTM1NCwtNDMuOTk0OTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YmNkYjA1NmU3NzQ0NGM0YjAyMjMwNDBlNzdlYTAwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hODRmMTI1ODQyYTM0ZWU4OWQyMjc1ZDY2NDg4MWUyYSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTg0ZjEyNTg0MmEzNGVlODlkMjI3NWQ2NjQ4ODFlMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBVFJPQ0lOSU86ICgtMTkuOTQ1MzU0LCAtNDMuOTk0OTU0Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViY2RiMDU2ZTc3NDQ0YzRiMDIyMzA0MGU3N2VhMDAyLnNldENvbnRlbnQoaHRtbF9hODRmMTI1ODQyYTM0ZWU4OWQyMjc1ZDY2NDg4MWUyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZGU3Zjk1OWVkMjc0ZWIzOGNiMDgzMDAwODUxOTMxYS5iaW5kUG9wdXAocG9wdXBfNWJjZGIwNTZlNzc0NDRjNGIwMjIzMDQwZTc3ZWEwMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWVhODYyMmI4ZGQ4NGJiNDliZDE0MzRhZDBiMTM1MGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQwNjk3NSwtNDMuODkxMTA4NTYwNTU1NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjRmOWNhMzFhYzQzNDc4YzkyMjBhYTRmYjA2OTMzNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ1MjE3OGVhNzQ1NDJiOGI3MTI4YTY3N2EwZWQxMWYgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkNTIxNzhlYTc0NTQyYjhiNzEyOGE2NzdhMGVkMTFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVVMTyBWSTogKC0xOS44NDA2OTc1LCAtNDMuODkxMTA4NTYwNTU1NTUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGY5Y2EzMWFjNDM0NzhjOTIyMGFhNGZiMDY5MzM0Ni5zZXRDb250ZW50KGh0bWxfZmQ1MjE3OGVhNzQ1NDJiOGI3MTI4YTY3N2EwZWQxMWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWVhODYyMmI4ZGQ4NGJiNDliZDE0MzRhZDBiMTM1MGYuYmluZFBvcHVwKHBvcHVwXzI0ZjljYTMxYWM0MzQ3OGM5MjIwYWE0ZmIwNjkzMzQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiYzU5YmQ5ZTk5OTQzZDVhYzI2NWQ1YjEwZGJhMmYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMjEyNjksLTQzLjk0OTc5Nzg1NDQ3NjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzN2M5OTIxZjg1ZjRhOTE5MDA2Y2NkOTZmYmYxYTgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4OTI4ZmYwYWZmNTRjNWRhZjE4ZThhNmQzNWEzYzI2ID0gJCgnPGRpdiBpZD0iaHRtbF8xODkyOGZmMGFmZjU0YzVkYWYxOGU4YTZkMzVhM2MyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEVEUkVJUkEgUFJBRE8gTE9QRVM6ICgtMTkuOTAyMTI2OSwgLTQzLjk0OTc5Nzg1NDQ3NjQzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTM3Yzk5MjFmODVmNGE5MTkwMDZjY2Q5NmZiZjFhODMuc2V0Q29udGVudChodG1sXzE4OTI4ZmYwYWZmNTRjNWRhZjE4ZThhNmQzNWEzYzI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiYzU5YmQ5ZTk5OTQzZDVhYzI2NWQ1YjEwZGJhMmYyLmJpbmRQb3B1cChwb3B1cF9lMzdjOTkyMWY4NWY0YTkxOTAwNmNjZDk2ZmJmMWE4Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTFhNGY1YzM3NDk0NTk3YTk5ODA1OTViNmJhNTNlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjI3MzE4LC00My45NDUwOTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3ZTRhYjBmYmQxMDQ5MTU4YmZhYWU2NDFmMDNjMzc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzYzY1YjkxZDIxZDQ5Y2Q5ZThkOGRlZDNiNzc0NzUwID0gJCgnPGRpdiBpZD0iaHRtbF9jM2M2NWI5MWQyMWQ0OWNkOWU4ZDhkZWQzYjc3NDc1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UElORE9SQU1BOiAoLTE5LjkyMjczMTgsIC00My45NDUwOTQ4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTdlNGFiMGZiZDEwNDkxNThiZmFhZTY0MWYwM2MzNzUuc2V0Q29udGVudChodG1sX2MzYzY1YjkxZDIxZDQ5Y2Q5ZThkOGRlZDNiNzc0NzUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5MWE0ZjVjMzc0OTQ1OTdhOTk4MDU5NWI2YmE1M2VlLmJpbmRQb3B1cChwb3B1cF85N2U0YWIwZmJkMTA0OTE1OGJmYWFlNjQxZjAzYzM3NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Njc1ODdhODA0MWY0ZjMwYTJlZGRlZGNhOWNlZWI1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjYwNDA3NSwtNDMuOTE3NjEzNzczMjM1ODE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzNjdjNDI3N2UyNjRiMzE4ZTgyMWVjY2EyYjNiMDYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmN2YwYmJiNjJiZjRlNTVhZDE3YWEzMjliNTk0MzNjID0gJCgnPGRpdiBpZD0iaHRtbF82ZjdmMGJiYjYyYmY0ZTU1YWQxN2FhMzI5YjU5NDMzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UElSQUpBOiAoLTE5Ljg2NjA0MDc1LCAtNDMuOTE3NjEzNzczMjM1ODE0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM2N2M0Mjc3ZTI2NGIzMThlODIxZWNjYTJiM2IwNjEuc2V0Q29udGVudChodG1sXzZmN2YwYmJiNjJiZjRlNTVhZDE3YWEzMjliNTk0MzNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2NzU4N2E4MDQxZjRmMzBhMmVkZGVkY2E5Y2VlYjVlLmJpbmRQb3B1cChwb3B1cF85MzY3YzQyNzdlMjY0YjMxOGU4MjFlY2NhMmIzYjA2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDBkOTQ3ODIyZjU0YzFjYWU2OWU3NWY0ZGE5Y2U4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MTE4NTE3LC00My45ODk4MzMxODA3NDM2OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGJkNmQwNzU5MjdmNDczOTg2YmNmY2VmNzMxNmVjNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIwNTljMTc4ZTI0NDhkMDkxODJiOTM4MGQ3YmE1NGMgPSAkKCc8ZGl2IGlkPSJodG1sX2FiMDU5YzE3OGUyNDQ4ZDA5MTgyYjkzODBkN2JhNTRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QSVJBVElOSU5HQTogKC0xOS44MTE4NTE3LCAtNDMuOTg5ODMzMTgwNzQzNjk1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJkNmQwNzU5MjdmNDczOTg2YmNmY2VmNzMxNmVjNjMuc2V0Q29udGVudChodG1sX2FiMDU5YzE3OGUyNDQ4ZDA5MTgyYjkzODBkN2JhNTRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgwMGQ5NDc4MjJmNTRjMWNhZTY5ZTc1ZjRkYTljZTgwLmJpbmRQb3B1cChwb3B1cF84YmQ2ZDA3NTkyN2Y0NzM5ODZiY2ZjZWY3MzE2ZWM2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDU4MGI5NDQ2YzE0NDllYTcxZDg3YmQzM2FiMjE5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wMDgxMDM5NSwtNDQuMDA3MDgxMDI0MzkzMjE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiNWVhNWNiZWYxMDQxMWU5Nzc5ZDU2YTIzN2UyYTUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2YWExZDlkNTJlYzQ5MDY5YWJkNzFiZjhkNDMzNjgyID0gJCgnPGRpdiBpZD0iaHRtbF8xNmFhMWQ5ZDUyZWM0OTA2OWFiZDcxYmY4ZDQzMzY4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9OR0VMVVBFOiAoLTIwLjAwODEwMzk1LCAtNDQuMDA3MDgxMDI0MzkzMjE2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2I1ZWE1Y2JlZjEwNDExZTk3NzlkNTZhMjM3ZTJhNTIuc2V0Q29udGVudChodG1sXzE2YWExZDlkNTJlYzQ5MDY5YWJkNzFiZjhkNDMzNjgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkNTgwYjk0NDZjMTQ0OWVhNzFkODdiZDMzYWIyMTkzLmJpbmRQb3B1cChwb3B1cF83YjVlYTVjYmVmMTA0MTFlOTc3OWQ1NmEyMzdlMmE1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmRhYTk1ZGQwNWQ0YzliODYzY2Y2NTQ2NTVjNTM5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4xOTc3MDA2NSwtNDQuNDIyNDgzNjE2MTI2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTI3NzI3NGFmZjI3NGZiY2E2MzM5OWE4NDA5ODQ0NzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQ2NDRjZWVmNGU3NDI5YWEwYmExYTdjNDIzZmY5ZDAgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0NjQ0Y2VlZjRlNzQyOWFhMGJhMWE3YzQyM2ZmOWQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QUkFDQSBYSUk6ICgtMjAuMTk3NzAwNjUsIC00NC40MjI0ODM2MTYxMjYxNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyNzcyNzRhZmYyNzRmYmNhNjMzOTlhODQwOTg0NDc1LnNldENvbnRlbnQoaHRtbF9mNDY0NGNlZWY0ZTc0MjlhYTBiYTFhN2M0MjNmZjlkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYmRhYTk1ZGQwNWQ0YzliODYzY2Y2NTQ2NTVjNTM5ZC5iaW5kUG9wdXAocG9wdXBfOTI3NzI3NGFmZjI3NGZiY2E2MzM5OWE4NDA5ODQ0NzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWIzYWU2YmUxMDhmNGZhZGFkODY0MmJmYTJkZmZjZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5MzEwNywtNDQuMDA2Njk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyNTUyZDE5OGNhODRjNjE5YzVlN2Q4Yjc3NjA4MDU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3YWE5MTE1NmM4NjQ4MDRiOThlMGY2ZjdhYjhhMWUxID0gJCgnPGRpdiBpZD0iaHRtbF9jN2FhOTExNTZjODY0ODA0Yjk4ZTBmNmY3YWI4YTFlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UFJJTUFWRVJBOiAoLTE5Ljg5OTMxMDcsIC00NC4wMDY2OTgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMjU1MmQxOThjYTg0YzYxOWM1ZTdkOGI3NzYwODA1OC5zZXRDb250ZW50KGh0bWxfYzdhYTkxMTU2Yzg2NDgwNGI5OGUwZjZmN2FiOGExZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWIzYWU2YmUxMDhmNGZhZGFkODY0MmJmYTJkZmZjZWEuYmluZFBvcHVwKHBvcHVwX2UyNTUyZDE5OGNhODRjNjE5YzVlN2Q4Yjc3NjA4MDU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzMjI3OWU1MTFhZjQ1NjQ5ZTYxMjYyOWFmOThkOTY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg2MDk3Njg5OTk5OTk5NywtNDMuOTI5MDU0NjYxOTk3NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzdhM2I2NWMzYWQxNDE0MGEwNWIxMDNmNTIxZTZjOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWNiYmJkNWQ4ZWI5NGY1YjhkOTdjMTZmMzM5MDhmODQgPSAkKCc8ZGl2IGlkPSJodG1sXzljYmJiZDVkOGViOTRmNWI4ZDk3YzE2ZjMzOTA4Zjg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QUklNRUlSTyBERSBNQUlPOiAoLTE5Ljg2MDk3Njg5OTk5OTk5NywgLTQzLjkyOTA1NDY2MTk5NzQ3KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzdhM2I2NWMzYWQxNDE0MGEwNWIxMDNmNTIxZTZjOGUuc2V0Q29udGVudChodG1sXzljYmJiZDVkOGViOTRmNWI4ZDk3YzE2ZjMzOTA4Zjg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzMjI3OWU1MTFhZjQ1NjQ5ZTYxMjYyOWFmOThkOTY2LmJpbmRQb3B1cChwb3B1cF8zN2EzYjY1YzNhZDE0MTQwYTA1YjEwM2Y1MjFlNmM4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjgxOTI1ZjI3YTM0N2EyYjhkNjI5OWVjZWE2NDAxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTYxNTcyNTAwMDAwMDMsLTQzLjkyNjIzMTAxOTUzMzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkZDgzZGZhZmI2ZDRmNmViZGU1NWQ2NTQ4OWI1OTgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2ZWZmY2JjM2FlYjQ4NTk4ZTk1ZDhiYmVjN2VmYWFkID0gJCgnPGRpdiBpZD0iaHRtbF8xNmVmZmNiYzNhZWI0ODU5OGU5NWQ4YmJlYzdlZmFhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UFJPVklERU5DSUE6ICgtMTkuODU2MTU3MjUwMDAwMDAzLCAtNDMuOTI2MjMxMDE5NTMzMjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGQ4M2RmYWZiNmQ0ZjZlYmRlNTVkNjU0ODliNTk4Mi5zZXRDb250ZW50KGh0bWxfMTZlZmZjYmMzYWViNDg1OThlOTVkOGJiZWM3ZWZhYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjI4MTkyNWYyN2EzNDdhMmI4ZDYyOTllY2VhNjQwMTUuYmluZFBvcHVwKHBvcHVwX2FkZDgzZGZhZmI2ZDRmNmViZGU1NWQ2NTQ4OWI1OTgyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhNDE1YTMyZGM5ODRjZDM4MDI1ZTdlMzM2OTc3NWQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk2NzI1NDYsLTQzLjk0MjM1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGY3MzA3OTA0ZmZiNGNhOGEwYzcyYzJlZTM1YWQyM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2Y3OWQ2MGZkNDI0NDQ2MDk1OWVhNzk1NmZiZGRhMWQgPSAkKCc8ZGl2IGlkPSJodG1sXzNmNzlkNjBmZDQyNDQ0NjA5NTllYTc5NTZmYmRkYTFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SRUdJTkE6ICgtMTkuOTY3MjU0NiwgLTQzLjk0MjM1NzcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjczMDc5MDRmZmI0Y2E4YTBjNzJjMmVlMzVhZDIzYy5zZXRDb250ZW50KGh0bWxfM2Y3OWQ2MGZkNDI0NDQ2MDk1OWVhNzk1NmZiZGRhMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2E0MTVhMzJkYzk4NGNkMzgwMjVlN2UzMzY5Nzc1ZDYuYmluZFBvcHVwKHBvcHVwX2RmNzMwNzkwNGZmYjRjYThhMGM3MmMyZWUzNWFkMjNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4M2JiYjcxNDI1ZTQwOWQ5YjljNTVlMDk0M2ZjMjJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyOTE0NjQsLTQzLjg5ODQ4MzU5NjYzNzA2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zODliNGNjYmFiODc0ZDM4YjgwNzBkMDdmZDYzNmU1ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTRmMjgyNDVlNmM0NTYxYmFjMDdhYjgzYmI4OGVlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjU0ZjI4MjQ1ZTZjNDU2MWJhYzA3YWI4M2JiODhlZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJJQkVJUk8gREUgQUJSRVU6ICgtMTkuODI5MTQ2NCwgLTQzLjg5ODQ4MzU5NjYzNzA2NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4OWI0Y2NiYWI4NzRkMzhiODA3MGQwN2ZkNjM2ZTVmLnNldENvbnRlbnQoaHRtbF9mNTRmMjgyNDVlNmM0NTYxYmFjMDdhYjgzYmI4OGVlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lODNiYmI3MTQyNWU0MDlkOWI5YzU1ZTA5NDNmYzIyYi5iaW5kUG9wdXAocG9wdXBfMzg5YjRjY2JhYjg3NGQzOGI4MDcwZDA3ZmQ2MzZlNWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzgxMDczODhiMjQ5NDM4NTg2ODkwMDA5Y2U4ZDg0OTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODE3NzYxOCwtNDMuOTgyMjI4MzA5OTE4NDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyNmM4YWQ1OTE4NTRiZDJiZTg4NzUzNGU4ZTU2NWRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyYTE5NzI2NzJjODRhYmM5NDYwNTUwMWI3YmM2ZDk3ID0gJCgnPGRpdiBpZD0iaHRtbF9lMmExOTcyNjcyYzg0YWJjOTQ2MDU1MDFiN2JjNmQ5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UklPIEJSQU5DTzogKC0xOS44MTc3NjE4LCAtNDMuOTgyMjI4MzA5OTE4NDI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTI2YzhhZDU5MTg1NGJkMmJlODg3NTM0ZThlNTY1ZGMuc2V0Q29udGVudChodG1sX2UyYTE5NzI2NzJjODRhYmM5NDYwNTUwMWI3YmM2ZDk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4MTA3Mzg4YjI0OTQzODU4Njg5MDAwOWNlOGQ4NDk5LmJpbmRQb3B1cChwb3B1cF9lMjZjOGFkNTkxODU0YmQyYmU4ODc1MzRlOGU1NjVkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Y2NlM2FkNGY2NDA0MTNiYmM4ZTZkMjE3ZjcyMzhmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDMxNDU1NSwtNDMuOTgyOTYzNjg1OTg0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTM0OGFjNjI4YTEwNDk1ZWFlNDVlNWE0ODE3ZTkxOWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RjMzBiOTMzOWNiNGU4M2I4Mjc0YTkzYTE5YTFhZjQgPSAkKCc8ZGl2IGlkPSJodG1sX2NkYzMwYjkzMzljYjRlODNiODI3NGE5M2ExOWExYWY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQUxHQURPIEZJTEhPOiAoLTE5Ljk0MzE0NTU1LCAtNDMuOTgyOTYzNjg1OTg0MjkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzQ4YWM2MjhhMTA0OTVlYWU0NWU1YTQ4MTdlOTE5Yy5zZXRDb250ZW50KGh0bWxfY2RjMzBiOTMzOWNiNGU4M2I4Mjc0YTkzYTE5YTFhZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWNjZTNhZDRmNjQwNDEzYmJjOGU2ZDIxN2Y3MjM4ZmIuYmluZFBvcHVwKHBvcHVwXzUzNDhhYzYyOGExMDQ5NWVhZTQ1ZTVhNDgxN2U5MTljKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4MTc2MGRlYzY4OTQ1NTk5NmI1NmUxNjRiYzdlYWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3OTAwMTMsLTQzLjk0MTEwNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWUzZGI5OTI2ZDYxNDI2NDhlY2E2YzEzZDg5OGNlNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZiN2VkYTViODZlNGU5NWIxNzk5NmIwYWI3OTllZWEgPSAkKCc8ZGl2IGlkPSJodG1sXzhmYjdlZGE1Yjg2ZTRlOTViMTc5OTZiMGFiNzk5ZWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBDUlVaOiAoLTE5Ljg3OTAwMTMsIC00My45NDExMDUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWUzZGI5OTI2ZDYxNDI2NDhlY2E2YzEzZDg5OGNlNDQuc2V0Q29udGVudChodG1sXzhmYjdlZGE1Yjg2ZTRlOTViMTc5OTZiMGFiNzk5ZWVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y4MTc2MGRlYzY4OTQ1NTk5NmI1NmUxNjRiYzdlYWYwLmJpbmRQb3B1cChwb3B1cF8xZTNkYjk5MjZkNjE0MjY0OGVjYTZjMTNkODk4Y2U0NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzliNzk1MDIzOGI0YzUzODM0Y2Q4ZmRhZmIzYjdiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45ODY3NzQ1LC00NC4wMTE2MDQ3MDc3MDA5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wN2I2ZWEyYWMzMmQ0OGU5YjE3NWFkNThkMmViNzdlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjY5ODY5MjIzMWM0MmY4OWFiYmI4YTA2YjJlNjM5ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY2OTg2OTIyMzFjNDJmODlhYmJiOGEwNmIyZTYzOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIEhFTEVOQTogKC0xOS45ODY3NzQ1LCAtNDQuMDExNjA0NzA3NzAwOTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wN2I2ZWEyYWMzMmQ0OGU5YjE3NWFkNThkMmViNzdlMS5zZXRDb250ZW50KGh0bWxfNWY2OTg2OTIyMzFjNDJmODlhYmJiOGEwNmIyZTYzOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDM5Yjc5NTAyMzhiNGM1MzgzNGNkOGZkYWZiM2I3YmIuYmluZFBvcHVwKHBvcHVwXzA3YjZlYTJhYzMyZDQ4ZTliMTc1YWQ1OGQyZWI3N2UxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4ZGUwNzljZTliMTQ3N2Y5YmY4YTM3ODMyN2Y4MDgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMzc4Mjk1MDAwMDAwMiwtNDMuOTc0NTI5NjQwMDMyNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDM5YjQzN2E4Mjk3NGUyM2JmNWNlNTA5YjEzN2EzM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBmYWIxODkwNWJhNGMzZjgwYTU5YTE0M2YyMmM4ZDIgPSAkKCc8ZGl2IGlkPSJodG1sXzcwZmFiMTg5MDViYTRjM2Y4MGE1OWExNDNmMjJjOGQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBNT05JQ0E6ICgtMTkuODIzNzgyOTUwMDAwMDAyLCAtNDMuOTc0NTI5NjQwMDMyNTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzliNDM3YTgyOTc0ZTIzYmY1Y2U1MDliMTM3YTMzZC5zZXRDb250ZW50KGh0bWxfNzBmYWIxODkwNWJhNGMzZjgwYTU5YTE0M2YyMmM4ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNThkZTA3OWNlOWIxNDc3ZjliZjhhMzc4MzI3ZjgwODEuYmluZFBvcHVwKHBvcHVwX2QzOWI0MzdhODI5NzRlMjNiZjVjZTUwOWIxMzdhMzNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwMzg2MmM5MDgwYzRlNDZhMjZkMzAxYTEzZTQ4MmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3MTMyNTMsLTQ0LjAwNDA2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2EyNDEyN2RhZDVkNGNmY2IwNTEwYWQyZDQ4YjA1ZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzc3OWYzNTkzNjVlNDc1Y2JiNTc1YTA2NDgyNzBhMjQgPSAkKCc8ZGl2IGlkPSJodG1sXzM3NzlmMzU5MzY1ZTQ3NWNiYjU3NWEwNjQ4MjcwYTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBURVJFWklOSEE6ICgtMTkuODcxMzI1MywgLTQ0LjAwNDA2MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTI0MTI3ZGFkNWQ0Y2ZjYjA1MTBhZDJkNDhiMDVkMC5zZXRDb250ZW50KGh0bWxfMzc3OWYzNTkzNjVlNDc1Y2JiNTc1YTA2NDgyNzBhMjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjAzODYyYzkwODBjNGU0NmEyNmQzMDFhMTNlNDgyZmEuYmluZFBvcHVwKHBvcHVwXzNhMjQxMjdkYWQ1ZDRjZmNiMDUxMGFkMmQ0OGIwNWQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2NjY5YzBmZWUyMzRjNWZhMWRlNDdkNzllMWQ1OGYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMjk5ODIsLTQzLjk1NDAwNTU4MzkzMjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2Y2VmNWE0N2Y3NjQ1YTE4NjU1YjY4MjZhNmIzNDZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzYzg0MWEwMDAyOTRlMTA5ZmNmYjU1ZmZmZWM3OGMyID0gJCgnPGRpdiBpZD0iaHRtbF82M2M4NDFhMDAwMjk0ZTEwOWZjZmI1NWZmZmVjNzhjMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FOVE8gQU5EUkU6ICgtMTkuOTAyOTk4MiwgLTQzLjk1NDAwNTU4MzkzMjMzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZjZWY1YTQ3Zjc2NDVhMTg2NTViNjgyNmE2YjM0NmEuc2V0Q29udGVudChodG1sXzYzYzg0MWEwMDAyOTRlMTA5ZmNmYjU1ZmZmZWM3OGMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2NjY5YzBmZWUyMzRjNWZhMWRlNDdkNzllMWQ1OGYzLmJpbmRQb3B1cChwb3B1cF84NmNlZjVhNDdmNzY0NWExODY1NWI2ODI2YTZiMzQ2YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMWQzYTQ5MTEwMTI0ZDQwYmNhMmI4MzgyZjA3NjFkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTAzMDM3LC00My45Mzc5ODg0NjA1MjQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jM2MyYzMzOWM5Njc0NTdmOWEwMTdkYTE3YTM0ZmEyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzE0NjRlMTNkZTk0MWVlOWEyZjFiMmE3N2ZhNGFjZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZmMxNDY0ZTEzZGU5NDFlZTlhMmYxYjJhNzdmYTRhY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gQkVSTkFSRE86ICgtMTkuODUwMzAzNywgLTQzLjkzNzk4ODQ2MDUyNDc4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNjMmMzMzljOTY3NDU3ZjlhMDE3ZGExN2EzNGZhMmYuc2V0Q29udGVudChodG1sX2ZjMTQ2NGUxM2RlOTQxZWU5YTJmMWIyYTc3ZmE0YWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxZDNhNDkxMTAxMjRkNDBiY2EyYjgzODJmMDc2MWQ3LmJpbmRQb3B1cChwb3B1cF9jM2MyYzMzOWM5Njc0NTdmOWEwMTdkYTE3YTM0ZmEyZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzNlNjkzZjAxODU0YjhlYjUwNzcwNzM3MTU5M2YzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDEwMjIyLC00My45NDUyNzc2MTgxMzYwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTkzZDMzNzFiNTc0ZmVjYjVmMDY3MDlmODQ4NGEyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yN2YzNGIzNGM3YjQ0MmQ1YTdmYjZkZjY5MjY1MjA0ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjdmMzRiMzRjN2I0NDJkNWE3ZmI2ZGY2OTI2NTIwNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gQ1JJU1RPVkFPOiAoLTE5LjkwMTAyMjIsIC00My45NDUyNzc2MTgxMzYwNik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5OTNkMzM3MWI1NzRmZWNiNWYwNjcwOWY4NDg0YTJhLnNldENvbnRlbnQoaHRtbF8yN2YzNGIzNGM3YjQ0MmQ1YTdmYjZkZjY5MjY1MjA0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YzNlNjkzZjAxODU0YjhlYjUwNzcwNzM3MTU5M2YzMy5iaW5kUG9wdXAocG9wdXBfMDk5M2QzMzcxYjU3NGZlY2I1ZjA2NzA5Zjg0ODRhMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWIzNDUwYTFmNjM4NDBlZmI3NjRkOTJhN2UxMjYxMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU1NTE4NTUsLTQzLjkxNDYzNjc1Mzg4NjY1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDMyZDI2NmRlZTA0MWIxOThmMTk2MmQyYjU1M2E1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmJjMDJiMGIwMjE0MDM4YTRkOTZmMDc2MmIyZDZmMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZiYzAyYjBiMDIxNDAzOGE0ZDk2ZjA3NjJiMmQ2ZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gR0FCUklFTDogKC0xOS44NTU1MTg1NSwgLTQzLjkxNDYzNjc1Mzg4NjY1NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwMzJkMjY2ZGVlMDQxYjE5OGYxOTYyZDJiNTUzYTUxLnNldENvbnRlbnQoaHRtbF9hZmJjMDJiMGIwMjE0MDM4YTRkOTZmMDc2MmIyZDZmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YjM0NTBhMWY2Mzg0MGVmYjc2NGQ5MmE3ZTEyNjExYS5iaW5kUG9wdXAocG9wdXBfMzAzMmQyNjZkZWUwNDFiMTk4ZjE5NjJkMmI1NTNhNTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJhNjg5MTdkYjc3NGI3ZGFhNDQ1ZGM5MDkwMGYwYTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5MjQ1ODUsLTQzLjg5NzY1MDU0NzEzNTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkMTgzYzhkODJjMDRkNjJhYmFlM2Y5YmY4Y2ExOTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhOWIxODQ1M2NkMTRhODU4ZWViNTFlMWE2Y2E5NDY2ID0gJCgnPGRpdiBpZD0iaHRtbF84YTliMTg0NTNjZDE0YTg1OGVlYjUxZTFhNmNhOTQ2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBHRVJBTERPOiAoLTE5Ljg5OTI0NTg1LCAtNDMuODk3NjUwNTQ3MTM1OTEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDE4M2M4ZDgyYzA0ZDYyYWJhZTNmOWJmOGNhMTk4OS5zZXRDb250ZW50KGh0bWxfOGE5YjE4NDUzY2QxNGE4NThlZWI1MWUxYTZjYTk0NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjJhNjg5MTdkYjc3NGI3ZGFhNDQ1ZGM5MDkwMGYwYTUuYmluZFBvcHVwKHBvcHVwXzhkMTgzYzhkODJjMDRkNjJhYmFlM2Y5YmY4Y2ExOTg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYjBmODY5YWUyYjQ5NzdiNDRmNTg3NTNmNzM4NWNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMjYyNTIsLTQzLjk1Nzk1MTUxNzQ3NDk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkNjBjMjVmMmI4ODQ2NmE5YjFlNzAzN2FiYWIxYTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5MmZkNjEwY2RhMzRhZDc4YTM1Zjk4MDY1NmQ2YzhjID0gJCgnPGRpdiBpZD0iaHRtbF8zOTJmZDYxMGNkYTM0YWQ3OGEzNWY5ODA2NTZkNmM4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBKT0FPIEJBVElTVEE6ICgtMTkuODIyNjI1MiwgLTQzLjk1Nzk1MTUxNzQ3NDk2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQ2MGMyNWYyYjg4NDY2YTliMWU3MDM3YWJhYjFhNjkuc2V0Q29udGVudChodG1sXzM5MmZkNjEwY2RhMzRhZDc4YTM1Zjk4MDY1NmQ2YzhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjYjBmODY5YWUyYjQ5NzdiNDRmNTg3NTNmNzM4NWNiLmJpbmRQb3B1cChwb3B1cF9mZDYwYzI1ZjJiODg0NjZhOWIxZTcwMzdhYmFiMWE2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGE2Y2FkMzE4NGI0MDlhYjA3ZTUyYzc4NjY0OTRlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzExMTUxNSwtNDMuOTEwMzU5Mzc3NzUzMzY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkNjE0NzU4NGYzNjRlMjE4MzJjNWVkYTZlNTE2MGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlOTEzNTlmYzgwNTRmYmViNmUyMGY3MzBjM2U4ZmE4ID0gJCgnPGRpdiBpZD0iaHRtbF84ZTkxMzU5ZmM4MDU0ZmJlYjZlMjBmNzMwYzNlOGZhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBNQVJDT1M6ICgtMTkuODcxMTE1MTUsIC00My45MTAzNTkzNzc3NTMzNjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDYxNDc1ODRmMzY0ZTIxODMyYzVlZGE2ZTUxNjBmNC5zZXRDb250ZW50KGh0bWxfOGU5MTM1OWZjODA1NGZiZWI2ZTIwZjczMGMzZThmYTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTRhNmNhZDMxODRiNDA5YWIwN2U1MmM3ODY2NDk0ZWQuYmluZFBvcHVwKHBvcHVwX2ZkNjE0NzU4NGYzNjRlMjE4MzJjNWVkYTZlNTE2MGY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5ZDFiYjY1ZDNkNTRiZDk4OGVmNzFiZjU2MGQ2ZWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg2ODY4Nzc1LC00My45MjM5MzY4MTgxMDMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDdkOTJmNzNlY2Q0ZGFjYTA4MjM0MDZjMTc5YjU3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWNhYjQyYjgwMzU0YzhjOWNjMTU4MDRhYjM5Y2Y5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNmFjYWI0MmI4MDM1NGM4YzljYzE1ODA0YWIzOWNmOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gUEFVTE86ICgtMTkuODY4Njg3NzUsIC00My45MjM5MzY4MTgxMDMwOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkN2Q5MmY3M2VjZDRkYWNhMDgyMzQwNmMxNzliNTcxLnNldENvbnRlbnQoaHRtbF82YWNhYjQyYjgwMzU0YzhjOWNjMTU4MDRhYjM5Y2Y5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OWQxYmI2NWQzZDU0YmQ5ODhlZjcxYmY1NjBkNmVjZi5iaW5kUG9wdXAocG9wdXBfZWQ3ZDkyZjczZWNkNGRhY2EwODIzNDA2YzE3OWI1NzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM1NTk0NzdiY2ViNGEwMmJkZDZjNmJmOGJhYmU1ZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ3NjU5MDUsLTQzLjkzNzUwOTQ3MjYyNzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlNjY2OWZhYzU1NzQxMGNiYTdjNWYxNGVlZDE0YTdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyMDc3YTAwN2QyNTQxNzliOGU3ZmY0MzYyMzJmOTc4ID0gJCgnPGRpdiBpZD0iaHRtbF83MjA3N2EwMDdkMjU0MTc5YjhlN2ZmNDM2MjMyZjk3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FPIFBFRFJPIFZOOiAoLTE5Ljk0NzY1OTA1LCAtNDMuOTM3NTA5NDcyNjI3MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTY2NjlmYWM1NTc0MTBjYmE3YzVmMTRlZWQxNGE3Zi5zZXRDb250ZW50KGh0bWxfNzIwNzdhMDA3ZDI1NDE3OWI4ZTdmZjQzNjIzMmY5NzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWM1NTk0NzdiY2ViNGEwMmJkZDZjNmJmOGJhYmU1ZTkuYmluZFBvcHVwKHBvcHVwXzFlNjY2OWZhYzU1NzQxMGNiYTdjNWYxNGVlZDE0YTdmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0NzIzNGVjYmFlZjQ5ZDRhOTc3M2IzMDY4ZTY5NTQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MzkzMDQsLTQ0LjAxMzMzMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTk0YTBkYzA2MTJlNGMxNGE4NGU4OWI5NGJhYTJmMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzVmYzY0YTRmNTJjNDlkOGJiYzk0OWUwZmU0NzMxN2MgPSAkKCc8ZGl2IGlkPSJodG1sX2M1ZmM2NGE0ZjUyYzQ5ZDhiYmM5NDllMGZlNDczMTdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIFNBTFZBRE9SOiAoLTE5Ljg5MzkzMDQsIC00NC4wMTMzMzM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTk0YTBkYzA2MTJlNGMxNGE4NGU4OWI5NGJhYTJmMmQuc2V0Q29udGVudChodG1sX2M1ZmM2NGE0ZjUyYzQ5ZDhiYmM5NDllMGZlNDczMTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0NzIzNGVjYmFlZjQ5ZDRhOTc3M2IzMDY4ZTY5NTQ2LmJpbmRQb3B1cChwb3B1cF81OTRhMGRjMDYxMmU0YzE0YTg0ZTg5Yjk0YmFhMmYyZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NWEzZjkzYWE2Y2M0NmI4YjY2OTUzNTViZjlmZGFlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4zOTk4MjM5LC00My41MTcxNzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllZjQxZTBmZDQ4ZDQxNzQ4MmJhYzk1NGU3MDZlNzllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhZmIwYTE0ODM0ZjQ2OGU4MmZkZmZmMGI3MGEwZDk1ID0gJCgnPGRpdiBpZD0iaHRtbF84YWZiMGExNDgzNGY0NjhlODJmZGZmZjBiNzBhMGQ5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FSQU1FTkhBOiAoLTIwLjM5OTgyMzksIC00My41MTcxNzgzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWVmNDFlMGZkNDhkNDE3NDgyYmFjOTU0ZTcwNmU3OWUuc2V0Q29udGVudChodG1sXzhhZmIwYTE0ODM0ZjQ2OGU4MmZkZmZmMGI3MGEwZDk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1YTNmOTNhYTZjYzQ2YjhiNjY5NTM1NWJmOWZkYWU2LmJpbmRQb3B1cChwb3B1cF85ZWY0MWUwZmQ0OGQ0MTc0ODJiYWM5NTRlNzA2ZTc5ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMjRmNTQ5OTc2NTQ0MDljOTgxODY3MzFlZjQxNDkzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjE5Mzc3LC00My45OTgxMjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2OTYwYzczNGU1ZjRlMjE5MGU0YmU2YjMwNGNkMzVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxOGY5ZmU4YTI1ZDQyM2RiY2UzNGNkOTBjYzZiMmJkID0gJCgnPGRpdiBpZD0iaHRtbF81MThmOWZlOGEyNWQ0MjNkYmNlMzRjZDkwY2M2YjJiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FSQU5ESTogKC0xOS44NjE5Mzc3LCAtNDMuOTk4MTI2MSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2OTYwYzczNGU1ZjRlMjE5MGU0YmU2YjMwNGNkMzVlLnNldENvbnRlbnQoaHRtbF81MThmOWZlOGEyNWQ0MjNkYmNlMzRjZDkwY2M2YjJiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMjRmNTQ5OTc2NTQ0MDljOTgxODY3MzFlZjQxNDkzMy5iaW5kUG9wdXAocG9wdXBfYjY5NjBjNzM0ZTVmNGUyMTkwZTRiZTZiMzA0Y2QzNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzEwZDBjMGM1Mzc1NDIzMzhmNWIxYzViMzhiZWZhMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE1MDY2MDUsLTQzLjg5OTA5ODc0MjQyNjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3YzFmOGYyMjU3NDQ5ODBhN2RmZTI5ZGViZTk1ZWY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3NGJiNmY2ZGE2MTRkZTliYzM3MGJiNzdmZTBhYWM0ID0gJCgnPGRpdiBpZD0iaHRtbF8xNzRiYjZmNmRhNjE0ZGU5YmMzNzBiYjc3ZmUwYWFjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FVREFERTogKC0xOS45MTUwNjYwNSwgLTQzLjg5OTA5ODc0MjQyNjIyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTdjMWY4ZjIyNTc0NDk4MGE3ZGZlMjlkZWJlOTVlZjYuc2V0Q29udGVudChodG1sXzE3NGJiNmY2ZGE2MTRkZTliYzM3MGJiNzdmZTBhYWM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxMGQwYzBjNTM3NTQyMzM4ZjViMWM1YjM4YmVmYTIxLmJpbmRQb3B1cChwb3B1cF85N2MxZjhmMjI1NzQ0OTgwYTdkZmUyOWRlYmU5NWVmNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYmM4YTczMTZjODY0NDk4YTYyNDVjNmU5MDFhYTcyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wMjgwMTI4NSwtNDQuMDA3NjY4MzkyODkzNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDhkZDlmMzU5Y2UzNDJlMTkyODE5NjFmZDQzNTQyNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVlOWQxODNjMWFmNDM3Yzk2Zjk4MzRjMzJlYWE1YzIgPSAkKCc8ZGl2IGlkPSJodG1sXzM1ZTlkMTgzYzFhZjQzN2M5NmY5ODM0YzMyZWFhNWMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TRVJSQSBETyBDVVJSQUw6ICgtMjAuMDI4MDEyODUsIC00NC4wMDc2NjgzOTI4OTM3Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4ZGQ5ZjM1OWNlMzQyZTE5MjgxOTYxZmQ0MzU0MjRjLnNldENvbnRlbnQoaHRtbF8zNWU5ZDE4M2MxYWY0MzdjOTZmOTgzNGMzMmVhYTVjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYmM4YTczMTZjODY0NDk4YTYyNDVjNmU5MDFhYTcyNy5iaW5kUG9wdXAocG9wdXBfMDhkZDlmMzU5Y2UzNDJlMTkyODE5NjFmZDQzNTQyNGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjg4YzcyYWFmMTAzNGFhNDk3NjdlZmVjZjJkNjI0MjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuNzkyNzQ3NjUwMDAwMDAzLC00My45NTYxOTQwNzQ3NDYxMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODZkMzcxODRmYWM5NGFiNGFkN2ZmYzM1MTI4Y2E4ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzI0NWMwOTgxMTU2NDlmOWJmNWRjNzJiMDZhMmFmZGYgPSAkKCc8ZGl2IGlkPSJodG1sX2MyNDVjMDk4MTE1NjQ5ZjliZjVkYzcyYjA2YTJhZmRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TRVJSQSBWRVJERTogKC0xOS43OTI3NDc2NTAwMDAwMDMsIC00My45NTYxOTQwNzQ3NDYxMzYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NmQzNzE4NGZhYzk0YWI0YWQ3ZmZjMzUxMjhjYThkNi5zZXRDb250ZW50KGh0bWxfYzI0NWMwOTgxMTU2NDlmOWJmNWRjNzJiMDZhMmFmZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjg4YzcyYWFmMTAzNGFhNDk3NjdlZmVjZjJkNjI0MjMuYmluZFBvcHVwKHBvcHVwXzg2ZDM3MTg0ZmFjOTRhYjRhZDdmZmMzNTEyOGNhOGQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1MTQ4MmM5NjJiZDQ3ZjlhYzdjMDkyMTY2NWJmZWZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4MDQzMTUsLTQ0LjAxMjc1NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDc3ZmU5Zjk1MDY2NDMxYTk2MWY2YmQ4ZWQ3N2MyZWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjliMTFlODQ2MDk5NDNkMGI4NGU0M2Y0ZWFmYTk2YmIgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5YjExZTg0NjA5OTQzZDBiODRlNDNmNGVhZmE5NmJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TRVJSQU5POiAoLTE5Ljg4MDQzMTUsIC00NC4wMTI3NTQzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDc3ZmU5Zjk1MDY2NDMxYTk2MWY2YmQ4ZWQ3N2MyZWQuc2V0Q29udGVudChodG1sX2Y5YjExZTg0NjA5OTQzZDBiODRlNDNmNGVhZmE5NmJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1MTQ4MmM5NjJiZDQ3ZjlhYzdjMDkyMTY2NWJmZWZlLmJpbmRQb3B1cChwb3B1cF9kNzdmZTlmOTUwNjY0MzFhOTYxZjZiZDhlZDc3YzJlZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83N2NlYjA4ZTBlNTc0ZTY2OWNiMzc1NWViYjExZDVhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MjE3NzksLTQzLjk4MTE1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjc5ODI2ZWFiYzU0NGE0NjhmNGU5ZjU2ZmJjNTAxZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTY1NWVkODFjZTg3NDBkZmI0MTE1ZjMzNmRhYmZjMzkgPSAkKCc8ZGl2IGlkPSJodG1sXzk2NTVlZDgxY2U4NzQwZGZiNDExNWYzMzZkYWJmYzM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TSU5JTUJVOiAoLTE5LjgyMTc3OSwgLTQzLjk4MTE1NzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Nzk4MjZlYWJjNTQ0YTQ2OGY0ZTlmNTZmYmM1MDFlOC5zZXRDb250ZW50KGh0bWxfOTY1NWVkODFjZTg3NDBkZmI0MTE1ZjMzNmRhYmZjMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzdjZWIwOGUwZTU3NGU2NjljYjM3NTVlYmIxMWQ1YTQuYmluZFBvcHVwKHBvcHVwXzY3OTgyNmVhYmM1NDRhNDY4ZjRlOWY1NmZiYzUwMWU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjNjUxMTAxOWM0NjQ3ZjQ5M2UwMTZmNmJhMWI2YzJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMTgzMjE1LC00My45MjY3MjE1MzE2NjEyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWIzZWU5ZTBlMTY0NTI0YTAzMzg0YjVlYjEyMmUxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YWYwZGQ3MWVkMmU0MTVlODYxY2EzNzMxMzlkODRjMyA9ICQoJzxkaXYgaWQ9Imh0bWxfN2FmMGRkNzFlZDJlNDE1ZTg2MWNhMzczMTM5ZDg0YzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNPTElNT0VTOiAoLTE5LjgyMTgzMjE1LCAtNDMuOTI2NzIxNTMxNjYxMjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWIzZWU5ZTBlMTY0NTI0YTAzMzg0YjVlYjEyMmUxNy5zZXRDb250ZW50KGh0bWxfN2FmMGRkNzFlZDJlNDE1ZTg2MWNhMzczMTM5ZDg0YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWM2NTExMDE5YzQ2NDdmNDkzZTAxNmY2YmExYjZjMmUuYmluZFBvcHVwKHBvcHVwXzdlYjNlZTllMGUxNjQ1MjRhMDMzODRiNWViMTIyZTE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwZTA0YmNiZTE5MzQxYjFiNzdmZjcyYmJhYTZkZTlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4NjQ3MzA1LC00My45NjU4NjU0MjcyOTYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NTRiOTNiMTAyZGY0ZDk1YjU5Mjc5MGMwNjEzNjdlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOTRjZDAyNTNjYmE0ZjgxYjZjZThiMDRmYWQ2YThmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjk0Y2QwMjUzY2JhNGY4MWI2Y2U4YjA0ZmFkNmE4ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNVTUFSRTogKC0xOS44ODY0NzMwNSwgLTQzLjk2NTg2NTQyNzI5NjA0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTU0YjkzYjEwMmRmNGQ5NWI1OTI3OTBjMDYxMzY3ZTAuc2V0Q29udGVudChodG1sX2I5NGNkMDI1M2NiYTRmODFiNmNlOGIwNGZhZDZhOGY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwZTA0YmNiZTE5MzQxYjFiNzdmZjcyYmJhYTZkZTlmLmJpbmRQb3B1cChwb3B1cF81NTRiOTNiMTAyZGY0ZDk1YjU5Mjc5MGMwNjEzNjdlMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTkwMWNhYjZlNWI0Mzg0OTFkZTQxMjJlMTFkZjBlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjUyNzc5NSwtNDMuOTMzNDI2MDY0MTkxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJhNWQ0YzIyYmE0NDMxOTgzYzgyYmZlYWFkZTMzZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjJiMTA2ZTRkNDg1NDU4ZjgwYzFkNmI0YTU0MWQ2MWIgPSAkKCc8ZGl2IGlkPSJodG1sXzYyYjEwNmU0ZDQ4NTQ1OGY4MGMxZDZiNGE1NDFkNjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TVVpBTkE6ICgtMTkuODY1Mjc3OTUsIC00My45MzM0MjYwNjQxOTEwMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViYTVkNGMyMmJhNDQzMTk4M2M4MmJmZWFhZGUzM2Y3LnNldENvbnRlbnQoaHRtbF82MmIxMDZlNGQ0ODU0NThmODBjMWQ2YjRhNTQxZDYxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NTkwMWNhYjZlNWI0Mzg0OTFkZTQxMjJlMTFkZjBlMC5iaW5kUG9wdXAocG9wdXBfNWJhNWQ0YzIyYmE0NDMxOTgzYzgyYmZlYWFkZTMzZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI0MzgzODc1NmVhNGE5MDgyN2Y5MWU3MDIyMWI4NTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE3NjA3OCwtNDMuODg1OTM4ODE1ODI4NDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkNjIyYzFhMzM3YzQ5MTc4YzI4OWY4ZWQyYjY3NmZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkMjA1MDY4ZDg2ODQ3ODVhZjVjYzhkZDlhOGI4ZDE2ID0gJCgnPGRpdiBpZD0iaHRtbF9jZDIwNTA2OGQ4Njg0Nzg1YWY1Y2M4ZGQ5YThiOGQxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VEFRVUFSSUw6ICgtMTkuOTE3NjA3OCwgLTQzLjg4NTkzODgxNTgyODQyNSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkNjIyYzFhMzM3YzQ5MTc4YzI4OWY4ZWQyYjY3NmZhLnNldENvbnRlbnQoaHRtbF9jZDIwNTA2OGQ4Njg0Nzg1YWY1Y2M4ZGQ5YThiOGQxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYjQzODM4NzU2ZWE0YTkwODI3ZjkxZTcwMjIxYjg1MC5iaW5kUG9wdXAocG9wdXBfM2Q2MjJjMWEzMzdjNDkxNzhjMjg5ZjhlZDJiNjc2ZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ1OGI5ODE1MjNjNDZiOGI0MDQ4ODhkMzNjMDc5ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTg3OTM3MTUsLTQ0LjAxNjM4NDQ5ODY5MjgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1ZTIwNDE2Zjg5YTRjZTdhZjc5NjQwNWY1NDAzMGUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMTExMDEzYzE3MDQ0MDE4MWNmNzczNjg5YTI1NzE3ID0gJCgnPGRpdiBpZD0iaHRtbF82MjExMTAxM2MxNzA0NDAxODFjZjc3MzY4OWEyNTcxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VEVJWEVJUkEgRElBUzogKC0xOS45ODc5MzcxNSwgLTQ0LjAxNjM4NDQ5ODY5MjgzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODVlMjA0MTZmODlhNGNlN2FmNzk2NDA1ZjU0MDMwZTMuc2V0Q29udGVudChodG1sXzYyMTExMDEzYzE3MDQ0MDE4MWNmNzczNjg5YTI1NzE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkNThiOTgxNTIzYzQ2YjhiNDA0ODg4ZDMzYzA3OWUyLmJpbmRQb3B1cChwb3B1cF84NWUyMDQxNmY4OWE0Y2U3YWY3OTY0MDVmNTQwMzBlMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZGRkMmVkZDdlZjk0ZWMwYmMwZTEwNTIxZDBmODRjOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45ODgzMjIyLC00NC4wNDA3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVjZmI1NDViYWQzNDEwZmI0Y2FhYzI4MmRlN2UzZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTgxYmU5YWZiMGM0NDZjM2FhMjM2OWNlMjgyMTFlYzAgPSAkKCc8ZGl2IGlkPSJodG1sX2U4MWJlOWFmYjBjNDQ2YzNhYTIzNjljZTI4MjExZWMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5USVJPTDogKC0xOS45ODgzMjIyLCAtNDQuMDQwNzk5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTVjZmI1NDViYWQzNDEwZmI0Y2FhYzI4MmRlN2UzZTcuc2V0Q29udGVudChodG1sX2U4MWJlOWFmYjBjNDQ2YzNhYTIzNjljZTI4MjExZWMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkZGQyZWRkN2VmOTRlYzBiYzBlMTA1MjFkMGY4NGM5LmJpbmRQb3B1cChwb3B1cF8xNWNmYjU0NWJhZDM0MTBmYjRjYWFjMjgyZGU3ZTNlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYmVhZjc0OTU3NDI0ZWZhOWViMzcxOWVlYjFiNmM0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY4MTI5LC00NC4wMTA4ODMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkODI2MWU5NjczZTRmNDM5NDMwZjljNGY0YjQ2MmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5ZDcyNTY3MmZjODQ5NjY4NDE5Y2U4ZTZlOGExMmZhID0gJCgnPGRpdiBpZD0iaHRtbF9hOWQ3MjU2NzJmYzg0OTY2ODQxOWNlOGU2ZThhMTJmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VFJFVk86ICgtMTkuODM2ODEyOSwgLTQ0LjAxMDg4MzIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDgyNjFlOTY3M2U0ZjQzOTQzMGY5YzRmNGI0NjJhNy5zZXRDb250ZW50KGh0bWxfYTlkNzI1NjcyZmM4NDk2Njg0MTljZThlNmU4YTEyZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGJlYWY3NDk1NzQyNGVmYTllYjM3MTllZWIxYjZjNDguYmluZFBvcHVwKHBvcHVwXzFkODI2MWU5NjczZTRmNDM5NDMwZjljNGY0YjQ2MmE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwZTkzNDM4ZjE1ODRiODk4ZGJjN2ExODE0MjBiNDExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNjYzMzQ1LC00My45MjU1NTY3NzI5MzU5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWNlZjFmOGU1YTQ0Yjk5OTM5YTZlYWNlODg2MzYxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lY2QyOTAxODZiOGM0MGJhODFmMWNhNzZkM2NlMTIzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWNkMjkwMTg2YjhjNDBiYTgxZjFjYTc2ZDNjZTEyM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRVUEk6ICgtMTkuODM2NjMzNDUsIC00My45MjU1NTY3NzI5MzU5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhY2VmMWY4ZTVhNDRiOTk5MzlhNmVhY2U4ODYzNjFlLnNldENvbnRlbnQoaHRtbF9lY2QyOTAxODZiOGM0MGJhODFmMWNhNzZkM2NlMTIzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMGU5MzQzOGYxNTg0Yjg5OGRiYzdhMTgxNDIwYjQxMS5iaW5kUG9wdXAocG9wdXBfOGFjZWYxZjhlNWE0NGI5OTkzOWE2ZWFjZTg4NjM2MWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ2NTE4NzBjMzlmNDQwYmE1M2I2YmFhYjU4YjU2M2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODgwOTI3Mzk5OTk5OTk3LC00My45MjM0NTc0OTkwOTI0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzczYTg0MDgzYTg0NmFmOTM0ODFiZWEzNjhhMjZlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMGExNWU5MjFmMTg0ZDg1YmNhNDFlMzNmMmE0MjRlNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDBhMTVlOTIxZjE4NGQ4NWJjYTQxZTMzZjJhNDI0ZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOSUFPOiAoLTE5Ljg4MDkyNzM5OTk5OTk5NywgLTQzLjkyMzQ1NzQ5OTA5MjQxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc3M2E4NDA4M2E4NDZhZjkzNDgxYmVhMzY4YTI2ZWUuc2V0Q29udGVudChodG1sXzAwYTE1ZTkyMWYxODRkODViY2E0MWUzM2YyYTQyNGU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVkNjUxODcwYzM5ZjQ0MGJhNTNiNmJhYWI1OGI1NjNjLmJpbmRQb3B1cChwb3B1cF8yNzczYTg0MDgzYTg0NmFmOTM0ODFiZWEzNjhhMjZlZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODdlNWQ4YjY4MTY0NDM3ODdlZWQ4MTg5MDJhZDQ0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44Njc0MTM2LC00My45NDE1NzcwNzc2ODYzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGYzZDBiYjI4ODc0ODg5YmNhMzA4YmRlYzczNDgzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMTUxMzY5Y2IxNmM0YzRhOGJmOGQ1MzEwYzQ4ZTc4NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDE1MTM2OWNiMTZjNGM0YThiZjhkNTMxMGM0OGU3ODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOSVZFUlNJVEFSSU86ICgtMTkuODY3NDEzNiwgLTQzLjk0MTU3NzA3NzY4NjM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmRmM2QwYmIyODg3NDg4OWJjYTMwOGJkZWM3MzQ4MzEuc2V0Q29udGVudChodG1sX2QxNTEzNjljYjE2YzRjNGE4YmY4ZDUzMTBjNDhlNzg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4N2U1ZDhiNjgxNjQ0Mzc4N2VlZDgxODkwMmFkNDRkLmJpbmRQb3B1cChwb3B1cF9iZGYzZDBiYjI4ODc0ODg5YmNhMzA4YmRlYzczNDgzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NTRmMGM2Y2I2N2E0MmNlOTlhZTJmOWVjMGZlMWEzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS42NDAwMDAyLC00NC4zNTY3ODg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkZjY3MjNlN2NmMTRkYWY4ODY4MWZkOGI3MmFjZTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjNGU0NzJlYTdhNzQwMWE4MmJmNGY5MjRjOTI5NjFmID0gJCgnPGRpdiBpZD0iaHRtbF8wYzRlNDcyZWE3YTc0MDFhODJiZjRmOTI0YzkyOTYxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VVJVQ1VJQTogKC0xOS42NDAwMDAyLCAtNDQuMzU2Nzg4NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkZjY3MjNlN2NmMTRkYWY4ODY4MWZkOGI3MmFjZTk0LnNldENvbnRlbnQoaHRtbF8wYzRlNDcyZWE3YTc0MDFhODJiZjRmOTI0YzkyOTYxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTRmMGM2Y2I2N2E0MmNlOTlhZTJmOWVjMGZlMWEzMC5iaW5kUG9wdXAocG9wdXBfN2RmNjcyM2U3Y2YxNGRhZjg4NjgxZmQ4YjcyYWNlOTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTE3MjkwYjIwZmI3NGVhZWJkMGQwMWI2ZjU1ZTZiZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuMDA3MTUwNzUsLTQ0LjAzODQ2ODgzNTg1NTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwY2VjNzllYzcxYjRmNzRiMTNiYzNlOWE1MzA4M2YzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmZDNkZjM2YTNmMzRkMThiNDE1OWI3MzkzMzQyZWYyID0gJCgnPGRpdiBpZD0iaHRtbF9jZmQzZGYzNmEzZjM0ZDE4YjQxNTliNzM5MzM0MmVmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFMRSBETyBKQVRPQkE6ICgtMjAuMDA3MTUwNzUsIC00NC4wMzg0Njg4MzU4NTU4NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwY2VjNzllYzcxYjRmNzRiMTNiYzNlOWE1MzA4M2YzLnNldENvbnRlbnQoaHRtbF9jZmQzZGYzNmEzZjM0ZDE4YjQxNTliNzM5MzM0MmVmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MTcyOTBiMjBmYjc0ZWFlYmQwZDAxYjZmNTVlNmJlMC5iaW5kUG9wdXAocG9wdXBfMjBjZWM3OWVjNzFiNGY3NGIxM2JjM2U5YTUzMDgzZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDExN2Q2ZjkxMDU2NGRkODg1YzE1OWQwMTBlOTYxNmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEwMjc0OCwtNDMuODk2NzA1MTYxMjE1NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ0OTg1Nzg3NDFiNGRhYzg4YzczZTZkNDI3OWQxMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjE2MDRiMDBmZWVkNGIwNWEzN2RiM2YxMWYzMTNmNmYgPSAkKCc8ZGl2IGlkPSJodG1sX2YxNjA0YjAwZmVlZDRiMDVhMzdkYjNmMTFmMzEzZjZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRVJBIENSVVo6ICgtMTkuOTEwMjc0OCwgLTQzLjg5NjcwNTE2MTIxNTYxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ0OTg1Nzg3NDFiNGRhYzg4YzczZTZkNDI3OWQxMzIuc2V0Q29udGVudChodG1sX2YxNjA0YjAwZmVlZDRiMDVhMzdkYjNmMTFmMzEzZjZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QxMTdkNmY5MTA1NjRkZDg4NWMxNTlkMDEwZTk2MTZjLmJpbmRQb3B1cChwb3B1cF83NDQ5ODU3ODc0MWI0ZGFjODhjNzNlNmQ0Mjc5ZDEzMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OWE1ZDZlMDMyZWM0MDk1ODU4ZGEzZDY1Yzg1MjFiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MTQyMDg5LC00My45NjIyMDM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4MzY3NjBhOGVmMzRiZjFhM2M4NjEwMzYzYTkyOWFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1NmZlMzU4YTM1NTRjMGI5NjljNDE1OTgyMzg3Y2RhID0gJCgnPGRpdiBpZD0iaHRtbF8yNTZmZTM1OGEzNTU0YzBiOTY5YzQxNTk4MjM4N2NkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VklMQSBCUkFTSUxJQTogKC0xOS44MTQyMDg5LCAtNDMuOTYyMjAzNik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4MzY3NjBhOGVmMzRiZjFhM2M4NjEwMzYzYTkyOWFmLnNldENvbnRlbnQoaHRtbF8yNTZmZTM1OGEzNTU0YzBiOTY5YzQxNTk4MjM4N2NkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OWE1ZDZlMDMyZWM0MDk1ODU4ZGEzZDY1Yzg1MjFiNS5iaW5kUG9wdXAocG9wdXBfYzgzNjc2MGE4ZWYzNGJmMWEzYzg2MTAzNjNhOTI5YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTI3YjQzOTMwNGRhNGI1ZTk4NWExMDg4NDgxNWE0M2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM0OTkzNSwtNDMuOTA4ODU4MjU2MTEzNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgzMTE5ZDVjZGVkNGZjOGIyMmU4NzFlMzBhODRjMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTRkM2Y1ZjJmNzMwNGMxZTk0OWYxNDE1NTQ5Y2VkMTggPSAkKCc8ZGl2IGlkPSJodG1sXzE0ZDNmNWYyZjczMDRjMWU5NDlmMTQxNTU0OWNlZDE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIENBRkVaQUw6ICgtMTkuOTM0OTkzNSwgLTQzLjkwODg1ODI1NjExMzY0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgzMTE5ZDVjZGVkNGZjOGIyMmU4NzFlMzBhODRjMjEuc2V0Q29udGVudChodG1sXzE0ZDNmNWYyZjczMDRjMWU5NDlmMTQxNTU0OWNlZDE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UyN2I0MzkzMDRkYTRiNWU5ODVhMTA4ODQ4MTVhNDNjLmJpbmRQb3B1cChwb3B1cF81ODMxMTlkNWNkZWQ0ZmM4YjIyZTg3MWUzMGE4NGMyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDdlMDYwMjRlZDQ0OWRiOTI2NDMwZTJiMTQ3YThiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45OTU0MzI4MDAwMDAwMDMsLTQzLjk5MjM2NjU3MzgwNTExNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTI3OTIyNTM0YWE0M2ZjYmIxMGJmNDlmNmUzMTQ4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzkxNmQyYzMyZTc0MmNjYTY5ZWQ1YmJjNzkxNjMwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTM5MTZkMmMzMmU3NDJjY2E2OWVkNWJiYzc5MTYzMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgQ0VNSUc6ICgtMTkuOTk1NDMyODAwMDAwMDAzLCAtNDMuOTkyMzY2NTczODA1MTE0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWEyNzkyMjUzNGFhNDNmY2JiMTBiZjQ5ZjZlMzE0OGEuc2V0Q29udGVudChodG1sX2UzOTE2ZDJjMzJlNzQyY2NhNjllZDViYmM3OTE2MzAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwN2UwNjAyNGVkNDQ5ZGI5MjY0MzBlMmIxNDdhOGI0LmJpbmRQb3B1cChwb3B1cF81YTI3OTIyNTM0YWE0M2ZjYmIxMGJmNDlmNmUzMTQ4YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTQ1MDFiYTM2YWE0ZmY3ODc4ODhlZDE1YTgxNjRjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzY2NjkwMDAwMDAwMDIsLTQ0LjAwMTk4NDY2NzYwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTkwOWEzNTEyZDQzNGU1MmFhMGU4ODM0Zjk0N2U1ODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTM1ZGEwNjMwY2Q1NDFjYmE5YzkxY2M1MmFmZDVhMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2EzNWRhMDYzMGNkNTQxY2JhOWM5MWNjNTJhZmQ1YTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIE9FU1RFOiAoLTE5LjkzNjY2OTAwMDAwMDAwMiwgLTQ0LjAwMTk4NDY2NzYwNDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTA5YTM1MTJkNDM0ZTUyYWEwZTg4MzRmOTQ3ZTU4MS5zZXRDb250ZW50KGh0bWxfYTM1ZGEwNjMwY2Q1NDFjYmE5YzkxY2M1MmFmZDVhMjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWE0NTAxYmEzNmFhNGZmNzg3ODg4ZWQxNWE4MTY0Y2UuYmluZFBvcHVwKHBvcHVwXzk5MDlhMzUxMmQ0MzRlNTJhYTBlODgzNGY5NDdlNTgxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdjZDRjMzY2MDk3NzRjYzI4NmNmNDUwMGQyZGRmYmY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NDk0MTI1LC00NC4wMjA4MTY0NDA2OTAzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NGQ1ZjRmODdkNjE0YzQ4YThmMDg1ODgyZWI2MGI4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzQ3YjQwMGNkNWQ0ZWI2YWVlZTYyMjU5NjZjY2Y5YyA9ICQoJzxkaXYgaWQ9Imh0bWxfODc0N2I0MDBjZDVkNGViNmFlZWU2MjI1OTY2Y2NmOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgVklSR0lOSUE6ICgtMTkuOTQ0OTQxMjUsIC00NC4wMjA4MTY0NDA2OTAzOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0ZDVmNGY4N2Q2MTRjNDhhOGYwODU4ODJlYjYwYjhmLnNldENvbnRlbnQoaHRtbF84NzQ3YjQwMGNkNWQ0ZWI2YWVlZTYyMjU5NjZjY2Y5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83Y2Q0YzM2NjA5Nzc0Y2MyODZjZjQ1MDBkMmRkZmJmNC5iaW5kUG9wdXAocG9wdXBfNTRkNWY0Zjg3ZDYxNGM0OGE4ZjA4NTg4MmViNjBiOGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg4OGI3YWQ5YjY3NGQ0YWJkNjI4NTYxYmNmOTljMDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTU1MDA1NSwtNDMuOTk5MDIxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWIzY2U0ZjM0Zjc0MjFmOTRiODQ0YThhYWJmNGM1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MzViNTc1YTY3YTM0NGE1YTk0OWYxMDc3MjVjYzI0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTM1YjU3NWE2N2EzNDRhNWE5NDlmMTA3NzI1Y2MyNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJU1RBIEFMRUdSRTogKC0xOS45NTUwMDU1LCAtNDMuOTk5MDIxNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlYjNjZTRmMzRmNzQyMWY5NGI4NDRhOGFhYmY0YzVhLnNldENvbnRlbnQoaHRtbF81MzViNTc1YTY3YTM0NGE1YTk0OWYxMDc3MjVjYzI0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iODg4YjdhZDliNjc0ZDRhYmQ2Mjg1NjFiY2Y5OWMwNC5iaW5kUG9wdXAocG9wdXBfM2ViM2NlNGYzNGY3NDIxZjk0Yjg0NGE4YWFiZjRjNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzJhOWY0YjhhZTkyNGQwYjgyZGMwYjVjMWMwNjI0ZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTg5NTM2NCwtNDQuMDU5Mzc3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjVkMmFiM2NlN2U0YjNmODlhZjAxNTE2YjMzOTNlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82N2JhMTRhZTdlNTU0YWU4YjZkNWM3NDAyODlmYTgxNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjdiYTE0YWU3ZTU1NGFlOGI2ZDVjNzQwMjg5ZmE4MTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBU0hJTkdUT04gUElSRVM6ICgtMTkuOTg5NTM2NCwgLTQ0LjA1OTM3NzQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjVkMmFiM2NlN2U0YjNmODlhZjAxNTE2YjMzOTNlZC5zZXRDb250ZW50KGh0bWxfNjdiYTE0YWU3ZTU1NGFlOGI2ZDVjNzQwMjg5ZmE4MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzJhOWY0YjhhZTkyNGQwYjgyZGMwYjVjMWMwNjI0ZWEuYmluZFBvcHVwKHBvcHVwX2ZmNWQyYWIzY2U3ZTRiM2Y4OWFmMDE1MTZiMzM5M2VkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5NWU1MDU3ODRlMzRiOTJiZDRiYTVhMzdjNGUyNTM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg0MDE0MjMsLTQ0LjAxOTMzNDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjIxYTQyMjJkOGU4NGI0YjhlMjRmMTllZTAwNmMwZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZmYjUxYTJmY2YzNDk2ODhjZWVlOTUwNDY1YTY1ODYgPSAkKCc8ZGl2IGlkPSJodG1sXzg2ZmI1MWEyZmNmMzQ5Njg4Y2VlZTk1MDQ2NWE2NTg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5YQU5HUklMQTogKC0xOS44NDAxNDIzLCAtNDQuMDE5MzM0NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyMWE0MjIyZDhlODRiNGI4ZTI0ZjE5ZWUwMDZjMGQxLnNldENvbnRlbnQoaHRtbF84NmZiNTFhMmZjZjM0OTY4OGNlZWU5NTA0NjVhNjU4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOTVlNTA1Nzg0ZTM0YjkyYmQ0YmE1YTM3YzRlMjUzNy5iaW5kUG9wdXAocG9wdXBfYjIxYTQyMjJkOGU4NGI0YjhlMjRmMTllZTAwNmMwZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzAzNjZjY2YyODYxNGNiNmFlOGVmZjdiYTllY2E0ZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4zNzEwNzUsLTY0Ljc1MzAyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDRiYWY1MzRlMGU0MDYyOTk0ZDliNThlYmUzOTZkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTE5YWRiMmZlYWI0MWZlYjkyMWMzN2JjY2M5ZjIwMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWUxOWFkYjJmZWFiNDFmZWI5MjFjMzdiY2NjOWYyMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlpPTkEgUlVSQUw6ICgtNy4zNzEwNzUsIC02NC43NTMwMjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDRiYWY1MzRlMGU0MDYyOTk0ZDliNThlYmUzOTZkZC5zZXRDb250ZW50KGh0bWxfNWUxOWFkYjJmZWFiNDFmZWI5MjFjMzdiY2NjOWYyMDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzAzNjZjY2YyODYxNGNiNmFlOGVmZjdiYTllY2E0ZjguYmluZFBvcHVwKHBvcHVwX2M0NGJhZjUzNGUwZTQwNjI5OTRkOWI1OGViZTM5NmRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiOGIyNTRjODE0ZTQ1N2U4YTRiNjJjMDdlMTdkYzk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MjI2MDcsLTQ0LjAwMzQ1ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzg2YjZkMjMwOGZjNDFmNWIwODJlMDkyMzg0NDAwYWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZhYTVmODE1NDEzNDI4ZDk3NTIxOWYwYThjMGU3N2QgPSAkKCc8ZGl2IGlkPSJodG1sXzhmYWE1ZjgxNTQxMzQyOGQ5NzUyMTlmMGE4YzBlNzdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTElQSU8gREUgTUVMTzogKC0xOS44OTIyNjA3LCAtNDQuMDAzNDU4Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4NmI2ZDIzMDhmYzQxZjViMDgyZTA5MjM4NDQwMGFjLnNldENvbnRlbnQoaHRtbF84ZmFhNWY4MTU0MTM0MjhkOTc1MjE5ZjBhOGMwZTc3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YjhiMjU0YzgxNGU0NTdlOGE0YjYyYzA3ZTE3ZGM5OS5iaW5kUG9wdXAocG9wdXBfYzg2YjZkMjMwOGZjNDFmNWIwODJlMDkyMzg0NDAwYWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U4Y2VjOGI3YjdlNDBhNWIyZjRmY2RjNzA2NWU0MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQ2NjYyNiwtNDQuMDA2ODA2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzkxZjY4OTA5MTU0NmU0YmFiNmFkZTk1MDE0NDYzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTBlNDZmOThhMzg0MjExYmNhZTMzNGVhY2M5YzM5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDEwZTQ2Zjk4YTM4NDIxMWJjYWUzMzRlYWNjOWMzOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJSQVVOQVM6ICgtMTkuODQ2NjYyNiwgLTQ0LjAwNjgwNjMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNzkxZjY4OTA5MTU0NmU0YmFiNmFkZTk1MDE0NDYzNC5zZXRDb250ZW50KGh0bWxfNDEwZTQ2Zjk4YTM4NDIxMWJjYWUzMzRlYWNjOWMzOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2U4Y2VjOGI3YjdlNDBhNWIyZjRmY2RjNzA2NWU0MGIuYmluZFBvcHVwKHBvcHVwX2Q3OTFmNjg5MDkxNTQ2ZTRiYWI2YWRlOTUwMTQ0NjM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxMGUxZDE2Nzk3ZTRmNmU4MmFhMzc3NzVmNzhmMmQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5OTcwMDU1LC00My45NjUyNTU1ODU4OTYxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjRiOGM5YWY5MDA0Yzk3YWFjMDA5MzA3Nzg4MmMwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lM2M2NDY0ODRhODE0MGIyODE3NDZhMGZkNTBhNDU0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTNjNjQ2NDg0YTgxNDBiMjgxNzQ2YTBmZDUwYTQ1NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBSUNBUkE6ICgtMTkuODk5NzAwNTUsIC00My45NjUyNTU1ODU4OTYxNyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2NGI4YzlhZjkwMDRjOTdhYWMwMDkzMDc3ODgyYzBlLnNldENvbnRlbnQoaHRtbF9lM2M2NDY0ODRhODE0MGIyODE3NDZhMGZkNTBhNDU0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MTBlMWQxNjc5N2U0ZjZlODJhYTM3Nzc1Zjc4ZjJkNy5iaW5kUG9wdXAocG9wdXBfNjY0YjhjOWFmOTAwNGM5N2FhYzAwOTMwNzc4ODJjMGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGZjMDk2ODMyODRhNDZkMTg3Y2MzYTMwYTZhZDhmMjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA1MTMzNiwtNDMuOTc0OTg3MjIwMTA1OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ5YWFiZjlmMmNiNDBlMTgyN2UxY2E2MjlkMWExYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDg4YzA2MTVkYTU2NGZhZTg3ZTkzOGU1ZGJmNTIxZDQgPSAkKCc8ZGl2IGlkPSJodG1sXzA4OGMwNjE1ZGE1NjRmYWU4N2U5MzhlNWRiZjUyMWQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQUlDQVJBIEFERUxBSURFOiAoLTE5LjkwNTEzMzYsIC00My45NzQ5ODcyMjAxMDU5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0OWFhYmY5ZjJjYjQwZTE4MjdlMWNhNjI5ZDFhMWMzLnNldENvbnRlbnQoaHRtbF8wODhjMDYxNWRhNTY0ZmFlODdlOTM4ZTVkYmY1MjFkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZmMwOTY4MzI4NGE0NmQxODdjYzNhMzBhNmFkOGYyNC5iaW5kUG9wdXAocG9wdXBfOTQ5YWFiZjlmMmNiNDBlMTgyN2UxY2E2MjlkMWExYzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmYxYmExY2QxM2NiNDVmOTlkNzFkNDkzMWRhNmQxNTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI0MzYxMTUsLTQzLjk3MDA1NDQwMzM0NTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmNDYyNTRjYjI0ZDQwYjg4NjgyMThlNWExYWViZmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkODVkYWE0ZGM0ZDQzNmY4NWRhYzQ4OGE5M2Y2YjVmID0gJCgnPGRpdiBpZD0iaHRtbF9jZDg1ZGFhNGRjNGQ0MzZmODVkYWM0ODhhOTNmNmI1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FMQUZBVEU6ICgtMTkuOTI0MzYxMTUsIC00My45NzAwNTQ0MDMzNDU2Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmNDYyNTRjYjI0ZDQwYjg4NjgyMThlNWExYWViZmNiLnNldENvbnRlbnQoaHRtbF9jZDg1ZGFhNGRjNGQ0MzZmODVkYWM0ODhhOTNmNmI1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZjFiYTFjZDEzY2I0NWY5OWQ3MWQ0OTMxZGE2ZDE1OS5iaW5kUG9wdXAocG9wdXBfZGY0NjI1NGNiMjRkNDBiODg2ODIxOGU1YTFhZWJmY2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzYwNzI4YjExOTA2NDBkOThjMzc4MzE5MTBlNzIyNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEzNTUwOTUsLTQzLjk2NTc0NzQzMTk0ODgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2ZDMyNDFkZTZkYzRiNDY5MzgwOGIxNzg5ZTU5NzFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5NDJkM2IxNjAwNzRkNGViMGM0MDc3YzVlNWZkMzFjID0gJCgnPGRpdiBpZD0iaHRtbF9iOTQyZDNiMTYwMDc0ZDRlYjBjNDA3N2M1ZTVmZDMxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FSTE9TIFBSQVRFUzogKC0xOS45MTM1NTA5NSwgLTQzLjk2NTc0NzQzMTk0ODgxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjZkMzI0MWRlNmRjNGI0NjkzODA4YjE3ODllNTk3MWMuc2V0Q29udGVudChodG1sX2I5NDJkM2IxNjAwNzRkNGViMGM0MDc3YzVlNWZkMzFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2MDcyOGIxMTkwNjQwZDk4YzM3ODMxOTEwZTcyMjUxLmJpbmRQb3B1cChwb3B1cF82NmQzMjQxZGU2ZGM0YjQ2OTM4MDhiMTc4OWU1OTcxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGUxMTJjNmZjMmY0ZDhiOTNjNzkxZGY3Y2MxYzNlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjI3MjA3LC00NC4wMDcxNzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MDcwMWUzN2Y2YzQ1MjI5NjI3YTI1MTZkMTJhYmUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwYTI1ODY5NGEzMDQxOTM5NzdjOTI4OTA0YTljNzY3ID0gJCgnPGRpdiBpZD0iaHRtbF83MGEyNTg2OTRhMzA0MTkzOTc3YzkyODkwNGE5Yzc2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09OSlVOVE8gQ0FMSUZPUk5JQSBJOiAoLTE5LjkyMjcyMDcsIC00NC4wMDcxNzUzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQwNzAxZTM3ZjZjNDUyMjk2MjdhMjUxNmQxMmFiZTMuc2V0Q29udGVudChodG1sXzcwYTI1ODY5NGEzMDQxOTM5NzdjOTI4OTA0YTljNzY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0ZTExMmM2ZmMyZjRkOGI5M2M3OTFkZjdjYzFjM2UyLmJpbmRQb3B1cChwb3B1cF8zNDA3MDFlMzdmNmM0NTIyOTYyN2EyNTE2ZDEyYWJlMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMGNmZTljNjcyYjA0OWJiOGZlYjBhYjlkYTM1NTI0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTkxMDI2LC00NC4wMTEwNTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiMmFkZGZiNjVhMzRmYTE5NGFkYzQ4ZjBkMzFkZmJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5N2NiNzI5ZjllMTRhZWJhYTlmZTk5NjdlNWIwZTA1ID0gJCgnPGRpdiBpZD0iaHRtbF80OTdjYjcyOWY5ZTE0YWViYWE5ZmU5OTY3ZTViMGUwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09OSlVOVE8gQ0FMSUZPUk5JQSBJSTogKC0xOS45MTkxMDI2LCAtNDQuMDExMDUzOSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiMmFkZGZiNjVhMzRmYTE5NGFkYzQ4ZjBkMzFkZmJjLnNldENvbnRlbnQoaHRtbF80OTdjYjcyOWY5ZTE0YWViYWE5ZmU5OTY3ZTViMGUwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMGNmZTljNjcyYjA0OWJiOGZlYjBhYjlkYTM1NTI0OS5iaW5kUG9wdXAocG9wdXBfNGIyYWRkZmI2NWEzNGZhMTk0YWRjNDhmMGQzMWRmYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjI2MjYwMjNiMmYyNGQxYTk1NjZiMWMzMTBkZmFiNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg1NzQwMSwtNDQuMDA4NTE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODg5ZDY3YTRhMmQ0N2Q3ODUzYjNlZmMyNWIwNDIwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDg0MWIwNDJhMzc0MmRkYjNiYTVlNWE5YTQwNWYxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDA4NDFiMDQyYTM3NDJkZGIzYmE1ZTVhOWE0MDVmMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPTkpVTlRPIENFTFNPIE1BQ0hBRE86ICgtMTkuODg1NzQwMSwgLTQ0LjAwODUxNDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wODg5ZDY3YTRhMmQ0N2Q3ODUzYjNlZmMyNWIwNDIwOC5zZXRDb250ZW50KGh0bWxfMDA4NDFiMDQyYTM3NDJkZGIzYmE1ZTVhOWE0MDVmMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjI2MjYwMjNiMmYyNGQxYTk1NjZiMWMzMTBkZmFiNzEuYmluZFBvcHVwKHBvcHVwXzA4ODlkNjdhNGEyZDQ3ZDc4NTNiM2VmYzI1YjA0MjA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiZDk2OGIwOTQ2ZjRkYTQ5OWI5MDY1YmY4NTQ2YTU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMjAyMzA1LC00My45OTgxNTE2NjM2Nzg0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDE4MjUwNzI1MmM0MGI5OGM3NjMwNzQ4ZjhkNmE0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYWRkNzI4ODExMzc0N2Y2YmE4NmJjMWEzMDU4ZGY5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2FkZDcyODgxMTM3NDdmNmJhODZiYzFhMzA1OGRmOTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRPTSBDQUJSQUw6ICgtMTkuOTIyMDIzMDUsIC00My45OTgxNTE2NjM2Nzg0Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0MTgyNTA3MjUyYzQwYjk4Yzc2MzA3NDhmOGQ2YTQ5LnNldENvbnRlbnQoaHRtbF9jYWRkNzI4ODExMzc0N2Y2YmE4NmJjMWEzMDU4ZGY5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYmQ5NjhiMDk0NmY0ZGE0OTliOTA2NWJmODU0NmE1Ni5iaW5kUG9wdXAocG9wdXBfNzQxODI1MDcyNTJjNDBiOThjNzYzMDc0OGY4ZDZhNDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWJkM2FmYTE3YWQxNDY2ZThlM2NhYzJhODAzZWJjMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA1NDk5MiwtNDMuOTA0MjY3NzcyODE0NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVhM2U5YWZkN2IzNDhmZmI2MzRiMWIxODA1NDhmZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJmOGRhOTQzMTg3NDNlNGE1MzI1MmJmOGI4MzAwNjQgPSAkKCc8ZGl2IGlkPSJodG1sXzViZjhkYTk0MzE4NzQzZTRhNTMyNTJiZjhiODMwMDY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FU1BMQU5BREE6ICgtMTkuOTA1NDk5MiwgLTQzLjkwNDI2Nzc3MjgxNDUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTVhM2U5YWZkN2IzNDhmZmI2MzRiMWIxODA1NDhmZjMuc2V0Q29udGVudChodG1sXzViZjhkYTk0MzE4NzQzZTRhNTMyNTJiZjhiODMwMDY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiZDNhZmExN2FkMTQ2NmU4ZTNjYWMyYTgwM2ViYzM4LmJpbmRQb3B1cChwb3B1cF8xNWEzZTlhZmQ3YjM0OGZmYjYzNGIxYjE4MDU0OGZmMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzhiMzA4ZDg4M2I0NjhkODlhM2ZhZjE2MTNiYjU5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY0ODY2LC00My45OTc5OTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkODc1MDU1NmFjMjQ2NmVhNTRkOWU3MDMzMGJiNDE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExNDBhY2M1NTEzMzQ5NDc4MDAwZWFlZjcxYWUwYjgwID0gJCgnPGRpdiBpZD0iaHRtbF8xMTQwYWNjNTUxMzM0OTQ3ODAwMGVhZWY3MWFlMGI4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0FSQ0FTOiAoLTE5LjgzNjQ4NjYsIC00My45OTc5OTUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWQ4NzUwNTU2YWMyNDY2ZWE1NGQ5ZTcwMzMwYmI0MTcuc2V0Q29udGVudChodG1sXzExNDBhY2M1NTEzMzQ5NDc4MDAwZWFlZjcxYWUwYjgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3OGIzMDhkODgzYjQ2OGQ4OWEzZmFmMTYxM2JiNTk5LmJpbmRQb3B1cChwb3B1cF81ZDg3NTA1NTZhYzI0NjZlYTU0ZDllNzAzMzBiYjQxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NGUyNjRlNjIyZTc0MDhjYTM2NzViODA3ZDk1ZWQwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDk2MDUzMDAwMDAwMDMsLTQzLjkxNzUwOTc3Mzc0MzE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1OTU0Mjc0ZDIwZjQ3MDk4MTFkMTViMjM4ZWJkZWY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxY2JlOTMzMGVmMjRjYWFhOTNkMjZmY2NhMTczYTM3ID0gJCgnPGRpdiBpZD0iaHRtbF8yMWNiZTkzMzBlZjI0Y2FhYTkzZDI2ZmNjYTE3M2EzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SE9SVE86ICgtMTkuOTA5NjA1MzAwMDAwMDAzLCAtNDMuOTE3NTA5NzczNzQzMTkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTk1NDI3NGQyMGY0NzA5ODExZDE1YjIzOGViZGVmNy5zZXRDb250ZW50KGh0bWxfMjFjYmU5MzMwZWYyNGNhYWE5M2QyNmZjY2ExNzNhMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTRlMjY0ZTYyMmU3NDA4Y2EzNjc1YjgwN2Q5NWVkMDguYmluZFBvcHVwKHBvcHVwXzM1OTU0Mjc0ZDIwZjQ3MDk4MTFkMTViMjM4ZWJkZWY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViODQ3YmJhYjFhMDQ2NzNhMzE1YWJkM2QwOGM4YzRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NzA0MDIsLTQzLjk3MTgyMjgwMTE4NjU3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmViZTBhZGE3MzI0M2U3OWY4ZDM2ZWM4NmQ4N2Q0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MmFiMGJhOWY5YWU0YjJkYTMxZWYwNTcyMjJmYjJiMyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTJhYjBiYTlmOWFlNGIyZGEzMWVmMDU3MjIyZmIyYjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBBTUVSSUNBOiAoLTE5Ljk0NzA0MDIsIC00My45NzE4MjI4MDExODY1NzYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMmViZTBhZGE3MzI0M2U3OWY4ZDM2ZWM4NmQ4N2Q0Ni5zZXRDb250ZW50KGh0bWxfOTJhYjBiYTlmOWFlNGIyZGEzMWVmMDU3MjIyZmIyYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWI4NDdiYmFiMWEwNDY3M2EzMTVhYmQzZDA4YzhjNGQuYmluZFBvcHVwKHBvcHVwX2UyZWJlMGFkYTczMjQzZTc5ZjhkMzZlYzg2ZDg3ZDQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwZGNjYzVkMTRkODQwOGI4YWJmZDJiMmU0NzBjZjNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyOTI0NSwtNDMuOTk5Njg4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZmJmNDY1NjAwNDY0NjVmOWQ0YjhhNTJhY2U2YTdiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84M2ZhMGI3M2I0NzQ0MzQwYTk3NzRmZDFmYmIwNGU3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfODNmYTBiNzNiNDc0NDM0MGE5Nzc0ZmQxZmJiMDRlNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpPQU8gUElOSEVJUk86ICgtMTkuOTI5MjQ1LCAtNDMuOTk5Njg4Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmYmY0NjU2MDA0NjQ2NWY5ZDRiOGE1MmFjZTZhN2I2LnNldENvbnRlbnQoaHRtbF84M2ZhMGI3M2I0NzQ0MzQwYTk3NzRmZDFmYmIwNGU3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MGRjY2M1ZDE0ZDg0MDhiOGFiZmQyYjJlNDcwY2YzZC5iaW5kUG9wdXAocG9wdXBfZGZiZjQ2NTYwMDQ2NDY1ZjlkNGI4YTUyYWNlNmE3YjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjExODA0ODE0NGNkNDVlMmE1Mjk1NTNiODgxNWU5YTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODA2NDE0MiwtNDMuOTk0NTc1MzY3ODY4MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA4ZTNkN2MxZTlkNDE5ZDgwN2UwZGI3MDQwOTM5ZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ5NTA4MTYxMjg2NGU3ZTg0Y2EwZmZkNDVkYWEzZDkgPSAkKCc8ZGl2IGlkPSJodG1sXzc0OTUwODE2MTI4NjRlN2U4NGNhMGZmZDQ1ZGFhM2Q5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQUdPSU5IQTogKC0xOS44MDY0MTQyLCAtNDMuOTk0NTc1MzY3ODY4MzEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDhlM2Q3YzFlOWQ0MTlkODA3ZTBkYjcwNDA5MzlmMi5zZXRDb250ZW50KGh0bWxfNzQ5NTA4MTYxMjg2NGU3ZTg0Y2EwZmZkNDVkYWEzZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjExODA0ODE0NGNkNDVlMmE1Mjk1NTNiODgxNWU5YTAuYmluZFBvcHVwKHBvcHVwXzkwOGUzZDdjMWU5ZDQxOWQ4MDdlMGRiNzA0MDkzOWYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzMGM3YWUyYWZkMzRjMTBhMzc3YmM0OGRjY2NkMDU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxNzUzMDA1LC00My45OTAwNTQ2MTk4NzYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODQ3YTg5NzI5Zjc0YjNkYWM3ZThkOWJmNGFmZDRlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGQzNGVkZTUyYjU0YmEzODAzOGM0MTliM2Y5NTcwZCA9ICQoJzxkaXYgaWQ9Imh0bWxfN2RkMzRlZGU1MmI1NGJhMzgwMzhjNDE5YjNmOTU3MGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTkFTIEJSQVNJTDogKC0xOS45MTc1MzAwNSwgLTQzLjk5MDA1NDYxOTg3NjIzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg0N2E4OTcyOWY3NGIzZGFjN2U4ZDliZjRhZmQ0ZTEuc2V0Q29udGVudChodG1sXzdkZDM0ZWRlNTJiNTRiYTM4MDM4YzQxOWIzZjk1NzBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzMGM3YWUyYWZkMzRjMTBhMzc3YmM0OGRjY2NkMDU1LmJpbmRQb3B1cChwb3B1cF85ODQ3YTg5NzI5Zjc0YjNkYWM3ZThkOWJmNGFmZDRlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNmM5ZDI2YTFjMTY0ZWZjYmU4ZGMyNDk1MTc2ZjZmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDkyNzY0NSwtNDMuOTc3OTI4MDc5MDMyNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUxMDc5YzM0YWIyNDA5Mzg3ZWJhZGQ4YTBlYzljOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmEwZGY5OTM1MDFiNDA4MWIxYzgzOGM4ZGU0YjY4NmIgPSAkKCc8ZGl2IGlkPSJodG1sXzZhMGRmOTkzNTAxYjQwODFiMWM4MzhjOGRlNGI2ODZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NT05TRU5IT1IgTUVTU0lBUzogKC0xOS45MDkyNzY0NSwgLTQzLjk3NzkyODA3OTAzMjUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTUxMDc5YzM0YWIyNDA5Mzg3ZWJhZGQ4YTBlYzljOGIuc2V0Q29udGVudChodG1sXzZhMGRmOTkzNTAxYjQwODFiMWM4MzhjOGRlNGI2ODZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2YzlkMjZhMWMxNjRlZmNiZThkYzI0OTUxNzZmNmZkLmJpbmRQb3B1cChwb3B1cF8xNTEwNzljMzRhYjI0MDkzODdlYmFkZDhhMGVjOWM4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMmE5YzUwNDcyYWU0MzQ5YWY1N2M4MGU1NjUxZDQxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTMwMTM5LC00My45MzQxMzY3MzE0NTY0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83M2Q0MzJmN2VjYTM0YTI2ODU4ZWNmYjJkNmRiZGIzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjIyNzAzNWM4NWY0MzVjYmEzODA4ZDIwNDFiZjdkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTYyMjcwMzVjODVmNDM1Y2JhMzgwOGQyMDQxYmY3ZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgRkxPUkVTVEE6ICgtMTkuODkzMDEzOSwgLTQzLjkzNDEzNjczMTQ1NjQ1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzNkNDMyZjdlY2EzNGEyNjg1OGVjZmIyZDZkYmRiM2Muc2V0Q29udGVudChodG1sX2E2MjI3MDM1Yzg1ZjQzNWNiYTM4MDhkMjA0MWJmN2RiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMyYTljNTA0NzJhZTQzNDlhZjU3YzgwZTU2NTFkNDEyLmJpbmRQb3B1cChwb3B1cF83M2Q0MzJmN2VjYTM0YTI2ODU4ZWNmYjJkNmRiZGIzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTFmYzYyYzgwNWY0ZWEzYTFmMWQwMTY4NGFiZTM2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDE1NTI0LC00My45Njg1MzU5MTc1Mjg0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Njc0MTEwOTFjNTg0MjYyOTM0NzY1OTU1MmFiZGYzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjI5MTQ4NzY3YWU0N2E5YTI0M2UwZGFkNzZmMDdkZCA9ICQoJzxkaXYgaWQ9Imh0bWxfODIyOTE0ODc2N2FlNDdhOWEyNDNlMGRhZDc2ZjA3ZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgR1JBTkFEQTogKC0xOS45NDE1NTI0LCAtNDMuOTY4NTM1OTE3NTI4NDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Njc0MTEwOTFjNTg0MjYyOTM0NzY1OTU1MmFiZGYzOS5zZXRDb250ZW50KGh0bWxfODIyOTE0ODc2N2FlNDdhOWEyNDNlMGRhZDc2ZjA3ZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGExZmM2MmM4MDVmNGVhM2ExZjFkMDE2ODRhYmUzNjMuYmluZFBvcHVwKHBvcHVwXzk2NzQxMTA5MWM1ODQyNjI5MzQ3NjU5NTUyYWJkZjM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4NDg5YjMwZGY3OTQ2MTJiN2I0MjlhNmE1MjZkODRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMzUwMTM1LC00My45NzcyNTM0NzU3MDEzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NzcxYjk4YTk2NmU0N2FkOGJhZGI2M2Q3Y2ZmNjJlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YjYxYTJiOTEyMjI0ZWJlODMxYmMzOTNhNWY1OGRjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGI2MWEyYjkxMjIyNGViZTgzMWJjMzkzYTVmNThkYzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgU1VJQ0E6ICgtMTkuOTMzNTAxMzUsIC00My45NzcyNTM0NzU3MDEzMyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NzFiOThhOTY2ZTQ3YWQ4YmFkYjYzZDdjZmY2MmU2LnNldENvbnRlbnQoaHRtbF80YjYxYTJiOTEyMjI0ZWJlODMxYmMzOTNhNWY1OGRjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODQ4OWIzMGRmNzk0NjEyYjdiNDI5YTZhNTI2ZDg0ZC5iaW5kUG9wdXAocG9wdXBfNjc3MWI5OGE5NjZlNDdhZDhiYWRiNjNkN2NmZjYyZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGJjZjJlMmUyOGRmNGFhZGFiMDJjMGRjOGQ2OTI1MDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE0MzA0NSwtNDMuOTc5MzU1OTkwMTM3NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDg1MDI4ZTUyYmIxNDA5OGJmYzk4ZGIwNjQ2YWJhYjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGU1MzFiMjQ4NDkxNDI4OWFiNjA3OTkyZTA1YzA0OWUgPSAkKCc8ZGl2IGlkPSJodG1sXzBlNTMxYjI0ODQ5MTQyODlhYjYwNzk5MmUwNWMwNDllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQURSRSBFVVNUQVFVSU86ICgtMTkuOTE0MzA0NSwgLTQzLjk3OTM1NTk5MDEzNzYyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDg1MDI4ZTUyYmIxNDA5OGJmYzk4ZGIwNjQ2YWJhYjMuc2V0Q29udGVudChodG1sXzBlNTMxYjI0ODQ5MTQyODlhYjYwNzk5MmUwNWMwNDllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBiY2YyZTJlMjhkZjRhYWRhYjAyYzBkYzhkNjkyNTA0LmJpbmRQb3B1cChwb3B1cF9kODUwMjhlNTJiYjE0MDk4YmZjOThkYjA2NDZhYmFiMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjIzNTkyMTAyZDY0NmJiODBjZTA5NzNmMzM4OWI5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzMxNjQxOTk5OTk5OTgsLTQzLjkzMzgwNzUyNDYyNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWJmNTcyN2M4NTdiNGRjNWIyODJhMWQxZTc0ZTQ1NWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM2YjcyZjUwZGFkNGUxNzkyMmMzOThlYzNhMjg0YjUgPSAkKCc8ZGl2IGlkPSJodG1sX2QzNmI3MmY1MGRhZDRlMTc5MjJjMzk4ZWMzYTI4NGI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQUxNQVJFUzogKC0xOS44NzMxNjQxOTk5OTk5OTgsIC00My45MzM4MDc1MjQ2MjQ1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWJmNTcyN2M4NTdiNGRjNWIyODJhMWQxZTc0ZTQ1NWMuc2V0Q29udGVudChodG1sX2QzNmI3MmY1MGRhZDRlMTc5MjJjMzk4ZWMzYTI4NGI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliMjM1OTIxMDJkNjQ2YmI4MGNlMDk3M2YzMzg5YjkwLmJpbmRQb3B1cChwb3B1cF9hYmY1NzI3Yzg1N2I0ZGM1YjI4MmExZDFlNzRlNDU1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYmNiZDhhYjRlNTE0NTk3ODEwYmFkNTJjMDY0OWI0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzAyMjE1LC00My45OTMxMzY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMjdlODk0ZGZjYTRhNDRhODMwNmZlODVjZmZjYzgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3NWQ4NjJiM2U5MTRhNWQ4NjRkMWNlOGI5OWFmZmRjID0gJCgnPGRpdiBpZD0iaHRtbF81NzVkODYyYjNlOTE0YTVkODY0ZDFjZThiOTlhZmZkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFRVUVUQTogKC0xOS44NzAyMjE1LCAtNDMuOTkzMTM2NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzMjdlODk0ZGZjYTRhNDRhODMwNmZlODVjZmZjYzgzLnNldENvbnRlbnQoaHRtbF81NzVkODYyYjNlOTE0YTVkODY0ZDFjZThiOTlhZmZkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYmNiZDhhYjRlNTE0NTk3ODEwYmFkNTJjMDY0OWI0NS5iaW5kUG9wdXAocG9wdXBfNTMyN2U4OTRkZmNhNGE0NGE4MzA2ZmU4NWNmZmNjODMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTM2MTE2MGIzY2JjNDNkY2I3NDg2ZDgyNGMwZjcxY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuNDkyNDA3MiwtNDcuODMwNjk1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOTZiMDI0YjdlMzA0MjhjYmQ1ZDgzMTAxYmNlMjk1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDM4MzBjZGJkMjU0YWNlYjhjNWI1NmE2NTFlNzY5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfOWQzODMwY2RiZDI1NGFjZWI4YzViNTZhNjUxZTc2OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBFRFJPIElJOiAoLTIyLjQ5MjQwNzIsIC00Ny44MzA2OTU0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk2YjAyNGI3ZTMwNDI4Y2JkNWQ4MzEwMWJjZTI5NTguc2V0Q29udGVudChodG1sXzlkMzgzMGNkYmQyNTRhY2ViOGM1YjU2YTY1MWU3NjkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzNjExNjBiM2NiYzQzZGNiNzQ4NmQ4MjRjMGY3MWNlLmJpbmRQb3B1cChwb3B1cF9mOTZiMDI0YjdlMzA0MjhjYmQ1ZDgzMTAxYmNlMjk1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YTIxZDYxYTk1MGQ0OTA0OGVlZmQ3NGUxNTUyNmVkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzMyNjM3NSwtNDMuOTUyNTg2MTg1MTYwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTVmZGJjNmY4OWVjNGVjNjg0ODY5ZmExNTE3ZGNkZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmZlYmY5MmQ3MmZkNGRkMTg4M2NiNGI4YjhhZTU0ZjQgPSAkKCc8ZGl2IGlkPSJodG1sXzZmZWJmOTJkNzJmZDRkZDE4ODNjYjRiOGI4YWU1NGY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QTEFOQUxUTzogKC0xOS44MzMyNjM3NSwgLTQzLjk1MjU4NjE4NTE2MDQzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTVmZGJjNmY4OWVjNGVjNjg0ODY5ZmExNTE3ZGNkZWMuc2V0Q29udGVudChodG1sXzZmZWJmOTJkNzJmZDRkZDE4ODNjYjRiOGI4YWU1NGY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhMjFkNjFhOTUwZDQ5MDQ4ZWVmZDc0ZTE1NTI2ZWQwLmJpbmRQb3B1cChwb3B1cF85NWZkYmM2Zjg5ZWM0ZWM2ODQ4NjlmYTE1MTdkY2RlYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjdlMzE4ZDgxYzA0ZjJjYTY0MmM0NzA4MGE5NjRkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTMxMzM2MDAwMDAwMDIsLTQzLjkwMjg1Njk5NTc5NjIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5OWZkMTljZDY3MDQ2NzJhNjdmNDBlMTY1NWZiNzVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNWY3YjQ4MjNkOTQyZTE4MTEwMDYyOTVjYmZlZmZlID0gJCgnPGRpdiBpZD0iaHRtbF85MzVmN2I0ODIzZDk0MmUxODExMDA2Mjk1Y2JmZWZmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9NUEVJQTogKC0xOS45MTMxMzM2MDAwMDAwMDIsIC00My45MDI4NTY5OTU3OTYyMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5OWZkMTljZDY3MDQ2NzJhNjdmNDBlMTY1NWZiNzVlLnNldENvbnRlbnQoaHRtbF85MzVmN2I0ODIzZDk0MmUxODExMDA2Mjk1Y2JmZWZmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YjdlMzE4ZDgxYzA0ZjJjYTY0MmM0NzA4MGE5NjRkMC5iaW5kUG9wdXAocG9wdXBfYjk5ZmQxOWNkNjcwNDY3MmE2N2Y0MGUxNjU1ZmI3NWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ4YjkzMzc3ZmY0NGI5M2JkNGExZjg1M2YyMjJiYjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkxMjk5NSwtNDMuOTQxNzEzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NmEzY2ZjNjRkNjQ0NWM4YTJmNTM2ZWY5MDBjYTY3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMWI4Nzc5ZDY3ZmE0YmFiOTQzYjQ3MDQwZmQ0ZmY2ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTFiODc3OWQ2N2ZhNGJhYjk0M2I0NzA0MGZkNGZmNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFTkFTQ0VOQ0E6ICgtMTkuODkxMjk5NSwgLTQzLjk0MTcxMzIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NmEzY2ZjNjRkNjQ0NWM4YTJmNTM2ZWY5MDBjYTY3Yy5zZXRDb250ZW50KGh0bWxfMTFiODc3OWQ2N2ZhNGJhYjk0M2I0NzA0MGZkNGZmNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDQ4YjkzMzc3ZmY0NGI5M2JkNGExZjg1M2YyMjJiYjIuYmluZFBvcHVwKHBvcHVwXzk2YTNjZmM2NGQ2NDQ1YzhhMmY1MzZlZjkwMGNhNjdjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhYThmNjBiZjA3ZTRhYjE5OTc1NWY4MDE3ZWEzNTE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMDMzMjEsLTQzLjkyMzcyMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDlhMjI2MDZlNjY3NGExZjgwY2JkYzIyNThkZGYxNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTMzYjg5ZGJlOGI5NGEzY2JkOGNhNGU3ODA4MjhmNDMgPSAkKCc8ZGl2IGlkPSJodG1sX2EzM2I4OWRiZThiOTRhM2NiZDhjYTRlNzgwODI4ZjQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQUdSQURBIEZBTUlMSUE6ICgtMTkuOTAwMzMyMSwgLTQzLjkyMzcyMjgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOWEyMjYwNmU2Njc0YTFmODBjYmRjMjI1OGRkZjE0OC5zZXRDb250ZW50KGh0bWxfYTMzYjg5ZGJlOGI5NGEzY2JkOGNhNGU3ODA4MjhmNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFhOGY2MGJmMDdlNGFiMTk5NzU1ZjgwMTdlYTM1MTkuYmluZFBvcHVwKHBvcHVwXzA5YTIyNjA2ZTY2NzRhMWY4MGNiZGMyMjU4ZGRmMTQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmZjI1NmZhYjA5MzRjN2U4OWFiYzJiMDllMjc0OGQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMzc2ODY1LC00My45MjEyNDU4MjU0MzgyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODEzOTQ4MDdjODkyNDgwMDkyNDE0ZjcwYTVhMmQ1ZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmI1MTA0OWEwZTU3NDRlOTg2YzQ5NTBhMzk4YmEzOWQgPSAkKCc8ZGl2IGlkPSJodG1sX2JiNTEwNDlhMGU1NzQ0ZTk4NmM0OTUwYTM5OGJhMzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBFRklHRU5JQTogKC0xOS45MjM3Njg2NSwgLTQzLjkyMTI0NTgyNTQzODIzNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxMzk0ODA3Yzg5MjQ4MDA5MjQxNGY3MGE1YTJkNWU4LnNldENvbnRlbnQoaHRtbF9iYjUxMDQ5YTBlNTc0NGU5ODZjNDk1MGEzOThiYTM5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZmYyNTZmYWIwOTM0YzdlODlhYmMyYjA5ZTI3NDhkMi5iaW5kUG9wdXAocG9wdXBfODEzOTQ4MDdjODkyNDgwMDkyNDE0ZjcwYTVhMmQ1ZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGY4OThiNGI5ZWY1NDhlNGFiNWU5YTk2NDIxNTc2NWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwMzMxMSwtNDMuOTA5NjgxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmZhMmZmYzFjZWY0MGEyYTk3YTY0NTVhZWJkMjJmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTM4ZWYyMmFiZDk0NDI3OWFhOWRkMjQ2YzJmNzljNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDUzOGVmMjJhYmQ5NDQyNzlhYTlkZDI0NmMyZjc5YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIElORVM6ICgtMTkuODkwMzMxMSwgLTQzLjkwOTY4MTIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmZhMmZmYzFjZWY0MGEyYTk3YTY0NTVhZWJkMjJmZi5zZXRDb250ZW50KGh0bWxfNDUzOGVmMjJhYmQ5NDQyNzlhYTlkZDI0NmMyZjc5YzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGY4OThiNGI5ZWY1NDhlNGFiNWU5YTk2NDIxNTc2NWQuYmluZFBvcHVwKHBvcHVwXzQyZmEyZmZjMWNlZjQwYTJhOTdhNjQ1NWFlYmQyMmZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3OWI2OWQyNGU2MzQyODE4MjM2NTFlNzc2MjdmNWEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MTc5NDQsLTQzLjkyOTkxMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzVhYzY3NjRlYWQxNDcwYThiYTFkOTIzOThiMzg3OWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzcwMzJkOTE4YTZjNGU0Njg3NmU1MjZkMGY5YWI3OTAgPSAkKCc8ZGl2IGlkPSJodG1sXzM3MDMyZDkxOGE2YzRlNDY4NzZlNTI2ZDBmOWFiNzkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TSUxWRUlSQTogKC0xOS44OTE3OTQ0LCAtNDMuOTI5OTEzMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1YWM2NzY0ZWFkMTQ3MGE4YmExZDkyMzk4YjM4NzlkLnNldENvbnRlbnQoaHRtbF8zNzAzMmQ5MThhNmM0ZTQ2ODc2ZTUyNmQwZjlhYjc5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NzliNjlkMjRlNjM0MjgxODIzNjUxZTc3NjI3ZjVhMi5iaW5kUG9wdXAocG9wdXBfNzVhYzY3NjRlYWQxNDcwYThiYTFkOTIzOThiMzg3OWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjg1MTdhYmNhYzU4NDZmMmEyNGE2MzliYWRlNzk4YzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODczMzY3MiwtNDMuOTY3NjE1MTI5MDU3MjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkYjMyOWEzYWZkYjRiZmE4OWY4ODNjNDI2ZWFjMzg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3NDQ5MmEzNzIwYTQ0NTk4MjZiM2YwMjg0YzA2ZDIzID0gJCgnPGRpdiBpZD0iaHRtbF81NzQ0OTJhMzcyMGE0NDU5ODI2YjNmMDI4NGMwNmQyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VUZNRzogKC0xOS44NzMzNjcyLCAtNDMuOTY3NjE1MTI5MDU3MjM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2RiMzI5YTNhZmRiNGJmYTg5Zjg4M2M0MjZlYWMzODUuc2V0Q29udGVudChodG1sXzU3NDQ5MmEzNzIwYTQ0NTk4MjZiM2YwMjg0YzA2ZDIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4NTE3YWJjYWM1ODQ2ZjJhMjRhNjM5YmFkZTc5OGM2LmJpbmRQb3B1cChwb3B1cF9jZGIzMjlhM2FmZGI0YmZhODlmODgzYzQyNmVhYzM4NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjBkMDlhYzE3NTI0NzhkOTkzN2U2Y2FhY2Q1Yjk0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wMDcyNzcyNSwtNDQuMDA2OTUwNTM2ODA4MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmMxOGNkNzE0ZmY1NDk3Yjk2NGM2ZGYwZTRiNWJkYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjljZmQyMmNmMzM0NDJhMGIxYjAwMjBhNDM0MGI1ZGQgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5Y2ZkMjJjZjMzNDQyYTBiMWIwMDIwYTQzNDBiNWRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJSRUlSTzogKC0yMC4wMDcyNzcyNSwgLTQ0LjAwNjk1MDUzNjgwODE1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmMxOGNkNzE0ZmY1NDk3Yjk2NGM2ZGYwZTRiNWJkYTAuc2V0Q29udGVudChodG1sX2Y5Y2ZkMjJjZjMzNDQyYTBiMWIwMDIwYTQzNDBiNWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyMGQwOWFjMTc1MjQ3OGQ5OTM3ZTZjYWFjZDViOTQ0LmJpbmRQb3B1cChwb3B1cF9mYzE4Y2Q3MTRmZjU0OTdiOTY0YzZkZjBlNGI1YmRhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNjY0NDQxMmYwNTE0MDFkYjI1NTc0YzlhOTE3MDVlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTg2MTA5LC00My45OTIyMjUxMjM2NzAwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYmUxYmQ2YmE0NDI0MmZhYjg1Y2Q3Yzg5Y2E2MDNkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTFhY2U4MGQyODg0ZGUzOTdmNzc3MTFhMDQyYjA3YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWExYWNlODBkMjg4NGRlMzk3Zjc3NzExYTA0MmIwN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFVEFOSUE6ICgtMTkuOTU4NjEwOSwgLTQzLjk5MjIyNTEyMzY3MDAzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWJlMWJkNmJhNDQyNDJmYWI4NWNkN2M4OWNhNjAzZDkuc2V0Q29udGVudChodG1sXzVhMWFjZTgwZDI4ODRkZTM5N2Y3NzcxMWEwNDJiMDdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2NjQ0NDEyZjA1MTQwMWRiMjU1NzRjOWE5MTcwNWVjLmJpbmRQb3B1cChwb3B1cF8xYmUxYmQ2YmE0NDI0MmZhYjg1Y2Q3Yzg5Y2E2MDNkOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYjlhM2FlNjc1NGE0ZWJiOWQ1Yjg1NjFjMmY0NzZjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTk1Mjg2OTk5OTk5OTgsLTQzLjkzNzM5NzI5MzAzMDczNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDYyZjE4YjllYmI0YjZiYWRjYjUyZDkxOGM0OWNiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWI1MGRlOGM1MmU0OGU1YmJhNWM5M2ZkMzYwZmViNiA9ICQoJzxkaXYgaWQ9Imh0bWxfOWFiNTBkZThjNTJlNDhlNWJiYTVjOTNmZDM2MGZlYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPTkNPUkRJQTogKC0xOS44OTk1Mjg2OTk5OTk5OTgsIC00My45MzczOTcyOTMwMzA3MzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDYyZjE4YjllYmI0YjZiYWRjYjUyZDkxOGM0OWNiZS5zZXRDb250ZW50KGh0bWxfOWFiNTBkZThjNTJlNDhlNWJiYTVjOTNmZDM2MGZlYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2I5YTNhZTY3NTRhNGViYjlkNWI4NTYxYzJmNDc2YzYuYmluZFBvcHVwKHBvcHVwXzQ0NjJmMThiOWViYjRiNmJhZGNiNTJkOTE4YzQ5Y2JlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwNWZmNGZmNDFlMTRkMTRiMzRiZmMxMzc5ZTQ2MDIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NzkzMDcsLTQzLjkxMzA5MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWI2NzdlMzdhMjM1NDBhMmE1ZDE0MTUwOTc2ZWQ1YTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzFjYjk3MDhiYjE2NDkxODg1ZGYzYWNkZTEyNTZhYjkgPSAkKCc8ZGl2IGlkPSJodG1sXzcxY2I5NzA4YmIxNjQ5MTg4NWRmM2FjZGUxMjU2YWI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JTlNUSVRVVE8gQUdST05PTUlDTzogKC0xOS44OTc5MzA3LCAtNDMuOTEzMDkxMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliNjc3ZTM3YTIzNTQwYTJhNWQxNDE1MDk3NmVkNWE1LnNldENvbnRlbnQoaHRtbF83MWNiOTcwOGJiMTY0OTE4ODVkZjNhY2RlMTI1NmFiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDVmZjRmZjQxZTE0ZDE0YjM0YmZjMTM3OWU0NjAyMy5iaW5kUG9wdXAocG9wdXBfOWI2NzdlMzdhMjM1NDBhMmE1ZDE0MTUwOTc2ZWQ1YTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzZmZjk3MzhjYWM1NDNjNzlkYjEyZmIwZDBmM2FjZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEzMTMzNjAwMDAwMDAyLC00My45MDI4NTY5OTU3OTYyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjhlMjg1ZjlhZTY0MzU4YmQzY2Y3ZDJiZTZlOWVlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OGUxYzMzOTA5MGY0NGQ4OTI3NTI3ZDMxYTAyODg0ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNThlMWMzMzkwOTBmNDRkODkyNzUyN2QzMWEwMjg4NGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBPTVBFSUE6ICgtMTkuOTEzMTMzNjAwMDAwMDAyLCAtNDMuOTAyODU2OTk1Nzk2MjEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjhlMjg1ZjlhZTY0MzU4YmQzY2Y3ZDJiZTZlOWVlMi5zZXRDb250ZW50KGh0bWxfNThlMWMzMzkwOTBmNDRkODkyNzUyN2QzMWEwMjg4NGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzZmZjk3MzhjYWM1NDNjNzlkYjEyZmIwZDBmM2FjZjguYmluZFBvcHVwKHBvcHVwXzBiOGUyODVmOWFlNjQzNThiZDNjZjdkMmJlNmU5ZWUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlYWJhZThhZTViNzQ2YzA4Mzg3NDQ2MWQ0OWJmM2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzNDMzODYsLTQ0LjAxMjg1NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDVkY2RiOTNlYWVhNDRiYWE4NGIxMjVkZjhiOTNiMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDAwZTQzM2U0ZDljNDk4Mjk4ZTg5ZTJmNGJlMjAwYWYgPSAkKCc8ZGl2IGlkPSJodG1sX2QwMGU0MzNlNGQ5YzQ5ODI5OGU4OWUyZjRiZTIwMGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBNQVJJQTogKC0xOS45MzQzMzg2LCAtNDQuMDEyODU3Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1ZGNkYjkzZWFlYTQ0YmFhODRiMTI1ZGY4YjkzYjI4LnNldENvbnRlbnQoaHRtbF9kMDBlNDMzZTRkOWM0OTgyOThlODllMmY0YmUyMDBhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZWFiYWU4YWU1Yjc0NmMwODM4NzQ0NjFkNDliZjNjNi5iaW5kUG9wdXAocG9wdXBfNDVkY2RiOTNlYWVhNDRiYWE4NGIxMjVkZjhiOTNiMjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkxMDk1YTNmZmUyNDcxMGI2MjU1NGY3NjNkYjMxZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODc2MzA4OTUsLTQzLjk1NjU3NTIxOTM2NDEyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NmE5MTE1Y2E1YzE0YTkzYWVmOGY5MjEwNjM0ODExMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOGI2ODVjYzIyNjQ0NDQ3OTYyOTc4MDNmNDg0ZmIxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzhiNjg1Y2MyMjY0NDQ0Nzk2Mjk3ODAzZjQ4NGZiMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gRlJBTkNJU0NPOiAoLTE5Ljg3NjMwODk1LCAtNDMuOTU2NTc1MjE5MzY0MTI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZhOTExNWNhNWMxNGE5M2FlZjhmOTIxMDYzNDgxMTEuc2V0Q29udGVudChodG1sX2M4YjY4NWNjMjI2NDQ0NDc5NjI5NzgwM2Y0ODRmYjEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5MTA5NWEzZmZlMjQ3MTBiNjI1NTRmNzYzZGIzMWRmLmJpbmRQb3B1cChwb3B1cF84NmE5MTE1Y2E1YzE0YTkzYWVmOGY5MjEwNjM0ODExMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWE5NGU5ZWI5MTE0NTdjOWU5OGYwNGZjZTAwZjlkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MDg0NzY0LC00My45NzY3NjcyNjc3NjY5NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWRlNTFiN2UwZWI2NDYwYWIwOTZiYjkzYmFjMWRlZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBjZTMwNmYwODE1NDYyZjllMGVmMWFmZDM5ODI1YjAgPSAkKCc8ZGl2IGlkPSJodG1sX2IwY2UzMDZmMDgxNTQ2MmY5ZTBlZjFhZmQzOTgyNWIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRU5EQSBOT1ZBOiAoLTE5LjgwODQ3NjQsIC00My45NzY3NjcyNjc3NjY5NDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGU1MWI3ZTBlYjY0NjBhYjA5NmJiOTNiYWMxZGVlNS5zZXRDb250ZW50KGh0bWxfYjBjZTMwNmYwODE1NDYyZjllMGVmMWFmZDM5ODI1YjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFhOTRlOWViOTExNDU3YzllOThmMDRmY2UwMGY5ZDkuYmluZFBvcHVwKHBvcHVwX2VkZTUxYjdlMGViNjQ2MGFiMDk2YmI5M2JhYzFkZWU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlNTQzOGFkYTQwZjRmNjM5OWNlZjc3NGY0MTljMDA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMjQ1OTI1LC00My45NDg3NzgwNTkwMjQwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YjlmYTVhNmIxNDk0YjAwOWU4NWM1NzM3MmQwZjEzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTQ0NzIxNWFmZDc0NTg4YjFhMjM2N2E1YTVlOGYyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjE0NDcyMTVhZmQ3NDU4OGIxYTIzNjdhNWE1ZThmMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgQ0xPUklTOiAoLTE5LjgyMjQ1OTI1LCAtNDMuOTQ4Nzc4MDU5MDI0MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjlmYTVhNmIxNDk0YjAwOWU4NWM1NzM3MmQwZjEzZC5zZXRDb250ZW50KGh0bWxfZjE0NDcyMTVhZmQ3NDU4OGIxYTIzNjdhNWE1ZThmMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGU1NDM4YWRhNDBmNGY2Mzk5Y2VmNzc0ZjQxOWMwMDkuYmluZFBvcHVwKHBvcHVwXzRiOWZhNWE2YjE0OTRiMDA5ZTg1YzU3MzcyZDBmMTNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwZWMxMWI4MGEyZTRlNmRiMjgyMDBiYjk0OTcxZGU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1MTkwNDgsLTQzLjk0NzczODc2ODk4MDUzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDQwMjY3NmRlY2M0YmIzOGIwMzliMjc2ZDYyMzllNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2UwZDA2NGU4NTU0YTE2YmM4OGQ2YjNiM2ZmMGY3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDNlMGQwNjRlODU1NGExNmJjODhkNmIzYjNmZjBmNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFFUk9QT1JUTzogKC0xOS44NTE5MDQ4LCAtNDMuOTQ3NzM4NzY4OTgwNTM1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQ0MDI2NzZkZWNjNGJiMzhiMDM5YjI3NmQ2MjM5ZTQuc2V0Q29udGVudChodG1sXzQzZTBkMDY0ZTg1NTRhMTZiYzg4ZDZiM2IzZmYwZjcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwZWMxMWI4MGEyZTRlNmRiMjgyMDBiYjk0OTcxZGU3LmJpbmRQb3B1cChwb3B1cF85ZDQwMjY3NmRlY2M0YmIzOGIwMzliMjc2ZDYyMzllNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMmY5ZWQ2YTg4NjE0YmZlOWZiOGFmODg2NWQxYzg3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzMxNzQsLTQzLjk2OTA3NzE0NzMyNTM4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjEzNzE2YjY0MDY0NjFiOWFlNjkyOGZjMTUyZDdlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzE5NDU5NGNlMzQ0OWM2OTQ5NGQ2MDk4NjE4NzBjMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjcxOTQ1OTRjZTM0NDljNjk0OTRkNjA5ODYxODcwYzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gQkFSUk9DQTogKC0xOS45MzMxNzQsIC00My45NjkwNzcxNDczMjUzODYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjEzNzE2YjY0MDY0NjFiOWFlNjkyOGZjMTUyZDdlYi5zZXRDb250ZW50KGh0bWxfYjcxOTQ1OTRjZTM0NDljNjk0OTRkNjA5ODYxODcwYzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzJmOWVkNmE4ODYxNGJmZTlmYjhhZjg4NjVkMWM4NzUuYmluZFBvcHVwKHBvcHVwXzA2MTM3MTZiNjQwNjQ2MWI5YWU2OTI4ZmMxNTJkN2ViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwNDhjMDQ3YjI3NDQ1NzI4YjRhMzMyMjY2YmUxOGNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NzY4NzQ1LC00My45NzUzMzMwNDYzMzMwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2I2NmExNDVhNzg0NjUyOWQxMTJhNGQ5NzY5NzZkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZmQ4NjU2NjcyMTk0OWM5OTBkN2E3ODEwYjBlNDU3NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmZkODY1NjY3MjE5NDljOTkwZDdhNzgxMGIwZTQ1NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gRE9TIENBSUNBUkFTOiAoLTE5Ljg5NzY4NzQ1LCAtNDMuOTc1MzMzMDQ2MzMzMDYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2I2NmExNDVhNzg0NjUyOWQxMTJhNGQ5NzY5NzZkNS5zZXRDb250ZW50KGh0bWxfYmZkODY1NjY3MjE5NDljOTkwZDdhNzgxMGIwZTQ1NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODA0OGMwNDdiMjc0NDU3MjhiNGEzMzIyNjZiZTE4Y2UuYmluZFBvcHVwKHBvcHVwXzU3YjY2YTE0NWE3ODQ2NTI5ZDExMmE0ZDk3Njk3NmQ1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhNzUzNjhlZmRlZjQwNTE5ZTFhMGE4MTdiNzUzNzczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMzM4MTYsLTQzLjk1MjAxMDgyMjczMjQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzN2NiNjU1MzRlYzQ0N2Q4NzBiMzFkZWFjMTM4ZjU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NjU1YmM2Y2MzNDQ5OGE4MTE0Y2JjMzBiNDZlZDcxID0gJCgnPGRpdiBpZD0iaHRtbF8yNjY1NWJjNmNjMzQ0OThhODExNGNiYzMwYjQ2ZWQ3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFSUk8gUFJFVE86ICgtMTkuOTIzMzgxNiwgLTQzLjk1MjAxMDgyMjczMjQyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM3Y2I2NTUzNGVjNDQ3ZDg3MGIzMWRlYWMxMzhmNTcuc2V0Q29udGVudChodG1sXzI2NjU1YmM2Y2MzNDQ5OGE4MTE0Y2JjMzBiNDZlZDcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhNzUzNjhlZmRlZjQwNTE5ZTFhMGE4MTdiNzUzNzczLmJpbmRQb3B1cChwb3B1cF82MzdjYjY1NTM0ZWM0NDdkODcwYjMxZGVhYzEzOGY1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmJhMTE1OTJjZGQ0NjI2YWNkZWJiY2YwYmM1MTMzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzM3NDMzNSwtNDMuOTYzOTk2NDQyNzQ0NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTFkYzZlM2FjYTQzNGRlNzk3M2U2MDg5MGQzZDU2NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGRjMTc1MTRhZjUyNDE3ZWI2YzdiNTY1NmRhNjhjMmYgPSAkKCc8ZGl2IGlkPSJodG1sX2RkYzE3NTE0YWY1MjQxN2ViNmM3YjU2NTZkYTY4YzJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJST0NBOiAoLTE5LjkzMzc0MzM1LCAtNDMuOTYzOTk2NDQyNzQ0NTYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMWRjNmUzYWNhNDM0ZGU3OTczZTYwODkwZDNkNTY2OC5zZXRDb250ZW50KGh0bWxfZGRjMTc1MTRhZjUyNDE3ZWI2YzdiNTY1NmRhNjhjMmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZiYTExNTkyY2RkNDYyNmFjZGViYmNmMGJjNTEzMzIuYmluZFBvcHVwKHBvcHVwX2ExZGM2ZTNhY2E0MzRkZTc5NzNlNjA4OTBkM2Q1NjY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4ZjVkMjcxYWVjZjQ5ZTNiNWRkODQ4MzFhZjg0ZTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk3NjAwODg1LC00My45Njg5Nzk0Mzc2NTE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OWY0NWI2ZmEzNDE0Y2YyOTMyOWUzM2ZlMGI1OWMxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTM3OTVlNGNkMzg0MzQ4OTdmNWI3YTFhODE5ZGU2ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGUzNzk1ZTRjZDM4NDM0ODk3ZjViN2ExYTgxOWRlNmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVUklUSVM6ICgtMTkuOTc2MDA4ODUsIC00My45Njg5Nzk0Mzc2NTE4Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5ZjQ1YjZmYTM0MTRjZjI5MzI5ZTMzZmUwYjU5YzFmLnNldENvbnRlbnQoaHRtbF9kZTM3OTVlNGNkMzg0MzQ4OTdmNWI3YTFhODE5ZGU2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OGY1ZDI3MWFlY2Y0OWUzYjVkZDg0ODMxYWY4NGU1Yy5iaW5kUG9wdXAocG9wdXBfODlmNDViNmZhMzQxNGNmMjkzMjllMzNmZTBiNTljMWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjFlZDFlYTYyNmU0NDdjYzhiYmRhNjljYzE4N2I1YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODc5MzAxNywtNDMuOTk5NTk4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lY2FiMWI4OTBmZGI0ODZhYWIyMWUwY2NiNTdlNjczYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODQzNjc1NzcwNDA0ZTcxYTgxZDhmNTY2YzRkZjljMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzg0MzY3NTc3MDQwNGU3MWE4MWQ4ZjU2NmM0ZGY5YzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBU1RFTE86ICgtMTkuODc5MzAxNywgLTQzLjk5OTU5ODgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lY2FiMWI4OTBmZGI0ODZhYWIyMWUwY2NiNTdlNjczYy5zZXRDb250ZW50KGh0bWxfNzg0MzY3NTc3MDQwNGU3MWE4MWQ4ZjU2NmM0ZGY5YzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjFlZDFlYTYyNmU0NDdjYzhiYmRhNjljYzE4N2I1YjIuYmluZFBvcHVwKHBvcHVwX2VjYWIxYjg5MGZkYjQ4NmFhYjIxZTBjY2I1N2U2NzNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MmM3ZTEzMGNjYjQ5MTJiMmMxNzMwMDdiZTk1NGI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxOTMzMDgsLTQzLjk0MDM0ODgzNzM5ODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5Y2U5MzFmMjI4YzQ1MjBiODM4ZTU0NjNkNGUxNDMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q3YWU1MWEzNDk5NjRmODU4ZjJiM2I1YTc0ZDgzYTllID0gJCgnPGRpdiBpZD0iaHRtbF9kN2FlNTFhMzQ5OTY0Zjg1OGYyYjNiNWE3NGQ4M2E5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0VOVFJPOiAoLTE5LjkxOTMzMDgsIC00My45NDAzNDg4MzczOTg4Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5Y2U5MzFmMjI4YzQ1MjBiODM4ZTU0NjNkNGUxNDMzLnNldENvbnRlbnQoaHRtbF9kN2FlNTFhMzQ5OTY0Zjg1OGYyYjNiNWE3NGQ4M2E5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNDJjN2UxMzBjY2I0OTEyYjJjMTczMDA3YmU5NTRiOS5iaW5kUG9wdXAocG9wdXBfMzljZTkzMWYyMjhjNDUyMGI4MzhlNTQ2M2Q0ZTE0MzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M1MmY5ZDM3MjVlNDE4NzgyN2FmYTBmMGNkYTYwNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg5MjM5LC00My45MjQ4NTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkNTk1ZDFjZmZlYjQzOGE4NzIzZDI3NzcwYWMzYmM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2ZGQ4MzE3ZDU5ODRkNTFiM2MyMjliZjhkYWQ0YTBkID0gJCgnPGRpdiBpZD0iaHRtbF85NmRkODMxN2Q1OTg0ZDUxYjNjMjI5YmY4ZGFkNGEwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0lEQURFIE5PVkE6ICgtMTkuODg5MjM5LCAtNDMuOTI0ODU3NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkNTk1ZDFjZmZlYjQzOGE4NzIzZDI3NzcwYWMzYmM0LnNldENvbnRlbnQoaHRtbF85NmRkODMxN2Q1OTg0ZDUxYjNjMjI5YmY4ZGFkNGEwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YzUyZjlkMzcyNWU0MTg3ODI3YWZhMGYwY2RhNjA3MC5iaW5kUG9wdXAocG9wdXBfY2Q1OTVkMWNmZmViNDM4YTg3MjNkMjc3NzBhYzNiYzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzE5ODk4N2M4NzdjNDJlNWFhZmU3M2YwZjFlYTE1YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA5NDM5LC00My45MzcxMzc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FiMWM1YzhhYzg3MTQzMzViOGU5OWE5NmE4ODhhYWQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzZDFkNDJiYjBhMzQ3ODI4NzhiYjEwODQ4YjkwOTUxID0gJCgnPGRpdiBpZD0iaHRtbF9hM2QxZDQyYmIwYTM0NzgyODc4YmIxMDg0OGI5MDk1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09MRUdJTyBCQVRJU1RBOiAoLTE5LjkwOTQzOSwgLTQzLjkzNzEzNzcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYjFjNWM4YWM4NzE0MzM1YjhlOTlhOTZhODg4YWFkMy5zZXRDb250ZW50KGh0bWxfYTNkMWQ0MmJiMGEzNDc4Mjg3OGJiMTA4NDhiOTA5NTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE5ODk4N2M4NzdjNDJlNWFhZmU3M2YwZjFlYTE1YTcuYmluZFBvcHVwKHBvcHVwX2FiMWM1YzhhYzg3MTQzMzViOGU5OWE5NmE4ODhhYWQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMzU4OTdiY2FjYTRiN2RhNWU4MmNlMTcyMWRhOTI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyNDEyMTYsLTQzLjk4OTUwMjAzMjQ5Nzg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzI0NzM4NTUzMjE0YjNiOTg4MTk4NGU0NGQ5OTdkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZDIwM2M5NTcwZDc0YzQ5YWRiMzllMGQ3MTRlMWVjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGQyMDNjOTU3MGQ3NGM0OWFkYjM5ZTBkNzE0ZTFlY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPUkFDQU8gRVVDQVJJU1RJQ086ICgtMTkuOTI0MTIxNiwgLTQzLjk4OTUwMjAzMjQ5Nzg5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3MjQ3Mzg1NTMyMTRiM2I5ODgxOTg0ZTQ0ZDk5N2RhLnNldENvbnRlbnQoaHRtbF80ZDIwM2M5NTcwZDc0YzQ5YWRiMzllMGQ3MTRlMWVjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYjM1ODk3YmNhY2E0YjdkYTVlODJjZTE3MjFkYTkyOC5iaW5kUG9wdXAocG9wdXBfODcyNDczODU1MzIxNGIzYjk4ODE5ODRlNDRkOTk3ZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzRkOGJkYzNlM2U5NGE3NjkxZWM5ZGY1NzMxYTE3ZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU4NTcxODQ5OTk5OTk3LC00My45NDA0NTkzMjc2ODQzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzJiYTIxOTAxZTdlNGJlZTkyYWIwMzc4YmFmZGFhY2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQwZDZhZDgzNjI3NDE3NGI2MWIzMmRkMDIxMmM2ODQgPSAkKCc8ZGl2IGlkPSJodG1sXzRkMGQ2YWQ4MzYyNzQxNzRiNjFiMzJkZDAyMTJjNjg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET05BIENMQVJBOiAoLTE5Ljg1ODU3MTg0OTk5OTk5NywgLTQzLjk0MDQ1OTMyNzY4NDM5NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyYmEyMTkwMWU3ZTRiZWU5MmFiMDM3OGJhZmRhYWNjLnNldENvbnRlbnQoaHRtbF80ZDBkNmFkODM2Mjc0MTc0YjYxYjMyZGQwMjEyYzY4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NGQ4YmRjM2UzZTk0YTc2OTFlYzlkZjU3MzFhMTdlMC5iaW5kUG9wdXAocG9wdXBfYzJiYTIxOTAxZTdlNGJlZTkyYWIwMzc4YmFmZGFhY2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODYyM2UwYTg3ZTE2NDFlZDkxMjY3NmEzOGM5YjM1NjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTYzMTI1NywtNDMuOTYxMTA5NTQ1MzA0MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzk4NDNjOTNkMmQyNGZhZThkNWRhODNlZmNiZmRhY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzQ3NGJmNTA0ZWU4NDkzYTg3MGQwOGU2NTQwNWM5ZjUgPSAkKCc8ZGl2IGlkPSJodG1sX2M0NzRiZjUwNGVlODQ5M2E4NzBkMDhlNjU0MDVjOWY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FU1RPUklMOiAoLTE5Ljk2MzEyNTcsIC00My45NjExMDk1NDUzMDQyOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5ODQzYzkzZDJkMjRmYWU4ZDVkYTgzZWZjYmZkYWNmLnNldENvbnRlbnQoaHRtbF9jNDc0YmY1MDRlZTg0OTNhODcwZDA4ZTY1NDA1YzlmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NjIzZTBhODdlMTY0MWVkOTEyNjc2YTM4YzliMzU2Ny5iaW5kUG9wdXAocG9wdXBfYzk4NDNjOTNkMmQyNGZhZThkNWRhODNlZmNiZmRhY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU5ZDBhOTVhMDgwNGIxYTgyYTNmMWIzNGQ0NTUxYWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEyNzQ2NCwtNDMuOTMwMjAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjI2NjI5YWJjMDA0N2Y2YTU3YTQzZGQxZTYyZjViMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDhlN2YwOTdiOTQ0YTAwYjJmM2NmNmMyMzAyZjliMyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2Q4ZTdmMDk3Yjk0NGEwMGIyZjNjZjZjMjMwMmY5YjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZMT1JFU1RBOiAoLTE5LjkxMjc0NjQsIC00My45MzAyMDA2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTIyNjYyOWFiYzAwNDdmNmE1N2E0M2RkMWU2MmY1YjMuc2V0Q29udGVudChodG1sX2NkOGU3ZjA5N2I5NDRhMDBiMmYzY2Y2YzIzMDJmOWIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1OWQwYTk1YTA4MDRiMWE4MmEzZjFiMzRkNDU1MWFiLmJpbmRQb3B1cChwb3B1cF81MjI2NjI5YWJjMDA0N2Y2YTU3YTQzZGQxZTYyZjViMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDE2NTNkZmFhZGI0NTk3YTU1MGM5MWI5OWVkYzEwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Mzg4Nzk2NDk5OTk5OTcsLTQzLjk2NTY3MzkyODA4Mjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiMzVmZTg0YzU3NjRlMzI5ZTc2YjgxNzk4MDk3Mjg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxZGY0ZmUwNjk5OTRjZjI5OGZiZGU5NDUzM2RkZDU4ID0gJCgnPGRpdiBpZD0iaHRtbF81MWRmNGZlMDY5OTk0Y2YyOThmYmRlOTQ1MzNkZGQ1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1JBSkFVOiAoLTE5LjkzODg3OTY0OTk5OTk5NywgLTQzLjk2NTY3MzkyODA4Mjc0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGIzNWZlODRjNTc2NGUzMjllNzZiODE3OTgwOTcyODguc2V0Q29udGVudChodG1sXzUxZGY0ZmUwNjk5OTRjZjI5OGZiZGU5NDUzM2RkZDU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0MTY1M2RmYWFkYjQ1OTdhNTUwYzkxYjk5ZWRjMTA3LmJpbmRQb3B1cChwb3B1cF8wYjM1ZmU4NGM1NzY0ZTMyOWU3NmI4MTc5ODA5NzI4OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzM0ZmY1Zjc0OTQ0Yzc0ODlhMjk2NzVhZjdjZGQyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY0MTMwNDk5OTk5OTcsLTQzLjk1OTg3ODcyODYzMDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlNDhhMzQ1ZjZlMjQ5MTQ4YjViNzE4NTdmNWFjMDlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjNTU1N2ViYmEzMDQxMDU5OWFhMmVmNWFmMzFmNjhlID0gJCgnPGRpdiBpZD0iaHRtbF8zYzU1NTdlYmJhMzA0MTA1OTlhYTJlZjVhZjMxZjY4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVRBUE9BOiAoLTE5LjgzNjQxMzA0OTk5OTk5NywgLTQzLjk1OTg3ODcyODYzMDgxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2U0OGEzNDVmNmUyNDkxNDhiNWI3MTg1N2Y1YWMwOWQuc2V0Q29udGVudChodG1sXzNjNTU1N2ViYmEzMDQxMDU5OWFhMmVmNWFmMzFmNjhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzMzRmZjVmNzQ5NDRjNzQ4OWEyOTY3NWFmN2NkZDIyLmJpbmRQb3B1cChwb3B1cF83ZTQ4YTM0NWY2ZTI0OTE0OGI1YjcxODU3ZjVhYzA5ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MWE4MzZkZjA2ZWY0ZjA2YmYzM2Y0NzdhOWQ2MTNhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTY1NzgyNSwtNDMuOTQ5OTQzMzQ5MjYzNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYyZjUxOTA0YjUzNDQ2ZjlhYTk1YzEwYzE3YmM1NjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWI1YWVmOWMwYTE3NDllMDlmYTgyYThlNDNiNTgyMDIgPSAkKCc8ZGl2IGlkPSJodG1sXzViNWFlZjljMGExNzQ5ZTA5ZmE4MmE4ZTQzYjU4MjAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJBR1VBOiAoLTE5Ljg1NjU3ODI1LCAtNDMuOTQ5OTQzMzQ5MjYzNzIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjJmNTE5MDRiNTM0NDZmOWFhOTVjMTBjMTdiYzU2MC5zZXRDb250ZW50KGh0bWxfNWI1YWVmOWMwYTE3NDllMDlmYTgyYThlNDNiNTgyMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDFhODM2ZGYwNmVmNGYwNmJmMzNmNDc3YTlkNjEzYTIuYmluZFBvcHVwKHBvcHVwXzY2MmY1MTkwNGI1MzQ0NmY5YWE5NWMxMGMxN2JjNTYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3NzI1MjFiM2FhNTQzNDI4OWFhNmY3NGU0YTE5ZjkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg0MzkwMzQwMDAwMDAwMiwtNDMuOTYzMjUxMzA1NDA3MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQyYjI2N2JmNTJjNDVkNWJiN2NhMjgxNWNlZTFlNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmUzMzk5MmI0MWFmNGNiYTkyMjhlMTkyMTNkY2FmMmEgPSAkKCc8ZGl2IGlkPSJodG1sX2JlMzM5OTJiNDFhZjRjYmE5MjI4ZTE5MjEzZGNhZjJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJESU0gQVRMQU5USUNPOiAoLTE5Ljg0MzkwMzQwMDAwMDAwMiwgLTQzLjk2MzI1MTMwNTQwNzIxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQyYjI2N2JmNTJjNDVkNWJiN2NhMjgxNWNlZTFlNjMuc2V0Q29udGVudChodG1sX2JlMzM5OTJiNDFhZjRjYmE5MjI4ZTE5MjEzZGNhZjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3NzI1MjFiM2FhNTQzNDI4OWFhNmY3NGU0YTE5ZjkyLmJpbmRQb3B1cChwb3B1cF8yNDJiMjY3YmY1MmM0NWQ1YmI3Y2EyODE1Y2VlMWU2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzllNmVmY2NiMmE0NWQxODk2ZTg3YjU3NTg1Mjg5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjE4MzU4LC00My45NTQ3NTY5MTUwNTA1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzRmMjhiNjgxNjA0NzE5ODczZWIxMDg4YThiZDJjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmVlOTcyZGJhOWQ0OWEzODdjMTFjZGE0YjJjMmEwZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmJlZTk3MmRiYTlkNDlhMzg3YzExY2RhNGIyYzJhMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxJQkVSREFERTogKC0xOS44NjE4MzU4LCAtNDMuOTU0NzU2OTE1MDUwNTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzRmMjhiNjgxNjA0NzE5ODczZWIxMDg4YThiZDJjNy5zZXRDb250ZW50KGh0bWxfNmJlZTk3MmRiYTlkNDlhMzg3YzExY2RhNGIyYzJhMGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODc5ZTZlZmNjYjJhNDVkMTg5NmU4N2I1NzU4NTI4OTIuYmluZFBvcHVwKHBvcHVwXzNjNGYyOGI2ODE2MDQ3MTk4NzNlYjEwODhhOGJkMmM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkZDlhYjRjZmE1OTQyMDNiYzk3ZmM3MzUxZjRjZDhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyOTgzMDc5OTk5OTk5OCwtNDMuOTEzNjg5OTQ1NzM0MTM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyYmFiMDhmMTMyYjQ3ZmViY2I1M2VhODhjMGQ3OWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4OTBjN2EwYzY0MTRlNjY5NzE1MTY5NDExZjgxOGRmID0gJCgnPGRpdiBpZD0iaHRtbF8wODkwYzdhMGM2NDE0ZTY2OTcxNTE2OTQxMWY4MThkZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9WTyBTQU8gTFVDQVM6ICgtMTkuOTI5ODMwNzk5OTk5OTk4LCAtNDMuOTEzNjg5OTQ1NzM0MTM0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDJiYWIwOGYxMzJiNDdmZWJjYjUzZWE4OGMwZDc5YzMuc2V0Q29udGVudChodG1sXzA4OTBjN2EwYzY0MTRlNjY5NzE1MTY5NDExZjgxOGRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZkZDlhYjRjZmE1OTQyMDNiYzk3ZmM3MzUxZjRjZDhhLmJpbmRQb3B1cChwb3B1cF8wMmJhYjA4ZjEzMmI0N2ZlYmNiNTNlYTg4YzBkNzljMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYTkyYjFkM2Q4MzA0ZmM0ODFlOTZkMmNlMzBhZGZhMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzIyNTM2LC00My45ODI5ODc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4Y2U3ZGE2Mjk0MzRhYmJhMGQ5NDRkNTNkODY0NTdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmMzNlNmQ1MzY5ZDRiMmRhZjBmNWVmZGRkODAwYTc0ID0gJCgnPGRpdiBpZD0iaHRtbF81ZjMzZTZkNTM2OWQ0YjJkYWYwZjVlZmRkZDgwMGE3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1VSTyBQUkVUTzogKC0xOS44NzIyNTM2LCAtNDMuOTgyOTg3Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4Y2U3ZGE2Mjk0MzRhYmJhMGQ5NDRkNTNkODY0NTdiLnNldENvbnRlbnQoaHRtbF81ZjMzZTZkNTM2OWQ0YjJkYWYwZjVlZmRkZDgwMGE3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYTkyYjFkM2Q4MzA0ZmM0ODFlOTZkMmNlMzBhZGZhMS5iaW5kUG9wdXAocG9wdXBfNDhjZTdkYTYyOTQzNGFiYmEwZDk0NGQ1M2Q4NjQ1N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2MxMzk5MGNiOTk4NGZhM2I0YTRlNzViNDRlNjFjOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYzODAzNiwtNDMuOTc0OTI4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjkzZjExNGQ1MmE0YjFiOWI4OTAzMzlmNmE0MTUxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MWM3ZjMyMmViOTI0NjEzYTI4ZjJjOGJjNzZkYzFmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTFjN2YzMjJlYjkyNDYxM2EyOGYyYzhiYzc2ZGMxZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBTVBVTEhBOiAoLTE5Ljg2MzgwMzYsIC00My45NzQ5Mjg3KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI5M2YxMTRkNTJhNGIxYjliODkwMzM5ZjZhNDE1MTAuc2V0Q29udGVudChodG1sXzUxYzdmMzIyZWI5MjQ2MTNhMjhmMmM4YmM3NmRjMWY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjMTM5OTBjYjk5ODRmYTNiNGE0ZTc1YjQ0ZTYxYzhlLmJpbmRQb3B1cChwb3B1cF9kYjkzZjExNGQ1MmE0YjFiOWI4OTAzMzlmNmE0MTUxMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNWZmNTdlYjY1ZmY0YzVlYmUwNzViYjRjMTEzMzU4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjQxMTM5MDAwMDAwMDIsLTQzLjk2MjM0NjI2NTcyNjY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzM4ZmJkODVkOTc0NTZkYjVlNWMxYTI1ODg0ZDI0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODNhMTgzYWM0NzU0ODMyYTZjN2FiZTA1NjlmNDM3YiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzgzYTE4M2FjNDc1NDgzMmE2YzdhYmUwNTY5ZjQzN2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBSQURPOiAoLTE5LjkyNDExMzkwMDAwMDAwMiwgLTQzLjk2MjM0NjI2NTcyNjY2Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3MzhmYmQ4NWQ5NzQ1NmRiNWU1YzFhMjU4ODRkMjRlLnNldENvbnRlbnQoaHRtbF9jODNhMTgzYWM0NzU0ODMyYTZjN2FiZTA1NjlmNDM3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNWZmNTdlYjY1ZmY0YzVlYmUwNzViYjRjMTEzMzU4Mi5iaW5kUG9wdXAocG9wdXBfYzczOGZiZDg1ZDk3NDU2ZGI1ZTVjMWEyNTg4NGQyNGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBjOTU5NGY2MmExNDFlNWE0ZDVlNDRkY2ZmMDZiMmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM5MDg0NzQ5OTk5OTk4LC00My45Nzc4ODQwNDEwMDQ4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NWM1ZGU5ZGM3ZDU0Y2I1OThjMjJiOThhOGI2YjNiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YTk4YjhkMjllZWY0N2M5OWI5NmU3NjY4ZTY0ZWExNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGE5OGI4ZDI5ZWVmNDdjOTliOTZlNzY2OGU2NGVhMTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIEFNRUxJQTogKC0xOS44MzkwODQ3NDk5OTk5OTgsIC00My45Nzc4ODQwNDEwMDQ4MSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1YzVkZTlkYzdkNTRjYjU5OGMyMmI5OGE4YjZiM2JiLnNldENvbnRlbnQoaHRtbF80YTk4YjhkMjllZWY0N2M5OWI5NmU3NjY4ZTY0ZWExNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMGM5NTk0ZjYyYTE0MWU1YTRkNWU0NGRjZmYwNmIyZi5iaW5kUG9wdXAocG9wdXBfOTVjNWRlOWRjN2Q1NGNiNTk4YzIyYjk4YThiNmIzYmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWQyYWNmOThkNDUyNGY3Nzk4N2RiZGRmMWNhN2MyNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM0NzQ5OSwtNDMuOTY3ODExOTAwNzY3NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q2NjQ2YWU5NGYwNDc4NmIwZTIxMjJjMDhhMDEwYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDMyN2UyZDk1NzRlNDJjZWJkNzhmNmQ3YTVkOTQ3MzIgPSAkKCc8ZGl2IGlkPSJodG1sXzQzMjdlMmQ5NTc0ZTQyY2ViZDc4ZjZkN2E1ZDk0NzMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBCUkFOQ0E6ICgtMTkuODM0NzQ5OSwgLTQzLjk2NzgxMTkwMDc2NzQxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Q2NjQ2YWU5NGYwNDc4NmIwZTIxMjJjMDhhMDEwYzQuc2V0Q29udGVudChodG1sXzQzMjdlMmQ5NTc0ZTQyY2ViZDc4ZjZkN2E1ZDk0NzMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VkMmFjZjk4ZDQ1MjRmNzc5ODdkYmRkZjFjYTdjMjY2LmJpbmRQb3B1cChwb3B1cF83ZDY2NDZhZTk0ZjA0Nzg2YjBlMjEyMmMwOGEwMTBjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTA1MzYxZTk5MGM0MDc4OWY4ZTgxZWUzMDMxNzU4MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjM0ODE0LC00My45NDYzMTY5OTMxMzE4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDllY2Y4MzljYmU0OTc0YjMyM2M1MDk0NGU2YzM0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTJjMTcwNDA1MDY0YWMwOGE0NDBiYzM1ZTE0ZTNiNiA9ICQoJzxkaXYgaWQ9Imh0bWxfODUyYzE3MDQwNTA2NGFjMDhhNDQwYmMzNWUxNGUzYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIFJPU0E6ICgtMTkuODYzNDgxNCwgLTQzLjk0NjMxNjk5MzEzMTgzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODA5ZWNmODM5Y2JlNDk3NGIzMjNjNTA5NDRlNmMzNGMuc2V0Q29udGVudChodG1sXzg1MmMxNzA0MDUwNjRhYzA4YTQ0MGJjMzVlMTRlM2I2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5MDUzNjFlOTkwYzQwNzg5ZjhlODFlZTMwMzE3NTgxLmJpbmRQb3B1cChwb3B1cF84MDllY2Y4MzljYmU0OTc0YjMyM2M1MDk0NGU2YzM0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGI3NDU0Njk4MzI0NDkwYWU1MmRkZjFlODBmZTczOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTQ4OTIxLC00My45MTcwNDYxNDM2NTE3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NGI4Y2UwM2M5MzQ0MDZiOGMwNGUyMGJkMDk0NjQ3NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjllMzdmZDEzMDM0OWUwYjA3ZDZmYWRhYWU1ODkyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjY5ZTM3ZmQxMzAzNDllMGIwN2Q2ZmFkYWFlNTg5MmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIFRFUkVaQTogKC0xOS45MTQ4OTIxLCAtNDMuOTE3MDQ2MTQzNjUxNzgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NGI4Y2UwM2M5MzQ0MDZiOGMwNGUyMGJkMDk0NjQ3Ni5zZXRDb250ZW50KGh0bWxfYjY5ZTM3ZmQxMzAzNDllMGIwN2Q2ZmFkYWFlNTg5MmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjBiNzQ1NDY5ODMyNDQ5MGFlNTJkZGYxZTgwZmU3MzkuYmluZFBvcHVwKHBvcHVwXzg0YjhjZTAzYzkzNDQwNmI4YzA0ZTIwYmQwOTQ2NDc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwYjkyZGEzODg3NTQ1MjM5MWEyODlkODRmMDFkMjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMTE1NjM1MDAwMDAwMiwtNDMuOTIxMjYxNjkzOTkwNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2MzZDcyOTc0ODQ0NGFmNjllZmJhMDhhZjFmMjY4ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWIxOTYxNTk5ZDAxNGQzZjgyMGMyZjI4NGYwMjEyYWUgPSAkKCc8ZGl2IGlkPSJodG1sXzliMTk2MTU5OWQwMTRkM2Y4MjBjMmYyODRmMDIxMmFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIExVQ0FTOiAoLTE5LjkzMTE1NjM1MDAwMDAwMiwgLTQzLjkyMTI2MTY5Mzk5MDYyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2MzZDcyOTc0ODQ0NGFmNjllZmJhMDhhZjFmMjY4ZWYuc2V0Q29udGVudChodG1sXzliMTk2MTU5OWQwMTRkM2Y4MjBjMmYyODRmMDIxMmFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwYjkyZGEzODg3NTQ1MjM5MWEyODlkODRmMDFkMjM5LmJpbmRQb3B1cChwb3B1cF83YzNkNzI5NzQ4NDQ0YWY2OWVmYmEwOGFmMWYyNjhlZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjNkNWFiMDNkODM0Y2QzYjc1MWVjNDg1ZjFmZTFjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTc5NTg3LC00My45ODgyNzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzNGU3ZmY3OTVjNzRiNWI4OWNmMjQ0ZmM2MWExNzQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjYWI2NTFhOGZkNDQ2OWRiZWIzYTNlMmQyY2Q3NzVkID0gJCgnPGRpdiBpZD0iaHRtbF9hY2FiNjUxYThmZDQ0NjlkYmViM2EzZTJkMmNkNzc1ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFOREVJUkFOVEVTOiAoLTE5Ljg1Nzk1ODcsIC00My45ODgyNzk4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM0ZTdmZjc5NWM3NGI1Yjg5Y2YyNDRmYzYxYTE3NDkuc2V0Q29udGVudChodG1sX2FjYWI2NTFhOGZkNDQ2OWRiZWIzYTNlMmQyY2Q3NzVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBiM2Q1YWIwM2Q4MzRjZDNiNzUxZWM0ODVmMWZlMWNhLmJpbmRQb3B1cChwb3B1cF9mMzRlN2ZmNzk1Yzc0YjViODljZjI0NGZjNjFhMTc0OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZGU2YzZiMTBmM2M0YzRlYmU0YjVmMWNlZTllYjgyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45ODAyNzUyLC00My45NDY1NzAwNzcxNzI0OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU5NTA1N2E0YjZhNDA3NmIwMGIyMTU5M2YxYzY4N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmEyY2MwMTUzZmQ0NDQ2NzgyNjNhYTYwOWVlYjZkYTIgPSAkKCc8ZGl2IGlkPSJodG1sX2JhMmNjMDE1M2ZkNDQ0Njc4MjYzYWE2MDllZWI2ZGEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRUxWRURFUkU6ICgtMTkuOTgwMjc1MiwgLTQzLjk0NjU3MDA3NzE3MjQ5NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlOTUwNTdhNGI2YTQwNzZiMDBiMjE1OTNmMWM2ODdiLnNldENvbnRlbnQoaHRtbF9iYTJjYzAxNTNmZDQ0NDY3ODI2M2FhNjA5ZWViNmRhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZGU2YzZiMTBmM2M0YzRlYmU0YjVmMWNlZTllYjgyMy5iaW5kUG9wdXAocG9wdXBfZmU5NTA1N2E0YjZhNDA3NmIwMGIyMTU5M2YxYzY4N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2EyODQ1ZWU4YmJhNDYxY2EzNzYwYTBiMTRjYThkMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQzNDQyNiwtNDMuOTMyMDkyODE0NDA5OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmUzZDdmMDM1ZjQ4NDMzZWI1ZjhhODFiMDU3ZjgyMWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU0ZGVjNGRlODhmNDYwYmIzNmU3MzcxZDhmN2ViYWIgPSAkKCc8ZGl2IGlkPSJodG1sX2Y1NGRlYzRkZTg4ZjQ2MGJiMzZlNzM3MWQ4ZjdlYmFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVJNTzogKC0xOS45NDM0NDI2LCAtNDMuOTMyMDkyODE0NDA5OTEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTNkN2YwMzVmNDg0MzNlYjVmOGE4MWIwNTdmODIxZC5zZXRDb250ZW50KGh0bWxfZjU0ZGVjNGRlODhmNDYwYmIzNmU3MzcxZDhmN2ViYWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2EyODQ1ZWU4YmJhNDYxY2EzNzYwYTBiMTRjYThkMDUuYmluZFBvcHVwKHBvcHVwXzJlM2Q3ZjAzNWY0ODQzM2ViNWY4YTgxYjA1N2Y4MjFkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3M2ExNTM5MjNiZjQxNjBiODYxY2JmMjI0ZWI1NWM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzODQ3NjcwMDAwMDAwMiwtNDMuOTUwNjYwMDY1MzU0MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTEyYzk0ZDJhMTljNDE3YWFlMmY3YzgxZGRhMjlhYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTJjNDk1Yjg1MjdkNGNkY2E5YTFlNTk1ZWE1ZjUwOTEgPSAkKCc8ZGl2IGlkPSJodG1sXzEyYzQ5NWI4NTI3ZDRjZGNhOWExZTU5NWVhNWY1MDkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSURBREUgSkFSRElNOiAoLTE5LjkzODQ3NjcwMDAwMDAwMiwgLTQzLjk1MDY2MDA2NTM1NDM0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTEyYzk0ZDJhMTljNDE3YWFlMmY3YzgxZGRhMjlhYmEuc2V0Q29udGVudChodG1sXzEyYzQ5NWI4NTI3ZDRjZGNhOWExZTU5NWVhNWY1MDkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3M2ExNTM5MjNiZjQxNjBiODYxY2JmMjI0ZWI1NWM5LmJpbmRQb3B1cChwb3B1cF9lMTJjOTRkMmExOWM0MTdhYWUyZjdjODFkZGEyOWFiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMjdhMDM0NDlkNDI0OTMyOGNmYjdkNGZhMjAyZGRlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDU4NzQwOTk5OTk5OTcsLTQzLjk1MTIyODYyNTc3MDg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjZGRiY2QyMGI2YTQyZWFiNDZmNGNhY2E5NmJmY2RhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzNTQ1MGI3ZWMxYTQ4MzBhZjA4NmMxYjFkMDUwMmJlID0gJCgnPGRpdiBpZD0iaHRtbF9iMzU0NTBiN2VjMWE0ODMwYWYwODZjMWIxZDA1MDJiZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09SQUNBTyBERSBKRVNVUzogKC0xOS45NDU4NzQwOTk5OTk5OTcsIC00My45NTEyMjg2MjU3NzA4NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjZGRiY2QyMGI2YTQyZWFiNDZmNGNhY2E5NmJmY2RhLnNldENvbnRlbnQoaHRtbF9iMzU0NTBiN2VjMWE0ODMwYWYwODZjMWIxZDA1MDJiZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMjdhMDM0NDlkNDI0OTMyOGNmYjdkNGZhMjAyZGRlMS5iaW5kUG9wdXAocG9wdXBfNGNkZGJjZDIwYjZhNDJlYWI0NmY0Y2FjYTk2YmZjZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjhiZjA2YTE3YjM5NGM1OWI0NjZiMzk0Y2NkNGNkODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ0MjU4OCwtNDMuOTI4NDEyOTYwNTk3MzU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZWU1OTQzNTE5MDQzMGNhODQxYzQ1NThjMzhjNmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1MDE3ZGJhZTBjMzRhMTViZDM1MDg1ODk4MDZhNzUzID0gJCgnPGRpdiBpZD0iaHRtbF9lNTAxN2RiYWUwYzM0YTE1YmQzNTA4NTg5ODA2YTc1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q1JVWkVJUk86ICgtMTkuOTQ0MjU4OCwgLTQzLjkyODQxMjk2MDU5NzM1Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzZWU1OTQzNTE5MDQzMGNhODQxYzQ1NThjMzhjNmU3LnNldENvbnRlbnQoaHRtbF9lNTAxN2RiYWUwYzM0YTE1YmQzNTA4NTg5ODA2YTc1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOGJmMDZhMTdiMzk0YzU5YjQ2NmIzOTRjY2Q0Y2Q4NC5iaW5kUG9wdXAocG9wdXBfMzNlZTU5NDM1MTkwNDMwY2E4NDFjNDU1OGMzOGM2ZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzkyYjFkMzI1ZmJjNDhjZDgyMGYzNWI3NmI2ZTAzNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTMyNTE2MjAwMDAwMDAyLC00My45MjczMTgyNzM0NjMyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NmZkNDg2NDQ1MmM0YzY0OWU0YTZlZTUzZWJiZDYzNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmI3ODRkMTIwZWY0NzZhOWUwZmJjZTBiYjg0ODZiYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmJiNzg0ZDEyMGVmNDc2YTllMGZiY2UwYmI4NDg2YmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZVTkNJT05BUklPUzogKC0xOS45MzI1MTYyMDAwMDAwMDIsIC00My45MjczMTgyNzM0NjMyOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2ZmQ0ODY0NDUyYzRjNjQ5ZTRhNmVlNTNlYmJkNjM2LnNldENvbnRlbnQoaHRtbF8yYmI3ODRkMTIwZWY0NzZhOWUwZmJjZTBiYjg0ODZiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OTJiMWQzMjVmYmM0OGNkODIwZjM1Yjc2YjZlMDM0Yy5iaW5kUG9wdXAocG9wdXBfOTZmZDQ4NjQ0NTJjNGM2NDllNGE2ZWU1M2ViYmQ2MzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDEyMThhMTI5MDE4NDQwOTlhYjcyOGI4NmU1MGI4MDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM5NjM3NiwtNDMuOTU4NjY5MDk1NjE0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTJjZGRmZmEwN2QyNGNhYTg4MzUzZWE0N2Y3ZTUyYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDRhNGVhYWYzOTRmNDU0YzhlYzlhMjM5MTM3ODc0ODggPSAkKCc8ZGl2IGlkPSJodG1sX2Q0YTRlYWFmMzk0ZjQ1NGM4ZWM5YTIzOTEzNzg3NDg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVVRJRVJSRVo6ICgtMTkuOTM5NjM3NiwgLTQzLjk1ODY2OTA5NTYxNDg1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTJjZGRmZmEwN2QyNGNhYTg4MzUzZWE0N2Y3ZTUyYmUuc2V0Q29udGVudChodG1sX2Q0YTRlYWFmMzk0ZjQ1NGM4ZWM5YTIzOTEzNzg3NDg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QxMjE4YTEyOTAxODQ0MDk5YWI3MjhiODZlNTBiODA1LmJpbmRQb3B1cChwb3B1cF8xMmNkZGZmYTA3ZDI0Y2FhODgzNTNlYTQ3ZjdlNTJiZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzJkMWE3NWM2YmE0N2I3YmQyMTk5ZWU3YjI5OTVkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzIxNTMxLC00My45NDM1NzUwNDg0MTA1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MDk3N2FmZjc2M2E0OTU5OTBjNDdlMzgwODI1ZjlhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTYyM2M1ZGM0ZTM0M2MwOWVlOThkNzIyNjU1ODBkNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjU2MjNjNWRjNGUzNDNjMDllZTk4ZDcyMjY1NTgwZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxPVVJERVM6ICgtMTkuOTMyMTUzMSwgLTQzLjk0MzU3NTA0ODQxMDUxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzA5NzdhZmY3NjNhNDk1OTkwYzQ3ZTM4MDgyNWY5YTEuc2V0Q29udGVudChodG1sX2I1NjIzYzVkYzRlMzQzYzA5ZWU5OGQ3MjI2NTU4MGQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzMmQxYTc1YzZiYTQ3YjdiZDIxOTllZTdiMjk5NWQ5LmJpbmRQb3B1cChwb3B1cF83MDk3N2FmZjc2M2E0OTU5OTBjNDdlMzgwODI1ZjlhMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWI0YzljZjY5ZWI0M2RlOTQwMmU0ZjA0YzMxZGI0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDY2NTc0LC00My45NTYzNjMxNzU0MDExNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzE1N2ZiNWZhNzQ3NDdkNWI3NDhhYWRiNGMwZDU1NDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBkMjhjZThjZjM0NDMwNDkzNDRmN2U2NTQ4ZWI3NWYgPSAkKCc8ZGl2IGlkPSJodG1sX2MwZDI4Y2U4Y2YzNDQzMDQ5MzQ0ZjdlNjU0OGViNzVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MVVhFTUJVUkdPOiAoLTE5Ljk0NjY1NzQsIC00My45NTYzNjMxNzU0MDExNjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTU3ZmI1ZmE3NDc0N2Q1Yjc0OGFhZGI0YzBkNTU0MS5zZXRDb250ZW50KGh0bWxfYzBkMjhjZThjZjM0NDMwNDkzNDRmN2U2NTQ4ZWI3NWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTViNGM5Y2Y2OWViNDNkZTk0MDJlNGYwNGMzMWRiNGMuYmluZFBvcHVwKHBvcHVwX2MxNTdmYjVmYTc0NzQ3ZDViNzQ4YWFkYjRjMGQ1NTQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhZjNkMjAzODMwYTQ0ZjA4YjQxNTFmZGQxZGZlYzgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1NTQzNDQsLTQzLjkxMTYwOTIxMzMxOTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlODQ4MzAyYmExZTQ0M2Q5YjBkNWIwOTU3YTM2NGEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlY2Y4YTc1YjlhNDQ1MWFiZmY2YWJkZmU4NDA1N2E1ID0gJCgnPGRpdiBpZD0iaHRtbF84ZWNmOGE3NWI5YTQ0NTFhYmZmNmFiZGZlODQwNTdhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFOR0FCRUlSQVM6ICgtMTkuOTU1NDM0NCwgLTQzLjkxMTYwOTIxMzMxOTg0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2U4NDgzMDJiYTFlNDQzZDliMGQ1YjA5NTdhMzY0YTAuc2V0Q29udGVudChodG1sXzhlY2Y4YTc1YjlhNDQ1MWFiZmY2YWJkZmU4NDA1N2E1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZhZjNkMjAzODMwYTQ0ZjA4YjQxNTFmZGQxZGZlYzgyLmJpbmRQb3B1cChwb3B1cF8zZTg0ODMwMmJhMWU0NDNkOWIwZDViMDk1N2EzNjRhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZmE4NWM1Njc1ZjE0MjlhODljNzdjMGRjMjhjNGM1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDc3MDQ2NSwtNDMuOTA0NjI5MDgxNTIwMDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE4ZTIyZDM5YTg4YTQ4ZTdiNDM1YTMxYTllMmRhMGNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3YmIyNzBlNDllMTRiNTg4MjJmZWFmZWEyNmZlYzY0ID0gJCgnPGRpdiBpZD0iaHRtbF81N2JiMjcwZTQ5ZTE0YjU4ODIyZmVhZmVhMjZmZWM2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFSUVVFIERBUyBNQU5HQUJFSVJBUzogKC0xOS45NDc3MDQ2NSwgLTQzLjkwNDYyOTA4MTUyMDA1Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4ZTIyZDM5YTg4YTQ4ZTdiNDM1YTMxYTllMmRhMGNmLnNldENvbnRlbnQoaHRtbF81N2JiMjcwZTQ5ZTE0YjU4ODIyZmVhZmVhMjZmZWM2NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmE4NWM1Njc1ZjE0MjlhODljNzdjMGRjMjhjNGM1My5iaW5kUG9wdXAocG9wdXBfMThlMjJkMzlhODhhNDhlN2I0MzVhMzFhOWUyZGEwY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTc4MWRkNzlkNDI4NGMwMGI1N2I5MzQwZGZmZjI0ODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTYzMjI1NiwtNDMuOTQ1MTAwOTYwOTM3NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDllYjYzYzhjNDRmNGY4NDg2NTAxYzMxZjJiYWNiYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ4NzA5ZWY4NWMwNDVhN2I4ZWE2MTExNWY2ZTBkZDcgPSAkKCc8ZGl2IGlkPSJodG1sXzFkODcwOWVmODVjMDQ1YTdiOGVhNjExMTVmNmUwZGQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBMVUNJQTogKC0xOS45NjMyMjU2LCAtNDMuOTQ1MTAwOTYwOTM3NjcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OWViNjNjOGM0NGY0Zjg0ODY1MDFjMzFmMmJhY2JhNy5zZXRDb250ZW50KGh0bWxfMWQ4NzA5ZWY4NWMwNDVhN2I4ZWE2MTExNWY2ZTBkZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTc4MWRkNzlkNDI4NGMwMGI1N2I5MzQwZGZmZjI0ODMuYmluZFBvcHVwKHBvcHVwXzQ5ZWI2M2M4YzQ0ZjRmODQ4NjUwMWMzMWYyYmFjYmE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1YWI3NDg0MzYzMTQyZTQ5NjVmNjk4OWZjZjJiY2I3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyODgxMTM1LC00My45NTE0MDc0Mjk5NDkxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWEyMTBkMzZhZmE0MDkwODIxMjIwYjEzNzM2ZDBiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOThjMjYyMGJlNzg0ZDc0YmI1ZDVhMDg2NjE5ODE2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjk4YzI2MjBiZTc4NGQ3NGJiNWQ1YTA4NjYxOTgxNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRPIEFHT1NUSU5ITzogKC0xOS45Mjg4MTEzNSwgLTQzLjk1MTQwNzQyOTk0OTE0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFhMjEwZDM2YWZhNDA5MDgyMTIyMGIxMzczNmQwYjguc2V0Q29udGVudChodG1sXzI5OGMyNjIwYmU3ODRkNzRiYjVkNWEwODY2MTk4MTY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA1YWI3NDg0MzYzMTQyZTQ5NjVmNjk4OWZjZjJiY2I3LmJpbmRQb3B1cChwb3B1cF9mYWEyMTBkMzZhZmE0MDkwODIxMjIwYjEzNzM2ZDBiOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzk5ZWJlZDkyNjg0MWE4ODhiMDc0ODRjZWI5MTJjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDMzMjk0LC00My45NDM0MjAyNTIxOTM0MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVmY2M5MTNjM2ZiNDRlNThmMjcxYjJiZjVjOTA2YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzU2MzJmMjU0ZmVkNGViMmFiYTNkM2FjMWFhZDFmZGYgPSAkKCc8ZGl2IGlkPSJodG1sX2M1NjMyZjI1NGZlZDRlYjJhYmEzZDNhYzFhYWQxZmRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UTyBBTlRPTklPOiAoLTE5Ljk0MzMyOTQsIC00My45NDM0MjAyNTIxOTM0MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNWZjYzkxM2MzZmI0NGU1OGYyNzFiMmJmNWM5MDZiOS5zZXRDb250ZW50KGh0bWxfYzU2MzJmMjU0ZmVkNGViMmFiYTNkM2FjMWFhZDFmZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjM5OWViZWQ5MjY4NDFhODg4YjA3NDg0Y2ViOTEyY2MuYmluZFBvcHVwKHBvcHVwXzE1ZmNjOTEzYzNmYjQ0ZTU4ZjI3MWIyYmY1YzkwNmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiNjQyM2M4OTE1NjQ5NzdiZDhmYzJkOGIyYTNkZTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1NzcwODY1LC00My45NTMyNDE1NDI1OTE1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zY2RkNmQ0NGMwYzM0MjlkODU2MDQ4NzM4ODgxMjZlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZDQ5OWJiODE0ODg0ZGJlODI0YTBjYTI3MGEzYTYxYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGQ0OTliYjgxNDg4NGRiZTgyNGEwY2EyNzBhM2E2MWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gQkVOVE86ICgtMTkuOTU3NzA4NjUsIC00My45NTMyNDE1NDI1OTE1Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjZGQ2ZDQ0YzBjMzQyOWQ4NTYwNDg3Mzg4ODEyNmU4LnNldENvbnRlbnQoaHRtbF80ZDQ5OWJiODE0ODg0ZGJlODI0YTBjYTI3MGEzYTYxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYjY0MjNjODkxNTY0OTc3YmQ4ZmMyZDhiMmEzZGU0OS5iaW5kUG9wdXAocG9wdXBfM2NkZDZkNDRjMGMzNDI5ZDg1NjA0ODczODg4MTI2ZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTc5OTVkYzRiODQ1NDUxMDhhOTRkZTgwY2M5YTQ0YjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYwMzgzNCwtNDMuOTY2MTEwMTY2MjI1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA5OWZkZmM4OWE5NDhlMjhiNTBhNjE2NmZkZWM0MjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQ5OWRiNDEwNzM3NGVjMTg2NGFlOWU4ZTMyZjcwM2MgPSAkKCc8ZGl2IGlkPSJodG1sXzU0OTlkYjQxMDczNzRlYzE4NjRhZTllOGUzMmY3MDNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIEpPU0UgUEFNUFVMSEE6ICgtMTkuODYwMzgzNCwgLTQzLjk2NjExMDE2NjIyNTAyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTA5OWZkZmM4OWE5NDhlMjhiNTBhNjE2NmZkZWM0MjUuc2V0Q29udGVudChodG1sXzU0OTlkYjQxMDczNzRlYzE4NjRhZTllOGUzMmY3MDNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE3OTk1ZGM0Yjg0NTQ1MTA4YTk0ZGU4MGNjOWE0NGI5LmJpbmRQb3B1cChwb3B1cF85MDk5ZmRmYzg5YTk0OGUyOGI1MGE2MTY2ZmRlYzQyNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMWRhZDc4YmNiMjE0YmE5ODNiZDVkNWM0YTg2NTZmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjI5NDQyNzksLTQwLjgyNDk4MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjU0MDk0OGU2OGIzNGQ3MTg0NmFmNTNmNzFlMDUyODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjAyNzRmNmI0NDczNGRlYzgzZmY1ZGQyMjQzNTliZmIgPSAkKCc8ZGl2IGlkPSJodG1sXzIwMjc0ZjZiNDQ3MzRkZWM4M2ZmNWRkMjI0MzU5YmZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIExVSVM6ICgtOS4yOTQ0Mjc5LCAtNDAuODI0OTgyNik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1NDA5NDhlNjhiMzRkNzE4NDZhZjUzZjcxZTA1MjgzLnNldENvbnRlbnQoaHRtbF8yMDI3NGY2YjQ0NzM0ZGVjODNmZjVkZDIyNDM1OWJmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMWRhZDc4YmNiMjE0YmE5ODNiZDVkNWM0YTg2NTZmNS5iaW5kUG9wdXAocG9wdXBfZjU0MDk0OGU2OGIzNGQ3MTg0NmFmNTNmNzFlMDUyODMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdkMjlhYTExZWRhNGU5OWEwZDFlOThjY2JlYWY4NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ3NjU5MDUsLTQzLjkzNzUwOTQ3MjYyNzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzdkZGZmZjZkODM1NjRlMzM4YmM0YmZjOGNlYjNjNjhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0YjIwZTFmNjViMTQ5NWQ4MzAyNDQ5N2E0YzlkMTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4MjkxZWRlMWMxMTQzYTJhZmRkNzI5ZmMxOThmZDVmID0gJCgnPGRpdiBpZD0iaHRtbF81ODI5MWVkZTFjMTE0M2EyYWZkZDcyOWZjMTk4ZmQ1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBQRURSTzogKC0xOS45NDc2NTkwNSwgLTQzLjkzNzUwOTQ3MjYyNzA1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzRiMjBlMWY2NWIxNDk1ZDgzMDI0NDk3YTRjOWQxNmQuc2V0Q29udGVudChodG1sXzU4MjkxZWRlMWMxMTQzYTJhZmRkNzI5ZmMxOThmZDVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3ZDI5YWExMWVkYTRlOTlhMGQxZTk4Y2NiZWFmODQ1LmJpbmRQb3B1cChwb3B1cF8zNGIyMGUxZjY1YjE0OTVkODMwMjQ0OTdhNGM5ZDE2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjQ3MzNjYTJkNzE0ZjViOTAzYTNiNTU5YWYyODU1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzUyMjA1LC00My45MzQ0NDYzNDAxOTc0NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDk5ZjhjNDZkYTkxNDQ5YzhiZjNjZmIyOTA0MjZiZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk5MmY5YjEwOTVmNDFmM2E3MTdhNTJjNzA4MDBiMzkgPSAkKCc8ZGl2IGlkPSJodG1sXzA5OTJmOWIxMDk1ZjQxZjNhNzE3YTUyYzcwODAwYjM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQVZBU1NJOiAoLTE5LjkzNTIyMDUsIC00My45MzQ0NDYzNDAxOTc0NTQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTlmOGM0NmRhOTE0NDljOGJmM2NmYjI5MDQyNmJlNi5zZXRDb250ZW50KGh0bWxfMDk5MmY5YjEwOTVmNDFmM2E3MTdhNTJjNzA4MDBiMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzI0NzMzY2EyZDcxNGY1YjkwM2EzYjU1OWFmMjg1NWIuYmluZFBvcHVwKHBvcHVwXzQ5OWY4YzQ2ZGE5MTQ0OWM4YmYzY2ZiMjkwNDI2YmU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MDg2ODhmZDFlZjRlN2FhODI4ZmRhYzdlMDg2NzljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MDU1NTc1LC00My45MTg0MjMwNDQ5NTU1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83ZGRmZmY2ZDgzNTY0ZTMzOGJjNGJmYzhjZWIzYzY4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzMwZTlkMDY2ZWY0ODUzYmMwZTc3YWE0OTczYzVkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZWMwMjQ3ZGIwY2Q0MDczYjRlZTRhODAzMTVkNjhkMiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGVjMDI0N2RiMGNkNDA3M2I0ZWU0YTgwMzE1ZDY4ZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNFUlJBOiAoLTE5Ljk0MDU1NTc1LCAtNDMuOTE4NDIzMDQ0OTU1NTIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzMwZTlkMDY2ZWY0ODUzYmMwZTc3YWE0OTczYzVkNS5zZXRDb250ZW50KGh0bWxfOGVjMDI0N2RiMGNkNDA3M2I0ZWU0YTgwMzE1ZDY4ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQwODY4OGZkMWVmNGU3YWE4MjhmZGFjN2UwODY3OWMuYmluZFBvcHVwKHBvcHVwXzhjMzBlOWQwNjZlZjQ4NTNiYzBlNzdhYTQ5NzNjNWQ1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlMDhhNDVmYjU1NDQ3MzU4ZjUyODViZDJjYmVmYWIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0OTM2MjQsLTQzLjkzMjU4NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRjMzYwMTJjNzJhNDA1MzhlNGU0MjUxZmEwODBmZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZlOTQ5YWNhZGQzNDUyYWFlNjRkZjFjOGZkODVjY2QgPSAkKCc8ZGl2IGlkPSJodG1sXzdmZTk0OWFjYWRkMzQ1MmFhZTY0ZGYxYzhmZDg1Y2NkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TSU9OOiAoLTE5Ljk0OTM2MjQsIC00My45MzI1ODY5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRjMzYwMTJjNzJhNDA1MzhlNGU0MjUxZmEwODBmZjAuc2V0Q29udGVudChodG1sXzdmZTk0OWFjYWRkMzQ1MmFhZTY0ZGYxYzhmZDg1Y2NkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlMDhhNDVmYjU1NDQ3MzU4ZjUyODViZDJjYmVmYWIyLmJpbmRQb3B1cChwb3B1cF81ZGMzNjAxMmM3MmE0MDUzOGU0ZTQyNTFmYTA4MGZmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZjAwNmFhMmEyZTY0YWI5ODhmY2RlYmVhY2MwYzUzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTA2MTkyNSwtNDMuOTUwMjYzNTg2NzI5MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfN2RkZmZmNmQ4MzU2NGUzMzhiYzRiZmM4Y2ViM2M2OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzY3ZmFiOGViNTM5NDJhMDg5MWQxMTczNjViYThmZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzYyNTk0ZTY3OTg0NDNiZjhlYjFkMWY5NWVjMTJhOGYgPSAkKCc8ZGl2IGlkPSJodG1sXzc2MjU5NGU2Nzk4NDQzYmY4ZWIxZDFmOTVlYzEyYThmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIFBBUklTOiAoLTE5Ljk1MDYxOTI1LCAtNDMuOTUwMjYzNTg2NzI5MDEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjdmYWI4ZWI1Mzk0MmEwODkxZDExNzM2NWJhOGZkNi5zZXRDb250ZW50KGh0bWxfNzYyNTk0ZTY3OTg0NDNiZjhlYjFkMWY5NWVjMTJhOGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmYwMDZhYTJhMmU2NGFiOTg4ZmNkZWJlYWNjMGM1MzYuYmluZFBvcHVwKHBvcHVwXzc2N2ZhYjhlYjUzOTQyYTA4OTFkMTE3MzY1YmE4ZmQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7feb3f9c9dd8>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"!conda install -c conda-forge folium=0.5.0 --yes # uncomment if needed\n",
"import folium # map rendering library\n",
"\n",
"ilat = -19.9227318\n",
"ilon = -43.9450948\n",
"\n",
"# create map of Belo Horizonte using latitude and longitude values\n",
"map_bh = folium.Map(location=[ilat, ilon], zoom_start=10)\n",
"\n",
"# add markers to map\n",
"for lat, lng, neighborhood in zip(bairros['Latitude'], bairros['Longitude'], bairros['Neighborhood']):\n",
" label = '{}: ({}, {})'.format(neighborhood, lat, lng)\n",
" label = folium.Popup(label, parse_html=True)\n",
" folium.CircleMarker(\n",
" [lat, lng],\n",
" radius=5,\n",
" popup=label,\n",
" color='blue',\n",
" fill=True,\n",
" fill_color='#3186cc',\n",
" fill_opacity=0.7,\n",
" parse_html=False).add_to(map_bh) \n",
"\n",
"map_bh"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Unfortunately, geopy was not accurate on many neighborhoods far from Belo Horizonte downtown.\n",
"\n",
"So, let us restrict the analysis to neighborhoods not far from downtown.\n",
"\n",
"Also, the location of Pindorama neighborhood is remarkably wrong. Let us just remove it from dataset."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df = bairros[(bairros['Latitude']<ilat+0.09) & (bairros['Latitude']>ilat-0.09) & (bairros['Longitude']>ilon-0.06) & (bairros['Longitude']<ilon+0.06)]\n",
"df = df[df['Neighborhood'] != 'PINDORAMA']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's visualize the resulting dataset, now with social classes distinctions."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbLTE5LjkyMjczMTgsLTQzLjk0NTA5NDhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyXzA2MzI0MTZmMjkwZDQyMjFiMmMzYmFiY2VjODMwZmNlID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjgyZmVlNzA1NmQ0ODJhOTQzYmZkYzUxNzE4ZTI3MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NDcyMjExLC00My45MTk1MDgyMDExNTI2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MmFlZmQ3ZGY0NzY0ZDdiOGViODhlNWNlZDBmZTIxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDc0Mjc1ODdjOTE0ZmUzYjNmYjBhNmYxNzUzZmNiNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzA3NDI3NTg3YzkxNGZlM2IzZmIwYTZmMTc1M2ZjYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFBUkFPIFJFSVMgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MmFlZmQ3ZGY0NzY0ZDdiOGViODhlNWNlZDBmZTIxMC5zZXRDb250ZW50KGh0bWxfNzA3NDI3NTg3YzkxNGZlM2IzZmIwYTZmMTc1M2ZjYjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTI4MmZlZTcwNTZkNDgyYTk0M2JmZGM1MTcxOGUyNzEuYmluZFBvcHVwKHBvcHVwXzYyYWVmZDdkZjQ3NjRkN2I4ZWI4OGU1Y2VkMGZlMjEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4M2RmY2IxNzdhYTRmYjFiNzQ4MzNkY2ZlYzhlNjc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMjU2NzQsLTQ0LjAwNDg3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDlkMzI1MGQzYjA0NzYzODIxMzk3ZmVhNWVlZTQwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMWE1MTFmM2NjOGQ0ZTZkOThiOGY4NWEzYjA5NzU1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDFhNTExZjNjYzhkNGU2ZDk4YjhmODVhM2IwOTc1NTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gRE9TIFBJTkhFSVJPUyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBkOWQzMjUwZDNiMDQ3NjM4MjEzOTdmZWE1ZWVlNDBmLnNldENvbnRlbnQoaHRtbF8wMWE1MTFmM2NjOGQ0ZTZkOThiOGY4NWEzYjA5NzU1MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mODNkZmNiMTc3YWE0ZmIxYjc0ODMzZGNmZWM4ZTY3OS5iaW5kUG9wdXAocG9wdXBfMGQ5ZDMyNTBkM2IwNDc2MzgyMTM5N2ZlYTVlZWU0MGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDcwZmFkZjVlZDkyNDljMDg1YWE5NDEyNmIwNDIyMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg3NzgyNSwtNDMuOTA2MzY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3OTIwZDUwNzc0MTQ5MzM5NDMxY2VhZThmMDRiOWZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlMDYzYjYxYzk0YjRmMmNhMWU3MmI2NDBjMzVlYjYzID0gJCgnPGRpdiBpZD0iaHRtbF9kZTA2M2I2MWM5NGI0ZjJjYTFlNzJiNjQwYzM1ZWI2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU5BIExVQ0lBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc5MjBkNTA3NzQxNDkzMzk0MzFjZWFlOGYwNGI5ZmUuc2V0Q29udGVudChodG1sX2RlMDYzYjYxYzk0YjRmMmNhMWU3MmI2NDBjMzVlYjYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3MGZhZGY1ZWQ5MjQ5YzA4NWFhOTQxMjZiMDQyMjIxLmJpbmRQb3B1cChwb3B1cF9jNzkyMGQ1MDc3NDE0OTMzOTQzMWNlYWU4ZjA0YjlmZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTgwNGU1ZDg4YjU0MjZlODExM2UxNGYyMGIxZmY0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTQ0MDI3NDk5OTk5OTgsLTQzLjk1NjUxNjE5MjM5NzI3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNThhM2U2M2E3YTE0OTBmOTQxYjRlMGE4ODBkZmFkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzJhZGNjMWM0ZTU0MThkYjYyYzMwM2U5Nzg5NGM3OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzMyYWRjYzFjNGU1NDE4ZGI2MmMzMDNlOTc4OTRjNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFQQVJFQ0lEQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1OGEzZTYzYTdhMTQ5MGY5NDFiNGUwYTg4MGRmYWQwLnNldENvbnRlbnQoaHRtbF83MzJhZGNjMWM0ZTU0MThkYjYyYzMwM2U5Nzg5NGM3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MTgwNGU1ZDg4YjU0MjZlODExM2UxNGYyMGIxZmY0My5iaW5kUG9wdXAocG9wdXBfMDU4YTNlNjNhN2ExNDkwZjk0MWI0ZTBhODgwZGZhZDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI1OTBhOWJlNzI1NGJjYzhlZWNkY2Q4NjQyOTFmMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwNzkyOSwtNDMuOTYxNjU0OTcwOTkwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDA5MDNlN2Y1ZjljNDc2OWI4Mzg5YWNjZjVhNTk2YWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWZiNmRiZTU5NDE1NDBhZmEzZjk2MjZhZTFhMWQ4YjMgPSAkKCc8ZGl2IGlkPSJodG1sX2FmYjZkYmU1OTQxNTQwYWZhM2Y5NjI2YWUxYTFkOGIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BUEFSRUNJREEgN0EgU0VDQU8gQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDkwM2U3ZjVmOWM0NzY5YjgzODlhY2NmNWE1OTZhZS5zZXRDb250ZW50KGh0bWxfYWZiNmRiZTU5NDE1NDBhZmEzZjk2MjZhZTFhMWQ4YjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTI1OTBhOWJlNzI1NGJjYzhlZWNkY2Q4NjQyOTFmMzIuYmluZFBvcHVwKHBvcHVwXzAwOTAzZTdmNWY5YzQ3NjliODM4OWFjY2Y1YTU5NmFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyMGIzNjM2N2FlYjRkZjBiNDdiNTU1ZjVkMDk2Mzg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1OTAxMTk1LC00My45OTkwNzIwMjI2NTgzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDdmMTQxNjJmZWM0MTZiYjg1MzVkNjNjZDYwNDNkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTk3YzhlNjllOWU0YjcxODFlYWU4YjBhYWI2YjM1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDU5N2M4ZTY5ZTllNGI3MTgxZWFlOGIwYWFiNmIzNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBSVJSTyBEQVMgSU5EVVNUUklBUyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JkN2YxNDE2MmZlYzQxNmJiODUzNWQ2M2NkNjA0M2RhLnNldENvbnRlbnQoaHRtbF8wNTk3YzhlNjllOWU0YjcxODFlYWU4YjBhYWI2YjM1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjBiMzYzNjdhZWI0ZGYwYjQ3YjU1NWY1ZDA5NjM4OS5iaW5kUG9wdXAocG9wdXBfYmQ3ZjE0MTYyZmVjNDE2YmI4NTM1ZDYzY2Q2MDQzZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTUwYmQzOGY5YmFmNDc3OWJlOTMzMjA1MmZkNmU3MmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM0MTc3NTUsLTQzLjg5MjM1MTQxMjEzNTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlOGJiNGNmZTA5NzQ2OThhMzhlOTA5NGVjMzAzNGVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjZTY1MjFiMDdiNDQyNmE4OTFiYzk4Yjk2NTM5NDlmID0gJCgnPGRpdiBpZD0iaHRtbF9jY2U2NTIxYjA3YjQ0MjZhODkxYmM5OGI5NjUzOTQ5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFMRUlBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU4YmI0Y2ZlMDk3NDY5OGEzOGU5MDk0ZWMzMDM0ZWYuc2V0Q29udGVudChodG1sX2NjZTY1MjFiMDdiNDQyNmE4OTFiYzk4Yjk2NTM5NDlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E1MGJkMzhmOWJhZjQ3NzliZTkzMzIwNTJmZDZlNzJiLmJpbmRQb3B1cChwb3B1cF9mZThiYjRjZmUwOTc0Njk4YTM4ZTkwOTRlYzMwMzRlZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTNlNjI1MDJjZTU0YzAwOWQ4MWIzN2RjNGQ4MzY4OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTg2MTA5LC00My45OTIyMjUxMjM2NzAwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjQxZWQ4ZTcxNWI0NzBmODc4Yzc1MGE1MTU1Yjg1ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMmQ4ODMxZTkyNmM0NmZmYjAzYjYzNmU2NGMzZTA2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjJkODgzMWU5MjZjNDZmZmIwM2I2MzZlNjRjM2UwNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFVEFOSUEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjQxZWQ4ZTcxNWI0NzBmODc4Yzc1MGE1MTU1Yjg1Zi5zZXRDb250ZW50KGh0bWxfYjJkODgzMWU5MjZjNDZmZmIwM2I2MzZlNjRjM2UwNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODkzZTYyNTAyY2U1NGMwMDlkODFiMzdkYzRkODM2ODguYmluZFBvcHVwKHBvcHVwXzFiNDFlZDhlNzE1YjQ3MGY4NzhjNzUwYTUxNTViODVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkNGIwNDE2MzAwNDQ2M2Q4MWZhOTMwOWQ0ODM1ZmQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NDA3MTE1MDAwMDAwMiwtNDMuOTAzNjczODcyMjIwNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTc2YzcyYzQ1YzM4NGY0ZGJlMjU0YjkzN2YzNzhmYjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDhlZDU0ODUyNWM0NDg3Mjg2ZDcyYzFhNmM3MWJkMWUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4ZWQ1NDg1MjVjNDQ4NzI4NmQ3MmMxYTZjNzFiZDFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT0EgVklTVEEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzZjNzJjNDVjMzg0ZjRkYmUyNTRiOTM3ZjM3OGZiMy5zZXRDb250ZW50KGh0bWxfNDhlZDU0ODUyNWM0NDg3Mjg2ZDcyYzFhNmM3MWJkMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWQ0YjA0MTYzMDA0NDYzZDgxZmE5MzA5ZDQ4MzVmZDYuYmluZFBvcHVwKHBvcHVwX2E3NmM3MmM0NWMzODRmNGRiZTI1NGI5MzdmMzc4ZmIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxMDc2MmRlMGJjODQ5YjVhNGQzNDA4N2FjNzg0OTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NTk1NzcsLTQzLjk1NDM5MzgyMTQ1MTI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNThhYjM3MzA1Yjc0OTJjOTQwNmM0MzgxZmE1NDU4MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmNiYjI4OGMyMGY0YjEyOGJhMGI5NTU5NTNlM2MwZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmJjYmIyODhjMjBmNGIxMjhiYTBiOTU1OTUzZTNjMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJPTSBKRVNVUyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1OGFiMzczMDViNzQ5MmM5NDA2YzQzODFmYTU0NTgyLnNldENvbnRlbnQoaHRtbF9mYmNiYjI4OGMyMGY0YjEyOGJhMGI5NTU5NTNlM2MwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MTA3NjJkZTBiYzg0OWI1YTRkMzQwODdhYzc4NDkzNS5iaW5kUG9wdXAocG9wdXBfZjU4YWIzNzMwNWI3NDkyYzk0MDZjNDM4MWZhNTQ1ODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjc1ODdmYmUxZWUyNDQ2Nzk4M2FjNWE4MDJkMzgyYzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ2MDQ3ODAwMDAwMDAyLC00NC4wMDA0MzMwMzkzNzE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODNkZDI2MDMwNjM0NDRlYWU5ZTA4NDIwYWQ5ZTk2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTY5MDliYTQ3OTk0MzBjYmU0YzdhZmJlM2NhNzU3YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDU2OTA5YmE0Nzk5NDMwY2JlNGM3YWZiZTNjYTc1N2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBQkFOQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4M2RkMjYwMzA2MzQ0NGVhZTllMDg0MjBhZDllOTY0LnNldENvbnRlbnQoaHRtbF8wNTY5MDliYTQ3OTk0MzBjYmU0YzdhZmJlM2NhNzU3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNzU4N2ZiZTFlZTI0NDY3OTgzYWM1YTgwMmQzODJjMy5iaW5kUG9wdXAocG9wdXBfYjgzZGQyNjAzMDYzNDQ0ZWFlOWUwODQyMGFkOWU5NjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU1NDhhNzdkY2QwNGFiNjg3ZjAyNjQwYWZiMWRlZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwMjAwMywtNDMuOTQ3NDU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTkyNDMxNDZjMmM0M2MyYjc4NmNiZGM4YTc4OWQ1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZTE2NWQyMTY4ZGQ0NTU1YjJhNmExNTRjYTAxMzBlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGUxNjVkMjE2OGRkNDU1NWIyYTZhMTU0Y2EwMTMwZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBQ0hPRUlSSU5IQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlOTI0MzE0NmMyYzQzYzJiNzg2Y2JkYzhhNzg5ZDU2LnNldENvbnRlbnQoaHRtbF84ZTE2NWQyMTY4ZGQ0NTU1YjJhNmExNTRjYTAxMzBlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZTU0OGE3N2RjZDA0YWI2ODdmMDI2NDBhZmIxZGVkNS5iaW5kUG9wdXAocG9wdXBfNGU5MjQzMTQ2YzJjNDNjMmI3ODZjYmRjOGE3ODlkNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzQwM2I3NjNjMTkzNDljODhkMWZkN2IxNWZiMmY5YmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTAzMDA2MywtNDMuODg5ODc4NTQyNTAxMTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyZDI2MmVjYjgzOTQ4MjU4MjE0OTgxZjY4ODA3ZjEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0MzRkZDA4ODNlYTQzNWI5MmM5ODJjZjhkZjNiYmM0ID0gJCgnPGRpdiBpZD0iaHRtbF82NDM0ZGQwODgzZWE0MzViOTJjOTgyY2Y4ZGYzYmJjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FFVEFOTyBGVVJRVUlNIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTJkMjYyZWNiODM5NDgyNTgyMTQ5ODFmNjg4MDdmMTAuc2V0Q29udGVudChodG1sXzY0MzRkZDA4ODNlYTQzNWI5MmM5ODJjZjhkZjNiYmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0MDNiNzYzYzE5MzQ5Yzg4ZDFmZDdiMTVmYjJmOWJhLmJpbmRQb3B1cChwb3B1cF8xMmQyNjJlY2I4Mzk0ODI1ODIxNDk4MWY2ODgwN2YxMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYzRhZTA5ZmVlMTA0YzAzOTVhYTEyNWUxNjJlZjc3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTkwMTY2NSwtNDMuODg3NjcxMTcyMDk0ODU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5YmJhOGRjM2I0YTQ3NWZiM2IwZTZkMTczODA4ZWYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3NDNlZTQyZGVkMjQ3ZGVhODFlNTc0Nzc0NjYxM2I5ID0gJCgnPGRpdiBpZD0iaHRtbF9jNzQzZWU0MmRlZDI0N2RlYTgxZTU3NDc3NDY2MTNiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FTQSBCUkFOQ0EgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOWJiYThkYzNiNGE0NzVmYjNiMGU2ZDE3MzgwOGVmMy5zZXRDb250ZW50KGh0bWxfYzc0M2VlNDJkZWQyNDdkZWE4MWU1NzQ3NzQ2NjEzYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmM0YWUwOWZlZTEwNGMwMzk1YWExMjVlMTYyZWY3NzMuYmluZFBvcHVwKHBvcHVwXzI5YmJhOGRjM2I0YTQ3NWZiM2IwZTZkMTczODA4ZWYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjYWY4ZGYzZjg5ZjQxNzk4NzFkYTc4M2E1NDBmNGNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNTcyNTU1LC00My45OTA1MjMyNTQ3MTg4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGM3YmIyNjExOGE0YmRkYWZlY2JjM2RlODk5YmI0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDZjMGUwMGRjZmQ0NzU2OWQyYTdkNTlhMmQ4ZDk0ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Q2YzBlMDBkY2ZkNDc1NjlkMmE3ZDU5YTJkOGQ5NGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPUEFDQUJBTkEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGM3YmIyNjExOGE0YmRkYWZlY2JjM2RlODk5YmI0YS5zZXRDb250ZW50KGh0bWxfN2Q2YzBlMDBkY2ZkNDc1NjlkMmE3ZDU5YTJkOGQ5NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmNhZjhkZjNmODlmNDE3OTg3MWRhNzgzYTU0MGY0Y2QuYmluZFBvcHVwKHBvcHVwX2M4YzdiYjI2MTE4YTRiZGRhZmVjYmMzZGU4OTliYjRhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5MGQxYzdmMDA5NzQ2NDg4MWQ0Yzk0N2E4ODRlY2YyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxNTg1ODIsLTQzLjk5OTU3NTEwMTI1ODc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0OTI0ZGFlYWViZTQxMDliNWFkNjI2ZmJiOTUxMTRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhZTRkMDJmMmM1OTRkNjBhNTg1MWEwMjgyMzY1OTM3ID0gJCgnPGRpdiBpZD0iaHRtbF8wYWU0ZDAyZjJjNTk0ZDYwYTU4NTFhMDI4MjM2NTkzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RE9NIEJPU0NPIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQ5MjRkYWVhZWJlNDEwOWI1YWQ2MjZmYmI5NTExNGEuc2V0Q29udGVudChodG1sXzBhZTRkMDJmMmM1OTRkNjBhNTg1MWEwMjgyMzY1OTM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI5MGQxYzdmMDA5NzQ2NDg4MWQ0Yzk0N2E4ODRlY2YyLmJpbmRQb3B1cChwb3B1cF85NDkyNGRhZWFlYmU0MTA5YjVhZDYyNmZiYjk1MTE0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOGMwMmZhNjhlODU0YzY3OWZiZWJhNmQxMTFmZGE4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzY5NDA1NSwtNDMuOTE3MTM2Mjg4ODU1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzEzZDcxNGZkNTZhNGMwZWI0NjdlYzhiMTczODRkYzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNkNDdhZDBmNDNlNDA1OTgzOWMxZTU5OGVjYzM1ODEgPSAkKCc8ZGl2IGlkPSJodG1sXzYzZDQ3YWQwZjQzZTQwNTk4MzljMWU1OThlY2MzNTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gSk9BUVVJTSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxM2Q3MTRmZDU2YTRjMGViNDY3ZWM4YjE3Mzg0ZGM3LnNldENvbnRlbnQoaHRtbF82M2Q0N2FkMGY0M2U0MDU5ODM5YzFlNTk4ZWNjMzU4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOGMwMmZhNjhlODU0YzY3OWZiZWJhNmQxMTFmZGE4Mi5iaW5kUG9wdXAocG9wdXBfMzEzZDcxNGZkNTZhNGMwZWI0NjdlYzhiMTczODRkYzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDE3Yzk4MmYxNTlkNGQzZDg4MDFkNGEyMzE2NDRlOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU0NTkxMTUsLTQzLjkwNDU5NTQ3NDYwNDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmZDdlZWMyM2ZjMjQwYTViODRkYTgyZjk4ZjViNjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhYzY0MjJiNzVmNDQ5N2ViMTg1NTczNTlhN2MwODQwID0gJCgnPGRpdiBpZD0iaHRtbF80YWM2NDIyYjc1ZjQ0OTdlYjE4NTU3MzU5YTdjMDg0MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RE9NIFNJTFZFUklPIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZkN2VlYzIzZmMyNDBhNWI4NGRhODJmOThmNWI2NWEuc2V0Q29udGVudChodG1sXzRhYzY0MjJiNzVmNDQ5N2ViMTg1NTczNTlhN2MwODQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QxN2M5ODJmMTU5ZDRkM2Q4ODAxZDRhMjMxNjQ0ZTk5LmJpbmRQb3B1cChwb3B1cF9hZmQ3ZWVjMjNmYzI0MGE1Yjg0ZGE4MmY5OGY1YjY1YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MjgyNGEyNGYxNmE0N2M4YTIyODNjY2YxODhlMTM5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODcyNzU0NSwtNDMuOTc1NDE5MTkxOTY5NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGE2NGFjOWQ3ZDAyNGNlMGJiN2RhOGJmZTU1M2Y1Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjEzZjkwMjRmM2Y1NDE4NWE4NzQzMzY0YWE1Yzk0OTQgPSAkKCc8ZGl2IGlkPSJodG1sXzYxM2Y5MDI0ZjNmNTQxODVhODc0MzM2NGFhNWM5NDk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FTkdFTkhPIE5PR1VFSVJBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGE2NGFjOWQ3ZDAyNGNlMGJiN2RhOGJmZTU1M2Y1Y2Euc2V0Q29udGVudChodG1sXzYxM2Y5MDI0ZjNmNTQxODVhODc0MzM2NGFhNWM5NDk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyODI0YTI0ZjE2YTQ3YzhhMjI4M2NjZjE4OGUxMzkwLmJpbmRQb3B1cChwb3B1cF9kYTY0YWM5ZDdkMDI0Y2UwYmI3ZGE4YmZlNTUzZjVjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZWNjMDFkNDc2YzE0YThlODBhMTdkYTE0ZmFkMmE1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODY5MTYyLC00My45NTk5OTUzMTQ4ODQ4NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY4MGQ2MzA5NzYzNDFmNGI4NzBiNDM2MDQ2MGY0YWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDJhZGU2YTUxNGJkNDg5ZThkYWU5Mjc2ZGY5NDNkNTYgPSAkKCc8ZGl2IGlkPSJodG1sXzQyYWRlNmE1MTRiZDQ4OWU4ZGFlOTI3NmRmOTQzZDU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FUk1FTElOREEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjgwZDYzMDk3NjM0MWY0Yjg3MGI0MzYwNDYwZjRhZi5zZXRDb250ZW50KGh0bWxfNDJhZGU2YTUxNGJkNDg5ZThkYWU5Mjc2ZGY5NDNkNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGVjYzAxZDQ3NmMxNGE4ZTgwYTE3ZGExNGZhZDJhNTMuYmluZFBvcHVwKHBvcHVwX2ZmODBkNjMwOTc2MzQxZjRiODcwYjQzNjA0NjBmNGFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1YTY2ZGZmZGZlZTQ0YzA5MTVlNDY5NDI5MDI4ODBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg2Mjc2OTA0OTk5OTk5NywtNDMuOTE4NjczODIyODk0OTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQxZTcyMzg5YTQzNDlhM2I4ZmExYzlkZDM3YzcwNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhiOWJmODJlYzNmNGNhZWE3Y2NkM2RiMWU2ZGIwM2YgPSAkKCc8ZGl2IGlkPSJodG1sXzM4YjliZjgyZWMzZjRjYWVhN2NjZDNkYjFlNmRiMDNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FWU1BUkQgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDFlNzIzODlhNDM0OWEzYjhmYTFjOWRkMzdjNzA3MC5zZXRDb250ZW50KGh0bWxfMzhiOWJmODJlYzNmNGNhZWE3Y2NkM2RiMWU2ZGIwM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjVhNjZkZmZkZmVlNDRjMDkxNWU0Njk0MjkwMjg4MGIuYmluZFBvcHVwKHBvcHVwXzE0MWU3MjM4OWE0MzQ5YTNiOGZhMWM5ZGQzN2M3MDcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4NjljZTUyMTJiMjQ2NTI5MTk3ZGE2YzMyMjQzNjBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3MjQ0NDE1LC00My45MTc0MTIwMjE5OTMxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNjNiNTAyYzdmZDU0MGYyYTNmMDI3YTVjOTcyYmVhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MThkOWRkMTU4Njg0MTQxOWQyNTNhYTJmNjY3MmJhZiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTE4ZDlkZDE1ODY4NDE0MTlkMjUzYWEyZjY2NzJiYWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZFUk5BTyBESUFTIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjYzYjUwMmM3ZmQ1NDBmMmEzZjAyN2E1Yzk3MmJlYWYuc2V0Q29udGVudChodG1sXzkxOGQ5ZGQxNTg2ODQxNDE5ZDI1M2FhMmY2NjcyYmFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4NjljZTUyMTJiMjQ2NTI5MTk3ZGE2YzMyMjQzNjBlLmJpbmRQb3B1cChwb3B1cF8yNjNiNTAyYzdmZDU0MGYyYTNmMDI3YTVjOTcyYmVhZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjRlYjE1Y2RkNTE0YzFkODQyNWI3YmMwYTg3YWEzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45OTQ3NDMwNSwtNDMuOTk5OTA4Mjc4NTY4MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFhMjJjMmU5YjhkNGE3NmJmNDYwNTlkMDg5ZjAxZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdkNmYzMzE2OTY3NDlkNTk2YzdmZGY4MmQzMTgyOWYgPSAkKCc8ZGl2IGlkPSJodG1sXzA3ZDZmMzMxNjk2NzQ5ZDU5NmM3ZmRmODJkMzE4MjlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GTEFWSU8gTUFSUVVFUyBMSVNCT0EgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YWEyMmMyZTliOGQ0YTc2YmY0NjA1OWQwODlmMDFlNi5zZXRDb250ZW50KGh0bWxfMDdkNmYzMzE2OTY3NDlkNTk2YzdmZGY4MmQzMTgyOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTI0ZWIxNWNkZDUxNGMxZDg0MjViN2JjMGE4N2FhMzIuYmluZFBvcHVwKHBvcHVwXzhhYTIyYzJlOWI4ZDRhNzZiZjQ2MDU5ZDA4OWYwMWU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5OGFhYWEzZDYxZDRjNGNhZWZkMGFhOTAxNjQ3MzY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNzEwMjc1LC00My45MzQ4NjI0ODQyMzcwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDM0OTU1M2UyYmU0YWIyOTM3ZjJjY2FiZmRiNzcxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jM2M3NTZlMGUzYTU0MWMwYTZhMDllMjFjY2ZmYTY4OSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzNjNzU2ZTBlM2E1NDFjMGE2YTA5ZTIxY2NmZmE2ODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZMT1JBTUFSIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQzNDk1NTNlMmJlNGFiMjkzN2YyY2NhYmZkYjc3MWIuc2V0Q29udGVudChodG1sX2MzYzc1NmUwZTNhNTQxYzBhNmEwOWUyMWNjZmZhNjg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY5OGFhYWEzZDYxZDRjNGNhZWZkMGFhOTAxNjQ3MzY3LmJpbmRQb3B1cChwb3B1cF82NDM0OTU1M2UyYmU0YWIyOTM3ZjJjY2FiZmRiNzcxYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjFkZGEzMmI0YzU0N2VlOWJkOWZjYWQ3OWZkODU5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDcxNzkzLC00NC4wMDE3MTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiYzRhNTA5ZTEwMzRiMDc5MzJiMTAwMTA4MjFjM2FhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU2OGNlMGUwN2EyYzQzMjZiYTQwMDQxM2Q4OGFjZGIzID0gJCgnPGRpdiBpZD0iaHRtbF81NjhjZTBlMDdhMmM0MzI2YmE0MDA0MTNkODhhY2RiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RlJFSSBFVVNUQVFVSU8gQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYmM0YTUwOWUxMDM0YjA3OTMyYjEwMDEwODIxYzNhYS5zZXRDb250ZW50KGh0bWxfNTY4Y2UwZTA3YTJjNDMyNmJhNDAwNDEzZDg4YWNkYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGYxZGRhMzJiNGM1NDdlZTliZDlmY2FkNzlmZDg1OTguYmluZFBvcHVwKHBvcHVwX2JiYzRhNTA5ZTEwMzRiMDc5MzJiMTAwMTA4MjFjM2FhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwYTM3OTk1OThkMTRlOTJiZThlM2E0MjcyNjA3MmNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMjUyMDgsLTQzLjk4ODYxMzY1NjE2OTEzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzBhNDYwNDBlNmQ0OTAzOTQzMmU2ZmUwYTVmNGFlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDFjODJlMmQ0ZGY0NTA2YTNjMDkwNzFmMTVmZTgxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDQxYzgyZTJkNGRmNDUwNmEzYzA5MDcxZjE1ZmU4MTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBTUVMRUlSQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3MGE0NjA0MGU2ZDQ5MDM5NDMyZTZmZTBhNWY0YWVlLnNldENvbnRlbnQoaHRtbF80NDFjODJlMmQ0ZGY0NTA2YTNjMDkwNzFmMTVmZTgxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MGEzNzk5NTk4ZDE0ZTkyYmU4ZTNhNDI3MjYwNzJjZS5iaW5kUG9wdXAocG9wdXBfODcwYTQ2MDQwZTZkNDkwMzk0MzJlNmZlMGE1ZjRhZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdjYjM0MGFhYjlhNGIxZjg2OTk4ZmFkMzlkMjJmNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODY1NzAxMTAwMDAwMDAzLC00My45MDAwODkyNTg0NjQzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wN2NiYjliOWI5MzY0MDE0YTc0M2YzNWU2ZWM3NGVlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzkzOWFlYTEwYWY0YmVjOTQ0Zjc1MjQzOTQxNTEzZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGM5MzlhZWExMGFmNGJlYzk0NGY3NTI0Mzk0MTUxM2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdPSUFOSUEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wN2NiYjliOWI5MzY0MDE0YTc0M2YzNWU2ZWM3NGVlYi5zZXRDb250ZW50KGh0bWxfOGM5MzlhZWExMGFmNGJlYzk0NGY3NTI0Mzk0MTUxM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTdjYjM0MGFhYjlhNGIxZjg2OTk4ZmFkMzlkMjJmNjMuYmluZFBvcHVwKHBvcHVwXzA3Y2JiOWI5YjkzNjQwMTRhNzQzZjM1ZTZlYzc0ZWViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjZTY3NWI5MTAyMjRiNzNiMWQ1ZmE0MThjMTE3YzJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg0NDEwNDU1LC00My45MjU1MzQzMjMzOTcyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mN2FkODIwZjAwNWU0NjM2OGU0NzNjZTE0ZjMwNzUxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZjQ1MTA5NDZkODk0MWE5OWUzMmMxNTUwYTgxMGNjZCA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Y0NTEwOTQ2ZDg5NDFhOTllMzJjMTU1MGE4MTBjY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdVQVJBTkkgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2FkODIwZjAwNWU0NjM2OGU0NzNjZTE0ZjMwNzUxZS5zZXRDb250ZW50KGh0bWxfN2Y0NTEwOTQ2ZDg5NDFhOTllMzJjMTU1MGE4MTBjY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWNlNjc1YjkxMDIyNGI3M2IxZDVmYTQxOGMxMTdjMmEuYmluZFBvcHVwKHBvcHVwX2Y3YWQ4MjBmMDA1ZTQ2MzY4ZTQ3M2NlMTRmMzA3NTFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0NjY5MGM3MWY2MDQ1ZjZiYjQ3ZWYyMzliYzUwYmI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1Mzg4MTQsLTQzLjk3ODcyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYjZhYzMzMjE5OWU0MWFkYTMyMjRiMmU4MjllMGZlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNWU4YmFhMzBiOWQ0NjJiYjAyNjM1OWI1MDQ2NjA5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTVlOGJhYTMwYjlkNDYyYmIwMjYzNTliNTA0NjYwOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhBVkFJIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I2YWMzMzIxOTllNDFhZGEzMjI0YjJlODI5ZTBmZTQuc2V0Q29udGVudChodG1sX2E1ZThiYWEzMGI5ZDQ2MmJiMDI2MzU5YjUwNDY2MDk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0NjY5MGM3MWY2MDQ1ZjZiYjQ3ZWYyMzliYzUwYmI1LmJpbmRQb3B1cChwb3B1cF8zYjZhYzMzMjE5OWU0MWFkYTMyMjRiMmU4MjllMGZlNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZGNmNWEzZDBmZTM0OWRlYjM4MWZhMDA0NjhlMzRkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NDE2OTM2NSwtNDMuOTM4MTM0OTU5NTQ2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZWU5NDllOGQ4M2Q0NWNiOTA0ZDU3MmYzMTRkNGM0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84Mjc0NTEzMDVhN2Y0MjE4OWE2NmM3ZDkyMmQ1OTU5ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfODI3NDUxMzA1YTdmNDIxODlhNjZjN2Q5MjJkNTk1OWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhFTElPUE9MSVMgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWU5NDllOGQ4M2Q0NWNiOTA0ZDU3MmYzMTRkNGM0MS5zZXRDb250ZW50KGh0bWxfODI3NDUxMzA1YTdmNDIxODlhNjZjN2Q5MjJkNTk1OWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWRjZjVhM2QwZmUzNDlkZWIzODFmYTAwNDY4ZTM0ZGYuYmluZFBvcHVwKHBvcHVwXzJlZTk0OWU4ZDgzZDQ1Y2I5MDRkNTcyZjMxNGQ0YzQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NkNWRjODgxNjliZDQ0YWU5MWEyYzJlMGYzN2I4MGRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMjE3MzI1LC00My45NDY2OTE3MjkwNDUwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNmEwYzdhODg2Nzk0M2ZmYTI1NzgyNzdjMTQwMDRjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTRiNjQ1NWU5Y2I0MGQ1ODkyYjkzYzkzYzc1ZWIyZSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTU0YjY0NTVlOWNiNDBkNTg5MmI5M2M5M2M3NWViMmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklBUEkgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNmEwYzdhODg2Nzk0M2ZmYTI1NzgyNzdjMTQwMDRjNS5zZXRDb250ZW50KGh0bWxfOTU0YjY0NTVlOWNiNDBkNTg5MmI5M2M5M2M3NWViMmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Q1ZGM4ODE2OWJkNDRhZTkxYTJjMmUwZjM3YjgwZGYuYmluZFBvcHVwKHBvcHVwX2M2YTBjN2E4ODY3OTQzZmZhMjU3ODI3N2MxNDAwNGM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExN2I0ZjJiMGVhNzQwNWI5ODVkOTU0MTZlNDkxOTRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwNjkyNzY5OTk5OTk5NywtNDMuOTk4MTMxMzEyOTUxNTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxYzJlZjA3YWUzMzQzZTI5ZWQ5ZTkzMDYzNDYzYzczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5Mzg2NzdmMzM4YzRmYzhhZDllMzhjMzBkNDc0MDIyID0gJCgnPGRpdiBpZD0iaHRtbF9lOTM4Njc3ZjMzOGM0ZmM4YWQ5ZTM4YzMwZDQ3NDAyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SU5DT05GSURFTkNJQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxYzJlZjA3YWUzMzQzZTI5ZWQ5ZTkzMDYzNDYzYzczLnNldENvbnRlbnQoaHRtbF9lOTM4Njc3ZjMzOGM0ZmM4YWQ5ZTM4YzMwZDQ3NDAyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTdiNGYyYjBlYTc0MDViOTg1ZDk1NDE2ZTQ5MTk0YS5iaW5kUG9wdXAocG9wdXBfZDFjMmVmMDdhZTMzNDNlMjllZDllOTMwNjM0NjNjNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWY2NGUxYjQzMzNkNDkxYjg0YzYwZWNmNDFhMTk3ODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTY3OTI2MywtNDMuOTc3MDgzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzI3MTg4ZjJiNTI0MWI4OGY4ZTcwMWRhMzhjYzk5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OGJhNzEwY2JkMmI0ODJjYTZkODljMTY0OWY4MjUzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzhiYTcxMGNiZDJiNDgyY2E2ZDg5YzE2NDlmODI1M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNVTkhBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzcyNzE4OGYyYjUyNDFiODhmOGU3MDFkYTM4Y2M5OTguc2V0Q29udGVudChodG1sXzc4YmE3MTBjYmQyYjQ4MmNhNmQ4OWMxNjQ5ZjgyNTNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmNjRlMWI0MzMzZDQ5MWI4NGM2MGVjZjQxYTE5NzgxLmJpbmRQb3B1cChwb3B1cF83NzI3MTg4ZjJiNTI0MWI4OGY4ZTcwMWRhMzhjYzk5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDk3MzU0NzA3NDM0MzNhODJjNDM4ODAwMjAyYzIxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTIwMjE0LC00My45OTg1MjI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlZmJiMTNkMWUyYTRkZGE5ZTg3ZGEyNjFjMzJlYjU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiMDBlNWRhYmRlODQ2Y2VhNGQyNTJlZmQ0NWYxZmFhID0gJCgnPGRpdiBpZD0iaHRtbF8zYjAwZTVkYWJkZTg0NmNlYTRkMjUyZWZkNDVmMWZhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVBBTkVNQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlZmJiMTNkMWUyYTRkZGE5ZTg3ZGEyNjFjMzJlYjU2LnNldENvbnRlbnQoaHRtbF8zYjAwZTVkYWJkZTg0NmNlYTRkMjUyZWZkNDVmMWZhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MDk3MzU0NzA3NDM0MzNhODJjNDM4ODAwMjAyYzIxOS5iaW5kUG9wdXAocG9wdXBfNGVmYmIxM2QxZTJhNGRkYTllODdkYTI2MWMzMmViNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIxOTE3NWQ2MzlkNDRlOGIwYTc3YTkwNThhYTIzZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODgxNzc0NiwtNDMuOTMyMjY1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjdhYjhkNmRmMmI0ZTE5ODc4NTY3YTgwZDliMzE4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80Y2JhZTA4ODEwMzc0N2QzYjBlNDVkZGNlZjg1MTk1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNGNiYWUwODgxMDM3NDdkM2IwZTQ1ZGRjZWY4NTE5NTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklQSVJBTkdBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY3YWI4ZDZkZjJiNGUxOTg3ODU2N2E4MGQ5YjMxODMuc2V0Q29udGVudChodG1sXzRjYmFlMDg4MTAzNzQ3ZDNiMGU0NWRkY2VmODUxOTU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiMTkxNzVkNjM5ZDQ0ZThiMGE3N2E5MDU4YWEyM2U0LmJpbmRQb3B1cChwb3B1cF8xNjdhYjhkNmRmMmI0ZTE5ODc4NTY3YTgwZDliMzE4Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2I5YTM4OGM3YWI0OGRhYjE3Nzc5MGM5MjY1M2VhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTc0NzIzNSwtNDMuOTg4ODM1NTEzODY0ODU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwZGE3YzBlYTQ0ZDQ3MmE4YmZkZDhmYWMzYTdjMDJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmNjRkNjFlOTk2NDQ2MmU4MGZiMTMzYzdhYjE5NzJiID0gJCgnPGRpdiBpZD0iaHRtbF8wZjY0ZDYxZTk5NjQ0NjJlODBmYjEzM2M3YWIxOTcyYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEFMVk9SQURBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBkYTdjMGVhNDRkNDcyYThiZmRkOGZhYzNhN2MwMmUuc2V0Q29udGVudChodG1sXzBmNjRkNjFlOTk2NDQ2MmU4MGZiMTMzYzdhYjE5NzJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3YjlhMzg4YzdhYjQ4ZGFiMTc3NzkwYzkyNjUzZWE1LmJpbmRQb3B1cChwb3B1cF8zMGRhN2MwZWE0NGQ0NzJhOGJmZGQ4ZmFjM2E3YzAyZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jN2ViZjUxYzE0NGI0N2U0YTg2ZDE0NjQwZjI0MTlhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDcyMjE5NSwtNDMuOTgxNjM3MjYwNzcxNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJlMjEyNTEyZWJkNGE3YWJlNGMzY2RjY2JkNDE0ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM3YzRiZjFjNWE2NDQ3ZDgwNjNlMGFkYzJjNDlmNmYgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjN2M0YmYxYzVhNjQ0N2Q4MDYzZTBhZGMyYzQ5ZjZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJESU0gTU9OVEFOSEVTIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGJlMjEyNTEyZWJkNGE3YWJlNGMzY2RjY2JkNDE0ZDMuc2V0Q29udGVudChodG1sX2ZjN2M0YmYxYzVhNjQ0N2Q4MDYzZTBhZGMyYzQ5ZjZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M3ZWJmNTFjMTQ0YjQ3ZTRhODZkMTQ2NDBmMjQxOWE1LmJpbmRQb3B1cChwb3B1cF80YmUyMTI1MTJlYmQ0YTdhYmU0YzNjZGNjYmQ0MTRkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjFlYTBiZDg1M2Q0ZDYwYTY0NGQ1ZDY0MGRlOTFjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDE4ODQ0LC00NC4wMDMwNTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0MjMwNDAyYzc4MzQyZmU5NDliYWRhYjNiNmE1YTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyNDZhNTNkOWZlNDRjNDBiODY2NjQ5MzI0NzcwNzMwID0gJCgnPGRpdiBpZD0iaHRtbF9lMjQ2YTUzZDlmZTQ0YzQwYjg2NjY0OTMyNDc3MDczMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElOT1BPTElTIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQyMzA0MDJjNzgzNDJmZTk0OWJhZGFiM2I2YTVhNTEuc2V0Q29udGVudChodG1sX2UyNDZhNTNkOWZlNDRjNDBiODY2NjQ5MzI0NzcwNzMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyMWVhMGJkODUzZDRkNjBhNjQ0ZDVkNjQwZGU5MWMyLmJpbmRQb3B1cChwb3B1cF9lNDIzMDQwMmM3ODM0MmZlOTQ5YmFkYWIzYjZhNWE1MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lN2Y3ZWYxNzI3YmI0YzNhOTFhOTQ2MTc1MzEyNzlmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjIzOTExLC00My45NTg2NTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExZTM3ZjViZTMxZjQ1OTY5YjQzMmFkNDMzMjFkYTU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2ZDU1ZGE3ZDM5OTQ3ZjQ4OGRiMGMyOWQ1Yjc4YTc1ID0gJCgnPGRpdiBpZD0iaHRtbF85NmQ1NWRhN2QzOTk0N2Y0ODhkYjBjMjlkNWI3OGE3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEVCTE9OIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTFlMzdmNWJlMzFmNDU5NjliNDMyYWQ0MzMyMWRhNTUuc2V0Q29udGVudChodG1sXzk2ZDU1ZGE3ZDM5OTQ3ZjQ4OGRiMGMyOWQ1Yjc4YTc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3ZjdlZjE3MjdiYjRjM2E5MWE5NDYxNzUzMTI3OWYzLmJpbmRQb3B1cChwb3B1cF8xMWUzN2Y1YmUzMWY0NTk2OWI0MzJhZDQzMzIxZGE1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mzk1Nzg1YTZmMWI0OWE4OTk1OTE2NTRlOTljMDUzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTg5MDU3LC00My45ODEwMjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5ZmJkZGY3NGMzMjRmNGFhMDI4ZjVkZWI1NjRmMzBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2ODY2Yzc4YmJjMzRjNjI4NDYwOGZmYjQ1YjY1NDQyID0gJCgnPGRpdiBpZD0iaHRtbF84Njg2NmM3OGJiYzM0YzYyODQ2MDhmZmI0NWI2NTQ0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSQUpPIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTlmYmRkZjc0YzMyNGY0YWEwMjhmNWRlYjU2NGYzMGIuc2V0Q29udGVudChodG1sXzg2ODY2Yzc4YmJjMzRjNjI4NDYwOGZmYjQ1YjY1NDQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzOTU3ODVhNmYxYjQ5YTg5OTU5MTY1NGU5OWMwNTM4LmJpbmRQb3B1cChwb3B1cF85OWZiZGRmNzRjMzI0ZjRhYTAyOGY1ZGViNTY0ZjMwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDdhNDg0M2VkMTM0MzFjYjQwNWY3MThlNTkzYzA3MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44Njg3MzEwNSwtNDMuOTMzNzU4NTQ1ODg2MjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkYTk2OWYzZDk2ZDQwMTNiYTczNjQ4MjZlY2M3ZmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczYmEyYTk0MjBiZTQwMTA5MTkzZjZjYzE1ZjExNjk4ID0gJCgnPGRpdiBpZD0iaHRtbF83M2JhMmE5NDIwYmU0MDEwOTE5M2Y2Y2MxNWYxMTY5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSSUEgVklSR0lOSUEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZGE5NjlmM2Q5NmQ0MDEzYmE3MzY0ODI2ZWNjN2ZmNC5zZXRDb250ZW50KGh0bWxfNzNiYTJhOTQyMGJlNDAxMDkxOTNmNmNjMTVmMTE2OTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjQ3YTQ4NDNlZDEzNDMxY2I0MDVmNzE4ZTU5M2MwNzEuYmluZFBvcHVwKHBvcHVwX2NkYTk2OWYzZDk2ZDQwMTNiYTczNjQ4MjZlY2M3ZmY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4ZjUzZWJhNDA4MTRjMjBhYTNkMjM2MWQ3OWE0YjEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk4MDUwNTYsLTQ0LjAwMTgzMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjMwNWVhNjQ3N2E1NDQ3NGFiNDYxMjk2YjM0ODQ3MzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODA4ZGJlYjYzYmFmNDU4Nzg0ZjJjYmViYmRkMjE4NjYgPSAkKCc8ZGl2IGlkPSJodG1sXzgwOGRiZWI2M2JhZjQ1ODc4NGYyY2JlYmJkZDIxODY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSUxJT05BUklPUyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzMDVlYTY0NzdhNTQ0NzRhYjQ2MTI5NmIzNDg0NzM1LnNldENvbnRlbnQoaHRtbF84MDhkYmViNjNiYWY0NTg3ODRmMmNiZWJiZGQyMTg2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOGY1M2ViYTQwODE0YzIwYWEzZDIzNjFkNzlhNGIxMy5iaW5kUG9wdXAocG9wdXBfZjMwNWVhNjQ3N2E1NDQ3NGFiNDYxMjk2YjM0ODQ3MzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVkMDA5MWRhMGZkNDE1NTk1ZTJiYTE0MWUxYzhhNjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODUyMTAzMjUsLTQzLjkzMDc5MDk2Mzg5MzIxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYzZkZGU3Njc3Njc0YjMyYjNjNmQ5ZWRiM2FiYzkzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzFjNTYyNTcyYWM0YzI0ODgxY2YzMGYzZjQ0NTI5MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzMxYzU2MjU3MmFjNGMyNDg4MWNmMzBmM2Y0NDUyOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTkFTTEFORElBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmM2ZGRlNzY3NzY3NGIzMmIzYzZkOWVkYjNhYmM5MzEuc2V0Q29udGVudChodG1sXzMzMWM1NjI1NzJhYzRjMjQ4ODFjZjMwZjNmNDQ1MjkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y1ZDAwOTFkYTBmZDQxNTU5NWUyYmExNDFlMWM4YTY3LmJpbmRQb3B1cChwb3B1cF9mYzZkZGU3Njc3Njc0YjMyYjNjNmQ5ZWRiM2FiYzkzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZGRlYTFmNDcwYzM0MmU4YWE0NmNkODg0OTBhOTczNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTE1NTAwOTk5OTk5OTcsLTQzLjg5NjI5Mjk0ODQ2OTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2NmVjMDkyNTI4ZDQ2MWQ4N2E1NjA0NmVkOTQ0YjNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlNDAzYzNlMmU3YTQ5NjQ4ZTMxYWM2MGVhZmEzNTUwID0gJCgnPGRpdiBpZD0iaHRtbF9hZTQwM2MzZTJlN2E0OTY0OGUzMWFjNjBlYWZhMzU1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkFaQVJFIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDY2ZWMwOTI1MjhkNDYxZDg3YTU2MDQ2ZWQ5NDRiM2Iuc2V0Q29udGVudChodG1sX2FlNDAzYzNlMmU3YTQ5NjQ4ZTMxYWM2MGVhZmEzNTUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkZGVhMWY0NzBjMzQyZThhYTQ2Y2Q4ODQ5MGE5NzM2LmJpbmRQb3B1cChwb3B1cF8wNjZlYzA5MjUyOGQ0NjFkODdhNTYwNDZlZDk0NGIzYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZmIxOTEzMjc2MWI0OWJhYTQ5NDYyMWRmM2M5NDRlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODQwMTQyOTk5OTk5OTcsLTQzLjk1NjMzOTY5MTc3MjA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEzOTI0ODA2YmI5ZjRiYzhiNTQzZmQ5MGFkZWY5ZTk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0NTBkYjVkYjVkNjQyMjFiZjIwMzU4Nzg2ZDUxNjdhID0gJCgnPGRpdiBpZD0iaHRtbF9mNDUwZGI1ZGI1ZDY0MjIxYmYyMDM1ODc4NmQ1MTY3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9WQSBDQUNIT0VJUklOSEEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMzkyNDgwNmJiOWY0YmM4YjU0M2ZkOTBhZGVmOWU5OS5zZXRDb250ZW50KGh0bWxfZjQ1MGRiNWRiNWQ2NDIyMWJmMjAzNTg3ODZkNTE2N2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGZiMTkxMzI3NjFiNDliYWE0OTQ2MjFkZjNjOTQ0ZWIuYmluZFBvcHVwKHBvcHVwXzEzOTI0ODA2YmI5ZjRiYzhiNTQzZmQ5MGFkZWY5ZTk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1ZmU4OTBlY2U1NTQ2YTA5ZTVkOTM5ZjIxZTgwZWYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0OTc3OTI1LC00My45OTE2ODQ0Njg2MjM5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NjVkMjQ0ODI5MTE0MGRlYWYxYmVjZjRkZDZiOWYxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MWU5NGEzOGMzYjk0NWEzYWIzMjQwOGM4Mjg5ZjRmMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTFlOTRhMzhjM2I5NDVhM2FiMzI0MDhjODI4OWY0ZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgQ0lOVFJBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzY1ZDI0NDgyOTExNDBkZWFmMWJlY2Y0ZGQ2YjlmMTcuc2V0Q29udGVudChodG1sXzkxZTk0YTM4YzNiOTQ1YTNhYjMyNDA4YzgyODlmNGYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM1ZmU4OTBlY2U1NTQ2YTA5ZTVkOTM5ZjIxZTgwZWYxLmJpbmRQb3B1cChwb3B1cF83NjVkMjQ0ODI5MTE0MGRlYWYxYmVjZjRkZDZiOWYxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDNmNTNiNGVmMTU0ZDUxOWQyNzAyYTgwMjM2ZGQ4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTk0MDUyLC00My45NTkzODMxNjc1MjAzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2ZlM2JhY2NlYjE0M2M3ODU1ZTMwYjEzMTdlMzZhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2VmNThmZjUwMDc0ZTFjOTMyMjU5Zjg1YWE2NDhjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdlZjU4ZmY1MDA3NGUxYzkzMjI1OWY4NWFhNjQ4YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgRVNQRVJBTkNBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdmZTNiYWNjZWIxNDNjNzg1NWUzMGIxMzE3ZTM2YTMuc2V0Q29udGVudChodG1sXzA3ZWY1OGZmNTAwNzRlMWM5MzIyNTlmODVhYTY0OGM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0M2Y1M2I0ZWYxNTRkNTE5ZDI3MDJhODAyMzZkZDhkLmJpbmRQb3B1cChwb3B1cF9kN2ZlM2JhY2NlYjE0M2M3ODU1ZTMwYjEzMTdlMzZhMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGU4YTcyNWUzNWQ0YmIxODM1NzM1MGZhZmJiODJjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDE3OTcyLC00My45OTI2ODY3MjI0NTA1MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM4NTY5OTM5YzNmNDdhNThjOGE5MTFmYzMwY2E3NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmYwYjZmY2E4NmNlNGVjY2IyNGQ5MzZhZDI0NzQyZDEgPSAkKCc8ZGl2IGlkPSJodG1sX2JmMGI2ZmNhODZjZTRlY2NiMjRkOTM2YWQyNDc0MmQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEdBTUVMRUlSQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljODU2OTkzOWMzZjQ3YTU4YzhhOTExZmMzMGNhNzcwLnNldENvbnRlbnQoaHRtbF9iZjBiNmZjYTg2Y2U0ZWNjYjI0ZDkzNmFkMjQ3NDJkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMGU4YTcyNWUzNWQ0YmIxODM1NzM1MGZhZmJiODJjOC5iaW5kUG9wdXAocG9wdXBfOWM4NTY5OTM5YzNmNDdhNThjOGE5MTFmYzMwY2E3NzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZlNWVjYTFjMjEzNDUyMmEwYzNmNDI5M2NjMjI4YjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg4MDY3NTUwMDAwMDAyLC00My44OTgwMzAyNTExOTIyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTRkZWUxMWMyYWI0ZTQ1OTg2OGQxMmFmZTJlMDY3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZGMzYTJmMjBmNjQ0NTc0OGM1M2UwOTQ3ZTBmNWQ2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2RjM2EyZjIwZjY0NDU3NDhjNTNlMDk0N2UwZjVkNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgVklTVEEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTRkZWUxMWMyYWI0ZTQ1OTg2OGQxMmFmZTJlMDY3MC5zZXRDb250ZW50KGh0bWxfY2RjM2EyZjIwZjY0NDU3NDhjNTNlMDk0N2UwZjVkNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjZlNWVjYTFjMjEzNDUyMmEwYzNmNDI5M2NjMjI4YjQuYmluZFBvcHVwKHBvcHVwX2I1NGRlZTExYzJhYjRlNDU5ODY4ZDEyYWZlMmUwNjcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3YmQyMTFkZWY4MTQ3NDJiMmZiNjcyYzhiMzJlMDFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk5MDA0NTgsLTQzLjk2MzEyNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU4MzlmNjI1MzU0NGU2Y2I4ZWJiOTU3ZGMzNTgzN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmVjY2Q0ODg1ZDYxNGMzMmE0MWY0NjdmM2M3MDM3NDQgPSAkKCc8ZGl2IGlkPSJodG1sX2ZlY2NkNDg4NWQ2MTRjMzJhNDFmNDY3ZjNjNzAzNzQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PTEhPUyBEJiMzOTtBR1VBIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU4MzlmNjI1MzU0NGU2Y2I4ZWJiOTU3ZGMzNTgzN2Uuc2V0Q29udGVudChodG1sX2ZlY2NkNDg4NWQ2MTRjMzJhNDFmNDY3ZjNjNzAzNzQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3YmQyMTFkZWY4MTQ3NDJiMmZiNjcyYzhiMzJlMDFhLmJpbmRQb3B1cChwb3B1cF84NTgzOWY2MjUzNTQ0ZTZjYjhlYmI5NTdkYzM1ODM3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTQ5MDBiNzAyYzA0MWEwYjc3MjI1NGM1MmY5NWU5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NzU1MDMyLC00My45ODM3MzU3MTk4NDkwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDBkODQ1ODk1MzE0MmEyYjU4NjIxNjZmNzk5ODMyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZWU3ZGZkYzYxNWM0YWYwOTBhMDRjNzY0ZmMxYzMzZCA9ICQoJzxkaXYgaWQ9Imh0bWxfN2VlN2RmZGM2MTVjNGFmMDkwYTA0Yzc2NGZjMWMzM2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBTE1FSVJBUyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkMGQ4NDU4OTUzMTQyYTJiNTg2MjE2NmY3OTk4MzIwLnNldENvbnRlbnQoaHRtbF83ZWU3ZGZkYzYxNWM0YWYwOTBhMDRjNzY0ZmMxYzMzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZTQ5MDBiNzAyYzA0MWEwYjc3MjI1NGM1MmY5NWU5NC5iaW5kUG9wdXAocG9wdXBfNWQwZDg0NTg5NTMxNDJhMmI1ODYyMTY2Zjc5OTgzMjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNlNWMwMDU0YzcwNGE1YThjMGVhODhhMjNlMTA3NDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTIyNDUzMzQ5OTk5OTk4LC00My45MDQ4Njc0OTY2MDgxNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRiNGU1NWEwY2MwNDdkY2E0NDBmM2I2NjViNTFhNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzE1NGViZjRkYTFiNDIyM2FjMTljMTY5NTA4NmM2NDUgPSAkKCc8ZGl2IGlkPSJodG1sXzMxNTRlYmY0ZGExYjQyMjNhYzE5YzE2OTUwODZjNjQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVJBSVNPIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTRiNGU1NWEwY2MwNDdkY2E0NDBmM2I2NjViNTFhNDAuc2V0Q29udGVudChodG1sXzMxNTRlYmY0ZGExYjQyMjNhYzE5YzE2OTUwODZjNjQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjZTVjMDA1NGM3MDRhNWE4YzBlYTg4YTIzZTEwNzQ4LmJpbmRQb3B1cChwb3B1cF9lNGI0ZTU1YTBjYzA0N2RjYTQ0MGYzYjY2NWI1MWE0MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzU1ZDEwZTkyNjg0YmQ1OTAzMDhiZDM3MGVhYmVhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTA4MDM3LC00My45NTI2MDgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiMWFkN2M0NGZjODQ4NmZhYmZmNzQ1OTliNGRjMTI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4NDk0MDJhZGI2ZjQwNmM4Y2RjOWRlZGEyZGY3ZWM1ID0gJCgnPGRpdiBpZD0iaHRtbF9hODQ5NDAyYWRiNmY0MDZjOGNkYzlkZWRhMmRmN2VjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFSUVVFIFJJQUNIVUVMTyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiMWFkN2M0NGZjODQ4NmZhYmZmNzQ1OTliNGRjMTI3LnNldENvbnRlbnQoaHRtbF9hODQ5NDAyYWRiNmY0MDZjOGNkYzlkZWRhMmRmN2VjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzU1ZDEwZTkyNjg0YmQ1OTAzMDhiZDM3MGVhYmVhYS5iaW5kUG9wdXAocG9wdXBfMmIxYWQ3YzQ0ZmM4NDg2ZmFiZmY3NDU5OWI0ZGMxMjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDU5MWE2MzI4NTU1NDAxMjhjNTM2NDBlNDIzNzZmNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ1MzU0LC00My45OTQ5NTQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxM2Q3YmQyOWI2MjQzMTk4YjdmNTU1OTBiMGE4ZmU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0ZDJmM2M5Njk2ODRkYWI5NjZjNzY4MjczYTVhNzQxID0gJCgnPGRpdiBpZD0iaHRtbF8yNGQyZjNjOTY5Njg0ZGFiOTY2Yzc2ODI3M2E1YTc0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFUUk9DSU5JTyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxM2Q3YmQyOWI2MjQzMTk4YjdmNTU1OTBiMGE4ZmU0LnNldENvbnRlbnQoaHRtbF8yNGQyZjNjOTY5Njg0ZGFiOTY2Yzc2ODI3M2E1YTc0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTkxYTYzMjg1NTU0MDEyOGM1MzY0MGU0MjM3NmY0ZC5iaW5kUG9wdXAocG9wdXBfMDEzZDdiZDI5YjYyNDMxOThiN2Y1NTU5MGIwYThmZTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNmNGVjY2FiNTM3NDFlYTk3ODdiNzdhZmRhOGVmYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQwNjk3NSwtNDMuODkxMTA4NTYwNTU1NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWRjZmVlZWRmMjY2NGIwMjhkZDE0ZGQxNjQ0YTEzMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzRjNjEwMzA0MTgxNGJhYzlhOTQ4Y2JlMGVkYmNhNWIgPSAkKCc8ZGl2IGlkPSJodG1sX2M0YzYxMDMwNDE4MTRiYWM5YTk0OGNiZTBlZGJjYTViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVVMTyBWSSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkY2ZlZWVkZjI2NjRiMDI4ZGQxNGRkMTY0NGExMzA4LnNldENvbnRlbnQoaHRtbF9jNGM2MTAzMDQxODE0YmFjOWE5NDhjYmUwZWRiY2E1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81M2Y0ZWNjYWI1Mzc0MWVhOTc4N2I3N2FmZGE4ZWZiMy5iaW5kUG9wdXAocG9wdXBfOWRjZmVlZWRmMjY2NGIwMjhkZDE0ZGQxNjQ0YTEzMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDkzM2Q2ZGE5NDI2NGU3YjgxZjhmMzkwYTA4YzBlZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTAyMTI2OSwtNDMuOTQ5Nzk3ODU0NDc2NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWJlZDQ3OTM1OWQyNDUzZGEwZTg0MGU4MDA3NGY0NDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWRmZWUzZGRhNWY2NDNhNDhhMjY3NDc0ZDY3M2U0ODggPSAkKCc8ZGl2IGlkPSJodG1sXzFkZmVlM2RkYTVmNjQzYTQ4YTI2NzQ3NGQ2NzNlNDg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QRURSRUlSQSBQUkFETyBMT1BFUyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViZWQ0NzkzNTlkMjQ1M2RhMGU4NDBlODAwNzRmNDQ4LnNldENvbnRlbnQoaHRtbF8xZGZlZTNkZGE1ZjY0M2E0OGEyNjc0NzRkNjczZTQ4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OTMzZDZkYTk0MjY0ZTdiODFmOGYzOTBhMDhjMGVmNS5iaW5kUG9wdXAocG9wdXBfZWJlZDQ3OTM1OWQyNDUzZGEwZTg0MGU4MDA3NGY0NDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWJhYjFiMzliM2ZmNGIzMTgzMmZlNWEyZmY4M2QwZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODY2MDQwNzUsLTQzLjkxNzYxMzc3MzIzNTgxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzdmZDczY2Y3MmU0NzFhYTAzNjNhZTJmYzgzZWNmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOTQ3OTFhNDJkNDI0NTBhOWJjOWNhOGQzODI5Y2NjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjk0NzkxYTQyZDQyNDUwYTliYzljYThkMzgyOWNjY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBJUkFKQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzN2ZkNzNjZjcyZTQ3MWFhMDM2M2FlMmZjODNlY2ZmLnNldENvbnRlbnQoaHRtbF9iOTQ3OTFhNDJkNDI0NTBhOWJjOWNhOGQzODI5Y2NjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYmFiMWIzOWIzZmY0YjMxODMyZmU1YTJmZjgzZDBlNC5iaW5kUG9wdXAocG9wdXBfMzM3ZmQ3M2NmNzJlNDcxYWEwMzYzYWUyZmM4M2VjZmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWE5ZjUzNGNkMDdiNDI2N2JmOWZkMWJlMzc1YWE1NTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYwOTc2ODk5OTk5OTk3LC00My45MjkwNTQ2NjE5OTc0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZGM0OGY0OTYxOGY0OGE2YWJjNGE3NjhiMjFlMTFkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lN2Y4OGZiMjFmMjQ0MWQ2ODRiZGUwMDA2ZGQyZmY4MCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTdmODhmYjIxZjI0NDFkNjg0YmRlMDAwNmRkMmZmODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBSSU1FSVJPIERFIE1BSU8gQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGM0OGY0OTYxOGY0OGE2YWJjNGE3NjhiMjFlMTFkYy5zZXRDb250ZW50KGh0bWxfZTdmODhmYjIxZjI0NDFkNjg0YmRlMDAwNmRkMmZmODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWE5ZjUzNGNkMDdiNDI2N2JmOWZkMWJlMzc1YWE1NTcuYmluZFBvcHVwKHBvcHVwX2VkYzQ4ZjQ5NjE4ZjQ4YTZhYmM0YTc2OGIyMWUxMWRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmZjRkY2E4YzVlZDRlMzdhYWMwNjhkNGY4ZmNhMjg3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1NjE1NzI1MDAwMDAwMywtNDMuOTI2MjMxMDE5NTMzMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQ4NWEwNzU4N2MwNDI1MGIzNjUwZTY3YWMyNmMxY2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGYzNmU3M2Q4MTk4NDBhMDkzMTVmNzY1ODJlN2I3ZTAgPSAkKCc8ZGl2IGlkPSJodG1sX2RmMzZlNzNkODE5ODQwYTA5MzE1Zjc2NTgyZTdiN2UwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QUk9WSURFTkNJQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0ODVhMDc1ODdjMDQyNTBiMzY1MGU2N2FjMjZjMWNjLnNldENvbnRlbnQoaHRtbF9kZjM2ZTczZDgxOTg0MGEwOTMxNWY3NjU4MmU3YjdlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZmY0ZGNhOGM1ZWQ0ZTM3YWFjMDY4ZDRmOGZjYTI4Ny5iaW5kUG9wdXAocG9wdXBfMjQ4NWEwNzU4N2MwNDI1MGIzNjUwZTY3YWMyNmMxY2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQ4ZWM4ZTNlY2RjNGFhMzhhZjk2NWYxN2Y0NzVlY2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTY3MjU0NiwtNDMuOTQyMzU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWY3ZTdiNzFhZjQ0YWFmYjRjMWQwZTUxNDE1NTY1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YzEyODhhOThhNjk0MjY5OGE5MWYxZTc4N2U0MTBmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmMxMjg4YTk4YTY5NDI2OThhOTFmMWU3ODdlNDEwZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFR0lOQSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlZjdlN2I3MWFmNDRhYWZiNGMxZDBlNTE0MTU1NjU1LnNldENvbnRlbnQoaHRtbF82YzEyODhhOThhNjk0MjY5OGE5MWYxZTc4N2U0MTBmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNDhlYzhlM2VjZGM0YWEzOGFmOTY1ZjE3ZjQ3NWVjZi5iaW5kUG9wdXAocG9wdXBfN2VmN2U3YjcxYWY0NGFhZmI0YzFkMGU1MTQxNTU2NTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI0YTQ1Yzg1Mzg3NGU3MWE3Mjg5OWY1NzMwMzY3NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQzMTQ1NTUsLTQzLjk4Mjk2MzY4NTk4NDI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwOTJhZTc5NWM2MDRjNzM4YmVjMGI4MmNhM2U1MTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkZDZiZTgyMjZlZDQ2Y2FhYzg0MmQyYzM0MjQ2ZGY0ID0gJCgnPGRpdiBpZD0iaHRtbF8wZGQ2YmU4MjI2ZWQ0NmNhYWM4NDJkMmMzNDI0NmRmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FMR0FETyBGSUxITyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwOTJhZTc5NWM2MDRjNzM4YmVjMGI4MmNhM2U1MTEwLnNldENvbnRlbnQoaHRtbF8wZGQ2YmU4MjI2ZWQ0NmNhYWM4NDJkMmMzNDI0NmRmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYjRhNDVjODUzODc0ZTcxYTcyODk5ZjU3MzAzNjc0Ni5iaW5kUG9wdXAocG9wdXBfNzA5MmFlNzk1YzYwNGM3MzhiZWMwYjgyY2EzZTUxMTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWRiZjFhNTM0NzE2NGUzNjhmY2VmY2VjODQwNWY5ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODc5MDAxMywtNDMuOTQxMTA1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYjFhZDM4Y2JjNGM0YzA4YjJmM2NlODdmNTI2ZGUyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Y2M5OWVmYjgzNTk0YzM3OTBjM2Y3YTM1MjcxNjE3NiA9ICQoJzxkaXYgaWQ9Imh0bWxfNmNjOTllZmI4MzU5NGMzNzkwYzNmN2EzNTI3MTYxNzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIENSVVogQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYjFhZDM4Y2JjNGM0YzA4YjJmM2NlODdmNTI2ZGUyMy5zZXRDb250ZW50KGh0bWxfNmNjOTllZmI4MzU5NGMzNzkwYzNmN2EzNTI3MTYxNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWRiZjFhNTM0NzE2NGUzNjhmY2VmY2VjODQwNWY5ZDMuYmluZFBvcHVwKHBvcHVwXzJiMWFkMzhjYmM0YzRjMDhiMmYzY2U4N2Y1MjZkZTIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3ZTFhMWEwM2UwZDQ0OGQ4NGRkZjIwZjk2NzM0NzAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3MTMyNTMsLTQ0LjAwNDA2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M4NjEzYjNmMmRhNGExOWE4NTBmY2Y4ZmI5YzNmNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDY4YTZlZTdhNTdkNDZjNTkwNTU4YjA5MGQ0NDFlNjMgPSAkKCc8ZGl2IGlkPSJodG1sX2Q2OGE2ZWU3YTU3ZDQ2YzU5MDU1OGIwOTBkNDQxZTYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBURVJFWklOSEEgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzg2MTNiM2YyZGE0YTE5YTg1MGZjZjhmYjljM2Y2Ni5zZXRDb250ZW50KGh0bWxfZDY4YTZlZTdhNTdkNDZjNTkwNTU4YjA5MGQ0NDFlNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDdlMWExYTAzZTBkNDQ4ZDg0ZGRmMjBmOTY3MzQ3MDIuYmluZFBvcHVwKHBvcHVwX2NjODYxM2IzZjJkYTRhMTlhODUwZmNmOGZiOWMzZjY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkODZmYzA2MjcyZTQ3Zjc5ZjQ5NWUxMDljZTc5ZWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMjk5ODIsLTQzLjk1NDAwNTU4MzkzMjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5NjQ5ZGRmZjM1NjQyN2FhZDc4NGZiMDdhZGUzMjlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyNmE2NTE3M2E1MzRkZjJiMjQ5NGZiZmEyMWE0MjRhID0gJCgnPGRpdiBpZD0iaHRtbF8yMjZhNjUxNzNhNTM0ZGYyYjI0OTRmYmZhMjFhNDI0YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FOVE8gQU5EUkUgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTY0OWRkZmYzNTY0MjdhYWQ3ODRmYjA3YWRlMzI5YS5zZXRDb250ZW50KGh0bWxfMjI2YTY1MTczYTUzNGRmMmIyNDk0ZmJmYTIxYTQyNGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQ4NmZjMDYyNzJlNDdmNzlmNDk1ZTEwOWNlNzllZGIuYmluZFBvcHVwKHBvcHVwXzQ5NjQ5ZGRmZjM1NjQyN2FhZDc4NGZiMDdhZGUzMjlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxYzFjZDA0OTc3MjQxYjZhZGZmMzhkNTgwYzA4NzcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1MDMwMzcsLTQzLjkzNzk4ODQ2MDUyNDc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyZmQ0MTQ4ZGZiMTRmNTliZGQzY2E0MzQ4OTZkZDI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkNTcxYTBiZGQwNDQ4YjM4MzU0Y2FiMGVhODViYmYwID0gJCgnPGRpdiBpZD0iaHRtbF8yZDU3MWEwYmRkMDQ0OGIzODM1NGNhYjBlYTg1YmJmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBCRVJOQVJETyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyZmQ0MTQ4ZGZiMTRmNTliZGQzY2E0MzQ4OTZkZDI4LnNldENvbnRlbnQoaHRtbF8yZDU3MWEwYmRkMDQ0OGIzODM1NGNhYjBlYTg1YmJmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMWMxY2QwNDk3NzI0MWI2YWRmZjM4ZDU4MGMwODc3MS5iaW5kUG9wdXAocG9wdXBfZTJmZDQxNDhkZmIxNGY1OWJkZDNjYTQzNDg5NmRkMjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzljZjIzNzc3MGFjNGE4Y2FkZWRkNzExNDQxYWYwODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTAxMDIyMiwtNDMuOTQ1Mjc3NjE4MTM2MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTcyNTAxNmM2MGY2NDM1OThjMmM1NjA1MzVkNjM0ZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTZjMzFkNmIwYzU3NDgwNGFjYTQ3OGU4OWQyZjBiMWMgPSAkKCc8ZGl2IGlkPSJodG1sX2E2YzMxZDZiMGM1NzQ4MDRhY2E0NzhlODlkMmYwYjFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIENSSVNUT1ZBTyBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3MjUwMTZjNjBmNjQzNTk4YzJjNTYwNTM1ZDYzNGY4LnNldENvbnRlbnQoaHRtbF9hNmMzMWQ2YjBjNTc0ODA0YWNhNDc4ZTg5ZDJmMGIxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOWNmMjM3NzcwYWM0YThjYWRlZGQ3MTE0NDFhZjA4Ny5iaW5kUG9wdXAocG9wdXBfYTcyNTAxNmM2MGY2NDM1OThjMmM1NjA1MzVkNjM0ZjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDM2MmNlMDNmNzFhNGZjYzkyNjUyY2M2NjMzNTIzZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU1NTE4NTUsLTQzLjkxNDYzNjc1Mzg4NjY1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTVkYTI5NDI0YmY0NmI5OTRkZTA2MjQ5ZjFmMDQ2YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDZhODExMmI1ZDc0MTk3OGM3N2I1ZGE0ZjM5YjUxOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTA2YTgxMTJiNWQ3NDE5NzhjNzdiNWRhNGYzOWI1MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gR0FCUklFTCBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlNWRhMjk0MjRiZjQ2Yjk5NGRlMDYyNDlmMWYwNDZjLnNldENvbnRlbnQoaHRtbF9hMDZhODExMmI1ZDc0MTk3OGM3N2I1ZGE0ZjM5YjUxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzYyY2UwM2Y3MWE0ZmNjOTI2NTJjYzY2MzM1MjNmMi5iaW5kUG9wdXAocG9wdXBfNWU1ZGEyOTQyNGJmNDZiOTk0ZGUwNjI0OWYxZjA0NmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmM4MzIxNTM5MzliNDhkYmIwZGEzNDA3OWZiZmYwNzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5MjQ1ODUsLTQzLjg5NzY1MDU0NzEzNTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNDhiMTAyMTRmNTQxZGI5NWE3MzgyNzZiNmYxY2I5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2NWJjNjE1N2Y3NzQwOWY5ZDE2NTRlZjM0ZDkyZDczID0gJCgnPGRpdiBpZD0iaHRtbF8wNjViYzYxNTdmNzc0MDlmOWQxNjU0ZWYzNGQ5MmQ3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBHRVJBTERPIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWM0OGIxMDIxNGY1NDFkYjk1YTczODI3NmI2ZjFjYjkuc2V0Q29udGVudChodG1sXzA2NWJjNjE1N2Y3NzQwOWY5ZDE2NTRlZjM0ZDkyZDczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJjODMyMTUzOTM5YjQ4ZGJiMGRhMzQwNzlmYmZmMDc0LmJpbmRQb3B1cChwb3B1cF9lYzQ4YjEwMjE0ZjU0MWRiOTVhNzM4Mjc2YjZmMWNiOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Mjg1NjhlYWQ0Yjk0MzRmYWI2YzFhMjkxYjZmNjJiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzExMTUxNSwtNDMuOTEwMzU5Mzc3NzUzMzY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1Zjk5MTE2ZGNiYzQwMDhhYTc0ZmY0MzRiZDI1YTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5OGIxM2VmZWM2YjQ0YzU4MGQzMWZmN2E4MzM1NmY4ID0gJCgnPGRpdiBpZD0iaHRtbF9hOThiMTNlZmVjNmI0NGM1ODBkMzFmZjdhODMzNTZmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBNQVJDT1MgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNWY5OTExNmRjYmM0MDA4YWE3NGZmNDM0YmQyNWE0NC5zZXRDb250ZW50KGh0bWxfYTk4YjEzZWZlYzZiNDRjNTgwZDMxZmY3YTgzMzU2ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjI4NTY4ZWFkNGI5NDM0ZmFiNmMxYTI5MWI2ZjYyYmMuYmluZFBvcHVwKHBvcHVwX2I1Zjk5MTE2ZGNiYzQwMDhhYTc0ZmY0MzRiZDI1YTQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1NTgwNjU5MmUwZDRmZDY4NDZlOTlhYWI4ZWY1Mzc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg2ODY4Nzc1LC00My45MjM5MzY4MTgxMDMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDFmMDIyOGJjZWY0ZWY0OTdkZmU3YzYxY2NlN2I4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzg5ZDE4ZDlmNDM0ODgzYjA4YzYyNTMwODdiNDk4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZWM4OWQxOGQ5ZjQzNDg4M2IwOGM2MjUzMDg3YjQ5OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gUEFVTE8gQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDFmMDIyOGJjZWY0ZWY0OTdkZmU3YzYxY2NlN2I4Zi5zZXRDb250ZW50KGh0bWxfZWM4OWQxOGQ5ZjQzNDg4M2IwOGM2MjUzMDg3YjQ5OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzU1ODA2NTkyZTBkNGZkNjg0NmU5OWFhYjhlZjUzNzQuYmluZFBvcHVwKHBvcHVwXzQ0MWYwMjI4YmNlZjRlZjQ5N2RmZTdjNjFjY2U3YjhmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiNWIzMmVlN2E1YjQ4MTA5OGM1NjgyMzhmMzA1NzJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NzY1OTA1LC00My45Mzc1MDk0NzI2MjcwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZGE1ZmY3NGJiYTg0MTQ4Yjg3NjA0NWZjOGE5ZGY4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTllZjg0NGVjODk0MjdkODliN2E0ZjA4NGJlNWQ3OCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTk5ZWY4NDRlYzg5NDI3ZDg5YjdhNGYwODRiZTVkNzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTyBQRURSTyBWTiBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYTVmZjc0YmJhODQxNDhiODc2MDQ1ZmM4YTlkZjg5LnNldENvbnRlbnQoaHRtbF85OTllZjg0NGVjODk0MjdkODliN2E0ZjA4NGJlNWQ3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYjViMzJlZTdhNWI0ODEwOThjNTY4MjM4ZjMwNTcyYi5iaW5kUG9wdXAocG9wdXBfNmRhNWZmNzRiYmE4NDE0OGI4NzYwNDVmYzhhOWRmODkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI3NzE5YTFjZmQ4NGU1MGJmNzYzNjkwMDNiNGRjZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYxOTM3NywtNDMuOTk4MTI2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOWRiNzkwMzNmZmQ0ZjM3YjBlN2M3OGIyNmU1OTUwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Y2NjNzIzYjNmNzc0MDYyYjZhNmY0ZmZlZWRiNzUzNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWNjYzcyM2IzZjc3NDA2MmI2YTZmNGZmZWVkYjc1MzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBUkFOREkgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOWRiNzkwMzNmZmQ0ZjM3YjBlN2M3OGIyNmU1OTUwYi5zZXRDb250ZW50KGh0bWxfNWNjYzcyM2IzZjc3NDA2MmI2YTZmNGZmZWVkYjc1MzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDI3NzE5YTFjZmQ4NGU1MGJmNzYzNjkwMDNiNGRjZmUuYmluZFBvcHVwKHBvcHVwX2E5ZGI3OTAzM2ZmZDRmMzdiMGU3Yzc4YjI2ZTU5NTBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlYjdmMzZkOWNjNzRiZTM5MzFhODNkZDJlOWFjZjdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxNTA2NjA1LC00My44OTkwOTg3NDI0MjYyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDFkODRjNTcyYjM0NWIxOWUzOWRlNWJhZTAzZTJlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYTM0ODBiZTNlYWU0MDRiOGIyZTYxOTYyOWRhMzRjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmEzNDgwYmUzZWFlNDA0YjhiMmU2MTk2MjlkYTM0YzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBVURBREUgQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDFkODRjNTcyYjM0NWIxOWUzOWRlNWJhZTAzZTJlOC5zZXRDb250ZW50KGh0bWxfMmEzNDgwYmUzZWFlNDA0YjhiMmU2MTk2MjlkYTM0YzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmViN2YzNmQ5Y2M3NGJlMzkzMWE4M2RkMmU5YWNmN2UuYmluZFBvcHVwKHBvcHVwX2RkMWQ4NGM1NzJiMzQ1YjE5ZTM5ZGU1YmFlMDNlMmU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzMGQ2MjgwNWY4YzQwY2I5NjExZmEwZDc5NWI2NThjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4NjQ3MzA1LC00My45NjU4NjU0MjcyOTYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzdlOWRlM2JhNzM0YzdhYTUwODZkMDRjZDAzMWVmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODllN2NjZGVlMmQ0Nzk2OTQ2YjE3NWE2NDlhNGU3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTg5ZTdjY2RlZTJkNDc5Njk0NmIxNzVhNjQ5YTRlNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNVTUFSRSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3N2U5ZGUzYmE3MzRjN2FhNTA4NmQwNGNkMDMxZWY2LnNldENvbnRlbnQoaHRtbF8xODllN2NjZGVlMmQ0Nzk2OTQ2YjE3NWE2NDlhNGU3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzBkNjI4MDVmOGM0MGNiOTYxMWZhMGQ3OTViNjU4Yy5iaW5kUG9wdXAocG9wdXBfNzc3ZTlkZTNiYTczNGM3YWE1MDg2ZDA0Y2QwMzFlZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDA2ZDYwMzZiYmNhNDQ3NjgyNGViMWVlZTk1OTE5ZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODY1Mjc3OTUsLTQzLjkzMzQyNjA2NDE5MTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyY2QyMGU2NTM1YjRkNjFiZDRhZGJhYzdlNjllZjQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VkNDU3NDlkOWUzNjQwMmI5MzUzZTQyYTMzNTI5OGZlID0gJCgnPGRpdiBpZD0iaHRtbF9lZDQ1NzQ5ZDllMzY0MDJiOTM1M2U0MmEzMzUyOThmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U1VaQU5BIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDJjZDIwZTY1MzViNGQ2MWJkNGFkYmFjN2U2OWVmNDguc2V0Q29udGVudChodG1sX2VkNDU3NDlkOWUzNjQwMmI5MzUzZTQyYTMzNTI5OGZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwNmQ2MDM2YmJjYTQ0NzY4MjRlYjFlZWU5NTkxOWY3LmJpbmRQb3B1cChwb3B1cF8wMmNkMjBlNjUzNWI0ZDYxYmQ0YWRiYWM3ZTY5ZWY0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTVkN2U4Y2I3ZmU0ZjRmYTQwMDU2MGYxZTMzZWUzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTc2MDc4LC00My44ODU5Mzg4MTU4Mjg0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NlMzllODM1Y2U1NGM1ODhjM2E0ODc2NDRmZTljNzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTZjZDI2MDA3NGExNDA3MTgzOGZlZWEwMmI0NzlmYzkgPSAkKCc8ZGl2IGlkPSJodG1sX2U2Y2QyNjAwNzRhMTQwNzE4MzhmZWVhMDJiNDc5ZmM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UQVFVQVJJTCBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjZTM5ZTgzNWNlNTRjNTg4YzNhNDg3NjQ0ZmU5YzczLnNldENvbnRlbnQoaHRtbF9lNmNkMjYwMDc0YTE0MDcxODM4ZmVlYTAyYjQ3OWZjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMTVkN2U4Y2I3ZmU0ZjRmYTQwMDU2MGYxZTMzZWUzMy5iaW5kUG9wdXAocG9wdXBfY2NlMzllODM1Y2U1NGM1ODhjM2E0ODc2NDRmZTljNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmZmODY4ODc4NTM3NDQ2YTgxZjI0Y2FkNGMyMTUzYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM2NjMzNDUsLTQzLjkyNTU1Njc3MjkzNTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmZDQ4MjJhZTE2MjQ4NDM5MmYwODE4MmUzNDAwYjhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5Y2QyYzczZWZiNDRiNmFhNmVkOTk5NTgxZDI4NWY3ID0gJCgnPGRpdiBpZD0iaHRtbF9mOWNkMmM3M2VmYjQ0YjZhYTZlZDk5OTU4MWQyODVmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VFVQSSBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmZDQ4MjJhZTE2MjQ4NDM5MmYwODE4MmUzNDAwYjhkLnNldENvbnRlbnQoaHRtbF9mOWNkMmM3M2VmYjQ0YjZhYTZlZDk5OTU4MWQyODVmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZmY4Njg4Nzg1Mzc0NDZhODFmMjRjYWQ0YzIxNTNiMy5iaW5kUG9wdXAocG9wdXBfY2ZkNDgyMmFlMTYyNDg0MzkyZjA4MTgyZTM0MDBiOGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTA4OGJmYWMwOGM1NGRmZTg3Y2U3ZDdiOTk4YjNhMWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODgwOTI3Mzk5OTk5OTk3LC00My45MjM0NTc0OTkwOTI0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDI2ZjdlOGVhZjQ0OGI2OTI1ZDdmZTcxZDczMzc3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTU1ZDcwZGNlZDg0NTlkYTQ2MTU3NmNmMzY2OWVjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZmU1NWQ3MGRjZWQ4NDU5ZGE0NjE1NzZjZjM2NjllYzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOSUFPIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDQyNmY3ZThlYWY0NDhiNjkyNWQ3ZmU3MWQ3MzM3N2Euc2V0Q29udGVudChodG1sX2ZlNTVkNzBkY2VkODQ1OWRhNDYxNTc2Y2YzNjY5ZWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwODhiZmFjMDhjNTRkZmU4N2NlN2Q3Yjk5OGIzYTFkLmJpbmRQb3B1cChwb3B1cF9kNDI2ZjdlOGVhZjQ0OGI2OTI1ZDdmZTcxZDczMzc3YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MGIxYjBhN2Y3NGM0MTEyYWNlMWYzY2IzYzdmYjQzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44Njc0MTM2LC00My45NDE1NzcwNzc2ODYzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGMxYzgxZTc4MzA0YjFlODBiNGQ1ZTUzOWQ2NWRkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDRmZDI2ZGZhZjk0ZjY0YTJmNDg1MDgyZDJiODQ5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGQ0ZmQyNmRmYWY5NGY2NGEyZjQ4NTA4MmQyYjg0OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOSVZFUlNJVEFSSU8gQ2xhc3MgbG93PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZGMxYzgxZTc4MzA0YjFlODBiNGQ1ZTUzOWQ2NWRkOC5zZXRDb250ZW50KGh0bWxfZGQ0ZmQyNmRmYWY5NGY2NGEyZjQ4NTA4MmQyYjg0OTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzBiMWIwYTdmNzRjNDExMmFjZTFmM2NiM2M3ZmI0M2UuYmluZFBvcHVwKHBvcHVwXzdkYzFjODFlNzgzMDRiMWU4MGI0ZDVlNTM5ZDY1ZGQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxY2MwOTJjY2I4YjQ1Y2ZiZWExODVlY2M3MGVmOTNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxMDI3NDgsLTQzLjg5NjcwNTE2MTIxNTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkOTg5Y2ZjMjgwODQwYzM5MmU2NmJlYTZhZTE1OWU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlYjA4Y2JjYTEzNTQyYWE4ZjMxMjc5OTdiNzllZGQxID0gJCgnPGRpdiBpZD0iaHRtbF82ZWIwOGNiY2ExMzU0MmFhOGYzMTI3OTk3Yjc5ZWRkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkVSQSBDUlVaIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWQ5ODljZmMyODA4NDBjMzkyZTY2YmVhNmFlMTU5ZTQuc2V0Q29udGVudChodG1sXzZlYjA4Y2JjYTEzNTQyYWE4ZjMxMjc5OTdiNzllZGQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYxY2MwOTJjY2I4YjQ1Y2ZiZWExODVlY2M3MGVmOTNlLmJpbmRQb3B1cChwb3B1cF8xZDk4OWNmYzI4MDg0MGMzOTJlNjZiZWE2YWUxNTllNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMmY5MmY3ZWE5NTY0ZjY1YTc0ODYwMTY5ZjAxOTE1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzQ5OTM1LC00My45MDg4NTgyNTYxMTM2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZmYwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMmNmMzMyMDNhMjE0YzE0ODZiOGNjMjljMDNhY2M0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzVjODhlOWE4MmE0ZTA3OGIxYTE1Y2ZiN2MzYmMyZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTc1Yzg4ZTlhODJhNGUwNzhiMWExNWNmYjdjM2JjMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgQ0FGRVpBTCBDbGFzcyBsb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyY2YzMzIwM2EyMTRjMTQ4NmI4Y2MyOWMwM2FjYzQyLnNldENvbnRlbnQoaHRtbF81NzVjODhlOWE4MmE0ZTA3OGIxYTE1Y2ZiN2MzYmMyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMmY5MmY3ZWE5NTY0ZjY1YTc0ODYwMTY5ZjAxOTE1YS5iaW5kUG9wdXAocG9wdXBfZjJjZjMzMjAzYTIxNGMxNDg2YjhjYzI5YzAzYWNjNDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTIwMzNjYmVlZjIwNDA1ZTlhN2FlODBkNjk4N2Y0NGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTk1NDMyODAwMDAwMDAzLC00My45OTIzNjY1NzM4MDUxMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmI4ZjE0Y2VhNWY0NGUwNzg0ZDY5MzM3MWVlZDdmNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjRkMGUyZTVlYzgyNGExYmIwZjkxOTYwNTllMmViMWYgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0ZDBlMmU1ZWM4MjRhMWJiMGY5MTk2MDU5ZTJlYjFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIENFTUlHIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmI4ZjE0Y2VhNWY0NGUwNzg0ZDY5MzM3MWVlZDdmNmIuc2V0Q29udGVudChodG1sX2Y0ZDBlMmU1ZWM4MjRhMWJiMGY5MTk2MDU5ZTJlYjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyMDMzY2JlZWYyMDQwNWU5YTdhZTgwZDY5ODdmNDRmLmJpbmRQb3B1cChwb3B1cF9mYjhmMTRjZWE1ZjQ0ZTA3ODRkNjkzMzcxZWVkN2Y2Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYWE0NTM3YWM5N2U0Y2JkYjM0ZTZjOTljNjNmNDIwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzY2NjkwMDAwMDAwMDIsLTQ0LjAwMTk4NDY2NzYwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2ZmMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzU5NmRkOTNlYmM2NDAzNjhiZGQ5M2EwNThjZGExN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTg5MDE3NWNlZDA1NDdkMDg0ZGIzMGU4NzZmNTc1NzUgPSAkKCc8ZGl2IGlkPSJodG1sX2U4OTAxNzVjZWQwNTQ3ZDA4NGRiMzBlODc2ZjU3NTc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIE9FU1RFIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU5NmRkOTNlYmM2NDAzNjhiZGQ5M2EwNThjZGExN2Muc2V0Q29udGVudChodG1sX2U4OTAxNzVjZWQwNTQ3ZDA4NGRiMzBlODc2ZjU3NTc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhYTQ1MzdhYzk3ZTRjYmRiMzRlNmM5OWM2M2Y0MjA0LmJpbmRQb3B1cChwb3B1cF9jNTk2ZGQ5M2ViYzY0MDM2OGJkZDkzYTA1OGNkYTE3Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTcxN2EyMWI2ZmQ0NzNkOGM0YWRhODY5ZGMwMzYwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTUwMDU1LC00My45OTkwMjE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNmZjAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxZjgwODE5NzMzZDQ4ZDQ4MzA5YTM3ODBiODdkODc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmNTBjMWNmNmNkNDRlYmNiMGVlMWE0OGVjMzEzNDE2ID0gJCgnPGRpdiBpZD0iaHRtbF9lZjUwYzFjZjZjZDQ0ZWJjYjBlZTFhNDhlYzMxMzQxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VklTVEEgQUxFR1JFIENsYXNzIGxvdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFmODA4MTk3MzNkNDhkNDgzMDlhMzc4MGI4N2Q4Nzcuc2V0Q29udGVudChodG1sX2VmNTBjMWNmNmNkNDRlYmNiMGVlMWE0OGVjMzEzNDE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllNzE3YTIxYjZmZDQ3M2Q4YzRhZGE4NjlkYzAzNjAwLmJpbmRQb3B1cChwb3B1cF9jMWY4MDgxOTczM2Q0OGQ0ODMwOWEzNzgwYjg3ZDg3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGMxYTQyNTVhODQ0OTg2OGMwNDZmNDAxY2UwOGM0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTIyNjA3LC00NC4wMDM0NTg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1Y2JlYTI0NjQyYTQ0OWY4NTA4ZjU2MjZkZDQwNjU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1YTUxNWI5MDcxOTQzODY5ZGE0MDZhNDUxZGM3ODE1ID0gJCgnPGRpdiBpZD0iaHRtbF8wNWE1MTViOTA3MTk0Mzg2OWRhNDA2YTQ1MWRjNzgxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QUxJUElPIERFIE1FTE8gQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTVjYmVhMjQ2NDJhNDQ5Zjg1MDhmNTYyNmRkNDA2NTUuc2V0Q29udGVudChodG1sXzA1YTUxNWI5MDcxOTQzODY5ZGE0MDZhNDUxZGM3ODE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4YzFhNDI1NWE4NDQ5ODY4YzA0NmY0MDFjZTA4YzQwLmJpbmRQb3B1cChwb3B1cF85NWNiZWEyNDY0MmE0NDlmODUwOGY1NjI2ZGQ0MDY1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjVlYmYxNDE2MTU0ZTAyYTg2YWRkNmYzODk1Y2ZkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTk3MDA1NSwtNDMuOTY1MjU1NTg1ODk2MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZkNDRiMTk3ZTVkNDNhNDllMzM2YzRlNWUwOWEyMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzY4MmVhYjIyOTRkNGRhODk1ODRlYWFjMWQ2YzlmZDIgPSAkKCc8ZGl2IGlkPSJodG1sX2M2ODJlYWIyMjk0ZDRkYTg5NTg0ZWFhYzFkNmM5ZmQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQUlDQVJBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2ZDQ0YjE5N2U1ZDQzYTQ5ZTMzNmM0ZTVlMDlhMjM4LnNldENvbnRlbnQoaHRtbF9jNjgyZWFiMjI5NGQ0ZGE4OTU4NGVhYWMxZDZjOWZkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNjVlYmYxNDE2MTU0ZTAyYTg2YWRkNmYzODk1Y2ZkMi5iaW5kUG9wdXAocG9wdXBfMjZkNDRiMTk3ZTVkNDNhNDllMzM2YzRlNWUwOWEyMzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTE0N2ZiMWEzZGVhNGI1N2E4NDU3OGRiNjZjMDYwMTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA1MTMzNiwtNDMuOTc0OTg3MjIwMTA1OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmIwMTJjNzNjM2ExNGQ5MjhiN2QxN2ViNDBjOTE4YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDU3NzNlMjUyOTVmNGY4MWE2MGEzOTNmOWY0YmI1MDkgPSAkKCc8ZGl2IGlkPSJodG1sXzA1NzczZTI1Mjk1ZjRmODFhNjBhMzkzZjlmNGJiNTA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQUlDQVJBIEFERUxBSURFIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiMDEyYzczYzNhMTRkOTI4YjdkMTdlYjQwYzkxOGExLnNldENvbnRlbnQoaHRtbF8wNTc3M2UyNTI5NWY0ZjgxYTYwYTM5M2Y5ZjRiYjUwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MTQ3ZmIxYTNkZWE0YjU3YTg0NTc4ZGI2NmMwNjAxNS5iaW5kUG9wdXAocG9wdXBfNmIwMTJjNzNjM2ExNGQ5MjhiN2QxN2ViNDBjOTE4YTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWExZWMxN2ExYTUxNDBmYzlkY2ZkYTUzNTcyNzFhNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI0MzYxMTUsLTQzLjk3MDA1NDQwMzM0NTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhMzMxM2E3OTdhNzQ4NzRiYTUzYTQ5YWM0ZGI5OWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3M2NhNWM3Y2JmZjQ0NmM4NDNlOWI0YjljZjcxZDhiID0gJCgnPGRpdiBpZD0iaHRtbF85NzNjYTVjN2NiZmY0NDZjODQzZTliNGI5Y2Y3MWQ4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FMQUZBVEUgQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWEzMzEzYTc5N2E3NDg3NGJhNTNhNDlhYzRkYjk5ZjEuc2V0Q29udGVudChodG1sXzk3M2NhNWM3Y2JmZjQ0NmM4NDNlOWI0YjljZjcxZDhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhMWVjMTdhMWE1MTQwZmM5ZGNmZGE1MzU3MjcxYTcyLmJpbmRQb3B1cChwb3B1cF81YTMzMTNhNzk3YTc0ODc0YmE1M2E0OWFjNGRiOTlmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjllOWU5Y2Q2NjQ0NWE2YmYyY2E4YWQ1YmM4MmUwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTM1NTA5NSwtNDMuOTY1NzQ3NDMxOTQ4ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWJkMTg4NGFlMTZiNGNhZmIyNWFmYThhYWNjYzA2N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQwNzk2ZDg4NzI1NGYxMmI1M2M5NGM0NjI2ZDcxOTMgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0MDc5NmQ4ODcyNTRmMTJiNTNjOTRjNDYyNmQ3MTkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVJMT1MgUFJBVEVTIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZDE4ODRhZTE2YjRjYWZiMjVhZmE4YWFjY2MwNjdiLnNldENvbnRlbnQoaHRtbF9kNDA3OTZkODg3MjU0ZjEyYjUzYzk0YzQ2MjZkNzE5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjllOWU5Y2Q2NjQ0NWE2YmYyY2E4YWQ1YmM4MmUwNi5iaW5kUG9wdXAocG9wdXBfOWJkMTg4NGFlMTZiNGNhZmIyNWFmYThhYWNjYzA2N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGM5MDUyMDA4MzRhNDg0YmEzOTAxMWQ0YWUzYzM5MjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTIyMDIzMDUsLTQzLjk5ODE1MTY2MzY3ODQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwYjY2ZDMzMjc2ZDQ0M2FiY2VlYjg5OGQxYzdlZDA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4MWU2ZTg2ZTQyODQyNDg5ODRhMzJhZjYyMDFiYjcxID0gJCgnPGRpdiBpZD0iaHRtbF82ODFlNmU4NmU0Mjg0MjQ4OTg0YTMyYWY2MjAxYmI3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RE9NIENBQlJBTCBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMGI2NmQzMzI3NmQ0NDNhYmNlZWI4OThkMWM3ZWQwNy5zZXRDb250ZW50KGh0bWxfNjgxZTZlODZlNDI4NDI0ODk4NGEzMmFmNjIwMWJiNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGM5MDUyMDA4MzRhNDg0YmEzOTAxMWQ0YWUzYzM5MjYuYmluZFBvcHVwKHBvcHVwX2MwYjY2ZDMzMjc2ZDQ0M2FiY2VlYjg5OGQxYzdlZDA3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0MjgwOTJhYzkwMDQ5NzFhYzNhNGFiZWQ4YTI5ODBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwNTQ5OTIsLTQzLjkwNDI2Nzc3MjgxNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhY2U1N2QxOTBlNTRjOTc5MmVmYTcwMzY0Y2Q0NjQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmMWNiYmQyYzg0YzQ0ZTk5ZWUzNGI1N2EyNmFhZjMyID0gJCgnPGRpdiBpZD0iaHRtbF83ZjFjYmJkMmM4NGM0NGU5OWVlMzRiNTdhMjZhYWYzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RVNQTEFOQURBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhY2U1N2QxOTBlNTRjOTc5MmVmYTcwMzY0Y2Q0NjQ5LnNldENvbnRlbnQoaHRtbF83ZjFjYmJkMmM4NGM0NGU5OWVlMzRiNTdhMjZhYWYzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDI4MDkyYWM5MDA0OTcxYWMzYTRhYmVkOGEyOTgwYi5iaW5kUG9wdXAocG9wdXBfNWFjZTU3ZDE5MGU1NGM5NzkyZWZhNzAzNjRjZDQ2NDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQyMzdjZDhiOTU5NGZkOWE4ODg0YzFjNDg4MWNkOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM2NDg2NiwtNDMuOTk3OTk1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTFhZmYyNjMwMjA0NmM0ODIzMWUwNTk0MWU0ZDY5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTdkMGFmYWU1MTk0MWI5YjBmZTNlMmQwZDQzYzFiNSA9ICQoJzxkaXYgaWQ9Imh0bWxfODU3ZDBhZmFlNTE5NDFiOWIwZmUzZTJkMGQ0M2MxYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBUkNBUyBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMTFhZmYyNjMwMjA0NmM0ODIzMWUwNTk0MWU0ZDY5MS5zZXRDb250ZW50KGh0bWxfODU3ZDBhZmFlNTE5NDFiOWIwZmUzZTJkMGQ0M2MxYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQyMzdjZDhiOTU5NGZkOWE4ODg0YzFjNDg4MWNkOGUuYmluZFBvcHVwKHBvcHVwXzMxMWFmZjI2MzAyMDQ2YzQ4MjMxZTA1OTQxZTRkNjkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyMDA2NzNkMTNkODRlYTk5MWNjODMyMjlkN2U3ZTI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwOTYwNTMwMDAwMDAwMywtNDMuOTE3NTA5NzczNzQzMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWRhMzU5Mjk4YmU5NDA2N2I0NjNjY2Q5MGYwOTUzMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNiNjEyYzk3YTdmNDVlOGI2ODEyOWM4MTMxNmIxNGEgPSAkKCc8ZGl2IGlkPSJodG1sXzMzYjYxMmM5N2E3ZjQ1ZThiNjgxMjljODEzMTZiMTRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IT1JUTyBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZGEzNTkyOThiZTk0MDY3YjQ2M2NjZDkwZjA5NTMxMC5zZXRDb250ZW50KGh0bWxfMzNiNjEyYzk3YTdmNDVlOGI2ODEyOWM4MTMxNmIxNGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTIwMDY3M2QxM2Q4NGVhOTkxY2M4MzIyOWQ3ZTdlMjYuYmluZFBvcHVwKHBvcHVwXzlkYTM1OTI5OGJlOTQwNjdiNDYzY2NkOTBmMDk1MzEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RkM2IzMTIwNmVkZjRiOTFiZTllNmYxOThiMDhiZjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NzA0MDIsLTQzLjk3MTgyMjgwMTE4NjU3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTFhODYxOWIwMzg0MTUxODY5NjdjMjJjMjI5N2ZjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTBlNDg5ZDc4MzY0Mzg1ODFiMGU0YWQ1MWYxYjA1NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDkwZTQ4OWQ3ODM2NDM4NTgxYjBlNGFkNTFmMWIwNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBBTUVSSUNBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxMWE4NjE5YjAzODQxNTE4Njk2N2MyMmMyMjk3ZmM0LnNldENvbnRlbnQoaHRtbF8wOTBlNDg5ZDc4MzY0Mzg1ODFiMGU0YWQ1MWYxYjA1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZDNiMzEyMDZlZGY0YjkxYmU5ZTZmMTk4YjA4YmY3MS5iaW5kUG9wdXAocG9wdXBfYjExYTg2MTliMDM4NDE1MTg2OTY3YzIyYzIyOTdmYzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzI5NjdjMThkYmVjNGU4M2FhMzhiN2M4Y2EzNTRhMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI5MjQ1LC00My45OTk2ODg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjY2QwODg5N2QwMjQ4NmJhZDY2NzlmOWZlMDc1ZGY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0ZmEwZWNhMzlhNjQxNDQ4NmI2ZDNlYjgyNTNkZjEyID0gJCgnPGRpdiBpZD0iaHRtbF82NGZhMGVjYTM5YTY0MTQ0ODZiNmQzZWI4MjUzZGYxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Sk9BTyBQSU5IRUlSTyBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2NkMDg4OTdkMDI0ODZiYWQ2Njc5ZjlmZTA3NWRmNi5zZXRDb250ZW50KGh0bWxfNjRmYTBlY2EzOWE2NDE0NDg2YjZkM2ViODI1M2RmMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzI5NjdjMThkYmVjNGU4M2FhMzhiN2M4Y2EzNTRhMTAuYmluZFBvcHVwKHBvcHVwX2ZjY2QwODg5N2QwMjQ4NmJhZDY2NzlmOWZlMDc1ZGY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViNWI2ZmM1YjNmZjQwOTg5Y2JkNzhjMTQzNjUxYTU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxNzUzMDA1LC00My45OTAwNTQ2MTk4NzYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYWM2ODZlNDVlOTA0MWUyOTg5M2Y2YzcxNzJmZGE4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTRkNWU4NGVhMjI0YzJjYWIzNjY4ODNhMzM2ZjE1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTU0ZDVlODRlYTIyNGMyY2FiMzY2ODgzYTMzNmYxNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTkFTIEJSQVNJTCBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYWM2ODZlNDVlOTA0MWUyOTg5M2Y2YzcxNzJmZGE4Ni5zZXRDb250ZW50KGh0bWxfMTU0ZDVlODRlYTIyNGMyY2FiMzY2ODgzYTMzNmYxNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWI1YjZmYzViM2ZmNDA5ODljYmQ3OGMxNDM2NTFhNTkuYmluZFBvcHVwKHBvcHVwXzFhYzY4NmU0NWU5MDQxZTI5ODkzZjZjNzE3MmZkYTg2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwMGUwZGQ2NmE5ZDRiMmRiYjk5ZjlkYTNlZDA0N2Q2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwOTI3NjQ1LC00My45Nzc5MjgwNzkwMzI1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDZjNjMwYTJlNDM0YjY2ODJiNDkyMDA2M2I3MzVlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTNmZjFmMWJmNzc0MGViOTczMjQ0YzMzMGExODIwNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTUzZmYxZjFiZjc3NDBlYjk3MzI0NGMzMzBhMTgyMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1PTlNFTkhPUiBNRVNTSUFTIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwNmM2MzBhMmU0MzRiNjY4MmI0OTIwMDYzYjczNWUwLnNldENvbnRlbnQoaHRtbF81NTNmZjFmMWJmNzc0MGViOTczMjQ0YzMzMGExODIwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDBlMGRkNjZhOWQ0YjJkYmI5OWY5ZGEzZWQwNDdkNi5iaW5kUG9wdXAocG9wdXBfMTA2YzYzMGEyZTQzNGI2NjgyYjQ5MjAwNjNiNzM1ZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTJiMGU4ZjgwZTYyNGI5YWE5ODJiOGI4ZmJkM2QyYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkzMDEzOSwtNDMuOTM0MTM2NzMxNDU2NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRhZjY0ZTA0OTgwNDI4Njk1NWUyZjZhY2RhYjE2MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZkMGMyM2Y5YmM1NDRiMDgyYWY1NzhmN2Q2NDcwMmQgPSAkKCc8ZGl2IGlkPSJodG1sX2NmZDBjMjNmOWJjNTQ0YjA4MmFmNTc4ZjdkNjQ3MDJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEZMT1JFU1RBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0YWY2NGUwNDk4MDQyODY5NTVlMmY2YWNkYWIxNjA5LnNldENvbnRlbnQoaHRtbF9jZmQwYzIzZjliYzU0NGIwODJhZjU3OGY3ZDY0NzAyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MmIwZThmODBlNjI0YjlhYTk4MmI4YjhmYmQzZDJjOS5iaW5kUG9wdXAocG9wdXBfZTRhZjY0ZTA0OTgwNDI4Njk1NWUyZjZhY2RhYjE2MDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzViZDU3ODhiMGI4NDI5ZTgyOThjZWI3NGY3YzI0YWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQxNTUyNCwtNDMuOTY4NTM1OTE3NTI4NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmMwMDRlNmM2Njc3NDM1Mzg4OTk3ODZmNDFkZjNmNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmYyM2Q4MTYxZGY4NDUxMGE2OWEzZjZlMzViNjNlZDUgPSAkKCc8ZGl2IGlkPSJodG1sX2JmMjNkODE2MWRmODQ1MTBhNjlhM2Y2ZTM1YjYzZWQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEdSQU5BREEgQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmMwMDRlNmM2Njc3NDM1Mzg4OTk3ODZmNDFkZjNmNWQuc2V0Q29udGVudChodG1sX2JmMjNkODE2MWRmODQ1MTBhNjlhM2Y2ZTM1YjYzZWQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M1YmQ1Nzg4YjBiODQyOWU4Mjk4Y2ViNzRmN2MyNGFkLmJpbmRQb3B1cChwb3B1cF9mYzAwNGU2YzY2Nzc0MzUzODg5OTc4NmY0MWRmM2Y1ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMjEwNmRjYjc5Mjc0NDY4YWNiOTE5ODZlM2U0NjRmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzM1MDEzNSwtNDMuOTc3MjUzNDc1NzAxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNiMTNhZDcxZTRlNDg4MWE2MDVmN2VmMTM1MGE3OTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2MyNTBiYmNiZTExNGVlOGIxOGJmODQ3N2I1NzU1MDIgPSAkKCc8ZGl2IGlkPSJodG1sXzdjMjUwYmJjYmUxMTRlZThiMThiZjg0NzdiNTc1NTAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIFNVSUNBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzYjEzYWQ3MWU0ZTQ4ODFhNjA1ZjdlZjEzNTBhNzkzLnNldENvbnRlbnQoaHRtbF83YzI1MGJiY2JlMTE0ZWU4YjE4YmY4NDc3YjU3NTUwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMjEwNmRjYjc5Mjc0NDY4YWNiOTE5ODZlM2U0NjRmZi5iaW5kUG9wdXAocG9wdXBfNjNiMTNhZDcxZTRlNDg4MWE2MDVmN2VmMTM1MGE3OTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjkyYTYzYjJjNDdlNGMzNjg3MmM3N2U5MzdiZjIwM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE0MzA0NSwtNDMuOTc5MzU1OTkwMTM3NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzUxODk4NDI3NGZmNDIzZWI5N2M5NmMwNDExNmIxYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQzNjA0Y2ZmMDVmNDczMzg5YmYyNDlkOTBmM2NiZjUgPSAkKCc8ZGl2IGlkPSJodG1sXzU0MzYwNGNmZjA1ZjQ3MzM4OWJmMjQ5ZDkwZjNjYmY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQURSRSBFVVNUQVFVSU8gQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzUxODk4NDI3NGZmNDIzZWI5N2M5NmMwNDExNmIxYTYuc2V0Q29udGVudChodG1sXzU0MzYwNGNmZjA1ZjQ3MzM4OWJmMjQ5ZDkwZjNjYmY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y5MmE2M2IyYzQ3ZTRjMzY4NzJjNzdlOTM3YmYyMDNiLmJpbmRQb3B1cChwb3B1cF83NTE4OTg0Mjc0ZmY0MjNlYjk3Yzk2YzA0MTE2YjFhNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODViYmUxMmQ0ZTg0MmRiOTlmZWFiZGQ5MWY0MmY1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzMxNjQxOTk5OTk5OTgsLTQzLjkzMzgwNzUyNDYyNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWRiYTFhMmFjYzNmNDkxZmIxMzE5OGNmZDgwMzgwOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWZlYTgzMzRmNmE0NDQ3NmI2MDg1NGUxYzA0NTUzMGIgPSAkKCc8ZGl2IGlkPSJodG1sX2FmZWE4MzM0ZjZhNDQ0NzZiNjA4NTRlMWMwNDU1MzBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQUxNQVJFUyBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZGJhMWEyYWNjM2Y0OTFmYjEzMTk4Y2ZkODAzODA5Ny5zZXRDb250ZW50KGh0bWxfYWZlYTgzMzRmNmE0NDQ3NmI2MDg1NGUxYzA0NTUzMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDg1YmJlMTJkNGU4NDJkYjk5ZmVhYmRkOTFmNDJmNTkuYmluZFBvcHVwKHBvcHVwXzFkYmExYTJhY2MzZjQ5MWZiMTMxOThjZmQ4MDM4MDk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiZTMxNmZmYjVlZDQxNzhiNjFhYzg5N2EwMDBlNjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3MDIyMTUsLTQzLjk5MzEzNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGYwMDFmZjYxMTQ2NDlmY2I1ZDUzZjYwMmFiMDljYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBlNGVhM2EyZmM3NDk4OGJiZmE1YmQ4ZmU0ZmY1MTEgPSAkKCc8ZGl2IGlkPSJodG1sX2MwZTRlYTNhMmZjNzQ5ODhiYmZhNWJkOGZlNGZmNTExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVFVRVRBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMDAxZmY2MTE0NjQ5ZmNiNWQ1M2Y2MDJhYjA5Y2JjLnNldENvbnRlbnQoaHRtbF9jMGU0ZWEzYTJmYzc0OTg4YmJmYTViZDhmZTRmZjUxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYmUzMTZmZmI1ZWQ0MTc4YjYxYWM4OTdhMDAwZTY1Ny5iaW5kUG9wdXAocG9wdXBfOGYwMDFmZjYxMTQ2NDlmY2I1ZDUzZjYwMmFiMDljYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJhYjNjMTE5MjkwNDAzOGI3ZmE5NWZlOTJhMmViNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODMzMjYzNzUsLTQzLjk1MjU4NjE4NTE2MDQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiMDU3NWMwZWE1NzQ5ZjU5ZjdlOGY3NDQ4NDNkYzRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjODQzNGE5MDY0ZTQ4YmM5YjU0ZmZmOGNmM2VmYzlhID0gJCgnPGRpdiBpZD0iaHRtbF8xYzg0MzRhOTA2NGU0OGJjOWI1NGZmZjhjZjNlZmM5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UExBTkFMVE8gQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2IwNTc1YzBlYTU3NDlmNTlmN2U4Zjc0NDg0M2RjNGYuc2V0Q29udGVudChodG1sXzFjODQzNGE5MDY0ZTQ4YmM5YjU0ZmZmOGNmM2VmYzlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiYWIzYzExOTI5MDQwMzhiN2ZhOTVmZTkyYTJlYjU3LmJpbmRQb3B1cChwb3B1cF8zYjA1NzVjMGVhNTc0OWY1OWY3ZThmNzQ0ODQzZGM0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzI1NTIyMDBmY2U0MDJiYTgxZjY5NjFhZTI4NWYyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTMxMzM2MDAwMDAwMDIsLTQzLjkwMjg1Njk5NTc5NjIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2MWI0YWIyNWU1ZTQyNTVhZjNiNmJjZWI5MmQwN2Y5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzMzBlN2JhNzliZTQzODk4ZDk2ZWM2NDY5ZTkzMjA2ID0gJCgnPGRpdiBpZD0iaHRtbF9iMzMwZTdiYTc5YmU0Mzg5OGQ5NmVjNjQ2OWU5MzIwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9NUEVJQSBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjFiNGFiMjVlNWU0MjU1YWYzYjZiY2ViOTJkMDdmOS5zZXRDb250ZW50KGh0bWxfYjMzMGU3YmE3OWJlNDM4OThkOTZlYzY0NjllOTMyMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjcyNTUyMjAwZmNlNDAyYmE4MWY2OTYxYWUyODVmMjIuYmluZFBvcHVwKHBvcHVwXzQ2MWI0YWIyNWU1ZTQyNTVhZjNiNmJjZWI5MmQwN2Y5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5M2I2MWM5YzkwZDRmYTRiYzI4N2M4ZTgyMjI2YmIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MTI5OTUsLTQzLjk0MTcxMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDM0MzNmNTcyNmU1NGVlOWIzMjI0MGJmZjlkZjEzZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjk0NmM5MjBhNDk4NDFmMzkxMDA0Y2IwZTExOTlmMmYgPSAkKCc8ZGl2IGlkPSJodG1sX2I5NDZjOTIwYTQ5ODQxZjM5MTAwNGNiMGUxMTk5ZjJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SRU5BU0NFTkNBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzNDMzZjU3MjZlNTRlZTliMzIyNDBiZmY5ZGYxM2UwLnNldENvbnRlbnQoaHRtbF9iOTQ2YzkyMGE0OTg0MWYzOTEwMDRjYjBlMTE5OWYyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OTNiNjFjOWM5MGQ0ZmE0YmMyODdjOGU4MjIyNmJiMi5iaW5kUG9wdXAocG9wdXBfZDM0MzNmNTcyNmU1NGVlOWIzMjI0MGJmZjlkZjEzZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTNlZTgxNjNkODFkNDhlNGE0NTJlZmQwODllZTgyMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTAwMzMyMSwtNDMuOTIzNzIyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGFmYmFhODEwNjM0ZGJkODFkOTdkOWUwNDQ1YmE5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDM0YWM1MGE4YTc0NzFiODNhNDYxZWU1YjdkYzMxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzAzNGFjNTBhOGE3NDcxYjgzYTQ2MWVlNWI3ZGMzMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBR1JBREEgRkFNSUxJQSBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMGFmYmFhODEwNjM0ZGJkODFkOTdkOWUwNDQ1YmE5MS5zZXRDb250ZW50KGh0bWxfNzAzNGFjNTBhOGE3NDcxYjgzYTQ2MWVlNWI3ZGMzMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTNlZTgxNjNkODFkNDhlNGE0NTJlZmQwODllZTgyMzAuYmluZFBvcHVwKHBvcHVwX2YwYWZiYWE4MTA2MzRkYmQ4MWQ5N2Q5ZTA0NDViYTkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4MTQ3ZmI2ZWIyZDQ4ZWNhYWQ4YmVjMTVlZmFhMTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMzc2ODY1LC00My45MjEyNDU4MjU0MzgyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzFlZTkxNmZlNDM2NDAxMmI2N2E4ZDEwNjlmZGVhNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzE0Y2NjMmQ3OGZjNGE4NWIxYzIyYmRiMDM5NTE4YTkgPSAkKCc8ZGl2IGlkPSJodG1sX2MxNGNjYzJkNzhmYzRhODViMWMyMmJkYjAzOTUxOGE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBFRklHRU5JQSBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMWVlOTE2ZmU0MzY0MDEyYjY3YThkMTA2OWZkZWE2OS5zZXRDb250ZW50KGh0bWxfYzE0Y2NjMmQ3OGZjNGE4NWIxYzIyYmRiMDM5NTE4YTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDgxNDdmYjZlYjJkNDhlY2FhZDhiZWMxNWVmYWExMTcuYmluZFBvcHVwKHBvcHVwXzMxZWU5MTZmZTQzNjQwMTJiNjdhOGQxMDY5ZmRlYTY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzYTRhMWM2NTdmNzQ2YTg4MmUxNmZmNjk0MjNjM2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MDMzMTEsLTQzLjkwOTY4MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzgwMDBmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4MDAwZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjBlNTc5MzI0OGZhNDA1Mzk5ZDBmZjFiNjk1MTc2M2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk2Y2Y5NWQ5MzUzNDIwZThjZWE4NGYyYmNmZDYwYTggPSAkKCc8ZGl2IGlkPSJodG1sX2U5NmNmOTVkOTM1MzQyMGU4Y2VhODRmMmJjZmQ2MGE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBJTkVTIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwZTU3OTMyNDhmYTQwNTM5OWQwZmYxYjY5NTE3NjNlLnNldENvbnRlbnQoaHRtbF9lOTZjZjk1ZDkzNTM0MjBlOGNlYTg0ZjJiY2ZkNjBhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hM2E0YTFjNjU3Zjc0NmE4ODJlMTZmZjY5NDIzYzNmZS5iaW5kUG9wdXAocG9wdXBfYjBlNTc5MzI0OGZhNDA1Mzk5ZDBmZjFiNjk1MTc2M2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTM3MjVhN2NiYjhhNGEwMDk2MjEyN2JmNzA0N2QxNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkxNzk0NCwtNDMuOTI5OTEzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTFkMDRiMTlmYWM0NWFkYjkyNTZhNWVmNDNjNmQ2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOTViMGRlY2I1NDE0OThhYmNlMmRmNjBjMTY5NWE0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzk1YjBkZWNiNTQxNDk4YWJjZTJkZjYwYzE2OTVhNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNJTFZFSVJBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMWQwNGIxOWZhYzQ1YWRiOTI1NmE1ZWY0M2M2ZDYwLnNldENvbnRlbnQoaHRtbF8zOTViMGRlY2I1NDE0OThhYmNlMmRmNjBjMTY5NWE0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzcyNWE3Y2JiOGE0YTAwOTYyMTI3YmY3MDQ3ZDE3Ni5iaW5kUG9wdXAocG9wdXBfNzExZDA0YjE5ZmFjNDVhZGI5MjU2YTVlZjQzYzZkNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjcyMDAyZmJkMDEwNGY2ZWE0ZDBjOTMxYjBmMzY0YTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODczMzY3MiwtNDMuOTY3NjE1MTI5MDU3MjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3NDQyZDY1Nzk1ZTQ4ZDA5Zjc5YjBlOGRkNTRhYzM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiMDc3NmEwYmRiNjRkYjZhNjU4YzY3MmE2YzljMzAyID0gJCgnPGRpdiBpZD0iaHRtbF9iYjA3NzZhMGJkYjY0ZGI2YTY1OGM2NzJhNmM5YzMwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VUZNRyBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzQ0MmQ2NTc5NWU0OGQwOWY3OWIwZThkZDU0YWMzNC5zZXRDb250ZW50KGh0bWxfYmIwNzc2YTBiZGI2NGRiNmE2NThjNjcyYTZjOWMzMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjcyMDAyZmJkMDEwNGY2ZWE0ZDBjOTMxYjBmMzY0YTQuYmluZFBvcHVwKHBvcHVwX2U3NDQyZDY1Nzk1ZTQ4ZDA5Zjc5YjBlOGRkNTRhYzM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ZmZiOTY0Njk1YjQ0OTVhOTdkMzRlNGFjNzY3M2QxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1ODYxMDksLTQzLjk5MjIyNTEyMzY3MDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2YTM3MjQyYTdmNjQ3ODFhMWI2YTBjNDBkMjA3MjliID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxNThiNTUyNzlkOTQ0YzNiNTQyYjBiM2VkNDczOTY3ID0gJCgnPGRpdiBpZD0iaHRtbF82MTU4YjU1Mjc5ZDk0NGMzYjU0MmIwYjNlZDQ3Mzk2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVUQU5JQSBDbGFzcyByZWd1bGFyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NmEzNzI0MmE3ZjY0NzgxYTFiNmEwYzQwZDIwNzI5Yi5zZXRDb250ZW50KGh0bWxfNjE1OGI1NTI3OWQ5NDRjM2I1NDJiMGIzZWQ0NzM5NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTRmZmI5NjQ2OTViNDQ5NWE5N2QzNGU0YWM3NjczZDEuYmluZFBvcHVwKHBvcHVwXzk2YTM3MjQyYTdmNjQ3ODFhMWI2YTBjNDBkMjA3MjliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MDUzMjNkZTE2NDRhMmZhZGFlODZmMDU5YjllMjdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5OTUyODY5OTk5OTk5OCwtNDMuOTM3Mzk3MjkzMDMwNzM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxYzUyYWJkNWRlMDQ2NzdiMmEyOWEwN2Q0NThlOTAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzNDNlZGI5YWMwODQxYjc4M2JkZjhmZjZkN2RlMTI5ID0gJCgnPGRpdiBpZD0iaHRtbF8zMzQzZWRiOWFjMDg0MWI3ODNiZGY4ZmY2ZDdkZTEyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09OQ09SRElBIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxYzUyYWJkNWRlMDQ2NzdiMmEyOWEwN2Q0NThlOTAwLnNldENvbnRlbnQoaHRtbF8zMzQzZWRiOWFjMDg0MWI3ODNiZGY4ZmY2ZDdkZTEyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDA1MzIzZGUxNjQ0YTJmYWRhZTg2ZjA1OWI5ZTI3ZS5iaW5kUG9wdXAocG9wdXBfZjFjNTJhYmQ1ZGUwNDY3N2IyYTI5YTA3ZDQ1OGU5MDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDgwYzUwZGVjN2U0NGY5ZmJmNTJlOGE5MmM2MmFjZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk3OTMwNywtNDMuOTEzMDkxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNTQzNjBhMzI3NGQ0Yzk2YjI1MGE4ZjE5ZGI5N2MzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NWZkYTgxNjU3NjI0ZTYwODZmYzIzMzQ1MWUyMTg1MCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDVmZGE4MTY1NzYyNGU2MDg2ZmMyMzM0NTFlMjE4NTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklOU1RJVFVUTyBBR1JPTk9NSUNPIENsYXNzIHJlZ3VsYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1NDM2MGEzMjc0ZDRjOTZiMjUwYThmMTlkYjk3YzNjLnNldENvbnRlbnQoaHRtbF80NWZkYTgxNjU3NjI0ZTYwODZmYzIzMzQ1MWUyMTg1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wODBjNTBkZWM3ZTQ0ZjlmYmY1MmU4YTkyYzYyYWNkNy5iaW5kUG9wdXAocG9wdXBfYzU0MzYwYTMyNzRkNGM5NmIyNTBhOGYxOWRiOTdjM2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGY0OTdkMjM5YjE5NDQ0ZjhiM2IxYzc5OTA0YzUxYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEzMTMzNjAwMDAwMDAyLC00My45MDI4NTY5OTU3OTYyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjODAwMGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzgwMDBmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzdhNjhkNzA1ZGI0MTg5OGUxNzkxYzNhM2U1ZDdiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZjNiMmY3MGE4ZTc0YjBmYWYwMGQxOGI0MmY1ZjM1MiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2YzYjJmNzBhOGU3NGIwZmFmMDBkMThiNDJmNWYzNTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBPTVBFSUEgQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc3YTY4ZDcwNWRiNDE4OThlMTc5MWMzYTNlNWQ3YmQuc2V0Q29udGVudChodG1sXzdmM2IyZjcwYThlNzRiMGZhZjAwZDE4YjQyZjVmMzUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmNDk3ZDIzOWIxOTQ0NGY4YjNiMWM3OTkwNGM1MWI3LmJpbmRQb3B1cChwb3B1cF84NzdhNjhkNzA1ZGI0MTg5OGUxNzkxYzNhM2U1ZDdiZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mODk4MGMyZmUyZjg0MzJhOWU1NjQ4M2U1MDE1MWFlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzYzMDg5NSwtNDMuOTU2NTc1MjE5MzY0MTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiM4MDAwZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjODAwMGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhZWQzMjhiYzFiODRiZDFhMTI0N2IwYTE5MmVmN2I4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2ODBmZmNhZjIzMTQ0OTE4ZDNlNjE5YzY0OGUzZjY3ID0gJCgnPGRpdiBpZD0iaHRtbF9iNjgwZmZjYWYyMzE0NDkxOGQzZTYxOWM2NDhlM2Y2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBGUkFOQ0lTQ08gQ2xhc3MgcmVndWxhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWFlZDMyOGJjMWI4NGJkMWExMjQ3YjBhMTkyZWY3Yjguc2V0Q29udGVudChodG1sX2I2ODBmZmNhZjIzMTQ0OTE4ZDNlNjE5YzY0OGUzZjY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y4OTgwYzJmZTJmODQzMmE5ZTU2NDgzZTUwMTUxYWU4LmJpbmRQb3B1cChwb3B1cF81YWVkMzI4YmMxYjg0YmQxYTEyNDdiMGExOTJlZjdiOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzVjYTBkNGUxMjc0OTY3OGU2ZjhlMjExNmMyMGI3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTE5MDQ4LC00My45NDc3Mzg3Njg5ODA1MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZkYmExZTc3MGY1NDI3ZGI1YjhlNzVmZDM0YjAxNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDU3ZjZlMDczYzVmNDM3YmJkMmZkZjk2YjM3MDMzZGUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ1N2Y2ZTA3M2M1ZjQzN2JiZDJmZGY5NmIzNzAzM2RlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BRVJPUE9SVE8gQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjZkYmExZTc3MGY1NDI3ZGI1YjhlNzVmZDM0YjAxNDYuc2V0Q29udGVudChodG1sXzQ1N2Y2ZTA3M2M1ZjQzN2JiZDJmZGY5NmIzNzAzM2RlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdjNWNhMGQ0ZTEyNzQ5Njc4ZTZmOGUyMTE2YzIwYjdlLmJpbmRQb3B1cChwb3B1cF8yNmRiYTFlNzcwZjU0MjdkYjViOGU3NWZkMzRiMDE0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYmI5Nzc3YTRkM2E0OTI3YTY0YzkzYTE2ZjhmYTVhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzMxNzQsLTQzLjk2OTA3NzE0NzMyNTM4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDM1NjYyZTliZDE0Y2Q5YjczMmVmYTA1ZjRiOTkxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YWIzNjY1OGViYTA0ODE1YTQ2YmU4YjA4YWIyMjllYyA9ICQoJzxkaXYgaWQ9Imh0bWxfN2FiMzY2NThlYmEwNDgxNWE0NmJlOGIwOGFiMjI5ZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gQkFSUk9DQSBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NDM1NjYyZTliZDE0Y2Q5YjczMmVmYTA1ZjRiOTkxZi5zZXRDb250ZW50KGh0bWxfN2FiMzY2NThlYmEwNDgxNWE0NmJlOGIwOGFiMjI5ZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmJiOTc3N2E0ZDNhNDkyN2E2NGM5M2ExNmY4ZmE1YTguYmluZFBvcHVwKHBvcHVwXzc0MzU2NjJlOWJkMTRjZDliNzMyZWZhMDVmNGI5OTFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhYzIxYmMxNTgwNzQ0ODZiNDYxZTZiNmU4ZGE4OTcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NzY4NzQ1LC00My45NzUzMzMwNDYzMzMwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzFmZTNkODU1OWU0YTg2OWQ5ODVhODAyZWY0NTIzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYmQ4Y2E5MmE5NzY0NTJmOWZiZWEwOWU4YmE4MGQ5ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2JkOGNhOTJhOTc2NDUyZjlmYmVhMDllOGJhODBkOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gRE9TIENBSUNBUkFTIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMWZlM2Q4NTU5ZTRhODY5ZDk4NWE4MDJlZjQ1MjNlLnNldENvbnRlbnQoaHRtbF8zYmQ4Y2E5MmE5NzY0NTJmOWZiZWEwOWU4YmE4MGQ5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYWMyMWJjMTU4MDc0NDg2YjQ2MWU2YjZlOGRhODk3Mi5iaW5kUG9wdXAocG9wdXBfNDMxZmUzZDg1NTllNGE4NjlkOTg1YTgwMmVmNDUyM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzkzNGQzNTU3ODFmNDczZTgzOGQwZDNlN2M3NTk2ZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTIzMzgxNiwtNDMuOTUyMDEwODIyNzMyNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhkMzUzNGMzMDRjNDE4ZGEzZTc5YmVkMjhiZjRjM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQ2MTVlZWUwMGZmNDgyYmFjNTk1NzgzNDE5NmJjOGUgPSAkKCc8ZGl2IGlkPSJodG1sXzJkNjE1ZWVlMDBmZjQ4MmJhYzU5NTc4MzQxOTZiYzhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJSTyBQUkVUTyBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGQzNTM0YzMwNGM0MThkYTNlNzliZWQyOGJmNGMzYy5zZXRDb250ZW50KGh0bWxfMmQ2MTVlZWUwMGZmNDgyYmFjNTk1NzgzNDE5NmJjOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzkzNGQzNTU3ODFmNDczZTgzOGQwZDNlN2M3NTk2ZmQuYmluZFBvcHVwKHBvcHVwXzg4ZDM1MzRjMzA0YzQxOGRhM2U3OWJlZDI4YmY0YzNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiNmQ2ZDBjMjk3ODRjOGM5MDk4YmNhNzI4ZDhjZmU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMzc0MzM1LC00My45NjM5OTY0NDI3NDQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTcyNjVhODAxZjc0NTljYTRlOThlOTdhYjg0Mzc5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MmE3ZGIzNTczZjE0MzllOTVjODViZTgyMjE2YTJhOCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTJhN2RiMzU3M2YxNDM5ZTk1Yzg1YmU4MjIxNmEyYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJBUlJPQ0EgQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGU3MjY1YTgwMWY3NDU5Y2E0ZTk4ZTk3YWI4NDM3OTkuc2V0Q29udGVudChodG1sXzkyYTdkYjM1NzNmMTQzOWU5NWM4NWJlODIyMTZhMmE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiNmQ2ZDBjMjk3ODRjOGM5MDk4YmNhNzI4ZDhjZmU2LmJpbmRQb3B1cChwb3B1cF80ZTcyNjVhODAxZjc0NTljYTRlOThlOTdhYjg0Mzc5OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjRhMzcyNDA5OTA0MDgwOTIxNzNlZTMzNDJmNGIzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NzYwMDg4NSwtNDMuOTY4OTc5NDM3NjUxODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRiZDlkNzUxZGRkNGI2Nzg5NDgyZTBmMjJhM2FmYmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOThjMGY5MDYxN2ZiNDkxMzkyNmMzYjliZWUxZjU0NDQgPSAkKCc8ZGl2IGlkPSJodG1sXzk4YzBmOTA2MTdmYjQ5MTM5MjZjM2I5YmVlMWY1NDQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVVJJVElTIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkYmQ5ZDc1MWRkZDRiNjc4OTQ4MmUwZjIyYTNhZmJmLnNldENvbnRlbnQoaHRtbF85OGMwZjkwNjE3ZmI0OTEzOTI2YzNiOWJlZTFmNTQ0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjRhMzcyNDA5OTA0MDgwOTIxNzNlZTMzNDJmNGIzZS5iaW5kUG9wdXAocG9wdXBfOGRiZDlkNzUxZGRkNGI2Nzg5NDgyZTBmMjJhM2FmYmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBjMDc0MmIyNjcxNDE5MmEzZDk3MDFlY2Q3YjZlNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODc5MzAxNywtNDMuOTk5NTk4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDNiYzY4OWI0Njk0ZjVhYTg1NTU0MDViNTM3ZTY5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODU3OTg0NTM3NzE0MGQyOWM1MzZjNGQyNTEyZjZmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjg1Nzk4NDUzNzcxNDBkMjljNTM2YzRkMjUxMmY2ZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBU1RFTE8gQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTAzYmM2ODliNDY5NGY1YWE4NTU1NDA1YjUzN2U2OTMuc2V0Q29udGVudChodG1sXzY4NTc5ODQ1Mzc3MTQwZDI5YzUzNmM0ZDI1MTJmNmZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwYzA3NDJiMjY3MTQxOTJhM2Q5NzAxZWNkN2I2ZTQxLmJpbmRQb3B1cChwb3B1cF8xMDNiYzY4OWI0Njk0ZjVhYTg1NTU0MDViNTM3ZTY5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDJhOGNmYWFiNDM0MDA2YThjODlkYjkzNzM0ZWQxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTkzMzA4LC00My45NDAzNDg4MzczOTg4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzRlZGNmYTAzMGY0OTc4YjRkNjdmZGE1ODY3ODM3NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNWI1YjIyYTMxNWM0NDIzODc5MDk4ZWYyYzNjZDI3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDViNWIyMmEzMTVjNDQyMzg3OTA5OGVmMmMzY2QyNzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNFTlRSTyBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzRlZGNmYTAzMGY0OTc4YjRkNjdmZGE1ODY3ODM3Ni5zZXRDb250ZW50KGh0bWxfZDViNWIyMmEzMTVjNDQyMzg3OTA5OGVmMmMzY2QyNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTAyYThjZmFhYjQzNDAwNmE4Yzg5ZGI5MzczNGVkMTguYmluZFBvcHVwKHBvcHVwXzJjNGVkY2ZhMDMwZjQ5NzhiNGQ2N2ZkYTU4Njc4Mzc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwMGYzZTViZTQ0ZDQwNzJiM2IzMzljNDg0NDE5Mjg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4OTIzOSwtNDMuOTI0ODU3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmQ4NDI2Y2JkOWQ0MTYzYWZiYjcwZTY3MGJkNzc0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTBhNTZjMDBmNjQ0MDgxYTJhNzMzNmUwODIwOTVlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTEwYTU2YzAwZjY0NDA4MWEyYTczMzZlMDgyMDk1ZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNJREFERSBOT1ZBIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyZDg0MjZjYmQ5ZDQxNjNhZmJiNzBlNjcwYmQ3NzRiLnNldENvbnRlbnQoaHRtbF9hMTBhNTZjMDBmNjQ0MDgxYTJhNzMzNmUwODIwOTVlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MDBmM2U1YmU0NGQ0MDcyYjNiMzM5YzQ4NDQxOTI4NS5iaW5kUG9wdXAocG9wdXBfNDJkODQyNmNiZDlkNDE2M2FmYmI3MGU2NzBiZDc3NGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNjNTNhYTY2ZWEyNGE3MTkzYzE4M2JkYzFiNDNmOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA5NDM5LC00My45MzcxMzc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkMjQyYTVkYTE2NzQ1NzJhMTlhZDA2MTYzNDc0MDllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzZjg3NTg3Y2NkNTRjY2Q4MzA2NmM1ODdhNzA0ZDBkID0gJCgnPGRpdiBpZD0iaHRtbF84M2Y4NzU4N2NjZDU0Y2NkODMwNjZjNTg3YTcwNGQwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09MRUdJTyBCQVRJU1RBIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkMjQyYTVkYTE2NzQ1NzJhMTlhZDA2MTYzNDc0MDllLnNldENvbnRlbnQoaHRtbF84M2Y4NzU4N2NjZDU0Y2NkODMwNjZjNTg3YTcwNGQwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lM2M1M2FhNjZlYTI0YTcxOTNjMTgzYmRjMWI0M2Y4ZC5iaW5kUG9wdXAocG9wdXBfNmQyNDJhNWRhMTY3NDU3MmExOWFkMDYxNjM0NzQwOWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDU5ZGI2NmYzOTVjNGQ3OWFiZTFkYzZjNzZlMDg1YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI0MTIxNiwtNDMuOTg5NTAyMDMyNDk3ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiMGY5ZjI1MTEyYTRlNmU4NjQzNjVmNWY2YjE0MzA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyNTI0YzFiNDQ0ZTQ1NjZhOTMyYjQ2MmZmYzc2N2MzID0gJCgnPGRpdiBpZD0iaHRtbF9mMjUyNGMxYjQ0NGU0NTY2YTkzMmI0NjJmZmM3NjdjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09SQUNBTyBFVUNBUklTVElDTyBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjBmOWYyNTExMmE0ZTZlODY0MzY1ZjVmNmIxNDMwOC5zZXRDb250ZW50KGh0bWxfZjI1MjRjMWI0NDRlNDU2NmE5MzJiNDYyZmZjNzY3YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDU5ZGI2NmYzOTVjNGQ3OWFiZTFkYzZjNzZlMDg1YjIuYmluZFBvcHVwKHBvcHVwX2ZiMGY5ZjI1MTEyYTRlNmU4NjQzNjVmNWY2YjE0MzA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiMzcyOWJkMGVhODQ5ZTZiYWFjNTMwMzcwNDExZjk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1ODU3MTg0OTk5OTk5NywtNDMuOTQwNDU5MzI3Njg0Mzk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmOTJkMGIzY2M3OTRmMGE5NTliN2FiNjhmM2M0ZjVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3Yjg4ZGVkZGUyNjQ0OThhOTNlZTk2ZjQzMWVmOWJlID0gJCgnPGRpdiBpZD0iaHRtbF9lN2I4OGRlZGRlMjY0NDk4YTkzZWU5NmY0MzFlZjliZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RE9OQSBDTEFSQSBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZjkyZDBiM2NjNzk0ZjBhOTU5YjdhYjY4ZjNjNGY1ZC5zZXRDb250ZW50KGh0bWxfZTdiODhkZWRkZTI2NDQ5OGE5M2VlOTZmNDMxZWY5YmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGIzNzI5YmQwZWE4NDllNmJhYWM1MzAzNzA0MTFmOTYuYmluZFBvcHVwKHBvcHVwXzFmOTJkMGIzY2M3OTRmMGE5NTliN2FiNjhmM2M0ZjVkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhNDgyZmQ3MmZjMDQ4NDM4OWI5YWJiOGU0OWFmMzNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk2MzEyNTcsLTQzLjk2MTEwOTU0NTMwNDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzZDNmYmFkYTU1MDRkM2RhNmRmYTRjYTZlOTIxYTY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwMTU0NTQ4YTdlMzQ1MTJhZDUxYjgzNGIyZGIxMTBiID0gJCgnPGRpdiBpZD0iaHRtbF8xMDE1NDU0OGE3ZTM0NTEyYWQ1MWI4MzRiMmRiMTEwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RVNUT1JJTCBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hM2QzZmJhZGE1NTA0ZDNkYTZkZmE0Y2E2ZTkyMWE2Ny5zZXRDb250ZW50KGh0bWxfMTAxNTQ1NDhhN2UzNDUxMmFkNTFiODM0YjJkYjExMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2E0ODJmZDcyZmMwNDg0Mzg5YjlhYmI4ZTQ5YWYzM2QuYmluZFBvcHVwKHBvcHVwX2EzZDNmYmFkYTU1MDRkM2RhNmRmYTRjYTZlOTIxYTY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4YmFmZjc5YzY3ZTRiMTZiZjRlOWE0MzlmZWI5NjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxMjc0NjQsLTQzLjkzMDIwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjUwNDgzM2E0Nzk5NGVjMGFkYmZhNTEzNzVhZjRlN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGJjZGI1Njc0MzVkNGVhMjlkMWZmZWM2M2I0YjliNTUgPSAkKCc8ZGl2IGlkPSJodG1sX2RiY2RiNTY3NDM1ZDRlYTI5ZDFmZmVjNjNiNGI5YjU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GTE9SRVNUQSBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTA0ODMzYTQ3OTk0ZWMwYWRiZmE1MTM3NWFmNGU3Yy5zZXRDb250ZW50KGh0bWxfZGJjZGI1Njc0MzVkNGVhMjlkMWZmZWM2M2I0YjliNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMThiYWZmNzljNjdlNGIxNmJmNGU5YTQzOWZlYjk2NTcuYmluZFBvcHVwKHBvcHVwXzI1MDQ4MzNhNDc5OTRlYzBhZGJmYTUxMzc1YWY0ZTdjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwYWQyNGNhMGI1ZDQwOTBhOTdlMDZmZGFiZGMxNDlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzODg3OTY0OTk5OTk5NywtNDMuOTY1NjczOTI4MDgyNzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTkzNTNjMGIzNDcyNDgxMThiYzczMTNiY2JlOTQ5N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTdhMjliMDY1Y2NmNDQ3MTg3NGNmNjFhNjVkNzM4YzAgPSAkKCc8ZGl2IGlkPSJodG1sX2E3YTI5YjA2NWNjZjQ0NzE4NzRjZjYxYTY1ZDczOGMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HUkFKQVUgQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTkzNTNjMGIzNDcyNDgxMThiYzczMTNiY2JlOTQ5N2Iuc2V0Q29udGVudChodG1sX2E3YTI5YjA2NWNjZjQ0NzE4NzRjZjYxYTY1ZDczOGMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwYWQyNGNhMGI1ZDQwOTBhOTdlMDZmZGFiZGMxNDlmLmJpbmRQb3B1cChwb3B1cF9lOTM1M2MwYjM0NzI0ODExOGJjNzMxM2JjYmU5NDk3Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjlmODAyOTNkMzU0MzMzODMxYmVhZjMwNGVhMDE2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY0MTMwNDk5OTk5OTcsLTQzLjk1OTg3ODcyODYzMDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwNTU3ZDc2YTM4YjQzNDZiOWRiYWFiYzVkNTE2NmRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5MTZiNzVjYjRiZDQwM2FhOTQ0MGE1ZWVlNmQyMmEzID0gJCgnPGRpdiBpZD0iaHRtbF8zOTE2Yjc1Y2I0YmQ0MDNhYTk0NDBhNWVlZTZkMjJhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVRBUE9BIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNTU3ZDc2YTM4YjQzNDZiOWRiYWFiYzVkNTE2NmRhLnNldENvbnRlbnQoaHRtbF8zOTE2Yjc1Y2I0YmQ0MDNhYTk0NDBhNWVlZTZkMjJhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZjlmODAyOTNkMzU0MzMzODMxYmVhZjMwNGVhMDE2Mi5iaW5kUG9wdXAocG9wdXBfNTA1NTdkNzZhMzhiNDM0NmI5ZGJhYWJjNWQ1MTY2ZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjU4NTQzNTRlOTY2NDIxMzk3MzYxYmMwNjNmYzZmYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU2NTc4MjUsLTQzLjk0OTk0MzM0OTI2MzcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3NTdjMDhkZDU3NzQ0NWRiNGM3NzEzMTU5ZDI0N2UwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmMDBlYWVhZmE1YjQ2ODQ5NTc0ZDliN2IxYTQ5YTc0ID0gJCgnPGRpdiBpZD0iaHRtbF9kZjAwZWFlYWZhNWI0Njg0OTU3NGQ5YjdiMWE0OWE3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSQUdVQSBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NzU3YzA4ZGQ1Nzc0NDVkYjRjNzcxMzE1OWQyNDdlMC5zZXRDb250ZW50KGh0bWxfZGYwMGVhZWFmYTViNDY4NDk1NzRkOWI3YjFhNDlhNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjU4NTQzNTRlOTY2NDIxMzk3MzYxYmMwNjNmYzZmYzEuYmluZFBvcHVwKHBvcHVwXzY3NTdjMDhkZDU3NzQ0NWRiNGM3NzEzMTU5ZDI0N2UwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjODAxNGVmNjk0MTRiYmQ5NGQzOGI3ZjU5Zjk0NThjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg0MzkwMzQwMDAwMDAwMiwtNDMuOTYzMjUxMzA1NDA3MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Y2ZGRiMmM0YTdmNDYyNThjNGVhNjk5ZjhjZWU2ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQxNTA4ZmEwYjBhNDY1NjhkMjhhMjk5YTY2N2IxNWYgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0MTUwOGZhMGIwYTQ2NTY4ZDI4YTI5OWE2NjdiMTVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJESU0gQVRMQU5USUNPIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmNmRkYjJjNGE3ZjQ2MjU4YzRlYTY5OWY4Y2VlNmQ2LnNldENvbnRlbnQoaHRtbF9kNDE1MDhmYTBiMGE0NjU2OGQyOGEyOTlhNjY3YjE1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYzgwMTRlZjY5NDE0YmJkOTRkMzhiN2Y1OWY5NDU4Yy5iaW5kUG9wdXAocG9wdXBfN2Y2ZGRiMmM0YTdmNDYyNThjNGVhNjk5ZjhjZWU2ZDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWI4ZWE5MGRhNWQzNGRjMDlkYWMwYTZlMzU0MDIzYzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYxODM1OCwtNDMuOTU0NzU2OTE1MDUwNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNThlYmJlMjU2YjEwNDVjNjk0ZmRhM2UyMzM3NzRmMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYyZDM2NmJkOTg5NDZlYWFhYTNlMTllNjQ0MDcxNTggPSAkKCc8ZGl2IGlkPSJodG1sXzA2MmQzNjZiZDk4OTQ2ZWFhYWEzZTE5ZTY0NDA3MTU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MSUJFUkRBREUgQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNThlYmJlMjU2YjEwNDVjNjk0ZmRhM2UyMzM3NzRmMTQuc2V0Q29udGVudChodG1sXzA2MmQzNjZiZDk4OTQ2ZWFhYWEzZTE5ZTY0NDA3MTU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzViOGVhOTBkYTVkMzRkYzA5ZGFjMGE2ZTM1NDAyM2MwLmJpbmRQb3B1cChwb3B1cF81OGViYmUyNTZiMTA0NWM2OTRmZGEzZTIzMzc3NGYxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjNjNTJlODcwNTE0OWNhOThiNWQxOTM4YThlYjdhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Mjk4MzA3OTk5OTk5OTgsLTQzLjkxMzY4OTk0NTczNDEzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDdhZDI3MGIzOTQ0M2I0YWI0NDBhZWM5MGEwMDljOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZGMyMGQ1ZjY1YTk0YWNiYThlZWU2M2UxMWM4ZDAyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZWRjMjBkNWY2NWE5NGFjYmE4ZWVlNjNlMTFjOGQwMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVk8gU0FPIExVQ0FTIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwN2FkMjcwYjM5NDQzYjRhYjQ0MGFlYzkwYTAwOWM4LnNldENvbnRlbnQoaHRtbF9lZGMyMGQ1ZjY1YTk0YWNiYThlZWU2M2UxMWM4ZDAyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZjNjNTJlODcwNTE0OWNhOThiNWQxOTM4YThlYjdhNS5iaW5kUG9wdXAocG9wdXBfMTA3YWQyNzBiMzk0NDNiNGFiNDQwYWVjOTBhMDA5YzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmRjYzBhY2YxMmFjNDc4ZTljMjZjMTY4YTBlZjQ1ODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODcyMjUzNiwtNDMuOTgyOTg3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDllYzVhOTNlNDA0NmYyYjBlMGI2OWY0Y2E0ZTVhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTkyMzQ5M2Y0ODY0ZmM1YjE1MjdkNTQ0ODVlM2JmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWU5MjM0OTNmNDg2NGZjNWIxNTI3ZDU0NDg1ZTNiZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9VUk8gUFJFVE8gQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ5ZWM1YTkzZTQwNDZmMmIwZTBiNjlmNGNhNGU1YTIuc2V0Q29udGVudChodG1sXzVlOTIzNDkzZjQ4NjRmYzViMTUyN2Q1NDQ4NWUzYmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkY2MwYWNmMTJhYzQ3OGU5YzI2YzE2OGEwZWY0NTg2LmJpbmRQb3B1cChwb3B1cF8wNDllYzVhOTNlNDA0NmYyYjBlMGI2OWY0Y2E0ZTVhMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDFjYjE3M2VkMDE0M2EyYmZmNzBmMzY2OWRlNmZkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjM4MDM2LC00My45NzQ5Mjg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2ZWFkMGFhZTIzZTQwYzU4Y2Q4ZjdiYTQ4MjcxNmFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3MTEyYjFkOWNjODQ2NDQ5ZTNiMWU5OTQwOTA5MmMyID0gJCgnPGRpdiBpZD0iaHRtbF8wNzExMmIxZDljYzg0NjQ0OWUzYjFlOTk0MDkwOTJjMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFNUFVMSEEgQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZlYWQwYWFlMjNlNDBjNThjZDhmN2JhNDgyNzE2YWQuc2V0Q29udGVudChodG1sXzA3MTEyYjFkOWNjODQ2NDQ5ZTNiMWU5OTQwOTA5MmMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkMWNiMTczZWQwMTQzYTJiZmY3MGYzNjY5ZGU2ZmQ3LmJpbmRQb3B1cChwb3B1cF8zNmVhZDBhYWUyM2U0MGM1OGNkOGY3YmE0ODI3MTZhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Y2NmM2M2MDAyNTA0ODcyOGFkMjFmNjRiOGI1OWQ5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjQxMTM5MDAwMDAwMDIsLTQzLjk2MjM0NjI2NTcyNjY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzlhZjA5ZjkzYmI0ZGRjOTI3MWY5NWJhNzdmYzEzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDY1MmQ2MmU1ZTQ0ZmUzOWU1YWFiMzIyODYwNmFlYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjQ2NTJkNjJlNWU0NGZlMzllNWFhYjMyMjg2MDZhZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBSQURPIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3OWFmMDlmOTNiYjRkZGM5MjcxZjk1YmE3N2ZjMTMwLnNldENvbnRlbnQoaHRtbF8yNDY1MmQ2MmU1ZTQ0ZmUzOWU1YWFiMzIyODYwNmFlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Y2NmM2M2MDAyNTA0ODcyOGFkMjFmNjRiOGI1OWQ5Ny5iaW5kUG9wdXAocG9wdXBfMzc5YWYwOWY5M2JiNGRkYzkyNzFmOTViYTc3ZmMxMzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDVlY2JjN2Y0NjMxNGRjMDkyMjg0NmMxYjgxMDgwZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM5MDg0NzQ5OTk5OTk4LC00My45Nzc4ODQwNDEwMDQ4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMmFkZGRkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzJhZGRkZCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNGFiMTJhYzg4NjQ0OTdiYTQxNmQ3NDNhZmYwOGUzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTRkN2Q1YWY4N2I0ZmY5OGE3ZmRkYmJlYzBjNWY5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTE0ZDdkNWFmODdiNGZmOThhN2ZkZGJiZWMwYzVmOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIEFNRUxJQSBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNGFiMTJhYzg4NjQ0OTdiYTQxNmQ3NDNhZmYwOGUzMi5zZXRDb250ZW50KGh0bWxfZTE0ZDdkNWFmODdiNGZmOThhN2ZkZGJiZWMwYzVmOTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDVlY2JjN2Y0NjMxNGRjMDkyMjg0NmMxYjgxMDgwZjkuYmluZFBvcHVwKHBvcHVwX2M0YWIxMmFjODg2NDQ5N2JhNDE2ZDc0M2FmZjA4ZTMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2MDdlMGE2YzMzOTRiZGJhYWFhNzBiOTc1MjM5YzI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNDc0OTksLTQzLjk2NzgxMTkwMDc2NzQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2Yjg4NDA2YjMwYjRmYjRiMDVhNGEyM2ExYzU5NDljID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NTFjNTJjMWQ0MzQzNzc5N2E0MWJkOWNmMDJhNjM0ID0gJCgnPGRpdiBpZD0iaHRtbF8xNDUxYzUyYzFkNDM0Mzc3OTdhNDFiZDljZjAyYTYzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FOVEEgQlJBTkNBIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2Yjg4NDA2YjMwYjRmYjRiMDVhNGEyM2ExYzU5NDljLnNldENvbnRlbnQoaHRtbF8xNDUxYzUyYzFkNDM0Mzc3OTdhNDFiZDljZjAyYTYzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNjA3ZTBhNmMzMzk0YmRiYWFhYTcwYjk3NTIzOWMyNi5iaW5kUG9wdXAocG9wdXBfNTZiODg0MDZiMzBiNGZiNGIwNWE0YTIzYTFjNTk0OWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ2ZTdmMGI1MTA1NGZjNGJjZmM4MGJjNDViOWIwMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYzNDgxNCwtNDMuOTQ2MzE2OTkzMTMxODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdkMzA0OTFjNjRmNGE1Njg4MzZlNTQ0NGExMTQzMmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDExOWQ2OGQ5NzgyNDY5OWE0MjVlZWY4ZDRjMzYxNmUgPSAkKCc8ZGl2IGlkPSJodG1sXzAxMTlkNjhkOTc4MjQ2OTlhNDI1ZWVmOGQ0YzM2MTZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBST1NBIENsYXNzIGhpZ2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3ZDMwNDkxYzY0ZjRhNTY4ODM2ZTU0NDRhMTE0MzJiLnNldENvbnRlbnQoaHRtbF8wMTE5ZDY4ZDk3ODI0Njk5YTQyNWVlZjhkNGMzNjE2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDZlN2YwYjUxMDU0ZmM0YmNmYzgwYmM0NWI5YjAzMC5iaW5kUG9wdXAocG9wdXBfYzdkMzA0OTFjNjRmNGE1Njg4MzZlNTQ0NGExMTQzMmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGYxZWZlY2U2ODlkNDI5Njg5NDY3YzRjNjRjY2IzOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE0ODkyMSwtNDMuOTE3MDQ2MTQzNjUxNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzJhZGRkZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyYWRkZGQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWI4OTk2YTAzMDU2NGZiMWE0YzJkNzMwMmI2ZTNlZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmExNDAzY2E1OTM0NGU2ZWI5ZmU0MDYwZWQyNmZjNTkgPSAkKCc8ZGl2IGlkPSJodG1sXzJhMTQwM2NhNTkzNDRlNmViOWZlNDA2MGVkMjZmYzU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBURVJFWkEgQ2xhc3MgaGlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWI4OTk2YTAzMDU2NGZiMWE0YzJkNzMwMmI2ZTNlZmEuc2V0Q29udGVudChodG1sXzJhMTQwM2NhNTkzNDRlNmViOWZlNDA2MGVkMjZmYzU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmMWVmZWNlNjg5ZDQyOTY4OTQ2N2M0YzY0Y2NiMzhmLmJpbmRQb3B1cChwb3B1cF81Yjg5OTZhMDMwNTY0ZmIxYTRjMmQ3MzAyYjZlM2VmYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmUyZWRmNTVkMWU0ZjVkODQ1OWY5OTk5NGZjNTY1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzExNTYzNTAwMDAwMDIsLTQzLjkyMTI2MTY5Mzk5MDYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMyYWRkZGQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMmFkZGRkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmZDkyOWViZjY2MjQ2MjM5ZGUzODlkZGIzM2QxMjVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5NDQ4ZDMzNTZlNzQxM2Q4YWQxZmUxYjBhYjk3MTVmID0gJCgnPGRpdiBpZD0iaHRtbF9lOTQ0OGQzMzU2ZTc0MTNkOGFkMWZlMWIwYWI5NzE1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBMVUNBUyBDbGFzcyBoaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZmQ5MjllYmY2NjI0NjIzOWRlMzg5ZGRiMzNkMTI1ZS5zZXRDb250ZW50KGh0bWxfZTk0NDhkMzM1NmU3NDEzZDhhZDFmZTFiMGFiOTcxNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDZlMmVkZjU1ZDFlNGY1ZDg0NTlmOTk5OTRmYzU2NWQuYmluZFBvcHVwKHBvcHVwXzRmZDkyOWViZjY2MjQ2MjM5ZGUzODlkZGIzM2QxMjVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2Y2E1MmQ0N2Y4NTQ2YzNiNGVkNTY4NjE1NWQ5ODA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1Nzk1ODcsLTQzLjk4ODI3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2FlMjc1MGZhNTM4NDRkYWEyMGYyZDkxZmE1NzMxMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWE5ZWRhMDFmZDQyNDM0NjhiNTVlZTEyNTFmNGRkY2IgPSAkKCc8ZGl2IGlkPSJodG1sX2FhOWVkYTAxZmQ0MjQzNDY4YjU1ZWUxMjUxZjRkZGNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQU5ERUlSQU5URVMgQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWUyNzUwZmE1Mzg0NGRhYTIwZjJkOTFmYTU3MzEyMS5zZXRDb250ZW50KGh0bWxfYWE5ZWRhMDFmZDQyNDM0NjhiNTVlZTEyNTFmNGRkY2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDZjYTUyZDQ3Zjg1NDZjM2I0ZWQ1Njg2MTU1ZDk4MDguYmluZFBvcHVwKHBvcHVwXzdhZTI3NTBmYTUzODQ0ZGFhMjBmMmQ5MWZhNTczMTIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxNzBjODlhN2JmMzQyMTNiZTg4NmYwMzkwMjliZDIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk4MDI3NTIsLTQzLjk0NjU3MDA3NzE3MjQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTllZGE2YTEzMjg0ZmZjYjM0MjgxNWI5MjZmZDM5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MmExMWI1ZGI5YTI0ZDdiODMwYTE4Mzg2NWE5MWUxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfODJhMTFiNWRiOWEyNGQ3YjgzMGExODM4NjVhOTFlMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFTFZFREVSRSBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhOWVkYTZhMTMyODRmZmNiMzQyODE1YjkyNmZkMzkzLnNldENvbnRlbnQoaHRtbF84MmExMWI1ZGI5YTI0ZDdiODMwYTE4Mzg2NWE5MWUxZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTcwYzg5YTdiZjM0MjEzYmU4ODZmMDM5MDI5YmQyMS5iaW5kUG9wdXAocG9wdXBfZGE5ZWRhNmExMzI4NGZmY2IzNDI4MTViOTI2ZmQzOTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTg2NjgyN2U3NjViNDVhNDhiMzE4NDQyZWYxOWQzNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQzNDQyNiwtNDMuOTMyMDkyODE0NDA5OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWYyMmM2ODhiNDcxNDBkZjgzY2M1NGQwYWQwNzJmMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTAxNzk2YmFhN2MwNDI4YjgzMGZiNThjNjJkNWM2MTEgPSAkKCc8ZGl2IGlkPSJodG1sX2EwMTc5NmJhYTdjMDQyOGI4MzBmYjU4YzYyZDVjNjExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVJNTyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VmMjJjNjg4YjQ3MTQwZGY4M2NjNTRkMGFkMDcyZjE0LnNldENvbnRlbnQoaHRtbF9hMDE3OTZiYWE3YzA0MjhiODMwZmI1OGM2MmQ1YzYxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lODY2ODI3ZTc2NWI0NWE0OGIzMTg0NDJlZjE5ZDM2ZS5iaW5kUG9wdXAocG9wdXBfZWYyMmM2ODhiNDcxNDBkZjgzY2M1NGQwYWQwNzJmMTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNkZDQwNGI3OWU1NDFmY2FiYTEwZTEwNTZjN2NjMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM4NDc2NzAwMDAwMDAyLC00My45NTA2NjAwNjUzNTQzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTY1MGU4OTMwNTU0MGIyYjk4NzVhZTRkYWM3NTkyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMThmYTdjNmY5MWE0NTFhODNhOTZhZGNiMjZjZmM0OSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTE4ZmE3YzZmOTFhNDUxYTgzYTk2YWRjYjI2Y2ZjNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNJREFERSBKQVJESU0gQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTY1MGU4OTMwNTU0MGIyYjk4NzVhZTRkYWM3NTkyMC5zZXRDb250ZW50KGh0bWxfMTE4ZmE3YzZmOTFhNDUxYTgzYTk2YWRjYjI2Y2ZjNDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDNkZDQwNGI3OWU1NDFmY2FiYTEwZTEwNTZjN2NjMjUuYmluZFBvcHVwKHBvcHVwXzY1NjUwZTg5MzA1NTQwYjJiOTg3NWFlNGRhYzc1OTIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViYjAyZTljMWFhMDQ2M2ZiOTc1OGFhYjAzN2E1NDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NTg3NDA5OTk5OTk5NywtNDMuOTUxMjI4NjI1NzcwODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTY3MzY1MjE2Zjk5NDBjZjkwN2FiNmYzMmFhYWViZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE4OGZmMzRlZDA0NDcwYTkyM2JiODZhNjZiYzg1ODUgPSAkKCc8ZGl2IGlkPSJodG1sXzRhODhmZjM0ZWQwNDQ3MGE5MjNiYjg2YTY2YmM4NTg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DT1JBQ0FPIERFIEpFU1VTIENsYXNzIGx1eHVyeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTY3MzY1MjE2Zjk5NDBjZjkwN2FiNmYzMmFhYWViZWIuc2V0Q29udGVudChodG1sXzRhODhmZjM0ZWQwNDQ3MGE5MjNiYjg2YTY2YmM4NTg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViYjAyZTljMWFhMDQ2M2ZiOTc1OGFhYjAzN2E1NDU5LmJpbmRQb3B1cChwb3B1cF9hNjczNjUyMTZmOTk0MGNmOTA3YWI2ZjMyYWFhZWJlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmY3MGU1YzdmMDA0NjdhOTc0OWM2OTgxYjMyMDAzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDQyNTg4LC00My45Mjg0MTI5NjA1OTczNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE5MzA1OGE0MWRjNGMwMThjNjAxY2I0MDE4OTI0MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQwODY1ZTNkYzY0NDZmMGFmY2E5OTM5MzIzZDNhOGIgPSAkKCc8ZGl2IGlkPSJodG1sXzVkMDg2NWUzZGM2NDQ2ZjBhZmNhOTkzOTMyM2QzYThiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DUlVaRUlSTyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxOTMwNThhNDFkYzRjMDE4YzYwMWNiNDAxODkyNDI3LnNldENvbnRlbnQoaHRtbF81ZDA4NjVlM2RjNjQ0NmYwYWZjYTk5MzkzMjNkM2E4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MmY3MGU1YzdmMDA0NjdhOTc0OWM2OTgxYjMyMDAzMy5iaW5kUG9wdXAocG9wdXBfNTE5MzA1OGE0MWRjNGMwMThjNjAxY2I0MDE4OTI0MjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGRjNDRkZmJlOTc4NDRkNmFmYzBiZDZjZWUzYTE0NGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTMyNTE2MjAwMDAwMDAyLC00My45MjczMTgyNzM0NjMyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYmMyZWFiODliODM0ZWU0YmI4Y2QzOTc4NjU1YTlkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjQyZjkxNzZmMGU0YjhiYWUwZjY0MTg3NWMyM2NlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I0MmY5MTc2ZjBlNGI4YmFlMGY2NDE4NzVjMjNjZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZVTkNJT05BUklPUyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNiYzJlYWI4OWI4MzRlZTRiYjhjZDM5Nzg2NTVhOWRmLnNldENvbnRlbnQoaHRtbF9jYjQyZjkxNzZmMGU0YjhiYWUwZjY0MTg3NWMyM2NlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZGM0NGRmYmU5Nzg0NGQ2YWZjMGJkNmNlZTNhMTQ0Zi5iaW5kUG9wdXAocG9wdXBfM2JjMmVhYjg5YjgzNGVlNGJiOGNkMzk3ODY1NWE5ZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNhMWVhMDBjZTdiNDU3MzhjY2EwNGQ4MjI3ZjliNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM5NjM3NiwtNDMuOTU4NjY5MDk1NjE0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTYzMjQ5OTg0NjdiNDlmY2FiNDgyNmMzZGZkZDA4MTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDg3MjEwN2Y1MTRhNDc5ZGE3MTg2ZDZmODkwNWZhOWIgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4NzIxMDdmNTE0YTQ3OWRhNzE4NmQ2Zjg5MDVmYTliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVVRJRVJSRVogQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjMyNDk5ODQ2N2I0OWZjYWI0ODI2YzNkZmRkMDgxOC5zZXRDb250ZW50KGh0bWxfNDg3MjEwN2Y1MTRhNDc5ZGE3MTg2ZDZmODkwNWZhOWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNhMWVhMDBjZTdiNDU3MzhjY2EwNGQ4MjI3ZjliNGYuYmluZFBvcHVwKHBvcHVwXzE2MzI0OTk4NDY3YjQ5ZmNhYjQ4MjZjM2RmZGQwODE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3YTY4MDIwZTcwNTRlYzU4ODUzNmFkZWY2Y2Y5ZTk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMjE1MzEsLTQzLjk0MzU3NTA0ODQxMDUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2YmUzNDUxYWI4OTQ4OWRhNzcyYmU2MDYyYTdkOGFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4NDgyMWZmOWU1MjQ5OGI5ZDI1YWYwNGQzMTc4NmM3ID0gJCgnPGRpdiBpZD0iaHRtbF9mODQ4MjFmZjllNTI0OThiOWQyNWFmMDRkMzE3ODZjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TE9VUkRFUyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2YmUzNDUxYWI4OTQ4OWRhNzcyYmU2MDYyYTdkOGFmLnNldENvbnRlbnQoaHRtbF9mODQ4MjFmZjllNTI0OThiOWQyNWFmMDRkMzE3ODZjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hN2E2ODAyMGU3MDU0ZWM1ODg1MzZhZGVmNmNmOWU5Ni5iaW5kUG9wdXAocG9wdXBfYjZiZTM0NTFhYjg5NDg5ZGE3NzJiZTYwNjJhN2Q4YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQ2NzQ2MmI2NDRmNDQyMjk5YTI4NTc1MTQzMWZjMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ2NjU3NCwtNDMuOTU2MzYzMTc1NDAxMTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0MGIxMTE4NjNkMTQzNjU5YzU1ZjIyMmE2NWQ0ZjRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1NWZkMTA3MGNhNjQ1NTc4OTRlNGQ0NWM0ODI0ZmNmID0gJCgnPGRpdiBpZD0iaHRtbF8xNTVmZDEwNzBjYTY0NTU3ODk0ZTRkNDVjNDgyNGZjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFVYRU1CVVJHTyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0MGIxMTE4NjNkMTQzNjU5YzU1ZjIyMmE2NWQ0ZjRiLnNldENvbnRlbnQoaHRtbF8xNTVmZDEwNzBjYTY0NTU3ODk0ZTRkNDVjNDgyNGZjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDY3NDYyYjY0NGY0NDIyOTlhMjg1NzUxNDMxZmMyNy5iaW5kUG9wdXAocG9wdXBfNzQwYjExMTg2M2QxNDM2NTljNTVmMjIyYTY1ZDRmNGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdkYjI2NjZiNDg3NGRhODg5MWQzMTcwZmQ0OWE0YWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTU1NDM0NCwtNDMuOTExNjA5MjEzMzE5ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMThkYTQzYzIzZGU1NDNiYThmOTFiN2Q4NjcwYzNiM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzdmZjk3YjAyYjQxNDg2ODkwMTA4MThjNDA1NjIwN2UgPSAkKCc8ZGl2IGlkPSJodG1sX2M3ZmY5N2IwMmI0MTQ4Njg5MDEwODE4YzQwNTYyMDdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU5HQUJFSVJBUyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4ZGE0M2MyM2RlNTQzYmE4ZjkxYjdkODY3MGMzYjNmLnNldENvbnRlbnQoaHRtbF9jN2ZmOTdiMDJiNDE0ODY4OTAxMDgxOGM0MDU2MjA3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81N2RiMjY2NmI0ODc0ZGE4ODkxZDMxNzBmZDQ5YTRhZS5iaW5kUG9wdXAocG9wdXBfMThkYTQzYzIzZGU1NDNiYThmOTFiN2Q4NjcwYzNiM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTAxNzEyNTY5NTkwNGRjNTk4YzM4MDEwMjgxNGI4M2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ3NzA0NjUsLTQzLjkwNDYyOTA4MTUyMDA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzZjZTRlMWRkZDg0OWY4YTY2MzNkMzA4Zjk5ZWIxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTdkZWU4MjA2MDI0MmYzODYyYTI3MzdlYzVjZjYwOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDk3ZGVlODIwNjAyNDJmMzg2MmEyNzM3ZWM1Y2Y2MDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBUlFVRSBEQVMgTUFOR0FCRUlSQVMgQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMzZjZTRlMWRkZDg0OWY4YTY2MzNkMzA4Zjk5ZWIxZS5zZXRDb250ZW50KGh0bWxfNDk3ZGVlODIwNjAyNDJmMzg2MmEyNzM3ZWM1Y2Y2MDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTAxNzEyNTY5NTkwNGRjNTk4YzM4MDEwMjgxNGI4M2IuYmluZFBvcHVwKHBvcHVwXzMzNmNlNGUxZGRkODQ5ZjhhNjYzM2QzMDhmOTllYjFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmYTQ5MzI5ZjUzODQ0ZjI5YzQwYTlmY2E4M2FkMDFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk2MzIyNTYsLTQzLjk0NTEwMDk2MDkzNzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmNDEwNDc3YTM1YTRmMjRhODc2Zjk2YjYzNGJjZDA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0YTE3ZTJkODkwYTQ5YWU5ZTg2MDY4NzZkYTEyOTUwID0gJCgnPGRpdiBpZD0iaHRtbF85NGExN2UyZDg5MGE0OWFlOWU4NjA2ODc2ZGExMjk1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FOVEEgTFVDSUEgQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZjQxMDQ3N2EzNWE0ZjI0YTg3NmY5NmI2MzRiY2QwNi5zZXRDb250ZW50KGh0bWxfOTRhMTdlMmQ4OTBhNDlhZTllODYwNjg3NmRhMTI5NTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGZhNDkzMjlmNTM4NDRmMjljNDBhOWZjYTgzYWQwMWQuYmluZFBvcHVwKHBvcHVwX2NmNDEwNDc3YTM1YTRmMjRhODc2Zjk2YjYzNGJjZDA2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlYWNhOTk1ZjgwMzQyYmI4OTk4M2NmN2EzYTkwOTViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyODgxMTM1LC00My45NTE0MDc0Mjk5NDkxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOTI5MTUxYzk5OTM0YzViYTQ4NDU5YTk4MjNiMzQ1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjRjYmU2MjBkZWU0MWU1YWIxYjY5NjJiMTUwZGEyZSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGY0Y2JlNjIwZGVlNDFlNWFiMWI2OTYyYjE1MGRhMmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRPIEFHT1NUSU5ITyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5MjkxNTFjOTk5MzRjNWJhNDg0NTlhOTgyM2IzNDU4LnNldENvbnRlbnQoaHRtbF84ZjRjYmU2MjBkZWU0MWU1YWIxYjY5NjJiMTUwZGEyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZWFjYTk5NWY4MDM0MmJiODk5ODNjZjdhM2E5MDk1Yi5iaW5kUG9wdXAocG9wdXBfYjkyOTE1MWM5OTkzNGM1YmE0ODQ1OWE5ODIzYjM0NTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY4YmNhNzU4MjYwNGM2NzkxNDgxNTE5ZmNiYzRhMGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQzMzI5NCwtNDMuOTQzNDIwMjUyMTkzNDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwYTI5YTNkZDJhNTQ2MGRiZDEwNGFhYTdjMjQyYzE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmMjAyNDE1MDg3NTRiODViZDRkNjQxODg2OWJlNzYxID0gJCgnPGRpdiBpZD0iaHRtbF8zZjIwMjQxNTA4NzU0Yjg1YmQ0ZDY0MTg4NjliZTc2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FOVE8gQU5UT05JTyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwYTI5YTNkZDJhNTQ2MGRiZDEwNGFhYTdjMjQyYzE2LnNldENvbnRlbnQoaHRtbF8zZjIwMjQxNTA4NzU0Yjg1YmQ0ZDY0MTg4NjliZTc2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZjhiY2E3NTgyNjA0YzY3OTE0ODE1MTlmY2JjNGEwYS5iaW5kUG9wdXAocG9wdXBfNTBhMjlhM2RkMmE1NDYwZGJkMTA0YWFhN2MyNDJjMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjAyNDQyMDFiOWJlNDc3MWI2YmIyYjhhN2QwMWYwMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTU3NzA4NjUsLTQzLjk1MzI0MTU0MjU5MTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkZTQ1MDIzMmFhMjQ4YWRiYzAwZjM3YjEwOWM5OTVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhMDJhMDRjZTE3OTQ0ZTJiMDZiZTY5NWYwOTc1MTgzID0gJCgnPGRpdiBpZD0iaHRtbF85YTAyYTA0Y2UxNzk0NGUyYjA2YmU2OTVmMDk3NTE4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBCRU5UTyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkZTQ1MDIzMmFhMjQ4YWRiYzAwZjM3YjEwOWM5OTVmLnNldENvbnRlbnQoaHRtbF85YTAyYTA0Y2UxNzk0NGUyYjA2YmU2OTVmMDk3NTE4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMDI0NDIwMWI5YmU0NzcxYjZiYjJiOGE3ZDAxZjAzMC5iaW5kUG9wdXAocG9wdXBfNmRlNDUwMjMyYWEyNDhhZGJjMDBmMzdiMTA5Yzk5NWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzI4NTZlOTBmYjQyNGI1ZGFiOTNhMDQzYzIxYTJiOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYwMzgzNCwtNDMuOTY2MTEwMTY2MjI1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNkNGRkODAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGQyZTU1ZTI3ZTQ2NDYwNDgxMjA1ZjVlMGM3YTc5MTMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTY2MmRmZWE5YWVlNDJhOGE0Y2ZjYTM4MjNkYjg1YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjliMTJmZjU3NDM0NDNjZTllYTllYWUyYzUzZmQyMmQgPSAkKCc8ZGl2IGlkPSJodG1sXzY5YjEyZmY1NzQzNDQzY2U5ZWE5ZWFlMmM1M2ZkMjJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIEpPU0UgUEFNUFVMSEEgQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjYyZGZlYTlhZWU0MmE4YTRjZmNhMzgyM2RiODVjNy5zZXRDb250ZW50KGh0bWxfNjliMTJmZjU3NDM0NDNjZTllYTllYWUyYzUzZmQyMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzI4NTZlOTBmYjQyNGI1ZGFiOTNhMDQzYzIxYTJiOTkuYmluZFBvcHVwKHBvcHVwX2U2NjJkZmVhOWFlZTQyYThhNGNmY2EzODIzZGI4NWM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2YWY5NjIxODIzMTQwMzdhYjQyYTNkMGIzNTk4MTRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NzY1OTA1LC00My45Mzc1MDk0NzI2MjcwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTMyZTlhZmU5ZTY0ZGEyYjNlNzk0NmNkNzRmMWFjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjk3N2IxODE0MjI0YmUzOTBlYmYyODM4OGZhNzA3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmI5NzdiMTgxNDIyNGJlMzkwZWJmMjgzODhmYTcwNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gUEVEUk8gQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZTMyZTlhZmU5ZTY0ZGEyYjNlNzk0NmNkNzRmMWFjNy5zZXRDb250ZW50KGh0bWxfZmI5NzdiMTgxNDIyNGJlMzkwZWJmMjgzODhmYTcwNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTZhZjk2MjE4MjMxNDAzN2FiNDJhM2QwYjM1OTgxNGQuYmluZFBvcHVwKHBvcHVwXzBlMzJlOWFmZTllNjRkYTJiM2U3OTQ2Y2Q3NGYxYWM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiNWZkMDY5YzE1NDQ0MDM5MDgzOGRkNzQxZGY5ZjM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzNTIyMDUsLTQzLjkzNDQ0NjM0MDE5NzQ1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYTA0YzVhNGQwODI0ZjgxOGE3MDc3M2FmNGNjYzJmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDY1OTA2ZGE0ODk0YjRmOTE3M2RkMWYzNjFhYjhjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjQ2NTkwNmRhNDg5NGI0ZjkxNzNkZDFmMzYxYWI4YzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBVkFTU0kgQ2xhc3MgbHV4dXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYTA0YzVhNGQwODI0ZjgxOGE3MDc3M2FmNGNjYzJmMi5zZXRDb250ZW50KGh0bWxfYjQ2NTkwNmRhNDg5NGI0ZjkxNzNkZDFmMzYxYWI4YzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGI1ZmQwNjljMTU0NDQwMzkwODM4ZGQ3NDFkZjlmMzguYmluZFBvcHVwKHBvcHVwX2NhMDRjNWE0ZDA4MjRmODE4YTcwNzczYWY0Y2NjMmYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlNTA3NzVlODNkMDQ1NDM4NjQ0ZWFiYWNjZDQxZDNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MDU1NTc1LC00My45MTg0MjMwNDQ5NTU1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjZDRkZDgwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q0ZGQ4MCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZDJlNTVlMjdlNDY0NjA0ODEyMDVmNWUwYzdhNzkxMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTc5ODZmMjU3ZjU0YTQxYTI2MGRjZmY3N2RhNTQwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjBjZTM3M2U3NDc0NDQ4YmIyMjkzNjdkY2YzMjFkZSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2IwY2UzNzNlNzQ3NDQ0OGJiMjI5MzY3ZGNmMzIxZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNFUlJBIENsYXNzIGx1eHVyeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE3OTg2ZjI1N2Y1NGE0MWEyNjBkY2ZmNzdkYTU0MGEuc2V0Q29udGVudChodG1sX2NiMGNlMzczZTc0NzQ0NDhiYjIyOTM2N2RjZjMyMWRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlNTA3NzVlODNkMDQ1NDM4NjQ0ZWFiYWNjZDQxZDNmLmJpbmRQb3B1cChwb3B1cF9jMTc5ODZmMjU3ZjU0YTQxYTI2MGRjZmY3N2RhNTQwYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWY1MjNiZTY4Mjc0MmRkODMwNWZmZWNkZTRiNjkxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDkzNjI0LC00My45MzI1ODY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmNTUxOGUwNTkyYTQ4ODg4YTcwMDY2ZDEwMDViNDk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjZmZjMGM1OWNhMjRkN2FiNTA0NzA2ZmYwYjBjOTAzID0gJCgnPGRpdiBpZD0iaHRtbF8wY2ZmYzBjNTljYTI0ZDdhYjUwNDcwNmZmMGIwYzkwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0lPTiBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmNTUxOGUwNTkyYTQ4ODg4YTcwMDY2ZDEwMDViNDk5LnNldENvbnRlbnQoaHRtbF8wY2ZmYzBjNTljYTI0ZDdhYjUwNDcwNmZmMGIwYzkwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OWY1MjNiZTY4Mjc0MmRkODMwNWZmZWNkZTRiNjkxMi5iaW5kUG9wdXAocG9wdXBfY2Y1NTE4ZTA1OTJhNDg4ODhhNzAwNjZkMTAwNWI0OTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjYxOWQyYTNjNjZiNGE3OThlYzc1NDE5ZTdhYzVmNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTUwNjE5MjUsLTQzLjk1MDI2MzU4NjcyOTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNkNGRkODAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZDRkZDgwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2RkMmU1NWUyN2U0NjQ2MDQ4MTIwNWY1ZTBjN2E3OTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkYTI3OWNhZTBmZTQyYzc5NTVjNmNjYzI0MmM2MjdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyMGJlMjk3Y2U4ZjQyNGVhMzY2ZTVhODE1ZjZlN2Y4ID0gJCgnPGRpdiBpZD0iaHRtbF9iMjBiZTI5N2NlOGY0MjRlYTM2NmU1YTgxNWY2ZTdmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VklMQSBQQVJJUyBDbGFzcyBsdXh1cnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkYTI3OWNhZTBmZTQyYzc5NTVjNmNjYzI0MmM2MjdmLnNldENvbnRlbnQoaHRtbF9iMjBiZTI5N2NlOGY0MjRlYTM2NmU1YTgxNWY2ZTdmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjE5ZDJhM2M2NmI0YTc5OGVjNzU0MTllN2FjNWY3MC5iaW5kUG9wdXAocG9wdXBfZWRhMjc5Y2FlMGZlNDJjNzk1NWM2Y2NjMjQyYzYyN2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7feb6a244978>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.cm as cm\n",
"import matplotlib.colors as colors\n",
"\n",
"classes = {'low':0, 'regular':1, 'high':2, 'luxury':3}\n",
"\n",
"# create map\n",
"map_classes = folium.Map(location=[ilat, ilon], zoom_start=11)\n",
"\n",
"# set color scheme for the clusters\n",
"x = np.arange(4)\n",
"ys = [i + x + (i*x)**2 for i in range(4)]\n",
"colors_array = cm.rainbow(np.linspace(0, 1, len(ys)))\n",
"rainbow = [colors.rgb2hex(i) for i in colors_array]\n",
"\n",
"# add markers to the map\n",
"markers_colors = []\n",
"for lat, lon, poi, socialclass in zip(df['Latitude'], df['Longitude'], df['Neighborhood'], df['Class']):\n",
" label = folium.Popup(str(poi) + ' Class ' + socialclass, parse_html=True)\n",
" folium.CircleMarker(\n",
" [lat, lon],\n",
" radius=5,\n",
" popup=label,\n",
" color=rainbow[classes[socialclass]-1],\n",
" fill=True,\n",
" fill_color=rainbow[classes[socialclass]-1],\n",
" fill_opacity=0.7).add_to(map_classes)\n",
" \n",
"map_classes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Foursquare venues data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Foursquare api enables the retrieval of nearby venues of a geolocalization and a venue category. \n",
"Let's explore the resulting dataset by using this api agains Belo Horizonte neighborhoods and the \"Food\" category."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"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>Neighborhood</th>\n",
" <th>Neighborhood Latitude</th>\n",
" <th>Neighborhood Longitude</th>\n",
" <th>ID</th>\n",
" <th>Venue</th>\n",
" <th>Venue Latitude</th>\n",
" <th>Venue Longitude</th>\n",
" <th>Venue Category</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>4eb1d86e77c814d925751c99</td>\n",
" <td>Chapa Mágica</td>\n",
" <td>-19.845448</td>\n",
" <td>-43.921754</td>\n",
" <td>BBQ Joint</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>5bf1cc4275eee40039f91adf</td>\n",
" <td>Burger King</td>\n",
" <td>-19.846823</td>\n",
" <td>-43.919360</td>\n",
" <td>Fast Food Restaurant</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>4daba4b84b22f071ead33715</td>\n",
" <td>Celo Burguer</td>\n",
" <td>-19.847524</td>\n",
" <td>-43.919394</td>\n",
" <td>Burger Joint</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>516dc84d498e618c69124919</td>\n",
" <td>bobs</td>\n",
" <td>-19.846710</td>\n",
" <td>-43.917326</td>\n",
" <td>Burger Joint</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>539991af498ea6a823188d29</td>\n",
" <td>Padaria Vila Verde</td>\n",
" <td>-19.847362</td>\n",
" <td>-43.921778</td>\n",
" <td>Bakery</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Neighborhood Latitude Neighborhood Longitude \\\n",
"0 AARAO REIS -19.847221 -43.919508 \n",
"1 AARAO REIS -19.847221 -43.919508 \n",
"2 AARAO REIS -19.847221 -43.919508 \n",
"3 AARAO REIS -19.847221 -43.919508 \n",
"4 AARAO REIS -19.847221 -43.919508 \n",
"\n",
" ID Venue Venue Latitude \\\n",
"0 4eb1d86e77c814d925751c99 Chapa Mágica -19.845448 \n",
"1 5bf1cc4275eee40039f91adf Burger King -19.846823 \n",
"2 4daba4b84b22f071ead33715 Celo Burguer -19.847524 \n",
"3 516dc84d498e618c69124919 bobs -19.846710 \n",
"4 539991af498ea6a823188d29 Padaria Vila Verde -19.847362 \n",
"\n",
" Venue Longitude Venue Category \n",
"0 -43.921754 BBQ Joint \n",
"1 -43.919360 Fast Food Restaurant \n",
"2 -43.919394 Burger Joint \n",
"3 -43.917326 Burger Joint \n",
"4 -43.921778 Bakery "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bh_food_venues = pd.read_csv('bh_food_venues.csv') # it was previously retrieved from foursquare\n",
"bh_food_venues.head()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"CENTRO 98\n",
"LOURDES 94\n",
"FUNCIONARIOS 90\n",
"SAVASSI 86\n",
"SANTA EFIGENIA 74\n",
"CARMO 69\n",
"PRADO 57\n",
"BARRO PRETO 56\n",
"FLORESTA 48\n",
"CORACAO DE JESUS 48\n",
"LEBLON 47\n",
"OURO PRETO 44\n",
"SION 44\n",
"CRUZEIRO 42\n",
"SANTO AGOSTINHO 40\n",
"CORACAO EUCARISTICO 36\n",
"BETANIA 36\n",
"SÃO LUCAS 36\n",
"GRAJAU 35\n",
"CAICARA ADELAIDE 34\n",
"Name: Neighborhood, dtype: int64"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bh_food_venues['Neighborhood'].value_counts()[0:20]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Bakery 441\n",
"Brazilian Restaurant 396\n",
"Restaurant 281\n",
"Burger Joint 258\n",
"Pizza Place 248\n",
"Snack Place 184\n",
"BBQ Joint 143\n",
"Food Truck 106\n",
"Café 75\n",
"Steakhouse 75\n",
"Italian Restaurant 68\n",
"Sandwich Place 58\n",
"Japanese Restaurant 57\n",
"Mineiro Restaurant 56\n",
"Fast Food Restaurant 56\n",
"Buffet 47\n",
"Sushi Restaurant 46\n",
"Hot Dog Joint 46\n",
"Acai House 41\n",
"Fried Chicken Joint 38\n",
"Name: Venue Category, dtype: int64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bh_food_venues['Venue Category'].value_counts()[0:20]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python",
"language": "python",
"name": "conda-env-python-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment