Skip to content

Instantly share code, notes, and snippets.

@lehuling
Created March 6, 2017 14:07
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 lehuling/a4fe87d3595367edf4429f6c0454d758 to your computer and use it in GitHub Desktop.
Save lehuling/a4fe87d3595367edf4429f6c0454d758 to your computer and use it in GitHub Desktop.
These are parts of the results of the Open Data Day 2017. Historic buildings in vienna are shown on a map using open government data.
This file has been truncated, but you can view the full file.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: folium in ./common/.virtualenv/python2/lib/python2.7/site-packages\n",
"Requirement already satisfied: Jinja2 in /usr/local/lib/python2.7/dist-packages (from folium)\n",
"Requirement already satisfied: MarkupSafe in /usr/local/lib/python2.7/dist-packages (from Jinja2->folium)\n",
"Requirement already satisfied: googlemaps in ./common/.virtualenv/python2/lib/python2.7/site-packages\n",
"Requirement already satisfied: requests<=2.11.1 in /usr/local/lib/python2.7/dist-packages (from googlemaps)\n"
]
}
],
"source": [
"!pip install folium\n",
"!pip install googlemaps"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import folium as fm\n",
"import pandas as pd\n",
"import numpy as np\n",
"import sys"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Art des Bauwerks</th>\n",
" <th>Seitenname</th>\n",
" <th>Koordinaten</th>\n",
" <th>Long</th>\n",
" <th>Lat</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Gebäude</td>\n",
" <td>10er Marie</td>\n",
" <td>48° 12' 50\", 16° 18' 31\"</td>\n",
" <td>48.213889</td>\n",
" <td>16.308611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Gebäude</td>\n",
" <td>AEZ</td>\n",
" <td>48° 12' 20\", 16° 23' 4\"</td>\n",
" <td>48.205556</td>\n",
" <td>16.384444</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Gebäude</td>\n",
" <td>Abdeckerhaus</td>\n",
" <td>48° 10' 58\", 16° 23' 28\"</td>\n",
" <td>48.182778</td>\n",
" <td>16.391111</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Gebäude</td>\n",
" <td>Abensperg-Traun-Palais</td>\n",
" <td>48° 12' 40\", 16° 21' 55\"</td>\n",
" <td>48.211111</td>\n",
" <td>16.365278</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Gebäude</td>\n",
" <td>Abgebranntes Haus</td>\n",
" <td>48° 11' 28\", 16° 21' 58\"</td>\n",
" <td>48.191111</td>\n",
" <td>16.366111</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Art des Bauwerks Seitenname Koordinaten \\\n",
"0 Gebäude 10er Marie 48° 12' 50\", 16° 18' 31\" \n",
"1 Gebäude AEZ 48° 12' 20\", 16° 23' 4\" \n",
"2 Gebäude Abdeckerhaus 48° 10' 58\", 16° 23' 28\" \n",
"3 Gebäude Abensperg-Traun-Palais 48° 12' 40\", 16° 21' 55\" \n",
"4 Gebäude Abgebranntes Haus 48° 11' 28\", 16° 21' 58\" \n",
"\n",
" Long Lat \n",
"0 48.213889 16.308611 \n",
"1 48.205556 16.384444 \n",
"2 48.182778 16.391111 \n",
"3 48.211111 16.365278 \n",
"4 48.191111 16.366111 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get buildings coordinats\n",
"df = pd.read_csv('/resources/data/Open Data Day/Bauwerke1.csv')\n",
"buildings = pd.DataFrame(df[['Art des Bauwerks', 'Seitenname', 'Koordinaten']])\n",
"buildings['Long'] = float(0)\n",
"buildings['Lat'] = float(0)\n",
"buildings.dropna(axis = 0, inplace = True)\n",
"idx = np.arange(len(buildings['Seitenname']))\n",
"buildings.index = idx\n",
"\n",
"# Convert buildings coordinats into right format\n",
"for i in range(len(buildings)):\n",
" geo = buildings.iloc[i]['Koordinaten']\n",
" string = geo.split(\" \")\n",
" t1=48\n",
" m1=string[1]\n",
" m1=float(m1[:-1])\n",
" s1=string[2]\n",
" s1=float(s1[:-2])\n",
" erste=t1+m1/60+s1/3600\n",
" t2=16\n",
" m2=string[4]\n",
" m2=float(m2[:-1])\n",
" s2=string[5]\n",
" s2=float(s2[:-1])\n",
" zweite=str(t2+m2/60+s2/3600)\n",
" buildings.set_value(i, 'Long', erste)\n",
" buildings.set_value(i, 'Lat', zweite)\n",
" \n",
"buildings.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"Vienna=[48.2080555556, 16.3680555556]\n",
"map_vienna = fm.Map(location=Vienna,zoom_start=11)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"reload(sys)\n",
"sys.setdefaultencoding('utf8')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;base64,CiAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0LzAuNy4zL2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5taW4uanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8wLjQuMC9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXItc3JjLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC8wLjcuMy9sZWFmbGV0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuMS4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPgoKICAgICAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFwIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgICAgICAgICAgICAgdG9wOjA7CiAgICAgICAgICAgICAgICBib3R0b206MDsKICAgICAgICAgICAgICAgIHJpZ2h0OjA7CiAgICAgICAgICAgICAgICBsZWZ0OjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPiAjbWFwX2JhODYxYzUxYzE3MzQ0NmM4NWQ0YjQ0YjJiYmI3MmE5IHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDEwMC4wJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgIHRvcDogMC4wJTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9iYTg2MWM1MWMxNzM0NDZjODVkNGI0NGIyYmJiNzJhOSIgPjwvZGl2PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvYm9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgc291dGhXZXN0ID0gTC5sYXRMbmcoLTkwLCAtMTgwKTsKICAgICAgICAgICAgdmFyIG5vcnRoRWFzdCA9IEwubGF0TG5nKDkwLCAxODApOwogICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwoKICAgICAgICAgICAgdmFyIG1hcF9iYTg2MWM1MWMxNzM0NDZjODVkNGI0NGIyYmJiNzJhOSA9IEwubWFwKCdtYXBfYmE4NjFjNTFjMTczNDQ2Yzg1ZDRiNDRiMmJiYjcyYTknLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6WzQ4LjIwODA1NTU1NTYsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl82NDk3MTM1ZjBjNjM0MmFmOTJjYWZmYWJiNzYxYzdmMiA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtYXhab29tOiAxOCwKICAgICAgICAgICAgICAgICAgICBtaW5ab29tOiAxLAogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uOiAnRGF0YSBieSA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodCI+T0RiTDwvYT4uJywKICAgICAgICAgICAgICAgICAgICBkZXRlY3RSZXRpbmE6IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmE4NjFjNTFjMTczNDQ2Yzg1ZDRiNDRiMmJiYjcyYTkpOwoKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCA9IEwubWFya2VyQ2x1c3Rlckdyb3VwKCk7CiAgICAgICAgICAgIG1hcF9iYTg2MWM1MWMxNzM0NDZjODVkNGI0NGIyYmJiNzJhOS5hZGRMYXllcihtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjFjNjkwYjY5N2M3NGNjOGIyMDFjNzRiODk1NjdjOWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM4ODg4ODg5LDE2LjMwODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2M4OTM1Zjg4NTg2NDQyYjg1NjVhMWU3NGNkNWE4ZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM4ZDcyMTI4MjRkNGJmYmEzZTZmY2MzN2MxZGMyZjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QzOGQ3MjEyODI0ZDRiZmJhM2U2ZmNjMzdjMWRjMmYyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogMTBlciBNYXJpZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzg5MzVmODg1ODY0NDJiODU2NWExZTc0Y2Q1YThlNy5zZXRDb250ZW50KGh0bWxfZDM4ZDcyMTI4MjRkNGJmYmEzZTZmY2MzN2MxZGMyZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMWM2OTBiNjk3Yzc0Y2M4YjIwMWM3NGI4OTU2N2M5ZC5iaW5kUG9wdXAocG9wdXBfM2M4OTM1Zjg4NTg2NDQyYjg1NjVhMWU3NGNkNWE4ZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYzNhYmU5ZTExZTI0ZmYzODU1ZWZiYmZiNzhmYjg4NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTU1NTU1NTYsMTYuMzg0NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNmJiMTliZGE4MzM0YzBhOGFlNmQwNjI1Y2YwYTlhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZGQ0NDM2NTM5ZDg0YjI2OTk4MWRjZmMxOGUyMzA1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWRkNDQzNjUzOWQ4NGIyNjk5ODFkY2ZjMThlMjMwNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBRVo8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTZiYjE5YmRhODMzNGMwYThhZTZkMDYyNWNmMGE5YWEuc2V0Q29udGVudChodG1sXzVkZDQ0MzY1MzlkODRiMjY5OTgxZGNmYzE4ZTIzMDVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWMzYWJlOWUxMWUyNGZmMzg1NWVmYmJmYjc4ZmI4ODUuYmluZFBvcHVwKHBvcHVwX2E2YmIxOWJkYTgzMzRjMGE4YWU2ZDA2MjVjZjBhOWFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDE0ZDc1NzY3ODg2NDUyOTg3ODk4NWY3YjM0MmQ3NTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODI3Nzc3Nzc4LDE2LjM5MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzBmMmY0M2JmMzY5NDUwOTk5OTAzNGI0YjIxNzUwM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM0ZjFmMWYxNzUxNDIzMzhkYTY3MDExZjkxMmQwN2MgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JjNGYxZjFmMTc1MTQyMzM4ZGE2NzAxMWY5MTJkMDdjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWJkZWNrZXJoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwZjJmNDNiZjM2OTQ1MDk5OTkwMzRiNGIyMTc1MDNjLnNldENvbnRlbnQoaHRtbF9iYzRmMWYxZjE3NTE0MjMzOGRhNjcwMTFmOTEyZDA3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxNGQ3NTc2Nzg4NjQ1Mjk4Nzg5ODVmN2IzNDJkNzUwLmJpbmRQb3B1cChwb3B1cF9jMGYyZjQzYmYzNjk0NTA5OTk5MDM0YjRiMjE3NTAzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhjYzdhM2UyZTU0ODQ4MmNiY2YzNmQ2NzNkZTU2NjdkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMTExMTExMSwxNi4zNjUyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5NTFiM2IzOTllNTQ2OTc4NWE2NGMwMjc0ZWVjOGVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5NzM1ZGIzNzVkZTQxNzg4MjQyMzkyZmVjOTJiZWI0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jOTczNWRiMzc1ZGU0MTc4ODI0MjM5MmZlYzkyYmViNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFiZW5zcGVyZy1UcmF1bi1QYWxhaXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODk1MWIzYjM5OWU1NDY5Nzg1YTY0YzAyNzRlZWM4ZWMuc2V0Q29udGVudChodG1sX2M5NzM1ZGIzNzVkZTQxNzg4MjQyMzkyZmVjOTJiZWI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGNjN2EzZTJlNTQ4NDgyY2JjZjM2ZDY3M2RlNTY2N2QuYmluZFBvcHVwKHBvcHVwXzg5NTFiM2IzOTllNTQ2OTc4NWE2NGMwMjc0ZWVjOGVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2UwOTdmYTNhZGNlNDBhMzkzOGU0N2MwNmE0NmRjMGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTExMTExMTExLDE2LjM2NjExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTk3YThiMzgzZjkyNDk5YTk5MzA5OTBiMGI1MzAzMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQzYmJhN2Y5ZWIzNDIxYWI5MDMxMGRhMTg5MmRhOWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzVkM2JiYTdmOWViMzQyMWFiOTAzMTBkYTE4OTJkYTljIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWJnZWJyYW5udGVzIEhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTk3YThiMzgzZjkyNDk5YTk5MzA5OTBiMGI1MzAzMWMuc2V0Q29udGVudChodG1sXzVkM2JiYTdmOWViMzQyMWFiOTAzMTBkYTE4OTJkYTljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2UwOTdmYTNhZGNlNDBhMzkzOGU0N2MwNmE0NmRjMGMuYmluZFBvcHVwKHBvcHVwX2E5N2E4YjM4M2Y5MjQ5OWE5OTMwOTkwYjBiNTMwMzFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjliZTc1ZDc0NWE3NDhkY2FkYjM3ZjRjYmQwYmQyODkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQ0NDQ0NDQ0LDE2LjM4Njk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDc1MDdmYjEyZTU5NDM4OWJmYTI2MDE0Y2Q4YjExOWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzNhZmRiMTI3MGRlNGYxZDk2NGQ5NmQxNGU1NWI3NjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzczYWZkYjEyNzBkZTRmMWQ5NjRkOTZkMTRlNTViNzYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWJsYXNzZXJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDc1MDdmYjEyZTU5NDM4OWJmYTI2MDE0Y2Q4YjExOWIuc2V0Q29udGVudChodG1sXzczYWZkYjEyNzBkZTRmMWQ5NjRkOTZkMTRlNTViNzYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjliZTc1ZDc0NWE3NDhkY2FkYjM3ZjRjYmQwYmQyODkuYmluZFBvcHVwKHBvcHVwXzA3NTA3ZmIxMmU1OTQzODliZmEyNjAxNGNkOGIxMTliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmQxMjhlMGRhYzUxNGU5ZWE5NGVkZjI0Y2Q1NDVkOTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQxNjY2NjY3LDE2LjM2Nzc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzZkZDNhNjdjY2YwNGRjNmE4YzU1NTI0OGNjZDYwYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDNiNWUwNjQzM2UxNGIzN2EyODJiODJhZTM0MzhhZTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQzYjVlMDY0MzNlMTRiMzdhMjgyYjgyYWUzNDM4YWUyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBYnJhaGFtLWEtU2FuY3RhLUNsYXJhLURlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzZkZDNhNjdjY2YwNGRjNmE4YzU1NTI0OGNjZDYwYzkuc2V0Q29udGVudChodG1sXzQzYjVlMDY0MzNlMTRiMzdhMjgyYjgyYWUzNDM4YWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmQxMjhlMGRhYzUxNGU5ZWE5NGVkZjI0Y2Q1NDVkOTYuYmluZFBvcHVwKHBvcHVwX2M2ZGQzYTY3Y2NmMDRkYzZhOGM1NTUyNDhjY2Q2MGM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmY1YmM5YTI4ODkzNDRiZWFiODlhOTdlNzlmYTYwN2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjExMTExMTExLDE2LjQyNjk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQzNDEyODJmMzI5NDViN2E0YWE2ODkwMjFlZDhiNWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjhjODU2ODZhZTE1NDdkMzk0ZDliN2JlNzE5Yzk0NmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y4Yzg1Njg2YWUxNTQ3ZDM5NGQ5YjdiZTcxOWM5NDZmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWJ3YXNzZXJwdW1wd2VyayBLYWlzZXJtw7xobGVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkMzQxMjgyZjMyOTQ1YjdhNGFhNjg5MDIxZWQ4YjVjLnNldENvbnRlbnQoaHRtbF9mOGM4NTY4NmFlMTU0N2QzOTRkOWI3YmU3MTljOTQ2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JmNWJjOWEyODg5MzQ0YmVhYjg5YTk3ZTc5ZmE2MDdjLmJpbmRQb3B1cChwb3B1cF9kZDM0MTI4MmYzMjk0NWI3YTRhYTY4OTAyMWVkOGI1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q5Zjc5OGJkYzY4ZTRjOTA5Y2NkMTBmODM4YTYxZTg5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5MTY2NjY2NywxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4ODRjNmI3YTRkZTQ2YmRiODcyNzFkMDdlOTg2MGY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlODZhZDdiNDE3YjRhMTA4M2VmMjYwYjlkMDNiNGQ4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hZTg2YWQ3YjQxN2I0YTEwODNlZjI2MGI5ZDAzYjRkOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBY2hhdGl1c2thcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg4NGM2YjdhNGRlNDZiZGI4NzI3MWQwN2U5ODYwZjYuc2V0Q29udGVudChodG1sX2FlODZhZDdiNDE3YjRhMTA4M2VmMjYwYjlkMDNiNGQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDlmNzk4YmRjNjhlNGM5MDljY2QxMGY4MzhhNjFlODkuYmluZFBvcHVwKHBvcHVwX2M4ODRjNmI3YTRkZTQ2YmRiODcyNzFkMDdlOTg2MGY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODhkMGE1OTA4YzJhNDU2OTk3MGQ3Mjk4NmY1MmUwZWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTAyNzc3Nzc4LDE2LjM2Njk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmIxM2NiYTAyNTJjNDU2Mjk1YzZlNjBmMGJkYWQ4ZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA4YWE5YjRkYjcwNDg3MWJlMmY1Y2YyOTYxOWE2ZmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUwOGFhOWI0ZGI3MDQ4NzFiZTJmNWNmMjk2MTlhNmZmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWRhbS11bmQtRXZhLUhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmIxM2NiYTAyNTJjNDU2Mjk1YzZlNjBmMGJkYWQ4ZjEuc2V0Q29udGVudChodG1sXzUwOGFhOWI0ZGI3MDQ4NzFiZTJmNWNmMjk2MTlhNmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODhkMGE1OTA4YzJhNDU2OTk3MGQ3Mjk4NmY1MmUwZWUuYmluZFBvcHVwKHBvcHVwXzZiMTNjYmEwMjUyYzQ1NjI5NWM2ZTYwZjBiZGFkOGYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzBmYWNlNTI4NmUyNGY3ZWEwYjU1NjJkYzY3NWRjODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjMxNjk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDIyN2FmYzAzMDlhNDk0ZWI3ZjVlYzRjMzBmMTExMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjBjZTMwZDAyYWU2NDFmYWFhMzY4YWQxNjYwZjBkOTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYwY2UzMGQwMmFlNjQxZmFhYTM2OGFkMTY2MGYwZDk2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWRlbGhlaWQtUG9wcC1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDIyN2FmYzAzMDlhNDk0ZWI3ZjVlYzRjMzBmMTExMTguc2V0Q29udGVudChodG1sXzYwY2UzMGQwMmFlNjQxZmFhYTM2OGFkMTY2MGYwZDk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzBmYWNlNTI4NmUyNGY3ZWEwYjU1NjJkYzY3NWRjODMuYmluZFBvcHVwKHBvcHVwXzAyMjdhZmMwMzA5YTQ5NGViN2Y1ZWM0YzMwZjExMTE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjA2M2YyZWU0ZWY4NDZhOTkzZWUzYTg5MWZhMmZkZWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjc3Nzc3Nzc4LDE2LjMzNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjFkMmJjMWY2ZTU0OTc5ODRmYjkzMTY5ZmFlZWJjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NWZhN2FlOWJhZWY0NDUwYTY2MzNjMWNjN2RiZTZhZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzVmYTdhZTliYWVmNDQ1MGE2NjMzYzFjYzdkYmU2YWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZGxlci1BcG90aGVrZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjFkMmJjMWY2ZTU0OTc5ODRmYjkzMTY5ZmFlZWJjOS5zZXRDb250ZW50KGh0bWxfNzVmYTdhZTliYWVmNDQ1MGE2NjMzYzFjYzdkYmU2YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMDYzZjJlZTRlZjg0NmE5OTNlZTNhODkxZmEyZmRlYS5iaW5kUG9wdXAocG9wdXBfMWIxZDJiYzFmNmU1NDk3OTg0ZmI5MzE2OWZhZWViYzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ODNjYzA4NDQwNmQ0OWM2YjcyZmMzZTU5NzNiMDU0MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MjIyMjIyMjIsMTYuMzc2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTRiM2FmNTlkNzE0Mjc0YjVlNTM4NmU3MzI4NzNiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOTY1YjQzNmY2YTQ0ZjU1YmM5ZTUxNzdkNmVlNmExOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjk2NWI0MzZmNmE0NGY1NWJjOWU1MTc3ZDZlZTZhMTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZGxlci1Ib2YgKDEwKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTRiM2FmNTlkNzE0Mjc0YjVlNTM4NmU3MzI4NzNiZS5zZXRDb250ZW50KGh0bWxfZjk2NWI0MzZmNmE0NGY1NWJjOWU1MTc3ZDZlZTZhMTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ODNjYzA4NDQwNmQ0OWM2YjcyZmMzZTU5NzNiMDU0MC5iaW5kUG9wdXAocG9wdXBfZmU0YjNhZjU5ZDcxNDI3NGI1ZTUzODZlNzMyODczYmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNjNkNTRlZjM5ZTE0MTYyOTZjMjBlMmY2YzUyNjU4YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDU1NTU1NTYsMTYuMzM4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTc0OTEzOTdjOGI0ZTA1YTk3ZWMxY2I0MWFmYmQ2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDQ4MjQyMjYwYjM0YTdlYjMyMGUxZmIxNGFhZWYwNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDQ0ODI0MjI2MGIzNGE3ZWIzMjBlMWZiMTRhYWVmMDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZGxlci1Ib2YgKDE2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTc0OTEzOTdjOGI0ZTA1YTk3ZWMxY2I0MWFmYmQ2Mi5zZXRDb250ZW50KGh0bWxfNDQ0ODI0MjI2MGIzNGE3ZWIzMjBlMWZiMTRhYWVmMDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNjNkNTRlZjM5ZTE0MTYyOTZjMjBlMmY2YzUyNjU4Yy5iaW5kUG9wdXAocG9wdXBfNzU3NDkxMzk3YzhiNGUwNWE5N2VjMWNiNDFhZmJkNjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOGE4OWZmNDE2NjY0N2EyYmNkOTc4NTk2MDJmYWM1NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Nzc3Nzc3NzgsMTYuMzI0NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OTljNjc4ZjM5YmU0NzZjOGJmZDFlNTA1N2ViNzJmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzJmNTllZDM1M2Y0Yzc3OWJlOGE4MTBiNjM4YjJiOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTMyZjU5ZWQzNTNmNGM3NzliZThhODEwYjYzOGIyYjgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZGxlci1Iw7ZoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTljNjc4ZjM5YmU0NzZjOGJmZDFlNTA1N2ViNzJmMy5zZXRDb250ZW50KGh0bWxfMTMyZjU5ZWQzNTNmNGM3NzliZThhODEwYjYzOGIyYjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOGE4OWZmNDE2NjY0N2EyYmNkOTc4NTk2MDJmYWM1NC5iaW5kUG9wdXAocG9wdXBfODk5YzY3OGYzOWJlNDc2YzhiZmQxZTUwNTdlYjcyZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YzA5YTFhOWEzMTM0YTZkOTZjODAzNmI2NDBlYmE1OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NzIyMjIyMjIsMTYuMzY2MTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzlkN2M2OGM3YWU0OWE5OWE2NjRkOGVmYmE3MjkxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmM2NDY0NGM4NzE0YjQ5YTI0MTUyMjAyMTJhOTFmZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODZjNjQ2NDRjODcxNGI0OWEyNDE1MjIwMjEyYTkxZmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZGxlcmhvZiAoNC8yKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzlkN2M2OGM3YWU0OWE5OWE2NjRkOGVmYmE3MjkxZS5zZXRDb250ZW50KGh0bWxfODZjNjQ2NDRjODcxNGI0OWEyNDE1MjIwMjEyYTkxZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YzA5YTFhOWEzMTM0YTZkOTZjODAzNmI2NDBlYmE1OS5iaW5kUG9wdXAocG9wdXBfMjM5ZDdjNjhjN2FlNDlhOTlhNjY0ZDhlZmJhNzI5MWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZTU1MmYyYTA5ZjI0ZWJmOTBjN2JlOWE4MGJkMjgwNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMjIyMjIyMjIsMTYuMzUxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTBjNGJjZmZiNWE0ODY4OTZlZjQ3M2QxOTkxNTBmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OTQ2MDgyM2FlOWY0MGRmYWY1OTExMzNmZjA3MTllNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzk0NjA4MjNhZTlmNDBkZmFmNTkxMTMzZmYwNzE5ZTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZGxlcmhvZiAoNyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTkwYzRiY2ZmYjVhNDg2ODk2ZWY0NzNkMTk5MTUwZjguc2V0Q29udGVudChodG1sXzc5NDYwODIzYWU5ZjQwZGZhZjU5MTEzM2ZmMDcxOWU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWU1NTJmMmEwOWYyNGViZjkwYzdiZTlhODBiZDI4MDUuYmluZFBvcHVwKHBvcHVwXzU5MGM0YmNmZmI1YTQ4Njg5NmVmNDczZDE5OTE1MGY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDJmMTRlMzgzNzViNGU3Nzg1NzczN2ViOWI5YjRiNGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDgzMzMzMzMzLDE2LjM3MjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDliMDg3MTlkOWNlNGEwMmJkNzY5NTk5NWIyNDA0NDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTM0NjM5MDZiMThkNDk0MDlmNjNiNzU3OWZkMzU3OTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkzNDYzOTA2YjE4ZDQ5NDA5ZjYzYjc1NzlmZDM1Nzk4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFkbGVydG9yPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5YjA4NzE5ZDljZTRhMDJiZDc2OTU5OTViMjQwNDQ5LnNldENvbnRlbnQoaHRtbF85MzQ2MzkwNmIxOGQ0OTQwOWY2M2I3NTc5ZmQzNTc5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAyZjE0ZTM4Mzc1YjRlNzc4NTc3MzdlYjliOWI0YjRiLmJpbmRQb3B1cChwb3B1cF80OWIwODcxOWQ5Y2U0YTAyYmQ3Njk1OTk1YjI0MDQ0OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VjZjZkMDhmZTA4ZjRmN2Y4OTkwM2JkMjkyN2I1ZTY4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzMzMzMzMywxNi4zNzI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiZDIwNmRlMjU4ZTQ2OGFhZTZjMjI3NGE3ZDRhY2UzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlY2UwNzE1OGNkZjQxZDI4NjA1YTgxMDNlZTgzMmU2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lZWNlMDcxNThjZGY0MWQyODYwNWE4MTAzZWU4MzJlNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBZGxlcnR1cm08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGJkMjA2ZGUyNThlNDY4YWFlNmMyMjc0YTdkNGFjZTMuc2V0Q29udGVudChodG1sX2VlY2UwNzE1OGNkZjQxZDI4NjA1YTgxMDNlZTgzMmU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWNmNmQwOGZlMDhmNGY3Zjg5OTAzYmQyOTI3YjVlNjguYmluZFBvcHVwKHBvcHVwX2RiZDIwNmRlMjU4ZTQ2OGFhZTZjMjI3NGE3ZDRhY2UzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWEwYTA2MTY3MWE1NDQ4ZDg0NDhkMTg4M2ExN2E5MjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTA1NTU1NTU2LDE2LjM2NTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzZhNjJjM2IxYjYwNGY1ZTgwZGFmNWQ0MDZmNzEwOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjkyYWNlOGJmZjUwNGU4MGI0NDFlZDRjMmQ2ZTZjYzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY5MmFjZThiZmY1MDRlODBiNDQxZWQ0YzJkNmU2Y2MyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWRtb250ZXIgSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2YTYyYzNiMWI2MDRmNWU4MGRhZjVkNDA2ZjcxMDhhLnNldENvbnRlbnQoaHRtbF82OTJhY2U4YmZmNTA0ZTgwYjQ0MWVkNGMyZDZlNmNjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlhMGEwNjE2NzFhNTQ0OGQ4NDQ4ZDE4ODNhMTdhOTI2LmJpbmRQb3B1cChwb3B1cF83NmE2MmMzYjFiNjA0ZjVlODBkYWY1ZDQwNmY3MTA4YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UxMzMyNTAyNGExODRkOGE5NzJkNWRjNTgzYTRkNzczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkyNSwxNi4zNzUyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwMTU4NmVkNzg0ZDRmMDNhMjI5ODIzNjdmOTViOTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZDM5MDMxYWIwMTQzZjA5OGM0ZjUzM2QzZjM4N2I2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kMWQzOTAzMWFiMDE0M2YwOThjNGY1MzNkM2YzODdiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFkb2xmLUN6ZXR0ZWwtQmlsZHVuZ3N6ZW50cnVtPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMTU4NmVkNzg0ZDRmMDNhMjI5ODIzNjdmOTViOTViLnNldENvbnRlbnQoaHRtbF9kMWQzOTAzMWFiMDE0M2YwOThjNGY1MzNkM2YzODdiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UxMzMyNTAyNGExODRkOGE5NzJkNWRjNTgzYTRkNzczLmJpbmRQb3B1cChwb3B1cF8wMDE1ODZlZDc4NGQ0ZjAzYTIyOTgyMzY3Zjk1Yjk1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M5NGFkNjNjYzkyNTQ2NmY4MTE3ODRkNThjYmY3NmIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk1LDE2LjM0NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWRlMTllOTA2NDdkNGE5MGI3NDljM2Q5ZjRkZDg2YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzdjYTZiNzE0Y2FjNDZiMmIxMDBjMjJjZjg2ZDgzMDYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc3Y2E2YjcxNGNhYzQ2YjJiMTAwYzIyY2Y4NmQ4MzA2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWRvbGYtSGl0bGVyLUhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWRlMTllOTA2NDdkNGE5MGI3NDljM2Q5ZjRkZDg2Yjkuc2V0Q29udGVudChodG1sXzc3Y2E2YjcxNGNhYzQ2YjJiMTAwYzIyY2Y4NmQ4MzA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzk0YWQ2M2NjOTI1NDY2ZjgxMTc4NGQ1OGNiZjc2YjEuYmluZFBvcHVwKHBvcHVwXzlkZTE5ZTkwNjQ3ZDRhOTBiNzQ5YzNkOWY0ZGQ4NmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjA0MWMwMTA0NzJjNDM4ZmI0YWIwNzNiNTdmOTM4YWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzYxMTExMTExLDE2LjI4Mzg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDMwMmE1YTgyZDdkNGVjZDkzYjM1MTllYTQ0Yjc1YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk4NmU4MGQxMTM5NGNjMDg4ZTcyODMzYzc2YmI0NmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzk5ODZlODBkMTEzOTRjYzA4OGU3MjgzM2M3NmJiNDZhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWRvbGYtSGl0bGVyLUthc2VybmU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDMwMmE1YTgyZDdkNGVjZDkzYjM1MTllYTQ0Yjc1Yzcuc2V0Q29udGVudChodG1sXzk5ODZlODBkMTEzOTRjYzA4OGU3MjgzM2M3NmJiNDZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjA0MWMwMTA0NzJjNDM4ZmI0YWIwNzNiNTdmOTM4YWEuYmluZFBvcHVwKHBvcHVwXzAzMDJhNWE4MmQ3ZDRlY2Q5M2IzNTE5ZWE0NGI3NWM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjc0MDU5NWUzZGI4NDVkNmIxMzc5NjEzMjJhNmZhYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODk0NDQ0NDQ0LDE2LjM3NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg2NmEzNmZiNjY5NGM2ZGJjNzE3NzE3NDE1MjFkZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGJlYjg2MGQ3MjY0NDdmNGE5NmVjNjA2MTlkMDI1NDcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBiZWI4NjBkNzI2NDQ3ZjRhOTZlYzYwNjE5ZDAyNTQ3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWRvbGYtU2NoYXJuZXItSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4NjZhMzZmYjY2OTRjNmRiYzcxNzcxNzQxNTIxZGZlLnNldENvbnRlbnQoaHRtbF8wYmViODYwZDcyNjQ0N2Y0YTk2ZWM2MDYxOWQwMjU0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I3NDA1OTVlM2RiODQ1ZDZiMTM3OTYxMzIyYTZmYWFiLmJpbmRQb3B1cChwb3B1cF81ODY2YTM2ZmI2Njk0YzZkYmM3MTc3MTc0MTUyMWRmZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U5YTA0MGI0ZmQ5NTQ1MzZiNmM1OWI1NTVhN2Q3NjMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQzODg4ODg4OSwxNi4zNjkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxN2ZjNTc5ODJkOTQ0YWE5M2NiNWMxZmVjZGJlOGRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwODY0MjE5MmM4NzQ3MzVhY2Y5MzE1MjMwZWMxODQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMDg2NDIxOTJjODc0NzM1YWNmOTMxNTIzMGVjMTg0NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFkb2xmLVNjaMOkcmYtU3R1ZGVudGVuaGVpbSAoMjApPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxN2ZjNTc5ODJkOTQ0YWE5M2NiNWMxZmVjZGJlOGRkLnNldENvbnRlbnQoaHRtbF9jMDg2NDIxOTJjODc0NzM1YWNmOTMxNTIzMGVjMTg0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U5YTA0MGI0ZmQ5NTQ1MzZiNmM1OWI1NTVhN2Q3NjMwLmJpbmRQb3B1cChwb3B1cF9mMTdmYzU3OTgyZDk0NGFhOTNjYjVjMWZlY2RiZThkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI2MWIyMmVlNTUwMjRiOTI4NjI0YTRhOWMxNTViZmM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzMDU1NTU1NiwxNi4zNDY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhNjgyYzk2M2VjMTQyMWJhNTEzZGVjMmEyZjljOGUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NGU2NWQ4Y2MwZTRjNWZiMDc0ZDU1NDQyZmIyNWFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNDRlNjVkOGNjMGU0YzVmYjA3NGQ1NTQ0MmZiMjVhYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFkb2xmLVNjaMOkcmYtU3R1ZGVudGVuaGVpbSAoOCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmE2ODJjOTYzZWMxNDIxYmE1MTNkZWMyYTJmOWM4ZTIuc2V0Q29udGVudChodG1sXzE0NGU2NWQ4Y2MwZTRjNWZiMDc0ZDU1NDQyZmIyNWFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjYxYjIyZWU1NTAyNGI5Mjg2MjRhNGE5YzE1NWJmYzUuYmluZFBvcHVwKHBvcHVwX2JhNjgyYzk2M2VjMTQyMWJhNTEzZGVjMmEyZjljOGUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYThjZjk3NDIxYWRmNDNhMWFhODI1MjZiZTBhODExOWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODc1LDE2LjI1NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYwZTc4MzU0MGVhNDViZGIwYTExMjMyYzc0NzIyMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2FlZTIwYTk5NDUyNDk3MTg3YjA1NDQ5OTdkM2ExNGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdhZWUyMGE5OTQ1MjQ5NzE4N2IwNTQ0OTk3ZDNhMTRiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFkb2xmc3RvcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjBlNzgzNTQwZWE0NWJkYjBhMTEyMzJjNzQ3MjIwYi5zZXRDb250ZW50KGh0bWxfN2FlZTIwYTk5NDUyNDk3MTg3YjA1NDQ5OTdkM2ExNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOGNmOTc0MjFhZGY0M2ExYWE4MjUyNmJlMGE4MTE5YS5iaW5kUG9wdXAocG9wdXBfNjYwZTc4MzU0MGVhNDViZGIwYTExMjMyYzc0NzIyMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMGY3NDI2YmZhY2Q0NDViYjI5YjI3OTQwNmM2YmNmYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MTk0NDQ0NDQsMTYuMzQ3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWIxZjFiMDZlMzU0ZTA3ODVhNTAxNDY5YWRkODU3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTMyOWE2YjE3MzI0MjkyODkzNGEwN2I0MGZjMmE2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTEzMjlhNmIxNzMyNDI5Mjg5MzRhMDdiNDBmYzJhNmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZWdpZGlob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2ViMWYxYjA2ZTM1NGUwNzg1YTUwMTQ2OWFkZDg1N2Euc2V0Q29udGVudChodG1sX2ExMzI5YTZiMTczMjQyOTI4OTM0YTA3YjQwZmMyYTZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTBmNzQyNmJmYWNkNDQ1YmIyOWIyNzk0MDZjNmJjZmEuYmluZFBvcHVwKHBvcHVwX2NlYjFmMWIwNmUzNTRlMDc4NWE1MDE0NjlhZGQ4NTdhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjY4NDUyZGZhMGVmNDNhZTllYWYwZTM4YjU3OWVmYzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTQxNjY2NjY3LDE2LjM0MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmVkZmRhZDZhMTQzNGQ2Y2JhM2RmOGRmNTMwYmEwNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhiMWI4ZTE1YTExNDNiZWI2NWU0ZmQ3NzhkNDcwNTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM4YjFiOGUxNWExMTQzYmViNjVlNGZkNzc4ZDQ3MDU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFmZmVuYnJ1bm5lbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZWRmZGFkNmExNDM0ZDZjYmEzZGY4ZGY1MzBiYTA1OC5zZXRDb250ZW50KGh0bWxfMzhiMWI4ZTE1YTExNDNiZWI2NWU0ZmQ3NzhkNDcwNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82Njg0NTJkZmEwZWY0M2FlOWVhZjBlMzhiNTc5ZWZjNy5iaW5kUG9wdXAocG9wdXBfYmVkZmRhZDZhMTQzNGQ2Y2JhM2RmOGRmNTMwYmEwNTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOWJjZGVmMWQ5ZTY0MWQ5ODUwZTAxZWZlNWRiNGM0MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNDcyMjIyMjIsMTYuMzM5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YjY2Yjk0MDE2Y2Q0YzM4YjhiYTIwNTE4MDc3ZmM4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTgyZGQ5ODljZWY0YjgxOGU2MDllODA5MDdmODA1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTU4MmRkOTg5Y2VmNGI4MThlNjA5ZTgwOTA3ZjgwNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBZ2VudG9yLVdlcmtlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliNjZiOTQwMTZjZDRjMzhiOGJhMjA1MTgwNzdmYzg4LnNldENvbnRlbnQoaHRtbF8xNTgyZGQ5ODljZWY0YjgxOGU2MDllODA5MDdmODA1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5YmNkZWYxZDllNjQxZDk4NTBlMDFlZmU1ZGI0YzQxLmJpbmRQb3B1cChwb3B1cF85YjY2Yjk0MDE2Y2Q0YzM4YjhiYTIwNTE4MDc3ZmM4OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3OWIwNmJlMjQzMDQwY2FiZDk1OGNhM2I4ZmM2NzgzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MDU1NTU1NiwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwZDgxODBkMTYwNTQzMDk5NWZjOGI5OGU0ZGY4ZjA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4NjY2MmE5ZGNlZDRjNzQ5MTg3NjUwMDdhMGUxYWFhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ODY2NjJhOWRjZWQ0Yzc0OTE4NzY1MDA3YTBlMWFhYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFnZ3NiYWNoZXIgSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwZDgxODBkMTYwNTQzMDk5NWZjOGI5OGU0ZGY4ZjA0LnNldENvbnRlbnQoaHRtbF83ODY2NjJhOWRjZWQ0Yzc0OTE4NzY1MDA3YTBlMWFhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA3OWIwNmJlMjQzMDQwY2FiZDk1OGNhM2I4ZmM2NzgzLmJpbmRQb3B1cChwb3B1cF8wMGQ4MTgwZDE2MDU0MzA5OTVmYzhiOThlNGRmOGYwNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkMDUxNzlkMzI2NTQ2ODFiMWQ1ZDI0ZWU0MmQwZDM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTcxMzg4ODg4OSwxNi4zNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQ3MDcwMDFhOTE2NDkwZmFhMGJiODQ1ZWUwYTcyYzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGVmN2QyMjU3NjM2NGU4MmE4Y2ZkY2Q5Zjk4NDA5ZmMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRlZjdkMjI1NzYzNjRlODJhOGNmZGNkOWY5ODQwOWZjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWhvcm5ob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQ3MDcwMDFhOTE2NDkwZmFhMGJiODQ1ZWUwYTcyYzcuc2V0Q29udGVudChodG1sXzRlZjdkMjI1NzYzNjRlODJhOGNmZGNkOWY5ODQwOWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmQwNTE3OWQzMjY1NDY4MWIxZDVkMjRlZTQyZDBkMzYuYmluZFBvcHVwKHBvcHVwX2Y0NzA3MDAxYTkxNjQ5MGZhYTBiYjg0NWVlMGE3MmM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjBjOTNkNGE3YjMzNDljZjgyODAxZWRlN2FhMmU5ZDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTc1LDE2LjMzODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTE5NDM0MmU2MWNhNGVlMThjYzMzNzlmNmJmMGFhMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcyNzcxNjE3MjYwNDVmMTk3NzEyM2IzNzIxOTM3MjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI3Mjc3MTYxNzI2MDQ1ZjE5NzcxMjNiMzcyMTkzNzI3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWljaGLDvGhlbGhvZiAoMTkpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxOTQzNDJlNjFjYTRlZTE4Y2MzMzc5ZjZiZjBhYTA5LnNldENvbnRlbnQoaHRtbF8yNzI3NzE2MTcyNjA0NWYxOTc3MTIzYjM3MjE5MzcyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YwYzkzZDRhN2IzMzQ5Y2Y4MjgwMWVkZTdhYTJlOWQyLmJpbmRQb3B1cChwb3B1cF9lMTk0MzQyZTYxY2E0ZWUxOGNjMzM3OWY2YmYwYWEwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE0ODQ3NTMzYmNjNTRiNmZhNjUxN2YxYzliMzlmYWI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAxMzg4ODg4OSwxNi4zNjQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0YWNiOWVhMDY4NzQ3Njk5NTQzYjBjNzkyM2I2ODU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyMjk3NzNkYmE5ODQzZWJiOTM4NDQ4NWM4MjMwNDNhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MjI5NzczZGJhOTg0M2ViYjkzODQ0ODVjODIzMDQzYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFrYWRlbWllIGRlciBiaWxkZW5kZW4gS8O8bnN0ZSAoR2Viw6R1ZGUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0YWNiOWVhMDY4NzQ3Njk5NTQzYjBjNzkyM2I2ODU2LnNldENvbnRlbnQoaHRtbF83MjI5NzczZGJhOTg0M2ViYjkzODQ0ODVjODIzMDQzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE0ODQ3NTMzYmNjNTRiNmZhNjUxN2YxYzliMzlmYWI1LmJpbmRQb3B1cChwb3B1cF9jNGFjYjllYTA2ODc0NzY5OTU0M2IwYzc5MjNiNjg1Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RlNjVmMGE3OTM2YzRlNTA4ZDJjOTQ2YTlmOWI4MWNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjU2NjY2NjY2NywxNi40MDQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxNTU1NzUzOTNhODRjYTViMDM0Njc5ZTVhZDkzOTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0OTEzMzIxOTdmMzQ2M2E4NjRjZTgxMDgyNTU2YWIyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNDkxMzMyMTk3ZjM0NjNhODY0Y2U4MTA4MjU1NmFiMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFrYWRlbWllIGbDvHIgU296aWFsYXJiZWl0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxNTU1NzUzOTNhODRjYTViMDM0Njc5ZTVhZDkzOTViLnNldENvbnRlbnQoaHRtbF9hNDkxMzMyMTk3ZjM0NjNhODY0Y2U4MTA4MjU1NmFiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RlNjVmMGE3OTM2YzRlNTA4ZDJjOTQ2YTlmOWI4MWNjLmJpbmRQb3B1cChwb3B1cF9iMTU1NTc1MzkzYTg0Y2E1YjAzNDY3OWU1YWQ5Mzk1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MwYWFiNWY2YWRjZTQyNTc5MjdiMjBlZDJmZjllYTYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAwNTU1NTU1NiwxNi4zNjYxMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkMGM2MDdhOTJiMDRmMGU4ZjNlZTQxOTM1NzY2ZWY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlZTgzODhkMGJiZDRjNTFiODNjZDg0ODRmMDhlYjgxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZWU4Mzg4ZDBiYmQ0YzUxYjgzY2Q4NDg0ZjA4ZWI4MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFrYWRlbWllaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkMGM2MDdhOTJiMDRmMGU4ZjNlZTQxOTM1NzY2ZWY3LnNldENvbnRlbnQoaHRtbF9kZWU4Mzg4ZDBiYmQ0YzUxYjgzY2Q4NDg0ZjA4ZWI4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MwYWFiNWY2YWRjZTQyNTc5MjdiMjBlZDJmZjllYTYxLmJpbmRQb3B1cChwb3B1cF81ZDBjNjA3YTkyYjA0ZjBlOGYzZWU0MTkzNTc2NmVmNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M1ZWI2YTM2MmMyODRmYjlhMThiNjk1ZmQ4M2VlNjZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMiwxNi4zNzY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3ODVlNzBiODhiYTRkNTA5NjIyZTVmNjJmODk0ZjU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMGEzM2M0MWY5YTRhMDdiMTA0ZTc3MWQwZjk4MTRiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYTBhMzNjNDFmOWE0YTA3YjEwNGU3NzFkMGY5ODE0YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFrYWRlbWlldGhlYXRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNzg1ZTcwYjg4YmE0ZDUwOTYyMmU1ZjYyZjg5NGY1NS5zZXRDb250ZW50KGh0bWxfZGEwYTMzYzQxZjlhNGEwN2IxMDRlNzcxZDBmOTgxNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNWViNmEzNjJjMjg0ZmI5YTE4YjY5NWZkODNlZTY2YS5iaW5kUG9wdXAocG9wdXBfZDc4NWU3MGI4OGJhNGQ1MDk2MjJlNWY2MmY4OTRmNTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmJhY2Q1ZjVkMDc0NTM4OWU4YThlMDE3YmZhNDFmNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxODA1NTU1NTYsMTYuMzU4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjU4YmU3NTJkMjM0ZjZkYjY5MjlkZGVhNTBhMWQ3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NDFhNzlmOGQ0YzY0NmZhOTJjNDgwODRiZTQzMTFjOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzQxYTc5ZjhkNGM2NDZmYTkyYzQ4MDg0YmU0MzExYzkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBa2F6aWVuaG9mICg5KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMjU4YmU3NTJkMjM0ZjZkYjY5MjlkZGVhNTBhMWQ3OC5zZXRDb250ZW50KGh0bWxfNzQxYTc5ZjhkNGM2NDZmYTkyYzQ4MDg0YmU0MzExYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NmJhY2Q1ZjVkMDc0NTM4OWU4YThlMDE3YmZhNDFmNi5iaW5kUG9wdXAocG9wdXBfMjI1OGJlNzUyZDIzNGY2ZGI2OTI5ZGRlYTUwYTFkNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNzJkMmUwYzViNGM0ZDI2YTgwMWVhZWFkYzM0MGMyNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNjY2NjY2NjcsMTYuMzU4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDAwMmQ5ZmU3MGE0NjYzOGY1YWM1NzU2ZTI0MjY0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjg1NzE3YTU4NjE0MzFkOWYyZjJlM2U5NThjMjVlNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjY4NTcxN2E1ODYxNDMxZDlmMmYyZTNlOTU4YzI1ZTQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbGJlcnQtQXBwZWwtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkMDAyZDlmZTcwYTQ2NjM4ZjVhYzU3NTZlMjQyNjRkLnNldENvbnRlbnQoaHRtbF9iNjg1NzE3YTU4NjE0MzFkOWYyZjJlM2U5NThjMjVlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y3MmQyZTBjNWI0YzRkMjZhODAxZWFlYWRjMzQwYzI1LmJpbmRQb3B1cChwb3B1cF9mZDAwMmQ5ZmU3MGE0NjYzOGY1YWM1NzU2ZTI0MjY0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RmNzRlMjU5OTQ0MzRhOTdiYzU3NDFlMjc5YTFmNTZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQ1Mjc3Nzc3OCwxNi40MzM2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2NTg3MGQzYTA1NzQxODJiOGRiN2M3NzY2OGIxZmI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiZTZkZTllZmNmNzRkYTBiNGRkNWYwNjVlNjYzNDQwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYmU2ZGU5ZWZjZjc0ZGEwYjRkZDVmMDY1ZTY2MzQ0MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsYmVydC1TY2h1bHR6LUVpc3Nwb3J0aGFsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjY1ODcwZDNhMDU3NDE4MmI4ZGI3Yzc3NjY4YjFmYjUuc2V0Q29udGVudChodG1sXzBiZTZkZTllZmNmNzRkYTBiNGRkNWYwNjVlNjYzNDQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGY3NGUyNTk5NDQzNGE5N2JjNTc0MWUyNzlhMWY1NmQuYmluZFBvcHVwKHBvcHVwXzI2NTg3MGQzYTA1NzQxODJiOGRiN2M3NzY2OGIxZmI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzg5NmZiNzM1ZDJlNGU0ZGFlMWE3NGI4NmFjZmEzNjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzMzMzMzMzMzLDE2LjQ0NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDk4NGE1NTBjMGU2NDRhMmFkOTVjMmQ5YTUwZTU1YmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGM4NTY0YzM1ZjU4NGNhMmFhZTQyNTViY2Y4NWRhZjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzhjODU2NGMzNWY1ODRjYTJhYWU0MjU1YmNmODVkYWYyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxiZXJ0LVNjaHVsdHotSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5ODRhNTUwYzBlNjQ0YTJhZDk1YzJkOWE1MGU1NWJiLnNldENvbnRlbnQoaHRtbF84Yzg1NjRjMzVmNTg0Y2EyYWFlNDI1NWJjZjg1ZGFmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM4OTZmYjczNWQyZTRlNGRhZTFhNzRiODZhY2ZhMzYxLmJpbmRQb3B1cChwb3B1cF8wOTg0YTU1MGMwZTY0NGEyYWQ5NWMyZDlhNTBlNTViYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IzNTYxZDI3YmYxYzQ2ZmY4YjEwMTQ3MTA2MDJkM2RkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE2NjY2NjY2NywxNi4zNTYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2ZGY0OWE5ZTA1ZTQ5MDliNjNhNjUzNWJhYTEyMzk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmNGU2OTFjMjlhNTQxZTdhYTM1Njc5MDY0M2I1OTIzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZjRlNjkxYzI5YTU0MWU3YWEzNTY3OTA2NDNiNTkyMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsYmVydC1TY2h3ZWl0emVyLUhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjZkZjQ5YTllMDVlNDkwOWI2M2E2NTM1YmFhMTIzOTkuc2V0Q29udGVudChodG1sXzFmNGU2OTFjMjlhNTQxZTdhYTM1Njc5MDY0M2I1OTIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjM1NjFkMjdiZjFjNDZmZjhiMTAxNDcxMDYwMmQzZGQuYmluZFBvcHVwKHBvcHVwX2I2ZGY0OWE5ZTA1ZTQ5MDliNjNhNjUzNWJhYTEyMzk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjMxNDAzNjM0YTNjNDI4MzhiN2Q4ODYyMjBhOWYxNmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM2MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjc5ZGNjMTU0YzlhNDc5ZTk2YzA5MzE2NDFlZGM0MWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzhkOWQxNDRhNzZjNDFiM2IyZjU1YWY5NWIwMGVlM2UgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc4ZDlkMTQ0YTc2YzQxYjNiMmY1NWFmOTViMDBlZTNlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBbGJlcnRkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3OWRjYzE1NGM5YTQ3OWU5NmMwOTMxNjQxZWRjNDFlLnNldENvbnRlbnQoaHRtbF83OGQ5ZDE0NGE3NmM0MWIzYjJmNTVhZjk1YjAwZWUzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYzMTQwMzYzNGEzYzQyODM4YjdkODg2MjIwYTlmMTZhLmJpbmRQb3B1cChwb3B1cF9mNzlkY2MxNTRjOWE0NzllOTZjMDkzMTY0MWVkYzQxZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFkOWMyNTM2OWExZTQ3NDZhM2U2NDE4YjU0NDA0ODFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA0MTY2NjY2NywxNi4zNjg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyMDgwZWYxMWMyNTRkZWRiMDRhNDQwOWMwYzE5YTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjMGNiOGU4ZGJjNTRiNGU4YmVkODNhYjRjZWYyOGViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YzBjYjhlOGRiYzU0YjRlOGJlZDgzYWI0Y2VmMjhlYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsYmVydGluYSAoR2Viw6R1ZGUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyMDgwZWYxMWMyNTRkZWRiMDRhNDQwOWMwYzE5YTNjLnNldENvbnRlbnQoaHRtbF82YzBjYjhlOGRiYzU0YjRlOGJlZDgzYWI0Y2VmMjhlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFkOWMyNTM2OWExZTQ3NDZhM2U2NDE4YjU0NDA0ODFjLmJpbmRQb3B1cChwb3B1cF9jMjA4MGVmMTFjMjU0ZGVkYjA0YTQ0MDljMGMxOWEzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFjYmNiZTM3NzAzODRiNDJhOWQ0NjZmYjI2Nzc0ZWJkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAwMjc3Nzc3OCwxNi4zNjY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNzk3ZmMxYmRhMTQyNDE4NDQ3MmY1ZmJhY2JhM2RmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhNDUyZTBkZjgyNTRlMDFhZTRlNWI1YjY2N2RjYWY1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lYTQ1MmUwZGY4MjU0ZTAxYWU0ZTViNWI2NjdkY2FmNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBBbGJlcnRpbmFwYXNzYWdlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzNzk3ZmMxYmRhMTQyNDE4NDQ3MmY1ZmJhY2JhM2RmLnNldENvbnRlbnQoaHRtbF9lYTQ1MmUwZGY4MjU0ZTAxYWU0ZTViNWI2NjdkY2FmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFjYmNiZTM3NzAzODRiNDJhOWQ0NjZmYjI2Nzc0ZWJkLmJpbmRQb3B1cChwb3B1cF9kMzc5N2ZjMWJkYTE0MjQxODQ0NzJmNWZiYWNiYTNkZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MyMzM1YzAwZDJhYjQ5YjA5ODQxNDM4MmQxODEzYjYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAwMjc3Nzc3OCwxNi4zNzEzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlYTcxOTM3NGU2MTQ5ODNiMGE3Zjc0MWUxNTE5NGQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3NjljZWJmOGNmNzQ2MmFiY2I1NjgwMjZkM2JhZjRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNzY5Y2ViZjhjZjc0NjJhYmNiNTY4MDI2ZDNiYWY0ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQWxicmVjaHQtRMO8cmVyLURlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWVhNzE5Mzc0ZTYxNDk4M2IwYTdmNzQxZTE1MTk0ZDAuc2V0Q29udGVudChodG1sX2E3NjljZWJmOGNmNzQ2MmFiY2I1NjgwMjZkM2JhZjRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzIzMzVjMDBkMmFiNDliMDk4NDE0MzgyZDE4MTNiNjEuYmluZFBvcHVwKHBvcHVwXzVlYTcxOTM3NGU2MTQ5ODNiMGE3Zjc0MWUxNTE5NGQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTQwOGRjMmZmZWEyNDc4ZGExMjRmYjIzYzdhYzM4YTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTY2NjY2NjY3LDE2LjM1NDQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTNlYWNhMzY5NjNmNGJiMDgyYzg4YWI2NGMyMjZjOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBkMjNlYTY3NmEwNDMwN2E3NzQ1YzllMzY2Y2UwOGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2EwZDIzZWE2NzZhMDQzMDdhNzc0NWM5ZTM2NmNlMDhjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxicmVjaHQtRMO8cmVyLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85M2VhY2EzNjk2M2Y0YmIwODJjODhhYjY0YzIyNmM5Ny5zZXRDb250ZW50KGh0bWxfYTBkMjNlYTY3NmEwNDMwN2E3NzQ1YzllMzY2Y2UwOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNDA4ZGMyZmZlYTI0NzhkYTEyNGZiMjNjN2FjMzhhMS5iaW5kUG9wdXAocG9wdXBfOTNlYWNhMzY5NjNmNGJiMDgyYzg4YWI2NGMyMjZjOTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MWUzNDVhMmQwN2Q0OWMxYTFhZGNhOGY2OTI3YTljNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNTgzMzMzMzMsMTYuMzU2Mzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTVhYmQzYzE5ZGM0YTgxYTIxZDJmNGJhYzgyMzdhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MWFhZWVhNDE0MGE0MmVhOGU1MjdjNjRkZTE4MTYwYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTFhYWVlYTQxNDBhNDJlYThlNTI3YzY0ZGUxODE2MGIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbGJyZWNodGhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTVhYmQzYzE5ZGM0YTgxYTIxZDJmNGJhYzgyMzdhNi5zZXRDb250ZW50KGh0bWxfOTFhYWVlYTQxNDBhNDJlYThlNTI3YzY0ZGUxODE2MGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MWUzNDVhMmQwN2Q0OWMxYTFhZGNhOGY2OTI3YTljNy5iaW5kUG9wdXAocG9wdXBfOWU1YWJkM2MxOWRjNGE4MWEyMWQyZjRiYWM4MjM3YTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYmJhODczY2E4YTQ0MjhhOTJlY2YxYTkyOGMxYzcyNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTE2NjY2NjcsMTYuMzkxOTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MDMzOGI3MGZhMjk0NjU5YTYyZTM4YmFmZTRhOTM0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWEwZDk2MWViMTU0ZDY2OTVjZDllMTczOGI3YTliYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmFhMGQ5NjFlYjE1NGQ2Njk1Y2Q5ZTE3MzhiN2E5YmMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQWxicmVjaHRpc2NoZXMgR2FydGVucGFsYWlzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwMzM4YjcwZmEyOTQ2NTlhNjJlMzhiYWZlNGE5MzQyLnNldENvbnRlbnQoaHRtbF82YWEwZDk2MWViMTU0ZDY2OTVjZDllMTczOGI3YTliYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiYmE4NzNjYThhNDQyOGE5MmVjZjFhOTI4YzFjNzI0LmJpbmRQb3B1cChwb3B1cF81MDMzOGI3MGZhMjk0NjU5YTYyZTM4YmFmZTRhOTM0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYzOTg2YTUzMTU4OTRiOTZhNDIzNzM3NjkxYzJlMjFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAzODg4ODg4OSwxNi4zNjg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlMjNiMjkzODEyNzRhYmJiZDBmNDRiMGZlNWIyMTA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhODBiMWQzYjhiMjQxNzhhYzU4OTMxY2FjMDBhYjQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lYTgwYjFkM2I4YjI0MTc4YWM1ODkzMWNhYzAwYWI0NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBBbGJyZWNodHNicnVubmVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlMjNiMjkzODEyNzRhYmJiZDBmNDRiMGZlNWIyMTA3LnNldENvbnRlbnQoaHRtbF9lYTgwYjFkM2I4YjI0MTc4YWM1ODkzMWNhYzAwYWI0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYzOTg2YTUzMTU4OTRiOTZhNDIzNzM3NjkxYzJlMjFiLmJpbmRQb3B1cChwb3B1cF9jZTIzYjI5MzgxMjc0YWJiYmQwZjQ0YjBmZTViMjEwNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAwNmRiM2I0NjA3MjRjNjViM2Y2N2I2MjlmYjA4YzJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMTExMTExMSwxNi40MTk0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhNmY5MGEyYzZjZTRkNTNhMWZiZjg2ZWVjMDYzNmJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5YjRiMjJjMGZiZTQ1MTVhNzQyYmY5MmUwOTNmMjM2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82OWI0YjIyYzBmYmU0NTE1YTc0MmJmOTJlMDkzZjIzNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsYnJlY2h0c2thc2VybmU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWE2ZjkwYTJjNmNlNGQ1M2ExZmJmODZlZWMwNjM2YmMuc2V0Q29udGVudChodG1sXzY5YjRiMjJjMGZiZTQ1MTVhNzQyYmY5MmUwOTNmMjM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDA2ZGIzYjQ2MDcyNGM2NWIzZjY3YjYyOWZiMDhjMmMuYmluZFBvcHVwKHBvcHVwX2VhNmY5MGEyYzZjZTRkNTNhMWZiZjg2ZWVjMDYzNmJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTc5MGIyZWJjNDllNDY1MWI0MzMwOTcxYjZhYzRjN2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQ0NDQ0NDQ0LDE2LjM2ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE5ZTNlZjM1NDk4NDE2NWJhYjc0YzEwODUzM2NhNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc5ZDM5MTU1MzNmNDJkYjk1ZWNiN2E5YTFkODgxZjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU3OWQzOTE1NTMzZjQyZGI5NWVjYjdhOWExZDg4MWY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFsYnJlY2h0c3JhbXBlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxOWUzZWYzNTQ5ODQxNjViYWI3NGMxMDg1MzNjYTc5LnNldENvbnRlbnQoaHRtbF81NzlkMzkxNTUzM2Y0MmRiOTVlY2I3YTlhMWQ4ODFmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU3OTBiMmViYzQ5ZTQ2NTFiNDMzMDk3MWI2YWM0YzdmLmJpbmRQb3B1cChwb3B1cF81MTllM2VmMzU0OTg0MTY1YmFiNzRjMTA4NTMzY2E3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM1YmZkZDcxY2U3MzQ4ZjA4MTQ4MGJlMmVmYWQzZjkwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIyMjIyMjIyMiwxNi4zMzY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkMWE0ZmZlZGFmOTRiMWI4NzM3ZmViMjA3NDc0ZTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmZmYzZTJmMTAyOTRhY2FhN2E1YjEwMjc2MmYwYTdjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zZmZmM2UyZjEwMjk0YWNhYTdhNWIxMDI3NjJmMGE3YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsZG8tTW9yby1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQxYTRmZmVkYWY5NGIxYjg3MzdmZWIyMDc0NzRlNTcuc2V0Q29udGVudChodG1sXzNmZmYzZTJmMTAyOTRhY2FhN2E1YjEwMjc2MmYwYTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzViZmRkNzFjZTczNDhmMDgxNDgwYmUyZWZhZDNmOTAuYmluZFBvcHVwKHBvcHVwXzhkMWE0ZmZlZGFmOTRiMWI4NzM3ZmViMjA3NDc0ZTU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjg4MTUyZTEyMDk5NDNmZjlmZjk2OWFiOWFlMWMzNTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTU1NTU1NTU2LDE2LjM0ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTYzZjg3NDQyODJmNGM5OWEzNTAyZDNmNWZjODQ0NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTRjOTQ2MTVmODM5NGI4ZGExNTc4N2M0ODJhYmIxMmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE0Yzk0NjE1ZjgzOTRiOGRhMTU3ODdjNDgyYWJiMTJmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFsZXhhbmRlci1MYW5nZXItU2FhbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjNmODc0NDI4MmY0Yzk5YTM1MDJkM2Y1ZmM4NDQ0Zi5zZXRDb250ZW50KGh0bWxfMTRjOTQ2MTVmODM5NGI4ZGExNTc4N2M0ODJhYmIxMmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mODgxNTJlMTIwOTk0M2ZmOWZmOTY5YWI5YWUxYzM1MS5iaW5kUG9wdXAocG9wdXBfMTYzZjg3NDQyODJmNGM5OWEzNTAyZDNmNWZjODQ0NGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYTI1YjgzYmJiMzk0ZTA4YjBkMjc0ZjA3NmI1NjFiYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyODg4ODg4ODksMTYuMzU2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWZlMzIwZGFjYTM0MWVjYmYxNmMzNzg5OTAyOTcxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWE3OGE1Yzk3Y2Q0YmZhOTA2NzJmY2E2MjYzZmI2NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmFhNzhhNWM5N2NkNGJmYTkwNjcyZmNhNjI2M2ZiNjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbGV4YW5kZXItTmVoci1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjFmZTMyMGRhY2EzNDFlY2JmMTZjMzc4OTkwMjk3MTMuc2V0Q29udGVudChodG1sXzZhYTc4YTVjOTdjZDRiZmE5MDY3MmZjYTYyNjNmYjY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWEyNWI4M2JiYjM5NGUwOGIwZDI3NGYwNzZiNTYxYmEuYmluZFBvcHVwKHBvcHVwX2YxZmUzMjBkYWNhMzQxZWNiZjE2YzM3ODk5MDI5NzEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmQ3NTExY2YyYTlkNDk1MGEyOTk5NzUwYmY1MDllZDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzI1LDE2LjQxMTk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhjNGU4YTU1ZmZmNGJiNmJjZDU3NjUxMTY2MjRiMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODA1ZTg0OTM4MzcxNDVjY2IxODM0MTZjNTdhMjcyZGQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgwNWU4NDkzODM3MTQ1Y2NiMTgzNDE2YzU3YTI3MmRkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxmb25zLVBldHpvbGQtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4YzRlOGE1NWZmZjRiYjZiY2Q1NzY1MTE2NjI0YjE0LnNldENvbnRlbnQoaHRtbF84MDVlODQ5MzgzNzE0NWNjYjE4MzQxNmM1N2EyNzJkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkNzUxMWNmMmE5ZDQ5NTBhMjk5OTc1MGJmNTA5ZWQ5LmJpbmRQb3B1cChwb3B1cF9kOGM0ZThhNTVmZmY0YmI2YmNkNTc2NTExNjYyNGIxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJlODQwNjU1ZTMzYjRhZmY4NTQzMjIzNGY4YzgxODAwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2Mzg4ODg4OSwxNi4zNDgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5YTUwYzkxNWVkNjRlN2ZhZjUwY2ZiZTc5MTAxN2NjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwYWQ0ZjVkYmNhOTRkMTNiMDhjYWQyZjJmOTYzZTM4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MGFkNGY1ZGJjYTk0ZDEzYjA4Y2FkMmYyZjk2M2UzOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsZm9uc2hvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWE1MGM5MTVlZDY0ZTdmYWY1MGNmYmU3OTEwMTdjYy5zZXRDb250ZW50KGh0bWxfOTBhZDRmNWRiY2E5NGQxM2IwOGNhZDJmMmY5NjNlMzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZTg0MDY1NWUzM2I0YWZmODU0MzIyMzRmOGM4MTgwMC5iaW5kUG9wdXAocG9wdXBfMTlhNTBjOTE1ZWQ2NGU3ZmFmNTBjZmJlNzkxMDE3Y2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yM2UxYjlhMTYzNTM0MWYxODg0OGU3YjA1MjQ0ZGUyOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIzNjM4ODg4ODksMTYuNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWJkNmJlMWE4MThmNDFiZGEyZTVhZjljMmYyMmY5YjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2U5ZTZkZmYzOTdkNDQwOGJjZDU2MTQ2NjE2OGE3MzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NlOWU2ZGZmMzk3ZDQ0MDhiY2Q1NjE0NjYxNjhhNzMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxmcmVkLUtsaW5rYW4tSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZDZiZTFhODE4ZjQxYmRhMmU1YWY5YzJmMjJmOWIwLnNldENvbnRlbnQoaHRtbF9jZTllNmRmZjM5N2Q0NDA4YmNkNTYxNDY2MTY4YTczMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIzZTFiOWExNjM1MzQxZjE4ODQ4ZTdiMDUyNDRkZTI5LmJpbmRQb3B1cChwb3B1cF85YmQ2YmUxYTgxOGY0MWJkYTJlNWFmOWMyZjIyZjliMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhkMGI1M2FlZDdhYzQ0ZGI4YjczNzY5YTM1Y2FiNTZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk1ODMzMzMzMywxNi4zNTExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0NWNkOTc2YWJiZTQwNWFhYzJmYzcwNjk4ODgyZWRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhODE2YTlkMTJiNDRiMjFiMTc4N2Q1ZWRmMGZlNzljID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83YTgxNmE5ZDEyYjQ0YjIxYjE3ODdkNWVkZjBmZTc5YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsZnJlZC1Qb3JnZXMtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0NWNkOTc2YWJiZTQwNWFhYzJmYzcwNjk4ODgyZWRkLnNldENvbnRlbnQoaHRtbF83YTgxNmE5ZDEyYjQ0YjIxYjE3ODdkNWVkZjBmZTc5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhkMGI1M2FlZDdhYzQ0ZGI4YjczNzY5YTM1Y2FiNTZhLmJpbmRQb3B1cChwb3B1cF9kNDVjZDk3NmFiYmU0MDVhYWMyZmM3MDY5ODg4MmVkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkxYzc4NjQxM2ZiMTQ3NjVhZTgxMWU0ZmE0N2Y5ZmY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTczODg4ODg4OSwxNi40MTI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmNzE5OTc1YjljNzRlNjZiYTRiZjcyNDEyZjgwYzZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxNzc3MjQ0NWM0YzRhNTU4YTFkMThkY2JjY2NlNGM1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MTc3NzI0NDVjNGM0YTU1OGExZDE4ZGNiY2NjZTRjNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsZnJlZC1XdW5zY2gtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmNzE5OTc1YjljNzRlNjZiYTRiZjcyNDEyZjgwYzZmLnNldENvbnRlbnQoaHRtbF85MTc3NzI0NDVjNGM0YTU1OGExZDE4ZGNiY2NjZTRjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkxYzc4NjQxM2ZiMTQ3NjVhZTgxMWU0ZmE0N2Y5ZmY0LmJpbmRQb3B1cChwb3B1cF8yZjcxOTk3NWI5Yzc0ZTY2YmE0YmY3MjQxMmY4MGM2Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg5NzIyNjc1OWUyZTQ3ZWNiMjhiZTM4OWI3MDM4ODI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4ODg4ODg4OSwxNi4zODE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjYzNlZTk3Y2ZlNzRhNGVhMzBkYjkxOTc0MDk3Y2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MDAzZTk1OWE1YzQ4MWQ4OWNhMWYyZTE2MDIwZjQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNjAwM2U5NTlhNWM0ODFkODljYTFmMmUxNjAyMGY0NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsaWNlLXVuZC1IZWlucmljaC1TY2hldWVyLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2MzZWU5N2NmZTc0YTRlYTMwZGI5MTk3NDA5N2NhZi5zZXRDb250ZW50KGh0bWxfZDYwMDNlOTU5YTVjNDgxZDg5Y2ExZjJlMTYwMjBmNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84OTcyMjY3NTllMmU0N2VjYjI4YmUzODliNzAzODgyNy5iaW5kUG9wdXAocG9wdXBfNmNjM2VlOTdjZmU3NGE0ZWEzMGRiOTE5NzQwOTdjYWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNzZkYmQ3NjRmNWQ0ZjE1YTNjMzhhYTdkZmM3M2E5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDU1NTU1NTYsMTYuMzYxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ODI3YmJiZmM5MmI0YmU4YTA1MWM2NjJlMTE2YTdmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZmQ4Y2I5NzAyZTU0MTA0OTNmNjM4MTBiNjFlZTZmOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmZkOGNiOTcwMmU1NDEwNDkzZjYzODEwYjYxZWU2ZjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbGluZS1GdXJ0bcO8bGxlci1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgyN2JiYmZjOTJiNGJlOGEwNTFjNjYyZTExNmE3ZmIuc2V0Q29udGVudChodG1sX2JmZDhjYjk3MDJlNTQxMDQ5M2Y2MzgxMGI2MWVlNmY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDc2ZGJkNzY0ZjVkNGYxNWEzYzM4YWE3ZGZjNzNhOTUuYmluZFBvcHVwKHBvcHVwXzU4MjdiYmJmYzkyYjRiZThhMDUxYzY2MmUxMTZhN2ZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzM2MTQzMjE4YmQ1NDYxZmIyODI3ODg5NWNiNTk3YTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDY5NDQ0NDQ0LDE2LjM3MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWYyNTI5ZGU4MjIzNGQ0MmExZDY0NDkxZTExNTE4YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzFlYzljMjRiZThlNDE0NmE5ODczNTEyNzI3YjIzYmUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2MxZWM5YzI0YmU4ZTQxNDZhOTg3MzUxMjcyN2IyM2JlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxsYW5kc2NoZXMgU3RpZnR1bmdzaGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZjI1MjlkZTgyMjM0ZDQyYTFkNjQ0OTFlMTE1MThjNy5zZXRDb250ZW50KGh0bWxfYzFlYzljMjRiZThlNDE0NmE5ODczNTEyNzI3YjIzYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MzYxNDMyMThiZDU0NjFmYjI4Mjc4ODk1Y2I1OTdhMS5iaW5kUG9wdXAocG9wdXBfMWYyNTI5ZGU4MjIzNGQ0MmExZDY0NDkxZTExNTE4YzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ODFhOTIyMjI2MDc0NDA0YThlZmEwZmFkYTg1ZmViMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YjgwZTMxMWY1Nzg0ZDkxYmQyZGM3MWM1OWNiMTdiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDBiYjY3MTg0ZWQ0Y2I3OGY3ZGRiNTBlMDVmZDFkZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTAwYmI2NzE4NGVkNGNiNzhmN2RkYjUwZTA1ZmQxZGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQWxsZXJoZWlsaWdlbmthcGVsbGUgKDEsIEJyw6R1bmVyc3RyYcOfZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGI4MGUzMTFmNTc4NGQ5MWJkMmRjNzFjNTljYjE3YjIuc2V0Q29udGVudChodG1sXzUwMGJiNjcxODRlZDRjYjc4ZjdkZGI1MGUwNWZkMWRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTgxYTkyMjIyNjA3NDQwNGE4ZWZhMGZhZGE4NWZlYjEuYmluZFBvcHVwKHBvcHVwXzRiODBlMzExZjU3ODRkOTFiZDJkYzcxYzU5Y2IxN2IyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmFlMWUxZjk0N2RhNDQzMGE5OWM2NWFjZjQ2ZTgyZWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjM2NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMTBhNWZlMWMzYWQ0MmEzYWEzYWFjM2JhNjJiOTAxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOWQ4NmE4ZDRhZTE0OWRiOTk4ZWEyMGMwMTYxMzBhNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjlkODZhOGQ0YWUxNDlkYjk5OGVhMjBjMDE2MTMwYTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQWxsZXJoZWlsaWdlbmthcGVsbGUgKDEsIEhvZmJ1cmcpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxMGE1ZmUxYzNhZDQyYTNhYTNhYWMzYmE2MmI5MDFkLnNldENvbnRlbnQoaHRtbF9iOWQ4NmE4ZDRhZTE0OWRiOTk4ZWEyMGMwMTYxMzBhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJhZTFlMWY5NDdkYTQ0MzBhOTljNjVhY2Y0NmU4MmVmLmJpbmRQb3B1cChwb3B1cF9lMTBhNWZlMWMzYWQ0MmEzYWEzYWFjM2JhNjJiOTAxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdiOWNjYjA4YWY5MzQ0MGRiODhjZjBhN2RiNTNhNGE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjM2Mzg4ODg4OSwxNi4zODU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkYjhjOWM2YzRkODQ2OTliZmE2M2RhZGQ2YTMzNzBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3YjBiY2UwY2Q5MzRhYjU4YTBhNDRiOTFlMWUyNmZmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84N2IwYmNlMGNkOTM0YWI1OGEwYTQ0YjkxZTFlMjZmZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbGxlcmhlaWxpZ2Vua2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYjhjOWM2YzRkODQ2OTliZmE2M2RhZGQ2YTMzNzBiLnNldENvbnRlbnQoaHRtbF84N2IwYmNlMGNkOTM0YWI1OGEwYTQ0YjkxZTFlMjZmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdiOWNjYjA4YWY5MzQ0MGRiODhjZjBhN2RiNTNhNGE4LmJpbmRQb3B1cChwb3B1cF82ZGI4YzljNmM0ZDg0Njk5YmZhNjNkYWRkNmEzMzcwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VlMGU3NWJlNmJlNTQ5OWE5MjBhY2JhOWJmNWY5MDE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI1NTU1NTU1NiwxNi4zNDE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhMDk5ODJmNTEwNDQ5OGFiYjE2NWI0OWZmNTM2YzQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjYjFiNzhhYmNjNzQwYzk5MjkwMWIzMmM5YWNkMjFjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yY2IxYjc4YWJjYzc0MGM5OTI5MDFiMzJjOWFjZDIxYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbGxlcnNlZWxlbmthcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2EwOTk4MmY1MTA0NDk4YWJiMTY1YjQ5ZmY1MzZjNDguc2V0Q29udGVudChodG1sXzJjYjFiNzhhYmNjNzQwYzk5MjkwMWIzMmM5YWNkMjFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWUwZTc1YmU2YmU1NDk5YTkyMGFjYmE5YmY1ZjkwMTguYmluZFBvcHVwKHBvcHVwX2NhMDk5ODJmNTEwNDQ5OGFiYjE2NWI0OWZmNTM2YzQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWYzZDU0MzI3YjdkNDEyZjhkMjk2OGFkZjAxMmRmZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNDMwNTU1NTU2LDE2LjM3NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTAyZGQyYjU0ZThmNDViZTllZGNlNDJjZDBlNGQ5NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2UyNWU1M2YwODRiNGNkZGEwYWU4YWM4NzczYWE5ODcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdlMjVlNTNmMDg0YjRjZGRhMGFlOGFjODc3M2FhOTg3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxsZ2VtZWluZSBVbmZhbGx2ZXJzaWNoZXJ1bmdzYW5zdGFsdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MDJkZDJiNTRlOGY0NWJlOWVkY2U0MmNkMGU0ZDk2ZS5zZXRDb250ZW50KGh0bWxfN2UyNWU1M2YwODRiNGNkZGEwYWU4YWM4NzczYWE5ODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZjNkNTQzMjdiN2Q0MTJmOGQyOTY4YWRmMDEyZGZmZi5iaW5kUG9wdXAocG9wdXBfNTAyZGQyYjU0ZThmNDViZTllZGNlNDJjZDBlNGQ5NmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80YjBlZWM1NzI1ODY0Y2QzYTNiNWZlZWMwYmQ1NzJlNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NzUsMTYuMjY0NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzk1YjRkMGE1MDg0ODkxYTk3NTdmY2M3MzIwNGNiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjRlZDBjZDIyMzc0YTcyOGE5YWZkYjJjOWEyMTgxNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDY0ZWQwY2QyMjM3NGE3MjhhOWFmZGIyYzlhMjE4MTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbGxpYW56LVN0YWRpb248L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc5NWI0ZDBhNTA4NDg5MWE5NzU3ZmNjNzMyMDRjYmQuc2V0Q29udGVudChodG1sXzQ2NGVkMGNkMjIzNzRhNzI4YTlhZmRiMmM5YTIxODE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGIwZWVjNTcyNTg2NGNkM2EzYjVmZWVjMGJkNTcyZTUuYmluZFBvcHVwKHBvcHVwX2M3OTViNGQwYTUwODQ4OTFhOTc1N2ZjYzczMjA0Y2JkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDMxZDEyZDY3MjQ5NDQzYzhkMjljNDdiNDcyNzhkYTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTUsMTYuMzg0NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjFhZGQzNTUxNzM0YTUwYTA1MGY1YWM3NjRiNDcxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YWIyMmEzODdkMDQ0ZTg1OTAxNDdhYTA2NTAzZDljMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWFiMjJhMzg3ZDA0NGU4NTkwMTQ3YWEwNjUwM2Q5YzEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbGxpaWVydGVuaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2MWFkZDM1NTE3MzRhNTBhMDUwZjVhYzc2NGI0NzFiLnNldENvbnRlbnQoaHRtbF81YWIyMmEzODdkMDQ0ZTg1OTAxNDdhYTA2NTAzZDljMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQzMWQxMmQ2NzI0OTQ0M2M4ZDI5YzQ3YjQ3Mjc4ZGE2LmJpbmRQb3B1cChwb3B1cF9iNjFhZGQzNTUxNzM0YTUwYTA1MGY1YWM3NjRiNDcxYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3MmNiYTYxNjVlYjQ0ZTNhYzNkNDVmOWMxZjlhZDc5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1ODMzMzMzMywxNi4zNzEzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0NTUwYzk5YjkyZjQ3MGE5NzAyNTdhZjg1OTVkMzYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2MjVhY2M2MzcwNjQwNTk4NjVlYjFhNTMwY2ZmM2RiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NjI1YWNjNjM3MDY0MDU5ODY1ZWIxYTUzMGNmZjNkYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsbHdvIGRlciBFc2VsIGluIGRlciBXaWVnZSBsaWVndDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDU1MGM5OWI5MmY0NzBhOTcwMjU3YWY4NTk1ZDM2Mi5zZXRDb250ZW50KGh0bWxfOTYyNWFjYzYzNzA2NDA1OTg2NWViMWE1MzBjZmYzZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NzJjYmE2MTY1ZWI0NGUzYWMzZDQ1ZjljMWY5YWQ3OS5iaW5kUG9wdXAocG9wdXBfZjQ1NTBjOTliOTJmNDcwYTk3MDI1N2FmODU5NWQzNjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMThlMWNlODljZDg0ZjUxYjdhZDgzM2I4OTIzZTMyZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDgzMzMzMzMsMTYuMzc4NjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOWYzOThjMjRlMWE0MGM0OTQyYzM5NzcwZDg2MzBkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDlkZWI0ZWYyODI0Y2ExYjcyNDJlMWViMDM5ZGY2ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjA5ZGViNGVmMjgyNGNhMWI3MjQyZTFlYjAzOWRmNmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbG1hLU1vdHprby1TZWl0ei1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTlmMzk4YzI0ZTFhNDBjNDk0MmMzOTc3MGQ4NjMwZGQuc2V0Q29udGVudChodG1sXzIwOWRlYjRlZjI4MjRjYTFiNzI0MmUxZWIwMzlkZjZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzE4ZTFjZTg5Y2Q4NGY1MWI3YWQ4MzNiODkyM2UzMmQuYmluZFBvcHVwKHBvcHVwX2E5ZjM5OGMyNGUxYTQwYzQ5NDJjMzk3NzBkODYzMGRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTI1MDdiZDFmZjRhNDc1NTljNGRmOGMyZjRkNzgxNDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNDYxMTExMTExLDE2LjI5NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFiZTNlMmY2NTdiNDg1YzlkOTU1ODllMTdlMTQ1YjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI0ZTRkZWIyNjlmNGYzOTgzYzYyNWQzYTk3MzNkYTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFiNGU0ZGViMjY5ZjRmMzk4M2M2MjVkM2E5NzMzZGEyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxvaXMtR2xhdWVyLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWJlM2UyZjY1N2I0ODVjOWQ5NTU4OWUxN2UxNDViNy5zZXRDb250ZW50KGh0bWxfMWI0ZTRkZWIyNjlmNGYzOTgzYzYyNWQzYTk3MzNkYTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMjUwN2JkMWZmNGE0NzU1OWM0ZGY4YzJmNGQ3ODE0OS5iaW5kUG9wdXAocG9wdXBfNDFiZTNlMmY2NTdiNDg1YzlkOTU1ODllMTdlMTQ1YjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MjAwZmI2MjdiZDc0MDIwOTc3YTk1MmIzYmVhYzNjMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4Nzc3Nzc3NzgsMTYuMzI3Nzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNTAzZWNlODdlYTc0MjYxOWVjZTgwZmQzNmM1YWQ5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMDU3MGFhNmE5ZTU0N2Q5YTY5ZDE1NWIwNDZmODM5YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDA1NzBhYTZhOWU1NDdkOWE2OWQxNTViMDQ2ZjgzOWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbG9pcy1Lw7xibGLDtmNrLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTAzZWNlODdlYTc0MjYxOWVjZTgwZmQzNmM1YWQ5ZC5zZXRDb250ZW50KGh0bWxfZDA1NzBhYTZhOWU1NDdkOWE2OWQxNTViMDQ2ZjgzOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MjAwZmI2MjdiZDc0MDIwOTc3YTk1MmIzYmVhYzNjMi5iaW5kUG9wdXAocG9wdXBfZjUwM2VjZTg3ZWE3NDI2MTllY2U4MGZkMzZjNWFkOWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MDQyNTMwYTdkMmU0MjRiYWQwYTExY2Q1YWJlYzVmZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNjY2NjY2NjcsMTYuMzM1ODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYjg2NWU5ZmNjMGY0OTMxOWJkMGQ0OWQyMjFmOTk1ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWU2NWVlY2VjNTI0YzNkYjEzNWNmZTc4NDdjYzEzZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWFlNjVlZWNlYzUyNGMzZGIxMzVjZmU3ODQ3Y2MxM2UiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHMtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiODY1ZTlmY2MwZjQ5MzE5YmQwZDQ5ZDIyMWY5OTVmLnNldENvbnRlbnQoaHRtbF9hYWU2NWVlY2VjNTI0YzNkYjEzNWNmZTc4NDdjYzEzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkwNDI1MzBhN2QyZTQyNGJhZDBhMTFjZDVhYmVjNWZkLmJpbmRQb3B1cChwb3B1cF9jYjg2NWU5ZmNjMGY0OTMxOWJkMGQ0OWQyMjFmOTk1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxMDVlMzIzNTljNzQ4YTE4NDA3NmY5N2Y3MWVhZjZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI0MTY2NjY2NywxNi4zMTI3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjMzFiZmM4NjgxMTQ4MTFhMjRiNDk0YmJkYzRhODVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlOTA1ODVjYWUzOTQ3YmM5YjRhZDQwMzRhMjM0NTgyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZTkwNTg1Y2FlMzk0N2JjOWI0YWQ0MDM0YTIzNDU4MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsc2VnZy1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGMzMWJmYzg2ODExNDgxMWEyNGI0OTRiYmRjNGE4NWQuc2V0Q29udGVudChodG1sXzhlOTA1ODVjYWUzOTQ3YmM5YjRhZDQwMzRhMjM0NTgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjEwNWUzMjM1OWM3NDhhMTg0MDc2Zjk3ZjcxZWFmNmIuYmluZFBvcHVwKHBvcHVwXzRjMzFiZmM4NjgxMTQ4MTFhMjRiNDk0YmJkYzRhODVkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmY1NjIzZGZkYjBiNGM4ZDhiYmMxNjljMTc5YTY5NTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTQ0NDQ0NDQ0LDE2LjM1NDQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDM0NzBhNjgyYmVhNDllNjkwOTU2Yjc4NGQyNDZmYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU5NTJlZmExNDc5NGU4N2IxYTgyODEwNWEyZTE3NTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JlOTUyZWZhMTQ3OTRlODdiMWE4MjgxMDVhMmUxNzU2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxzZXIgS2FzZXJuZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzQ3MGE2ODJiZWE0OWU2OTA5NTZiNzg0ZDI0NmZiMS5zZXRDb250ZW50KGh0bWxfYmU5NTJlZmExNDc5NGU4N2IxYTgyODEwNWEyZTE3NTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZjU2MjNkZmRiMGI0YzhkOGJiYzE2OWMxNzlhNjk1My5iaW5kUG9wdXAocG9wdXBfMDM0NzBhNjgyYmVhNDllNjkwOTU2Yjc4NGQyNDZmYjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMWM0OWYxNWQzYWQ0ZDFhOGMwMzRlNDg0MzQwYWZjYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNDQ0NDQ0NDQsMTYuMzUyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NWM0YTY0ODdhMGQ0ZTZlODhlZjI0ODZjYmRjYzgyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTVkYWVkNzhlNTA0NGUzYmM2M2Y0YjEwYWE1MGNjZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTU1ZGFlZDc4ZTUwNDRlM2JjNjNmNGIxMGFhNTBjY2YiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQWxzZXIgS2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1YzRhNjQ4N2EwZDRlNmU4OGVmMjQ4NmNiZGNjODJhLnNldENvbnRlbnQoaHRtbF9hNTVkYWVkNzhlNTA0NGUzYmM2M2Y0YjEwYWE1MGNjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxYzQ5ZjE1ZDNhZDRkMWE4YzAzNGU0ODQzNDBhZmNiLmJpbmRQb3B1cChwb3B1cF84NWM0YTY0ODdhMGQ0ZTZlODhlZjI0ODZjYmRjYzgyYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiMjEwM2RlNDFiYzQ3ODY4YmQxNjE3Y2NlMzE0OTM0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE1LDE2LjM0Nzc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzVkYWExNzc0OTA0NGNhNTg5MTU0MGJhYjU4NTg4MzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODI4MjhiYmZlNTkwNGU4MDgwMDljMjk2MmE0MjkwMzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgyODI4YmJmZTU5MDRlODA4MDA5YzI5NjJhNDI5MDMwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWxzZXJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzVkYWExNzc0OTA0NGNhNTg5MTU0MGJhYjU4NTg4MzQuc2V0Q29udGVudChodG1sXzgyODI4YmJmZTU5MDRlODA4MDA5YzI5NjJhNDI5MDMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWIyMTAzZGU0MWJjNDc4NjhiZDE2MTdjY2UzMTQ5MzQuYmluZFBvcHVwKHBvcHVwXzc1ZGFhMTc3NDkwNDRjYTU4OTE1NDBiYWI1ODU4ODM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTAwOWY0ZTdlOTJhNGM2N2E4ZGZmODNlZmM4ZGU0MDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzY5NDQ0NDQ0LDE2LjMzNTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGVkYzVmZTk5ZjcwNDRjNjkxZTcwMjc5YTQ4MDhjYmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzA5ZGZhZDdiNmE3NGZmMWI4YzVhZmI5YTA1YWRjZjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcwOWRmYWQ3YjZhNzRmZjFiOGM1YWZiOWEwNWFkY2Y0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0LVdpZW5lciBTY2huYXBzbXVzZXVtPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlZGM1ZmU5OWY3MDQ0YzY5MWU3MDI3OWE0ODA4Y2JkLnNldENvbnRlbnQoaHRtbF83MDlkZmFkN2I2YTc0ZmYxYjhjNWFmYjlhMDVhZGNmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwMDlmNGU3ZTkyYTRjNjdhOGRmZjgzZWZjOGRlNDA2LmJpbmRQb3B1cChwb3B1cF84ZWRjNWZlOTlmNzA0NGM2OTFlNzAyNzlhNDgwOGNiZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUwZmUxOGM4MDRjMTQyZDk5NDI0N2I4ZWEzMmI2ZjI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5NzIyMjIyMiwxNi4zNjQxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkZDg1MWM2MDJmOTQxZmY4NWViZWUwYmI2Y2Y1OWUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlMjFkZmRhNjNlNjRiNjhhOGIzNjI5NmY0ZTU3YTNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZTIxZGZkYTYzZTY0YjY4YThiMzYyOTZmNGU1N2EzYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQWx0ZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZGQ4NTFjNjAyZjk0MWZmODVlYmVlMGJiNmNmNTllMi5zZXRDb250ZW50KGh0bWxfZGUyMWRmZGE2M2U2NGI2OGE4YjM2Mjk2ZjRlNTdhM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MGZlMThjODA0YzE0MmQ5OTQyNDdiOGVhMzJiNmYyNy5iaW5kUG9wdXAocG9wdXBfZGRkODUxYzYwMmY5NDFmZjg1ZWJlZTBiYjZjZjU5ZTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZGVhMzhiYWVmMzg0MGIxODkxODNmYjljYmQ5ZDU2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzMzMzMzMzMsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZWE3MmMyMGFlMzc0MmQxYjEzYTZlMzA2YmRkNjM4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Nzg0Y2RkODAzYzU0YjVhODlhNTYyMjRhMjM4MWI4NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjc4NGNkZDgwM2M1NGI1YTg5YTU2MjI0YTIzODFiODciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyw7xja2U6IEFsdGUgSG9oZSBCcsO8Y2tlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlYTcyYzIwYWUzNzQyZDFiMTNhNmUzMDZiZGQ2MzhiLnNldENvbnRlbnQoaHRtbF82Nzg0Y2RkODAzYzU0YjVhODlhNTYyMjRhMjM4MWI4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBkZWEzOGJhZWYzODQwYjE4OTE4M2ZiOWNiZDlkNTYwLmJpbmRQb3B1cChwb3B1cF9hZWE3MmMyMGFlMzc0MmQxYjEzYTZlMzA2YmRkNjM4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM2ZDUyZGVmN2IwNTRhNDk4ZTFlZDEwNzI2MTgzODM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg1LDE2LjM2Mjc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2EyOGE5MGVhYTUyNDEyYjkyYzNjMjhhNzFkMTc0MDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2NkNzdkYjNhMjk2NGVmNGFjMDZjYzI5NWQ4NzMzNmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NjZDc3ZGIzYTI5NjRlZjRhYzA2Y2MyOTVkODczMzZmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFsdGUgTWF0emxlaW5zZG9yZmVyIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTI4YTkwZWFhNTI0MTJiOTJjM2MyOGE3MWQxNzQwNi5zZXRDb250ZW50KGh0bWxfY2NkNzdkYjNhMjk2NGVmNGFjMDZjYzI5NWQ4NzMzNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zNmQ1MmRlZjdiMDU0YTQ5OGUxZWQxMDcyNjE4MzgzNS5iaW5kUG9wdXAocG9wdXBfM2EyOGE5MGVhYTUyNDEyYjkyYzNjMjhhNzFkMTc0MDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82M2FhNTVmNzAyNjg0MGUyYjUzODYzN2RlZjAwMWE0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTE2NjY2NjcsMTYuMzc3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWUwZjc5YWQyM2U0YzQ2ODUwNmQzNDliOTcyYTZmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OTM2MzY3MzJkNGU0YzdiYWY4NDllMWI2NjVlMzJkNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTkzNjM2NzMyZDRlNGM3YmFmODQ5ZTFiNjY1ZTMyZDQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlIFNjaG1pZWRlICgxKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWUwZjc5YWQyM2U0YzQ2ODUwNmQzNDliOTcyYTZmYi5zZXRDb250ZW50KGh0bWxfNTkzNjM2NzMyZDRlNGM3YmFmODQ5ZTFiNjY1ZTMyZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82M2FhNTVmNzAyNjg0MGUyYjUzODYzN2RlZjAwMWE0Zi5iaW5kUG9wdXAocG9wdXBfN2FlMGY3OWFkMjNlNGM0Njg1MDZkMzQ5Yjk3MmE2ZmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xOWVmYzZhOTU5MTI0MzZlYmJhNzRlMWZlNGE1MjNhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4OTcyMjIyMjIsMTYuMzExOTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODU0MzRmMzBiYTg0N2Q5OTI5OWJhYmVjOTRhMmU4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDMwYWI2NzVjNDc0YjBmOGZiMmNhNTFkZjMwN2NjYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjQzMGFiNjc1YzQ3NGIwZjhmYjJjYTUxZGYzMDdjY2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlIFNjaG1pZWRlICgxNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg1NDM0ZjMwYmE4NDdkOTkyOTliYWJlYzk0YTJlODAuc2V0Q29udGVudChodG1sX2Y0MzBhYjY3NWM0NzRiMGY4ZmIyY2E1MWRmMzA3Y2NjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTllZmM2YTk1OTEyNDM2ZWJiYTc0ZTFmZTRhNTIzYWUuYmluZFBvcHVwKHBvcHVwX2I4NTQzNGYzMGJhODQ3ZDk5Mjk5YmFiZWM5NGEyZTgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTRmNzUzNTgxYWRiNDg4YmIxMjZiNWIwMDA5YWY3NDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNywxNi40MjA4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjY2RlZTdmOTM0ZDQ5MWU4ZTM4NTFmMDI3ZmUwNTc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiZjBhODIzZGMwMjRhY2I5MTY2Y2I0Y2Y1MGI1NzQwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YmYwYTgyM2RjMDI0YWNiOTE2NmNiNGNmNTBiNTc0MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbHRlIFNpbW1lcmluZ2VyIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2NkZWU3ZjkzNGQ0OTFlOGUzODUxZjAyN2ZlMDU3Ny5zZXRDb250ZW50KGh0bWxfNmJmMGE4MjNkYzAyNGFjYjkxNjZjYjRjZjUwYjU3NDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNGY3NTM1ODFhZGI0ODhiYjEyNmI1YjAwMDlhZjc0MC5iaW5kUG9wdXAocG9wdXBfNmNjZGVlN2Y5MzRkNDkxZThlMzg1MWYwMjdmZTA1NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMDQ0OWQ5YjhjMDU0MjViOTc1ODcxYjlhYWZjZTg3NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzc3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTYyMDljYjIxZjk0Njk4ODhiNDJjNTZiOWJmNTU3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYjNkNDkyN2IxZTk0ODMzOWQ5Y2NmOTgzMjA2ODQ5YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmIzZDQ5MjdiMWU5NDgzMzlkOWNjZjk4MzIwNjg0OWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlIFVuaXZlcnNpdMOkdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTYyMDljYjIxZjk0Njk4ODhiNDJjNTZiOWJmNTU3MS5zZXRDb250ZW50KGh0bWxfMmIzZDQ5MjdiMWU5NDgzMzlkOWNjZjk4MzIwNjg0OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMDQ0OWQ5YjhjMDU0MjViOTc1ODcxYjlhYWZjZTg3Ni5iaW5kUG9wdXAocG9wdXBfOWU2MjA5Y2IyMWY5NDY5ODg4YjQyYzU2YjliZjU1NzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZWRiMjU5ZmUwYzE0MjIzYmEzYTRkOWQ3OTlkZTNmMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDgzMzMzMzMsMTYuMzg5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWRlMWZmMmIwMDE0MmUxOGU4NzhjNTJlZTFmNzVkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNWEzNjY0YzU1MTU0MWVkYTY5NWM4NzdlZWU5Mzg0MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzVhMzY2NGM1NTE1NDFlZGE2OTVjODc3ZWVlOTM4NDIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQWx0ZSBXZWnDn2dlcmJlcmtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWRlMWZmMmIwMDE0MmUxOGU4NzhjNTJlZTFmNzVkZS5zZXRDb250ZW50KGh0bWxfYzVhMzY2NGM1NTE1NDFlZGE2OTVjODc3ZWVlOTM4NDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZWRiMjU5ZmUwYzE0MjIzYmEzYTRkOWQ3OTlkZTNmMi5iaW5kUG9wdXAocG9wdXBfNGVkZTFmZjJiMDAxNDJlMThlODc4YzUyZWUxZjc1ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZmUzZWYzNzczOGQ0ZmJjOTVlZjc5ZGFmMDJlZjdiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI2MTExMTExMTEsMTYuMzY1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDA1ZTQyODE1N2I0ZmZiYTg2NDI2MTIyNzRhMTcyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YmNlMWEwZmQzMDQ0ZWU5YTZjMzYzNmEzNzA3ODAyNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNGJjZTFhMGZkMzA0NGVlOWE2YzM2MzZhMzcwNzgwMjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlbmJ1cmdlciBGcmVpaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwMDVlNDI4MTU3YjRmZmJhODY0MjYxMjI3NGExNzI4LnNldENvbnRlbnQoaHRtbF80YmNlMWEwZmQzMDQ0ZWU5YTZjMzYzNmEzNzA3ODAyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdmZTNlZjM3NzM4ZDRmYmM5NWVmNzlkYWYwMmVmN2IxLmJpbmRQb3B1cChwb3B1cF8yMDA1ZTQyODE1N2I0ZmZiYTg2NDI2MTIyNzRhMTcyOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI5OTM5ZTJmMGI2OTQxNTU5N2E0ZTY4YmQwNzFlMmQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAzMzMzMzMzMywxNi4zNzExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxMjg1MTA3MTA5NzRjOTE4Y2FhYTM1ZjM5ZDFkOGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3ZTU2NzNiNmM5NTQxNWFhNzhjYmI2YjIxNjkzY2FmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xN2U1NjczYjZjOTU0MTVhYTc4Y2JiNmIyMTY5M2NhZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdGVuYnVyZ2VyIEhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMTI4NTEwNzEwOTc0YzkxOGNhYWEzNWYzOWQxZDhkOC5zZXRDb250ZW50KGh0bWxfMTdlNTY3M2I2Yzk1NDE1YWE3OGNiYjZiMjE2OTNjYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTkzOWUyZjBiNjk0MTU1OTdhNGU2OGJkMDcxZTJkOC5iaW5kUG9wdXAocG9wdXBfMjEyODUxMDcxMDk3NGM5MThjYWFhMzVmMzlkMWQ4ZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYzJlMWU0NGYxYmI0OGY0OGI0MTRjMTVkYmQzMmNjNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMzMzMzMzMzMsMTYuMzcxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDEyYmZlNTkwZmU0MmRjYmE1MTY3MDhmMWJkMzE2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMDEyYjgwMTM5NDg0MDYyOTM1YzE2ZTJjMGRhMWQ5MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzAxMmI4MDEzOTQ4NDA2MjkzNWMxNmUyYzBkYTFkOTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlbmJ1cmdlciBIb2YgKDEpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwMTJiZmU1OTBmZTQyZGNiYTUxNjcwOGYxYmQzMTY2LnNldENvbnRlbnQoaHRtbF9jMDEyYjgwMTM5NDg0MDYyOTM1YzE2ZTJjMGRhMWQ5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JjMmUxZTQ0ZjFiYjQ4ZjQ4YjQxNGMxNWRiZDMyY2M2LmJpbmRQb3B1cChwb3B1cF8yMDEyYmZlNTkwZmU0MmRjYmE1MTY3MDhmMWJkMzE2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U2NmQ1NzFmOTU0MzQ0NjFiOWNmZmExY2I1YWE2ZjJiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExNjY2NjY2NywxNi4zNzI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2ZWY3NTYwNzY2NjRiMGVhYzYzOTZhMjk4NjU2NzVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwZTYwYzc3ODkxZTQyNjY4ZTJiNjU5ZGJlNTEzNTc4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMGU2MGM3Nzg5MWU0MjY2OGUyYjY1OWRiZTUxMzU3OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdGVyIEJlcmdob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjZlZjc1NjA3NjY2NGIwZWFjNjM5NmEyOTg2NTY3NWEuc2V0Q29udGVudChodG1sXzMwZTYwYzc3ODkxZTQyNjY4ZTJiNjU5ZGJlNTEzNTc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTY2ZDU3MWY5NTQzNDQ2MWI5Y2ZmYTFjYjVhYTZmMmIuYmluZFBvcHVwKHBvcHVwX2I2ZWY3NTYwNzY2NjRiMGVhYzYzOTZhMjk4NjU2NzVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTNiYzQ2NzEyOGNhNDFlYWI5OWMwZDE3Mjc0ZGZiMDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDYzODg4ODg5LDE2LjM3NDE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA1MTQ5MWYzZTRjNGM3N2I5NzBlYWIwYjljNDgyZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQzMTgwZmIzNjc1NGFhOWE5MTlhOTZkYjRiYjJhNzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VkMzE4MGZiMzY3NTRhYTlhOTE5YTk2ZGI0YmIyYTcwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXIgRG9tcHJvcHN0aG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwNTE0OTFmM2U0YzRjNzdiOTcwZWFiMGI5YzQ4MmZmLnNldENvbnRlbnQoaHRtbF9lZDMxODBmYjM2NzU0YWE5YTkxOWE5NmRiNGJiMmE3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUzYmM0NjcxMjhjYTQxZWFiOTljMGQxNzI3NGRmYjA3LmJpbmRQb3B1cChwb3B1cF85MDUxNDkxZjNlNGM0Yzc3Yjk3MGVhYjBiOWM0ODJmZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4MzY0ZjY3NjY2MjQ5ZjZhYzZlNDRhYjQxMzJiODVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEwNTU1NTU1NiwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4ZmUwOWU5NGU2ZTRiMGI5NTJjNzQzNzQzYTlhZGYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzYzNkYzFjODk4MDRlNWQ4YzUwZWI0ZjU1ZjM4ZWRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yM2MzZGMxYzg5ODA0ZTVkOGM1MGViNGY1NWYzOGVkZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBBbHRlciBGZWNodGJydW5uPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4ZmUwOWU5NGU2ZTRiMGI5NTJjNzQzNzQzYTlhZGYwLnNldENvbnRlbnQoaHRtbF8yM2MzZGMxYzg5ODA0ZTVkOGM1MGViNGY1NWYzOGVkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc4MzY0ZjY3NjY2MjQ5ZjZhYzZlNDRhYjQxMzJiODVjLmJpbmRQb3B1cChwb3B1cF9jOGZlMDllOTRlNmU0YjBiOTUyYzc0Mzc0M2E5YWRmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RlZDA5MTJiZTVlNDQ0NTQ4NTAzZWMwYjMxZmE1ZWExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1NTU1NTU1NiwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3Njk5N2EwMGFiOTRlMDU4YTAxMGJlOTBlNzgxOTliID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3OTRlZDkzMWQ4ZjQ4Mjc4Y2I5NjQzZjg3YTZhMjRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85Nzk0ZWQ5MzFkOGY0ODI3OGNiOTY0M2Y4N2E2YTI0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdGVyIFJhbWhvZiAoMSwgV2VpaGJ1cmdnYXNzZSAxOC0yMCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTc2OTk3YTAwYWI5NGUwNThhMDEwYmU5MGU3ODE5OWIuc2V0Q29udGVudChodG1sXzk3OTRlZDkzMWQ4ZjQ4Mjc4Y2I5NjQzZjg3YTZhMjRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGVkMDkxMmJlNWU0NDQ1NDg1MDNlYzBiMzFmYTVlYTEuYmluZFBvcHVwKHBvcHVwX2U3Njk5N2EwMGFiOTRlMDU4YTAxMGJlOTBlNzgxOTliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDcxYWMxNjkwMDI5NGU3YzlmNDk5MWU2N2Q5ZWFhMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDU4MzMzMzMzLDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFmNWJhMzZjZDQ5NDVjOGFmMjIwNjM0MjRmMWNjY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmMwYTA3ZDIyMWU0NGJmYzgyMTdkYjY2MGE0ZTRkMDMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JjMGEwN2QyMjFlNDRiZmM4MjE3ZGI2NjBhNGU0ZDAzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXIgU3BpdGFsa2VsbGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhZjViYTM2Y2Q0OTQ1YzhhZjIyMDYzNDI0ZjFjY2NhLnNldENvbnRlbnQoaHRtbF9iYzBhMDdkMjIxZTQ0YmZjODIxN2RiNjYwYTRlNGQwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ3MWFjMTY5MDAyOTRlN2M5ZjQ5OTFlNjdkOWVhYTI0LmJpbmRQb3B1cChwb3B1cF8wYWY1YmEzNmNkNDk0NWM4YWYyMjA2MzQyNGYxY2NjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg2N2U4MWVkYWVhNjRmNTY5MGQzNWU2NzlhYWNkY2NhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk5NzIyMjIyMiwxNi4zODY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2N2M1MGQ1OWZkYzQ5YzJhMjg5ZTEwZDk1NzE5MzgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4YmJiM2Q2NDQ3MDQ3Yjg5MjRlY2JjYTRmMGEzNzNkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xOGJiYjNkNjQ0NzA0N2I4OTI0ZWNiY2E0ZjBhMzczZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdGVyIFN0cmVpY2hlcmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNjdjNTBkNTlmZGM0OWMyYTI4OWUxMGQ5NTcxOTM4MS5zZXRDb250ZW50KGh0bWxfMThiYmIzZDY0NDcwNDdiODkyNGVjYmNhNGYwYTM3M2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NjdlODFlZGFlYTY0ZjU2OTBkMzVlNjc5YWFjZGNjYS5iaW5kUG9wdXAocG9wdXBfZDY3YzUwZDU5ZmRjNDljMmEyODllMTBkOTU3MTkzODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMTFlMjIwZDY0ODY0OTgwYThkMWQ1YTNkZDQ5ZmI4NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNjY2NjY2NjcsMTYuMzUxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYTMzZDQ3Yjc0M2M0Y2M1OTVhMDYzNjkxN2ZhZTRkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDEwZTRiZjY1YzI0MTIwYmNmYzhkMWJmODAxMWIyNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTAxMGU0YmY2NWMyNDEyMGJjZmM4ZDFiZjgwMTFiMjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlcyBBbGxnZW1laW5lcyBLcmFua2VuaGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTMzZDQ3Yjc0M2M0Y2M1OTVhMDYzNjkxN2ZhZTRkOC5zZXRDb250ZW50KGh0bWxfYTAxMGU0YmY2NWMyNDEyMGJjZmM4ZDFiZjgwMTFiMjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMTFlMjIwZDY0ODY0OTgwYThkMWQ1YTNkZDQ5ZmI4NC5iaW5kUG9wdXAocG9wdXBfMWEzM2Q0N2I3NDNjNGNjNTk1YTA2MzY5MTdmYWU0ZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NjMzZDFiNTM4NDc0NDA4YjUyMWNhMjNmOTg3NjEwNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNzUsMTYuMzU4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzMyM2VkYjVkODI0ZDUwYjk5YTZlZGNlMmFmMmU5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOGYxYWMxMDQ2YWE0YmYyODQ3ZDMxNThhZjgxM2Y3MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjhmMWFjMTA0NmFhNGJmMjg0N2QzMTU4YWY4MTNmNzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlcyBBdWtuZWNodGjDpHVzZWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjMzMjNlZGI1ZDgyNGQ1MGI5OWE2ZWRjZTJhZjJlOTkuc2V0Q29udGVudChodG1sX2I4ZjFhYzEwNDZhYTRiZjI4NDdkMzE1OGFmODEzZjcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTYzM2QxYjUzODQ3NDQwOGI1MjFjYTIzZjk4NzYxMDQuYmluZFBvcHVwKHBvcHVwX2YzMzIzZWRiNWQ4MjRkNTBiOTlhNmVkY2UyYWYyZTk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTY5YjkwNDU2ZjQ0NGQzOWEwNzg0ZTUwNjM0MDA5OTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTljNDk2YWZhZjY2NDMyOWIzYzdkNWQxY2YxMGFhZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk0YTY0ZDM5NGVlNDMwZGExYjEwYTJkY2UyMTQ3NWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA5NGE2NGQzOTRlZTQzMGRhMWIxMGEyZGNlMjE0NzVjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXMgQnVyZ3RoZWF0ZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTljNDk2YWZhZjY2NDMyOWIzYzdkNWQxY2YxMGFhZDIuc2V0Q29udGVudChodG1sXzA5NGE2NGQzOTRlZTQzMGRhMWIxMGEyZGNlMjE0NzVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTY5YjkwNDU2ZjQ0NGQzOWEwNzg0ZTUwNjM0MDA5OTguYmluZFBvcHVwKHBvcHVwXzk5YzQ5NmFmYWY2NjQzMjliM2M3ZDVkMWNmMTBhYWQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjdlOTkxZTE2MTQ2NDdiZTg1YzU1M2VkZjFhNGVkM2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTYxMTExMTExLDE2LjM2MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBlMGZmYWI3OWE5NDE4YWJjYTlkOWVmNTNjYjA5ZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDBjNmVmZjM0MmJmNDgxNThkN2M4ODE0MDFiYzhmYzkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQwYzZlZmYzNDJiZjQ4MTU4ZDdjODgxNDAxYmM4ZmM5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXMgQ2hlbWlzY2hlcyBJbnN0aXR1dDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MGUwZmZhYjc5YTk0MThhYmNhOWQ5ZWY1M2NiMDlmZC5zZXRDb250ZW50KGh0bWxfNDBjNmVmZjM0MmJmNDgxNThkN2M4ODE0MDFiYzhmYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yN2U5OTFlMTYxNDY0N2JlODVjNTUzZWRmMWE0ZWQzZC5iaW5kUG9wdXAocG9wdXBfNzBlMGZmYWI3OWE5NDE4YWJjYTlkOWVmNTNjYjA5ZmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NjM5ZWE3MjljNjc0YzIwYmVlZDI0M2FjMWQ5MjgyMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzMzMzMzMzMsMTYuMzc2Mzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTYwMzdkNmUxNTU0MjUzYjZjMmQ4YjllYTg0NDQ3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWMwMzAxNjI3N2Y0ZjY1YWU4ZjdjNjlkOGY3NjI4ZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjVjMDMwMTYyNzdmNGY2NWFlOGY3YzY5ZDhmNzYyOGUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlcyBEaWFuYWJhZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTYwMzdkNmUxNTU0MjUzYjZjMmQ4YjllYTg0NDQ3OC5zZXRDb250ZW50KGh0bWxfNjVjMDMwMTYyNzdmNGY2NWFlOGY3YzY5ZDhmNzYyOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NjM5ZWE3MjljNjc0YzIwYmVlZDI0M2FjMWQ5MjgyMy5iaW5kUG9wdXAocG9wdXBfYzE2MDM3ZDZlMTU1NDI1M2I2YzJkOGI5ZWE4NDQ0NzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYzlhYjY5NWIyZjc0ZGU3YTI1NTU1MDUxYzU1NzIxYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTU1NTU1NTYsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmZjYTY1MDM1NWY0YTU5YmExZjM1N2NkNzE1Y2JkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTk4N2EzODNiNGU0Y2Y1OTE2NGU2MjA3MmE1NmYwYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWE5ODdhMzgzYjRlNGNmNTkxNjRlNjIwNzJhNTZmMGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlcyBIYXJuaXNjaGhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JmY2E2NTAzNTVmNGE1OWJhMWYzNTdjZDcxNWNiZDguc2V0Q29udGVudChodG1sXzVhOTg3YTM4M2I0ZTRjZjU5MTY0ZTYyMDcyYTU2ZjBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWM5YWI2OTViMmY3NGRlN2EyNTU1NTA1MWM1NTcyMWMuYmluZFBvcHVwKHBvcHVwX2NiZmNhNjUwMzU1ZjRhNTliYTFmMzU3Y2Q3MTVjYmQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjNhYjVkNjA3YTU1NDliM2FiY2I5MGMxZDg4YTI3NGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTFiOTNmZTI2MzFjNDM1MDllNTg4YmZmNThjYTczM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTMzODQ1OWY1Yzg1NDA1NTkwMzE0YmU1NGIyMDQ3NjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkzMzg0NTlmNWM4NTQwNTU5MDMxNGJlNTRiMjA0NzY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXMgSW5uZXJlcyBCdXJndG9yPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExYjkzZmUyNjMxYzQzNTA5ZTU4OGJmZjU4Y2E3MzNiLnNldENvbnRlbnQoaHRtbF85MzM4NDU5ZjVjODU0MDU1OTAzMTRiZTU0YjIwNDc2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YzYWI1ZDYwN2E1NTQ5YjNhYmNiOTBjMWQ4OGEyNzRmLmJpbmRQb3B1cChwb3B1cF8xMWI5M2ZlMjYzMWM0MzUwOWU1ODhiZmY1OGNhNzMzYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA5MWJjN2RlM2NlYzQ2YmU4YjliNTU2NDdmODE0YTMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTMyNSwxNi4yNTU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmMGMyODEyMWEyMDRmYmM5NGU4OTA5ZTVhZWEyMjdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0MDQ4ZTc2MmE5YjQxYTJiMGFkNmQ4Yzc0NTQ5OTVlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNDA0OGU3NjJhOWI0MWEyYjBhZDZkOGM3NDU0OTk1ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdGVzIEluemVyc2RvcmZlciBTY2hsb3NzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmMGMyODEyMWEyMDRmYmM5NGU4OTA5ZTVhZWEyMjdkLnNldENvbnRlbnQoaHRtbF9iNDA0OGU3NjJhOWI0MWEyYjBhZDZkOGM3NDU0OTk1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5MWJjN2RlM2NlYzQ2YmU4YjliNTU2NDdmODE0YTMzLmJpbmRQb3B1cChwb3B1cF9hZjBjMjgxMjFhMjA0ZmJjOTRlODkwOWU1YWVhMjI3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQyMzcyNWFiYTEyMjRjNTNiMDY4MDgyNmY0NmQ5Yjg0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzcwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTQ5MTk1YWEwYTE0MDJjODg2YzQ5NmUyZmQ5NzE1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzA5NWViNDEwYzQ0MzJmYjljZWQyZjAzM2JiMjc2YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTMwOTVlYjQxMGM0NDMyZmI5Y2VkMmYwMzNiYjI3NmMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlcyBNdXNpa3ZlcmVpbnNnZWLDpHVkZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZTQ5MTk1YWEwYTE0MDJjODg2YzQ5NmUyZmQ5NzE1Ny5zZXRDb250ZW50KGh0bWxfZTMwOTVlYjQxMGM0NDMyZmI5Y2VkMmYwMzNiYjI3NmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MjM3MjVhYmExMjI0YzUzYjA2ODA4MjZmNDZkOWI4NC5iaW5kUG9wdXAocG9wdXBfNGU0OTE5NWFhMGExNDAyYzg4NmM0OTZlMmZkOTcxNTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YWQxOTZhNzQzMjI0MGY5ODg5ZDI4N2QzYTQxMGY0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzc3Nzc3NzgsMTYuMzc1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWE4MDZkNjM2ZTg0YzBjODQzNWE5MDljY2M4MTljZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWY5YTdlZGQ4YjA0ODJmOTE2ODFiYzk0OWZjZGNiZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjVmOWE3ZWRkOGIwNDgyZjkxNjgxYmM5NDlmY2RjYmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRlcyBQb3N0Z2Viw6R1ZGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFhODA2ZDYzNmU4NGMwYzg0MzVhOTA5Y2NjODE5Y2Yuc2V0Q29udGVudChodG1sXzY1ZjlhN2VkZDhiMDQ4MmY5MTY4MWJjOTQ5ZmNkY2JkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2FkMTk2YTc0MzIyNDBmOTg4OWQyODdkM2E0MTBmNGYuYmluZFBvcHVwKHBvcHVwXzAxYTgwNmQ2MzZlODRjMGM4NDM1YTkwOWNjYzgxOWNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTNhYThjNTNkNDA1NDljOTkwYzc1MDc5N2I1YWYyMTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTc1LDE2LjMzNzIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTg5YzQ1ODMzNmY3NDEwNDgzMTUyNGJkYzc0MzZkNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGU3ZDEyNmFiODBiNDI5OGIzYTM1NjU0ZmU3MjA1OTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRlN2QxMjZhYjgwYjQyOThiM2EzNTY1NGZlNzIwNTkyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXMgUHJlw59oYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4OWM0NTgzMzZmNzQxMDQ4MzE1MjRiZGM3NDM2ZDQ2LnNldENvbnRlbnQoaHRtbF80ZTdkMTI2YWI4MGI0Mjk4YjNhMzU2NTRmZTcyMDU5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzYWE4YzUzZDQwNTQ5Yzk5MGM3NTA3OTdiNWFmMjEzLmJpbmRQb3B1cChwb3B1cF85ODljNDU4MzM2Zjc0MTA0ODMxNTI0YmRjNzQzNmQ0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FkZWEwMGRlY2Q3ZTQ2ZjI4N2NjZmI1MTM3ZDRmMWU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExOTQ0NDQ0NCwxNi4zNzA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhYjQxMDYzOGNiYTQ2YjZiMTI3YzZhM2ZlOThjZmU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkMGI2ZDRhZWRjZTQ2ZTY5YjQ1MTU2MDU4NWNhYjFmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZDBiNmQ0YWVkY2U0NmU2OWI0NTE1NjA1ODVjYWIxZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdGVzIFJhdGhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmFiNDEwNjM4Y2JhNDZiNmIxMjdjNmEzZmU5OGNmZTYuc2V0Q29udGVudChodG1sXzZkMGI2ZDRhZWRjZTQ2ZTY5YjQ1MTU2MDU4NWNhYjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWRlYTAwZGVjZDdlNDZmMjg3Y2NmYjUxMzdkNGYxZTYuYmluZFBvcHVwKHBvcHVwXzZhYjQxMDYzOGNiYTQ2YjZiMTI3YzZhM2ZlOThjZmU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTQyNWJiOWNjZWE1NDI1ZDhkNWM0Njg0OWNjMjRiOWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDYzODg4ODg5LDE2LjM2Mjc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDJhNmM2ZWMyNTU0NGFiZDg4OTQ1NTYxMTQ3YWZmMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk0MmFkN2UyNTlkNGYwYzhlMGFmMzk3NmY2OTAyZmMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA5NDJhZDdlMjU5ZDRmMGM4ZTBhZjM5NzZmNjkwMmZjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0ZXMgw4R1w59lcmVzIEJ1cmd0b3I8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDJhNmM2ZWMyNTU0NGFiZDg4OTQ1NTYxMTQ3YWZmMTQuc2V0Q29udGVudChodG1sXzA5NDJhZDdlMjU5ZDRmMGM4ZTBhZjM5NzZmNjkwMmZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTQyNWJiOWNjZWE1NDI1ZDhkNWM0Njg0OWNjMjRiOWMuYmluZFBvcHVwKHBvcHVwXzQyYTZjNmVjMjU1NDRhYmQ4ODk0NTU2MTE0N2FmZjE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzk1YTM0MTBjNmRiNGE0Zjg1ZTkzZmNhMWQzNGMxYzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTY5NDQ0NDQ0LDE2LjM4ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjJmZWNjZjRmZDVmNGM2M2JiYmY4ZTczNzEzZDRlY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTAyNjdkY2ExOWI2NDhjOTkxMGZhNGIzMGQ1NGRhNDMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzEwMjY3ZGNhMTliNjQ4Yzk5MTBmYTRiMzBkNTRkYTQzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0aGFucGFsYWlzICgzLCBCYXJpY2hnYXNzZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJmZWNjZjRmZDVmNGM2M2JiYmY4ZTczNzEzZDRlY2Yuc2V0Q29udGVudChodG1sXzEwMjY3ZGNhMTliNjQ4Yzk5MTBmYTRiMzBkNTRkYTQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzk1YTM0MTBjNmRiNGE0Zjg1ZTkzZmNhMWQzNGMxYzUuYmluZFBvcHVwKHBvcHVwXzIyZmVjY2Y0ZmQ1ZjRjNjNiYmJmOGU3MzcxM2Q0ZWNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmFiMjA1M2E5YjBmNDBiNzg5ZTcwN2JlYTNkYjAzMTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTA1NTU1NTU2LDE2LjM2ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjY5YjczMDU0Mjk5NGEzYWJjZDg3NDIxOGY1MDEzYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTVjNGUzNDg2ZDM5NDA1MmE3ZjU2ODMyNWI4MjA0MTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE1YzRlMzQ4NmQzOTQwNTJhN2Y1NjgzMjViODIwNDE5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0aGFucGFsYWlzICg0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNjliNzMwNTQyOTk0YTNhYmNkODc0MjE4ZjUwMTNjOC5zZXRDb250ZW50KGh0bWxfMTVjNGUzNDg2ZDM5NDA1MmE3ZjU2ODMyNWI4MjA0MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYWIyMDUzYTliMGY0MGI3ODllNzA3YmVhM2RiMDMxNC5iaW5kUG9wdXAocG9wdXBfMjY5YjczMDU0Mjk5NGEzYWJjZDg3NDIxOGY1MDEzYzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YmRkZjg2NmRmYzY0YzA0YjEyYjMyNjliN2Y5M2NlZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNTU1NTU1NTYsMTYuMzYxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MWM2MDUyOWNiMzM0OTJkODdlYjFmNWY3NTYxZTQ1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWY2NDdhMjY2OTI0ODFkOTZhM2JhNWJlMjY0NDZkMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjlmNjQ3YTI2NjkyNDgxZDk2YTNiYTViZTI2NDQ2ZDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRoYW5wYWxhaXMgKDksIEFyZWFsIEZyYW56LUpvc2Vmcy1CYWhuaG9mKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MWM2MDUyOWNiMzM0OTJkODdlYjFmNWY3NTYxZTQ1Yy5zZXRDb250ZW50KGh0bWxfMjlmNjQ3YTI2NjkyNDgxZDk2YTNiYTViZTI2NDQ2ZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YmRkZjg2NmRmYzY0YzA0YjEyYjMyNjliN2Y5M2NlZi5iaW5kUG9wdXAocG9wdXBfNzFjNjA1MjljYjMzNDkyZDg3ZWIxZjVmNzU2MWU0NWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NTEyNTg1ZjhkMDE0M2FhYTA4NDc3MjYwOWIwMThhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNjM4ODg4ODksMTYuMzYyNzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjRjNTBiNzA0ZjE0M2E4YWMxMTc5M2MyYTIwZDk4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NDY1MGFmMjA1YTk0NmIzODAxM2Y0N2E4MzEyNmQxYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzQ2NTBhZjIwNWE5NDZiMzgwMTNmNDdhODMxMjZkMWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRoYW5zY2hlcyBCYWQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY0YzUwYjcwNGYxNDNhOGFjMTE3OTNjMmEyMGQ5ODYuc2V0Q29udGVudChodG1sXzc0NjUwYWYyMDVhOTQ2YjM4MDEzZjQ3YTgzMTI2ZDFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDUxMjU4NWY4ZDAxNDNhYWEwODQ3NzI2MDliMDE4YTUuYmluZFBvcHVwKHBvcHVwX2VmNGM1MGI3MDRmMTQzYThhYzExNzkzYzJhMjBkOTg2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjZiMzgwN2JiY2QzNGJjZGE1OWNmNjAwMTU0MWY2MjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODYzODg4ODg5LDE2LjMyOTcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWZkMzQ0Yjg0NmRiNGZmZGExZmExYzgyMzc3OGI2ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTRmYmRhMDM4ODUzNGQ2N2EwMzdkMWZiYmJiMTQ4YjggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2U0ZmJkYTAzODg1MzRkNjdhMDM3ZDFmYmJiYjE0OGI4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFsdGthdGhvbGlzY2hlIEtpcmNoZSAoMTUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmZDM0NGI4NDZkYjRmZmRhMWZhMWM4MjM3NzhiNmQzLnNldENvbnRlbnQoaHRtbF9lNGZiZGEwMzg4NTM0ZDY3YTAzN2QxZmJiYmIxNDhiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I2YjM4MDdiYmNkMzRiY2RhNTljZjYwMDE1NDFmNjIwLmJpbmRQb3B1cChwb3B1cF8xZmQzNDRiODQ2ZGI0ZmZkYTFmYTFjODIzNzc4YjZkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFjNTgxZjYwNmVkZDQ4MjNiYmUyYWQxMTI1M2VjZjllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zNDE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1OTQ0YmI1NjMxZjRjOWU4YWNmOTZlNTUzYTM2N2IxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0ZDk3MGNjNzZjMTQ5MjY4NGZkNjZiY2ExYjljMjVkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNGQ5NzBjYzc2YzE0OTI2ODRmZDY2YmNhMWI5YzI1ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbHRsZXJjaGVuZmVsZGVyIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTk0NGJiNTYzMWY0YzllOGFjZjk2ZTU1M2EzNjdiMS5zZXRDb250ZW50KGh0bWxfMTRkOTcwY2M3NmMxNDkyNjg0ZmQ2NmJjYTFiOWMyNWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYzU4MWY2MDZlZGQ0ODIzYmJlMmFkMTEyNTNlY2Y5ZS5iaW5kUG9wdXAocG9wdXBfODU5NDRiYjU2MzFmNGM5ZThhY2Y5NmU1NTNhMzY3YjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84N2QxMjNmNGU1MWI0MjIwYjJhMjE2NDJkYWE2NWMxNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzcwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZWMyMjY2NGQ3YTg0YjZlOGU4OGZiNjhmZWI0YzBhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTY5ZDQ4ZjM5ZmM0MDY1YmI3ZDIzYWI5NDgwZjc2MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTU2OWQ0OGYzOWZjNDA2NWJiN2QyM2FiOTQ4MGY3NjMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQWx0bWFubiAmYW1wOyBLw7xobmU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWVjMjI2NjRkN2E4NGI2ZThlODhmYjY4ZmViNGMwYTkuc2V0Q29udGVudChodG1sX2U1NjlkNDhmMzlmYzQwNjViYjdkMjNhYjk0ODBmNzYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODdkMTIzZjRlNTFiNDIyMGIyYTIxNjQyZGFhNjVjMTYuYmluZFBvcHVwKHBvcHVwX2FlYzIyNjY0ZDdhODRiNmU4ZTg4ZmI2OGZlYjRjMGE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDVkZDQ4ZGM1OWY1NGQyNDhmYWE0NTlkZjYzZjE5NTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjUsMTYuMzI1ODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YmI2NDk2OTU1NzY0NTkzOWVhMWYxYjU0NDQxMzkyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjU4NWQ4ZTcyYjg0YWYzYTM3MTI3YzA4MDZhNTcxZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDY1ODVkOGU3MmI4NGFmM2EzNzEyN2MwODA2YTU3MWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQWx0bWFubnNkb3JmZXIgRnJpZWRob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWJiNjQ5Njk1NTc2NDU5MzllYTFmMWI1NDQ0MTM5MmQuc2V0Q29udGVudChodG1sXzA2NTg1ZDhlNzJiODRhZjNhMzcxMjdjMDgwNmE1NzFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDVkZDQ4ZGM1OWY1NGQyNDhmYWE0NTlkZjYzZjE5NTkuYmluZFBvcHVwKHBvcHVwXzViYjY0OTY5NTU3NjQ1OTM5ZWExZjFiNTQ0NDEzOTJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTE2Y2E3OWUzODFmNDBlMjlkMDAzMmYwMTQ4Y2U5MGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjMwNTU1NTU2LDE2LjMyMTM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQyOTZhNWU5NjUxNDBjOGJkNmE3YTQ0MDQxNmMzMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzM3MjVlYTliOGNhNDQwYWJlNzIzZTJmMjhhMmU0NGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMzNzI1ZWE5YjhjYTQ0MGFiZTcyM2UyZjI4YTJlNDRhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFsdG1hbm5zZG9yZmVyIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDI5NmE1ZTk2NTE0MGM4YmQ2YTdhNDQwNDE2YzMzNS5zZXRDb250ZW50KGh0bWxfMzM3MjVlYTliOGNhNDQwYWJlNzIzZTJmMjhhMmU0NGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MTZjYTc5ZTM4MWY0MGUyOWQwMDMyZjAxNDhjZTkwZC5iaW5kUG9wdXAocG9wdXBfMjQyOTZhNWU5NjUxNDBjOGJkNmE3YTQ0MDQxNmMzMzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMzM1ZWEzYmRiZmM0OTkxYWJmNDFjMDdiOTgwMzU4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2NSwxNi4zMjMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0Njk1YTk5Yzk0ODQwNjg5NGU5NWM4NmYwNGVmMjc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3MDdjNDBmYTE1YTQwMDQ5YzBjNmMyMmY5NmYxNWRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NzA3YzQwZmExNWE0MDA0OWMwYzZjMjJmOTZmMTVkYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbHRtYW5uc2RvcmZlciBQZmFycmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDY5NWE5OWM5NDg0MDY4OTRlOTVjODZmMDRlZjI3OC5zZXRDb250ZW50KGh0bWxfODcwN2M0MGZhMTVhNDAwNDljMGM2YzIyZjk2ZjE1ZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMzM1ZWEzYmRiZmM0OTkxYWJmNDFjMDdiOTgwMzU4MS5iaW5kUG9wdXAocG9wdXBfZDQ2OTVhOTljOTQ4NDA2ODk0ZTk1Yzg2ZjA0ZWYyNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZThhMjczN2ZiOGI0MTljYWRmYjlhNDhkNDg1YTU5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2MzMzMzMzMzMsMTYuMzIyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNmM5Y2M0MjQ5NTU0N2NiODEzMzg3MTEyYTM0OGIyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYWQ0MmEyODEyYTk0MDg5OTgyZmViZDE4NTlmYmQyOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWFkNDJhMjgxMmE5NDA4OTk4MmZlYmQxODU5ZmJkMjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbHRtYW5uc2RvcmZlciBTY2hsb3NzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2YzljYzQyNDk1NTQ3Y2I4MTMzODcxMTJhMzQ4YjJjLnNldENvbnRlbnQoaHRtbF9lYWQ0MmEyODEyYTk0MDg5OTgyZmViZDE4NTlmYmQyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBlOGEyNzM3ZmI4YjQxOWNhZGZiOWE0OGQ0ODVhNTkxLmJpbmRQb3B1cChwb3B1cF8wNmM5Y2M0MjQ5NTU0N2NiODEzMzg3MTEyYTM0OGIyYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRiYzg5NjhmYWFlMzRkYWM5NThlOGIyZTc4MDgxYTkzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTYzMDU1NTU1NiwxNi4zMjE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkMTE4NmMyNzBhMzRlOWI5NWVkMzRlZmU2YjEzMjdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkM2RmNTQxYzRhNTRmYTc4NDQ2YThjZTY4NGEwNDBiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85ZDNkZjU0MWM0YTU0ZmE3ODQ0NmE4Y2U2ODRhMDQwYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdG1hbm5zZG9yZmVyIFNjaHVsZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDExODZjMjcwYTM0ZTliOTVlZDM0ZWZlNmIxMzI3YS5zZXRDb250ZW50KGh0bWxfOWQzZGY1NDFjNGE1NGZhNzg0NDZhOGNlNjg0YTA0MGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YmM4OTY4ZmFhZTM0ZGFjOTU4ZThiMmU3ODA4MWE5My5iaW5kUG9wdXAocG9wdXBfNmQxMTg2YzI3MGEzNGU5Yjk1ZWQzNGVmZTZiMTMyN2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NWY0MGEwYTFkMjQ0ODkxOTgzNmQ5OGQ0OGJjNmM1YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2NSwxNi4zMjMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjMWY5NjhkMWQwZDQwYjQ4NWMwOTdmNzQ0NjI4ODg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhMjAyMzVlY2E5OTQzNGJiMDBkM2Q4ZmZmN2ZiOTY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yYTIwMjM1ZWNhOTk0MzRiYjAwZDNkOGZmZjdmYjk2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFsdG1hbm5zZG9yZmVyIFdpcnRzY2hhZnRzaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjMWY5NjhkMWQwZDQwYjQ4NWMwOTdmNzQ0NjI4ODg0LnNldENvbnRlbnQoaHRtbF8yYTIwMjM1ZWNhOTk0MzRiYjAwZDNkOGZmZjdmYjk2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU1ZjQwYTBhMWQyNDQ4OTE5ODM2ZDk4ZDQ4YmM2YzVhLmJpbmRQb3B1cChwb3B1cF9hYzFmOTY4ZDFkMGQ0MGI0ODVjMDk3Zjc0NDYyODg4NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk1ODY0YzExNjY5YjQ3NDdiNTJhNmZlNTkzYjU0NjZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzMzMzMzMzMywxNi4zMDgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzZThkOWRhYWY4YTRiMTk5NTY2MzAxZThiMzAxZmQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzNmYzNjg3MWVhMDQ4YTU5MDk4NWRhZjgzNTQ4ZmRlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMzZmMzY4NzFlYTA0OGE1OTA5ODVkYWY4MzU0OGZkZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbHRvdHRha3JpbmdlciBLaXJjaGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNlOGQ5ZGFhZjhhNGIxOTk1NjYzMDFlOGIzMDFmZDAuc2V0Q29udGVudChodG1sX2MzNmYzNjg3MWVhMDQ4YTU5MDk4NWRhZjgzNTQ4ZmRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTU4NjRjMTE2NjliNDc0N2I1MmE2ZmU1OTNiNTQ2NmUuYmluZFBvcHVwKHBvcHVwX2MzZThkOWRhYWY4YTRiMTk5NTY2MzAxZThiMzAxZmQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDU1ZDMxZTBkNTJhNDVkYWFkZTg0NzE0YzdlZWQ3ZDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDYzODg4ODg5LDE2LjM1MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg1NTVlNzNmOTIyNGMxZTk3NTcxZjEzNDRiNThkY2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODA4NTQzNzBjZmQ5NDFiMGFlOGU4OWFkMDMxMDEwOTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgwODU0MzcwY2ZkOTQxYjBhZThlODlhZDAzMTAxMDkwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQWx0c2NoYWZmZXJoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4NTU1ZTczZjkyMjRjMWU5NzU3MWYxMzQ0YjU4ZGNjLnNldENvbnRlbnQoaHRtbF84MDg1NDM3MGNmZDk0MWIwYWU4ZTg5YWQwMzEwMTA5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q1NWQzMWUwZDUyYTQ1ZGFhZGU4NDcxNGM3ZWVkN2Q1LmJpbmRQb3B1cChwb3B1cF84ODU1NWU3M2Y5MjI0YzFlOTc1NzFmMTM0NGI1OGRjYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcyZWRlYmVmMTc2YTRlMjFhNmM2M2Y4NDUxODZhZWFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQzMDU1NTU1NiwxNi4zMDU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwZDQ2ZjU5ZTgyNDQ5OWNiOWZhOTcwMDNmMTk0NmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmYzgxODcxM2ExODQwNTk4NGY3YWQ0ZDAyYTc2ZjNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZmM4MTg3MTNhMTg0MDU5ODRmN2FkNGQwMmE3NmYzYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQWx4aW5nZXJzdGVpbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MGQ0NmY1OWU4MjQ0OTljYjlmYTk3MDAzZjE5NDZhMy5zZXRDb250ZW50KGh0bWxfZGZjODE4NzEzYTE4NDA1OTg0ZjdhZDRkMDJhNzZmM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MmVkZWJlZjE3NmE0ZTIxYTZjNjNmODQ1MTg2YWVhYy5iaW5kUG9wdXAocG9wdXBfODBkNDZmNTllODI0NDk5Y2I5ZmE5NzAwM2YxOTQ2YTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZjIyYWMzNzUwZWQ0NmIwYWNlYmFkNDg3YjU2YjE1MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzY5NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZmEyZDZhMzEzMmE0NjY2YWQzNWE0ZmZmMzA4MWZhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MGJiNjM1N2UzOGE0ODY0ODBlMDliOTc1ODMyZjg3OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDBiYjYzNTdlMzhhNDg2NDgwZTA5Yjk3NTgzMmY4NzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbSBHZXN0YWRlIDE8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGZhMmQ2YTMxMzJhNDY2NmFkMzVhNGZmZjMwODFmYTkuc2V0Q29udGVudChodG1sXzQwYmI2MzU3ZTM4YTQ4NjQ4MGUwOWI5NzU4MzJmODc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGYyMmFjMzc1MGVkNDZiMGFjZWJhZDQ4N2I1NmIxNTEuYmluZFBvcHVwKHBvcHVwX2RmYTJkNmEzMTMyYTQ2NjZhZDM1YTRmZmYzMDgxZmE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjkwMWFiNDU4ZDFhNDVjNjkyOTM4MmJkZjAzOTBmZTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjM2OTQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNkNTdlNjU2YzYyNDMyYmFmZDYwOTA5ODBjZGM0YWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWE2NDBlNzA3YTUxNGNlMWFkNzFkNzJhM2Q1ZDIxNTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFhNjQwZTcwN2E1MTRjZTFhZDcxZDcyYTNkNWQyMTU2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW0gR2VzdGFkZSAyLTQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjNkNTdlNjU2YzYyNDMyYmFmZDYwOTA5ODBjZGM0YWYuc2V0Q29udGVudChodG1sXzFhNjQwZTcwN2E1MTRjZTFhZDcxZDcyYTNkNWQyMTU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjkwMWFiNDU4ZDFhNDVjNjkyOTM4MmJkZjAzOTBmZTguYmluZFBvcHVwKHBvcHVwXzYzZDU3ZTY1NmM2MjQzMmJhZmQ2MDkwOTgwY2RjNGFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDVkOTYwM2RkZWZiNGFjMGJhZDc1NmIyMDA3MzFlNDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmFmOWQ5MDQ4MjI1NGMxNTg5ZjllNzk4Mjc3YTkxZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTU0YjUwNTA5YWQ0NGM4NmJkMmE4ZWY5MDViOWU5NDIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzk1NGI1MDUwOWFkNDRjODZiZDJhOGVmOTA1YjllOTQyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW0gR2VzdGFkZSAzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhZjlkOTA0ODIyNTRjMTU4OWY5ZTc5ODI3N2E5MWUxLnNldENvbnRlbnQoaHRtbF85NTRiNTA1MDlhZDQ0Yzg2YmQyYThlZjkwNWI5ZTk0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA1ZDk2MDNkZGVmYjRhYzBiYWQ3NTZiMjAwNzMxZTQ5LmJpbmRQb3B1cChwb3B1cF8yYWY5ZDkwNDgyMjU0YzE1ODlmOWU3OTgyNzdhOTFlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjYzkzMGNlYmM3NTQ3ZDM5YTg0ZjgxNDVmZjY3ODg3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5MDg2ODAzNzc3ZjRiYmNhZjk4ZGJiZjUwYzk0NGZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlMzgwZjcxYmM2NTQ1Mzk5MWNmMTJjZmJjZjVmNmNkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZTM4MGY3MWJjNjU0NTM5OTFjZjEyY2ZiY2Y1ZjZjZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtIEdlc3RhZGUgNTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOTA4NjgwMzc3N2Y0YmJjYWY5OGRiYmY1MGM5NDRmYy5zZXRDb250ZW50KGh0bWxfZGUzODBmNzFiYzY1NDUzOTkxY2YxMmNmYmNmNWY2Y2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80Y2M5MzBjZWJjNzU0N2QzOWE4NGY4MTQ1ZmY2Nzg4Ny5iaW5kUG9wdXAocG9wdXBfMjkwODY4MDM3NzdmNGJiY2FmOThkYmJmNTBjOTQ0ZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOTJjZTBiNGJkMmU0ODgxOGRkZjRiOThlYjMwNTY0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDI3Nzc3NzgsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmI2ZjcyN2QxNjM0Y2NkOWI1ZjM3NGMxZjQ4YmZkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2I0YjU4M2U0OGE0MDI1OTE1NTdlYWUwZTU4NDVlMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjNiNGI1ODNlNDhhNDAyNTkxNTU3ZWFlMGU1ODQ1ZTIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbSBIb2YgMjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMmI2ZjcyN2QxNjM0Y2NkOWI1ZjM3NGMxZjQ4YmZkMy5zZXRDb250ZW50KGh0bWxfZjNiNGI1ODNlNDhhNDAyNTkxNTU3ZWFlMGU1ODQ1ZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTJjZTBiNGJkMmU0ODgxOGRkZjRiOThlYjMwNTY0NC5iaW5kUG9wdXAocG9wdXBfZTJiNmY3MjdkMTYzNGNjZDliNWYzNzRjMWY0OGJmZDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81OGFiNDA5MTVhYzA0NTdlYTg2Yzg4ZDEyYTNmMTI4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDI3Nzc3NzgsMTYuMzY2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2FiM2EwNDI4ZGQ0ODdkYjUyMWFmOTQ2ZDIyZTc2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YjkwNzRmNTYyZWY0YWJlYmUzZjY3N2QxMjgyOGUxMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGI5MDc0ZjU2MmVmNGFiZWJlM2Y2NzdkMTI4MjhlMTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbSBIb2YgMy00PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzYWIzYTA0MjhkZDQ4N2RiNTIxYWY5NDZkMjJlNzY1LnNldENvbnRlbnQoaHRtbF84YjkwNzRmNTYyZWY0YWJlYmUzZjY3N2QxMjgyOGUxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU4YWI0MDkxNWFjMDQ1N2VhODZjODhkMTJhM2YxMjg5LmJpbmRQb3B1cChwb3B1cF81M2FiM2EwNDI4ZGQ0ODdkYjUyMWFmOTQ2ZDIyZTc2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjNjgwZTAxNDM1NjQxYTI4MzdhYjAwNDYyYTcxNmJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTU4MDU1NTU1NiwxNi4zOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTAwNWNiYTZkMjc0Nzc3OTY2YTg1NDliNzA1NzBjZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDQzNTQyMTRjYjc0YmM4ODM3ZDZjN2I3YzZkMWNhNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDQ0MzU0MjE0Y2I3NGJjODgzN2Q2YzdiN2M2ZDFjYTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbSBMYWFlciBCZXJnPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5MDA1Y2JhNmQyNzQ3Nzc5NjZhODU0OWI3MDU3MGNlLnNldENvbnRlbnQoaHRtbF80NDQzNTQyMTRjYjc0YmM4ODM3ZDZjN2I3YzZkMWNhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjNjgwZTAxNDM1NjQxYTI4MzdhYjAwNDYyYTcxNmJmLmJpbmRQb3B1cChwb3B1cF8zOTAwNWNiYTZkMjc0Nzc3OTY2YTg1NDliNzA1NzBjZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2ZDQ4NDVlYTZhOTQ3MjFhNGJkZjNkYTMzYTcyODc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjM2Mzg4ODg4OSwxNi4zMjg2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3YWNmYWUzNDk3NDQzYTQ4MzRmNWY0ZGMxNWM4YmQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlYjBjN2FjNTc2ZTRiNmY4NWUwNGIyNWVhNzQyMjQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ZWIwYzdhYzU3NmU0YjZmODVlMDRiMjVlYTc0MjI0NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtIFNhbmRiZXJnPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3YWNmYWUzNDk3NDQzYTQ4MzRmNWY0ZGMxNWM4YmQxLnNldENvbnRlbnQoaHRtbF80ZWIwYzdhYzU3NmU0YjZmODVlMDRiMjVlYTc0MjI0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2ZDQ4NDVlYTZhOTQ3MjFhNGJkZjNkYTMzYTcyODc4LmJpbmRQb3B1cChwb3B1cF82N2FjZmFlMzQ5NzQ0M2E0ODM0ZjVmNGRjMTVjOGJkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RhNDBiN2E1YTFjYjRiMmI4NjlhOWUxZjE3MGIxZDAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTU5NzIyMjIyMiwxNi4zMjg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmZDViNTM2YTMyMTQ0NTZiYzYxYjM1M2ZmZTA1NTQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjZjk1NjgxOWRiODQ3ZDliNGM4YTc5NjA5ODU5NTg2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80Y2Y5NTY4MTlkYjg0N2Q5YjRjOGE3OTYwOTg1OTU4NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtIFNjaMO2cGZ3ZXJrICgxMiwgQW0gU2Now7ZwZndlcmspPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmZDViNTM2YTMyMTQ0NTZiYzYxYjM1M2ZmZTA1NTQzLnNldENvbnRlbnQoaHRtbF80Y2Y5NTY4MTlkYjg0N2Q5YjRjOGE3OTYwOTg1OTU4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RhNDBiN2E1YTFjYjRiMmI4NjlhOWUxZjE3MGIxZDAyLmJpbmRQb3B1cChwb3B1cF9iZmQ1YjUzNmEzMjE0NDU2YmM2MWIzNTNmZmUwNTU0Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y1OTNjODQzYjA0ZTQxMmI4MGY5MjJjOGViYTAyM2ExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTU4ODg4ODg4OSwxNi4zMjg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MDljZjBkZmExNjRhNWM4OGY3YmFiMTI3ZDk3M2JiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViMjZiOGFhNGNiYjQxMTViOGYzYjU1ZjM4NTFlOTJhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lYjI2YjhhYTRjYmI0MTE1YjhmM2I1NWYzODUxZTkyYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbSBTY2jDtnBmd2VyayAoMTIsIExpY2h0ZW5zdGVybmdhc3NlKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODA5Y2YwZGZhMTY0YTVjODhmN2JhYjEyN2Q5NzNiYi5zZXRDb250ZW50KGh0bWxfZWIyNmI4YWE0Y2JiNDExNWI4ZjNiNTVmMzg1MWU5MmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNTkzYzg0M2IwNGU0MTJiODBmOTIyYzhlYmEwMjNhMS5iaW5kUG9wdXAocG9wdXBfMjgwOWNmMGRmYTE2NGE1Yzg4ZjdiYWIxMjdkOTczYmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mODI2OWUyMDczNjg0NmI2ODc4NGY5MjUyODc5ZWQ5YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODMzMzMzMzMsMTYuMzk4NjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODliYWMzMTM5YjI0ZGNhYjFjZjUyZGMyNDgzMmI3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWEyZDM2ZTIwNzg0ODljYmZiMzNiMzYzMDViYzRkNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmFhMmQzNmUyMDc4NDg5Y2JmYjMzYjM2MzA1YmM0ZDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQW0gU2Now7x0dGVsICgyLCBSdXN0ZW5zY2hhY2hlciBBbGxlZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg5YmFjMzEzOWIyNGRjYWIxY2Y1MmRjMjQ4MzJiNzAuc2V0Q29udGVudChodG1sXzZhYTJkMzZlMjA3ODQ4OWNiZmIzM2IzNjMwNWJjNGQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjgyNjllMjA3MzY4NDZiNjg3ODRmOTI1Mjg3OWVkOWEuYmluZFBvcHVwKHBvcHVwXzI4OWJhYzMxMzliMjRkY2FiMWNmNTJkYzI0ODMyYjcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmM0OTQ4NTkwZjM3NGYxMzhkNjcxMmRhNjVjNzcyODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDU1NTU1NTU2LDE2LjI3MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzNmMTM2MDM3YTgzNDk5MDgxMmM4ODZiYjA0NTcxNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJkMGVmZGYzNjVhNGUzMGJmYmEwNWU5NzdhZjdhYWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMyZDBlZmRmMzY1YTRlMzBiZmJhMDVlOTc3YWY3YWFhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW0gU3BpZWdlbGdydW5kPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczZjEzNjAzN2E4MzQ5OTA4MTJjODg2YmIwNDU3MTQwLnNldENvbnRlbnQoaHRtbF8zMmQwZWZkZjM2NWE0ZTMwYmZiYTA1ZTk3N2FmN2FhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JjNDk0ODU5MGYzNzRmMTM4ZDY3MTJkYTY1Yzc3MjgzLmJpbmRQb3B1cChwb3B1cF83M2YxMzYwMzdhODM0OTkwODEyYzg4NmJiMDQ1NzE0MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUyODZlNTY1OTBlMjQwZDA4NWY4NjRkNzYzNDBhOWU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTUzNjExMTExMSwxNi4yODMwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3ODliOWI5ZjRjOTQwOWRhNTJlZTNmYmIwYTQ4YzVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0ZTUwMmI5M2Q4YjQxYjJhMTdmMmIxNzE4ZjIxZmJkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NGU1MDJiOTNkOGI0MWIyYTE3ZjJiMTcxOGYyMWZiZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbSBTcGllZ2VsbiAoMjMsIE1leXJpbmtnYXNzZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc4OWI5YjlmNGM5NDA5ZGE1MmVlM2ZiYjBhNDhjNWEuc2V0Q29udGVudChodG1sXzg0ZTUwMmI5M2Q4YjQxYjJhMTdmMmIxNzE4ZjIxZmJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTI4NmU1NjU5MGUyNDBkMDg1Zjg2NGQ3NjM0MGE5ZTguYmluZFBvcHVwKHBvcHVwXzI3ODliOWI5ZjRjOTQwOWRhNTJlZTNmYmIwYTQ4YzVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGIwOWIzYzI5YjRmNDk0ZWJlY2E5OTAzNDQ3MmNmODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDU1NTU1NTU2LDE2LjI3MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2VkODNkYjM0MzQ2NDI2ZGE4M2JmN2M4MTU0M2U2N2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWNkYWM1ZjhlYmNlNGViODljNDhiYTE1MjQ5ZGRhYjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzljZGFjNWY4ZWJjZTRlYjg5YzQ4YmExNTI0OWRkYWIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW0gU3RlaW5ob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VkODNkYjM0MzQ2NDI2ZGE4M2JmN2M4MTU0M2U2N2Quc2V0Q29udGVudChodG1sXzljZGFjNWY4ZWJjZTRlYjg5YzQ4YmExNTI0OWRkYWIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGIwOWIzYzI5YjRmNDk0ZWJlY2E5OTAzNDQ3MmNmODMuYmluZFBvcHVwKHBvcHVwX2NlZDgzZGIzNDM0NjQyNmRhODNiZjdjODE1NDNlNjdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWEwOGNjODFmZTkzNGU1ZDk0MjI4OGMwMWIzMTQ2NzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjQ3MjIyMjIyLDE2LjM4NzIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDdiMWExYjExMjZiNGI0OGEyMWM3ZTU5NTM1ZGNiZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQyOWNjZThhOTE1NDRhMjhkMzc0NzUyOTU5ZGUxYTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc0MjljY2U4YTkxNTQ0YTI4ZDM3NDc1Mjk1OWRlMWEwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFtIFRhYm9yICgyLCBBbSBUYWJvciA3KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kN2IxYTFiMTEyNmI0YjQ4YTIxYzdlNTk1MzVkY2JlMC5zZXRDb250ZW50KGh0bWxfNzQyOWNjZThhOTE1NDRhMjhkMzc0NzUyOTU5ZGUxYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lYTA4Y2M4MWZlOTM0ZTVkOTQyMjg4YzAxYjMxNDY3Mi5iaW5kUG9wdXAocG9wdXBfZDdiMWExYjExMjZiNGI0OGEyMWM3ZTU5NTM1ZGNiZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNGYwYWMwNGE0NmY0NTI2YTZmMDYyYjNkMzM1MDhjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzc3Nzc3NzgsMTYuMzc2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWZiMTJjOWFmMjE0M2UzYjNmNzdhNmJhY2RmNzBjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNGU4OGE5YTkxZWY0MGI5ODMzOTkyMDg4ZWY1NGNmYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzRlODhhOWE5MWVmNDBiOTgzMzk5MjA4OGVmNTRjZmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbSBzY2hhcmZlbiBFY2s8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2VmYjEyYzlhZjIxNDNlM2IzZjc3YTZiYWNkZjcwY2Euc2V0Q29udGVudChodG1sXzM0ZTg4YTlhOTFlZjQwYjk4MzM5OTIwODhlZjU0Y2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzRmMGFjMDRhNDZmNDUyNmE2ZjA2MmIzZDMzNTA4Y2UuYmluZFBvcHVwKHBvcHVwXzdlZmIxMmM5YWYyMTQzZTNiM2Y3N2E2YmFjZGY3MGNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjdjNjA1Y2M5NGJlNDRhM2JjMDdhMzc1NzBiYjE3OTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDU1NTU1NTU2LDE2LjI3MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI0Njk1YWJmNGRkNDJjYWFiZmQ2ZWI0NTQ4MzdiZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y4OTBmMTJjNWZjNGEwYThiYTU4OWQ3OWRkNDYxMDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmODkwZjEyYzVmYzRhMGE4YmE1ODlkNzlkZDQ2MTA5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW0tU3RlaW5ob2YtVGhlYXRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjQ2OTVhYmY0ZGQ0MmNhYWJmZDZlYjQ1NDgzN2JmYy5zZXRDb250ZW50KGh0bWxfY2Y4OTBmMTJjNWZjNGEwYThiYTU4OWQ3OWRkNDYxMDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yN2M2MDVjYzk0YmU0NGEzYmMwN2EzNzU3MGJiMTc5NC5iaW5kUG9wdXAocG9wdXBfYjI0Njk1YWJmNGRkNDJjYWFiZmQ2ZWI0NTQ4MzdiZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMjEwZDk4MDg4YTQ0YWU4YjVmOGYyNWM5NzNjMGY3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MzA1NTU1NTYsMTYuMzc2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NTc4YTkzNjRlMjA0OTUzOTJmOGJmNTc1NDA3MGM1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDVkODAzMzIyYWU0MTRkOTU2ZDlhNTk4NmVjYzYwMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDQ1ZDgwMzMyMmFlNDE0ZDk1NmQ5YTU5ODZlY2M2MDIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQW1hbGllbmJhZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTc4YTkzNjRlMjA0OTUzOTJmOGJmNTc1NDA3MGM1YS5zZXRDb250ZW50KGh0bWxfNDQ1ZDgwMzMyMmFlNDE0ZDk1NmQ5YTU5ODZlY2M2MDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMjEwZDk4MDg4YTQ0YWU4YjVmOGYyNWM5NzNjMGY3OC5iaW5kUG9wdXAocG9wdXBfNTU3OGE5MzY0ZTIwNDk1MzkyZjhiZjU3NTQwNzBjNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MWMyYThkNzI4ZWQ0MTU1OTlhZDc5MWUyM2ViMjJiYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzYzNjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NmU4M2VhZDY0ZDA0MDA0OWJjZTA5MmMxN2Y5NDg1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZGU3NWMxMDBjMzQ0ZDBiOTc0OWVhMGFkMDgzNzU0ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWRlNzVjMTAwYzM0NGQwYjk3NDllYTBhZDA4Mzc1NGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbWFsaWVuYnVyZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NmU4M2VhZDY0ZDA0MDA0OWJjZTA5MmMxN2Y5NDg1MC5zZXRDb250ZW50KGh0bWxfOWRlNzVjMTAwYzM0NGQwYjk3NDllYTBhZDA4Mzc1NGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MWMyYThkNzI4ZWQ0MTU1OTlhZDc5MWUyM2ViMjJiYi5iaW5kUG9wdXAocG9wdXBfNDZlODNlYWQ2NGQwNDAwNDliY2UwOTJjMTdmOTQ4NTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOTQzMDMzNzU5N2Q0OWJlOTRmZWFkMmJiNDE3MjFiZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2OTQ0NDQ0NDQsMTYuMzQ1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGZiZDQyNzJjOTY0OWQwYmRiN2RiNWNjYTUyYTE3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzFhZTc4YzMwM2U0NTUwYjE4YTE5ZGVhODA4M2M2YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2MxYWU3OGMzMDNlNDU1MGIxOGExOWRlYTgwODNjNmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbWJ1bGF0b3JpdW0gU8O8ZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOGZiZDQyNzJjOTY0OWQwYmRiN2RiNWNjYTUyYTE3Yi5zZXRDb250ZW50KGh0bWxfN2MxYWU3OGMzMDNlNDU1MGIxOGExOWRlYTgwODNjNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTQzMDMzNzU5N2Q0OWJlOTRmZWFkMmJiNDE3MjFiZi5iaW5kUG9wdXAocG9wdXBfMThmYmQ0MjcyYzk2NDlkMGJkYjdkYjVjY2E1MmExN2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZmYwMjY2ZDc5ZjE0ODg1OGU1ODBlM2E2YzRkYTRlYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5ODYxMTExMTEsMTYuMzc4NjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNjI3ZDQxODJkODk0NzEzOGJjMmI5YTYwMjBkNjg3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzQ4YjQyNGNjOWQ0MjdmYTcyYzAxYmM2ODJjN2YzZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzM0OGI0MjRjYzlkNDI3ZmE3MmMwMWJjNjgyYzdmM2UiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbWJ1bGF0b3JpdW0gZGVyIFdpZW5lciBHZWJpZXRza3Jhbmtlbmthc3NlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2MjdkNDE4MmQ4OTQ3MTM4YmMyYjlhNjAyMGQ2ODdlLnNldENvbnRlbnQoaHRtbF9jMzQ4YjQyNGNjOWQ0MjdmYTcyYzAxYmM2ODJjN2YzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJmZjAyNjZkNzlmMTQ4ODU4ZTU4MGUzYTZjNGRhNGVhLmJpbmRQb3B1cChwb3B1cF9mNjI3ZDQxODJkODk0NzEzOGJjMmI5YTYwMjBkNjg3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFhMzkwNzdlNjVkNDRiOTZiYjEzYThkNzRmZmE3Mjk0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5NzIyMjIyMiwxNi4zNTU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjOTNmZjUzNWZjZjQxYzc5YTg5ZWMyYzQzN2QzMmYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjNGExMWFkZmE4MzQwOWY5NDk0MjNmODhkNmRlZGEzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYzRhMTFhZGZhODM0MDlmOTQ5NDIzZjg4ZDZkZWRhMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtZXJpa2EtSGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzkzZmY1MzVmY2Y0MWM3OWE4OWVjMmM0MzdkMzJmMi5zZXRDb250ZW50KGh0bWxfMGM0YTExYWRmYTgzNDA5Zjk0OTQyM2Y4OGQ2ZGVkYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYTM5MDc3ZTY1ZDQ0Yjk2YmIxM2E4ZDc0ZmZhNzI5NC5iaW5kUG9wdXAocG9wdXBfZmM5M2ZmNTM1ZmNmNDFjNzlhODllYzJjNDM3ZDMyZjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYTNmNzZlYmM2OGU0YmFmOWFhZGE4OTM5NjZkNjg0MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NzIyMjIyMjIsMTYuMzUxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNDM3N2E1ZDdkN2Y0ZjcxYjBjMjk1MzAzZjZiZDYyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZmYzYmVkNDFmOTQ0ODBmYTFjMmZiOGMyZjRhNzA5NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2ZmM2JlZDQxZjk0NDgwZmExYzJmYjhjMmY0YTcwOTUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbWVybGluZy1HeW1uYXNpdW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQzNzdhNWQ3ZDdmNGY3MWIwYzI5NTMwM2Y2YmQ2MmYuc2V0Q29udGVudChodG1sXzdmZjNiZWQ0MWY5NDQ4MGZhMWMyZmI4YzJmNGE3MDk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGEzZjc2ZWJjNjhlNGJhZjlhYWRhODkzOTY2ZDY4NDMuYmluZFBvcHVwKHBvcHVwXzE0Mzc3YTVkN2Q3ZjRmNzFiMGMyOTUzMDNmNmJkNjJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWRkMGNhN2ZlOTgzNDQyY2FhYjAzZTAwMWRmMTlmYzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDUsMTYuMzc4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MGQ3NzI0ODQ0ZTQ0NzhmYmYxNDIxMTViN2MxYTFkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMTBjZTRmMzkxY2E0MWEzYjg1Y2EwYzQ3MGE2YzE2OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjEwY2U0ZjM5MWNhNDFhM2I4NWNhMGM0NzBhNmMxNjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEFtZXJsaW5nZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MGQ3NzI0ODQ0ZTQ0NzhmYmYxNDIxMTViN2MxYTFkNi5zZXRDb250ZW50KGh0bWxfYjEwY2U0ZjM5MWNhNDFhM2I4NWNhMGM0NzBhNmMxNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZGQwY2E3ZmU5ODM0NDJjYWFiMDNlMDAxZGYxOWZjNy5iaW5kUG9wdXAocG9wdXBfNjBkNzcyNDg0NGU0NDc4ZmJmMTQyMTE1YjdjMWExZDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZDQwNDkxMDBiNWE0NTk5YWQwYjgxYjhhZDVlOWEwNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMjc3Nzc3NzgsMTYuMzU0MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDE0ZGEyYjMzNTk0ZGRjYTQ3NDJhNGRkYzZiNDkxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODEwMjY2Njk2ZWU0NzZmODMwMDQwODgzYzAxNGQ0ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjgxMDI2NjY5NmVlNDc2ZjgzMDA0MDg4M2MwMTRkNGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbWVybGluZ2hhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQxNGRhMmIzMzU5NGRkY2E0NzQyYTRkZGM2YjQ5MTEuc2V0Q29udGVudChodG1sXzY4MTAyNjY2OTZlZTQ3NmY4MzAwNDA4ODNjMDE0ZDRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Q0MDQ5MTAwYjVhNDU5OWFkMGI4MWI4YWQ1ZTlhMDYuYmluZFBvcHVwKHBvcHVwXzI0MTRkYTJiMzM1OTRkZGNhNDc0MmE0ZGRjNmI0OTExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTdlYmI3ZjI2ZTVjNDBhZTk1NmExYjNjZTg2NDA1NzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTEzODg4ODg5LDE2LjMzMDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE2MzUzOTMwMGVlNDM1NTkzYjQ2Mzg2ODU1ZTY5ZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM2ZjU0MzA4NmU5NDhjNWJjZWUwZmE0M2YxY2JmMTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZjNmY1NDMwODZlOTQ4YzViY2VlMGZhNDNmMWNiZjE2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFtb3JzYWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxNjM1MzkzMDBlZTQzNTU5M2I0NjM4Njg1NWU2OWU1LnNldENvbnRlbnQoaHRtbF9mYzZmNTQzMDg2ZTk0OGM1YmNlZTBmYTQzZjFjYmYxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E3ZWJiN2YyNmU1YzQwYWU5NTZhMWIzY2U4NjQwNTc0LmJpbmRQb3B1cChwb3B1cF85MTYzNTM5MzAwZWU0MzU1OTNiNDYzODY4NTVlNjllNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkMjVlN2U2NDZjYTQ4ZmU4YWYwN2M0MDYxZDVhZjczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMTExMTExMSwxNi4zNjE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzMDkxMDc4YmEwODQ0NTU4M2JmZjgxMjg1NjE1NTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5MjI4N2MwODQwNjQ5ZGQ4MjgxYzY5ZDY5ZmJmY2UwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83OTIyODdjMDg0MDY0OWRkODI4MWM2OWQ2OWZiZmNlMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtdHNnZWLDpHVkZSBkZXIgTmllZGVyw7ZzdGVycmVpY2hpc2NoZW4gTGFuZGVzcmVnaWVydW5nPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzMDkxMDc4YmEwODQ0NTU4M2JmZjgxMjg1NjE1NTMxLnNldENvbnRlbnQoaHRtbF83OTIyODdjMDg0MDY0OWRkODI4MWM2OWQ2OWZiZmNlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkMjVlN2U2NDZjYTQ4ZmU4YWYwN2M0MDYxZDVhZjczLmJpbmRQb3B1cChwb3B1cF8zMzA5MTA3OGJhMDg0NDU1ODNiZmY4MTI4NTYxNTUzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk3ODgxOWNiMDUwMTQ0NTY4MDQ3ZmM0YTJlNTUxZWMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzMzMzMzMywxNi4zNTYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwY2UwYWZhNTdkOTQ1MGU4NTY4ZDllZDZkYWQ1NTYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1ZDlkMTU2YTYzMjRhZjc5ZWE4YzhmNjcyMzhjN2FkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NWQ5ZDE1NmE2MzI0YWY3OWVhOGM4ZjY3MjM4YzdhZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtdHNoYXVzICgxLCBCYXJ0ZW5zdGVpbmdhc3NlIDcpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwY2UwYWZhNTdkOTQ1MGU4NTY4ZDllZDZkYWQ1NTYxLnNldENvbnRlbnQoaHRtbF85NWQ5ZDE1NmE2MzI0YWY3OWVhOGM4ZjY3MjM4YzdhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk3ODgxOWNiMDUwMTQ0NTY4MDQ3ZmM0YTJlNTUxZWMzLmJpbmRQb3B1cChwb3B1cF9jMGNlMGFmYTU3ZDk0NTBlODU2OGQ5ZWQ2ZGFkNTU2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY1ZTZiOGQyYzVkMDQzN2M5YWEyODAxNzQzNmYwYzZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1ODMzMzMzMywxNi4zNzIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhMDkwYWNlMmVjYzQ5YzI4ZWY5ZDdmY2FmNDBjMGM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyZmE2YTVjNjU2NzQ5YzBiYjg0YzhiYmNmZTg2Nzc0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MmZhNmE1YzY1Njc0OWMwYmI4NGM4YmJjZmU4Njc3NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFtdHNoYXVzICgxLCBSYXVoZW5zdGVpbmdhc3NlIDEwKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTA5MGFjZTJlY2M0OWMyOGVmOWQ3ZmNhZjQwYzBjOS5zZXRDb250ZW50KGh0bWxfOTJmYTZhNWM2NTY3NDljMGJiODRjOGJiY2ZlODY3NzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NWU2YjhkMmM1ZDA0MzdjOWFhMjgwMTc0MzZmMGM2Yy5iaW5kUG9wdXAocG9wdXBfMWEwOTBhY2UyZWNjNDljMjhlZjlkN2ZjYWY0MGMwYzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYjdiOGQ4ODkxZTg0NjkzOWIxNjFhOThlZWY1Yzk1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNjExMTExMTEsMTYuMzY5MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NmI4OGUwODcxNmI0Y2YyYmQwNTM3NGUyMzcxNjY3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YzNhY2Y4ODRhNTI0NTRhYjg2MzAzZDA3N2ZiYzc4NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWMzYWNmODg0YTUyNDU0YWI4NjMwM2QwNzdmYmM3ODYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbXRzaGF1cyAoMSwgU2Nob3R0ZW5yaW5nIDIwLTI2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NmI4OGUwODcxNmI0Y2YyYmQwNTM3NGUyMzcxNjY3Ny5zZXRDb250ZW50KGh0bWxfNWMzYWNmODg0YTUyNDU0YWI4NjMwM2QwNzdmYmM3ODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYjdiOGQ4ODkxZTg0NjkzOWIxNjFhOThlZWY1Yzk1Yy5iaW5kUG9wdXAocG9wdXBfNDZiODhlMDg3MTZiNGNmMmJkMDUzNzRlMjM3MTY2NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMzEwZWI1MGY4NDU0MDg4Yjg0MTA0MDgwZGJhNzQ5ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1NzUsMTYuMzk3MjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZThhOGIzMTIwZmI0NjlhOGVhMWMzMzE3ZjliMzRkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYjNhZTk1YTU5MGM0YWRiOTIyMzk5OWU1YjFlMTBkNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWIzYWU5NWE1OTBjNGFkYjkyMjM5OTllNWIxZTEwZDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbXRzaGF1cyBGbG9yaWRzZG9yZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZThhOGIzMTIwZmI0NjlhOGVhMWMzMzE3ZjliMzRkNS5zZXRDb250ZW50KGh0bWxfYWIzYWU5NWE1OTBjNGFkYjkyMjM5OTllNWIxZTEwZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMzEwZWI1MGY4NDU0MDg4Yjg0MTA0MDgwZGJhNzQ5Zi5iaW5kUG9wdXAocG9wdXBfMWU4YThiMzEyMGZiNDY5YThlYTFjMzMxN2Y5YjM0ZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hY2E2MTdkNjdhY2M0NDE4YWU4ZTYyYzUyZjkyMDQ4OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Njk0NDQ0NDQsMTYuMzUwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMjM2YThjZTU3ZDQ0MzUxYmRiYzc1NjRjMzY5ZjVhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYzIwMjI4MjkyMjQ0NTc5YmZjNzJiMDcyYTJiZGU2MCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmMyMDIyODI5MjI0NDU3OWJmYzcyYjA3MmEyYmRlNjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbXRzaGF1cyBNYXJpYWhpbGY8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIzNmE4Y2U1N2Q0NDM1MWJkYmM3NTY0YzM2OWY1YWYuc2V0Q29udGVudChodG1sXzJjMjAyMjgyOTIyNDQ1NzliZmM3MmIwNzJhMmJkZTYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWNhNjE3ZDY3YWNjNDQxOGFlOGU2MmM1MmY5MjA0ODguYmluZFBvcHVwKHBvcHVwX2QyMzZhOGNlNTdkNDQzNTFiZGJjNzU2NGMzNjlmNWFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTdhYmRjMDM1NmNjNDBlY2IzNTBhNmFjNzFhODhhZDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDYxMTExMTExLDE2LjM3NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDQ3MGJjOGI1MjNiNDQ3N2E0MWI2ZjIwYWQxZWE4ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZjNTliM2ViOTViNGMyOTljN2VlNmVjOWRjMTUxODcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmYzU5YjNlYjk1YjRjMjk5YzdlZTZlYzlkYzE1MTg3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW4gZGVyIEjDvGxiZW4gMzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDcwYmM4YjUyM2I0NDc3YTQxYjZmMjBhZDFlYThkYi5zZXRDb250ZW50KGh0bWxfY2ZjNTliM2ViOTViNGMyOTljN2VlNmVjOWRjMTUxODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85N2FiZGMwMzU2Y2M0MGVjYjM1MGE2YWM3MWE4OGFkNy5iaW5kUG9wdXAocG9wdXBfZDQ3MGJjOGI1MjNiNDQ3N2E0MWI2ZjIwYWQxZWE4ZGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZjhjNzFiNjZiNmM0NmYyYTY0ODM1Y2EwM2ZhZTIxYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjM4ODg4ODksMTYuMzc2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTY3YTU3OTJjZDE0ZTNkOTQxYTcwMjczMzQxNTNiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Y2JjNTJkNWI1ZDk0MDJkYjA5ZDU4MGQxZThlNWI5YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2NiYzUyZDViNWQ5NDAyZGIwOWQ1ODBkMWU4ZTViOWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbiBkZXIgSMO8bGJlbiA0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxNjdhNTc5MmNkMTRlM2Q5NDFhNzAyNzMzNDE1M2I2LnNldENvbnRlbnQoaHRtbF83Y2JjNTJkNWI1ZDk0MDJkYjA5ZDU4MGQxZThlNWI5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVmOGM3MWI2NmI2YzQ2ZjJhNjQ4MzVjYTAzZmFlMjFhLmJpbmRQb3B1cChwb3B1cF8zMTY3YTU3OTJjZDE0ZTNkOTQxYTcwMjczMzQxNTNiNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMxZWJkZDhiNzU5NDQ2MTFhODg2Yzg0ZmFjMzA2YTI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2MTExMTExMSwxNi4zNzY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkMjdmZmY5MGUxMjRkOWY4NThiY2Y2OTdmMzhhMGFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhN2VkNTNlYTYxYjRhMjlhM2M2Zjk4MzcxY2U0YWUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYTdlZDUzZWE2MWI0YTI5YTNjNmY5ODM3MWNlNGFlMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFuIGRlciBIw7xsYmVuIDY8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQyN2ZmZjkwZTEyNGQ5Zjg1OGJjZjY5N2YzOGEwYWMuc2V0Q29udGVudChodG1sX2ZhN2VkNTNlYTYxYjRhMjlhM2M2Zjk4MzcxY2U0YWUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzFlYmRkOGI3NTk0NDYxMWE4ODZjODRmYWMzMDZhMjcuYmluZFBvcHVwKHBvcHVwX2ZkMjdmZmY5MGUxMjRkOWY4NThiY2Y2OTdmMzhhMGFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWEwMGEwYjY3YTA2NDY2Njg4NWQwZDMxYWRhNzhlOTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzUsMTYuMzI3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGIxMzRmZmQ4NDE0ZTNhODMzNjA5NjdmNWUzNDBkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGZkOTBjMDVlNzU0NzBkYmYzM2QyNDk0ZTBhMmMzNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODRmZDkwYzA1ZTc1NDcwZGJmMzNkMjQ5NGUwYTJjMzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbiBkZXIgVMO8cmtlbnNjaGFuemU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRiMTM0ZmZkODQxNGUzYTgzMzYwOTY3ZjVlMzQwZGEuc2V0Q29udGVudChodG1sXzg0ZmQ5MGMwNWU3NTQ3MGRiZjMzZDI0OTRlMGEyYzM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWEwMGEwYjY3YTA2NDY2Njg4NWQwZDMxYWRhNzhlOTcuYmluZFBvcHVwKHBvcHVwXzJkYjEzNGZmZDg0MTRlM2E4MzM2MDk2N2Y1ZTM0MGRhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWI5YTA1MmZlNzg0NDNjY2IzYmI2NGIwODlmODkyNjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTc1LDE2LjM1ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTM2ZjhmNWU2Mjk2NGZkOTk5NDA5NDYzNzk5ZDc5NTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDIxMTExNWMzMGE4NGNiNThlZjQ3OWU1NTkxNDNkMWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QyMTExMTVjMzBhODRjYjU4ZWY0NzllNTU5MTQzZDFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5hdG9taXNjaGVzIEluc3RpdHV0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEzNmY4ZjVlNjI5NjRmZDk5OTQwOTQ2Mzc5OWQ3OTUyLnNldENvbnRlbnQoaHRtbF9kMjExMTE1YzMwYTg0Y2I1OGVmNDc5ZTU1OTE0M2QxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ViOWEwNTJmZTc4NDQzY2NiM2JiNjRiMDg5Zjg5MjY4LmJpbmRQb3B1cChwb3B1cF8xMzZmOGY1ZTYyOTY0ZmQ5OTk0MDk0NjM3OTlkNzk1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VlZWVmMDdmNWUwNTQ5OWI4ZjQ2NjQxYWZiOTAzNTQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA0NDQ0NDQ0NCwxNi40MTU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyYWQ4NTZkNWExNTRkMjRiYzI1YzFiYmZhMTFmNWExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZDVhYjExZDEzZjQ4MTRhZTQwM2JlMWIyNTZkMzViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kMWQ1YWIxMWQxM2Y0ODE0YWU0MDNiZTFiMjU2ZDM1YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFuYXRvbWlzY2hlcyBNdXNldW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjJhZDg1NmQ1YTE1NGQyNGJjMjVjMWJiZmExMWY1YTEuc2V0Q29udGVudChodG1sX2QxZDVhYjExZDEzZjQ4MTRhZTQwM2JlMWIyNTZkMzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWVlZWYwN2Y1ZTA1NDk5YjhmNDY2NDFhZmI5MDM1NDQuYmluZFBvcHVwKHBvcHVwXzYyYWQ4NTZkNWExNTRkMjRiYzI1YzFiYmZhMTFmNWExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTY1N2E2YjUxZDk5NGM3NGJjYmU1MGYxM2QyYTJlNjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjQxNjY2NjY3LDE2LjMyOTQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWY3OTRmNjUyYWQwNGMwNTg2MjEwOWExOTA2MWY0NGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDUwZWUyZWRmNDRjNGE4OGJhMDEyMTdiYWRlNzFjNzYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA1MGVlMmVkZjQ0YzRhODhiYTAxMjE3YmFkZTcxYzc2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5kZXJzZW5nYXNzZSAoV29obmhhdXNhbmxhZ2UpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmNzk0ZjY1MmFkMDRjMDU4NjIxMDlhMTkwNjFmNDRkLnNldENvbnRlbnQoaHRtbF8wNTBlZTJlZGY0NGM0YTg4YmEwMTIxN2JhZGU3MWM3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U2NTdhNmI1MWQ5OTRjNzRiY2JlNTBmMTNkMmEyZTY0LmJpbmRQb3B1cChwb3B1cF8xZjc5NGY2NTJhZDA0YzA1ODYyMTA5YTE5MDYxZjQ0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzZGJmNmJhOWI0ZjQzNGU4ZjZkOWY3YWYwYjVjNGJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNjU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmMjc2ODM2NmQxZTQ3NzNiNTE3YWI2ZGU1NWE5MjRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3YjI2MDNjM2JkNzQ5ODdhY2Y2YTM1ZWIwMTczYzQ5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iN2IyNjAzYzNiZDc0OTg3YWNmNmEzNWViMDE3M2M0OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbmRyZWFza2FwZWxsZSAoMSwgSGVycmVuZ2Fzc2UpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMjc2ODM2NmQxZTQ3NzNiNTE3YWI2ZGU1NWE5MjRjLnNldENvbnRlbnQoaHRtbF9iN2IyNjAzYzNiZDc0OTg3YWNmNmEzNWViMDE3M2M0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAzZGJmNmJhOWI0ZjQzNGU4ZjZkOWY3YWYwYjVjNGJjLmJpbmRQb3B1cChwb3B1cF84ZjI3NjgzNjZkMWU0NzczYjUxN2FiNmRlNTVhOTI0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE2MjM4MDU4ZTlkNTQyNGRhZjFkZGUxZjIyOGExYzA2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5MTY2NjY2NywxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExZDg5MDdjOTBlZjQ4YmI5ZjhiMjY2MTExZTg4MmM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkZDRhOWYzZmY3ZTQ0NTc4MTFmMTY5OGYwMzY1OTNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZGQ0YTlmM2ZmN2U0NDU3ODExZjE2OThmMDM2NTkzYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbmRyZWFza2FwZWxsZSAoMSwgUm90ZW50dXJtc3RyYcOfZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTFkODkwN2M5MGVmNDhiYjlmOGIyNjYxMTFlODgyYzYuc2V0Q29udGVudChodG1sXzdkZDRhOWYzZmY3ZTQ0NTc4MTFmMTY5OGYwMzY1OTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTYyMzgwNThlOWQ1NDI0ZGFmMWRkZTFmMjI4YTFjMDYuYmluZFBvcHVwKHBvcHVwXzExZDg5MDdjOTBlZjQ4YmI5ZjhiMjY2MTExZTg4MmM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTU1NTM2ODAxOWJkNDM2MjgxZTg0OTk5NmU5OGMyZjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTE2NjY2NjY3LDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzIxMjhhYTQ1MzIwNDk2ZDlhYTA5OGRlZmNjMDM5MjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVkMTdjZGQzZGM4NGUyMTk4ZGYxMTRhOGI4NzIzYjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc1ZDE3Y2RkM2RjODRlMjE5OGRmMTE0YThiODcyM2I0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFuZHJvbWVkYWJydW5uZW48L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzIxMjhhYTQ1MzIwNDk2ZDlhYTA5OGRlZmNjMDM5MjAuc2V0Q29udGVudChodG1sXzc1ZDE3Y2RkM2RjODRlMjE5OGRmMTE0YThiODcyM2I0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTU1NTM2ODAxOWJkNDM2MjgxZTg0OTk5NmU5OGMyZjYuYmluZFBvcHVwKHBvcHVwX2MyMTI4YWE0NTMyMDQ5NmQ5YWEwOThkZWZjYzAzOTIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzYwY2NlY2VhYjAxNDJkOTgzNTdlODVjMzJjM2RkNTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzI1LDE2LjQxNDE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTUzODEyM2U1OGZlNDVkNDk5MGM4NjgzOWVlNTM2ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWE5YThmYzk2MDgwNDFlNjk5ZmEzYWNjYTFkZmQ2ZjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFhOWE4ZmM5NjA4MDQxZTY5OWZhM2FjY2ExZGZkNmY0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5kcm9tZWRhdHVybTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTM4MTIzZTU4ZmU0NWQ0OTkwYzg2ODM5ZWU1MzZlZS5zZXRDb250ZW50KGh0bWxfMWE5YThmYzk2MDgwNDFlNjk5ZmEzYWNjYTFkZmQ2ZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NjBjY2VjZWFiMDE0MmQ5ODM1N2U4NWMzMmMzZGQ1Ny5iaW5kUG9wdXAocG9wdXBfZTUzODEyM2U1OGZlNDVkNDk5MGM4NjgzOWVlNTM2ZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNTU1NWFlMGU4N2E0MDdlYmI5ZmI3MmI5NjU3YjZlMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0NTI3Nzc3NzgsMTYuMzU1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NWUwMmI0ZjZkZDc0ZjgxYjIyNmMzNmU1NmMxOGQ4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjcyYzY0NjA0Njc0NjgxOTdhMjZhZmEzYzY5YWYzOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzY3MmM2NDYwNDY3NDY4MTk3YTI2YWZhM2M2OWFmMzkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEFuZHLDoXNzeWRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzVlMDJiNGY2ZGQ3NGY4MWIyMjZjMzZlNTZjMThkOGEuc2V0Q29udGVudChodG1sX2M2NzJjNjQ2MDQ2NzQ2ODE5N2EyNmFmYTNjNjlhZjM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDU1NTVhZTBlODdhNDA3ZWJiOWZiNzJiOTY1N2I2ZTIuYmluZFBvcHVwKHBvcHVwXzc1ZTAyYjRmNmRkNzRmODFiMjI2YzM2ZTU2YzE4ZDhhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODM2YmRlN2M0MDdjNDE5MDg4NGJkM2VmMWJjMDI2NGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNDg4ODg4ODg5LDE2LjQwMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGY0MGM2ZjQ1MTlhNGIyM2IxYTMxMDNiOTQ0NWI1NTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzlkNzc5YWEyMWQ2NGE5NzgxNzYxYjhmMzMzYTliMzMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M5ZDc3OWFhMjFkNjRhOTc4MTc2MWI4ZjMzM2E5YjMzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFuZ2VsaWJhZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjQwYzZmNDUxOWE0YjIzYjFhMzEwM2I5NDQ1YjU1Ni5zZXRDb250ZW50KGh0bWxfYzlkNzc5YWEyMWQ2NGE5NzgxNzYxYjhmMzMzYTliMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MzZiZGU3YzQwN2M0MTkwODg0YmQzZWYxYmMwMjY0Zi5iaW5kUG9wdXAocG9wdXBfOGY0MGM2ZjQ1MTlhNGIyM2IxYTMxMDNiOTQ0NWI1NTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYTM1ZmMwZmU1MjU0ZjZhODY5ZGFmMTZlZWNiNmIyZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTExMTExMTEsMTYuMzc4NjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODBhYWQwODVhMWE0YzVjYmQyNzk3MmNlN2RiYWZhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjcxMGIzODU3ZTQ0MjA4OThiZjM3N2IyZjU0NzIyYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfM2Y3MTBiMzg1N2U0NDIwODk4YmYzNzdiMmY1NDcyMmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbmdlbHBlY2tlbnR1cm08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjgwYWFkMDg1YTFhNGM1Y2JkMjc5NzJjZTdkYmFmYWIuc2V0Q29udGVudChodG1sXzNmNzEwYjM4NTdlNDQyMDg5OGJmMzc3YjJmNTQ3MjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGEzNWZjMGZlNTI1NGY2YTg2OWRhZjE2ZWVjYjZiMmQuYmluZFBvcHVwKHBvcHVwX2Y4MGFhZDA4NWExYTRjNWNiZDI3OTcyY2U3ZGJhZmFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTJiZDhmYzcyMzNhNGUyNGIxNDU0MTA4YjM3YzAzNWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTYxMTExMTExLDE2LjM1OTQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjhlMjc2MDVmY2YzNDI4N2FhYWY3NDdjNTllMjZlYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjc2MzY2ODJkZThkNDQwYjk5ZmNiNTU0NzUwNjE1NjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY3NjM2NjgyZGU4ZDQ0MGI5OWZjYjU1NDc1MDYxNTY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5nZXJlcnBhbGFpczwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OGUyNzYwNWZjZjM0Mjg3YWFhZjc0N2M1OWUyNmVhNC5zZXRDb250ZW50KGh0bWxfNjc2MzY2ODJkZThkNDQwYjk5ZmNiNTU0NzUwNjE1NjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MmJkOGZjNzIzM2E0ZTI0YjE0NTQxMDhiMzdjMDM1Yi5iaW5kUG9wdXAocG9wdXBfNjhlMjc2MDVmY2YzNDI4N2FhYWY3NDdjNTllMjZlYTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTcwYmMwZGUwZjg0MWQ5YmEwNzU4N2RiNDNiZjhiNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MzA1NTU1NTYsMTYuMzcwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWQwOGU2MGFmMGY0NmJkYTEzZTU3YzQ2YWFhZjAxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjM2MDhlNWExOGU0NWE3OGRmNDg2ZWNmYTFjZDk0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWYzNjA4ZTVhMThlNDVhNzhkZjQ4NmVjZmExY2Q5NGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbmdlcmZlbGRlcmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMWQwOGU2MGFmMGY0NmJkYTEzZTU3YzQ2YWFhZjAxNi5zZXRDb250ZW50KGh0bWxfOWYzNjA4ZTVhMThlNDVhNzhkZjQ4NmVjZmExY2Q5NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZTcwYmMwZGUwZjg0MWQ5YmEwNzU4N2RiNDNiZjhiNy5iaW5kUG9wdXAocG9wdXBfZTFkMDhlNjBhZjBmNDZiZGExM2U1N2M0NmFhYWYwMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hOWYzMmEzNTMxNTk0Nzg0OWY0MGY1Y2QwNTg1NWM5OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI2NTU1NTU1NTYsMTYuMzQzNjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzNlNTg3MGI1ODY0MTc2YTRiNzY1MTcxMTU1NzkyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNWEyNjZlYmY2Njk0ZWNmYWEzNjI4Y2M0YzAwNDkzYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzVhMjY2ZWJmNjY5NGVjZmFhMzYyOGNjNGMwMDQ5M2EiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbmdlcnZpbGxhPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjM2U1ODcwYjU4NjQxNzZhNGI3NjUxNzExNTU3OTJlLnNldENvbnRlbnQoaHRtbF8zNWEyNjZlYmY2Njk0ZWNmYWEzNjI4Y2M0YzAwNDkzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E5ZjMyYTM1MzE1OTQ3ODQ5ZjQwZjVjZDA1ODU1Yzk4LmJpbmRQb3B1cChwb3B1cF8zYzNlNTg3MGI1ODY0MTc2YTRiNzY1MTcxMTU1NzkyZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZmYjk2MDdlZTVmNDRiODBiNTMzNzVlNmM2MjFmZTgwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk3MjIyMjIyMiwxNi4zODExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyNDk4YmRjNWZiYTQwNmY4NGZmNWFjN2EwZWZjNmQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MyMTkxYjJkNDRlYzRmM2RiY2U4ZTYxNjgxMzYyOTQyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMjE5MWIyZDQ0ZWM0ZjNkYmNlOGU2MTY4MTM2Mjk0MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbmdsaWthbmlzY2hlIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMjQ5OGJkYzVmYmE0MDZmODRmZjVhYzdhMGVmYzZkMy5zZXRDb250ZW50KGh0bWxfYzIxOTFiMmQ0NGVjNGYzZGJjZThlNjE2ODEzNjI5NDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZmI5NjA3ZWU1ZjQ0YjgwYjUzMzc1ZTZjNjIxZmU4MC5iaW5kUG9wdXAocG9wdXBfMjI0OThiZGM1ZmJhNDA2Zjg0ZmY1YWM3YTBlZmM2ZDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZjU2N2U1NDExNGE0YmM0YWE5MGNhNTc1NmI0MDA2YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxODA1NTU1NTYsMTYuMzU4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzBmMjBhYWRkMGU0YTQyYTkwNTM5MzkwMGMwOWUxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDE3MDJkZTc0M2M0OWFmYmViNTZkN2Y0MDQ5OWRkNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmQxNzAyZGU3NDNjNDlhZmJlYjU2ZDdmNDA0OTlkZDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbmdsb2JhbmstUmVzdGF1cmFudDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNzBmMjBhYWRkMGU0YTQyYTkwNTM5MzkwMGMwOWUxNC5zZXRDb250ZW50KGh0bWxfYmQxNzAyZGU3NDNjNDlhZmJlYjU2ZDdmNDA0OTlkZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZjU2N2U1NDExNGE0YmM0YWE5MGNhNTc1NmI0MDA2YS5iaW5kUG9wdXAocG9wdXBfMzcwZjIwYWFkZDBlNGE0MmE5MDUzOTM5MDBjMDllMTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYmY5MjlhYTQ5N2M0ZjE2OTMyYzE0YTM5MTdjZmFjNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI4MzA1NTU1NTYsMTYuNDAzMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YjBlZjdmMzk4YmI0ZDE2ODlmMTQxMmM4MGIwNTUzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYTg0YWIwYzUzMzY0ZDJjYmI1MWYxZmIwMzI3YzdhMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmE4NGFiMGM1MzM2NGQyY2JiNTFmMWZiMDMyN2M3YTIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQW5nc3RlbmtyZXV6PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiMGVmN2YzOThiYjRkMTY4OWYxNDEyYzgwYjA1NTM5LnNldENvbnRlbnQoaHRtbF9iYTg0YWIwYzUzMzY0ZDJjYmI1MWYxZmIwMzI3YzdhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NiZjkyOWFhNDk3YzRmMTY5MzJjMTRhMzkxN2NmYWM0LmJpbmRQb3B1cChwb3B1cF82YjBlZjdmMzk4YmI0ZDE2ODlmMTQxMmM4MGIwNTUzOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I4ZDg1ZjVlNmE2MzQ5Y2FiZWU2MjY1MTNhMmFiNGExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTcxNjY2NjY2NywxNi4zODkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjOWM0YWZlNDIyNTQ0M2ZhODllZDI5NjIyMTUyMTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0M2QwODQ0YTI4NzRhZGJiNzlkYTI3OTNiMGM1NGQ5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yNDNkMDg0NGEyODc0YWRiYjc5ZGEyNzkzYjBjNTRkOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFua2VyYnJvdGZhYnJpazwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzljNGFmZTQyMjU0NDNmYTg5ZWQyOTYyMjE1MjE1Yi5zZXRDb250ZW50KGh0bWxfMjQzZDA4NDRhMjg3NGFkYmI3OWRhMjc5M2IwYzU0ZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iOGQ4NWY1ZTZhNjM0OWNhYmVlNjI2NTEzYTJhYjRhMS5iaW5kUG9wdXAocG9wdXBfN2M5YzRhZmU0MjI1NDQzZmE4OWVkMjk2MjIxNTIxNWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMDYwOTg0ZDFkZmU0MGZhOGExZDhmNzVhNTY1OWZkMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTYxNWYyNzhkZWQ0NDcyMDllZmViN2VhNzU1ZjdiNTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVlODA0MDVjZTdmNDBhMzk2ZjE5NDhhNTc1NGIyN2IgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FlZTgwNDA1Y2U3ZjQwYTM5NmYxOTQ4YTU3NTRiMjdiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5rZXJoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2MTVmMjc4ZGVkNDQ3MjA5ZWZlYjdlYTc1NWY3YjU1LnNldENvbnRlbnQoaHRtbF9hZWU4MDQwNWNlN2Y0MGEzOTZmMTk0OGE1NzU0YjI3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzEwNjA5ODRkMWRmZTQwZmE4YTFkOGY3NWE1NjU5ZmQyLmJpbmRQb3B1cChwb3B1cF9hNjE1ZjI3OGRlZDQ0NzIwOWVmZWI3ZWE3NTVmN2I1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzOTZkYTczNTMyYTQ4ZGZhMDc4MjA2ODU5MTgxNTIwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEwMjc3Nzc3OCwxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkNDQ3YTU5ZGMyMjQzNzA5YjM2OTIwZjg4ZWRiMDBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5NTJhNGQ2ZGIxYzQwOWZiZmM0MWFjMmQwMjRkM2IxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80OTUyYTRkNmRiMWM0MDlmYmZjNDFhYzJkMDI0ZDNiMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFua2VyaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBkNDQ3YTU5ZGMyMjQzNzA5YjM2OTIwZjg4ZWRiMDBkLnNldENvbnRlbnQoaHRtbF80OTUyYTRkNmRiMWM0MDlmYmZjNDFhYzJkMDI0ZDNiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAzOTZkYTczNTMyYTQ4ZGZhMDc4MjA2ODU5MTgxNTIwLmJpbmRQb3B1cChwb3B1cF8wZDQ0N2E1OWRjMjI0MzcwOWIzNjkyMGY4OGVkYjAwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4NDIzZjk4OTc1MDQ1MmQ4YzI1NmZlNTlhNjZmMDBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAxMTExMTExMSwxNi4zMzkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmNzRhOThiZmYwNTQ0NTRiMGYxODc3Y2FjZjU2NDAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwNmJhOTA2MzdjNDRmYWFhYWJmYTA4YjJlNmUzZDJjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MDZiYTkwNjM3YzQ0ZmFhYWFiZmEwOGIyZTZlM2QyYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFua2VyaG9mICg3KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjc0YTk4YmZmMDU0NDU0YjBmMTg3N2NhY2Y1NjQwMC5zZXRDb250ZW50KGh0bWxfNzA2YmE5MDYzN2M0NGZhYWFhYmZhMDhiMmU2ZTNkMmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ODQyM2Y5ODk3NTA0NTJkOGMyNTZmZTU5YTY2ZjAwYy5iaW5kUG9wdXAocG9wdXBfZGY3NGE5OGJmZjA1NDQ1NGIwZjE4NzdjYWNmNTY0MDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOWNmNzdmMWRiODM0OWY5OGJmZDgzMmQ5YWE2M2FiYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDI3Nzc3NzgsMTYuMzczMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMjBjNTVlYWY0ZDc0YjhjYTk2ZDhmNjc0N2I5NmNkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODRkMzQ1ZjY4MjY0MGFhOTE4OGY4ZWEyMDE1ZDIxNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzg0ZDM0NWY2ODI2NDBhYTkxODhmOGVhMjAxNWQyMTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQW5rZXJ1aHI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIwYzU1ZWFmNGQ3NGI4Y2E5NmQ4ZjY3NDdiOTZjZGQuc2V0Q29udGVudChodG1sXzc4NGQzNDVmNjgyNjQwYWE5MTg4ZjhlYTIwMTVkMjE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjljZjc3ZjFkYjgzNDlmOThiZmQ4MzJkOWFhNjNhYmEuYmluZFBvcHVwKHBvcHVwX2QyMGM1NWVhZjRkNzRiOGNhOTZkOGY2NzQ3Yjk2Y2RkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjc4MWRmNTQ0M2U1NDBiZDk0Y2E3NjIxYWQ3NWFlZjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTQxNjY2NjY3LDE2LjM3NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjY4NDY5OWNjZWRkNGZkNmJjMTU2N2RmODY0ZmE0MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2EwNjM0NzVhN2RkNDExZGIxYTk3ZjI0MDgxYzg4ZWQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NhMDYzNDc1YTdkZDQxMWRiMWE5N2YyNDA4MWM4OGVkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5uYS1Cb3NjaGVrLUhlaW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjY4NDY5OWNjZWRkNGZkNmJjMTU2N2RmODY0ZmE0MGUuc2V0Q29udGVudChodG1sX2NhMDYzNDc1YTdkZDQxMWRiMWE5N2YyNDA4MWM4OGVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjc4MWRmNTQ0M2U1NDBiZDk0Y2E3NjIxYWQ3NWFlZjYuYmluZFBvcHVwKHBvcHVwX2Y2ODQ2OTljY2VkZDRmZDZiYzE1NjdkZjg2NGZhNDBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjdjMjY0MDYwNTBhNGExY2FjZDRlODBhYjhjODI1MDEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQ0NDQ0NDQ0LDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmNiZTk3NzAzMGZmNDBhMDlmNTEyYTAyM2FmYzkyNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjg1NzEyNzQyYmM1NDc3MzllMmFkYzRkY2E2ZmRlNDAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI4NTcxMjc0MmJjNTQ3NzM5ZTJhZGM0ZGNhNmZkZTQwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5uYWdhc3NlIDE8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNiZTk3NzAzMGZmNDBhMDlmNTEyYTAyM2FmYzkyNDkuc2V0Q29udGVudChodG1sXzI4NTcxMjc0MmJjNTQ3NzM5ZTJhZGM0ZGNhNmZkZTQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjdjMjY0MDYwNTBhNGExY2FjZDRlODBhYjhjODI1MDEuYmluZFBvcHVwKHBvcHVwXzJjYmU5NzcwMzBmZjQwYTA5ZjUxMmEwMjNhZmM5MjQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzYzYmE2MzkwNWQxNDNhN2IzMWIzNWMyZGNkZThhODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDM4ODg4ODg5LDE2LjM3MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDcwMjdiYWJhOWUyNDk1Zjg2MmY3ZTQ0NzU0ZmQyNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2VkYzBjNzI2ZDk1NDM1ZWE0OWYwYmNhZGJlMzEzZGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdlZGMwYzcyNmQ5NTQzNWVhNDlmMGJjYWRiZTMxM2RjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5uYWdhc3NlIDEyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3MDI3YmFiYTllMjQ5NWY4NjJmN2U0NDc1NGZkMjY2LnNldENvbnRlbnQoaHRtbF83ZWRjMGM3MjZkOTU0MzVlYTQ5ZjBiY2FkYmUzMTNkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc2M2JhNjM5MDVkMTQzYTdiMzFiMzVjMmRjZGU4YTgzLmJpbmRQb3B1cChwb3B1cF9kNzAyN2JhYmE5ZTI0OTVmODYyZjdlNDQ3NTRmZDI2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk2MzhmMWZjOTU4NjRjOTE5NzhlYTQ5ZjNlZTIyMTkyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAzODg4ODg4OSwxNi4zNzIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjZTAxMDNkZWZkZDQ0MWVhOWExMDIyZjAyMzBmMjFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkNzZmOWMwMmUyNDQxNzQ5YjcxMmI5NzFiNTI0YWI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZDc2ZjljMDJlMjQ0MTc0OWI3MTJiOTcxYjUyNGFiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFubmFnYXNzZSAxODwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kY2UwMTAzZGVmZGQ0NDFlYTlhMTAyMmYwMjMwZjIxYS5zZXRDb250ZW50KGh0bWxfNmQ3NmY5YzAyZTI0NDE3NDliNzEyYjk3MWI1MjRhYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NjM4ZjFmYzk1ODY0YzkxOTc4ZWE0OWYzZWUyMjE5Mi5iaW5kUG9wdXAocG9wdXBfZGNlMDEwM2RlZmRkNDQxZWE5YTEwMjJmMDIzMGYyMWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNWU4YmFkODJjNzA0MTY2OTMxNWIzYzlhNjljZjIzMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNDQ0NDQ0NDQsMTYuMzczMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGE1OWQxNmU5MjU0NjZiYmViZTYwNDIyZDNiMDk4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjkyMjU2NjZmMDg0MDRmOTJjMTg1ZTYwYzI3ZDg2MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGY5MjI1NjY2ZjA4NDA0ZjkyYzE4NWU2MGMyN2Q4NjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbm5hZ2Fzc2UgOTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMGE1OWQxNmU5MjU0NjZiYmViZTYwNDIyZDNiMDk4My5zZXRDb250ZW50KGh0bWxfZGY5MjI1NjY2ZjA4NDA0ZjkyYzE4NWU2MGMyN2Q4NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNWU4YmFkODJjNzA0MTY2OTMxNWIzYzlhNjljZjIzMC5iaW5kUG9wdXAocG9wdXBfMjBhNTlkMTZlOTI1NDY2YmJlYmU2MDQyMmQzYjA5ODMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNDAwZDg5OTkxNTM0ZTNiOGZlMTlmYzM0ZTE1NTRmNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIzODMzMzMzMzMsMTYuMzE5MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTg0MjQwOGQ5MjM0YmE2OWVhYjFmZjM4ZmZiZGIxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjJjODBhNTFlMDY0Y2VlODRkYTYxMWNhODY5ZDE0YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDYyYzgwYTUxZTA2NGNlZTg0ZGE2MTFjYTg2OWQxNGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbm5haG9mICgxNyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGU4NDI0MDhkOTIzNGJhNjllYWIxZmYzOGZmYmRiMTguc2V0Q29udGVudChodG1sXzA2MmM4MGE1MWUwNjRjZWU4NGRhNjExY2E4NjlkMTRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTQwMGQ4OTk5MTUzNGUzYjhmZTE5ZmMzNGUxNTU0ZjcuYmluZFBvcHVwKHBvcHVwXzBlODQyNDA4ZDkyMzRiYTY5ZWFiMWZmMzhmZmJkYjE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGI3ZjljMzNkYzNkNDY0NWI5MDQ4NjA4ZDgwMmE0OWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjc1LDE2LjMzNzIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzE0NzRkODYyYjZlNGI1Yjk5N2Q5MjUxOWRkMGJhOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWJlZjU1MzUzYTdiNDczNTg5OThlNDA0MTQ1NzQwYTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ViZWY1NTM1M2E3YjQ3MzU4OTk4ZTQwNDE0NTc0MGE3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5uYWhvZiAoMTgpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxNDc0ZDg2MmI2ZTRiNWI5OTdkOTI1MTlkZDBiYTlhLnNldENvbnRlbnQoaHRtbF9lYmVmNTUzNTNhN2I0NzM1ODk5OGU0MDQxNDU3NDBhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRiN2Y5YzMzZGMzZDQ2NDViOTA0ODYwOGQ4MDJhNDllLmJpbmRQb3B1cChwb3B1cF83MTQ3NGQ4NjJiNmU0YjViOTk3ZDkyNTE5ZGQwYmE5YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5YzFjMTE3OGI2NTRiNWU5OWI2ODA1OGEyZjU5NTg5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2NjY2NjY2NywxNi4zNjk0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4ZTEyYjMzNDI0ZjQ2YWFhZWNkZjYxZTk1ODJlMmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxYThkZWI4NDQ1YTRlYWM5NzFkYTdhODcxMTYyZDYzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82MWE4ZGViODQ0NWE0ZWFjOTcxZGE3YTg3MTE2MmQ2MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBbm5ha2FwZWxsZSAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhlMTJiMzM0MjRmNDZhYWFlY2RmNjFlOTU4MmUyYjcuc2V0Q29udGVudChodG1sXzYxYThkZWI4NDQ1YTRlYWM5NzFkYTdhODcxMTYyZDYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDljMWMxMTc4YjY1NGI1ZTk5YjY4MDU4YTJmNTk1ODkuYmluZFBvcHVwKHBvcHVwX2Y4ZTEyYjMzNDI0ZjQ2YWFhZWNkZjYxZTk1ODJlMmI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFlODUyZjJiMDkzNGQxNWEwMGNjZDc2ZjkxNjdjZTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjM3NTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWNiNWYyYzRiYmI4NDQwMjhmYWQ1NDI0NzFkMDc4YjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU2OTIzODM2MzA0NDU3NzlkOTY0ZWM2MTQwYjk0MTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q1NjkyMzgzNjMwNDQ1Nzc5ZDk2NGVjNjE0MGI5NDE0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFubmFrYXBlbGxlICgxLCBTY2h1bGVyc3RyYcOfZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWNiNWYyYzRiYmI4NDQwMjhmYWQ1NDI0NzFkMDc4YjEuc2V0Q29udGVudChodG1sX2Q1NjkyMzgzNjMwNDQ1Nzc5ZDk2NGVjNjE0MGI5NDE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmFlODUyZjJiMDkzNGQxNWEwMGNjZDc2ZjkxNjdjZTYuYmluZFBvcHVwKHBvcHVwXzljYjVmMmM0YmJiODQ0MDI4ZmFkNTQyNDcxZDA3OGIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmE0OWM0YmVlZjVjNDcxOTliMTYwYWI1ZWExZDlkZTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzE5NDQ0NDQ0LDE2LjI5MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTM4M2I1ZjAyNzBmNDU2OTk4YzNhYjBiOGI1ZTRmMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWZhNThkOGMyZjE1NDJiZTk1YzUxMTQ2NWQ3Y2JmYTEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFmYTU4ZDhjMmYxNTQyYmU5NWM1MTE0NjVkN2NiZmExIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFubmFrYXBlbGxlICgxNyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTM4M2I1ZjAyNzBmNDU2OTk4YzNhYjBiOGI1ZTRmMTguc2V0Q29udGVudChodG1sXzFmYTU4ZDhjMmYxNTQyYmU5NWM1MTE0NjVkN2NiZmExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmE0OWM0YmVlZjVjNDcxOTliMTYwYWI1ZWExZDlkZTQuYmluZFBvcHVwKHBvcHVwXzEzODNiNWYwMjcwZjQ1Njk5OGMzYWIwYjhiNWU0ZjE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDA4YmQ0MTkzNzliNGYzMmJiMzQ0MTRmNjZhMmEzYTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQxNjY2NjY3LDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODA1ODUyY2Y2NTAwNGZmMGIwMmM5MTZlNGZkY2JkNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzllM2ZiMjY2YjE2NDZhOTgxZjI5YWI0NTAzMGE4MWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM5ZTNmYjI2NmIxNjQ2YTk4MWYyOWFiNDUwMzBhODFlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5uYWtlbGxlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MDU4NTJjZjY1MDA0ZmYwYjAyYzkxNmU0ZmRjYmQ3Ny5zZXRDb250ZW50KGh0bWxfMzllM2ZiMjY2YjE2NDZhOTgxZjI5YWI0NTAzMGE4MWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMDhiZDQxOTM3OWI0ZjMyYmIzNDQxNGY2NmEyYTNhNS5iaW5kUG9wdXAocG9wdXBfODA1ODUyY2Y2NTAwNGZmMGIwMmM5MTZlNGZkY2JkNzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNjBjMDAzMDE4YTk0NDY5OGZmZTcwYjkwNGM5OTM2MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNDE2NjY2NjcsMTYuMzcyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xN2EzODc4N2EwNTE0YWIyYjM5NWJmYzQ5NTMzNGI1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NDExOTU2MjQzOGQ0NjAzOWI1NTM5ZmY3NmJmNThlMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTQxMTk1NjI0MzhkNDYwMzliNTUzOWZmNzZiZjU4ZTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQW5uYWtpcmNoZSAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTdhMzg3ODdhMDUxNGFiMmIzOTViZmM0OTUzMzRiNWEuc2V0Q29udGVudChodG1sXzU0MTE5NTYyNDM4ZDQ2MDM5YjU1MzlmZjc2YmY1OGUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTYwYzAwMzAxOGE5NDQ2OThmZmU3MGI5MDRjOTkzNjIuYmluZFBvcHVwKHBvcHVwXzE3YTM4Nzg3YTA1MTRhYjJiMzk1YmZjNDk1MzM0YjVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjcyMmQ3ZDJjZmYyNGRjZDhjZWNiZTExOWNiNzZjZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQ0NDQ0NDQ0LDE2LjM3MTM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmIzODZjOWY1NzhiNDcxZjhlOGFiZWM5MjkyZjk1MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjYyNDY3YTE0YTNmNGY3MTlkZmFkNGJkOTJkNDAxODcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2I2MjQ2N2ExNGEzZjRmNzE5ZGZhZDRiZDkyZDQwMTg3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFubmFrbG9zdGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiMzg2YzlmNTc4YjQ3MWY4ZThhYmVjOTI5MmY5NTI3LnNldENvbnRlbnQoaHRtbF9iNjI0NjdhMTRhM2Y0ZjcxOWRmYWQ0YmQ5MmQ0MDE4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y3MjJkN2QyY2ZmMjRkY2Q4Y2VjYmUxMTljYjc2Y2RhLmJpbmRQb3B1cChwb3B1cF8yYjM4NmM5ZjU3OGI0NzFmOGU4YWJlYzkyOTJmOTUyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RhOGE5YzU4YjIwNzQ0MTg4MjU1N2Q1NmEzZmRhY2FlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2OTQ0NDQ0NCwxNi4yMjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzNmI1ZmYwY2FiNzQ5NmVhNjljNDBlMGZhZjQ0YWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0MzAyODA5ODU0MzRhOWI4NzYzM2RhMGU2NDgzYWU0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81NDMwMjgwOTg1NDM0YTliODc2MzNkYTBlNjQ4M2FlNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQW5uYXN0YXR1ZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzZiNWZmMGNhYjc0OTZlYTY5YzQwZTBmYWY0NGFjNS5zZXRDb250ZW50KGh0bWxfNTQzMDI4MDk4NTQzNGE5Yjg3NjMzZGEwZTY0ODNhZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYThhOWM1OGIyMDc0NDE4ODI1NTdkNTZhM2ZkYWNhZS5iaW5kUG9wdXAocG9wdXBfNjM2YjVmZjBjYWI3NDk2ZWE2OWM0MGUwZmFmNDRhYzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xODcwYzlhMmY3OTE0NTE2OTgwN2Y3MTMxMTc1OGVkZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNDE2NjY2NjcsMTYuMzcxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lODMxODQ1ZDJkMjQ0MTQxYmNjNjk3MWY5ZmMyMzBmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YmQ5MWRlOWJmNjc0ZDYyYmRmMTlmNzkxMjRhODA5OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2JkOTFkZTliZjY3NGQ2MmJkZjE5Zjc5MTI0YTgwOTgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbm5lbmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODMxODQ1ZDJkMjQ0MTQxYmNjNjk3MWY5ZmMyMzBmOS5zZXRDb250ZW50KGh0bWxfN2JkOTFkZTliZjY3NGQ2MmJkZjE5Zjc5MTI0YTgwOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xODcwYzlhMmY3OTE0NTE2OTgwN2Y3MTMxMTc1OGVkZS5iaW5kUG9wdXAocG9wdXBfZTgzMTg0NWQyZDI0NDE0MWJjYzY5NzFmOWZjMjMwZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNGM1MWRiOTAxOWE0NTgwOTIxYjZlNjhjMmRmZDdiOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1LDE2LjQ0MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTY2ZGQxMTE4YzdhNDE0N2I1MzIyNTc3YjI0ZmE1NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzY5NmNlMTY3NWQxNDEyNzhlMGJlMWIxNjIwN2U3MTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM2OTZjZTE2NzVkMTQxMjc4ZTBiZTFiMTYyMDdlNzE2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW5uZW5ob2YgKDIyKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNjZkZDExMThjN2E0MTQ3YjUzMjI1NzdiMjRmYTU3MC5zZXRDb250ZW50KGh0bWxfMzY5NmNlMTY3NWQxNDEyNzhlMGJlMWIxNjIwN2U3MTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNGM1MWRiOTAxOWE0NTgwOTIxYjZlNjhjMmRmZDdiOS5iaW5kUG9wdXAocG9wdXBfYTY2ZGQxMTE4YzdhNDE0N2I1MzIyNTc3YjI0ZmE1NzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMjA4ZmY0NDNjZGE0OGRhYmY0M2I1ZTk5OWU1MDJjYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Njk0NDQ0NDQsMTYuMzk3Nzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTdkNjFmMmQxNmM0MDM3OTkyOGIxYTE5YjUyMjczNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTI2Yzc2ZDgxY2Q0NzU2OWMxMGFjOGY1YzVjOTVlZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODEyNmM3NmQ4MWNkNDc1NjljMTBhYzhmNWM1Yzk1ZWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbm5lbmhvZiAoMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU3ZDYxZjJkMTZjNDAzNzk5MjhiMWExOWI1MjI3MzQuc2V0Q29udGVudChodG1sXzgxMjZjNzZkODFjZDQ3NTY5YzEwYWM4ZjVjNWM5NWVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjIwOGZmNDQzY2RhNDhkYWJmNDNiNWU5OTllNTAyY2IuYmluZFBvcHVwKHBvcHVwXzhlN2Q2MWYyZDE2YzQwMzc5OTI4YjFhMTliNTIyNzM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTJmYzRlNDEwZDllNDJmMmEyMzU1NDhiMzFkYWViOTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzM4ODg4ODg5LDE2LjM3ODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjI5MmU5ZGNiZmFkNDA1YTljNDIyNGI4YjY1YWYyODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmMyNDk3ZTQ0ZjRkNGY3NDllYTExZDQ2NTY3NjM5ZTUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZjMjQ5N2U0NGY0ZDRmNzQ5ZWExMWQ0NjU2NzYzOWU1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBbnRpZmFzY2hpc3Rpc2NoZXMgRGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MjkyZTlkY2JmYWQ0MDVhOWM0MjI0YjhiNjVhZjI4NC5zZXRDb250ZW50KGh0bWxfZmMyNDk3ZTQ0ZjRkNGY3NDllYTExZDQ2NTY3NjM5ZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMmZjNGU0MTBkOWU0MmYyYTIzNTU0OGIzMWRhZWI5Ni5iaW5kUG9wdXAocG9wdXBfNjI5MmU5ZGNiZmFkNDA1YTljNDIyNGI4YjY1YWYyODQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jY2E2Y2YzMTdiMjU0Mjk5Yjc5ZDg1MTAxZDdkNTIyNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODMzMzMzMzMsMTYuMzUzNjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTI0NDM4NmZlYTA0YmU1OGUxNGNiOGFhY2FiNDU5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYjQwMzc1ZDk3YTU0M2MzOTJmOGVlOTU3ZTc0MjBiZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGI0MDM3NWQ5N2E1NDNjMzkyZjhlZTk1N2U3NDIwYmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbnRpc2VtaXRlbmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTI0NDM4NmZlYTA0YmU1OGUxNGNiOGFhY2FiNDU5YS5zZXRDb250ZW50KGh0bWxfMGI0MDM3NWQ5N2E1NDNjMzkyZjhlZTk1N2U3NDIwYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jY2E2Y2YzMTdiMjU0Mjk5Yjc5ZDg1MTAxZDdkNTIyNC5iaW5kUG9wdXAocG9wdXBfYjEyNDQzODZmZWEwNGJlNThlMTRjYjhhYWNhYjQ1OWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMGYxZGUxZmYyYTk0MTkzOGMxZmFlMWUwZTU2NmE5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Njk0NDQ0NDQsMTYuMjg5NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDlhYTJkYWFlNTY0MjI0OTYwNjAyMzhkYjM4YzFlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGZjNjAwN2YwNzk0OGI4OWZmOTZkMzZhNmE5ZDEyYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjBmYzYwMDdmMDc5NDhiODlmZjk2ZDM2YTZhOWQxMmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbnRvbi1GaWdsLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDlhYTJkYWFlNTY0MjI0OTYwNjAyMzhkYjM4YzFlMy5zZXRDb250ZW50KGh0bWxfMjBmYzYwMDdmMDc5NDhiODlmZjk2ZDM2YTZhOWQxMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMGYxZGUxZmYyYTk0MTkzOGMxZmFlMWUwZTU2NmE5NS5iaW5kUG9wdXAocG9wdXBfMGQ5YWEyZGFhZTU2NDIyNDk2MDYwMjM4ZGIzOGMxZTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81M2I5NThjMjhkYTA0M2Y4OGZjNDJlYWJjYjkzNzAxNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4NTgzMzMzMzMsMTYuMzQ2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MmVjYWFmM2UyYWI0NTI0YTNlMjM3ZTA2Y2I5NTllMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTdjOTQ1Yzk2YjE0NjQ1YTE5MDg1YWVhNzViNDBiZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjU3Yzk0NWM5NmIxNDY0NWExOTA4NWFlYTc1YjQwYmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbnRvbi1Hcm9saWctSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyZWNhYWYzZTJhYjQ1MjRhM2UyMzdlMDZjYjk1OWUyLnNldENvbnRlbnQoaHRtbF9iNTdjOTQ1Yzk2YjE0NjQ1YTE5MDg1YWVhNzViNDBiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUzYjk1OGMyOGRhMDQzZjg4ZmM0MmVhYmNiOTM3MDE0LmJpbmRQb3B1cChwb3B1cF84MmVjYWFmM2UyYWI0NTI0YTNlMjM3ZTA2Y2I5NTllMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiZDBiYWJhZDExNDQ4YmQ4Nzg3ODVkMzIyMmI4NmEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTY3Nzc3Nzc3OCwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5ZTQ5ZjYzM2E1YTRiMDFiYWE3NTdkNWQxYTAwZGY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4N2M2ZDk0MjU0MjQ2NTA5YjIxZWJmMDA0NGJiOTE5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ODdjNmQ5NDI1NDI0NjUwOWIyMWViZjAwNDRiYjkxOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFudG9uLUjDtmx6bC1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDllNDlmNjMzYTVhNGIwMWJhYTc1N2Q1ZDFhMDBkZjYuc2V0Q29udGVudChodG1sXzc4N2M2ZDk0MjU0MjQ2NTA5YjIxZWJmMDA0NGJiOTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWJkMGJhYmFkMTE0NDhiZDg3ODc4NWQzMjIyYjg2YTAuYmluZFBvcHVwKHBvcHVwXzQ5ZTQ5ZjYzM2E1YTRiMDFiYWE3NTdkNWQxYTAwZGY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTU1ZTEzNDY4NmY5NDM4NzhhODAwN2QyYmIyNDM0ZjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODI3Nzc3Nzc4LDE2LjM1NDcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTc3MjNhNjZjMDgzNDE1ZThkZmZmZjczMDUwOWNmMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWI4ZjA3YzJkYjI5NGE3OTk5OGY2NDYyZDJhMjhlMmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ViOGYwN2MyZGIyOTRhNzk5OThmNjQ2MmQyYTI4ZTJhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW50b24tS2F0c2NoaW5rYS1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTc3MjNhNjZjMDgzNDE1ZThkZmZmZjczMDUwOWNmMDAuc2V0Q29udGVudChodG1sX2ViOGYwN2MyZGIyOTRhNzk5OThmNjQ2MmQyYTI4ZTJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTU1ZTEzNDY4NmY5NDM4NzhhODAwN2QyYmIyNDM0ZjYuYmluZFBvcHVwKHBvcHVwX2U3NzIzYTY2YzA4MzQxNWU4ZGZmZmY3MzA1MDljZjAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2FmODllNGFlZmJhNDJkNzk2MTkzNDg4MTE5ZjUzNmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTk0NDQ0NDQ0LDE2LjQwMTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODFlOGJiZDk0Y2Q1NDRmNzhmZWM4YjRhMzIzMDgyZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFjYWY2ODk2ZDc3NGJmNzg0MWE1NGY4ODkzYWQ0NWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UxY2FmNjg5NmQ3NzRiZjc4NDFhNTRmODg5M2FkNDVlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW50b24tS29obC1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFlOGJiZDk0Y2Q1NDRmNzhmZWM4YjRhMzIzMDgyZTMuc2V0Q29udGVudChodG1sX2UxY2FmNjg5NmQ3NzRiZjc4NDFhNTRmODg5M2FkNDVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2FmODllNGFlZmJhNDJkNzk2MTkzNDg4MTE5ZjUzNmIuYmluZFBvcHVwKHBvcHVwXzgxZThiYmQ5NGNkNTQ0Zjc4ZmVjOGI0YTMyMzA4MmUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmUzNWZkYzAzMmQxNDg0MjllMmYyOWRiZTZmN2ViMDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTI1LDE2LjMyNjk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjUxNzk4NTUzYTM1NGRiOThiMmVhNzY3NmUwMTljMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjk1MDRkODQ4ZjllNGMzMDhlMjZkOTllNmEwZmVmYjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y5NTA0ZDg0OGY5ZTRjMzA4ZTI2ZDk5ZTZhMGZlZmI3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW50b24tTWF0b3VyZWstSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1MTc5ODU1M2EzNTRkYjk4YjJlYTc2NzZlMDE5YzA1LnNldENvbnRlbnQoaHRtbF9mOTUwNGQ4NDhmOWU0YzMwOGUyNmQ5OWU2YTBmZWZiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlMzVmZGMwMzJkMTQ4NDI5ZTJmMjlkYmU2ZjdlYjA2LmJpbmRQb3B1cChwb3B1cF8yNTE3OTg1NTNhMzU0ZGI5OGIyZWE3Njc2ZTAxOWMwNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlmYzJkOTIzNWE1YzQ5Yzk4Zjk1YzNjMTc5YzJkZDIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIxMTExMTExMSwxNi4zMDQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzZmFiNDE5NzlmZTQxNTY4NWE3OGFiYzcwNWQ4NmVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkNDU4ZjJkY2Q2OTQyM2ViYjFkMDM0ZTI4NzNlNTIzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ZDQ1OGYyZGNkNjk0MjNlYmIxZDAzNGUyODczZTUyMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQW50b24tUHJva3NjaC1HZWRlbmtwZmVpbGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzZmFiNDE5NzlmZTQxNTY4NWE3OGFiYzcwNWQ4NmVlLnNldENvbnRlbnQoaHRtbF80ZDQ1OGYyZGNkNjk0MjNlYmIxZDAzNGUyODczZTUyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlmYzJkOTIzNWE1YzQ5Yzk4Zjk1YzNjMTc5YzJkZDIzLmJpbmRQb3B1cChwb3B1cF84M2ZhYjQxOTc5ZmU0MTU2ODVhNzhhYmM3MDVkODZlZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY4MGI2NWU3MjgwNjQ3YTI4YTgwNzNkMGM5OTE4MDZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTM2MTExMTExMSwxNi4yNDc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlMGNjYTQ3MDI1MDQxZTViMzAxNGQ2ZTc3YmU1MWFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5MTUyNTdhNmFjZTQxMzliZmJiODY4NjY3MzAxNDBhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85OTE1MjU3YTZhY2U0MTM5YmZiYjg2ODY2NzMwMTQwYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFudG9uLVByb2tzY2gtSW5zdGl0dXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWUwY2NhNDcwMjUwNDFlNWIzMDE0ZDZlNzdiZTUxYWUuc2V0Q29udGVudChodG1sXzk5MTUyNTdhNmFjZTQxMzliZmJiODY4NjY3MzAxNDBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjgwYjY1ZTcyODA2NDdhMjhhODA3M2QwYzk5MTgwNmYuYmluZFBvcHVwKHBvcHVwXzFlMGNjYTQ3MDI1MDQxZTViMzAxNGQ2ZTc3YmU1MWFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmQ0MmQ3NjMwMDc3NDMzMzhkMDBlOTA2ZGVjZWY5NmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTM2MTExMTExLDE2LjM1MTM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDk1ZjdhYzEzMzMzNGM4ZTg1Yjg1NjJmMWZiZTBjM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzNkZTAyNmVkYjAyNDk3OGI3MTRmODJmOGNjZjhhYTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzczZGUwMjZlZGIwMjQ5NzhiNzE0ZjgyZjhjY2Y4YWEwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW50b24tUHJva3NjaC1Xb2huaGF1c2FubGFnZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTVmN2FjMTMzMzM0YzhlODViODU2MmYxZmJlMGMzYS5zZXRDb250ZW50KGh0bWxfNzNkZTAyNmVkYjAyNDk3OGI3MTRmODJmOGNjZjhhYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZDQyZDc2MzAwNzc0MzMzOGQwMGU5MDZkZWNlZjk2YS5iaW5kUG9wdXAocG9wdXBfZDk1ZjdhYzEzMzMzNGM4ZTg1Yjg1NjJmMWZiZTBjM2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOTViMmVhOWIxZjU0OWViYThjOTgzNGRhODhmMGZjZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3Nzc3Nzc3NzgsMTYuNDEyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWVlMDViYWY0NWM0MGNmYTRlNDE4NjQyMjk4Y2VlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzNmM2RhZDMzNWY0YWFhODFjNDFjMDhiYjZmYTdjZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDczZjNkYWQzMzVmNGFhYTgxYzQxYzA4YmI2ZmE3Y2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbnRvbi1Sb2hyaG9mZXItSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlZWUwNWJhZjQ1YzQwY2ZhNGU0MTg2NDIyOThjZWU0LnNldENvbnRlbnQoaHRtbF80NzNmM2RhZDMzNWY0YWFhODFjNDFjMDhiYjZmYTdjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI5NWIyZWE5YjFmNTQ5ZWJhOGM5ODM0ZGE4OGYwZmNmLmJpbmRQb3B1cChwb3B1cF9jZWVlMDViYWY0NWM0MGNmYTRlNDE4NjQyMjk4Y2VlNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRhYTYzZTYxY2ZlZTQ3ZWQ5MDFmMTM5MWIyODUxMmQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4ODg4ODg4OSwxNi4zNzk0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxMDBmZWQwNTRmMjQ0NTRhNTFiOWVkOTM4ZDU5Y2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5OTJkYjc1OWNkOTQ3ZTI4YTEyYTQ3YmQzZGMwMmIzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80OTkyZGI3NTljZDk0N2UyOGExMmE0N2JkM2RjMDJiMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFudG9uLVNjaG1pZC1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTEwMGZlZDA1NGYyNDQ1NGE1MWI5ZWQ5MzhkNTljYWYuc2V0Q29udGVudChodG1sXzQ5OTJkYjc1OWNkOTQ3ZTI4YTEyYTQ3YmQzZGMwMmIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGFhNjNlNjFjZmVlNDdlZDkwMWYxMzkxYjI4NTEyZDQuYmluZFBvcHVwKHBvcHVwXzkxMDBmZWQwNTRmMjQ0NTRhNTFiOWVkOTM4ZDU5Y2FmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGZmNWI5OWJlNjVhNDc4MTkzYzI3ZTAyNDMyMmYyMjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzM4ODg4ODg5LDE2LjM2ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Q4MTk2ZTQ4ZWMxNGZkMDhlNzhhNjA3ZTQ3YTE4ODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2IwZTE2OGQyYzMzNDhkMWJiNGU0ZmE2ODBmYzA0YzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NiMGUxNjhkMmMzMzQ4ZDFiYjRlNGZhNjgwZmMwNGMxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW50b24tU2NobWlkLUhvZiAoMjApPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkODE5NmU0OGVjMTRmZDA4ZTc4YTYwN2U0N2ExODgxLnNldENvbnRlbnQoaHRtbF9jYjBlMTY4ZDJjMzM0OGQxYmI0ZTRmYTY4MGZjMDRjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RmZjViOTliZTY1YTQ3ODE5M2MyN2UwMjQzMjJmMjIzLmJpbmRQb3B1cChwb3B1cF9jZDgxOTZlNDhlYzE0ZmQwOGU3OGE2MDdlNDdhMTg4MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZhZGU1ODI5MzU1ODRlMGNhOTViZDhlZDZhM2M0MmMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgsMTYuNDIxMzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGI5MWNkYTA0MzI0MWUzYmUzYWJmZDU1MGIzOTFjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzcxYjQyNzUzZTE0ZWVlYWY5MWZiMjExMTgxN2I1OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTc3MWI0Mjc1M2UxNGVlZWFmOTFmYjIxMTE4MTdiNTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbnRvbi1TY2hyYW1tZWwtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkYjkxY2RhMDQzMjQxZTNiZTNhYmZkNTUwYjM5MWNiLnNldENvbnRlbnQoaHRtbF9lNzcxYjQyNzUzZTE0ZWVlYWY5MWZiMjExMTgxN2I1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZhZGU1ODI5MzU1ODRlMGNhOTViZDhlZDZhM2M0MmMyLmJpbmRQb3B1cChwb3B1cF8yZGI5MWNkYTA0MzI0MWUzYmUzYWJmZDU1MGIzOTFjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEwM2ZkZDhkMzIxNzQ0YmI4MzJkMjJlNjAxZjA0ZTRlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg0NDQ0NDQ0NCwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2Mjc0OGJiOTEyMDQ2MGY5ZmQzNTU0ZWU4YjY1NmNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjZGFlZmE0YzZkZTQyYTA5MDliNTAzMzdlYjZlZTRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84Y2RhZWZhNGM2ZGU0MmEwOTA5YjUwMzM3ZWI2ZWU0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFudG9uaWUtQWx0LUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjI3NDhiYjkxMjA0NjBmOWZkMzU1NGVlOGI2NTZjZi5zZXRDb250ZW50KGh0bWxfOGNkYWVmYTRjNmRlNDJhMDkwOWI1MDMzN2ViNmVlNGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMDNmZGQ4ZDMyMTc0NGJiODMyZDIyZTYwMWYwNGU0ZS5iaW5kUG9wdXAocG9wdXBfNzYyNzQ4YmI5MTIwNDYwZjlmZDM1NTRlZThiNjU2Y2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNTFkODU0M2ZiMTM0YjdkOTU1MzZlYzc4OTJlMTZkMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2Njk0NDQ0NDQsMTYuMzY3MjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2E3OGE4YTUyODQ0Y2EyOGVlNGNmNGZhNmY0ZDgxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YjhmODQ1ZTQwZDE0ODk3OTY4NDdiZTA3MWQ4YzZlZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGI4Zjg0NWU0MGQxNDg5Nzk2ODQ3YmUwNzFkOGM2ZWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBbnRvbmllLUFsdC1Ib2YgKG5ldSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdhNzhhOGE1Mjg0NGNhMjhlZTRjZjRmYTZmNGQ4MWEuc2V0Q29udGVudChodG1sXzhiOGY4NDVlNDBkMTQ4OTc5Njg0N2JlMDcxZDhjNmVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjUxZDg1NDNmYjEzNGI3ZDk1NTM2ZWM3ODkyZTE2ZDMuYmluZFBvcHVwKHBvcHVwX2I3YTc4YThhNTI4NDRjYTI4ZWU0Y2Y0ZmE2ZjRkODFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGY1YTdmYmRlMjIzNDk4YWJmNWZiMWI5YzQ1N2NmY2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTQ0NDQ0NDQ0LDE2LjM1MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FlYWZmMjYxY2ZjNDEzMWI5ZWZhZDcyY2I0ZGY4YjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAyMWI3ODdhMmI5NDVlZGI2ZGYzNjFmNzI3Yzg4NTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMwMjFiNzg3YTJiOTQ1ZWRiNmRmMzYxZjcyN2M4ODU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFudG9uaXVza2FwZWxsZSAoOCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2FlYWZmMjYxY2ZjNDEzMWI5ZWZhZDcyY2I0ZGY4YjIuc2V0Q29udGVudChodG1sXzMwMjFiNzg3YTJiOTQ1ZWRiNmRmMzYxZjcyN2M4ODU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGY1YTdmYmRlMjIzNDk4YWJmNWZiMWI5YzQ1N2NmY2EuYmluZFBvcHVwKHBvcHVwXzNhZWFmZjI2MWNmYzQxMzFiOWVmYWQ3MmNiNGRmOGIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWM2ODZiMmQ0M2EyNDcxYThlMjQ3NDg3NTVlMzhiY2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTA1NTU1NTU2LDE2LjMwMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzM1OTQxYjY4OGNjNGQzMjgwODRhZGY0MDJmYTEyNjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDZjODU2MWZhYTNiNDAzMGIwMTdlNmNhY2JkZDc4ZjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q2Yzg1NjFmYWEzYjQwMzBiMDE3ZTZjYWNiZGQ3OGY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBbnRvbml1c3N0YXR1ZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzU5NDFiNjg4Y2M0ZDMyODA4NGFkZjQwMmZhMTI2Ny5zZXRDb250ZW50KGh0bWxfZDZjODU2MWZhYTNiNDAzMGIwMTdlNmNhY2JkZDc4ZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lYzY4NmIyZDQzYTI0NzFhOGUyNDc0ODc1NWUzOGJjZi5iaW5kUG9wdXAocG9wdXBfNzM1OTQxYjY4OGNjNGQzMjgwODRhZGY0MDJmYTEyNjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NjhlODA1NjQ3YTA0M2JjYWQ5NTQ1NDcyYzUzYzZkOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MDgzMzMzMzMsMTYuMzc2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNGU2MDVlMTM2YTk0NTY0OGY4ZjFkMTU2NzkzMjc0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTliZjVkMWFiZWE0YWM0YmI3YTA1MzE4ZTlhZjg4NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzE5YmY1ZDFhYmVhNGFjNGJiN2EwNTMxOGU5YWY4ODQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQW50b25raXJjaGUgKDEwKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGU2MDVlMTM2YTk0NTY0OGY4ZjFkMTU2NzkzMjc0Mi5zZXRDb250ZW50KGh0bWxfNzE5YmY1ZDFhYmVhNGFjNGJiN2EwNTMxOGU5YWY4ODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NjhlODA1NjQ3YTA0M2JjYWQ5NTQ1NDcyYzUzYzZkOC5iaW5kUG9wdXAocG9wdXBfMDRlNjA1ZTEzNmE5NDU2NDhmOGYxZDE1Njc5MzI3NDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81OWU4OGRhNjU2NjI0MzRmODQ3YTRkYTkxNTQxMWNhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5OTQ0NDQ0NDQsMTYuMzI5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZmQ1ZThmNWEwMzk0NzNmOTBjYjNmYTBmNmI2ZWQ2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDc5YWVhMzU2YTg0Y2EyOWNhMTBjNjdjNWNlMTQwMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmQ3OWFlYTM1NmE4NGNhMjljYTEwYzY3YzVjZTE0MDMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQW50b25raXJjaGUgKDE1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZmQ1ZThmNWEwMzk0NzNmOTBjYjNmYTBmNmI2ZWQ2MC5zZXRDb250ZW50KGh0bWxfZmQ3OWFlYTM1NmE4NGNhMjljYTEwYzY3YzVjZTE0MDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OWU4OGRhNjU2NjI0MzRmODQ3YTRkYTkxNTQxMWNhZi5iaW5kUG9wdXAocG9wdXBfNmZkNWU4ZjVhMDM5NDczZjkwY2IzZmEwZjZiNmVkNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NTZlMDk2NGIzYWI0YTAxOWY1NDZkZTJlZTU5MzJlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNTI3Nzc3NzgsMTYuMzU3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjU4MjJmOTViNDE0YzA0YmRiNGRjYWNmYzEwMWQ0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzliN2Q5OThiNzU0YjY5YmU1ZTBmNTdkNzJiYjM0YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2M5YjdkOTk4Yjc1NGI2OWJlNWUwZjU3ZDcyYmIzNGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQW50d2VycGVuZXIgQWx0YXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI1ODIyZjk1YjQxNGMwNGJkYjRkY2FjZmMxMDFkNDguc2V0Q29udGVudChodG1sX2NjOWI3ZDk5OGI3NTRiNjliZTVlMGY1N2Q3MmJiMzRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDU2ZTA5NjRiM2FiNGEwMTlmNTQ2ZGUyZWU1OTMyZTYuYmluZFBvcHVwKHBvcHVwX2IyNTgyMmY5NWI0MTRjMDRiZGI0ZGNhY2ZjMTAxZDQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTA5NDg1Zjc5OWE2NDU0OWJkZmQyYmVlNTIyYWM1OTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzAyNzc3Nzc4LDE2LjMyNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzNkNTQzNDQ3NjQwNGZlYTkyMGJhY2ZmMjZmNmQ0MmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThjNDExMzViMWEwNDhkN2E4NzIzZjRhZmIzMGQ5ZjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU4YzQxMTM1YjFhMDQ4ZDdhODcyM2Y0YWZiMzBkOWYyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQW56ZW5ncnViZXItVGhlYXRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83M2Q1NDM0NDc2NDA0ZmVhOTIwYmFjZmYyNmY2ZDQyYS5zZXRDb250ZW50KGh0bWxfNThjNDExMzViMWEwNDhkN2E4NzIzZjRhZmIzMGQ5ZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MDk0ODVmNzk5YTY0NTQ5YmRmZDJiZWU1MjJhYzU5MC5iaW5kUG9wdXAocG9wdXBfNzNkNTQzNDQ3NjQwNGZlYTkyMGJhY2ZmMjZmNmQ0MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NTY0NGZlNmYyZTQ0ODMyOGMzY2M0NTRiNWM0NWVmMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjY2NjY2NjcsMTYuMzU3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTRjNDI2OGY1NGU0NWQ2YjY3Njg5YTMzNTdiMDMwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTA1ZjE5MjQzOGY0OGI2ODNkYjQ4NTM0NjU3NTllMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNGUwNWYxOTI0MzhmNDhiNjgzZGI0ODUzNDY1NzU5ZTEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEFuemVuZ3J1YmVyZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTRjNDI2OGY1NGU0NWQ2YjY3Njg5YTMzNTdiMDMwYy5zZXRDb250ZW50KGh0bWxfNGUwNWYxOTI0MzhmNDhiNjgzZGI0ODUzNDY1NzU5ZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTY0NGZlNmYyZTQ0ODMyOGMzY2M0NTRiNWM0NWVmMi5iaW5kUG9wdXAocG9wdXBfOTU0YzQyNjhmNTRlNDVkNmI2NzY4OWEzMzU3YjAzMGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZDRjZGEyZGYzMGM0M2EzOTIzY2YyNDQ4NDBmNzU5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5LDE2LjMwNDQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFlNzk2ZGVjMGU0NGQzZDlhODdlYjZmMjQ0NWM1YWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDRjY2NjZjFlMDlkNDc1ZTgwMjUxNmQ0NmM1MmM1MDggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA0Y2NjY2YxZTA5ZDQ3NWU4MDI1MTZkNDZjNTJjNTA4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXBvbGxvLUtlcnplbmZhYnJpayAoMTQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxZTc5NmRlYzBlNDRkM2Q5YTg3ZWI2ZjI0NDVjNWFjLnNldENvbnRlbnQoaHRtbF8wNGNjY2NmMWUwOWQ0NzVlODAyNTE2ZDQ2YzUyYzUwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFkNGNkYTJkZjMwYzQzYTM5MjNjZjI0NDg0MGY3NTliLmJpbmRQb3B1cChwb3B1cF8wMWU3OTZkZWMwZTQ0ZDNkOWE4N2ViNmYyNDQ1YzVhYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIwNzllZTNkZTI1NDRlOGU5ZGQ5NDU5ZjU3MzZjYWE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4ODg4ODg4OSwxNi4zNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGE1MGU4ZjIyNjIxNDMyMThmZWE0MTg0N2RkNjU4MTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjRjNWViNWZlNzZlNDc5OWFmOTc0OTg5NDYwZjQ5MWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y0YzVlYjVmZTc2ZTQ3OTlhZjk3NDk4OTQ2MGY0OTFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXBvbGxvLUtlcnplbmZhYnJpayAoNyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGE1MGU4ZjIyNjIxNDMyMThmZWE0MTg0N2RkNjU4MTkuc2V0Q29udGVudChodG1sX2Y0YzVlYjVmZTc2ZTQ3OTlhZjk3NDk4OTQ2MGY0OTFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjA3OWVlM2RlMjU0NGU4ZTlkZDk0NTlmNTczNmNhYTQuYmluZFBvcHVwKHBvcHVwXzBhNTBlOGYyMjYyMTQzMjE4ZmVhNDE4NDdkZDY1ODE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTRkNTcxMTAyMzM4NDcxMjhmZTEwYmJmZjRmYmIxNWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTkxNjY2NjY3LDE2LjM5NjM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRmMjJiZGUzZmRmNDE2NmIwZjE4ZGY5OWNkNTJiZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzIwNjc0M2VjZmNhNDdmM2JlMjY2NTE4OTBiMDE1ZWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcyMDY3NDNlY2ZjYTQ3ZjNiZTI2NjUxODkwYjAxNWVjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFwb2xsby1TY2hhdTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGYyMmJkZTNmZGY0MTY2YjBmMThkZjk5Y2Q1MmJmYS5zZXRDb250ZW50KGh0bWxfNzIwNjc0M2VjZmNhNDdmM2JlMjY2NTE4OTBiMDE1ZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NGQ1NzExMDIzMzg0NzEyOGZlMTBiYmZmNGZiYjE1YS5iaW5kUG9wdXAocG9wdXBfMDRmMjJiZGUzZmRmNDE2NmIwZjE4ZGY5OWNkNTJiZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81Njg5OGE5OTEyYzI0ZWE5ODNiZDZmODE0NzZhMGVlOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzM1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Yjg3OWQ3YzE5MTY0MDYwYmZkNTQ3ZGZjZDYxODgxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTE3ZDBkNzI1MGU0MzlmOWVjYTEwYmM2NjBhYzQzMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjExN2QwZDcyNTBlNDM5ZjllY2ExMGJjNjYwYWM0MzEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcG9sbG9zYWFsICgxNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGI4NzlkN2MxOTE2NDA2MGJmZDU0N2RmY2Q2MTg4MTguc2V0Q29udGVudChodG1sXzYxMTdkMGQ3MjUwZTQzOWY5ZWNhMTBiYzY2MGFjNDMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTY4OThhOTkxMmMyNGVhOTgzYmQ2ZjgxNDc2YTBlZTguYmluZFBvcHVwKHBvcHVwXzRiODc5ZDdjMTkxNjQwNjBiZmQ1NDdkZmNkNjE4ODE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWUyMjJmYzY1MTE2NGY2OGI4N2JkMmE1ZGI2NjBiMTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTg4ODg4ODg5LDE2LjM0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OGQ3ZGEwMjVmM2M0NzkzOTgzZmE0MjQ1YmE0N2YxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDJlYmZmZTdlYWE0YTk3YmY4ZGEyNmUzZGQ5OWNjYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGQyZWJmZmU3ZWFhNGE5N2JmOGRhMjZlM2RkOTljY2EiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcG9sbG9zYWFsICg3KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OGQ3ZGEwMjVmM2M0NzkzOTgzZmE0MjQ1YmE0N2YxZC5zZXRDb250ZW50KGh0bWxfMGQyZWJmZmU3ZWFhNGE5N2JmOGRhMjZlM2RkOTljY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZTIyMmZjNjUxMTY0ZjY4Yjg3YmQyYTVkYjY2MGIxMC5iaW5kUG9wdXAocG9wdXBfNjhkN2RhMDI1ZjNjNDc5Mzk4M2ZhNDI0NWJhNDdmMWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Mzk2ZTAwN2Y5YjU0OGViYjI3MTc2OGRkOGI2NWFjYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NzIyMjIyMjIsMTYuMzUzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZTI1N2Q5ODM5N2M0YWRlODFmOTA3MDU2MDU1YmM0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzI2MTFkYTFhOWQ0Y2M4ODZiMTJmNDc1YzIwNWZlYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTcyNjExZGExYTlkNGNjODg2YjEyZjQ3NWMyMDVmZWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcG9sbG90aGVhdGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlMjU3ZDk4Mzk3YzRhZGU4MWY5MDcwNTYwNTViYzQ4LnNldENvbnRlbnQoaHRtbF9lNzI2MTFkYTFhOWQ0Y2M4ODZiMTJmNDc1YzIwNWZlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYzOTZlMDA3ZjliNTQ4ZWJiMjcxNzY4ZGQ4YjY1YWNiLmJpbmRQb3B1cChwb3B1cF82ZTI1N2Q5ODM5N2M0YWRlODFmOTA3MDU2MDU1YmM0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzliZTY5N2FjNjBmZDRmM2U4NmUwZWRmMjYwNjVjMjAzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk3Nzc3Nzc3OCwxNi4zOTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxZTliN2M1ZmE5YzQzZDZhOWRlZTdmODBiM2U5MDc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMTg4NmQ1YTc3ZjRiZmQ4MzkwNWY1YWJmODlmMGU1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYjE4ODZkNWE3N2Y0YmZkODM5MDVmNWFiZjg5ZjBlNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFwb3N0ZWxob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFlOWI3YzVmYTljNDNkNmE5ZGVlN2Y4MGIzZTkwNzYuc2V0Q29udGVudChodG1sXzBiMTg4NmQ1YTc3ZjRiZmQ4MzkwNWY1YWJmODlmMGU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWJlNjk3YWM2MGZkNGYzZTg2ZTBlZGYyNjA2NWMyMDMuYmluZFBvcHVwKHBvcHVwXzQxZTliN2M1ZmE5YzQzZDZhOWRlZTdmODBiM2U5MDc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjdkOTc5YjZkMjUyNDAxMWIxY2Y2OTc1M2RhNjdkZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjU1NTU1NTU2LDE2LjM3MDI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTIzNjk5OTY5ZjZkNDIxNmE3OTY1YmFhZjJiMzZhYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDE4MjA3NmNjODdkNGQzN2IwNDM5ZGI5Y2NiOWRlMWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QxODIwNzZjYzg3ZDRkMzdiMDQzOWRiOWNjYjlkZTFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFwb3N0ZWxraXJjaGUgKDEwKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMjM2OTk5NjlmNmQ0MjE2YTc5NjViYWFmMmIzNmFjMS5zZXRDb250ZW50KGh0bWxfZDE4MjA3NmNjODdkNGQzN2IwNDM5ZGI5Y2NiOWRlMWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iN2Q5NzliNmQyNTI0MDExYjFjZjY5NzUzZGE2N2RmYy5iaW5kUG9wdXAocG9wdXBfZTIzNjk5OTY5ZjZkNDIxNmE3OTY1YmFhZjJiMzZhYzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NThiZjJhNjJlNTk0Y2YwODhiNjY0ZTU0NWI3NDViZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MTM4ODg4ODksMTYuMzcyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZGQyYmYzNjBjNmY0NTA0YjNmMjBjNTlkNTQ3ZDkxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDc4ZTllNmRjODg0ZjFjOTg0YjFjMTAyMGVlYzJmZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTQ3OGU5ZTZkYzg4NGYxYzk4NGIxYzEwMjBlZWMyZmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcG9zdG9saXNjaGUgTnVudGlhdHVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkZDJiZjM2MGM2ZjQ1MDRiM2YyMGM1OWQ1NDdkOTFjLnNldENvbnRlbnQoaHRtbF9hNDc4ZTllNmRjODg0ZjFjOTg0YjFjMTAyMGVlYzJmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY1OGJmMmE2MmU1OTRjZjA4OGI2NjRlNTQ1Yjc0NWJlLmJpbmRQb3B1cChwb3B1cF84ZGQyYmYzNjBjNmY0NTA0YjNmMjBjNTlkNTQ3ZDkxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YzODI3NzdjY2VkOTQ1MjJhYjdhZTBiMjdhYjBmYmFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc0NzIyMjIyMiwxNi4zODA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5ODIxMmI4MWE5YzRlZTI4YjY2ODQ2N2IzZWNhZTJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwYTE1Yjc4MDBlYjRkN2RiZDNhNjcyM2Y3MTI0ZWVmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82MGExNWI3ODAwZWI0ZDdkYmQzYTY3MjNmNzEyNGVlZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFwb3RoZWtlIHp1bSBnw7Z0dGxpY2hlbiBIZWlsYW5kPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ODIxMmI4MWE5YzRlZTI4YjY2ODQ2N2IzZWNhZTJiLnNldENvbnRlbnQoaHRtbF82MGExNWI3ODAwZWI0ZDdkYmQzYTY3MjNmNzEyNGVlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YzODI3NzdjY2VkOTQ1MjJhYjdhZTBiMjdhYjBmYmFmLmJpbmRQb3B1cChwb3B1cF85OTgyMTJiODFhOWM0ZWUyOGI2Njg0NjdiM2VjYWUyYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FhMzY5YWIzMGIyOTQ4ZWRhYmI3MWE4ZGQ0ZTI4YWEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjY0NzIyMjIyMiwxNi4zOTIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyZWRiMzBlNGNmNDRhZGM5ZTIxODgwZjg5YmQxMjJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2YTA5ZjMzOWE0NDQzOTQ4MGQ2YTMwNGQ1ZWI5MTg4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83NmEwOWYzMzlhNDQ0Mzk0ODBkNmEzMDRkNWViOTE4OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFwcGVsLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMmVkYjMwZTRjZjQ0YWRjOWUyMTg4MGY4OWJkMTIyYi5zZXRDb250ZW50KGh0bWxfNzZhMDlmMzM5YTQ0NDM5NDgwZDZhMzA0ZDVlYjkxODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYTM2OWFiMzBiMjk0OGVkYWJiNzFhOGRkNGUyOGFhMC5iaW5kUG9wdXAocG9wdXBfYjJlZGIzMGU0Y2Y0NGFkYzllMjE4ODBmODliZDEyMmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZGExYjAwNjEzNzg0MTk3ODBiNjQyMDU4ODZlNmNhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4OTE2NjY2NjcsMTYuMzY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTU1ZTZkM2E4YzI0YTdhOTRkZDE4Y2FiZGFhYzBlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Y2FjODA2YzY0NjE0NTQ5OThiMzhiNWY1MzBiYzQyYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmNhYzgwNmM2NDYxNDU0OTk4YjM4YjVmNTMwYmM0MmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcHBvbnlpcGFsYWlzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlNTVlNmQzYThjMjRhN2E5NGRkMThjYWJkYWFjMGU2LnNldENvbnRlbnQoaHRtbF82Y2FjODA2YzY0NjE0NTQ5OThiMzhiNWY1MzBiYzQyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNkYTFiMDA2MTM3ODQxOTc4MGI2NDIwNTg4NmU2Y2FlLmJpbmRQb3B1cChwb3B1cF81ZTU1ZTZkM2E4YzI0YTdhOTRkZDE4Y2FiZGFhYzBlNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MxMWExY2VjOWYyMTQyOTY5OTZlZGQwMDcwMTAxNzJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgyNzc3Nzc3OCwxNi4zNDUyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1ZjY3OTExODFiZDQ0OGE4ZmQ0NDU2NTg0MjJhNTQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1YTMzNzBhNTE5MTQwZmY4MDNhZDBkNDhiYmE3MDkzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NWEzMzcwYTUxOTE0MGZmODAzYWQwZDQ4YmJhNzA5MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFxdWFyZWxsaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1ZjY3OTExODFiZDQ0OGE4ZmQ0NDU2NTg0MjJhNTQ4LnNldENvbnRlbnQoaHRtbF84NWEzMzcwYTUxOTE0MGZmODAzYWQwZDQ4YmJhNzA5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MxMWExY2VjOWYyMTQyOTY5OTZlZGQwMDcwMTAxNzJmLmJpbmRQb3B1cChwb3B1cF9mNWY2NzkxMTgxYmQ0NDhhOGZkNDQ1NjU4NDIyYTU0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAyN2RlM2I3YzZiZDRiMDI5MDBiNWQ0MTQzZjE5OGZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgzMDU1NTU1NiwxNi4zMDAyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5ZDM0NDQxNjljMjQzMWNiYTkxOTAxZTc5MjQ0YjhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5YzkwZWM1MTNmZTRiZWFiMzI5Nzc2NWM0MmZiNjE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kOWM5MGVjNTEzZmU0YmVhYjMyOTc3NjVjNDJmYjYxNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFxdWFyaWVuLSB1bmQgVGVycmFyaWVuaGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOWQzNDQ0MTY5YzI0MzFjYmE5MTkwMWU3OTI0NGI4ZC5zZXRDb250ZW50KGh0bWxfZDljOTBlYzUxM2ZlNGJlYWIzMjk3NzY1YzQyZmI2MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMjdkZTNiN2M2YmQ0YjAyOTAwYjVkNDE0M2YxOThmYi5iaW5kUG9wdXAocG9wdXBfMzlkMzQ0NDE2OWMyNDMxY2JhOTE5MDFlNzkyNDRiOGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZjYzMmNhNTNlYzE0Y2FmYmI3N2FkYmJhYzZkYTUyOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MTY2NjY2NjcsMTYuMzY1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmQ2YmE5ODM5NzE0N2JmYTAxZjgxYjg4YTkwZDY2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMGUwNGQ2MmE5ZTY0ODY0YWVkNWU0OTc5ZDNkZjk5YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzBlMDRkNjJhOWU2NDg2NGFlZDVlNDk3OWQzZGY5OWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRlci0gdW5kIEJlYW10ZW53b2huaMOkdXNlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YmQ2YmE5ODM5NzE0N2JmYTAxZjgxYjg4YTkwZDY2MS5zZXRDb250ZW50KGh0bWxfMzBlMDRkNjJhOWU2NDg2NGFlZDVlNDk3OWQzZGY5OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZjYzMmNhNTNlYzE0Y2FmYmI3N2FkYmJhYzZkYTUyOC5iaW5kUG9wdXAocG9wdXBfNmJkNmJhOTgzOTcxNDdiZmEwMWY4MWI4OGE5MGQ2NjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hODAzM2QzZjcyNTI0NTBhYTkxNWZiZDgxYjJlOWNhNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNTgzMzMzMzMsMTYuMzUzNjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNGRlMmYyYzU0ZmM0YTM3OTNjNjlkYjBiZDIwMzc2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDljOWE0OTRmYzk0ODA0YjJhYTAzZWNiYzdkZWJjZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjQ5YzlhNDk0ZmM5NDgwNGIyYWEwM2VjYmM3ZGViY2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRlcmhlaW0gQWxzZXJncnVuZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNGRlMmYyYzU0ZmM0YTM3OTNjNjlkYjBiZDIwMzc2My5zZXRDb250ZW50KGh0bWxfNjQ5YzlhNDk0ZmM5NDgwNGIyYWEwM2VjYmM3ZGViY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hODAzM2QzZjcyNTI0NTBhYTkxNWZiZDgxYjJlOWNhNy5iaW5kUG9wdXAocG9wdXBfZDRkZTJmMmM1NGZjNGEzNzkzYzY5ZGIwYmQyMDM3NjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MDFlOGVkMjYyZmI0ZDA3ODhiOWZmYmI4ZDI2ZTNlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0MDgzMzMzMzMsMTYuMzU5NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OGE1MzNlZGQ4MWM0MWU3YTU4OWVhMjg0ZDRiZDFkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lN2Q0MjY4Y2YzM2M0ZmM1OWEwYWI1ZGE3YjU0YzRiZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTdkNDI2OGNmMzNjNGZjNTlhMGFiNWRhN2I1NGM0YmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRlcmhlaW0gRMO2Ymxpbmc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOThhNTMzZWRkODFjNDFlN2E1ODllYTI4NGQ0YmQxZDYuc2V0Q29udGVudChodG1sX2U3ZDQyNjhjZjMzYzRmYzU5YTBhYjVkYTdiNTRjNGJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzAxZThlZDI2MmZiNGQwNzg4YjlmZmJiOGQyNmUzZTYuYmluZFBvcHVwKHBvcHVwXzk4YTUzM2VkZDgxYzQxZTdhNTg5ZWEyODRkNGJkMWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDNiNjljZDZhNjY3NGRlYWFlYzJmNzk4MzFmNDI4ZmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODA4MzMzMzMzLDE2LjM3MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzEyMWRjMGFhYzdmNGY4NzkxOTNlZTFjZDZiMzY0NTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ0ZDk2NzMxNzg2NGE4Yjg5ODE2ZWFlYjVhMGMyOWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc0NGQ5NjczMTc4NjRhOGI4OTgxNmVhZWI1YTBjMjljIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJiZWl0ZXJoZWltIEZhdm9yaXRlbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTIxZGMwYWFjN2Y0Zjg3OTE5M2VlMWNkNmIzNjQ1Ni5zZXRDb250ZW50KGh0bWxfNzQ0ZDk2NzMxNzg2NGE4Yjg5ODE2ZWFlYjVhMGMyOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wM2I2OWNkNmE2Njc0ZGVhYWVjMmY3OTgzMWY0MjhmZS5iaW5kUG9wdXAocG9wdXBfNzEyMWRjMGFhYzdmNGY4NzkxOTNlZTFjZDZiMzY0NTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZGZjYjQ0NWIyYzI0YmU2YjUwMzZkMWZjNTRmNzdmYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1ODMzMzMzMzMsMTYuNDAxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDY0ZWQzNjBlODY0YTFkYjYxNTEwYmY3M2M4ZTg1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTYxMTk2ZGRiZTk0ODAzOThjMGE0ZGQyMmNkNDQ2NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjE2MTE5NmRkYmU5NDgwMzk4YzBhNGRkMjJjZDQ0NjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRlcmhlaW0gRmxvcmlkc2RvcmY8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQ2NGVkMzYwZTg2NGExZGI2MTUxMGJmNzNjOGU4NTEuc2V0Q29udGVudChodG1sXzIxNjExOTZkZGJlOTQ4MDM5OGMwYTRkZDIyY2Q0NDY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWRmY2I0NDViMmMyNGJlNmI1MDM2ZDFmYzU0Zjc3ZmIuYmluZFBvcHVwKHBvcHVwX2M0NjRlZDM2MGU4NjRhMWRiNjE1MTBiZjczYzhlODUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2RkOGM2NGRhZTk5NDJmYjkzNjVhZmU0ZjQzYzQyZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTQxNjY2NjY3LDE2LjM4MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmI5NjVlMzY3Mjk2NGUwYWFlZjI4YWYxZDJiM2VjMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2Y1ZmMwOTc3MzY3NDlhOGJiY2E5ZjhhOTIyMTFlZWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNmNWZjMDk3NzM2NzQ5YThiYmNhOWY4YTkyMjExZWViIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJiZWl0ZXJoZWltIExlb3BvbGRzdGFkdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjk2NWUzNjcyOTY0ZTBhYWVmMjhhZjFkMmIzZWMxMS5zZXRDb250ZW50KGh0bWxfM2Y1ZmMwOTc3MzY3NDlhOGJiY2E5ZjhhOTIyMTFlZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZGQ4YzY0ZGFlOTk0MmZiOTM2NWFmZTRmNDNjNDJmZi5iaW5kUG9wdXAocG9wdXBfYmI5NjVlMzY3Mjk2NGUwYWFlZjI4YWYxZDJiM2VjMTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZjY4M2ZmNTQ5N2Y0ZGEwODdhODFjM2U0YTAyMjk2YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3NTU1NTU1NTYsMTYuMzM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyNzk2OTZjNjM1ZjQxZDZiNzg0NWZlMjI2NmQ5YWMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkNzlhMDliZWFkZjQ0YzA5ZjY0NTEzODVjNzQ4MmQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zZDc5YTA5YmVhZGY0NGMwOWY2NDUxMzg1Yzc0ODJkNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdGVyaGVpbSBNZWlkbGluZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjc5Njk2YzYzNWY0MWQ2Yjc4NDVmZTIyNjZkOWFjMC5zZXRDb250ZW50KGh0bWxfM2Q3OWEwOWJlYWRmNDRjMDlmNjQ1MTM4NWM3NDgyZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZjY4M2ZmNTQ5N2Y0ZGEwODdhODFjM2U0YTAyMjk2YS5iaW5kUG9wdXAocG9wdXBfYTI3OTY5NmM2MzVmNDFkNmI3ODQ1ZmUyMjY2ZDlhYzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MGQ2MTAxNzAwYzk0M2VmODE4NDFhOTVhNDQ4YjgxZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODYxMTExMTEsMTYuMzIzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjY1ZmU5MDQwZjM0ZjI0YWY1ZTljNWQzZTkwNmE1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTcyYzIzNWQzN2Q0ZjNhYTY2ZjVlMWM2YTQyYjc5NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODk3MmMyMzVkMzdkNGYzYWE2NmY1ZTFjNmE0MmI3OTUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRlcmhlaW0gT3R0YWtyaW5nPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyNjVmZTkwNDBmMzRmMjRhZjVlOWM1ZDNlOTA2YTVlLnNldENvbnRlbnQoaHRtbF84OTcyYzIzNWQzN2Q0ZjNhYTY2ZjVlMWM2YTQyYjc5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYwZDYxMDE3MDBjOTQzZWY4MTg0MWE5NWE0NDhiODFkLmJpbmRQb3B1cChwb3B1cF80MjY1ZmU5MDQwZjM0ZjI0YWY1ZTljNWQzZTkwNmE1ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiZjljOGVkMTkyYTRhZGY4OGZiZTliZmI0MTY2MzBkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc1NTU1NTU1NiwxNi40MTE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhNDNmNjczYThmYzQ0Y2ViOTExMzQxNzZmZTQ4MTg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzNTczZjRmNDhkNzRjNTliMmMzOTZjYTU4NTQ5N2JmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMzU3M2Y0ZjQ4ZDc0YzU5YjJjMzk2Y2E1ODU0OTdiZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdGVyaGVpbSBTaW1tZXJpbmc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGE0M2Y2NzNhOGZjNDRjZWI5MTEzNDE3NmZlNDgxODguc2V0Q29udGVudChodG1sX2MzNTczZjRmNDhkNzRjNTliMmMzOTZjYTU4NTQ5N2JmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWJmOWM4ZWQxOTJhNGFkZjg4ZmJlOWJmYjQxNjYzMGQuYmluZFBvcHVwKHBvcHVwXzBhNDNmNjczYThmYzQ0Y2ViOTExMzQxNzZmZTQ4MTg4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjUyNDI0MTdmMmZhNDZkMGJiZTc0MmFjMzQ5YzllNmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjcyMjIyMjIyLDE2LjM0MDI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTJlNTgxYTg5NTE0NGUwMDhiMTFlOWU1YWY2YjdkZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdjOTRkYTY0YzVmNDc4OThmYmRiZmFjZmRlY2Y3ZDcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q3Yzk0ZGE2NGM1ZjQ3ODk4ZmJkYmZhY2ZkZWNmN2Q3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJiZWl0ZXJoZWltIFfDpGhyaW5nPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyZTU4MWE4OTUxNDRlMDA4YjExZTllNWFmNmI3ZGYwLnNldENvbnRlbnQoaHRtbF9kN2M5NGRhNjRjNWY0Nzg5OGZiZGJmYWNmZGVjZjdkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY1MjQyNDE3ZjJmYTQ2ZDBiYmU3NDJhYzM0OWM5ZTZjLmJpbmRQb3B1cChwb3B1cF81MmU1ODFhODk1MTQ0ZTAwOGIxMWU5ZTVhZjZiN2RmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ1OGFhMmE1ZWYwOTRkNmI4OTBhNDgxMTkyNDVkNDc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4NjExMTExMSwxNi4zNzg2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2NTJiZDJiZGZlYjQwNWI4YjYxZTg1ZWI4OTEyYzAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzYTE2MDE3OGU1YjQ3OGE4MzVmODAzOGUwYTJiMTJlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81M2ExNjAxNzhlNWI0NzhhODM1ZjgwMzhlMGEyYjEyZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdGVya3Jhbmtlbmthc3NlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2NTJiZDJiZGZlYjQwNWI4YjYxZTg1ZWI4OTEyYzAzLnNldENvbnRlbnQoaHRtbF81M2ExNjAxNzhlNWI0NzhhODM1ZjgwMzhlMGEyYjEyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ1OGFhMmE1ZWYwOTRkNmI4OTBhNDgxMTkyNDVkNDc4LmJpbmRQb3B1cChwb3B1cF9iNjUyYmQyYmRmZWI0MDViOGI2MWU4NWViODkxMmMwMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY0MzdlNzgwOWY4ZjQ0M2Q4OThjYzQ5ZDFjYWM1MGRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkwNTU1NTU1NiwxNi4zMzE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4NGNiZWU3Y2VmZjRlYzA5ZDJiNTVhZGUzMDFjMjU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5NjA5ODA5ZThlMzQ5ZGVhNDM2ODE2YWQwZjM3ODcyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yOTYwOTgwOWU4ZTM0OWRlYTQzNjgxNmFkMGYzNzg3MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdGVybWl0dGVsc2NodWxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4NGNiZWU3Y2VmZjRlYzA5ZDJiNTVhZGUzMDFjMjU3LnNldENvbnRlbnQoaHRtbF8yOTYwOTgwOWU4ZTM0OWRlYTQzNjgxNmFkMGYzNzg3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0MzdlNzgwOWY4ZjQ0M2Q4OThjYzQ5ZDFjYWM1MGRhLmJpbmRQb3B1cChwb3B1cF9jODRjYmVlN2NlZmY0ZWMwOWQyYjU1YWRlMzAxYzI1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQzYmFmZjIxYmU0MDQ1Nzc4MDM2ZTQxNjk0NDY1Yzg0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQ1NTU1NTU1NiwxNi40MTE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkZTM4ZTYxYzFiMTQ2ZGViYTgwYzRiNzJmZGFiYTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2NTlmNDg0M2MzNjQ2ZDNiNjI4MTU1NGU5Y2VhMjZkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNjU5ZjQ4NDNjMzY0NmQzYjYyODE1NTRlOWNlYTI2ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBBcmJlaXRlcnN0cmFuZGJhZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZGUzOGU2MWMxYjE0NmRlYmE4MGM0YjcyZmRhYmE1MC5zZXRDb250ZW50KGh0bWxfYjY1OWY0ODQzYzM2NDZkM2I2MjgxNTU0ZTljZWEyNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80M2JhZmYyMWJlNDA0NTc3ODAzNmU0MTY5NDQ2NWM4NC5iaW5kUG9wdXAocG9wdXBfM2RlMzhlNjFjMWIxNDZkZWJhODBjNGI3MmZkYWJhNTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYWY2YTkzMTVkNGQ0YzIyOTA2NTdiZWUzZTFlMjNkYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MzA1NTU1NTYsMTYuMzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTVmMTRlZGNkMmM2NDBmOGFiMjBkYzg5NTMzMWQ0MjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGYyZGI3ODBkMWI1NDY3YThiY2VjNjk0YzgxNGMwYzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBmMmRiNzgwZDFiNTQ2N2E4YmNlYzY5NGM4MTRjMGMxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJiZWl0ZXJ3b2huaMOkdXNlciAoMTApPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZjE0ZWRjZDJjNjQwZjhhYjIwZGM4OTUzMzFkNDIzLnNldENvbnRlbnQoaHRtbF8wZjJkYjc4MGQxYjU0NjdhOGJjZWM2OTRjODE0YzBjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NhZjZhOTMxNWQ0ZDRjMjI5MDY1N2JlZTNlMWUyM2RiLmJpbmRQb3B1cChwb3B1cF9lNWYxNGVkY2QyYzY0MGY4YWIyMGRjODk1MzMxZDQyMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M4ZWMxNGY0YmNhMTRhMjhiYWZhZjU0MjQwN2VjNmNhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc2Mzg4ODg4OSwxNi4zNDAyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3MmFjNDU5NDQ4ZDQyNjA5OGQwYzYzMTFkNTA1NGVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllY2EwNjFiZjdjNjQwMWI5MzYxZTdkMWE5NDlkZDlhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85ZWNhMDYxYmY3YzY0MDFiOTM2MWU3ZDFhOTQ5ZGQ5YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdGVyd29obmjDpHVzZXIgKDEyKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NzJhYzQ1OTQ0OGQ0MjYwOThkMGM2MzExZDUwNTRlZS5zZXRDb250ZW50KGh0bWxfOWVjYTA2MWJmN2M2NDAxYjkzNjFlN2QxYTk0OWRkOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOGVjMTRmNGJjYTE0YTI4YmFmYWY1NDI0MDdlYzZjYS5iaW5kUG9wdXAocG9wdXBfNTcyYWM0NTk0NDhkNDI2MDk4ZDBjNjMxMWQ1MDU0ZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80YTM0NjEwMDg0YjM0OWU2YmY4M2FlYjA5ZmM3NWI5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjEzNzc3Nzc3NzgsMTYuMjg2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWVmNjk5ZDQ3NzM0N2RhYWM4YTljOTgxMDMzYzRlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWNjNzNjYzg3Nzg0YmI5ODgyOThlNTJmYzg0OWYwNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzFjYzczY2M4Nzc4NGJiOTg4Mjk4ZTUyZmM4NDlmMDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRzYW10IExpZXNpbmc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTFlZjY5OWQ0NzczNDdkYWFjOGE5Yzk4MTAzM2M0ZWUuc2V0Q29udGVudChodG1sX2MxY2M3M2NjODc3ODRiYjk4ODI5OGU1MmZjODQ5ZjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGEzNDYxMDA4NGIzNDllNmJmODNhZWIwOWZjNzViOTcuYmluZFBvcHVwKHBvcHVwX2UxZWY2OTlkNDc3MzQ3ZGFhYzhhOWM5ODEwMzNjNGVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODBkYTYzMGVkYzM4NGUyNGE1MGUyMzk2M2MxMDk2MTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODIyMjIyMjIyLDE2LjM1MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTFiZjVlYTRjYmUzNDAxMzg0M2NiMzI2ZmYyMDEyYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjFlNGE1ZWU1ZDRhNGJmY2FhMDY1MGI5OWYwZWM4YjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYxZTRhNWVlNWQ0YTRiZmNhYTA2NTBiOTlmMGVjOGIyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJiZWl0c2FtdCBNYXJnYXJldGVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxYmY1ZWE0Y2JlMzQwMTM4NDNjYjMyNmZmMjAxMmMwLnNldENvbnRlbnQoaHRtbF82MWU0YTVlZTVkNGE0YmZjYWEwNjUwYjk5ZjBlYzhiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgwZGE2MzBlZGMzODRlMjRhNTBlMjM5NjNjMTA5NjEzLmJpbmRQb3B1cChwb3B1cF85MWJmNWVhNGNiZTM0MDEzODQzY2IzMjZmZjIwMTJjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVhNjA0MWM2ZjBkYzQwYzQ5MDE4NGFiMGZkZDkyNDMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1NTU1NTU1NiwxNi4zMzU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwMjFlMDJhNGYyMjRmMzViOWMwM2Q2ZDdkNTk0ZGQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlZGExZWNmMmI0NDRkYTJhOTY2ZjI3MzUxMDVmYjM2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZWRhMWVjZjJiNDQ0ZGEyYTk2NmYyNzM1MTA1ZmIzNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdHNhbXQgT3R0YWtyaW5nPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwMjFlMDJhNGYyMjRmMzViOWMwM2Q2ZDdkNTk0ZGQyLnNldENvbnRlbnQoaHRtbF9jZWRhMWVjZjJiNDQ0ZGEyYTk2NmYyNzM1MTA1ZmIzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVhNjA0MWM2ZjBkYzQwYzQ5MDE4NGFiMGZkZDkyNDMxLmJpbmRQb3B1cChwb3B1cF81MDIxZTAyYTRmMjI0ZjM1YjljMDNkNmQ3ZDU5NGRkMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NjZGNkYjhmOWU0YTQ1MTlhMzJiYWU4OTA4MGI0YmQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMiwxNi4zNTg2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkOGI5M2VjYzBlODQ5OGE5Zjc2ODE1NzYxY2Q0NjI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxMTcwODhjZmI2ZDQ3MWVhMmI4YzRjMTUxNTgxMDkwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MTE3MDg4Y2ZiNmQ0NzFlYTJiOGM0YzE1MTU4MTA5MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyYmVpdHNoYXVzICg2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZDhiOTNlY2MwZTg0OThhOWY3NjgxNTc2MWNkNDYyNC5zZXRDb250ZW50KGh0bWxfNTExNzA4OGNmYjZkNDcxZWEyYjhjNGMxNTE1ODEwOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jY2RjZGI4ZjllNGE0NTE5YTMyYmFlODkwODBiNGJkMy5iaW5kUG9wdXAocG9wdXBfN2Q4YjkzZWNjMGU4NDk4YTlmNzY4MTU3NjFjZDQ2MjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MWIxM2QxZTAzOTk0Nzg1ODQxMTIzMzI2YWEwMmM0YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MTY2NjY2NjcsMTYuMzQ0NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmIyYmI3ZTY2ZDM0NWUzOWY0YWM4NGM0OGE3ZjNjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjQ2NzJkYTRhNGI0ZWMzOTZiMDBmYmEwOGM4N2YzNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmY0NjcyZGE0YTRiNGVjMzk2YjAwZmJhMDhjODdmMzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmJlaXRzdW5mYWxsa3JhbmtlbmhhdXMgTWVpZGxpbmc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTJiMmJiN2U2NmQzNDVlMzlmNGFjODRjNDhhN2YzY2Iuc2V0Q29udGVudChodG1sX2JmNDY3MmRhNGE0YjRlYzM5NmIwMGZiYTA4Yzg3ZjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjFiMTNkMWUwMzk5NDc4NTg0MTEyMzMyNmFhMDJjNGIuYmluZFBvcHVwKHBvcHVwX2UyYjJiYjdlNjZkMzQ1ZTM5ZjRhYzg0YzQ4YTdmM2NiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWNjOTRmZTZhMzA5NGFhMDhhNWNjMzI5NTE5NmQ3MGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODA4MzMzMzMzLDE2LjQ2ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGVmYmVmMmY2MDEwNDUyNDgzZjE5MmFjNmRmNTZiMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTVmY2JlOTE2MTFjNGEwZjkyNDZlM2I0ZGFhODk1OTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU1ZmNiZTkxNjExYzRhMGY5MjQ2ZTNiNGRhYTg5NTkzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFyY2hlIE5vZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZWZiZWYyZjYwMTA0NTI0ODNmMTkyYWM2ZGY1NmIyNC5zZXRDb250ZW50KGh0bWxfNTVmY2JlOTE2MTFjNGEwZjkyNDZlM2I0ZGFhODk1OTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hY2M5NGZlNmEzMDk0YWEwOGE1Y2MzMjk1MTk2ZDcwZC5iaW5kUG9wdXAocG9wdXBfMGVmYmVmMmY2MDEwNDUyNDgzZjE5MmFjNmRmNTZiMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYmFiMTM2MThiNzg0MjhiOGYyZWJmMTU5ZGNhMmZlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMDI3Nzc3NzgsMTYuMzcyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTEwOTgwNmE2MzY0YTc3Yjc3ZTI2OTUxMzM4ZTNkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWY1NTZiNWUyNmQ0N2Q3OThhYWFjNWYyZGFiZDg1ZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTlmNTU2YjVlMjZkNDdkNzk4YWFhYzVmMmRhYmQ4NWUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmNoaXYgZGVyIEdlc2VsbHNjaGFmdCBkZXIgTXVzaWtmcmV1bmRlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxMTA5ODA2YTYzNjRhNzdiNzdlMjY5NTEzMzhlM2RjLnNldENvbnRlbnQoaHRtbF8xOWY1NTZiNWUyNmQ0N2Q3OThhYWFjNWYyZGFiZDg1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NiYWIxMzYxOGI3ODQyOGI4ZjJlYmYxNTlkY2EyZmU2LmJpbmRQb3B1cChwb3B1cF8zMTEwOTgwNmE2MzY0YTc3Yjc3ZTI2OTUxMzM4ZTNkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4YzVhNmUzOTQ5YjQ2ZGVhYjdlMTY3YWY2MjM0YmRlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE3MjIyMjIyMiwxNi4zMzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWMyYmM5N2RkNGU3NDQ2NmJkZDNhOTM0M2QyZjgwYmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQwZDM2MzhmODYwNDE0MGI4Y2VjY2IyODhlNTJjZTEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFkMGQzNjM4Zjg2MDQxNDBiOGNlY2NiMjg4ZTUyY2UxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJlbmEgSGVybmFsczwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzJiYzk3ZGQ0ZTc0NDY2YmRkM2E5MzQzZDJmODBiYi5zZXRDb250ZW50KGh0bWxfMWQwZDM2MzhmODYwNDE0MGI4Y2VjY2IyODhlNTJjZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OGM1YTZlMzk0OWI0NmRlYWI3ZTE2N2FmNjIzNGJkZS5iaW5kUG9wdXAocG9wdXBfMWMyYmM5N2RkNGU3NDQ2NmJkZDNhOTM0M2QyZjgwYmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYzY5OGNlZDljM2Q0ZWI2OTkyMGUxOTY1YmQ4YTkwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5ODYxMTExMTEsMTYuMzg5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YjI3NTJjYjlmZDE0MWU2YTViZGQ3ODE5YjMzYzBhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOGE1MTEzODVjZmU0OGRiYTFkZjEyM2JmNThmZjFkMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzhhNTExMzg1Y2ZlNDhkYmExZGYxMjNiZjU4ZmYxZDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmVuYmVyZ2hvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YjI3NTJjYjlmZDE0MWU2YTViZGQ3ODE5YjMzYzBhMC5zZXRDb250ZW50KGh0bWxfMzhhNTExMzg1Y2ZlNDhkYmExZGYxMjNiZjU4ZmYxZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYzY5OGNlZDljM2Q0ZWI2OTkyMGUxOTY1YmQ4YTkwZS5iaW5kUG9wdXAocG9wdXBfNmIyNzUyY2I5ZmQxNDFlNmE1YmRkNzgxOWIzM2MwYTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MzJmYTllYzA3YzM0NzdkYjkxOGZmNTNlNGY1MzBlYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5ODg4ODg4ODksMTYuMzk0MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWIwZTM1NWI0M2Y0NWNkOTJlNGIyYmYxZTY4N2VmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTQ0MzFjMWFiMzg0ZmMxODgyYWU3M2Y2NzE5NjcyNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzE0NDMxYzFhYjM4NGZjMTg4MmFlNzNmNjcxOTY3MjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmVuYmVyZ3BhbGFpczwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NWIwZTM1NWI0M2Y0NWNkOTJlNGIyYmYxZTY4N2VmOS5zZXRDb250ZW50KGh0bWxfNzE0NDMxYzFhYjM4NGZjMTg4MmFlNzNmNjcxOTY3MjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MzJmYTllYzA3YzM0NzdkYjkxOGZmNTNlNGY1MzBlYy5iaW5kUG9wdXAocG9wdXBfNTViMGUzNTViNDNmNDVjZDkyZTRiMmJmMWU2ODdlZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NGQ5NTM5NWZiY2Y0YWVjOGJiM2IyMGUzMmUzNjg4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIzMzMzMzMzMzMsMTYuNDExNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDdiNzY2ZWIwZmI0ODQ3ODI3ZGVmZjcxNTY1NDAwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZjhiNjA1Y2IzZmQ0NDkzYjZlNGYzOWZmMjg2ODk2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2Y4YjYwNWNiM2ZkNDQ5M2I2ZTRmMzlmZjI4Njg5NmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcmVzLVRvd2VyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwN2I3NjZlYjBmYjQ4NDc4MjdkZWZmNzE1NjU0MDBkLnNldENvbnRlbnQoaHRtbF83ZjhiNjA1Y2IzZmQ0NDkzYjZlNGYzOWZmMjg2ODk2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc0ZDk1Mzk1ZmJjZjRhZWM4YmIzYjIwZTMyZTM2ODg5LmJpbmRQb3B1cChwb3B1cF80MDdiNzY2ZWIwZmI0ODQ3ODI3ZGVmZjcxNTY1NDAwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRmZWYxZmFmZTI3ZTRiM2E4NWQ0OTg2YTZmNzg5N2MwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkwNTU1NTU1NiwxNi4zMzk3MjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmMGNkZmYzOGY4NjQyYzY5NmRjNTRhMTdmYjVlYjA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmNmM5NTMyZTY4MDQ4OWJiNGFiY2Q2MGFkMGQ1ZmE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZjZjOTUzMmU2ODA0ODliYjRhYmNkNjBhZDBkNWZhNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFyaWstQnJhdWVyLUhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGYwY2RmZjM4Zjg2NDJjNjk2ZGM1NGExN2ZiNWViMDUuc2V0Q29udGVudChodG1sXzdmNmM5NTMyZTY4MDQ4OWJiNGFiY2Q2MGFkMGQ1ZmE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGZlZjFmYWZlMjdlNGIzYTg1ZDQ5ODZhNmY3ODk3YzAuYmluZFBvcHVwKHBvcHVwXzRmMGNkZmYzOGY4NjQyYzY5NmRjNTRhMTdmYjVlYjA1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjc3MzEyNDU1ZWEzNGVlMjlmNDFiMmFmMjhmMDYyMTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM2MTExMTExLDE2LjM1ODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVjZWM2YWZkMjE3NDhkZjk0ZjAzNmI5ZTIyYTA2ZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjdmMmU5MzZkZmZjNDY3OWE0NDg0ZDJmMTM1ODQ1MWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y3ZjJlOTM2ZGZmYzQ2NzlhNDQ4NGQyZjEzNTg0NTFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJrYWRlbmNhZmU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDVjZWM2YWZkMjE3NDhkZjk0ZjAzNmI5ZTIyYTA2ZWMuc2V0Q29udGVudChodG1sX2Y3ZjJlOTM2ZGZmYzQ2NzlhNDQ4NGQyZjEzNTg0NTFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjc3MzEyNDU1ZWEzNGVlMjlmNDFiMmFmMjhmMDYyMTIuYmluZFBvcHVwKHBvcHVwX2Q1Y2VjNmFmZDIxNzQ4ZGY5NGYwMzZiOWUyMmEwNmVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2M1Y2Y5YjQxODE2NDNmY2JiYWUzNDRkZmY4ZjI4ZmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDgzMzMzMzMzLDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWIwN2I1MTY2YTNlNDlkMWI5MjA0ZmRhODk4NzVhMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmZlODQyMTc0OTM1NDM4N2I2NzMzYTcwMGZjMmY2ZmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZmZTg0MjE3NDkzNTQzODdiNjczM2E3MDBmYzJmNmZkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJrYWRlbmhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWIwN2I1MTY2YTNlNDlkMWI5MjA0ZmRhODk4NzVhMGEuc2V0Q29udGVudChodG1sX2ZmZTg0MjE3NDkzNTQzODdiNjczM2E3MDBmYzJmNmZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2M1Y2Y5YjQxODE2NDNmY2JiYWUzNDRkZmY4ZjI4ZmEuYmluZFBvcHVwKHBvcHVwXzViMDdiNTE2NmEzZTQ5ZDFiOTIwNGZkYTg5ODc1YTBhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODRmYzQxMzQxMTc5NDkxY2FjNmJiOWQ3NzNhYjUwM2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDg4ODg4ODg5LDE2LjM1NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzViZjVjMDkxOTQ2NDU5ZmIyN2U5MzJmNGIwNzkwNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTdiOWMzNjllNzVlNGQwOWE4Y2E5N2VkNzUyODJjMTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2U3YjljMzY5ZTc1ZTRkMDlhOGNhOTdlZDc1MjgyYzE2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEFya2FkZW5ow6R1c2VyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1YmY1YzA5MTk0NjQ1OWZiMjdlOTMyZjRiMDc5MDQ2LnNldENvbnRlbnQoaHRtbF9lN2I5YzM2OWU3NWU0ZDA5YThjYTk3ZWQ3NTI4MmMxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg0ZmM0MTM0MTE3OTQ5MWNhYzZiYjlkNzczYWI1MDNlLmJpbmRQb3B1cChwb3B1cF8zNWJmNWMwOTE5NDY0NTlmYjI3ZTkzMmY0YjA3OTA0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkNmY0MTA2ZWIwYTQxMGY5MzM4YjhiMzAzOGZkZjQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIxOTQ0NDQ0NCwxNi4zNjE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxNmZhM2Q2M2U1MDQ1YzNiZDczZDE5NjMwN2EzZDljID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4N2IxMTYwOTk3MDQ2Y2M5ZDg2MmY0NmNkNDBhMzIyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mODdiMTE2MDk5NzA0NmNjOWQ4NjJmNDZjZDQwYTMyMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFya2VsZXktSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNmZhM2Q2M2U1MDQ1YzNiZDczZDE5NjMwN2EzZDljLnNldENvbnRlbnQoaHRtbF9mODdiMTE2MDk5NzA0NmNjOWQ4NjJmNDZjZDQwYTMyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkNmY0MTA2ZWIwYTQxMGY5MzM4YjhiMzAzOGZkZjQ1LmJpbmRQb3B1cChwb3B1cF8yMTZmYTNkNjNlNTA0NWMzYmQ3M2QxOTYzMDdhM2Q5Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q4MjU1ZDA0OTIwZDQzZTc4YjE4NTY1MzBjZDZkYmFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYWIzZjNiOTFkNjQ5OThiMDFhMzc2YTU4YjAyMWVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MzBiODEwOTMyYjQxNWFhYzZmMmNhZDAzMzBlNmE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNzMwYjgxMDkzMmI0MTVhYWM2ZjJjYWQwMzMwZTZhNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQXJsdGRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTNhYjNmM2I5MWQ2NDk5OGIwMWEzNzZhNThiMDIxZWEuc2V0Q29udGVudChodG1sX2E3MzBiODEwOTMyYjQxNWFhYzZmMmNhZDAzMzBlNmE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDgyNTVkMDQ5MjBkNDNlNzhiMTg1NjUzMGNkNmRiYWYuYmluZFBvcHVwKHBvcHVwXzUzYWIzZjNiOTFkNjQ5OThiMDFhMzc2YTU4YjAyMWVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWY0ZGEzMTA5NmY3NDcxNTk2MDExNzk4NWJlMzQyMDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMSwxNi4zODkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4Njc3MTcxYTQxOTQ1YzRiMjIyZjdiNGVjNWM1OGEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljYmJhM2JmMmIyNDQwNDJhMjNkYTY0YTI4OTUzOGYzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85Y2JiYTNiZjJiMjQ0MDQyYTIzZGE2NGEyODk1MzhmMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBcm1lbmlzY2hlIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODY3NzE3MWE0MTk0NWM0YjIyMmY3YjRlYzVjNThhMC5zZXRDb250ZW50KGh0bWxfOWNiYmEzYmYyYjI0NDA0MmEyM2RhNjRhMjg5NTM4ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZjRkYTMxMDk2Zjc0NzE1OTYwMTE3OTg1YmUzNDIwNy5iaW5kUG9wdXAocG9wdXBfNDg2NzcxNzFhNDE5NDVjNGIyMjJmN2I0ZWM1YzU4YTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTA3NTg3MmVmMWY0ZTE5YmUxN2VlYWI5YmNiNjNmYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzMzMzMzMzMsMTYuMzU1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzMwYmU3ZTllZDY0OTVjYWIzYmJjZTExMTE5MDUzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMTIyNTYwZjNjYTg0ODc4ODBlZWQ0OWFlMzYxMWZiNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjEyMjU2MGYzY2E4NDg3ODgwZWVkNDlhZTM2MTFmYjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQXJtZW5zw7xuZGVyemVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDMzMGJlN2U5ZWQ2NDk1Y2FiM2JiY2UxMTExOTA1M2Yuc2V0Q29udGVudChodG1sX2IxMjI1NjBmM2NhODQ4Nzg4MGVlZDQ5YWUzNjExZmI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmUwNzU4NzJlZjFmNGUxOWJlMTdlZWFiOWJjYjYzZmIuYmluZFBvcHVwKHBvcHVwX2QzMzBiZTdlOWVkNjQ5NWNhYjNiYmNlMTExMTkwNTNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTU0ODU5NzFhNDJkNDAxYWI3ZGJlMTc1MmNjM2UxMTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODQxNjY2NjY3LDE2LjM0MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzEyZjNjZWVmZDVhNDRmNmFjYjhjMTRhYmM2NjlkNTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWZlMjU4YzU2YzNhNGEzOGI5ZDg4NjBjMDRlNzUxZmMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VmZTI1OGM1NmMzYTRhMzhiOWQ4ODYwYzA0ZTc1MWZjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJuZHRob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzEyZjNjZWVmZDVhNDRmNmFjYjhjMTRhYmM2NjlkNTQuc2V0Q29udGVudChodG1sX2VmZTI1OGM1NmMzYTRhMzhiOWQ4ODYwYzA0ZTc1MWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTU0ODU5NzFhNDJkNDAxYWI3ZGJlMTc1MmNjM2UxMTAuYmluZFBvcHVwKHBvcHVwXzcxMmYzY2VlZmQ1YTQ0ZjZhY2I4YzE0YWJjNjY5ZDU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTkyNTc4YzEzOTEyNGQ0ZjllY2M0NGU1ZGY5YWYxZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM2MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmJlZjQ1OTczN2I0NDA5OWExNmE4MDY2MmJjZDdkMzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDU3NzQyNWE3ODdmNDg5YWExYmQwODkzYTQ3ZWVlMGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA1Nzc0MjVhNzg3ZjQ4OWFhMWJkMDg5M2E0N2VlZTBlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBcm5kdHNkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiZWY0NTk3MzdiNDQwOTlhMTZhODA2NjJiY2Q3ZDMxLnNldENvbnRlbnQoaHRtbF8wNTc3NDI1YTc4N2Y0ODlhYTFiZDA4OTNhNDdlZWUwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk5MjU3OGMxMzkxMjRkNGY5ZWNjNDRlNWRmOWFmMWZmLmJpbmRQb3B1cChwb3B1cF8yYmVmNDU5NzM3YjQ0MDk5YTE2YTgwNjYyYmNkN2QzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NjNTMzOTQ4ZmJmYTQ4ODk4NzliY2M1YjcyNDhjZWEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3Nzc3Nzc3OCwxNi4zODI3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwNDY5M2U4Y2ZmODRiOWViN2Y2ZGYyZTUwM2JkNWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0MjZkMjllNjNlNzQ3NzdiMDRmYmEzMTE0Yzg2MGMzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNDI2ZDI5ZTYzZTc0Nzc3YjA0ZmJhMzExNGM4NjBjMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQXJuaW1kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNDY5M2U4Y2ZmODRiOWViN2Y2ZGYyZTUwM2JkNWJjLnNldENvbnRlbnQoaHRtbF9mNDI2ZDI5ZTYzZTc0Nzc3YjA0ZmJhMzExNGM4NjBjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NjNTMzOTQ4ZmJmYTQ4ODk4NzliY2M1YjcyNDhjZWEzLmJpbmRQb3B1cChwb3B1cF81MDQ2OTNlOGNmZjg0YjllYjdmNmRmMmU1MDNiZDViYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E0ZDZmMjJmNWUzYzQyMGE5MDI2Mzc4MjE2YzA2N2RkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4ODg4ODg4OSwxNi4zNzc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiZGUyZWM3MDRkZjQ3ZDE4MGIzMDQwMjE3MzExMjkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjMzVlODQwYzMzYjRmYzBiMzZkMGVlODliNmFkMDAyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hYzM1ZTg0MGMzM2I0ZmMwYjM2ZDBlZTg5YjZhZDAwMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFybm9sZC1TY2jDtm5iZXJnLUNlbnRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYmRlMmVjNzA0ZGY0N2QxODBiMzA0MDIxNzMxMTI5MC5zZXRDb250ZW50KGh0bWxfYWMzNWU4NDBjMzNiNGZjMGIzNmQwZWU4OWI2YWQwMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNGQ2ZjIyZjVlM2M0MjBhOTAyNjM3ODIxNmMwNjdkZC5iaW5kUG9wdXAocG9wdXBfZmJkZTJlYzcwNGRmNDdkMTgwYjMwNDAyMTczMTEyOTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NDViNDQ0MTliMWI0NjVmYTQ3YjkzMzRhYTE2NDZiZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDI3Nzc3NzgsMTYuMzM0NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGMxODU3MzEwMzc0NmMxOTlmNTQyM2FjZTRlOThkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOThmZDU3MjZjMTk0NzM4YTBiOTA4MTIyOGNkYmEwZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzk4ZmQ1NzI2YzE5NDczOGEwYjkwODEyMjhjZGJhMGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBcm5zdGVpbnBhbGFpcyAoMTUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkYzE4NTczMTAzNzQ2YzE5OWY1NDIzYWNlNGU5OGRhLnNldENvbnRlbnQoaHRtbF9jOThmZDU3MjZjMTk0NzM4YTBiOTA4MTIyOGNkYmEwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0NWI0NDQxOWIxYjQ2NWZhNDdiOTMzNGFhMTY0NmJkLmJpbmRQb3B1cChwb3B1cF8zZGMxODU3MzEwMzc0NmMxOTlmNTQyM2FjZTRlOThkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZmMjRmM2NhMjJkMTQzMzU4ZGEyYWRiOGVjODMyNWMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgwNTU1NTU1NiwxNi4zOTMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5NzEyZjQxNzE5MzQwZTY4ZjAyZThiZjE2OGNiOTkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkMjM2MWE5ZWIwYzQ0NjI5NDgxOTkwMTRmOGFiMjVhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZDIzNjFhOWViMGM0NDYyOTQ4MTk5MDE0ZjhhYjI1YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBcnNlbmFsa2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5NzEyZjQxNzE5MzQwZTY4ZjAyZThiZjE2OGNiOTkwLnNldENvbnRlbnQoaHRtbF8xZDIzNjFhOWViMGM0NDYyOTQ4MTk5MDE0ZjhhYjI1YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZmMjRmM2NhMjJkMTQzMzU4ZGEyYWRiOGVjODMyNWMzLmJpbmRQb3B1cChwb3B1cF84OTcxMmY0MTcxOTM0MGU2OGYwMmU4YmYxNjhjYjk5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U4ZTFiOWI3YjY5ZjQzOTM5MjhmMDUxZDBjMTIzYWVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTczMDU1NTU1NiwxNi4zNzExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmOTljZDk0NjE1ODQzYjlhZTJlMzE5Y2MwNzA2NGRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQyYjIzZjZiMWNmNzQ1OTA4ODQ4M2NkYzg1ZDhjZDlmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80MmIyM2Y2YjFjZjc0NTkwODg0ODNjZGM4NWQ4Y2Q5ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBBcnRoYWJlcmJydW5uZW48L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWY5OWNkOTQ2MTU4NDNiOWFlMmUzMTljYzA3MDY0ZGQuc2V0Q29udGVudChodG1sXzQyYjIzZjZiMWNmNzQ1OTA4ODQ4M2NkYzg1ZDhjZDlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZThlMWI5YjdiNjlmNDM5MzkyOGYwNTFkMGMxMjNhZWUuYmluZFBvcHVwKHBvcHVwXzFmOTljZDk0NjE1ODQzYjlhZTJlMzE5Y2MwNzA2NGRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWU1NTQ4OTNhNDFhNGM5OGFiZmZjMDBjNzE1M2E4MjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzIyMjIyMjIyLDE2LjM1Mjc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFiNjRmYWE1Y2I0NGM5MGEwNDcwNGFiMzc2YzVkMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDc0YTJjNmVlOTAyNDJmZmFhZDM1YzA1OWNlMmVhODcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q3NGEyYzZlZTkwMjQyZmZhYWQzNWMwNTljZTJlYTg3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJ0aHVyLVNjaG5pdHpsZXItSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhYjY0ZmFhNWNiNDRjOTBhMDQ3MDRhYjM3NmM1ZDMwLnNldENvbnRlbnQoaHRtbF9kNzRhMmM2ZWU5MDI0MmZmYWFkMzVjMDU5Y2UyZWE4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FlNTU0ODkzYTQxYTRjOThhYmZmYzAwYzcxNTNhODI1LmJpbmRQb3B1cChwb3B1cF9mYWI2NGZhYTVjYjQ0YzkwYTA0NzA0YWIzNzZjNWQzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M5MThkM2FhYTIzZDQ5YjE4OWYzZmNjMTEzMTJiN2U3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc3Nzc3Nzc3OCwxNi40MzE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhhZTA2M2FmNzAwZjRjYmU4OWMzMTVkYjRjZjg4MGE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiMDk1ODk5NjgyODRiZjFhOTc1OTQ0Y2Y1M2JlOTJlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYjA5NTg5OTY4Mjg0YmYxYTk3NTk0NGNmNTNiZTkyZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFydGlsbGVyaWUtRnVocndlc2VuZGVwb3Q8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFlMDYzYWY3MDBmNGNiZTg5YzMxNWRiNGNmODgwYTYuc2V0Q29udGVudChodG1sX2RiMDk1ODk5NjgyODRiZjFhOTc1OTQ0Y2Y1M2JlOTJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzkxOGQzYWFhMjNkNDliMTg5ZjNmY2MxMTMxMmI3ZTcuYmluZFBvcHVwKHBvcHVwXzhhZTA2M2FmNzAwZjRjYmU4OWMzMTVkYjRjZjg4MGE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDYzZmJlNmEyMzJkNDIzYjg2NWEwMWM0NWEwNTFjNzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDI3Nzc3Nzc4LDE2LjM3MDI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjBlOWM0ZjA1MGI0NGUzZmJmMTY4YmUyNmM2NmQzMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDFiNzQ4ZGFlNjEyNDA4ZjliZGM5MTk0OWNjOTMzYTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQxYjc0OGRhZTYxMjQwOGY5YmRjOTE5NDljYzkzM2EwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXJ0aWxsZXJpZWRlcG90PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwZTljNGYwNTBiNDRlM2ZiZjE2OGJlMjZjNjZkMzA5LnNldENvbnRlbnQoaHRtbF80MWI3NDhkYWU2MTI0MDhmOWJkYzkxOTQ5Y2M5MzNhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ2M2ZiZTZhMjMyZDQyM2I4NjVhMDFjNDVhMDUxYzc3LmJpbmRQb3B1cChwb3B1cF82MGU5YzRmMDUwYjQ0ZTNmYmYxNjhiZTI2YzY2ZDMwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M4MjExNjczNTUwNTQ0ZDViNmU0YjIwZWY3NTg0NWU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk2MTExMTExMSwxNi4zNjkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2NjQ0MzhmYmUwNDQwNjU4MzExNDExNDE2NWMyMDEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjMWJkMTU4YWYyOTQwOGViYzdiN2ZmOWIwZTk2YThkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83YzFiZDE1OGFmMjk0MDhlYmM3YjdmZjliMGU5NmE4ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFydGlsbGVyaWVrYXNlcm5lICg0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjY0NDM4ZmJlMDQ0MDY1ODMxMTQxMTQxNjVjMjAxMi5zZXRDb250ZW50KGh0bWxfN2MxYmQxNThhZjI5NDA4ZWJjN2I3ZmY5YjBlOTZhOGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jODIxMTY3MzU1MDU0NGQ1YjZlNGIyMGVmNzU4NDVlOC5iaW5kUG9wdXAocG9wdXBfZjY2NDQzOGZiZTA0NDA2NTgzMTE0MTE0MTY1YzIwMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYWZjNzg0ZjIzZGU0YmFmODlkNDA1YjhlZGQ5NjJiNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNzIyMjIyMjIsMTYuNDg1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Y2M2NTQ2YzlhZjc0ZmY3ODI3ZGY0ZGNkYzA1NGI2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGRiZTUwZmRkMGY0ZjAzYjA1MDc5ZTJjM2FhZDljYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTRkYmU1MGZkZDBmNGYwM2IwNTA3OWUyYzNhYWQ5Y2EiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEFydGlsbGVyaXN0ZW5kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjYzY1NDZjOWFmNzRmZjc4MjdkZjRkY2RjMDU0YjYyLnNldENvbnRlbnQoaHRtbF8xNGRiZTUwZmRkMGY0ZjAzYjA1MDc5ZTJjM2FhZDljYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZhZmM3ODRmMjNkZTRiYWY4OWQ0MDViOGVkZDk2MmI1LmJpbmRQb3B1cChwb3B1cF81Y2M2NTQ2YzlhZjc0ZmY3ODI3ZGY0ZGNkYzA1NGI2Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M1NzJkNjk2ZDZmZjRhMzVhMTczY2IxYTBkMTQ1Y2JmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5NzIyMjIyMiwxNi4zNzg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNmE2YTc1ODA4OTQ0OWNhZmM3Zjg3NWE1ZjlmYmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxYTc5YWNiOTQ5MDQxNDY5OWFjODA3ZWYwNTgyMjQzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMWE3OWFjYjk0OTA0MTQ2OTlhYzgwN2VmMDU4MjI0MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEFzY2hlbmJyw7ZkZWxoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExNmE2YTc1ODA4OTQ0OWNhZmM3Zjg3NWE1ZjlmYmU4LnNldENvbnRlbnQoaHRtbF9jMWE3OWFjYjk0OTA0MTQ2OTlhYzgwN2VmMDU4MjI0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M1NzJkNjk2ZDZmZjRhMzVhMTczY2IxYTBkMTQ1Y2JmLmJpbmRQb3B1cChwb3B1cF9hMTZhNmE3NTgwODk0NDljYWZjN2Y4NzVhNWY5ZmJlOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UwZDkyNDYxZGRkYTQyOTc4MDFjMGUyMTE0ZWVjZmM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIxOTQ0NDQ0NCwxNi4zNTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0YjUyNjljNmZjNjRiMGRiYjRmYTliYmI3ZDUxYTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmZjVlNDMyZWY4NjQxNGViMmU5NTQyOWIzNjM2ZjJjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yZmY1ZTQzMmVmODY0MTRlYjJlOTU0MjliMzYzNmYyYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQXNsYW4tR2VkZW5rdGFmZWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjRiNTI2OWM2ZmM2NGIwZGJiNGZhOWJiYjdkNTFhNWIuc2V0Q29udGVudChodG1sXzJmZjVlNDMyZWY4NjQxNGViMmU5NTQyOWIzNjM2ZjJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTBkOTI0NjFkZGRhNDI5NzgwMWMwZTIxMTRlZWNmYzcuYmluZFBvcHVwKHBvcHVwX2I0YjUyNjljNmZjNjRiMGRiYjRmYTliYmI3ZDUxYTViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTYzYTUxMDg4M2YxNGQ2OTliMmQ5YWI2N2UxMGY0M2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTE2NjY2NjY3LDE2LjM5MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzE4YmIyNDE1MjI2NDRjYzliYjlmZWVhNmM0ZWU4NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjE0OGIwMjc0NmVkNDExZDljZDc5ODdmZDBhYjgwZjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YxNDhiMDI3NDZlZDQxMWQ5Y2Q3OTg3ZmQwYWI4MGY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXNwYW5naG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxOGJiMjQxNTIyNjQ0Y2M5YmI5ZmVlYTZjNGVlODYzLnNldENvbnRlbnQoaHRtbF9mMTQ4YjAyNzQ2ZWQ0MTFkOWNkNzk4N2ZkMGFiODBmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2M2E1MTA4ODNmMTRkNjk5YjJkOWFiNjdlMTBmNDNhLmJpbmRQb3B1cChwb3B1cF83MThiYjI0MTUyMjY0NGNjOWJiOWZlZWE2YzRlZTg2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U0MDI0NWJkM2NlZjQxN2M4YTk0ZmMxNWQxOTQ2ZTliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zODI3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyN2I1ZjU5MjI2MDQyOWVhZGM3ZjVlMDJiOGEyOTg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiYmJiNjVhNTUwYzQ4YjdhOGY2YTU1NmMyMzEyYTI0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYmJiYjY1YTU1MGM0OGI3YThmNmE1NTZjMjMxMmEyNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQnLDvGNrZTogQXNwZXJuYnLDvGNrZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjdiNWY1OTIyNjA0MjllYWRjN2Y1ZTAyYjhhMjk4Ni5zZXRDb250ZW50KGh0bWxfZmJiYmI2NWE1NTBjNDhiN2E4ZjZhNTU2YzIzMTJhMjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNDAyNDViZDNjZWY0MTdjOGE5NGZjMTVkMTk0NmU5Yi5iaW5kUG9wdXAocG9wdXBfODI3YjVmNTkyMjYwNDI5ZWFkYzdmNWUwMmI4YTI5ODYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wY2I5NmJjZjVkYjU0MGM4OTcxNDgwYWJkNTg1NWExZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyMTM4ODg4ODksMTYuNDY2Mzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTUxY2Q5MzRmOTA0Y2ExYWE0NjRiYmI2N2VhZTVhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWIzNzdhMGQwMDU0NWJjOWRkYzJmZTU2ZDJjODFjMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjliMzc3YTBkMDA1NDViYzlkZGMyZmU1NmQyYzgxYzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQXNwZXJuZXIgRnJpZWRob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU1MWNkOTM0ZjkwNGNhMWFhNDY0YmJiNjdlYWU1YTguc2V0Q29udGVudChodG1sXzI5YjM3N2EwZDAwNTQ1YmM5ZGRjMmZlNTZkMmM4MWMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGNiOTZiY2Y1ZGI1NDBjODk3MTQ4MGFiZDU4NTVhMWUuYmluZFBvcHVwKHBvcHVwXzJlNTFjZDkzNGY5MDRjYTFhYTQ2NGJiYjY3ZWFlNWE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWFkOGRiMTQ4NmE1NGUzY2E2ODY2YTAwYWUzOWNmMWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTc1LDE2LjQ4MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjI0ZjRmNDJjNTY1NDZhOGI0NWRjNjQzMGIzODBhZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTljZWNkMzIzMDFhNDZlZmIyMWJkNjkxYTUwN2Q2ZjYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE5Y2VjZDMyMzAxYTQ2ZWZiMjFiZDY5MWE1MDdkNmY2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEFzcGVybmVyIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MjRmNGY0MmM1NjU0NmE4YjQ1ZGM2NDMwYjM4MGFkNS5zZXRDb250ZW50KGh0bWxfMTljZWNkMzIzMDFhNDZlZmIyMWJkNjkxYTUwN2Q2ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YWQ4ZGIxNDg2YTU0ZTNjYTY4NjZhMDBhZTM5Y2YxZC5iaW5kUG9wdXAocG9wdXBfNjI0ZjRmNDJjNTY1NDZhOGI0NWRjNjQzMGIzODBhZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMWRiOTZiOGU1Nzc0YzExYmUzYWM0ZmYzYTMwNjc4ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzUzODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MzMzY2YxOTI5MzU0Nzc2OTM0OWM3N2U0MDEzNDRiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTdhNzU1NGJhOTA0MzNlOTNjZDQ0Y2VhZTU5NWM0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzk3YTc1NTRiYTkwNDMzZTkzY2Q0NGNlYWU1OTVjNGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQXN0b3JpYS1HYXJhZ2U8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjMzM2NmMTkyOTM1NDc3NjkzNDljNzdlNDAxMzQ0YjMuc2V0Q29udGVudChodG1sX2M5N2E3NTU0YmE5MDQzM2U5M2NkNDRjZWFlNTk1YzRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjFkYjk2YjhlNTc3NGMxMWJlM2FjNGZmM2EzMDY3OGYuYmluZFBvcHVwKHBvcHVwXzYzMzNjZjE5MjkzNTQ3NzY5MzQ5Yzc3ZTQwMTM0NGIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWY5ZDEzM2M0NWZmNGRkZWJiZWUxOTNlYmUyMmU2YTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTEzODg4ODg5LDE2LjM0MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDZmMjAxZjUwNjRjNDNkNWE4Y2I1NGU5YzBkMWMwZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTU3OTUzMTY2MjA5NGQ0ZWIyZDI4MTQ3MmJiZTQ5OWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2U1Nzk1MzE2NjIwOTRkNGViMmQyODE0NzJiYmU0OTllIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXN0cmlkLUxpbmRncmVuLVNjaHVsZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNmYyMDFmNTA2NGM0M2Q1YThjYjU0ZTljMGQxYzBmYy5zZXRDb250ZW50KGh0bWxfZTU3OTUzMTY2MjA5NGQ0ZWIyZDI4MTQ3MmJiZTQ5OWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZjlkMTMzYzQ1ZmY0ZGRlYmJlZTE5M2ViZTIyZTZhNS5iaW5kUG9wdXAocG9wdXBfMDZmMjAxZjUwNjRjNDNkNWE4Y2I1NGU5YzBkMWMwZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZTVkNWVkNjVmZDE0ODVhOWViNzA4ZWFkY2EzZDc5ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4NDE2NjY2NjcsMTYuMzQwODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODNmMDE3MTE2ZGY0MWQ4YTJhZGQ4Y2ZhZTQ0MGUyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTc4ODFiYjhkYmM0M2I3ODkwM2E5NTU4YTI4Y2JiNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjU3ODgxYmI4ZGJjNDNiNzg5MDNhOTU1OGEyOGNiYjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQXRoaWt0ZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xODNmMDE3MTE2ZGY0MWQ4YTJhZGQ4Y2ZhZTQ0MGUyZi5zZXRDb250ZW50KGh0bWxfZjU3ODgxYmI4ZGJjNDNiNzg5MDNhOTU1OGEyOGNiYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZTVkNWVkNjVmZDE0ODVhOWViNzA4ZWFkY2EzZDc5Zi5iaW5kUG9wdXAocG9wdXBfMTgzZjAxNzExNmRmNDFkOGEyYWRkOGNmYWU0NDBlMmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYmNlZjUzN2MxNDk0ODEzOWIyY2ZhMjdmZWQ5OGQxMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NjY2NjY2NjcsMTYuNDEyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDVlZDk5ZjU3Y2Q0YzdkODYyNDgzY2E2Y2ZiYjRhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OGExNTBmOTE5MzE0ZjA3OGMyMGM0MWU4MjEyOTFjOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzhhMTUwZjkxOTMxNGYwNzhjMjBjNDFlODIxMjkxYzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQXRvbWluc3RpdHV0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwNWVkOTlmNTdjZDRjN2Q4NjI0ODNjYTZjZmJiNGE4LnNldENvbnRlbnQoaHRtbF83OGExNTBmOTE5MzE0ZjA3OGMyMGM0MWU4MjEyOTFjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNiY2VmNTM3YzE0OTQ4MTM5YjJjZmEyN2ZlZDk4ZDEzLmJpbmRQb3B1cChwb3B1cF9iMDVlZDk5ZjU3Y2Q0YzdkODYyNDgzY2E2Y2ZiYjRhOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q1ODBmYTExMWNkMjQ4MTZhOTNjMTQ5MWY5MTNmOTA5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTQ3NSwxNi4yOTM4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiMTczZjdhMjRjNTQwYzJhMWQyY2U1OTNlNGJjNzM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzYjMzYzgwYzNkNTRjZDViYWFiODBiZjZmOGQ1NmQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82M2IzM2M4MGMzZDU0Y2Q1YmFhYjgwYmY2ZjhkNTZkNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBdHpnZXJzZG9yZmVyIEtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjE3M2Y3YTI0YzU0MGMyYTFkMmNlNTkzZTRiYzczOC5zZXRDb250ZW50KGh0bWxfNjNiMzNjODBjM2Q1NGNkNWJhYWI4MGJmNmY4ZDU2ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNTgwZmExMTFjZDI0ODE2YTkzYzE0OTFmOTEzZjkwOS5iaW5kUG9wdXAocG9wdXBfMWIxNzNmN2EyNGM1NDBjMmExZDJjZTU5M2U0YmM3MzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NjFjOWIxNDFiZTU0ZTA3YTNhNzg2NDdhN2M0Y2IwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyMDI3Nzc3NzgsMTYuMzU2Mzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTE3NDgyYWI3MmQ0OWU4ODg0OGZiNTBmNGU1ZWQwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODc0YjQzZGMyYjY0NWY1OWE5ZDVmZmJkZmZlNzE2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTg3NGI0M2RjMmI2NDVmNTlhOWQ1ZmZiZGZmZTcxNmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEF1ZXItV2Vsc2JhY2gtRGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTE3NDgyYWI3MmQ0OWU4ODg0OGZiNTBmNGU1ZWQwOS5zZXRDb250ZW50KGh0bWxfMTg3NGI0M2RjMmI2NDVmNTlhOWQ1ZmZiZGZmZTcxNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NjFjOWIxNDFiZTU0ZTA3YTNhNzg2NDdhN2M0Y2IwYy5iaW5kUG9wdXAocG9wdXBfZTkxNzQ4MmFiNzJkNDllODg4NDhmYjUwZjRlNWVkMDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MTExMjBiMDgxYzQ0NTY5YjVlMjc5MmFkNDhmZTZlOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzU0NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZWE5ZjcxMjg4Nzg0MDIxYjlhNzY0MGMwYjRmZmI0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMTY3ZTRjYWIzMzA0OTVkOTUzNGE0NDRkYzFjNjc3ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDE2N2U0Y2FiMzMwNDk1ZDk1MzRhNDQ0ZGMxYzY3N2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdWVyc3BlcmctU2FuYXRvcml1bTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZWE5ZjcxMjg4Nzg0MDIxYjlhNzY0MGMwYjRmZmI0NC5zZXRDb250ZW50KGh0bWxfZDE2N2U0Y2FiMzMwNDk1ZDk1MzRhNDQ0ZGMxYzY3N2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MTExMjBiMDgxYzQ0NTY5YjVlMjc5MmFkNDhmZTZlOS5iaW5kUG9wdXAocG9wdXBfZGVhOWY3MTI4ODc4NDAyMWI5YTc2NDBjMGI0ZmZiNDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZmIzYjFkZjUwNTA0YWM1YjcwMjVhMGNjMTRmODY3MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjk0NDQ0NDQsMTYuMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc3MzljODAxMTQ5NDcwOWJkOWRiOTFkZjlhMDFhNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzhkYTQwNTIyMmEwNGVkYWExYmQyMzM2YThiM2FiMzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M4ZGE0MDUyMjJhMDRlZGFhMWJkMjMzNmE4YjNhYjM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVlcnNwZXJnaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3NzM5YzgwMTE0OTQ3MDliZDlkYjkxZGY5YTAxYTYzLnNldENvbnRlbnQoaHRtbF9jOGRhNDA1MjIyYTA0ZWRhYTFiZDIzMzZhOGIzYWIzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFmYjNiMWRmNTA1MDRhYzViNzAyNWEwY2MxNGY4NjcxLmJpbmRQb3B1cChwb3B1cF80NzczOWM4MDExNDk0NzA5YmQ5ZGI5MWRmOWEwMWE2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzNzE4YzM4NDcxZjQxOGRhZTU5Yzg3YWNkNThkNzc5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjU0NDQ0NDQ0NCwxNi40NDA4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4MTJkOGI3NGQyOTQwMzdhNjRlZDM4ZTMyZGI3ZTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0ZGM1ZGRlYTZiMzRkMzliMGU2N2NhNjU1MmVmZjFmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNGRjNWRkZWE2YjM0ZDM5YjBlNjdjYTY1NTJlZmYxZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBdWZlcnN0ZWh1bmctQ2hyaXN0aS1LaXJjaGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzgxMmQ4Yjc0ZDI5NDAzN2E2NGVkMzhlMzJkYjdlMzEuc2V0Q29udGVudChodG1sXzA0ZGM1ZGRlYTZiMzRkMzliMGU2N2NhNjU1MmVmZjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDM3MThjMzg0NzFmNDE4ZGFlNTljODdhY2Q1OGQ3NzkuYmluZFBvcHVwKHBvcHVwXzM4MTJkOGI3NGQyOTQwMzdhNjRlZDM4ZTMyZGI3ZTMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWE2ODdkZThiZTQ4NDM3NmIxZWUyMDJhMmM0NmUzYWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjQ0NDQ0NDQ0LDE2LjM4Njk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODdjNDcxY2UzNTBkNGUzMGIxNGU2MmE5ZjYyNzBiOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjZjYzQwYTE2YTEyNGQ0MzlhYWJhM2RhZjQ0ZjlkMjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY2Y2M0MGExNmExMjRkNDM5YWFiYTNkYWY0NGY5ZDIyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEF1ZmVyc3RlaHVuZy1DaHJpc3RpLUtpcmNoZSAoMik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODdjNDcxY2UzNTBkNGUzMGIxNGU2MmE5ZjYyNzBiOWYuc2V0Q29udGVudChodG1sXzY2Y2M0MGExNmExMjRkNDM5YWFiYTNkYWY0NGY5ZDIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWE2ODdkZThiZTQ4NDM3NmIxZWUyMDJhMmM0NmUzYWYuYmluZFBvcHVwKHBvcHVwXzg3YzQ3MWNlMzUwZDRlMzBiMTRlNjJhOWY2MjcwYjlmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzU3ODhlZWRkNjlmNGRlZGFmZjQ5ZjZiNTIzZDM5YzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODIyMjIyMjIyLDE2LjM1MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThkZWUzMzdlMTQ0NDljZmE3Y2QzNTNjYmUyZWFkMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg2ZWM1MTZlYTAzNGY2MmFiMmUyZWNiN2NjMmZiMDQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E4NmVjNTE2ZWEwMzRmNjJhYjJlMmVjYjdjYzJmYjA0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEF1ZmVyc3RlaHVuZy1DaHJpc3RpLUtpcmNoZSAoNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOThkZWUzMzdlMTQ0NDljZmE3Y2QzNTNjYmUyZWFkMWYuc2V0Q29udGVudChodG1sX2E4NmVjNTE2ZWEwMzRmNjJhYjJlMmVjYjdjYzJmYjA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzU3ODhlZWRkNjlmNGRlZGFmZjQ5ZjZiNTIzZDM5YzcuYmluZFBvcHVwKHBvcHVwXzk4ZGVlMzM3ZTE0NDQ5Y2ZhN2NkMzUzY2JlMmVhZDFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDU1OWQ5Y2MxMDY3NDNmZGI0NjdkYzQ0NWFiMDY0NTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjgwNTU1NTU2LDE2LjQ3NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ2NTRkYTg4YmE4NGQyMDlkNDFhNjA0YjI3ZTMyYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBiZjcxNDFlN2U1NDVmN2JhNjIxNDU2NGM5ODY5NzQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2EwYmY3MTQxZTdlNTQ1ZjdiYTYyMTQ1NjRjOTg2OTc0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEF1ZmVyc3RlaHVuZ3NrYXBlbGxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0NjU0ZGE4OGJhODRkMjA5ZDQxYTYwNGIyN2UzMmE2LnNldENvbnRlbnQoaHRtbF9hMGJmNzE0MWU3ZTU0NWY3YmE2MjE0NTY0Yzk4Njk3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA1NTlkOWNjMTA2NzQzZmRiNDY3ZGM0NDVhYjA2NDU2LmJpbmRQb3B1cChwb3B1cF9hNDY1NGRhODhiYTg0ZDIwOWQ0MWE2MDRiMjdlMzJhNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NhYjNkNDdkMzE1YjQxMzQ5ZTY1YzI4YWMxNDYzN2JhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIxMTExMTExMSwxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0Mzg4ZGM5MzJmODQzNWE5NmYzNWZlZTllYWYzMjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkZjYyNjY5NGVkMjQyMThiNzRhNTBmM2RjNmY4MzJiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mZGY2MjY2OTRlZDI0MjE4Yjc0YTUwZjNkYzZmODMyYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQnLDvGNrZTogQXVnYXJ0ZW5icsO8Y2tlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0Mzg4ZGM5MzJmODQzNWE5NmYzNWZlZTllYWYzMjBiLnNldENvbnRlbnQoaHRtbF9mZGY2MjY2OTRlZDI0MjE4Yjc0YTUwZjNkYzZmODMyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NhYjNkNDdkMzE1YjQxMzQ5ZTY1YzI4YWMxNDYzN2JhLmJpbmRQb3B1cChwb3B1cF82NDM4OGRjOTMyZjg0MzVhOTZmMzVmZWU5ZWFmMzIwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgwNTM4NmNiNjg2MDRiMjI4YmNhZWM1ZmRlZjQ1ZjczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjMwMjc3Nzc3OCwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiZDYxZjQ5YjdmZDQyN2M4MjY0OTBjMGY0NzJmZmY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmZjUxNzI5Y2VjZTRiMThiMDFlMzFhZDU3YmNhYWM1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hZmY1MTcyOWNlY2U0YjE4YjAxZTMxYWQ1N2JjYWFjNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z2FydGVuaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiZDYxZjQ5YjdmZDQyN2M4MjY0OTBjMGY0NzJmZmY1LnNldENvbnRlbnQoaHRtbF9hZmY1MTcyOWNlY2U0YjE4YjAxZTMxYWQ1N2JjYWFjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgwNTM4NmNiNjg2MDRiMjI4YmNhZWM1ZmRlZjQ1ZjczLmJpbmRQb3B1cChwb3B1cF8xYmQ2MWY0OWI3ZmQ0MjdjODI2NDkwYzBmNDcyZmZmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMyODJlY2ZlZTUyOTQ4YWM4NmNhOTI2ZDQ5NzY5ZDYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI0MTY2NjY2NywxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhODU5ZjAzNDlmMzQ3ZTBhYjMxY2Q4NWQ3NTRhZjM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlNDhjNjg2ZjE1NzQ1OGU4YzUzYjg2OGM1YzVlY2E2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yZTQ4YzY4NmYxNTc0NThlOGM1M2I4NjhjNWM1ZWNhNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBdWdhcnRlbmthcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2E4NTlmMDM0OWYzNDdlMGFiMzFjZDg1ZDc1NGFmMzcuc2V0Q29udGVudChodG1sXzJlNDhjNjg2ZjE1NzQ1OGU4YzUzYjg2OGM1YzVlY2E2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzI4MmVjZmVlNTI5NDhhYzg2Y2E5MjZkNDk3NjlkNjMuYmluZFBvcHVwKHBvcHVwXzNhODU5ZjAzNDlmMzQ3ZTBhYjMxY2Q4NWQ3NTRhZjM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2M5ZGMwZDg2YTQyNDRlY2FhNDczN2UzODIxYjE1NmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjU4MzMzMzMzLDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDM2YWY1MTEwZDYwNDZjOTkyMTc5MzdkNzcyNmMyOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI3ZTYwN2VlNjgxNDcwZWJjMzA0ODMwNmJlZmExZTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQyN2U2MDdlZTY4MTQ3MGViYzMwNDgzMDZiZWZhMWU3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEF1Z2FydGVua2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNmFmNTExMGQ2MDQ2Yzk5MjE3OTM3ZDc3MjZjMjlmLnNldENvbnRlbnQoaHRtbF80MjdlNjA3ZWU2ODE0NzBlYmMzMDQ4MzA2YmVmYTFlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdjOWRjMGQ4NmE0MjQ0ZWNhYTQ3MzdlMzgyMWIxNTZlLmJpbmRQb3B1cChwb3B1cF8wMzZhZjUxMTBkNjA0NmM5OTIxNzkzN2Q3NzI2YzI5Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU4MTY5ZjJlODEwYTRlNzM4NDE3MmZjNjgwYTFlODU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI0MTY2NjY2NywxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3YzNlZGVmM2IxNjQ3MDM4ODM1ZjhjYzFiMGE4ODUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5ZDc1Y2ZlNTU4YzRkZGViZTAzNDg4MzQ2YThkMDE2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85OWQ3NWNmZTU1OGM0ZGRlYmUwMzQ4ODM0NmE4ZDAxNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z2FydGVucGFsYWlzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3YzNlZGVmM2IxNjQ3MDM4ODM1ZjhjYzFiMGE4ODUwLnNldENvbnRlbnQoaHRtbF85OWQ3NWNmZTU1OGM0ZGRlYmUwMzQ4ODM0NmE4ZDAxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU4MTY5ZjJlODEwYTRlNzM4NDE3MmZjNjgwYTFlODU1LmJpbmRQb3B1cChwb3B1cF81N2MzZWRlZjNiMTY0NzAzODgzNWY4Y2MxYjBhODg1MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZmZGM0ZWI4MmM1MzQwNzA4OTAyYzQzYjM3MDhjMjU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5MTY2NjY2NywxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwYTRhYzA3MDM5MjQ5ZTliOTY4YWVlNTAxOThiODY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0NWNjZjI2ZThiYzRjMzdiYmViODc3ZjdjMTE4NzIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83NDVjY2YyNmU4YmM0YzM3YmJlYjg3N2Y3YzExODcyMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z2UgR290dGVzICgxLCBHcmFiZW4pPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwYTRhYzA3MDM5MjQ5ZTliOTY4YWVlNTAxOThiODY1LnNldENvbnRlbnQoaHRtbF83NDVjY2YyNmU4YmM0YzM3YmJlYjg3N2Y3YzExODcyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmZGM0ZWI4MmM1MzQwNzA4OTAyYzQzYjM3MDhjMjU2LmJpbmRQb3B1cChwb3B1cF80MGE0YWMwNzAzOTI0OWU5Yjk2OGFlZTUwMTk4Yjg2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M0ZDU1MTIyODI4YTQ0NmNiNWY5M2MzN2U2ZDA5MjRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5NzIyMjIyMiwxNi4zN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYmQwYjgzZTZmNTY0YWUyYWVkMjMwYTNiMDcwZjYzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZGRlMTIwM2U5NWY0Y2RjOTU1NmMwNGE5MTI0ZGU2YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWRkZTEyMDNlOTVmNGNkYzk1NTZjMDRhOTEyNGRlNmMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdWdlIEdvdHRlcyAoMSwgUGV0ZXJzcGxhdHopPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViZDBiODNlNmY1NjRhZTJhZWQyMzBhM2IwNzBmNjNlLnNldENvbnRlbnQoaHRtbF81ZGRlMTIwM2U5NWY0Y2RjOTU1NmMwNGE5MTI0ZGU2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M0ZDU1MTIyODI4YTQ0NmNiNWY5M2MzN2U2ZDA5MjRkLmJpbmRQb3B1cChwb3B1cF9lYmQwYjgzZTZmNTY0YWUyYWVkMjMwYTNiMDcwZjYzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3OWNjYWU1MjEyMTQ1YjNiMDBhZjU3YzYyMWQ4ZTNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk1Mjc3Nzc3OCwxNi4zNjY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2N2FhY2YwYTVhZDRiZGNhNjAzZGY2N2M4NzkzOGIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3MGQ5Y2FlMDBjYTRlYWRhZWY1MzUwNDMxZmJiMjllID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNzBkOWNhZTAwY2E0ZWFkYWVmNTM1MDQzMWZiYjI5ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z2UgR290dGVzICg0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjdhYWNmMGE1YWQ0YmRjYTYwM2RmNjdjODc5MzhiMi5zZXRDb250ZW50KGh0bWxfMDcwZDljYWUwMGNhNGVhZGFlZjUzNTA0MzFmYmIyOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NzljY2FlNTIxMjE0NWIzYjAwYWY1N2M2MjFkOGUzYy5iaW5kUG9wdXAocG9wdXBfMTY3YWFjZjBhNWFkNGJkY2E2MDNkZjY3Yzg3OTM4YjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZDU1ZTVmMjAwMjY0ZjE4ODE3YTI1MTRlZDQ0OTczZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTY2NjY2NjcsMTYuMzQwODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kM2EzYjE1YjkyNjY0NDhkYTM0YzU0NmNlYTNiNjAyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjVhMDI3ZGFmZjQ0ODExYTlmYTk3YjhmZjVjNzBhNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjI1YTAyN2RhZmY0NDgxMWE5ZmE5N2I4ZmY1YzcwYTUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdWdlIEdvdHRlcyAoOCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNhM2IxNWI5MjY2NDQ4ZGEzNGM1NDZjZWEzYjYwMmQuc2V0Q29udGVudChodG1sX2YyNWEwMjdkYWZmNDQ4MTFhOWZhOTdiOGZmNWM3MGE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWQ1NWU1ZjIwMDI2NGYxODgxN2EyNTE0ZWQ0NDk3M2YuYmluZFBvcHVwKHBvcHVwX2QzYTNiMTViOTI2NjQ0OGRhMzRjNTQ2Y2VhM2I2MDJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGI3YTFlYmNkYTEzNGU2MmIyMGRiYjdlZjNmNDY3ZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzA4MzMzMzMzLDE2LjM1Mzg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUwM2I1ZWMzYmMyNDY2YTgzMWEzYTgzZWRjMGI3YjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDU2NTZlMjBmYWU3NDQxZDlmZTU0NTI5MjA0Mjc3N2YgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA1NjU2ZTIwZmFlNzQ0MWQ5ZmU1NDUyOTIwNDI3NzdmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVnZSBHb3R0ZXMgKDkpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlMDNiNWVjM2JjMjQ2NmE4MzFhM2E4M2VkYzBiN2I1LnNldENvbnRlbnQoaHRtbF8wNTY1NmUyMGZhZTc0NDFkOWZlNTQ1MjkyMDQyNzc3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRiN2ExZWJjZGExMzRlNjJiMjBkYmI3ZWYzZjQ2N2Y0LmJpbmRQb3B1cChwb3B1cF9mZTAzYjVlYzNiYzI0NjZhODMxYTNhODNlZGMwYjdiNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VmZWM2NmJkMGZiNjQxNThiOTFhMzJjMmUyODQ5ZjA0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk1NTU1NTU1NiwxNi4zNjg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0NTNjM2IyMTg0NzRhNzhhMTM4MGQ2MWRlMzczMmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExZmJhMDA4MTk0YjQxNTA4NjNiZWVlZjQwYmU1MWM4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hMWZiYTAwODE5NGI0MTUwODYzYmVlZWY0MGJlNTFjOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z3VzdC1CZXJnbWFubi1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ1M2MzYjIxODQ3NGE3OGExMzgwZDYxZGUzNzMyYTcuc2V0Q29udGVudChodG1sX2ExZmJhMDA4MTk0YjQxNTA4NjNiZWVlZjQwYmU1MWM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWZlYzY2YmQwZmI2NDE1OGI5MWEzMmMyZTI4NDlmMDQuYmluZFBvcHVwKHBvcHVwXzQ0NTNjM2IyMTg0NzRhNzhhMTM4MGQ2MWRlMzczMmE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2M1ZmU0NDgyNDRjNGRlNzg3YjdkZWYwMTYzYmJlMjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODMwNTU1NTU2LDE2LjMyNDcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTcwMjU3ZmY0NWQyNDFmYWI4OTg5MWZkZmRmMzQwYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzgxYzUzMmNjMzRmNGIxOTgwZjVlOWUwZGU2ZDg1YzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M4MWM1MzJjYzM0ZjRiMTk4MGY1ZTllMGRlNmQ4NWMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVndXN0LUVpZ25lci1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTcwMjU3ZmY0NWQyNDFmYWI4OTg5MWZkZmRmMzQwYWEuc2V0Q29udGVudChodG1sX2M4MWM1MzJjYzM0ZjRiMTk4MGY1ZTllMGRlNmQ4NWMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2M1ZmU0NDgyNDRjNGRlNzg3YjdkZWYwMTYzYmJlMjIuYmluZFBvcHVwKHBvcHVwXzU3MDI1N2ZmNDVkMjQxZmFiODk4OTFmZGZkZjM0MGFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmI5N2I4MGVjZWViNDgwY2E1ZTc1M2ZhMWQ5YTgwNzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODIyMjIyMjIyLDE2LjMyODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmU1Njc1YjRiMWU1NDc2NmE2MTJkNWZmMDkyOWY1YzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmUzMzM5NTZlNmRjNDU0MDhhNWY0ZGMwNGMxYTU2ZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZlMzMzOTU2ZTZkYzQ1NDA4YTVmNGRjMDRjMWE1NmY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVndXN0LUbDvHJzdC1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmU1Njc1YjRiMWU1NDc2NmE2MTJkNWZmMDkyOWY1YzEuc2V0Q29udGVudChodG1sX2ZlMzMzOTU2ZTZkYzQ1NDA4YTVmNGRjMDRjMWE1NmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmI5N2I4MGVjZWViNDgwY2E1ZTc1M2ZhMWQ5YTgwNzUuYmluZFBvcHVwKHBvcHVwXzZlNTY3NWI0YjFlNTQ3NjZhNjEyZDVmZjA5MjlmNWMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTczMDlkY2EwNjBiNDFiMDhmYmJkOGRjOTI0MDFkNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjMzMzMzMzMzLDE2LjM3NDcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWJlMmY4NDU2NTVkNGVkOGFmMzQ5ZmI2NzNlNDllMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjdkZTI5NjgzZWRkNDYzYmE5Yzk0Njc4NDMxOGFhOWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY3ZGUyOTY4M2VkZDQ2M2JhOWM5NDY3ODQzMThhYTlhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVndXN0LU1vdHotUmV0dHVuZ3NzdGF0aW9uPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiZTJmODQ1NjU1ZDRlZDhhZjM0OWZiNjczZTQ5ZTBhLnNldENvbnRlbnQoaHRtbF82N2RlMjk2ODNlZGQ0NjNiYTljOTQ2Nzg0MzE4YWE5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U3MzA5ZGNhMDYwYjQxYjA4ZmJiZDhkYzkyNDAxZDUzLmJpbmRQb3B1cChwb3B1cF9hYmUyZjg0NTY1NWQ0ZWQ4YWYzNDlmYjY3M2U0OWUwYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UzYjVmMTE5YWFmNjQ1MzJiY2FmODM0ODYyYjc1Y2YyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zMjQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiMjVhYjUwMDhjYjQ2N2ZhZDU3YzU1MDllMGNlMWExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1OTFkY2VlMWMwZjRiMTA5NmNiMWY1ZGUzMjhmNTMwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNTkxZGNlZTFjMGY0YjEwOTZjYjFmNWRlMzI4ZjUzMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z3VzdC1TY2hvbHotSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiMjVhYjUwMDhjYjQ2N2ZhZDU3YzU1MDllMGNlMWExLnNldENvbnRlbnQoaHRtbF9kNTkxZGNlZTFjMGY0YjEwOTZjYjFmNWRlMzI4ZjUzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UzYjVmMTE5YWFmNjQ1MzJiY2FmODM0ODYyYjc1Y2YyLmJpbmRQb3B1cChwb3B1cF82YjI1YWI1MDA4Y2I0NjdmYWQ1N2M1NTA5ZTBjZTFhMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc0YjQwZjIwNzE2MzQyYzY4Yzc4NzdkOTk0NjhmNThlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI4NjExMTExMSwxNi4zMzkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNWM1OTY2NzVmODRiNzdhMTFiNGFhZmExYTFlZDQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhYTRkMzdjMjJkYjRkN2M4YmUyMDI3MWJhM2U4OGEwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hYWE0ZDM3YzIyZGI0ZDdjOGJlMjAyNzFiYTNlODhhMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z3VzdGVuaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNWM1OTY2NzVmODRiNzdhMTFiNGFhZmExYTFlZDQ2LnNldENvbnRlbnQoaHRtbF9hYWE0ZDM3YzIyZGI0ZDdjOGJlMjAyNzFiYTNlODhhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc0YjQwZjIwNzE2MzQyYzY4Yzc4NzdkOTk0NjhmNThlLmJpbmRQb3B1cChwb3B1cF84YjVjNTk2Njc1Zjg0Yjc3YTExYjRhYWZhMWExZWQ0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM0MGZjOWEwY2M0ZDQyYTM5M2E5NTE5ZjBjY2IwOTdmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1NTU1NTU1NiwxNi4zNTAyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmZDY5MTEwZjFhNjRkZmFhYjFiN2M0OGM5YTY4ZGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjOTYyYmZkMDZhYjQxMjc4MzBmMWNlOTA4NDljYWRiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yYzk2MmJmZDA2YWI0MTI3ODMwZjFjZTkwODQ5Y2FkYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQXVndXN0aW5icnVubmVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmZDY5MTEwZjFhNjRkZmFhYjFiN2M0OGM5YTY4ZGQ3LnNldENvbnRlbnQoaHRtbF8yYzk2MmJmZDA2YWI0MTI3ODMwZjFjZTkwODQ5Y2FkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0MGZjOWEwY2M0ZDQyYTM5M2E5NTE5ZjBjY2IwOTdmLmJpbmRQb3B1cChwb3B1cF9jZmQ2OTExMGYxYTY0ZGZhYWIxYjdjNDhjOWE2OGRkNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NmNjFlNzVkYjE2MDRkYzc5NDg1MDgyZjVlN2NiYWYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg0MTY2NjY2NywxNi4zODg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNzdmMzM4NWY5NjRhMzU4NWU2NTU3MWRkMzJiZmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkYTBmOGFmOGJiODQxMzI4OTIwOGMwMmU0NzE3NGY2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZGEwZjhhZjhiYjg0MTMyODkyMDhjMDJlNDcxNzRmNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQXVndXN0aW5kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNzdmMzM4NWY5NjRhMzU4NWU2NTU3MWRkMzJiZmE0LnNldENvbnRlbnQoaHRtbF84ZGEwZjhhZjhiYjg0MTMyODkyMDhjMDJlNDcxNzRmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmNjFlNzVkYjE2MDRkYzc5NDg1MDgyZjVlN2NiYWYzLmJpbmRQb3B1cChwb3B1cF84Yjc3ZjMzODVmOTY0YTM1ODVlNjU1NzFkZDMyYmZhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkwODc5YmZmNjlkZTRiOWJhNmI5NzQwM2FlN2FhZTBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1LDE2LjM2ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc2ZmY3YWM2OWFiNGVmMzkzY2U1MzlhMjdkYTM2OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjdkYzNiODgyNzdiNDA1Mjg2NjM5ZTE4NDgzZWUxNzMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI3ZGMzYjg4Mjc3YjQwNTI4NjYzOWUxODQ4M2VlMTczIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEF1Z3VzdGluZXItTGVzZXNhYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc2ZmY3YWM2OWFiNGVmMzkzY2U1MzlhMjdkYTM2OGMuc2V0Q29udGVudChodG1sXzI3ZGMzYjg4Mjc3YjQwNTI4NjYzOWUxODQ4M2VlMTczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTA4NzliZmY2OWRlNGI5YmE2Yjk3NDAzYWU3YWFlMGEuYmluZFBvcHVwKHBvcHVwXzg3NmZmN2FjNjlhYjRlZjM5M2NlNTM5YTI3ZGEzNjhjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODI0M2NlY2IwNGZlNDIxOTg0ZDdmYmFhYjc2YmI2NWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjMzMzMzMzMzLDE2LjMyMjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDljYmYzYjE5MjU0NGQ5MDk1ZWQ2OTlmMjMwNmEyMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjE0NjMxZGQzZTIyNGM1ODk2ZTFlNGQ4OWJjYzhlZDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYxNDYzMWRkM2UyMjRjNTg5NmUxZTRkODliY2M4ZWQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVndXN0aW5lcmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWNiZjNiMTkyNTQ0ZDkwOTVlZDY5OWYyMzA2YTIxMS5zZXRDb250ZW50KGh0bWxfNjE0NjMxZGQzZTIyNGM1ODk2ZTFlNGQ4OWJjYzhlZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MjQzY2VjYjA0ZmU0MjE5ODRkN2ZiYWFiNzZiYjY1Yy5iaW5kUG9wdXAocG9wdXBfZDljYmYzYjE5MjU0NGQ5MDk1ZWQ2OTlmMjMwNmEyMTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xY2Q2MDQ1ZmMwMTc0NGU3OGVhNjQxNTRhYTIxNmE3MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwNjAwMmY0ZmFmMjRhMmJhMjBjZWVjZjllZTU2MDAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MGY5NzU0NTAyMTQ3MzNhOTkyMmQ2NTQ1ZjI3OGRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNzBmOTc1NDUwMjE0NzMzYTk5MjJkNjU0NWYyNzhkZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z3VzdGluZXJrZWxsZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjA2MDAyZjRmYWYyNGEyYmEyMGNlZWNmOWVlNTYwMDMuc2V0Q29udGVudChodG1sX2E3MGY5NzU0NTAyMTQ3MzNhOTkyMmQ2NTQ1ZjI3OGRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWNkNjA0NWZjMDE3NDRlNzhlYTY0MTU0YWEyMTZhNzMuYmluZFBvcHVwKHBvcHVwXzYwNjAwMmY0ZmFmMjRhMmJhMjBjZWVjZjllZTU2MDAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWQ2MTFmNWNiN2Y0NGU5YWI3ZjhlODBiZDZhZjBkMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDUsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzM4ZjUzMDg5Mjc0MDFmYmI4YWM3OWNiOGYyMWM2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZjQ1MjBkNWZlYzQ0MWZmOWNjM2JhZTQ4ODAyNWQ5MCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmY0NTIwZDVmZWM0NDFmZjljYzNiYWU0ODgwMjVkOTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQXVndXN0aW5lcmtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzM4ZjUzMDg5Mjc0MDFmYmI4YWM3OWNiOGYyMWM2MS5zZXRDb250ZW50KGh0bWxfZmY0NTIwZDVmZWM0NDFmZjljYzNiYWU0ODgwMjVkOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZDYxMWY1Y2I3ZjQ0ZTlhYjdmOGU4MGJkNmFmMGQyOC5iaW5kUG9wdXAocG9wdXBfZTMzOGY1MzA4OTI3NDAxZmJiOGFjNzljYjhmMjFjNjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMGI2YzI1MTg2YmM0Y2Y1OGE3YWQ5NTZkZDQ3NzhlYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMTY2NjY2NjcsMTYuMzcxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmZiNDE1YTYwNjk0OGUxYmFiNjVlNjFiYTVhZjA5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDFiNWIyYTU2MDk0MWJiYjI0OTUyNjQ3OTJmMjY2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDQxYjViMmE1NjA5NDFiYmIyNDk1MjY0NzkyZjI2NmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdWd1c3RpbmVycmF2ZWxpbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmZiNDE1YTYwNjk0OGUxYmFiNjVlNjFiYTVhZjA5My5zZXRDb250ZW50KGh0bWxfMDQxYjViMmE1NjA5NDFiYmIyNDk1MjY0NzkyZjI2NmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMGI2YzI1MTg2YmM0Y2Y1OGE3YWQ5NTZkZDQ3NzhlYy5iaW5kUG9wdXAocG9wdXBfY2JmYjQxNWE2MDY5NDhlMWJhYjY1ZTYxYmE1YWYwOTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZDgzOGZmODg0Yjk0MzY3OTUyYmJlZDY3YTYzMzc5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1NGViN2ViYWMxYzQzODE5ODI5MmFhZTA4MjkwM2NhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0MTA3MDEzZTM4MTQ0OWQ4YjcxMWI2YWRhYTIxY2UyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNDEwNzAxM2UzODE0NDlkOGI3MTFiNmFkYWEyMWNlMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1Z3VzdGluZXJ0dXJtPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1NGViN2ViYWMxYzQzODE5ODI5MmFhZTA4MjkwM2NhLnNldENvbnRlbnQoaHRtbF8xNDEwNzAxM2UzODE0NDlkOGI3MTFiNmFkYWEyMWNlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRkODM4ZmY4ODRiOTQzNjc5NTJiYmVkNjdhNjMzNzk3LmJpbmRQb3B1cChwb3B1cF9iNTRlYjdlYmFjMWM0MzgxOTgyOTJhYWUwODI5MDNjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdkMzBiMzFjYzYzZTQ5MGJhMzlhMTFhNTY3OTdmZjFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkyNzc3Nzc3OCwxNi4zNzQxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViMWZkNWVmZTBjMzQzODc5ZGVjZjg1NzkwOTg3NGRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwYzhmMjkxZDE4MjQyNGQ4OTAwN2M3OTU0ZmM3NDhiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMGM4ZjI5MWQxODI0MjRkODkwMDdjNzk1NGZjNzQ4YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBBdWd1c3RpbmthcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWIxZmQ1ZWZlMGMzNDM4NzlkZWNmODU3OTA5ODc0ZGIuc2V0Q29udGVudChodG1sX2YwYzhmMjkxZDE4MjQyNGQ4OTAwN2M3OTU0ZmM3NDhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2QzMGIzMWNjNjNlNDkwYmEzOWExMWE1Njc5N2ZmMWQuYmluZFBvcHVwKHBvcHVwXzViMWZkNWVmZTBjMzQzODc5ZGVjZjg1NzkwOTg3NGRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTM4NTZjNjUwNTNiNDM3MGI4ZjQ3MWVmZmRlMWM3YWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjI3Nzc3Nzc4LDE2LjMyMTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTY1ODdhYmQ0MzI5NDI4N2I1NjBjZmM5N2NjNmY4ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjEyYmUzZjkyNTY4NGI2Y2FjZjA3Zjg0YzE0NjU3NTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzIxMmJlM2Y5MjU2ODRiNmNhY2YwN2Y4NGMxNDY1NzUzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBdWd1c3RpbnVzc3RhdHVlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2NTg3YWJkNDMyOTQyODdiNTYwY2ZjOTdjYzZmOGYwLnNldENvbnRlbnQoaHRtbF8yMTJiZTNmOTI1Njg0YjZjYWNmMDdmODRjMTQ2NTc1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzODU2YzY1MDUzYjQzNzBiOGY0NzFlZmZkZTFjN2FmLmJpbmRQb3B1cChwb3B1cF9hNjU4N2FiZDQzMjk0Mjg3YjU2MGNmYzk3Y2M2ZjhmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QyYzkzOWI0ZWYxNDRjYmU5Y2UxMTNkYTk3MDFjYzczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAxMzg4ODg4OSwxNi4yMzM4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1ZjlhYzNiYTQzYzQ5NWRhNWQwMzE5YTlkOTFmOGY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwMjY0MGU5ZDg3YTQ4NmI5ODI4NTU4ZDRkYjc4NTA2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MDI2NDBlOWQ4N2E0ODZiOTgyODU1OGQ0ZGI3ODUwNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1aG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1ZjlhYzNiYTQzYzQ5NWRhNWQwMzE5YTlkOTFmOGY5LnNldENvbnRlbnQoaHRtbF81MDI2NDBlOWQ4N2E0ODZiOTgyODU1OGQ0ZGI3ODUwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QyYzkzOWI0ZWYxNDRjYmU5Y2UxMTNkYTk3MDFjYzczLmJpbmRQb3B1cChwb3B1cF81NWY5YWMzYmE0M2M0OTVkYTVkMDMxOWE5ZDkxZjhmOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q2YTQzMTVjMmUyNzQ5ZWNiNDM2OGE5NzgxNWRhOTVkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4NjExMTExMSwxNi4zNzY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNGQwOWZjZmJkNzQwODRhZTc0M2U0OTNjZTIzOGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QwMGRlOGIzY2QzNDQyYTc4NThlNmFhNWNkYjFhM2ZjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kMDBkZThiM2NkMzQ0MmE3ODU4ZTZhYTVjZGIxYTNmYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1bGE8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE0ZDA5ZmNmYmQ3NDA4NGFlNzQzZTQ5M2NlMjM4YzYuc2V0Q29udGVudChodG1sX2QwMGRlOGIzY2QzNDQyYTc4NThlNmFhNWNkYjFhM2ZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDZhNDMxNWMyZTI3NDllY2I0MzY4YTk3ODE1ZGE5NWQuYmluZFBvcHVwKHBvcHVwX2ExNGQwOWZjZmJkNzQwODRhZTc0M2U0OTNjZTIzOGM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzFhMWNhNWI5YjcyNGEyMTgwMTMwY2JkZTc3NGEyN2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTEzODg4ODg5LDE2LjMwNTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDVlYzk1NDMxZDRjNGRlNGFkMzI5MGY4MmUyM2QyMzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDE1OTU4MjdlMTQ0NGQ0MzkyYmZhYTYwNjMwZWE5ZDAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzAxNTk1ODI3ZTE0NDRkNDM5MmJmYWE2MDYzMGVhOWQwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVzdGVybGl0emhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NWVjOTU0MzFkNGM0ZGU0YWQzMjkwZjgyZTIzZDIzNy5zZXRDb250ZW50KGh0bWxfMDE1OTU4MjdlMTQ0NGQ0MzkyYmZhYTYwNjMwZWE5ZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMWExY2E1YjliNzI0YTIxODAxMzBjYmRlNzc0YTI3ZC5iaW5kUG9wdXAocG9wdXBfNDVlYzk1NDMxZDRjNGRlNGFkMzI5MGY4MmUyM2QyMzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MDE4ZmY2NWIwZTU0NDkxYmNiYmNmZGU1M2FiZTA3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NjM4ODg4ODksMTYuNDAyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOGYzM2U2ZTdhNTc0MThlYjM1OGJkM2Q1MWE1MmEzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYTM2ZTVhOGYxZjk0ZDE4YjM1NTFiMzU0YjZkNWU0NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGEzNmU1YThmMWY5NGQxOGIzNTUxYjM1NGI2ZDVlNDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdXN0ZXJsaXR6aG9mICgzKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOGYzM2U2ZTdhNTc0MThlYjM1OGJkM2Q1MWE1MmEzZi5zZXRDb250ZW50KGh0bWxfMGEzNmU1YThmMWY5NGQxOGIzNTUxYjM1NGI2ZDVlNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MDE4ZmY2NWIwZTU0NDkxYmNiYmNmZGU1M2FiZTA3ZS5iaW5kUG9wdXAocG9wdXBfMzhmMzNlNmU3YTU3NDE4ZWIzNThiZDNkNTFhNTJhM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xY2JjYTVlODYzNWQ0MGFkOWNmZjBmNDViZDYxNDg1NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI3LDE2LjM3NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTgyMDcwOThjMWI4NDkxNTk4M2I2OGMxMGE1N2ZjNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJkNjc5MzJlN2I2NDMzNWJiODQ3ZDI4YmMxZTljZDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzViZDY3OTMyZTdiNjQzMzViYjg0N2QyOGJjMWU5Y2Q5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXVzdHJpYSBDZW50ZXIgVmllbm5hPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4MjA3MDk4YzFiODQ5MTU5ODNiNjhjMTBhNTdmYzViLnNldENvbnRlbnQoaHRtbF81YmQ2NzkzMmU3YjY0MzM1YmI4NDdkMjhiYzFlOWNkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFjYmNhNWU4NjM1ZDQwYWQ5Y2ZmMGY0NWJkNjE0ODU1LmJpbmRQb3B1cChwb3B1cF8xODIwNzA5OGMxYjg0OTE1OTgzYjY4YzEwYTU3ZmM1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc5ZDBhMjE1NzBlNDQyNTM4ZjY0NTUzOWYxMmEzN2RiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMzg4ODg4OSwxNi4zNjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGYwYWNiMWQ4N2M3NGE4YmIwMDkzYjZmOTVlOTYwZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBmNzc2NmZkMTFkNDRkMjg0ZTdjZjI4N2VhMDU5YjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcwZjc3NjZmZDExZDQ0ZDI4NGU3Y2YyODdlYTA1OWI5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBdXN0cmlhYnJ1bm5lbiAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGYwYWNiMWQ4N2M3NGE4YmIwMDkzYjZmOTVlOTYwZTYuc2V0Q29udGVudChodG1sXzcwZjc3NjZmZDExZDQ0ZDI4NGU3Y2YyODdlYTA1OWI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzlkMGEyMTU3MGU0NDI1MzhmNjQ1NTM5ZjEyYTM3ZGIuYmluZFBvcHVwKHBvcHVwXzRmMGFjYjFkODdjNzRhOGJiMDA5M2I2Zjk1ZTk2MGU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTE1OGZkN2EwMGU5NGJlYTg1ZmI4OTUxM2I2ZTE4YWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTEzODg4ODg5LDE2LjMzMjc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFiNjg3NDdiMDE0NDFmNWI1ZDM2YTRjZDQzMDdlNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I2ZWU1ZTc0ZjFmNDYxZjg2ZDE0MmU0MjNhMDUyMTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNiNmVlNWU3NGYxZjQ2MWY4NmQxNDJlNDIzYTA1MjEwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBBdXN0cmlhYnJ1bm5lbiAoMTYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxYjY4NzQ3YjAxNDQxZjViNWQzNmE0Y2Q0MzA3ZTY1LnNldENvbnRlbnQoaHRtbF8zYjZlZTVlNzRmMWY0NjFmODZkMTQyZTQyM2EwNTIxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UxNThmZDdhMDBlOTRiZWE4NWZiODk1MTNiNmUxOGFhLmJpbmRQb3B1cChwb3B1cF80MWI2ODc0N2IwMTQ0MWY1YjVkMzZhNGNkNDMwN2U2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ViZjE2YjQxMGM1NTQ0N2I4NDFiNGRjYmFmY2E3NjUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE1NTU1NTU1NiwxNi4zNjYxMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyMjY5YThlYWUzMzQ5YjM4ZGZmMDVlNGZkZDRjODQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiYzRjMzVjNjIxNjRmYTBhYTU3YThlNWE4ZDdjMzY0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83YmM0YzM1YzYyMTY0ZmEwYWE1N2E4ZTVhOGQ3YzM2NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQXVzdHJpYWRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDIyNjlhOGVhZTMzNDliMzhkZmYwNWU0ZmRkNGM4NDQuc2V0Q29udGVudChodG1sXzdiYzRjMzVjNjIxNjRmYTBhYTU3YThlNWE4ZDdjMzY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWJmMTZiNDEwYzU1NDQ3Yjg0MWI0ZGNiYWZjYTc2NTAuYmluZFBvcHVwKHBvcHVwXzQyMjY5YThlYWUzMzQ5YjM4ZGZmMDVlNGZkZDRjODQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDA0ZDJjMTRkYmM2NDI3ZTk4NDI0YjM3MDE1NjY1MjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDY2NjY2NjY3LDE2LjM3ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc2YzM1ZDEyYjYwNGU0ZGJiNDJlNGFjNTJkMDgyNjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQ4ZWVlYTE0OWMxNDNjNjk5ZjQxNDYyZWI1MzUzYmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ0OGVlZWExNDljMTQzYzY5OWY0MTQ2MmViNTM1M2JmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXV0b2J1c2dhcmFnZSAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc2YzM1ZDEyYjYwNGU0ZGJiNDJlNGFjNTJkMDgyNjIuc2V0Q29udGVudChodG1sXzQ0OGVlZWExNDljMTQzYzY5OWY0MTQ2MmViNTM1M2JmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDA0ZDJjMTRkYmM2NDI3ZTk4NDI0YjM3MDE1NjY1MjUuYmluZFBvcHVwKHBvcHVwXzQ3NmMzNWQxMmI2MDRlNGRiYjQyZTRhYzUyZDA4MjYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWE0ODVjOTZmYWM5NDVhMWJlYTg1ZWQ5MTE2NWYxNDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzY2NjY2NjY3LDE2LjM3MjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGE1ZWM4ZmMzMzc3NGMwZjhkMTU1NWNjYWY5NjI1MGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIwOWYyNTllZDJiNDBlMTk1NDRkYTViNzliMjdiYTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzhiMDlmMjU5ZWQyYjQwZTE5NTQ0ZGE1Yjc5YjI3YmE5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXV0b2J1c2dhcmFnZSAoMTAsIFBlcm5lcnN0b3JmZXJnYXNzZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGE1ZWM4ZmMzMzc3NGMwZjhkMTU1NWNjYWY5NjI1MGEuc2V0Q29udGVudChodG1sXzhiMDlmMjU5ZWQyYjQwZTE5NTQ0ZGE1Yjc5YjI3YmE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWE0ODVjOTZmYWM5NDVhMWJlYTg1ZWQ5MTE2NWYxNDcuYmluZFBvcHVwKHBvcHVwXzRhNWVjOGZjMzM3NzRjMGY4ZDE1NTVjY2FmOTYyNTBhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjc0OGVhYjVjMzY4NGU3Zjk5M2RhNTQwNWM4ZTc5NzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjQxNjY2NjY3LDE2LjM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjMzhkM2EwY2YzMTRmOTc5NTg2MjhmNmM2MjhlOTBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyZWM5Y2NiMjJkMDQzZTVhMjE2NTlmZDA4NzBiZWE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82MmVjOWNjYjIyZDA0M2U1YTIxNjU5ZmQwODcwYmVhNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1dG9idXNnYXJhZ2UgKDEwLCBSYXhzdHJhw59lKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzM4ZDNhMGNmMzE0Zjk3OTU4NjI4ZjZjNjI4ZTkwZi5zZXRDb250ZW50KGh0bWxfNjJlYzljY2IyMmQwNDNlNWEyMTY1OWZkMDg3MGJlYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNzQ4ZWFiNWMzNjg0ZTdmOTkzZGE1NDA1YzhlNzk3Ni5iaW5kUG9wdXAocG9wdXBfY2MzOGQzYTBjZjMxNGY5Nzk1ODYyOGY2YzYyOGU5MGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NzAzNTk2NTZhZWE0MTIzODg3ZjU0YzlkMDEyOTc1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzEwODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDYyYmZhYjRjODU0ZmQyOWFmMmI5Mzc2NDkzY2Y2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTQwNDVhYTZhZWY0ODJjYjJhMzBkZTQ2N2U3NTYxYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDE0MDQ1YWE2YWVmNDgyY2IyYTMwZGU0NjdlNzU2MWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdXRvYnVzZ2FyYWdlICgxNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2Q2MmJmYWI0Yzg1NGZkMjlhZjJiOTM3NjQ5M2NmNmYuc2V0Q29udGVudChodG1sXzQxNDA0NWFhNmFlZjQ4MmNiMmEzMGRlNDY3ZTc1NjFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTcwMzU5NjU2YWVhNDEyMzg4N2Y1NGM5ZDAxMjk3NTguYmluZFBvcHVwKHBvcHVwX2NkNjJiZmFiNGM4NTRmZDI5YWYyYjkzNzY0OTNjZjZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTExMTAzNzVhMjFjNGE4Nzg4ODZhMTk0MTY2MzllNDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTk0NDQ0NDQ0LDE2LjMxODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA0ZGZiM2VlODY4NGM2YjgwMzg1MzUxYjA2ZDFmNGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmEyOTk1NGQ4OWM5NDBjMWE0ZGE1ZDgwZTNkNDNkYTUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JhMjk5NTRkODljOTQwYzFhNGRhNWQ4MGUzZDQzZGE1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQXV0b2J1c2dhcmFnZSAoMTUsIFNjaGFuenN0cmHDn2UpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNGRmYjNlZTg2ODRjNmI4MDM4NTM1MWIwNmQxZjRlLnNldENvbnRlbnQoaHRtbF9iYTI5OTU0ZDg5Yzk0MGMxYTRkYTVkODBlM2Q0M2RhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UxMTEwMzc1YTIxYzRhODc4ODg2YTE5NDE2NjM5ZTQzLmJpbmRQb3B1cChwb3B1cF81MDRkZmIzZWU4Njg0YzZiODAzODUzNTFiMDZkMWY0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVkNzM5OTRhNjA0YzQ2YjM5ODhiMzRiOGFjYTU0MjA4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQ4MzMzMzMzMywxNi4zNDI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1MDczYWExMDY0NDRjZTJiMDAyMWQwY2VjODU4OTA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2NWI3OGU0ZDk4OTQyMjhhOGNiMjI5MmMzYTk2ZGQ5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNjViNzhlNGQ5ODk0MjI4YThjYjIyOTJjM2E5NmRkOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF1dG9idXNnYXJhZ2UgKDE5KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTA3M2FhMTA2NDQ0Y2UyYjAwMjFkMGNlYzg1ODkwNS5zZXRDb250ZW50KGh0bWxfYjY1Yjc4ZTRkOTg5NDIyOGE4Y2IyMjkyYzNhOTZkZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZDczOTk0YTYwNGM0NmIzOTg4YjM0YjhhY2E1NDIwOC5iaW5kUG9wdXAocG9wdXBfZDUwNzNhYTEwNjQ0NGNlMmIwMDIxZDBjZWM4NTg5MDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMDIyYmJmM2NkMzM0YmY2ODQzNjg1NjA2NDlmY2M0MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyOTQ0NDQ0NDQsMTYuMzk1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZThmMTNlMmVlNmM0MjMyOTJlMGQ2YjYzYThjYjI1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTA5ZmQ5ZGE2ZGY0ZmZlOTAzNjJjMGMwMjM0OWRiNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTUwOWZkOWRhNmRmNGZmZTkwMzYyYzBjMDIzNDlkYjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdXRvYnVzZ2FyYWdlICgyKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZThmMTNlMmVlNmM0MjMyOTJlMGQ2YjYzYThjYjI1Yi5zZXRDb250ZW50KGh0bWxfNTUwOWZkOWRhNmRmNGZmZTkwMzYyYzBjMDIzNDlkYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMDIyYmJmM2NkMzM0YmY2ODQzNjg1NjA2NDlmY2M0My5iaW5kUG9wdXAocG9wdXBfM2U4ZjEzZTJlZTZjNDIzMjkyZTBkNmI2M2E4Y2IyNWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNjRmOTRhOGViNDk0Y2I0OGFkMmI4NDg1YTUwMDM2NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMTY2NjY2NjcsMTYuMzgzODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZmM2YjA0N2U5ODQ0ODFhYmUxNTJlOWMzMjFkODhiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDI3NDAwZTkxM2E0ZWJkOTNlM2EzZWExZmJjMTE5YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGQyNzQwMGU5MTNhNGViZDkzZTNhM2VhMWZiYzExOWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBBdmVudWUtSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmYzZiMDQ3ZTk4NDQ4MWFiZTE1MmU5YzMyMWQ4OGJmLnNldENvbnRlbnQoaHRtbF84ZDI3NDAwZTkxM2E0ZWJkOTNlM2EzZWExZmJjMTE5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I2NGY5NGE4ZWI0OTRjYjQ4YWQyYjg0ODVhNTAwMzY2LmJpbmRQb3B1cChwb3B1cF84ZmM2YjA0N2U5ODQ0ODFhYmUxNTJlOWMzMjFkODhiZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYxNGIxYzhkZmQ4ZjQ5ODA4NDMzODBhZDM4NDAwNWJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzMzMzMzMywxNi4zNzExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkNjJmMzcyZThhOTQ0ZjM5MzY0YjEzNjc2MjhjZTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0OWU3YjFhZWE3ZDQ3NjNhYjRkYmE5YTc3MTI1ZjdjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83NDllN2IxYWVhN2Q0NzYzYWI0ZGJhOWE3NzEyNWY3YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEF6aWVuZGFob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWQ2MmYzNzJlOGE5NDRmMzkzNjRiMTM2NzYyOGNlNWIuc2V0Q29udGVudChodG1sXzc0OWU3YjFhZWE3ZDQ3NjNhYjRkYmE5YTc3MTI1ZjdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjE0YjFjOGRmZDhmNDk4MDg0MzM4MGFkMzg0MDA1YmUuYmluZFBvcHVwKHBvcHVwXzFkNjJmMzcyZThhOTQ0ZjM5MzY0YjEzNjc2MjhjZTViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWExMGFmYjI0ZDM0NGIzMzhiYWFiNTdmNDQ1OTc1MTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNjQxNjY2NjY3LDE2LjM5MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc3MzVjY2ViYzNjNDBjNTgzNmNlOWNlMDMwNDVjM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDFlYjVhOGExNDdhNGMyZThmMDgwZjE5NTk5ODdmZjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzAxZWI1YThhMTQ3YTRjMmU4ZjA4MGYxOTU5OTg3ZmYxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEJJdXQtQ2hyaXN0aS1LaXJjaGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzc3MzVjY2ViYzNjNDBjNTgzNmNlOWNlMDMwNDVjM2Yuc2V0Q29udGVudChodG1sXzAxZWI1YThhMTQ3YTRjMmU4ZjA4MGYxOTU5OTg3ZmYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWExMGFmYjI0ZDM0NGIzMzhiYWFiNTdmNDQ1OTc1MTcuYmluZFBvcHVwKHBvcHVwXzc3NzM1Y2NlYmMzYzQwYzU4MzZjZTljZTAzMDQ1YzNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTA3YzJiZjdlZjRjNGVmOWEzOWMzYTBhNmJkMWRjZTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTA4MzMzMzMzLDE2LjM2Nzc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQ1OTQ1MDlhN2Y0NDVlNDg4Mjc3ZTJlZTQ5NGU0NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTdhZTg0NDhiYTFhNDhlMDlkYzg5YTg0YmZlMDk5MjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU3YWU4NDQ4YmExYTQ4ZTA5ZGM4OWE4NGJmZTA5OTIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFiZW5iZXJnZXJwZmFseiBhbSBIb2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ1OTQ1MDlhN2Y0NDVlNDg4Mjc3ZTJlZTQ5NGU0NzAuc2V0Q29udGVudChodG1sXzU3YWU4NDQ4YmExYTQ4ZTA5ZGM4OWE4NGJmZTA5OTIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTA3YzJiZjdlZjRjNGVmOWEzOWMzYTBhNmJkMWRjZTkuYmluZFBvcHVwKHBvcHVwXzhkNTk0NTA5YTdmNDQ1ZTQ4ODI3N2UyZWU0OTRlNDcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODdkMGUxZjg4ODcxNDU0NmJhZjJjNDMyMWJmYmU2YTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDI3Nzc3Nzc4LDE2LjQwNTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGI4NjczNDk1NjlkNDU3Mjk3OThhYjZmNmVmODZmM2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWU0MDIxZjJjMzZjNDNkMjhmNDdjN2UwYjM0OTFkNjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VlNDAyMWYyYzM2YzQzZDI4ZjQ3YzdlMGIzNDkxZDY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCYWRlbmRlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiODY3MzQ5NTY5ZDQ1NzI5Nzk4YWI2ZjZlZjg2ZjNlLnNldENvbnRlbnQoaHRtbF9lZTQwMjFmMmMzNmM0M2QyOGY0N2M3ZTBiMzQ5MWQ2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3ZDBlMWY4ODg3MTQ1NDZiYWYyYzQzMjFiZmJlNmExLmJpbmRQb3B1cChwb3B1cF8wYjg2NzM0OTU2OWQ0NTcyOTc5OGFiNmY2ZWY4NmYzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlmODI1OWVhNjU1ZTQzZTBiMDA1YTEyZGNlOWU1MGEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNzE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5N2FlYzNiYTE3MDQ1ZDk4MzYzZDg4YTI2ZTAwYzg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjM2JjOTIzMGI2ZDQwZGNiM2ZhZmYzNDQ3ODdlYzg5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYzNiYzkyMzBiNmQ0MGRjYjNmYWZmMzQ0Nzg3ZWM4OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhZGxob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTk3YWVjM2JhMTcwNDVkOTgzNjNkODhhMjZlMDBjODQuc2V0Q29udGVudChodG1sX2RjM2JjOTIzMGI2ZDQwZGNiM2ZhZmYzNDQ3ODdlYzg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWY4MjU5ZWE2NTVlNDNlMGIwMDVhMTJkY2U5ZTUwYTAuYmluZFBvcHVwKHBvcHVwXzU5N2FlYzNiYTE3MDQ1ZDk4MzYzZDg4YTI2ZTAwYzg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODdlZGRkOGU3YzQ1NDE1ZmIwNTNjZTMwMjc5YzNlOTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDU4MzMzMzMzLDE2LjM4NTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzY0M2M5Zjg1NDQyNDkwOThmM2IwNmJhY2NlZWRlMjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTJkNjk5NGI3ZTQxNDBkOTkyODJkY2U5YzQ1NTY0MTEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2EyZDY5OTRiN2U0MTQwZDk5MjgyZGNlOWM0NTU2NDExIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFobmhvZiBIYXVwdHpvbGxhbXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzY0M2M5Zjg1NDQyNDkwOThmM2IwNmJhY2NlZWRlMjYuc2V0Q29udGVudChodG1sX2EyZDY5OTRiN2U0MTQwZDk5MjgyZGNlOWM0NTU2NDExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODdlZGRkOGU3YzQ1NDE1ZmIwNTNjZTMwMjc5YzNlOTQuYmluZFBvcHVwKHBvcHVwXzM2NDNjOWY4NTQ0MjQ5MDk4ZjNiMDZiYWNjZWVkZTI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODdiOWQ5NTBhNjg2NDJhYjliYmE1MTJlMTY4MDA0OTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTc3Nzc3Nzc4LDE2LjI2MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFhZTFhYTRmYzFlNDA0MGE0ZGViN2RmZjBiYTgxMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQ1MzE0MDBkYzM4NDk0YTgwYmI1MGM0NTg5YjdiZGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VkNTMxNDAwZGMzODQ5NGE4MGJiNTBjNDU4OWI3YmRlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFobmhvZiBXaWVuLUjDvHR0ZWxkb3JmPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxYWUxYWE0ZmMxZTQwNDBhNGRlYjdkZmYwYmE4MTM1LnNldENvbnRlbnQoaHRtbF9lZDUzMTQwMGRjMzg0OTRhODBiYjUwYzQ1ODliN2JkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3YjlkOTUwYTY4NjQyYWI5YmJhNTEyZTE2ODAwNDk2LmJpbmRQb3B1cChwb3B1cF80MWFlMWFhNGZjMWU0MDQwYTRkZWI3ZGZmMGJhODEzNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M2MDZmYTkyODc1ZTQyNmQ4OWJlNGZmYTk0ODEyODZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc1NTU1NTU1NiwxNi4zMzY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0OWMwN2I5NzRjNDQwYzc4ODE3ZGRiMDFmNWJmYjk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiYTA3NzM2MWRkMzQ3YmRiOTI0ZGFhMGFiOTg5ODUxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83YmEwNzczNjFkZDM0N2JkYjkyNGRhYTBhYjk4OTg1MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhaG5ob2YgV2llbi1NZWlkbGluZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDljMDdiOTc0YzQ0MGM3ODgxN2RkYjAxZjViZmI5OC5zZXRDb250ZW50KGh0bWxfN2JhMDc3MzYxZGQzNDdiZGI5MjRkYWEwYWI5ODk4NTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNjA2ZmE5Mjg3NWU0MjZkODliZTRmZmE5NDgxMjg2ZS5iaW5kUG9wdXAocG9wdXBfMzQ5YzA3Yjk3NGM0NDBjNzg4MTdkZGIwMWY1YmZiOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NzQ0ZDg2NTllNzY0YjgxODcxOTljYWIyYzhmZWViOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyMjIyMjIyMjIsMTYuMzY5NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjdmMDEwMjA0ZmY0MWY5ODc5ODRmMTYxM2E3NDU2YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTBiMDIyZjhmMzk0MWViOWExMTUzYThjODVmZTVkMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWEwYjAyMmY4ZjM5NDFlYjlhMTE1M2E4Yzg1ZmU1ZDMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYWhuaG9mc2dlYsOkdWRlIERhbXBmdHJhbXdheTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjdmMDEwMjA0ZmY0MWY5ODc5ODRmMTYxM2E3NDU2Yy5zZXRDb250ZW50KGh0bWxfZWEwYjAyMmY4ZjM5NDFlYjlhMTE1M2E4Yzg1ZmU1ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NzQ0ZDg2NTllNzY0YjgxODcxOTljYWIyYzhmZWViOC5iaW5kUG9wdXAocG9wdXBfMDY3ZjAxMDIwNGZmNDFmOTg3OTg0ZjE2MTNhNzQ1NmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MGU1NDQ1ZTQ1YjQ0YmQ4YjdkNmI2ZmFmNTEzZGE5OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzA1NTU1NTYsMTYuMzI1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzFjODc1ZWY3NTQ0MTBmOWJmYWU0NDE0MTk0NTVkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTAyYmE2MzBiMGM0MjcxYWY3NTIzYmU0Y2M3MzQ1MCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTUwMmJhNjMwYjBjNDI3MWFmNzUyM2JlNGNjNzM0NTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYWxkaWFob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWMxYzg3NWVmNzU0NDEwZjliZmFlNDQxNDE5NDU1ZDcuc2V0Q29udGVudChodG1sX2E1MDJiYTYzMGIwYzQyNzFhZjc1MjNiZTRjYzczNDUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODBlNTQ0NWU0NWI0NGJkOGI3ZDZiNmZhZjUxM2RhOTguYmluZFBvcHVwKHBvcHVwXzljMWM4NzVlZjc1NDQxMGY5YmZhZTQ0MTQxOTQ1NWQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDIwOTA5ZTk0YjQyNDc2Njk1ZDY4OTI1Y2IwZGEzMjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDU4MzMzMzMzLDE2LjM3MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDQwN2ZhODY3NzhhNGQwZWJmNWFmZTk0ZGZlYWIwZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQxZDIyNzIxYzRkNDdkNTkyZGYwYjM1N2U5NDIwNDQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJkMWQyMjcyMWM0ZDQ3ZDU5MmRmMGIzNTdlOTQyMDQ0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFsbGdhc3NlIDQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQwN2ZhODY3NzhhNGQwZWJmNWFmZTk0ZGZlYWIwZGQuc2V0Q29udGVudChodG1sXzJkMWQyMjcyMWM0ZDQ3ZDU5MmRmMGIzNTdlOTQyMDQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDIwOTA5ZTk0YjQyNDc2Njk1ZDY4OTI1Y2IwZGEzMjMuYmluZFBvcHVwKHBvcHVwXzA0MDdmYTg2Nzc4YTRkMGViZjVhZmU5NGRmZWFiMGRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjk1ZGQ2NGJjZTMxNDQyNGE2OTZiYWEzODEwODJmOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDgwNTU1NTU2LDE2LjM2MzYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE5ZDdhOTA2MzU5NDBhODg1NGE5NGNjNWEwYTc2MTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODMzNjRlN2VhNjg5NDFmN2EzYjZmYTg2ZDM5MTljZGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgzMzY0ZTdlYTY4OTQxZjdhM2I2ZmE4NmQzOTE5Y2RiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFsbGhhdXMgKDEpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxOWQ3YTkwNjM1OTQwYTg4NTRhOTRjYzVhMGE3NjE5LnNldENvbnRlbnQoaHRtbF84MzM2NGU3ZWE2ODk0MWY3YTNiNmZhODZkMzkxOWNkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I5NWRkNjRiY2UzMTQ0MjRhNjk2YmFhMzgxMDgyZjkyLmJpbmRQb3B1cChwb3B1cF8zMTlkN2E5MDYzNTk0MGE4ODU0YTk0Y2M1YTBhNzYxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q5MWRiNzlkZGY3NTQyYjZiMmYwMWRhMzE5MGJhNjc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MDU1NTU1NiwxNi4zNjM2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjN2EyZWU1ZjA4NTQzY2NhYjEzZjQ5M2IxZjlmNmE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5NmIxZjA3NjY0NzRlMTI4MGY3NTgxODMxNGJmYTc0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84OTZiMWYwNzY2NDc0ZTEyODBmNzU4MTgzMTRiZmE3NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhbGxoYXVzcGxhdHogMTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzdhMmVlNWYwODU0M2NjYWIxM2Y0OTNiMWY5ZjZhNi5zZXRDb250ZW50KGh0bWxfODk2YjFmMDc2NjQ3NGUxMjgwZjc1ODE4MzE0YmZhNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOTFkYjc5ZGRmNzU0MmI2YjJmMDFkYTMxOTBiYTY3NC5iaW5kUG9wdXAocG9wdXBfMWM3YTJlZTVmMDg1NDNjY2FiMTNmNDkzYjFmOWY2YTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNTM1MDU1NzUxMmE0MmU2YjFlY2RlZmU2ZWU5ZjBiNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzExZDhhNzgwYTc0MWFlYTgzMWE4MzU2NzZjM2FmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTkwZDNjOGU0MDg0ZmYwYTI2MTBhM2FiODgwYjg4NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTE5MGQzYzhlNDA4NGZmMGEyNjEwYTNhYjg4MGI4ODYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJhbWJlcmdlcmRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2MxMWQ4YTc4MGE3NDFhZWE4MzFhODM1Njc2YzNhZmMuc2V0Q29udGVudChodG1sX2UxOTBkM2M4ZTQwODRmZjBhMjYxMGEzYWI4ODBiODg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTUzNTA1NTc1MTJhNDJlNmIxZWNkZWZlNmVlOWYwYjcuYmluZFBvcHVwKHBvcHVwX2NjMTFkOGE3ODBhNzQxYWVhODMxYTgzNTY3NmMzYWZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjRjZjFlYzY5NmYzNDc3MmI0MzUwMDRkOWZkMjQ3YWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTAyNzc3Nzc4LDE2LjM2MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU2ZDliNzE0ODAwNGZhYmI3M2YyNTNkYWIxOGNhYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmMxNzgxOWUxZjhlNGMyYWIxOTVhMTlmNjEwMDgwOTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZjMTc4MTllMWY4ZTRjMmFiMTk1YTE5ZjYxMDA4MDk0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFua2dhc3NlIDEwPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlNmQ5YjcxNDgwMDRmYWJiNzNmMjUzZGFiMThjYWE1LnNldENvbnRlbnQoaHRtbF9mYzE3ODE5ZTFmOGU0YzJhYjE5NWExOWY2MTAwODA5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0Y2YxZWM2OTZmMzQ3NzJiNDM1MDA0ZDlmZDI0N2FhLmJpbmRQb3B1cChwb3B1cF9mZTZkOWI3MTQ4MDA0ZmFiYjczZjI1M2RhYjE4Y2FhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM2YjkxYTZiODk5YjQzMjVhMTJmZjQwZWIwODYyMmMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzYyNzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzk4ZGFmMjkxYWI0MTBmOGQwZTM3OTA0OWZlYjNhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjMxMGJmNzZmZDQ0MDk0YThmNDljMGYzYTZjOTRiMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2IzMTBiZjc2ZmQ0NDA5NGE4ZjQ5YzBmM2E2Yzk0YjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYW5rZ2Fzc2UgNC02PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3OThkYWYyOTFhYjQxMGY4ZDBlMzc5MDQ5ZmViM2E0LnNldENvbnRlbnQoaHRtbF9jYjMxMGJmNzZmZDQ0MDk0YThmNDljMGYzYTZjOTRiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM2YjkxYTZiODk5YjQzMjVhMTJmZjQwZWIwODYyMmMzLmJpbmRQb3B1cChwb3B1cF8zNzk4ZGFmMjkxYWI0MTBmOGQwZTM3OTA0OWZlYjNhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdjNTZlYTFkMTVhOTQzYzliZTg1Y2I2MWUwNTJlMzRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzYyNzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTdmMTI4NjY2MTc0ZWNjYTdkMDAyZWJmMTczM2U0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOWI3YjIyNTI5MGE0MjE2ODhhNWRiMWU0YjJhNDdlYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjliN2IyMjUyOTBhNDIxNjg4YTVkYjFlNGIyYTQ3ZWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYW5rZ2Fzc2UgODwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTdmMTI4NjY2MTc0ZWNjYTdkMDAyZWJmMTczM2U0Yy5zZXRDb250ZW50KGh0bWxfYjliN2IyMjUyOTBhNDIxNjg4YTVkYjFlNGIyYTQ3ZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83YzU2ZWExZDE1YTk0M2M5YmU4NWNiNjFlMDUyZTM0YS5iaW5kUG9wdXAocG9wdXBfYjE3ZjEyODY2NjE3NGVjY2E3ZDAwMmViZjE3MzNlNGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NjJkZTQyZWQ3NDY0MWU5OGUwODM4MGQzOGVmZjQ5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODMzMzMzMzMsMTYuMzY4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZGVhMjRiY2RlMmU0MmE5OTNjZWNjZDFkNjNkNDliZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZGE4NWU2ZDQwMDQ0Y2FjYWQ0MDI1OWQ2YzA3YjA0MCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGRhODVlNmQ0MDA0NGNhY2FkNDAyNTlkNmMwN2IwNDAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQmFyYmFyYWthcGVsbGUgKDEsIEdyYWJlbiAxNSwgSGFic2J1cmdlcmdhc3NlIDEpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkZWEyNGJjZGUyZTQyYTk5M2NlY2NkMWQ2M2Q0OWJlLnNldENvbnRlbnQoaHRtbF9kZGE4NWU2ZDQwMDQ0Y2FjYWQ0MDI1OWQ2YzA3YjA0MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2MmRlNDJlZDc0NjQxZTk4ZTA4MzgwZDM4ZWZmNDliLmJpbmRQb3B1cChwb3B1cF9jZGVhMjRiY2RlMmU0MmE5OTNjZWNjZDFkNjNkNDliZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2YTQyNTM3ZDgwZDRjMTVhY2M3MmE3ZjA0YjhmYWVkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzMzMzMzMywxNi4zNzI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiNzZmZDcyYzU4MTQ3Yzk5OTEwYzc2ZjMzMTE1OGZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1ZDYzZDdlNWJlMDQ2MTU5MjY2MzM0OTExYjQ3MmYxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNWQ2M2Q3ZTViZTA0NjE1OTI2NjMzNDkxMWI0NzJmMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCYXJiYXJha2FwZWxsZSAoMSwgU3RlcGhhbnNkb20pPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiNzZmZDcyYzU4MTQ3Yzk5OTEwYzc2ZjMzMTE1OGZlLnNldENvbnRlbnQoaHRtbF9mNWQ2M2Q3ZTViZTA0NjE1OTI2NjMzNDkxMWI0NzJmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2YTQyNTM3ZDgwZDRjMTVhY2M3MmE3ZjA0YjhmYWVkLmJpbmRQb3B1cChwb3B1cF8xYjc2ZmQ3MmM1ODE0N2M5OTkxMGM3NmYzMzExNThmZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMwNDk3YTZjZmMyYzQ2ZjJiYzliODczNmU0OWU3NmEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5MTY2NjY2NywxNi4zNzg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2YzNiNWFhNWRiNTQyZjFhZTRiNDdmNDc1MjhiNjJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiMTQ1ZWYwMTQ3NjRhM2VhNTNjYjdkNDNkNDA1NjQ5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jYjE0NWVmMDE0NzY0YTNlYTUzY2I3ZDQzZDQwNTY0OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhcmJhcmFzdGlmdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmMzYjVhYTVkYjU0MmYxYWU0YjQ3ZjQ3NTI4YjYyYi5zZXRDb250ZW50KGh0bWxfY2IxNDVlZjAxNDc2NGEzZWE1M2NiN2Q0M2Q0MDU2NDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMDQ5N2E2Y2ZjMmM0NmYyYmM5Yjg3MzZlNDllNzZhMi5iaW5kUG9wdXAocG9wdXBfNjZjM2I1YWE1ZGI1NDJmMWFlNGI0N2Y0NzUyOGI2MmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNzc5YjQ1NTlhYjA0NjkwYmY3NTE2ZGUzMWVlMDA2YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODMzMzMzMzMsMTYuMzczMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZmU2MmU5MTI3OWM0ZjRjYWZjMGY0YmRiMGVjNGY0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmI4NWM5Nzk1MDg0MDJlOGI4YTRkZWY5ZGNjZWFlMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmJiODVjOTc5NTA4NDAyZThiOGE0ZGVmOWRjY2VhZTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXJsZWloZXJoYXVzICgxLCBTdGVwaGFuc3BsYXR6KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmU2MmU5MTI3OWM0ZjRjYWZjMGY0YmRiMGVjNGY0NC5zZXRDb250ZW50KGh0bWxfMmJiODVjOTc5NTA4NDAyZThiOGE0ZGVmOWRjY2VhZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNzc5YjQ1NTlhYjA0NjkwYmY3NTE2ZGUzMWVlMDA2YS5iaW5kUG9wdXAocG9wdXBfM2ZlNjJlOTEyNzljNGY0Y2FmYzBmNGJkYjBlYzRmNDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85OGRlNjRlYWMzYWI0Y2E5YTNkZWNjNTc3MjliMDI1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MzYxMTExMTEsMTYuMzA3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYjA3OWU2ZDYyNTM0MjZmOGQxNjgzNjM1NGNiOTEwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Yjk1NjJmNzg3YWY0MWFmOWM3OTZjYTQ3YTI2MTJhMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWI5NTYyZjc4N2FmNDFhZjljNzk2Y2E0N2EyNjEyYTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXJtaGVyemlnZSBCcsO8ZGVyICgxNCwgTGluemVyIFN0cmHDn2UgNjYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiMDc5ZTZkNjI1MzQyNmY4ZDE2ODM2MzU0Y2I5MTA2LnNldENvbnRlbnQoaHRtbF81Yjk1NjJmNzg3YWY0MWFmOWM3OTZjYTQ3YTI2MTJhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk4ZGU2NGVhYzNhYjRjYTlhM2RlY2M1NzcyOWIwMjU4LmJpbmRQb3B1cChwb3B1cF9mYjA3OWU2ZDYyNTM0MjZmOGQxNjgzNjM1NGNiOTEwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg4NzdiMjkyMTZjMzQ0ZWZhYzIyZWQxM2E4YjU5NGZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkyNzc3Nzc3OCwxNi4zNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU2MmQ5YzE0MGJkNGFiMzkzZjIwMDY2NGEzZGE2NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTgxYmMyMmFkNjFlNGI4ZGI0YTNhNjUzMGM3NDkzYmMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU4MWJjMjJhZDYxZTRiOGRiNGEzYTY1MzBjNzQ5M2JjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFybWhlcnppZ2UgU2Nod2VzdGVybjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTYyZDljMTQwYmQ0YWIzOTNmMjAwNjY0YTNkYTY0Zi5zZXRDb250ZW50KGh0bWxfNTgxYmMyMmFkNjFlNGI4ZGI0YTNhNjUzMGM3NDkzYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ODc3YjI5MjE2YzM0NGVmYWMyMmVkMTNhOGI1OTRmZC5iaW5kUG9wdXAocG9wdXBfODU2MmQ5YzE0MGJkNGFiMzkzZjIwMDY2NGEzZGE2NGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYWM2MDY2MWViYjc0MzE1YWZmOWFhZTJlOGI5YjRkNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNzUsMTYuMzQ2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDk4ZGY5NjA4ODc0YWYyYjUxZGRhMWEyYjBjZDU3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOGU2MmE2N2E5NDY0MTJlYmU2M2Y4YTQ4MGJhZmM3MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDhlNjJhNjdhOTQ2NDEyZWJlNjNmOGE0ODBiYWZjNzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXJuYWJpdGVuZnJlaWhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDk4ZGY5NjA4ODc0YWYyYjUxZGRhMWEyYjBjZDU3YS5zZXRDb250ZW50KGh0bWxfZDhlNjJhNjdhOTQ2NDEyZWJlNjNmOGE0ODBiYWZjNzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYWM2MDY2MWViYjc0MzE1YWZmOWFhZTJlOGI5YjRkNC5iaW5kUG9wdXAocG9wdXBfNmQ5OGRmOTYwODg3NGFmMmI1MWRkYTFhMmIwY2Q1N2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80OTUzOGZhYjg4ZmI0ZjU1OWIzODVjNmIwYWJkYTIyYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzc3Nzc3NzgsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZDg5OWI5ZTEzZmE0NTg1YTRiYjk2ZDFmMjI0OThkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNzNhOTFhMGI1YTQ0YWI1YTJmMjIwMDA0YjQ4MDY0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjczYTkxYTBiNWE0NGFiNWEyZjIyMDAwNGI0ODA2NGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXJuYWJpdGVua2xvc3RlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZDg5OWI5ZTEzZmE0NTg1YTRiYjk2ZDFmMjI0OThkZi5zZXRDb250ZW50KGh0bWxfZjczYTkxYTBiNWE0NGFiNWEyZjIyMDAwNGI0ODA2NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80OTUzOGZhYjg4ZmI0ZjU1OWIzODVjNmIwYWJkYTIyYi5iaW5kUG9wdXAocG9wdXBfYWQ4OTliOWUxM2ZhNDU4NWE0YmI5NmQxZjIyNDk4ZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84M2Y5M2NmOTFlNTk0NmNjOTk3ZTcxNTI1NDNkMzY3NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOGI2MTI3MzVkNmE0MmZmODBkMTBjZmI1MWI1Njc2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjFhYmJmMDk4MGU0ZWQ3YWY5MzQxYjg2N2E3MWYwZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmYxYWJiZjA5ODBlNGVkN2FmOTM0MWI4NjdhNzFmMGUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJhcnRoZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOGI2MTI3MzVkNmE0MmZmODBkMTBjZmI1MWI1Njc2MC5zZXRDb250ZW50KGh0bWxfNmYxYWJiZjA5ODBlNGVkN2FmOTM0MWI4NjdhNzFmMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84M2Y5M2NmOTFlNTk0NmNjOTk3ZTcxNTI1NDNkMzY3Ni5iaW5kUG9wdXAocG9wdXBfMjhiNjEyNzM1ZDZhNDJmZjgwZDEwY2ZiNTFiNTY3NjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNzJmNWVlZGE3NDA0MDVlODgzMjZlMDI0ZTIzODZjYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzczMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjYwMmE3OWNkZDU0NGFkYjQxNzU5MzFlMzExYzYyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzQ5NTAyOWUyMDk0ODcxYTA5OGEzZDc4YmEyZWYwMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWM0OTUwMjllMjA5NDg3MWEwOThhM2Q3OGJhMmVmMDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXJ0aG9sb23DpHVza2FwZWxsZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjYwMmE3OWNkZDU0NGFkYjQxNzU5MzFlMzExYzYyYi5zZXRDb250ZW50KGh0bWxfYWM0OTUwMjllMjA5NDg3MWEwOThhM2Q3OGJhMmVmMDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNzJmNWVlZGE3NDA0MDVlODgzMjZlMDI0ZTIzODZjYi5iaW5kUG9wdXAocG9wdXBfYjY2MDJhNzljZGQ1NDRhZGI0MTc1OTMxZTMxMWM2MmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMDY5ZTgzMGE1YWU0YTFhYWJlOGE2YmJhZmIyNDYwZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODA1NTU1NTYsMTYuMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmM0NGFlNGM2ZDc5NGIwMjk2ZjQzN2IzNjA2NTc4YjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTE5YTkzOWY2MjA3NDdmNTkzMzdhZWJjOWI0NmMyM2YgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUxOWE5MzlmNjIwNzQ3ZjU5MzM3YWViYzliNDZjMjNmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmFydG9sb3R0aS1QYXJ0ZW5mZWxkLVBhbGFpczwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzQ0YWU0YzZkNzk0YjAyOTZmNDM3YjM2MDY1NzhiOC5zZXRDb250ZW50KGh0bWxfNTE5YTkzOWY2MjA3NDdmNTkzMzdhZWJjOWI0NmMyM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMDY5ZTgzMGE1YWU0YTFhYWJlOGE2YmJhZmIyNDYwZC5iaW5kUG9wdXAocG9wdXBfYmM0NGFlNGM2ZDc5NGIwMjk2ZjQzN2IzNjA2NTc4YjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZjgxZTk3NmQ1ZTg0MDhhYTkyZWVkMDEwNzgzNjNjZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzc3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzEzYjk4NDVhMTg0ZmEyYmVlYmQ3ODQ2YWQwM2IyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYWIwYTE3NjRhNWE0ODBjYWU2ZmQzMWNlMzMwZDk2NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmFiMGExNzY0YTVhNDgwY2FlNmZkMzFjZTMzMGQ5NjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXNpbGlza2VuaGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzEzYjk4NDVhMTg0ZmEyYmVlYmQ3ODQ2YWQwM2IyZS5zZXRDb250ZW50KGh0bWxfYmFiMGExNzY0YTVhNDgwY2FlNmZkMzFjZTMzMGQ5NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZjgxZTk3NmQ1ZTg0MDhhYTkyZWVkMDEwNzgzNjNjZC5iaW5kUG9wdXAocG9wdXBfZTMxM2I5ODQ1YTE4NGZhMmJlZWJkNzg0NmFkMDNiMmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZDE4ZWE0MGYxZDA0Y2MyODhkYmQzMzc5Mzc3MjQ3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzcxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZmY1MWRmNWU4MDg0ZjU2OWEwM2FlZDRmYTQzOTU1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmJkZGM3MDQ4OGI0YmEwODRiY2M3YWRkOTI4NDUzNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDZiZGRjNzA0ODhiNGJhMDg0YmNjN2FkZDkyODQ1MzYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXN0ZWk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmZmNTFkZjVlODA4NGY1NjlhMDNhZWQ0ZmE0Mzk1NTQuc2V0Q29udGVudChodG1sXzQ2YmRkYzcwNDg4YjRiYTA4NGJjYzdhZGQ5Mjg0NTM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGQxOGVhNDBmMWQwNGNjMjg4ZGJkMzM3OTM3NzI0NzQuYmluZFBvcHVwKHBvcHVwX2JmZjUxZGY1ZTgwODRmNTY5YTAzYWVkNGZhNDM5NTU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTM3MDRlZDYzMzFjNGE3ZWJjZjJhODM3YmE4NzcxZDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDM4ODg4ODg5LDE2LjM3MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVjNzQyN2M5MWM4NDM4N2I4MTJkZjY3MTg0MTNlMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDZjY2RiNGVmOGJkNGNjYWI5YjJkNGJkNWI5ODViZGQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2Y2NkYjRlZjhiZDRjY2FiOWIyZDRiZDViOTg1YmRkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF0dGh5w6FueXNjaGVzIEhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTVjNzQyN2M5MWM4NDM4N2I4MTJkZjY3MTg0MTNlMTYuc2V0Q29udGVudChodG1sXzQ2Y2NkYjRlZjhiZDRjY2FiOWIyZDRiZDViOTg1YmRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTM3MDRlZDYzMzFjNGE3ZWJjZjJhODM3YmE4NzcxZDIuYmluZFBvcHVwKHBvcHVwXzE1Yzc0MjdjOTFjODQzODdiODEyZGY2NzE4NDEzZTE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDlkZGFjMWM1NzU3NGQ1OGE1MmQ0NDYxMjQ3MTkwNTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDg4ODg4ODg5LDE2LjM3MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjcxZDYwNGY0OTQ2NDc1ZThjYjU4YWQwOGU2MDI1ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU2MDhkOWY3YWMxNDJiMTlkZmEzODA1NzBlYThmYzkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzllNjA4ZDlmN2FjMTQyYjE5ZGZhMzgwNTcwZWE4ZmM5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF1ZXJuZmVpbmRzY2hlcyBIYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3MWQ2MDRmNDk0NjQ3NWU4Y2I1OGFkMDhlNjAyNWYwLnNldENvbnRlbnQoaHRtbF85ZTYwOGQ5ZjdhYzE0MmIxOWRmYTM4MDU3MGVhOGZjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ5ZGRhYzFjNTc1NzRkNThhNTJkNDQ2MTI0NzE5MDUxLmJpbmRQb3B1cChwb3B1cF8yNzFkNjA0ZjQ5NDY0NzVlOGNiNThhZDA4ZTYwMjVmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4MTAwNjljYTI2NzQ0MzRiNGNiN2Q1YWE2Mzc3MmM4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTU0MTY2NjY2NywxNi40NDExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmNmUwNWE2ODAzNjRkYTQ4ZjU0YThlZjhkMWY3YzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1NDJlOWI0ZjIwZjQzN2ZiOWEzM2IwY2UyMTdmMTI5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNTQyZTliNGYyMGY0MzdmYjlhMzNiMGNlMjE3ZjEyOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmF1ZXJuZmVsZC1HcmFiZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZjZlMDVhNjgwMzY0ZGE0OGY1NGE4ZWY4ZDFmN2MyNC5zZXRDb250ZW50KGh0bWxfZjU0MmU5YjRmMjBmNDM3ZmI5YTMzYjBjZTIxN2YxMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ODEwMDY5Y2EyNjc0NDM0YjRjYjdkNWFhNjM3NzJjOC5iaW5kUG9wdXAocG9wdXBfN2Y2ZTA1YTY4MDM2NGRhNDhmNTRhOGVmOGQxZjdjMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZGMxNTA0ZGYxZDI0NGE2YTgzNjZkMGI1MGExNzg5MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0MjIyMjIyMjIsMTYuMzU1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZmQzYmI3Y2I0YTY0Mjk0YmY4YzdlNGU4ODlhZTAzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYzIyMGNmYzJhYjk0NTE5OTE0NThhNWM5NzMxNDM0ZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmMyMjBjZmMyYWI5NDUxOTkxNDU4YTVjOTczMTQzNGUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXVlcm5mZWxkLVN0ZXJiZWhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2ZkM2JiN2NiNGE2NDI5NGJmOGM3ZTRlODg5YWUwMzguc2V0Q29udGVudChodG1sXzJjMjIwY2ZjMmFiOTQ1MTk5MTQ1OGE1Yzk3MzE0MzRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2RjMTUwNGRmMWQyNDRhNmE4MzY2ZDBiNTBhMTc4OTAuYmluZFBvcHVwKHBvcHVwXzNmZDNiYjdjYjRhNjQyOTRiZjhjN2U0ZTg4OWFlMDM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTAxNzcyMTA2ZTVjNGYyZThmNTczMjJiMmRhNzA5MGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjM3ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWYxMzAwMDYxNGMxNGZkYWJiZmQ2MjU0MDJkOTEyMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM5MjFlNTIzYzg0NDFhMGExMGZjN2FlMTMwZGY1NWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YzOTIxZTUyM2M4NDQxYTBhMTBmYzdhZTEzMGRmNTVlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF1ZXJuZmVsZGhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjEzMDAwNjE0YzE0ZmRhYmJmZDYyNTQwMmQ5MTIwMC5zZXRDb250ZW50KGh0bWxfZjM5MjFlNTIzYzg0NDFhMGExMGZjN2FlMTMwZGY1NWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMDE3NzIxMDZlNWM0ZjJlOGY1NzMyMmIyZGE3MDkwZC5iaW5kUG9wdXAocG9wdXBfZWYxMzAwMDYxNGMxNGZkYWJiZmQ2MjU0MDJkOTEyMDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZWMxZDIxYmIyOWQ0OWE5OTZmNTU0ODI3MTQ4MzJjZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzcyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNThiM2ZiMDMzODA0MWEyYjI2ZjNlZDc0ZTIxYjYyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDllMjNkNDRhN2I0NDMzYTg2YjZlMzFlMDg5NGRmMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTA5ZTIzZDQ0YTdiNDQzM2E4NmI2ZTMxZTA4OTRkZjMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXVlcm5tYXJrdCAxMjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNThiM2ZiMDMzODA0MWEyYjI2ZjNlZDc0ZTIxYjYyNS5zZXRDb250ZW50KGh0bWxfNTA5ZTIzZDQ0YTdiNDQzM2E4NmI2ZTMxZTA4OTRkZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZWMxZDIxYmIyOWQ0OWE5OTZmNTU0ODI3MTQ4MzJjZi5iaW5kUG9wdXAocG9wdXBfMTU4YjNmYjAzMzgwNDFhMmIyNmYzZWQ3NGUyMWI2MjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMmE1NjRhZDhjZGU0NDhjYjAyMjA0ODU1YmZhOTlhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzczMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDQ4NjA3ZmY5YWY0ZDI4ODY0OTRjZDEyZTdjOGJlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmNlNTAxMjQ2YjY0ODAzYmIxYzVlNjQxMjJmYWQ1YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTJjZTUwMTI0NmI2NDgwM2JiMWM1ZTY0MTIyZmFkNWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXVlcm5tYXJrdCAxNDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MDQ4NjA3ZmY5YWY0ZDI4ODY0OTRjZDEyZTdjOGJlYi5zZXRDb250ZW50KGh0bWxfMTJjZTUwMTI0NmI2NDgwM2JiMWM1ZTY0MTIyZmFkNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMmE1NjRhZDhjZGU0NDhjYjAyMjA0ODU1YmZhOTlhZi5iaW5kUG9wdXAocG9wdXBfODA0ODYwN2ZmOWFmNGQyODg2NDk0Y2QxMmU3YzhiZWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZGIzOWY5NDQ0MWI0OGY5OWEzOGE5MDhkZmU5YTllMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxLDE2LjM3MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWEzYmE5OTMwYTY5NDU5ZWE1MzE3ZGI4ZDdhMjRlZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDAyMDUxODI4ZThmNDc5M2E2ZjNiZjY3MzE3ZjkzMWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QwMjA1MTgyOGU4ZjQ3OTNhNmYzYmY2NzMxN2Y5MzFiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF1ZXJubWFya3QgMTY8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWEzYmE5OTMwYTY5NDU5ZWE1MzE3ZGI4ZDdhMjRlZDYuc2V0Q29udGVudChodG1sX2QwMjA1MTgyOGU4ZjQ3OTNhNmYzYmY2NzMxN2Y5MzFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWRiMzlmOTQ0NDFiNDhmOTlhMzhhOTA4ZGZlOWE5ZTAuYmluZFBvcHVwKHBvcHVwXzlhM2JhOTkzMGE2OTQ1OWVhNTMxN2RiOGQ3YTI0ZWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTA4Mzk0MDU5NzZmNDRkZGJiODk4MWU2NjY0ZDMzY2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMSwxNi4zNzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzMGMxZjI2ODBkNTRiZTA4MmIxMTYzNTQ2N2IzNmNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlOGExZWViNWI1YjQyZDI5NTc0MTdmMGMzNTljMjRjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZThhMWVlYjViNWI0MmQyOTU3NDE3ZjBjMzU5YzI0YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhdWVybm1hcmt0IDE4PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzMGMxZjI2ODBkNTRiZTA4MmIxMTYzNTQ2N2IzNmNjLnNldENvbnRlbnQoaHRtbF83ZThhMWVlYjViNWI0MmQyOTU3NDE3ZjBjMzU5YzI0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EwODM5NDA1OTc2ZjQ0ZGRiYjg5ODFlNjY2NGQzM2NmLmJpbmRQb3B1cChwb3B1cF9mMzBjMWYyNjgwZDU0YmUwODJiMTE2MzU0NjdiMzZjYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3NzMxMWFmODlmYjQ3Mzg5YTNkOWRiMTA2MWM1ZmNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNzExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2YTRhODJkMDc5MDQxZmM5ZTA2NmJjMzgzMmM3N2JlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmZTZjNWJlODViODQ5NTFiMTEwOTg0ZjFkNWVmNzU1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hZmU2YzViZTg1Yjg0OTUxYjExMDk4NGYxZDVlZjc1NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhdWVybm1hcmt0IDI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDZhNGE4MmQwNzkwNDFmYzllMDY2YmMzODMyYzc3YmUuc2V0Q29udGVudChodG1sX2FmZTZjNWJlODViODQ5NTFiMTEwOTg0ZjFkNWVmNzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDc3MzExYWY4OWZiNDczODlhM2Q5ZGIxMDYxYzVmY2MuYmluZFBvcHVwKHBvcHVwXzA2YTRhODJkMDc5MDQxZmM5ZTA2NmJjMzgzMmM3N2JlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGM4YzUyNDMxMzBlNDQxZmJlMTZiMDYyMTc3NjkzOTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTA4MzMzMzMzLDE2LjM3NDE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE0NDNkZjkyYTM0NDYyYzkwMmVkMjYwOTRhZGIzMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZlYTBlYmI3NjhjNGY1YjkwOTgwYTQxMjdkYjBiZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE2ZWEwZWJiNzY4YzRmNWI5MDk4MGE0MTI3ZGIwYmY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF1ZXJubWFya3QgMjE8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE0NDNkZjkyYTM0NDYyYzkwMmVkMjYwOTRhZGIzMTMuc2V0Q29udGVudChodG1sXzE2ZWEwZWJiNzY4YzRmNWI5MDk4MGE0MTI3ZGIwYmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGM4YzUyNDMxMzBlNDQxZmJlMTZiMDYyMTc3NjkzOTAuYmluZFBvcHVwKHBvcHVwX2QxNDQzZGY5MmEzNDQ2MmM5MDJlZDI2MDk0YWRiMzEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDU5NmUzZTJlMzIwNDlkNzkxM2IwYWQ0NzU4Y2Y4NmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDk3MjIyMjIyLDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODM5M2NkODNkMDQ1NGJhYmIyMjJkYjUwMjJjNzQzN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjhkMzlkZmU5MTY0NDZkZDhlNjg5MzYxNTVlMmJlYzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY4ZDM5ZGZlOTE2NDQ2ZGQ4ZTY4OTM2MTU1ZTJiZWMxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF1ZXJubWFya3QgMzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MzkzY2Q4M2QwNDU0YmFiYjIyMmRiNTAyMmM3NDM3Yi5zZXRDb250ZW50KGh0bWxfNjhkMzlkZmU5MTY0NDZkZDhlNjg5MzYxNTVlMmJlYzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NTk2ZTNlMmUzMjA0OWQ3OTEzYjBhZDQ3NThjZjg2ZC5iaW5kUG9wdXAocG9wdXBfODM5M2NkODNkMDQ1NGJhYmIyMjJkYjUwMjJjNzQzN2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZGY2NzFiOTM0OGI0OWFlYTgwY2FiZTc0OTA3OTZhYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzcyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNzVmYjNiYzYzYmQ0MzkwYTE5NTk5OGZjYzM4NGQxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODhlZTc0ZTJhZDc0NjBiYTNkNWIyNWNlOTg2MTBiMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjg4ZWU3NGUyYWQ3NDYwYmEzZDViMjVjZTk4NjEwYjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXVlcm5tYXJrdCA2PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3NWZiM2JjNjNiZDQzOTBhMTk1OTk4ZmNjMzg0ZDE5LnNldENvbnRlbnQoaHRtbF8yODhlZTc0ZTJhZDc0NjBiYTNkNWIyNWNlOTg2MTBiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBkZjY3MWI5MzQ4YjQ5YWVhODBjYWJlNzQ5MDc5NmFiLmJpbmRQb3B1cChwb3B1cF9lNzVmYjNiYzYzYmQ0MzkwYTE5NTk5OGZjYzM4NGQxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgyNTdkMTc3Nzk1NzQ2NzY5YmZiZjE0Yzc2MWViZjhhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5NzIyMjIyMiwxNi4zNzIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNTQxNjRmODFkNzQ2MzI4MDE5Yzg1ZjJkYzU3M2NmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxMjYzY2FlYTA0YTQ3MzNiNTI4NjNiMmI4MzIxNDc2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MTI2M2NhZWEwNGE0NzMzYjUyODYzYjJiODMyMTQ3NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhdWVybm1hcmt0IDg8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE1NDE2NGY4MWQ3NDYzMjgwMTljODVmMmRjNTczY2Yuc2V0Q29udGVudChodG1sXzcxMjYzY2FlYTA0YTQ3MzNiNTI4NjNiMmI4MzIxNDc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODI1N2QxNzc3OTU3NDY3NjliZmJmMTRjNzYxZWJmOGEuYmluZFBvcHVwKHBvcHVwX2ExNTQxNjRmODFkNzQ2MzI4MDE5Yzg1ZjJkYzU3M2NmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDJlN2M4ZTM3OWZkNDYzYzkzOTZlNjAzYWZhNTQ2MjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDk3MjIyMjIyLDE2LjM3MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWI2ZDdiMTA1N2UwNDU1Nzg1ZmNiNWY5YzFmYmViNWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThiMDNlZWUyYWQ4NDNkNmE4NzcwNWIxNzZjNzUyNzMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E4YjAzZWVlMmFkODQzZDZhODc3MDViMTc2Yzc1MjczIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF1ZXJubWFya3QgOTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjZkN2IxMDU3ZTA0NTU3ODVmY2I1ZjljMWZiZWI1Yy5zZXRDb250ZW50KGh0bWxfYThiMDNlZWUyYWQ4NDNkNmE4NzcwNWIxNzZjNzUyNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMmU3YzhlMzc5ZmQ0NjNjOTM5NmU2MDNhZmE1NDYyMS5iaW5kUG9wdXAocG9wdXBfNWI2ZDdiMTA1N2UwNDU1Nzg1ZmNiNWY5YzFmYmViNWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MmUzZTJmNjU2ZTY0YmQ2Yjc1ZDFlMDM5YTdkMDI1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTY2NjY2NjcsMTYuMzYzNjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjI1MmNjYTAyZDE0YTk5ODIxNjllN2ViMGY5Yjc5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2U3NTgzODg0YWI0MzA3YmQyNWZkMTZlNmVlYjhiMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjNlNzU4Mzg4NGFiNDMwN2JkMjVmZDE2ZTZlZWI4YjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXVtZ2FydGVuYmVyZ2VyIEhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZjI1MmNjYTAyZDE0YTk5ODIxNjllN2ViMGY5Yjc5MC5zZXRDb250ZW50KGh0bWxfYjNlNzU4Mzg4NGFiNDMwN2JkMjVmZDE2ZTZlZWI4YjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MmUzZTJmNjU2ZTY0YmQ2Yjc1ZDFlMDM5YTdkMDI1OC5iaW5kUG9wdXAocG9wdXBfN2YyNTJjY2EwMmQxNGE5OTgyMTY5ZTdlYjBmOWI3OTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NzFhNTUxZjYxY2E0ODYzYWNhYmFhMmE1MmIzZmU3OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE0NjY2NjY2NjcsMTYuMjUyNzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODVkNTIxOTQzYzI0NTYyYTA5YmYyYTMzYTEwNjU1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzIwODJhNzA4NWQ0MDk0YjAyMDkyZWU1ZmYyNzY0OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDcyMDgyYTcwODVkNDA5NGIwMjA5MmVlNWZmMjc2NDkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyw7xja2U6IEJhdW1nYXJ0ZW5icsO8Y2tlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NWQ1MjE5NDNjMjQ1NjJhMDliZjJhMzNhMTA2NTU5LnNldENvbnRlbnQoaHRtbF80NzIwODJhNzA4NWQ0MDk0YjAyMDkyZWU1ZmYyNzY0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY3MWE1NTFmNjFjYTQ4NjNhY2FiYWEyYTUyYjNmZTc5LmJpbmRQb3B1cChwb3B1cF83ODVkNTIxOTQzYzI0NTYyYTA5YmYyYTMzYTEwNjU1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U5NTAzOTIwMjE1OTRjYjc4MDJiNzAwNjM3ODJjNmVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkyNzc3Nzc3OCwxNi4yNzYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwNjFjOWJlNTkzODQ3NTVhYmVkYTg1ZDhkMDJhNjNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlMzhmOWZjOWI2OTQ5NTliYWZhYzQ5ZTY1MDMzODdlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZTM4ZjlmYzliNjk0OTU5YmFmYWM0OWU2NTAzMzg3ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhdW1nYXJ0bmVyIEJhZDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MDYxYzliZTU5Mzg0NzU1YWJlZGE4NWQ4ZDAyYTYzYS5zZXRDb250ZW50KGh0bWxfN2UzOGY5ZmM5YjY5NDk1OWJhZmFjNDllNjUwMzM4N2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lOTUwMzkyMDIxNTk0Y2I3ODAyYjcwMDYzNzgyYzZlZi5iaW5kUG9wdXAocG9wdXBfNzA2MWM5YmU1OTM4NDc1NWFiZWRhODVkOGQwMmE2M2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOTEyNDIyODZhMzM0ZGFhYTI1MTk1ZjliYTNlNDdiNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Njk0NDQ0NDQsMTYuMjc2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDFiY2ZjOTRlOTU0M2YwYTcxMWNjZmY5ZjViZGRiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MDRjMWUwMzU2OGM0YjhlYjYxYTU1NmU5MTgxYWNiOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjA0YzFlMDM1NjhjNGI4ZWI2MWE1NTZlOTE4MWFjYjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCYXVtZ2FydG5lciBDYXNpbm88L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQxYmNmYzk0ZTk1NDNmMGE3MTFjY2ZmOWY1YmRkYmEuc2V0Q29udGVudChodG1sXzYwNGMxZTAzNTY4YzRiOGViNjFhNTU2ZTkxODFhY2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjkxMjQyMjg2YTMzNGRhYWEyNTE5NWY5YmEzZTQ3YjUuYmluZFBvcHVwKHBvcHVwXzM0MWJjZmM5NGU5NTQzZjBhNzExY2NmZjlmNWJkZGJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODJjMGVmNDZhNjg4NDFlNzkzYmFlNjlhM2VmZTY1ZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTUsMTYuMjgzMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lY2NiMzdhODAzZTY0NjBlODVjZjY3YWFhM2RkZWNhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wY2U3ZGQ2OWZkMWM0Y2U4OTY3MjJhYzU1OWJmNzAyNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGNlN2RkNjlmZDFjNGNlODk2NzIyYWM1NTliZjcwMjQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQmF1bWdhcnRuZXIgS2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjY2IzN2E4MDNlNjQ2MGU4NWNmNjdhYWEzZGRlY2E5LnNldENvbnRlbnQoaHRtbF8wY2U3ZGQ2OWZkMWM0Y2U4OTY3MjJhYzU1OWJmNzAyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgyYzBlZjQ2YTY4ODQxZTc5M2JhZTY5YTNlZmU2NWZjLmJpbmRQb3B1cChwb3B1cF9lY2NiMzdhODAzZTY0NjBlODVjZjY3YWFhM2RkZWNhOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y2NjkwOWNkYjBlODRmMTI4NzAzZjA2YmQwZmUxNzhhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk3NSwxNi4yODU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1OTgxN2JkNmIzYjQ3ZjRiNmVhYjliNGU4NzBlMGMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5NDE5MTRjNDYxNjQ0ODRiNDZiMmMwOGNjYjI3ZTk5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83OTQxOTE0YzQ2MTY0NDg0YjQ2YjJjMDhjY2IyN2U5OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJhdW1nYXJ0bmVyIFBmbGVnZWhlaW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDU5ODE3YmQ2YjNiNDdmNGI2ZWFiOWI0ZTg3MGUwYzMuc2V0Q29udGVudChodG1sXzc5NDE5MTRjNDYxNjQ0ODRiNDZiMmMwOGNjYjI3ZTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjY2OTA5Y2RiMGU4NGYxMjg3MDNmMDZiZDBmZTE3OGEuYmluZFBvcHVwKHBvcHVwXzQ1OTgxN2JkNmIzYjQ3ZjRiNmVhYjliNGU4NzBlMGMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2Q0NWZmMzhlODJmNDU4MTgxNzZiNGM1ZmNhZGVjODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTk0NDQ0NDQ0LDE2LjI3MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGIxNWZkYTY0NjQwNDQ2NjgzNGQ4Mjg0NmU2MjI0ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTIzMmUxMDhjYzVkNDg3Zjg1MTBiMDk5ZjcxMzhiOGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkyMzJlMTA4Y2M1ZDQ4N2Y4NTEwYjA5OWY3MTM4YjhiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEJhdW1nYXJ0bmVyIFNlZWxzb3JnZXplbnRydW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGIxNWZkYTY0NjQwNDQ2NjgzNGQ4Mjg0NmU2MjI0ODIuc2V0Q29udGVudChodG1sXzkyMzJlMTA4Y2M1ZDQ4N2Y4NTEwYjA5OWY3MTM4YjhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Q0NWZmMzhlODJmNDU4MTgxNzZiNGM1ZmNhZGVjODguYmluZFBvcHVwKHBvcHVwXzBiMTVmZGE2NDY0MDQ0NjY4MzRkODI4NDZlNjIyNDgyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTU2ZmFmYzY3NjdkNDhiZDkyZDc5NGQ5OTgwY2U2MTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTkxNjY2NjY3LDE2LjM4MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTM2MDkxZTI5N2U5NDkwNjg3NzA4YzRiYzk2NGU3MWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWNmMDViOWM5NjgwNDhkOTkwODExNjQ5ODI5YWY2MDcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzljZjA1YjljOTY4MDQ4ZDk5MDgxMTY0OTgyOWFmNjA3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmF5cmlzY2hlciBIb2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM2MDkxZTI5N2U5NDkwNjg3NzA4YzRiYzk2NGU3MWQuc2V0Q29udGVudChodG1sXzljZjA1YjljOTY4MDQ4ZDk5MDgxMTY0OTgyOWFmNjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTU2ZmFmYzY3NjdkNDhiZDkyZDc5NGQ5OTgwY2U2MTEuYmluZFBvcHVwKHBvcHVwXzkzNjA5MWUyOTdlOTQ5MDY4NzcwOGM0YmM5NjRlNzFkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmM1ZjI4YTU5ZTNkNDI4Y2JhNjQ3YTRjYTdmMjIxMzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDMwNTU1NTU2LDE2LjM4MzYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I3ZmM0M2U3M2M1NDA5MGJjNDg5NjhkNDg3MTExMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjNkM2NiOTdkMWQ4NDMxN2JmMGEzOGEzNmE1YjJhOGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2IzZDNjYjk3ZDFkODQzMTdiZjBhMzhhMzZhNWIyYThiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBCcsO8Y2tlOiBCZWF0cml4YnLDvGNrZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjdmYzQzZTczYzU0MDkwYmM0ODk2OGQ0ODcxMTEwYi5zZXRDb250ZW50KGh0bWxfYjNkM2NiOTdkMWQ4NDMxN2JmMGEzOGEzNmE1YjJhOGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzVmMjhhNTllM2Q0MjhjYmE2NDdhNGNhN2YyMjEzMC5iaW5kUG9wdXAocG9wdXBfM2I3ZmM0M2U3M2M1NDA5MGJjNDg5NjhkNDg3MTExMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOThjNGEwZTZjZmU0ZjNmYTBlYjdiMTk1MjE5OGFhOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4MTM4ODg4ODksMTYuMzM3Nzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTlhYjNlYmI4MjE0MDk5OTM1ODgzZjIzMjU1YWVmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTM4MmMyNWY3MmQ0YWI1OGFhMGVmMjZmMzQyZDkyYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2UzODJjMjVmNzJkNGFiNThhYTBlZjI2ZjM0MmQ5MmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZWJlbGhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOTlhYjNlYmI4MjE0MDk5OTM1ODgzZjIzMjU1YWVmNi5zZXRDb250ZW50KGh0bWxfY2UzODJjMjVmNzJkNGFiNThhYTBlZjI2ZjM0MmQ5MmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mOThjNGEwZTZjZmU0ZjNmYTBlYjdiMTk1MjE5OGFhOC5iaW5kUG9wdXAocG9wdXBfMDk5YWIzZWJiODIxNDA5OTkzNTg4M2YyMzI1NWFlZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NGZlZDZmZWYyMTM0NWM4OTUwODhiYmEyMDI3NWZhNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjY2NjY2NjcsMTYuMzc1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kY2IwNjE2OTM1NTk0MDFhYTk5NjYyMzU2NmMzYjBiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZWIxMGI0NTY2ZjA0ODFjOTM2ZDkyM2QyMzhmNWYzMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWViMTBiNDU2NmYwNDgxYzkzNmQ5MjNkMjM4ZjVmMzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZWNoZXJsaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjYjA2MTY5MzU1OTQwMWFhOTk2NjIzNTY2YzNiMGI3LnNldENvbnRlbnQoaHRtbF9hZWIxMGI0NTY2ZjA0ODFjOTM2ZDkyM2QyMzhmNWYzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc0ZmVkNmZlZjIxMzQ1Yzg5NTA4OGJiYTIwMjc1ZmE0LmJpbmRQb3B1cChwb3B1cF9kY2IwNjE2OTM1NTk0MDFhYTk5NjYyMzU2NmMzYjBiNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU5ODkzODcwZGFhNDRkYzlhNDQ0N2Q0YjczMTE2ZGFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg1NTU1NTU1NiwxNi4zMDE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2MjMxMmQ4YTdkOTRkZGU5YzczYmJlZDYxZWViOTU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5NWRkZjhlYjAzZDQ2MWVhNzk1YWFmNGE5NGFhNDAzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iOTVkZGY4ZWIwM2Q0NjFlYTc5NWFhZjRhOTRhYTQwMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmVjay1HZWRlbmt0YWZlbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjIzMTJkOGE3ZDk0ZGRlOWM3M2JiZWQ2MWVlYjk1NC5zZXRDb250ZW50KGh0bWxfYjk1ZGRmOGViMDNkNDYxZWE3OTVhYWY0YTk0YWE0MDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OTg5Mzg3MGRhYTQ0ZGM5YTQ0NDdkNGI3MzExNmRhZS5iaW5kUG9wdXAocG9wdXBfMTYyMzEyZDhhN2Q5NGRkZTljNzNiYmVkNjFlZWI5NTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wM2NlOGUyODkzZTY0YzlkYmUyZDY5OGI2NGFmNDYxZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYxOTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjhjNzk5MWQ1Yzg0ZDQxYTEzYmEzMjcyNTQzZmRiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMDUxNDlhYWVhZTg0YTcwOGI1YjNmZTE0NzAxZmRiYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjA1MTQ5YWFlYWU4NGE3MDhiNWIzZmUxNDcwMWZkYmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJlY2stUnppa293c2t5LUdlZGVua3RhZmVsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmOGM3OTkxZDVjODRkNDFhMTNiYTMyNzI1NDNmZGI1LnNldENvbnRlbnQoaHRtbF9mMDUxNDlhYWVhZTg0YTcwOGI1YjNmZTE0NzAxZmRiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAzY2U4ZTI4OTNlNjRjOWRiZTJkNjk4YjY0YWY0NjFkLmJpbmRQb3B1cChwb3B1cF9kZjhjNzk5MWQ1Yzg0ZDQxYTEzYmEzMjcyNTQzZmRiNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdiODM4MjJhYTljZTQzMGVhMjhhZWE5ZjEzNGNjMWUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhMjg2MDJmMGRjNTQ5NjBiNzRmMzdjYjY5MjAwMmFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhNzI5Y2Y5Yjg4MDQ5MjQ5ZjI1MTA5YjhhZjQ4MDMzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYTcyOWNmOWI4ODA0OTI0OWYyNTEwOWI4YWY0ODAzMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmVja2VkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhMjg2MDJmMGRjNTQ5NjBiNzRmMzdjYjY5MjAwMmFjLnNldENvbnRlbnQoaHRtbF8wYTcyOWNmOWI4ODA0OTI0OWYyNTEwOWI4YWY0ODAzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdiODM4MjJhYTljZTQzMGVhMjhhZWE5ZjEzNGNjMWUyLmJpbmRQb3B1cChwb3B1cF8wYTI4NjAyZjBkYzU0OTYwYjc0ZjM3Y2I2OTIwMDJhYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JlZDdjMzYxY2M0YjQyYjVhZTliNmI5YWU3MTAwMjQ2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjM5MTY2NjY2NywxNi4zODY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4MjY2YzViYzE4NjQwZTVhNjQxN2JjZjQ5OTc3NjY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwYzg2YzA1MDYwMzQyMDZhZTdiNDlhNzZmYzNmNjYxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMGM4NmMwNTA2MDM0MjA2YWU3YjQ5YTc2ZmMzZjY2MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlZXJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTgyNjZjNWJjMTg2NDBlNWE2NDE3YmNmNDk5Nzc2NjQuc2V0Q29udGVudChodG1sX2YwYzg2YzA1MDYwMzQyMDZhZTdiNDlhNzZmYzNmNjYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmVkN2MzNjFjYzRiNDJiNWFlOWI2YjlhZTcxMDAyNDYuYmluZFBvcHVwKHBvcHVwX2E4MjY2YzViYzE4NjQwZTVhNjQxN2JjZjQ5OTc3NjY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTU3OWQxNWUzODZhNGQzZGFkOWY5OWI0YjczODg5ZDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTM2MTExMTExLDE2LjM1Mjc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDc0ZDM2MTgxNDdiNDdiNjgyNzRjNDA0ODM5NzFmMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDMxMjkyYWE4YWUzNGFiNmJhYjc1MzJmNTE0ODYyNDIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQzMTI5MmFhOGFlMzRhYjZiYWI3NTMyZjUxNDg2MjQyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVldGhvdmVuLUdyaWxscGFyemVyLUhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDc0ZDM2MTgxNDdiNDdiNjgyNzRjNDA0ODM5NzFmMjQuc2V0Q29udGVudChodG1sXzQzMTI5MmFhOGFlMzRhYjZiYWI3NTMyZjUxNDg2MjQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTU3OWQxNWUzODZhNGQzZGFkOWY5OWI0YjczODg5ZDUuYmluZFBvcHVwKHBvcHVwX2Q3NGQzNjE4MTQ3YjQ3YjY4Mjc0YzQwNDgzOTcxZjI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWNjOWVjNDY1MzRjNDViOGFhYzYyZTgyZGRkODEzMTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTc1LDE2LjM1NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhlMGZiYzk5YWVhNGYwMWE3MmFiMDM1Y2VhMDc3NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzUwMWQ1Mzk0MGQzNDBkYjg5ODNiNzc2MDZmMmRhNGQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M1MDFkNTM5NDBkMzQwZGI4OTgzYjc3NjA2ZjJkYTRkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVldGhvdmVuLUhvZiAoOS8xKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGUwZmJjOTlhZWE0ZjAxYTcyYWIwMzVjZWEwNzc0ZS5zZXRDb250ZW50KGh0bWxfYzUwMWQ1Mzk0MGQzNDBkYjg5ODNiNzc2MDZmMmRhNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Y2M5ZWM0NjUzNGM0NWI4YWFjNjJlODJkZGQ4MTMxNi5iaW5kUG9wdXAocG9wdXBfODhlMGZiYzk5YWVhNGYwMWE3MmFiMDM1Y2VhMDc3NGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MWQ5ZjA2YzBlZWE0OTBjODRiMmMzYjFjM2E1OTFmNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxODA1NTU1NTYsMTYuMzU2Mzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmU1MDQyMjc3ZjM0N2I1YWFjMTZlODI4NGVmMTA2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YTVlNDhhY2ZhNjU0ZDllOGNmZWY3ZTE2YTRmOGFiZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2E1ZTQ4YWNmYTY1NGQ5ZThjZmVmN2UxNmE0ZjhhYmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZWV0aG92ZW4tSG9mICg5LzIpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2ZTUwNDIyNzdmMzQ3YjVhYWMxNmU4Mjg0ZWYxMDY3LnNldENvbnRlbnQoaHRtbF83YTVlNDhhY2ZhNjU0ZDllOGNmZWY3ZTE2YTRmOGFiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUxZDlmMDZjMGVlYTQ5MGM4NGIyYzNiMWMzYTU5MWY0LmJpbmRQb3B1cChwb3B1cF81NmU1MDQyMjc3ZjM0N2I1YWFjMTZlODI4NGVmMTA2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhjMzJkNmY2ZDQ1ZjRmNzg4MTMxNTA1ZTc3OTNmYWUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE2NjY2NjY2NywxNi4zNTc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1YzdkMzU5MDBkOTQxMjY5N2IyOGQyOWYxZmYwNmE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyYmQ0MzRjZGVkMzRiYzU5NDlhYWZiYTAzZGUxMDgyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MmJkNDM0Y2RlZDM0YmM1OTQ5YWFmYmEwM2RlMTA4MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlZXRob3Zlbi1TdGVyYmVoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1YzdkMzU5MDBkOTQxMjY5N2IyOGQyOWYxZmYwNmE5LnNldENvbnRlbnQoaHRtbF83MmJkNDM0Y2RlZDM0YmM1OTQ5YWFmYmEwM2RlMTA4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjMzJkNmY2ZDQ1ZjRmNzg4MTMxNTA1ZTc3OTNmYWUwLmJpbmRQb3B1cChwb3B1cF8xNWM3ZDM1OTAwZDk0MTI2OTdiMjhkMjlmMWZmMDZhOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZmNjZmNGU1NGE5MTRhOTRhNDVmYjhlOGNhNzBlY2E5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAxNjY2NjY2NywxNi4zNzY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMTYzZmJjYmFlMjQ2OWZhMmNkNWVlY2ZiY2ZkOWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxNTMxY2EwODIxYzRlZTJiNTViMjM4ZmQyZWU0NGEwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMTUzMWNhMDgyMWM0ZWUyYjU1YjIzOGZkMmVlNDRhMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmVldGhvdmVuZGVua21hbCAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIxNjNmYmNiYWUyNDY5ZmEyY2Q1ZWVjZmJjZmQ5ZTYuc2V0Q29udGVudChodG1sXzIxNTMxY2EwODIxYzRlZTJiNTViMjM4ZmQyZWU0NGEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmY2NmY0ZTU0YTkxNGE5NGE0NWZiOGU4Y2E3MGVjYTkuYmluZFBvcHVwKHBvcHVwX2QyMTYzZmJjYmFlMjQ2OWZhMmNkNWVlY2ZiY2ZkOWU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTg4ZTFiODIwYjFmNGEwNGExZTUzY2NiYTM4ODMwYzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTgzMzMzMzMzLDE2LjM1MTM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTFmZGQ2OWM1YzU3NGVjNTgxNTM4ZmE5NGNmZjc1MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmVlMGU0YzU0ZDFkNDY5YmFlNDRmMTJhYTcxNzM3ZTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZlZTBlNGM1NGQxZDQ2OWJhZTQ0ZjEyYWE3MTczN2U0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCZWV0aG92ZW5kZW5rbWFsICgxOSwgQmVldGhvdmVuZ2FuZyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTFmZGQ2OWM1YzU3NGVjNTgxNTM4ZmE5NGNmZjc1MmUuc2V0Q29udGVudChodG1sX2ZlZTBlNGM1NGQxZDQ2OWJhZTQ0ZjEyYWE3MTczN2U0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTg4ZTFiODIwYjFmNGEwNGExZTUzY2NiYTM4ODMwYzkuYmluZFBvcHVwKHBvcHVwX2UxZmRkNjljNWM1NzRlYzU4MTUzOGZhOTRjZmY3NTJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzg0ZmE0ZDE2OTdjNDgyMjg5NTZlNmQyMmYzOTViMTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTQxNjY2NjY3LDE2LjM1NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjgzNGQ1MTRhNmQ1NDEwMjg1MjcyZTYxNTE1ZGMzMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzljMDA3NDRhYmUxNDgwYzk5YjM3ODExNzM1MjI0N2UgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M5YzAwNzQ0YWJlMTQ4MGM5OWIzNzgxMTczNTIyNDdlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCZWV0aG92ZW5kZW5rbWFsICgxOSwgSGVpbGlnZW5zdMOkZHRlciBQYXJrKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODM0ZDUxNGE2ZDU0MTAyODUyNzJlNjE1MTVkYzMwOC5zZXRDb250ZW50KGh0bWxfYzljMDA3NDRhYmUxNDgwYzk5YjM3ODExNzM1MjI0N2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zODRmYTRkMTY5N2M0ODIyODk1NmU2ZDIyZjM5NWIxNi5iaW5kUG9wdXAocG9wdXBfMjgzNGQ1MTRhNmQ1NDEwMjg1MjcyZTYxNTE1ZGMzMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80YTg3MWNkOWZhZTI0ZmU5YjRmNWQ5YmJiZThjODgzOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1NSwxNi4zNTg2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYzhlOWVmMmU0NTQyMGE5YTA0NTA1Mzg3ZjdmMjExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwMTllMjMyZWY3NjQ2ZmRhMTNmMzAzNDQwMzVmYWNiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMDE5ZTIzMmVmNzY0NmZkYTEzZjMwMzQ0MDM1ZmFjYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmVldGhvdmVuZGVua21hbCAoMTksIFBmYXJycGxhdHogMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JjOGU5ZWYyZTQ1NDIwYTlhMDQ1MDUzODdmN2YyMTEuc2V0Q29udGVudChodG1sXzMwMTllMjMyZWY3NjQ2ZmRhMTNmMzAzNDQwMzVmYWNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGE4NzFjZDlmYWUyNGZlOWI0ZjVkOWJiYmU4Yzg4MzkuYmluZFBvcHVwKHBvcHVwX2NiYzhlOWVmMmU0NTQyMGE5YTA0NTA1Mzg3ZjdmMjExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTE3MGE3NjliOGNiNGFiZWJjMDA4ZGFmZjk5MWYzOTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDA1NTU1NTU2LDE2LjM3Njk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQyMjZjYjc2NzM4NDJkMWI1ZTc1NzMyNDE5MmE1MzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQ1NDY2NGRhMGQ2NDBkN2ExMTRiZjgwNGMyZmRkMDQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzlkNTQ2NjRkYTBkNjQwZDdhMTE0YmY4MDRjMmZkZDA0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCZWV0aG92ZW5kZW5rbWFsICgzKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDIyNmNiNzY3Mzg0MmQxYjVlNzU3MzI0MTkyYTUzMi5zZXRDb250ZW50KGh0bWxfOWQ1NDY2NGRhMGQ2NDBkN2ExMTRiZjgwNGMyZmRkMDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MTcwYTc2OWI4Y2I0YWJlYmMwMDhkYWZmOTkxZjM5My5iaW5kUG9wdXAocG9wdXBfMTQyMjZjYjc2NzM4NDJkMWI1ZTc1NzMyNDE5MmE1MzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMDJlZGM4MzZlZTk0OWEyOGIyZTI1YTQ0NWIwOTIxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNSwxNi4zNzgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhZmY0MmEyM2Y5MzRhYzZhNDZjMDFhNjUyODRmMDYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjM2Y0OGFhOWZhZTRmNTY4YWEyMTIzNzIzNzkwNjY3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YzNmNDhhYTlmYWU0ZjU2OGFhMjEyMzcyMzc5MDY2NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCZWZyZWl1bmcgZGVyIFF1ZWxsZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWZmNDJhMjNmOTM0YWM2YTQ2YzAxYTY1Mjg0ZjA2MC5zZXRDb250ZW50KGh0bWxfNmMzZjQ4YWE5ZmFlNGY1NjhhYTIxMjM3MjM3OTA2NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMDJlZGM4MzZlZTk0OWEyOGIyZTI1YTQ0NWIwOTIxOS5iaW5kUG9wdXAocG9wdXBfMmFmZjQyYTIzZjkzNGFjNmE0NmMwMWE2NTI4NGYwNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MTc5ZjRhMTcxODU0NGYxODg2NzUwM2MzNDE3MjIzYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5OTQ0NDQ0NDQsMTYuMzc1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNWE2MjBmZTIzMmQ0YmFiOWQ3NzhmNzE2MTkwMjBhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZWE1N2NlNTEwMDU0MjA5YTViOTViOGZlM2I4YmY2NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2VhNTdjZTUxMDA1NDIwOWE1Yjk1YjhmZTNiOGJmNjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJlZnJlaXVuZ3NkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1YTYyMGZlMjMyZDRiYWI5ZDc3OGY3MTYxOTAyMGE5LnNldENvbnRlbnQoaHRtbF83ZWE1N2NlNTEwMDU0MjA5YTViOTViOGZlM2I4YmY2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxNzlmNGExNzE4NTQ0ZjE4ODY3NTAzYzM0MTcyMjNhLmJpbmRQb3B1cChwb3B1cF9kNWE2MjBmZTIzMmQ0YmFiOWQ3NzhmNzE2MTkwMjBhOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBmMGNiNmRjYTE2NzQ3YWNiNDA2NWJiNDY4Mzc5NzkzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1NTU1NTU1NiwxNi4zNzExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4ZDdhMjI2ODM0NDRjZjFiMTU4OWRjOWE0MTU1YzRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkNDk2MzkyYzAyMDQyNTlhZGY4YTY0ZDc4M2YzMDBlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mZDQ5NjM5MmMwMjA0MjU5YWRmOGE2NGQ3ODNmMzAwZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlaSBkZW4gZHJlaSBLw7ZwZmVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4ZDdhMjI2ODM0NDRjZjFiMTU4OWRjOWE0MTU1YzRkLnNldENvbnRlbnQoaHRtbF9mZDQ5NjM5MmMwMjA0MjU5YWRmOGE2NGQ3ODNmMzAwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBmMGNiNmRjYTE2NzQ3YWNiNDA2NWJiNDY4Mzc5NzkzLmJpbmRQb3B1cChwb3B1cF8zOGQ3YTIyNjgzNDQ0Y2YxYjE1ODlkYzlhNDE1NWM0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NkOWY1ZjM3MjQ1NTRhZGZiMzY5MTA2OWVmMWM3NTk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MDU1NTU1NiwxNi4zNzEzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3MTllY2QxZGRkMDRmZjE5NWEwYzBiZGMyYTFmMmM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0ZmI3ZDEzODYxMDQ4MzJiNDk3M2FkYWVkNmUxMDM1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NGZiN2QxMzg2MTA0ODMyYjQ5NzNhZGFlZDZlMTAzNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlaW0gcm90ZW4gS3JldXo8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzcxOWVjZDFkZGQwNGZmMTk1YTBjMGJkYzJhMWYyYzkuc2V0Q29udGVudChodG1sXzg0ZmI3ZDEzODYxMDQ4MzJiNDk3M2FkYWVkNmUxMDM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2Q5ZjVmMzcyNDU1NGFkZmIzNjkxMDY5ZWYxYzc1OTguYmluZFBvcHVwKHBvcHVwXzM3MTllY2QxZGRkMDRmZjE5NWEwYzBiZGMyYTFmMmM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGY5NTM1ZmM1NGFjNGVkNTlkYTBjNTBmOGE5YzIyOWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjY2NjY2NjY3LDE2LjQ2MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWFkNDFjNzFhMDQwNGEwZDkzZjM4MzNjMTQ0ZDgzYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDJjZTI2NDU1MjRmNDM0NDg3ZTEyNThkNmIzMmQ3YjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QyY2UyNjQ1NTI0ZjQzNDQ4N2UxMjU4ZDZiMzJkN2IyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEJla2VubnRuaXNraXJjaGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWFkNDFjNzFhMDQwNGEwZDkzZjM4MzNjMTQ0ZDgzYWUuc2V0Q29udGVudChodG1sX2QyY2UyNjQ1NTI0ZjQzNDQ4N2UxMjU4ZDZiMzJkN2IyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGY5NTM1ZmM1NGFjNGVkNTlkYTBjNTBmOGE5YzIyOWQuYmluZFBvcHVwKHBvcHVwX2VhZDQxYzcxYTA0MDRhMGQ5M2YzODMzYzE0NGQ4M2FlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzdmMzc5N2QzMDMyNDY1ZTg1MDZkOWZiOTM0NWI0YWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTcyMjIyMjIyLDE2LjI5MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjI1Y2JhYmNmN2Y0NDhmM2I3ZmY0MDljYTY0ZTE0NzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTg0NzFlZjJkZmQzNGIwYTgxOGUyYTk1N2NmZDhjNDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE4NDcxZWYyZGZkMzRiMGE4MThlMmE5NTdjZmQ4YzQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVsYS1Tb21vZ3lpLUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMjVjYmFiY2Y3ZjQ0OGYzYjdmZjQwOWNhNjRlMTQ3NC5zZXRDb250ZW50KGh0bWxfMTg0NzFlZjJkZmQzNGIwYTgxOGUyYTk1N2NmZDhjNDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jN2YzNzk3ZDMwMzI0NjVlODUwNmQ5ZmI5MzQ1YjRhZC5iaW5kUG9wdXAocG9wdXBfMjI1Y2JhYmNmN2Y0NDhmM2I3ZmY0MDljYTY0ZTE0NzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMmMzMjZjN2FlMGQ0OTk1YWMyMmUwZmI1ODU5OTkyMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4OTQ0NDQ0NDQsMTYuMzY2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmYwMjVjNGIwYTk0NzhiYThkOGY2MDM0NTI4MjZjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NmNhODIxNWUwOGI0MTMzYjRiYjc5NDA0MmQzOWNlMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzZjYTgyMTVlMDhiNDEzM2I0YmI3OTQwNDJkMzljZTIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZWxnaXNjaGUgQm90c2NoYWZ0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmZjAyNWM0YjBhOTQ3OGJhOGQ4ZjYwMzQ1MjgyNmM3LnNldENvbnRlbnQoaHRtbF83NmNhODIxNWUwOGI0MTMzYjRiYjc5NDA0MmQzOWNlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QyYzMyNmM3YWUwZDQ5OTVhYzIyZTBmYjU4NTk5OTIzLmJpbmRQb3B1cChwb3B1cF8xZmYwMjVjNGIwYTk0NzhiYThkOGY2MDM0NTI4MjZjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg5YzllYmU2MzY3YjQ3Zjk4YzAxYWRkN2MwMTYxY2MwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MDU1NTU1NiwxNi4zNjM2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxNTA5Mjk0MjM0ODRhNTFiNWQwZDNkOTBiYzBiMzE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlMTFkNGYzOTI5MTRhYmM5NjlhOWQ2OTQyNjE3YTIzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iZTExZDRmMzkyOTE0YWJjOTY5YTlkNjk0MjYxN2EyMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlbGxhcmlhICgxKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTUwOTI5NDIzNDg0YTUxYjVkMGQzZDkwYmMwYjMxNi5zZXRDb250ZW50KGh0bWxfYmUxMWQ0ZjM5MjkxNGFiYzk2OWE5ZDY5NDI2MTdhMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84OWM5ZWJlNjM2N2I0N2Y5OGMwMWFkZDdjMDE2MWNjMC5iaW5kUG9wdXAocG9wdXBfNDE1MDkyOTQyMzQ4NGE1MWI1ZDBkM2Q5MGJjMGIzMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZmJmNDNiODY0MDY0N2Y5OGZmNzU5NWU5NjViNTI5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxLDE2LjM3MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFiOTVlZmU3ODU0NGIzY2FjNzUxMTc3OTRlZjBjMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2YwOTI5YTQxNWMwNGU2MGFiZWFjNWEwMjhlNzZmNTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmMDkyOWE0MTVjMDRlNjBhYmVhYzVhMDI4ZTc2ZjU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVsbGVnYXJkZWhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMWI5NWVmZTc4NTQ0YjNjYWM3NTExNzc5NGVmMGMxMi5zZXRDb250ZW50KGh0bWxfY2YwOTI5YTQxNWMwNGU2MGFiZWFjNWEwMjhlNzZmNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZmJmNDNiODY0MDY0N2Y5OGZmNzU5NWU5NjViNTI5OS5iaW5kUG9wdXAocG9wdXBfMDFiOTVlZmU3ODU0NGIzY2FjNzUxMTc3OTRlZjBjMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83Mjg0ZmNmYzIxMjk0MzZjYjg4MmM2NWEyNTEwMjVlYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzYxMTExMTEsMTYuMzgxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzMxOTY2MGQ2OWI0MzMwOThmZTAyYTY4MmFmM2M3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYmI2YjUzNDQ2Y2Y0NzNkYjk1MDUwYWY4MDE3NzcwNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfM2JiNmI1MzQ0NmNmNDczZGI5NTA1MGFmODAxNzc3MDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZWxsZWdhcmRlcGFsYWlzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMzE5NjYwZDY5YjQzMzA5OGZlMDJhNjgyYWYzYzcwLnNldENvbnRlbnQoaHRtbF8zYmI2YjUzNDQ2Y2Y0NzNkYjk1MDUwYWY4MDE3NzcwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyODRmY2ZjMjEyOTQzNmNiODgyYzY1YTI1MTAyNWVjLmJpbmRQb3B1cChwb3B1cF80MzMxOTY2MGQ2OWI0MzMwOThmZTAyYTY4MmFmM2M3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMyYzFiYTFiZGM1MzQ0YTM5ZjlhYmUzZGU3M2NlOTFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjU5NzIyMjIyMiwxNi4zMTk0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5YjljMzQ3ODAwMTRkZGE4ZTBmZDUwYWQ0MGE1ZDY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxMjgwZTBhNjEzYzRiM2NiMTZjMzY1ZTJhOTE5MjQ4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMTI4MGUwYTYxM2M0YjNjYjE2YzM2NWUyYTkxOTI0OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlbGxldnVlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5YjljMzQ3ODAwMTRkZGE4ZTBmZDUwYWQ0MGE1ZDY1LnNldENvbnRlbnQoaHRtbF9mMTI4MGUwYTYxM2M0YjNjYjE2YzM2NWUyYTkxOTI0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMyYzFiYTFiZGM1MzQ0YTM5ZjlhYmUzZGU3M2NlOTFjLmJpbmRQb3B1cChwb3B1cF85OWI5YzM0NzgwMDE0ZGRhOGUwZmQ1MGFkNDBhNWQ2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EyMzE2ODMwMjZhMDQ3NDZhNTlkZmZkNTBhYjE4ODUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMzg4ODg4OSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1ODk2YzVlM2I3YzQwMmY5OGRlMDVkODdhYzg1YTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxMGMzMzUxMWU4YTRlYjI5YWUwNDViMTFhOTMwZGI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wMTBjMzM1MTFlOGE0ZWIyOWFlMDQ1YjExYTkzMGRiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCZWxsb25hYnJ1bm5lbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTg5NmM1ZTNiN2M0MDJmOThkZTA1ZDg3YWM4NWEyYS5zZXRDb250ZW50KGh0bWxfMDEwYzMzNTExZThhNGViMjlhZTA0NWIxMWE5MzBkYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjMxNjgzMDI2YTA0NzQ2YTU5ZGZmZDUwYWIxODg1My5iaW5kUG9wdXAocG9wdXBfMzU4OTZjNWUzYjdjNDAyZjk4ZGUwNWQ4N2FjODVhMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZmY1MmVkYjJlZmM0NmM0YmM4NjY3ZWQ3OGYwNmE4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MTM4ODg4ODksMTYuMzc5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGMxMDY4OTQ0MTM0NjliYTM4YjcyNTc2NDc1Y2YyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTI1NTE3OTAxNjc0ZDMwOThjYTE5MDJjYTc4OGNiYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTUyNTUxNzkwMTY3NGQzMDk4Y2ExOTAyY2E3ODhjYmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZWx2ZWRlcmU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2RjMTA2ODk0NDEzNDY5YmEzOGI3MjU3NjQ3NWNmMjUuc2V0Q29udGVudChodG1sXzE1MjU1MTc5MDE2NzRkMzA5OGNhMTkwMmNhNzg4Y2JhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWZmNTJlZGIyZWZjNDZjNGJjODY2N2VkNzhmMDZhODcuYmluZFBvcHVwKHBvcHVwXzdkYzEwNjg5NDQxMzQ2OWJhMzhiNzI1NzY0NzVjZjI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGQxZDkxZTAwM2NmNDY3N2I2NWRjYWZhNmE3YzYwNTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzY5NDQ0NDQ0LDE2LjI5ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWM1OGE1NjQxNmFhNDc5M2I2Mjc1NjhiOThkMjYzOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc4OTViMzEwZmFjNGVmNDhjNzE5NzMzNzY3NzdjNjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU3ODk1YjMxMGZhYzRlZjQ4YzcxOTczMzc2Nzc3YzYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCZW5kYWdyYWJkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjNThhNTY0MTZhYTQ3OTNiNjI3NTY4Yjk4ZDI2MzlhLnNldENvbnRlbnQoaHRtbF81Nzg5NWIzMTBmYWM0ZWY0OGM3MTk3MzM3Njc3N2M2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBkMWQ5MWUwMDNjZjQ2NzdiNjVkY2FmYTZhN2M2MDU5LmJpbmRQb3B1cChwb3B1cF8xYzU4YTU2NDE2YWE0NzkzYjYyNzU2OGI5OGQyNjM5YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcxODBmZTdhZDYwNTRiMzRiZWIzZGIyYzY1YWQxYzhlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3Nzc3Nzc3OCwxNi4zNzc3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiNGFmNzJiYWIxMTQ2YzY4MGZhMDEyYTY2YTU3YjE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmNjgwNmYzN2JjZTQ3M2M4NmRkZjUyZTUzMzRhZDBiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ZjY4MDZmMzdiY2U0NzNjODZkZGY1MmU1MzM0YWQwYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCZW5lZGlrdHNrYXBlbGxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiNGFmNzJiYWIxMTQ2YzY4MGZhMDEyYTY2YTU3YjE5LnNldENvbnRlbnQoaHRtbF80ZjY4MDZmMzdiY2U0NzNjODZkZGY1MmU1MzM0YWQwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcxODBmZTdhZDYwNTRiMzRiZWIzZGIyYzY1YWQxYzhlLmJpbmRQb3B1cChwb3B1cF9iYjRhZjcyYmFiMTE0NmM2ODBmYTAxMmE2NmE1N2IxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QxYWQyZWUzMzZmNjRlMmI4ZThhYjA1ZTQ5YzgyNzcyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTU0MTY2NjY2NywxNi40NDExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3N2Q1MWM1YjVmNTRjZTJiODg1NWZhYzFkYjA0M2RmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1NjVkOTFkYjVlMDQ3ZGViMDA4NGJiMTc5NDUyYTM0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NTY1ZDkxZGI1ZTA0N2RlYjAwODRiYjE3OTQ1MmEzNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmVuay1HcmFiZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NzdkNTFjNWI1ZjU0Y2UyYjg4NTVmYWMxZGIwNDNkZi5zZXRDb250ZW50KGh0bWxfODU2NWQ5MWRiNWUwNDdkZWIwMDg0YmIxNzk0NTJhMzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMWFkMmVlMzM2ZjY0ZTJiOGU4YWIwNWU0OWM4Mjc3Mi5iaW5kUG9wdXAocG9wdXBfNzc3ZDUxYzViNWY1NGNlMmI4ODU1ZmFjMWRiMDQzZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMGIzOGM3MzJjM2Y0Mjc3YTQyMmEwNTUyNjZhMzNkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NWYxZjg2YTllODM0Y2QwYjNkNjFiZTI1YWM1OWViMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2ZjZTY4Zjg4ZTA0ZTVkYjBiNWJiYmEwZDgwYjQ2OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGNmY2U2OGY4OGUwNGU1ZGIwYjViYmJhMGQ4MGI0NjgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJlbm5kb3JmZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NWYxZjg2YTllODM0Y2QwYjNkNjFiZTI1YWM1OWViMi5zZXRDb250ZW50KGh0bWxfZGNmY2U2OGY4OGUwNGU1ZGIwYjViYmJhMGQ4MGI0NjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMGIzOGM3MzJjM2Y0Mjc3YTQyMmEwNTUyNjZhMzNkZC5iaW5kUG9wdXAocG9wdXBfODVmMWY4NmE5ZTgzNGNkMGIzZDYxYmUyNWFjNTllYjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hODk2OTBjOGNhZGU0YTNmOWVjODdhZDc5MWNiNDdmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNDE2NjY2NjcsMTYuMzUyNzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDA1MTJjYzIwYzM0NTJkOGI2NTAxMzYxOTVhNzI5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYThmNjVmOGViMmQ0ZmY2YmI2ZWRiYzZjZjhlYWQ0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmE4ZjY1ZjhlYjJkNGZmNmJiNmVkYmM2Y2Y4ZWFkNGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXJjaHRlc2dhZG5lciBIb2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQwNTEyY2MyMGMzNDUyZDhiNjUwMTM2MTk1YTcyOTYuc2V0Q29udGVudChodG1sXzJhOGY2NWY4ZWIyZDRmZjZiYjZlZGJjNmNmOGVhZDRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTg5NjkwYzhjYWRlNGEzZjllYzg3YWQ3OTFjYjQ3ZjUuYmluZFBvcHVwKHBvcHVwX2RkMDUxMmNjMjBjMzQ1MmQ4YjY1MDEzNjE5NWE3Mjk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDYyZmMzOTgyZmE5NGVkZGEzMTRhOWU1Mjk2YWNlYjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNTQxNjY2NjY3LDE2LjQ0MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDMxNGU3MTAwYjJlNGMyM2I4YmM0ZWIxMDljYzNlNWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDgxMTk2MTU0NzY2NDYyM2ExMmM1N2ZmZTI2ZDAxNjAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q4MTE5NjE1NDc2NjQ2MjNhMTJjNTdmZmUyNmQwMTYwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCZXJnZXItR3JhYmRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDMxNGU3MTAwYjJlNGMyM2I4YmM0ZWIxMDljYzNlNWEuc2V0Q29udGVudChodG1sX2Q4MTE5NjE1NDc2NjQ2MjNhMTJjNTdmZmUyNmQwMTYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDYyZmMzOTgyZmE5NGVkZGEzMTRhOWU1Mjk2YWNlYjcuYmluZFBvcHVwKHBvcHVwXzQzMTRlNzEwMGIyZTRjMjNiOGJjNGViMTA5Y2MzZTVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzFiZTkwMjJiNzA3NDI5MDlhNGJkZjFjY2ZiOWU5OWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTExMTExMTExLDE2LjM3MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWVhOGQwZjkzZDU3NDhmYTg3MjliNzdhMmQwNjU5YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDIzYTJhZDI4YWE2NDU2ZTgyZjkzNzFjYjhkOTAwNWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQyM2EyYWQyOGFhNjQ1NmU4MmY5MzcxY2I4ZDkwMDVmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVyZ2hvZiAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWVhOGQwZjkzZDU3NDhmYTg3MjliNzdhMmQwNjU5YmYuc2V0Q29udGVudChodG1sXzQyM2EyYWQyOGFhNjQ1NmU4MmY5MzcxY2I4ZDkwMDVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzFiZTkwMjJiNzA3NDI5MDlhNGJkZjFjY2ZiOWU5OWIuYmluZFBvcHVwKHBvcHVwX2VlYThkMGY5M2Q1NzQ4ZmE4NzI5Yjc3YTJkMDY1OWJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWFlZGU4NDFiNGFhNDhmMTlmMjljNmZjNDE0OTJjZTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTQ0NDQ0NDQ0LDE2LjM1ODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzVmYWQ1ZThlYjBjNDRiMmE1MTc2ODMzZmM2M2Y5OTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QyN2UxMmMxZTcwNDMyMzkzZTAyNjllOThiNDY2MjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NkMjdlMTJjMWU3MDQzMjM5M2UwMjY5ZTk4YjQ2NjI0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVyZ2hvZiAoMTkpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZmFkNWU4ZWIwYzQ0YjJhNTE3NjgzM2ZjNjNmOTkwLnNldENvbnRlbnQoaHRtbF9jZDI3ZTEyYzFlNzA0MzIzOTNlMDI2OWU5OGI0NjYyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhZWRlODQxYjRhYTQ4ZjE5ZjI5YzZmYzQxNDkyY2U3LmJpbmRQb3B1cChwb3B1cF8zNWZhZDVlOGViMGM0NGIyYTUxNzY4MzNmYzYzZjk5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I5ZTI0YzYwNGIwOTQ1MDM4NWVlMTU2NTMyOTgyMjExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTMzMDU1NTU1NiwxNi4yNTU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhNzdjMjdiYmUxNzRkY2NhNjVmYTVmZDlhYjY3Y2M4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlNDBjYmFkNjE4MDQxMWFhMmE3M2Q3OWI2Njc0ZWFkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lZTQwY2JhZDYxODA0MTFhYTJhNzNkNzliNjY3NGVhZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCZXJna2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhNzdjMjdiYmUxNzRkY2NhNjVmYTVmZDlhYjY3Y2M4LnNldENvbnRlbnQoaHRtbF9lZTQwY2JhZDYxODA0MTFhYTJhNzNkNzliNjY3NGVhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I5ZTI0YzYwNGIwOTQ1MDM4NWVlMTU2NTMyOTgyMjExLmJpbmRQb3B1cChwb3B1cF9lYTc3YzI3YmJlMTc0ZGNjYTY1ZmE1ZmQ5YWI2N2NjOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzljNzBiMmFiNGJjYzRlOTBhM2NlNGIwOTQzZTcyYmIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MDU1NTU1NiwxNi4zMTg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljNTFjY2RlZGNjOTRiYjliYTQ2MGIzZGE2YjY4NDVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZmUyNTg1ZGJiODRkMzJhMzRjZTQzZjdlZmFhZmY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kMWZlMjU4NWRiYjg0ZDMyYTM0Y2U0M2Y3ZWZhYWZmOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlcmxpbmVyIEhvZiAoMTYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljNTFjY2RlZGNjOTRiYjliYTQ2MGIzZGE2YjY4NDVmLnNldENvbnRlbnQoaHRtbF9kMWZlMjU4NWRiYjg0ZDMyYTM0Y2U0M2Y3ZWZhYWZmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzljNzBiMmFiNGJjYzRlOTBhM2NlNGIwOTQzZTcyYmIzLmJpbmRQb3B1cChwb3B1cF85YzUxY2NkZWRjYzk0YmI5YmE0NjBiM2RhNmI2ODQ1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QyODA3ZmU5MmE0ZTRiNjQ5MTU2M2NhYzEzMmZjN2NmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI1NTU1NTU1NiwxNi4zNjU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjMWZlMzE0N2M1NDQwZDViMjc5ZTc1NzhmYWEzN2ZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhMzlmODI4Yjg0NDRlNTQ4NDhjYzY5YTNjMjYxMzNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zYTM5ZjgyOGI4NDQ0ZTU0ODQ4Y2M2OWEzYzI2MTMzYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlcmxpbmVyIEhvZiAoOSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmMxZmUzMTQ3YzU0NDBkNWIyNzllNzU3OGZhYTM3ZmYuc2V0Q29udGVudChodG1sXzNhMzlmODI4Yjg0NDRlNTQ4NDhjYzY5YTNjMjYxMzNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDI4MDdmZTkyYTRlNGI2NDkxNTYzY2FjMTMyZmM3Y2YuYmluZFBvcHVwKHBvcHVwXzJjMWZlMzE0N2M1NDQwZDViMjc5ZTc1NzhmYWEzN2ZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDU1YWJiMTlhN2Y2NGNhNGI4OWI2NjMxYzk2MTI0ZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjM0NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQ1MGI3MjNjOWNmNGUzNmFjOTQ0YjZjODg3MmZmZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhkMTA5ZmMyNzliNDEwN2FhNWVjZWJlYzA0ZjFkNTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM4ZDEwOWZjMjc5YjQxMDdhYTVlY2ViZWMwNGYxZDU3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmVybmFyZGhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDUwYjcyM2M5Y2Y0ZTM2YWM5NDRiNmM4ODcyZmZkMi5zZXRDb250ZW50KGh0bWxfMzhkMTA5ZmMyNzliNDEwN2FhNWVjZWJlYzA0ZjFkNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNTVhYmIxOWE3ZjY0Y2E0Yjg5YjY2MzFjOTYxMjRkYS5iaW5kUG9wdXAocG9wdXBfMzQ1MGI3MjNjOWNmNGUzNmFjOTQ0YjZjODg3MmZmZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82OTA3NGM4M2ZkOWE0ZGM0YTZmZTY1MDVjNTY4MDA4ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1NTgzMzMzMzMsMTYuMzUzODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MjQ5ODE3MDM5ZTI0NjgyODY1NDM1ZjQ0ZjkwMjJhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmQxMWEzNTIzYWU0NTQ4YjBmYmIwNjc1ZmM3MjkxZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2ZkMTFhMzUyM2FlNDU0OGIwZmJiMDY3NWZjNzI5MWUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXJuYXR6aWt2aWxsYTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjQ5ODE3MDM5ZTI0NjgyODY1NDM1ZjQ0ZjkwMjJhYi5zZXRDb250ZW50KGh0bWxfY2ZkMTFhMzUyM2FlNDU0OGIwZmJiMDY3NWZjNzI5MWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82OTA3NGM4M2ZkOWE0ZGM0YTZmZTY1MDVjNTY4MDA4ZS5iaW5kUG9wdXAocG9wdXBfODI0OTgxNzAzOWUyNDY4Mjg2NTQzNWY0NGY5MDIyYWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZDAyYjc1YmI2NTg0NDFiYWRjOWM2YzFlNWU2MzE4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyMzYxMTExMTEsMTYuMzUzODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zM2Y5NjI0NDc3N2U0YTBhOGVlNzUwMGEwODBhMDNiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OTEwN2NmZTM4NWI0NDE2YmVkNTk0Y2EwYmNhNmI4YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTkxMDdjZmUzODViNDQxNmJlZDU5NGNhMGJjYTZiOGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXJuZXJ0LUhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zM2Y5NjI0NDc3N2U0YTBhOGVlNzUwMGEwODBhMDNiZS5zZXRDb250ZW50KGh0bWxfNTkxMDdjZmUzODViNDQxNmJlZDU5NGNhMGJjYTZiOGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZDAyYjc1YmI2NTg0NDFiYWRjOWM2YzFlNWU2MzE4Ny5iaW5kUG9wdXAocG9wdXBfMzNmOTYyNDQ3NzdlNGEwYThlZTc1MDBhMDgwYTAzYmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZGFhMjdlYzY4N2M0ZmQ5YmMwMDM2MzVkOTk5YjZiNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MzYxMTExMTEsMTYuMzUxMzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84N2UwYTRiMDQ0OWI0ZTk1YWUzYWU1YWI1MmFmM2FiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYTg2NmQ5MmY2MTQ0NTQ0YWJkZGI1ZWUzNGY4Mzg1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGE4NjZkOTJmNjE0NDU0NGFiZGRiNWVlMzRmODM4NWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXJuaGFyZC1MdWR3aWctSGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84N2UwYTRiMDQ0OWI0ZTk1YWUzYWU1YWI1MmFmM2FiOS5zZXRDb250ZW50KGh0bWxfMGE4NjZkOTJmNjE0NDU0NGFiZGRiNWVlMzRmODM4NWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZGFhMjdlYzY4N2M0ZmQ5YmMwMDM2MzVkOTk5YjZiNS5iaW5kUG9wdXAocG9wdXBfODdlMGE0YjA0NDliNGU5NWFlM2FlNWFiNTJhZjNhYjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNWVhMzYwNGE0OWI0MmUzOGE3MTFiMjA2MjU1MTRjOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzc2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjhjZGNmODYzMDA0OWM4YWUwZjEyMzgyMzQ0ZGEzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTc2NzViNzUxZjg0ZTFiYmIxYzI4MWMwYjMwMWE3NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTk3Njc1Yjc1MWY4NGUxYmJiMWMyODFjMGIzMDFhNzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQmVybmhhcmRza2FwZWxsZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjhjZGNmODYzMDA0OWM4YWUwZjEyMzgyMzQ0ZGEzYi5zZXRDb250ZW50KGh0bWxfOTk3Njc1Yjc1MWY4NGUxYmJiMWMyODFjMGIzMDFhNzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNWVhMzYwNGE0OWI0MmUzOGE3MTFiMjA2MjU1MTRjOC5iaW5kUG9wdXAocG9wdXBfYjI4Y2RjZjg2MzAwNDljOGFlMGYxMjM4MjM0NGRhM2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82YzdlYTU0OWE3NDc0OGIwYjVkMDFhMzM2YTMzMDdlNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDU1NTU1NTYsMTYuMzcxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYjdiM2Q0OGMxZmY0NDEwOTI1ODQ2ODQ0YzhjYWUxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjkyOGZmNGU4OTg0ODQwODA1OTBhNTlkM2UwZGI1MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjI5MjhmZjRlODk4NDg0MDgwNTkwYTU5ZDNlMGRiNTIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXJ0aGEtdm9uLVN1dHRuZXItSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiN2IzZDQ4YzFmZjQ0MTA5MjU4NDY4NDRjOGNhZTFmLnNldENvbnRlbnQoaHRtbF82MjkyOGZmNGU4OTg0ODQwODA1OTBhNTlkM2UwZGI1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZjN2VhNTQ5YTc0NzQ4YjBiNWQwMWEzMzZhMzMwN2U1LmJpbmRQb3B1cChwb3B1cF9hYjdiM2Q0OGMxZmY0NDEwOTI1ODQ2ODQ0YzhjYWUxZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YxNmQ2ZWZmNzczZTQzNzNiNGY1MTY2MjVhNTkyNDViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzMzMzMzMywxNi4zNzU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMzZhYTViODQ2NDQyNTc5MDI2MGY4YmYyYWNjZmE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0NjE2MzM4ODA1YzQyZDk4MDRlYjUyYzg5YTZmOGQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNDYxNjMzODgwNWM0MmQ5ODA0ZWI1MmM4OWE2ZjhkNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlcnRoYWhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTM2YWE1Yjg0NjQ0MjU3OTAyNjBmOGJmMmFjY2ZhOS5zZXRDb250ZW50KGh0bWxfZDQ2MTYzMzg4MDVjNDJkOTgwNGViNTJjODlhNmY4ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMTZkNmVmZjc3M2U0MzczYjRmNTE2NjI1YTU5MjQ1Yi5iaW5kUG9wdXAocG9wdXBfNWUzNmFhNWI4NDY0NDI1NzkwMjYwZjhiZjJhY2NmYTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZGY0Y2ZkYjRlYjA0NTc4OThlMjMxNmY5NDhmYmFjOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2Njk0NDQ0NDQsMTYuMzgxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYWExODQyMTRjZTc0Y2Y3ODA4OGIyMTZlNjg1OGM1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGNkNDYxMDgxMmI0MTI0YTk2ZWE5YjI4OWY2ZTBiNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTRjZDQ2MTA4MTJiNDEyNGE5NmVhOWIyODlmNmUwYjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJlc2Nob3JuZXJrcmV1ejwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWExODQyMTRjZTc0Y2Y3ODA4OGIyMTZlNjg1OGM1NS5zZXRDb250ZW50KGh0bWxfMTRjZDQ2MTA4MTJiNDEyNGE5NmVhOWIyODlmNmUwYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZGY0Y2ZkYjRlYjA0NTc4OThlMjMxNmY5NDhmYmFjOC5iaW5kUG9wdXAocG9wdXBfM2FhMTg0MjE0Y2U3NGNmNzgwODhiMjE2ZTY4NThjNTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mM2JkYmI4ZjE2NmY0OWVjOTdlMGRhZDAwZDJjYjRlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNjY2NjY2NjcsMTYuMzgwODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YTJjMzU1ZTQ1Y2M0NTc5OTc3MGUyODdiZDVkYjc0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NmZlMzM4YmQ1OTI0Y2JlYjllZmY2NWM4NGMzMTA3NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjZmZTMzOGJkNTkyNGNiZWI5ZWZmNjVjODRjMzEwNzYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXNjaMOkZnRpZ3VuZ3NhbnN0YWx0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhMmMzNTVlNDVjYzQ1Nzk5NzcwZTI4N2JkNWRiNzRmLnNldENvbnRlbnQoaHRtbF82NmZlMzM4YmQ1OTI0Y2JlYjllZmY2NWM4NGMzMTA3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YzYmRiYjhmMTY2ZjQ5ZWM5N2UwZGFkMDBkMmNiNGU2LmJpbmRQb3B1cChwb3B1cF85YTJjMzU1ZTQ1Y2M0NTc5OTc3MGUyODdiZDVkYjc0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IzNjg5NTAzMWZmZTQzNmZiMjhmMDRkYWFlZGZjMjcxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzMDU1NTU1NiwxNi4zNjkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3M2M2ZTliMmQxZDQ4NjJhZDdiOGIzZWJhMjllNmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1MjcwNGE4YzUwMzRkZjFiODM2ZTQ5MWIwNzkwZTkzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNTI3MDRhOGM1MDM0ZGYxYjgzNmU0OTFiMDc5MGU5MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJldHRlbGtvdHRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzNjNmU5YjJkMWQ0ODYyYWQ3YjhiM2ViYTI5ZTZmNC5zZXRDb250ZW50KGh0bWxfYTUyNzA0YThjNTAzNGRmMWI4MzZlNDkxYjA3OTBlOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMzY4OTUwMzFmZmU0MzZmYjI4ZjA0ZGFhZWRmYzI3MS5iaW5kUG9wdXAocG9wdXBfODczYzZlOWIyZDFkNDg2MmFkN2I4YjNlYmEyOWU2ZjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wODM5NjFiYzc0NmI0OWZjYWYxZjdmYjJiZTU0M2UzYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMDI3Nzc3NzgsMTYuMzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTIzMzU0OTNhNmU4NDI4Mjk1N2U0NDAxYjI2NTc3ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA4NzcxZmMyNWZjNDE1ZmI0MmU2MTE3YjJjNzZhYWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QwODc3MWZjMjVmYzQxNWZiNDJlNjExN2IyYzc2YWFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEJldHRsZXJzdGllZ2UgKDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEyMzM1NDkzYTZlODQyODI5NTdlNDQwMWIyNjU3N2RjLnNldENvbnRlbnQoaHRtbF9kMDg3NzFmYzI1ZmM0MTVmYjQyZTYxMTdiMmM3NmFhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4Mzk2MWJjNzQ2YjQ5ZmNhZjFmN2ZiMmJlNTQzZTNiLmJpbmRQb3B1cChwb3B1cF8xMjMzNTQ5M2E2ZTg0MjgyOTU3ZTQ0MDFiMjY1NzdkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdlODU1M2IyYTIwMDQyODBiMzliZmI2YWVhMWVmMmFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI1NTU1NTU1NiwxNi4yOTMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwMjlmOWYxNTVjNjQzZWU4NjgxZGY4ODE2MTY1OTcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1YTY0MDc5NDdlMjQwZDg5OTA5NTVlOTNiZDQ1ZTM2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zNWE2NDA3OTQ3ZTI0MGQ4OTkwOTU1ZTkzYmQ0NWUzNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmV2aW5kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwMjlmOWYxNTVjNjQzZWU4NjgxZGY4ODE2MTY1OTcwLnNldENvbnRlbnQoaHRtbF8zNWE2NDA3OTQ3ZTI0MGQ4OTkwOTU1ZTkzYmQ0NWUzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdlODU1M2IyYTIwMDQyODBiMzliZmI2YWVhMWVmMmFlLmJpbmRQb3B1cChwb3B1cF9jMDI5ZjlmMTU1YzY0M2VlODY4MWRmODgxNjE2NTk3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EwY2YyZWE3YzdkMDRmZWQ4NTI0YTczZTMzMjczZmMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAyMjIyMjIyMiwxNi4zMzMwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhYjkxNDgzMjMzYTRmNGRhZjgxYWMzNjhlZDdjZDM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NmRkNzE5MWViMTQwMzE4MzU4YjMwYjcxMmExZWFkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zODZkZDcxOTFlYjE0MDMxODM1OGIzMGI3MTJhMWVhZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmV3ZWd1bmc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWFiOTE0ODMyMzNhNGY0ZGFmODFhYzM2OGVkN2NkMzQuc2V0Q29udGVudChodG1sXzM4NmRkNzE5MWViMTQwMzE4MzU4YjMwYjcxMmExZWFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTBjZjJlYTdjN2QwNGZlZDg1MjRhNzNlMzMyNzNmYzAuYmluZFBvcHVwKHBvcHVwXzVhYjkxNDgzMjMzYTRmNGRhZjgxYWMzNjhlZDdjZDM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjgyYTcyOTQ2OTcxNGU5NjlkOTg0ZjY4YjMwM2YyOGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzAyNzc3Nzc4LDE2LjM3MjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjc4M2FiMzJkYzAzNDI1Y2IwZmE4YjRiMmNmODI2MGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTIyODEwMGZmZDBjNDZhNGFkYzI3MzIxZjA3YzAwYmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UyMjgxMDBmZmQwYzQ2YTRhZGMyNzMyMWYwN2MwMGJhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmV6aXJrc2dlcmljaHQgRmF2b3JpdGVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3ODNhYjMyZGMwMzQyNWNiMGZhOGI0YjJjZjgyNjBiLnNldENvbnRlbnQoaHRtbF9lMjI4MTAwZmZkMGM0NmE0YWRjMjczMjFmMDdjMDBiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I4MmE3Mjk0Njk3MTRlOTY5ZDk4NGY2OGIzMDNmMjhkLmJpbmRQb3B1cChwb3B1cF9mNzgzYWIzMmRjMDM0MjVjYjBmYThiNGIyY2Y4MjYwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2MTU5Y2ZiZDQwODRhZjc5MDk4ZmUyM2FiYjM4MGE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjYwMjc3Nzc3OCwxNi4zOTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2NjkwZWIzMGE1NzQ0MTQ5Mjc4M2UzN2ZiMGFiNDdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0ZWFlYmIwNGUyMjQzNWJiZTAxMDc3NGQ3ZTJiODk4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zNGVhZWJiMDRlMjI0MzViYmUwMTA3NzRkN2UyYjg5OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlemlya3NnZXJpY2h0IEZsb3JpZHNkb3JmPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2NjkwZWIzMGE1NzQ0MTQ5Mjc4M2UzN2ZiMGFiNDdiLnNldENvbnRlbnQoaHRtbF8zNGVhZWJiMDRlMjI0MzViYmUwMTA3NzRkN2UyYjg5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2MTU5Y2ZiZDQwODRhZjc5MDk4ZmUyM2FiYjM4MGE2LmJpbmRQb3B1cChwb3B1cF8xNjY5MGViMzBhNTc0NDE0OTI3ODNlMzdmYjBhYjQ3Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RmMzQzOTg2NDkxNTQ1ODNhOTQ3YmRjMjQ5NDE4YmJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg0NzIyMjIyMiwxNi4yOTc3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3ZmFkZDc4NDcxODRkMjE4OTU2M2E2OGExODdiMjRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyZDE5NWEyYTg0YzQzYzliYjU1NWQ3MTg5ZWI1MzVmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMmQxOTVhMmE4NGM0M2M5YmI1NTVkNzE4OWViNTM1ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlemlya3NnZXJpY2h0IEhpZXR6aW5nPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3ZmFkZDc4NDcxODRkMjE4OTU2M2E2OGExODdiMjRkLnNldENvbnRlbnQoaHRtbF8yMmQxOTVhMmE4NGM0M2M5YmI1NTVkNzE4OWViNTM1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RmMzQzOTg2NDkxNTQ1ODNhOTQ3YmRjMjQ5NDE4YmJlLmJpbmRQb3B1cChwb3B1cF9kN2ZhZGQ3ODQ3MTg0ZDIxODk1NjNhNjhhMTg3YjI0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IyYjc1YmI4Zjg4YjQ1MWY5ZGMyNzk4YWZjZjIwMjBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2OTQ0NDQ0NCwxNi4zNzY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhMmNiMjdlNGQ3NTQzYzA4MjBhZjNkYTYxM2FhNmU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzMDFmZTk0YTcwMzRhNTY4Y2M2YTEwZTE4OWIzYzRiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMzAxZmU5NGE3MDM0YTU2OGNjNmExMGUxODliM2M0YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJlemlya3NnZXJpY2h0IElubmVyZSBTdGFkdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYTJjYjI3ZTRkNzU0M2MwODIwYWYzZGE2MTNhYTZlNi5zZXRDb250ZW50KGh0bWxfZjMwMWZlOTRhNzAzNGE1NjhjYzZhMTBlMTg5YjNjNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMmI3NWJiOGY4OGI0NTFmOWRjMjc5OGFmY2YyMDIwYS5iaW5kUG9wdXAocG9wdXBfZWEyY2IyN2U0ZDc1NDNjMDgyMGFmM2RhNjEzYWE2ZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYmMzNjA2NDIwYjc0MDk0YjhiYjBlNzZkNTgxYTIyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxODMzMzMzMzMsMTYuMzczMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOTVhYjgxMTkxM2Q0NjhkOThhN2FmMzQ0MWIwMzc4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYzMyNjlkNzFmODI0NGI0OGFiZWFlMTk0NmVkOTM1YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGMzMjY5ZDcxZjgyNDRiNDhhYmVhZTE5NDZlZDkzNWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCZXppcmtzZ2VyaWNodCBMZW9wb2xkc3RhZHQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjk1YWI4MTE5MTNkNDY4ZDk4YTdhZjM0NDFiMDM3ODguc2V0Q29udGVudChodG1sX2RjMzI2OWQ3MWY4MjQ0YjQ4YWJlYWUxOTQ2ZWQ5MzVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmJjMzYwNjQyMGI3NDA5NGI4YmIwZTc2ZDU4MWEyMmMuYmluZFBvcHVwKHBvcHVwXzI5NWFiODExOTEzZDQ2OGQ5OGE3YWYzNDQxYjAzNzg4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDljNDFlYzFhZDJlNDZlZTg1YzY5ZDJlNzI5YTcyNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODk0NDQ0NDQ0LDE2LjM2MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGYzNTE4ZDk1ZGVjNGU1MThjNTAyMmY4OTUyZDBiYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWFmZjMxMzIwOTllNGI4OWJiOWVhMjQxNDg1MjY1Y2QgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FhZmYzMTMyMDk5ZTRiODliYjllYTI0MTQ4NTI2NWNkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmV6aXJrc2dlcmljaHQgTWFyZ2FyZXRlbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZjM1MThkOTVkZWM0ZTUxOGM1MDIyZjg5NTJkMGJiOS5zZXRDb250ZW50KGh0bWxfYWFmZjMxMzIwOTllNGI4OWJiOWVhMjQxNDg1MjY1Y2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOWM0MWVjMWFkMmU0NmVlODVjNjlkMmU3MjlhNzI1My5iaW5kUG9wdXAocG9wdXBfNGYzNTE4ZDk1ZGVjNGU1MThjNTAyMmY4OTUyZDBiYjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMjFmNmNmMjQwMzU0MDM5YTBjNTM2NmVjM2ZkMDFkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDgzMzMzMzMsMTYuMzgxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMTlmNzFjZTI4MzQ0YTQzYWEzMWNjNjExYTI1NTI1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNjE3Y2VmZWE5MTM0NTQ3YWQxYjJmMzI0MDY3MzIzMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjYxN2NlZmVhOTEzNDU0N2FkMWIyZjMyNDA2NzMyMzAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQmliZXJiYXN0ZWk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjE5ZjcxY2UyODM0NGE0M2FhMzFjYzYxMWEyNTUyNTUuc2V0Q29udGVudChodG1sXzI2MTdjZWZlYTkxMzQ1NDdhZDFiMmYzMjQwNjczMjMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTIxZjZjZjI0MDM1NDAzOWEwYzUzNjZlYzNmZDAxZGQuYmluZFBvcHVwKHBvcHVwX2YxOWY3MWNlMjgzNDRhNDNhYTMxY2M2MTFhMjU1MjU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzY4MDA5M2Y2NjU0NDNlOTg5M2NhZWVhM2I0YzdjMjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTQ0NDQ0NDQ0LDE2LjM3NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M0NGYzOGY1MmMzNDJlYTlkMmM0ZTUxMGU4YWNjMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQ4MzlhYjQzMjZiNGVlMThkZGM5NjkzZmQ4NzliMGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzVkODM5YWI0MzI2YjRlZTE4ZGRjOTY5M2ZkODc5YjBlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEJpYmVyc2NoYW56ZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzQ0ZjM4ZjUyYzM0MmVhOWQyYzRlNTEwZThhY2MxOC5zZXRDb250ZW50KGh0bWxfNWQ4MzlhYjQzMjZiNGVlMThkZGM5NjkzZmQ4NzliMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNjgwMDkzZjY2NTQ0M2U5ODkzY2FlZWEzYjRjN2MyMi5iaW5kUG9wdXAocG9wdXBfY2M0NGYzOGY1MmMzNDJlYTlkMmM0ZTUxMGU4YWNjMTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZDk4Mzk0ZTFhNGU0ZmQzOTNmYmE5MTE1NTExYWE3MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMDU1NTU1NTYsMTYuMzc5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZWM1Nzg2ZmU4Y2U0OWI1Yjc3YzQ4Yjg2ODJkMjg1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2UwZjBhZTg5Yzk0NjNlYmI3MmI0ZDI1ZWE1OGRmZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzNlMGYwYWU4OWM5NDYzZWJiNzJiNGQyNWVhNThkZmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaWJlcnR1cm08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGVjNTc4NmZlOGNlNDliNWI3N2M0OGI4NjgyZDI4NTUuc2V0Q29udGVudChodG1sXzMzZTBmMGFlODljOTQ2M2ViYjcyYjRkMjVlYTU4ZGZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGQ5ODM5NGUxYTRlNGZkMzkzZmJhOTExNTUxMWFhNzAuYmluZFBvcHVwKHBvcHVwXzBlYzU3ODZmZThjZTQ5YjViNzdjNDhiODY4MmQyODU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzc1ZmVhNzE5NjJhNDI1ODg4OGRlODUxZmU5ZWYzZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM2MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDRjODQ5NTdmYThhNGZmZmJkM2Q4ZjUzM2RlMThkZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTMyNWMzZTc5YjQ5NDBkZTlkZWQwNGNjYzNhMmEwNzYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkzMjVjM2U3OWI0OTQwZGU5ZGVkMDRjY2MzYTJhMDc2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCaWNrZWxsZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNGM4NDk1N2ZhOGE0ZmZmYmQzZDhmNTMzZGUxOGRmNi5zZXRDb250ZW50KGh0bWxfOTMyNWMzZTc5YjQ5NDBkZTlkZWQwNGNjYzNhMmEwNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NzVmZWE3MTk2MmE0MjU4ODg4ZGU4NTFmZTllZjNkYS5iaW5kUG9wdXAocG9wdXBfZDRjODQ5NTdmYThhNGZmZmJkM2Q4ZjUzM2RlMThkZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMmQ4OGFhZDM1YzA0NzIyODliYzk1NzQ1ZjY2NjgzNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0MjIyMjIyMjIsMTYuMzU1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTM3OTI3NDQ0M2U0NTAzOWIzNTRmZTYyNzg4MDM5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmNkNjI4Zjg4MTA0ZWE0OThmNGU0MzNhZjg2ZDc4YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODZjZDYyOGY4ODEwNGVhNDk4ZjRlNDMzYWY4NmQ3OGIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaWVkZXJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGEzNzkyNzQ0NDNlNDUwMzliMzU0ZmU2Mjc4ODAzOWEuc2V0Q29udGVudChodG1sXzg2Y2Q2MjhmODgxMDRlYTQ5OGY0ZTQzM2FmODZkNzhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDJkODhhYWQzNWMwNDcyMjg5YmM5NTc0NWY2NjY4MzcuYmluZFBvcHVwKHBvcHVwX2RhMzc5Mjc0NDQzZTQ1MDM5YjM1NGZlNjI3ODgwMzlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTVmNThmYWQ3MzYzNGYxMTg0MmRmYWVhZTlhYjE1ZDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDIyMjIyMjIyLDE2LjMwMDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODYyMjJhNmNlMWY1NGE3NDg3MmI1Mjg3YTEyODg2N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDZlMmZiMzBjMTFjNDliOWI3NWM0YmMyNzU2NmM4ZjYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA2ZTJmYjMwYzExYzQ5YjliNzVjNGJjMjc1NjZjOGY2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmllZGVybWFubi1IdXRoLVJhc2Noa2UtS2FzZXJuZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjIyMmE2Y2UxZjU0YTc0ODcyYjUyODdhMTI4ODY3Yi5zZXRDb250ZW50KGh0bWxfMDZlMmZiMzBjMTFjNDliOWI3NWM0YmMyNzU2NmM4ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNWY1OGZhZDczNjM0ZjExODQyZGZhZWFlOWFiMTVkNC5iaW5kUG9wdXAocG9wdXBfODYyMjJhNmNlMWY1NGE3NDg3MmI1Mjg3YTEyODg2N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYmI0ZWE2YzZiNTg0YTAzYmJjMzU3ZjhjY2U3OGMzMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1LDE2LjM2NDQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWExMjQxMTU0NmEzNDVkNDg0ZjRiYzgwOTljZjlhNWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWY2ZTNkYjViOTNhNDVkYzlkYjVmOTk2ZDVkMGM5NmIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzlmNmUzZGI1YjkzYTQ1ZGM5ZGI1Zjk5NmQ1ZDBjOTZiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmllZGVybWFubmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYTEyNDExNTQ2YTM0NWQ0ODRmNGJjODA5OWNmOWE1Yy5zZXRDb250ZW50KGh0bWxfOWY2ZTNkYjViOTNhNDVkYzlkYjVmOTk2ZDVkMGM5NmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYmI0ZWE2YzZiNTg0YTAzYmJjMzU3ZjhjY2U3OGMzMy5iaW5kUG9wdXAocG9wdXBfZWExMjQxMTU0NmEzNDVkNDg0ZjRiYzgwOTljZjlhNWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZDRjNTliNTUxN2Q0MDJiOGI2ODdjNzQxZGNjZWNiYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1Mjc3Nzc3NzgsMTYuNDEwMjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzU2MjgwY2ZiODE0OTViYTZhNWQ3ZTgzN2ZmNDA1ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYzAxNWIzOTM2NzU0NDc0YTA1ODgzZDQyMmJmMGE1OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmMwMTViMzkzNjc1NDQ3NGEwNTg4M2Q0MjJiZjBhNTgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaWVsZXIgSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjNTYyODBjZmI4MTQ5NWJhNmE1ZDdlODM3ZmY0MDVmLnNldENvbnRlbnQoaHRtbF9iYzAxNWIzOTM2NzU0NDc0YTA1ODgzZDQyMmJmMGE1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NkNGM1OWI1NTE3ZDQwMmI4YjY4N2M3NDFkY2NlY2JjLmJpbmRQb3B1cChwb3B1cF9hYzU2MjgwY2ZiODE0OTViYTZhNWQ3ZTgzN2ZmNDA1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc5N2M3YzBhNjVjMDQ2MjJiMjU3NTk2NzkzN2ViNjdjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMiwxNi4zNDA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2Zjg1MDA5NjkxNDQwODBhOWNjZjRhM2UzZDZkODc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxNTg0ZTg3Njc5YTQ2MTU4MWEwMDI2Zjk4OGM2M2RjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wMTU4NGU4NzY3OWE0NjE1ODFhMDAyNmY5ODhjNjNkYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJpZW5lbmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NmY4NTAwOTY5MTQ0MDgwYTljY2Y0YTNlM2Q2ZDg3Ni5zZXRDb250ZW50KGh0bWxfMDE1ODRlODc2NzlhNDYxNTgxYTAwMjZmOTg4YzYzZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OTdjN2MwYTY1YzA0NjIyYjI1NzU5Njc5MzdlYjY3Yy5iaW5kUG9wdXAocG9wdXBfNDZmODUwMDk2OTE0NDA4MGE5Y2NmNGEzZTNkNmQ4NzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NTllYmU5ZmQ3NjI0MjBmOGFmODY4Y2Q3OTYzZTc4YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTk0NDQ0NDQsMTYuMzk2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDQ5ZjUzNjVhZGE0YjZiODgxZTNlODUxZDZhZjE0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTE3YzhmN2E0MDk0ZDhiOWRmYzlkOWE4ZGM0NGU0NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDExN2M4ZjdhNDA5NGQ4YjlkZmM5ZDlhOGRjNDRlNDQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaWxkaGF1ZXJhdGVsaWVyczwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDQ5ZjUzNjVhZGE0YjZiODgxZTNlODUxZDZhZjE0ZS5zZXRDb250ZW50KGh0bWxfNDExN2M4ZjdhNDA5NGQ4YjlkZmM5ZDlhOGRjNDRlNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NTllYmU5ZmQ3NjI0MjBmOGFmODY4Y2Q3OTYzZTc4YS5iaW5kUG9wdXAocG9wdXBfNDQ0OWY1MzY1YWRhNGI2Yjg4MWUzZTg1MWQ2YWYxNGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ODE2NjUxYjc4NzY0M2IzODA2ZmI4NDUzZGUxOTM3YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1NjExMTExMTEsMTYuNDA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjMjlmOTdkMTczOTQ5OTg4NGMzY2I3Mzc1NTkxMzY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmZGEyMzJiNmQ2YTQ3NDQ4N2VlZWFjM2JiOGE3NzdiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ZmRhMjMyYjZkNmE0NzQ0ODdlZWVhYzNiYjhhNzc3YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCaWxkdW5nc2Fuc3RhbHQgZsO8ciBLaW5kZXJnw6RydG5lcmlubmVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjMjlmOTdkMTczOTQ5OTg4NGMzY2I3Mzc1NTkxMzY4LnNldENvbnRlbnQoaHRtbF80ZmRhMjMyYjZkNmE0NzQ0ODdlZWVhYzNiYjhhNzc3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ4MTY2NTFiNzg3NjQzYjM4MDZmYjg0NTNkZTE5MzdjLmJpbmRQb3B1cChwb3B1cF82YzI5Zjk3ZDE3Mzk0OTk4ODRjM2NiNzM3NTU5MTM2OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdiYjJlNzE4NjVmYzQ2MjNiMmQwNTQ0OTFlZThhMDAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgxMzg4ODg4OSwxNi4zNzY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzY2RkZTUzOTc4NTQwNTNhZTljMWU1YmU2NDA0MmJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhMTRiNzU3NDNjZjRkNzU4NGQ1ZDM3MzNhMDUxNTk3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80YTE0Yjc1NzQzY2Y0ZDc1ODRkNWQzNzMzYTA1MTU5NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJpbGR1bmdzY2FtcHVzIFNvbm53ZW5kdmllcnRlbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yM2NkZGU1Mzk3ODU0MDUzYWU5YzFlNWJlNjQwNDJiYy5zZXRDb250ZW50KGh0bWxfNGExNGI3NTc0M2NmNGQ3NTg0ZDVkMzczM2EwNTE1OTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83YmIyZTcxODY1ZmM0NjIzYjJkMDU0NDkxZWU4YTAwMi5iaW5kUG9wdXAocG9wdXBfMjNjZGRlNTM5Nzg1NDA1M2FlOWMxZTViZTY0MDQyYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xOWY1YWYxZjRhYzE0ODU0ODdmYThkMzI3ZTA4ODk3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjY2NjY2NjcsMTYuMzc0NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzAzNTQzYjNjYTk0YTY2YjNkMWFmNTEwNGQzYjE0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xY2ZjOTcyYjhiZGQ0YmM3OTRmNjMzYjg4MjQ0ZjI0NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWNmYzk3MmI4YmRkNGJjNzk0ZjYzM2I4ODI0NGYyNDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaWxsaW90dGVzY2hlcyBTdGlmdHVuZ3NoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjMDM1NDNiM2NhOTRhNjZiM2QxYWY1MTA0ZDNiMTQyLnNldENvbnRlbnQoaHRtbF8xY2ZjOTcyYjhiZGQ0YmM3OTRmNjMzYjg4MjQ0ZjI0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE5ZjVhZjFmNGFjMTQ4NTQ4N2ZhOGQzMjdlMDg4OTc4LmJpbmRQb3B1cChwb3B1cF8zYzAzNTQzYjNjYTk0YTY2YjNkMWFmNTEwNGQzYjE0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM0ZmNmZjg5MDZlZTQzYTQ5OGM2MTQ1Y2ViZjYwMjYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgyNzc3Nzc3OCwxNi4zMjExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1MzIzY2M5YmQ4YTQyN2E5YjA4YWZkN2JkZWVkMzM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhN2FmOGIxNmE0ODQ2Yzg5OTNkNjk0MzAzYjgwMTQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zYTdhZjhiMTZhNDg0NmM4OTkzZDY5NDMwM2I4MDE0NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJpc2Nob2ZmdmlsbGE8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjUzMjNjYzliZDhhNDI3YTliMDhhZmQ3YmRlZWQzMzkuc2V0Q29udGVudChodG1sXzNhN2FmOGIxNmE0ODQ2Yzg5OTNkNjk0MzAzYjgwMTQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzRmY2ZmODkwNmVlNDNhNDk4YzYxNDVjZWJmNjAyNjEuYmluZFBvcHVwKHBvcHVwXzY1MzIzY2M5YmQ4YTQyN2E5YjA4YWZkN2JkZWVkMzM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGFjMmRhYWQyZGRiNGE3MWI0OGU3MzBkNTVjZmUwYmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTA4MzMzMzMzLDE2LjM2Njk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdiYTBkNGFkMDllNDQ2MmFjYzM3YWNmNjRmMWFiMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQyMTc2Y2RjZmRmNDU3OTk4OWM0OTJiM2Q2YTdlODYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRkMjE3NmNkY2ZkZjQ1Nzk5ODljNDkyYjNkNmE3ZTg2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmlzY2hvZmtlbGxlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2JhMGQ0YWQwOWU0NDYyYWNjMzdhY2Y2NGYxYWIwYS5zZXRDb250ZW50KGh0bWxfNGQyMTc2Y2RjZmRmNDU3OTk4OWM0OTJiM2Q2YTdlODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YWMyZGFhZDJkZGI0YTcxYjQ4ZTczMGQ1NWNmZTBiZC5iaW5kUG9wdXAocG9wdXBfZTdiYTBkNGFkMDllNDQ2MmFjYzM3YWNmNjRmMWFiMGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NjA5MzU0MmQ3Njg0MzBlODFjZDNkMTY0YmExNmI4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTE2NjY2NjcsMTYuMzczMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYzdlNGFhOTI5OTQ0MDNlOTQyZmJhMWFiNWI2NjI5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2RjYzRkMWQ1ODI0MzEwOTY2OTJlZjc1MGUzZWQ4ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmNkY2M0ZDFkNTgyNDMxMDk2NjkyZWY3NTBlM2VkOGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaXNjaG9mc2hvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzdlNGFhOTI5OTQ0MDNlOTQyZmJhMWFiNWI2NjI5Mi5zZXRDb250ZW50KGh0bWxfMmNkY2M0ZDFkNTgyNDMxMDk2NjkyZWY3NTBlM2VkOGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NjA5MzU0MmQ3Njg0MzBlODFjZDNkMTY0YmExNmI4Ny5iaW5kUG9wdXAocG9wdXBfMGM3ZTRhYTkyOTk0NDAzZTk0MmZiYTFhYjViNjYyOTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82N2Y2YjdhY2NlMDQ0MGFlYTliNDBmZmY5MGUxMTFlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE2MjUsMTYuMzIxMzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWMzMDhlZGRlMjU0MWNmYmI1M2IzMTAxYmUxMDM0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYjM0ZGRmYTFhMjU0ZjgwYTFjMjI3OGI5YmUxOTI1YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGIzNGRkZmExYTI1NGY4MGExYzIyNzhiOWJlMTkyNWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCaXNjaG9mc2hvZiAoMTIpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5YzMwOGVkZGUyNTQxY2ZiYjUzYjMxMDFiZTEwMzQ3LnNldENvbnRlbnQoaHRtbF8wYjM0ZGRmYTFhMjU0ZjgwYTFjMjI3OGI5YmUxOTI1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY3ZjZiN2FjY2UwNDQwYWVhOWI0MGZmZjkwZTExMWU2LmJpbmRQb3B1cChwb3B1cF8xOWMzMDhlZGRlMjU0MWNmYmI1M2IzMTAxYmUxMDM0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I1NTU4YTA0YmI3ODQwZWM5Y2IzZjliZWUwNzFjMWRjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2MTExMTExMSwxNi4zNzIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1NGRiYjJkNjFjYzQ3MzZiODAxOGRkYjYzNGJmOGMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3NjQ0Y2RkYWZmYzRlYzU5NGZlNjk4Y2Y4YmRiOGU4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80NzY0NGNkZGFmZmM0ZWM1OTRmZTY5OGNmOGJkYjhlOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJpc2Nob2Zzc3RhZGVsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1NGRiYjJkNjFjYzQ3MzZiODAxOGRkYjYzNGJmOGMzLnNldENvbnRlbnQoaHRtbF80NzY0NGNkZGFmZmM0ZWM1OTRmZTY5OGNmOGJkYjhlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1NTU4YTA0YmI3ODQwZWM5Y2IzZjliZWUwNzFjMWRjLmJpbmRQb3B1cChwb3B1cF8zNTRkYmIyZDYxY2M0NzM2YjgwMThkZGI2MzRiZjhjMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M4OTQxZTlkODc0MTQxNzZiM2I2NGM4MmJjOWQ3NDY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTU0MTY2NjY2NywxNi40NDExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzZWE5NzdiZWRhMzQ3ZDY4ZTI1MmUzNTUwNDlhYTFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmYzAxMTkyZjZjNDQxZjM5ZWM1OGE4NWY3NjAyNWEzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hZmMwMTE5MmY2YzQ0MWYzOWVjNThhODVmNzYwMjVhMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQml0dGVybGljaC1HcmFiZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84M2VhOTc3YmVkYTM0N2Q2OGUyNTJlMzU1MDQ5YWExYy5zZXRDb250ZW50KGh0bWxfYWZjMDExOTJmNmM0NDFmMzllYzU4YTg1Zjc2MDI1YTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jODk0MWU5ZDg3NDE0MTc2YjNiNjRjODJiYzlkNzQ2NC5iaW5kUG9wdXAocG9wdXBfODNlYTk3N2JlZGEzNDdkNjhlMjUyZTM1NTA0OWFhMWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYWE2ZGI4YmFkMzk0MTg2YjM2MDI4NWNkN2JkNmRhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE1NDE2NjY2NjcsMTYuNDQxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzJhNTI5NmQ3YzI0OWUzYjFmYTUzMjAyZWU3NTZhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mY2I3Mzk3OTFlYWE0ZmM2YjIxZGJiNDQ1MTU2NjFmMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmNiNzM5NzkxZWFhNGZjNmIyMWRiYjQ0NTE1NjYxZjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJsYWFzLUdyYWJkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3MmE1Mjk2ZDdjMjQ5ZTNiMWZhNTMyMDJlZTc1NmFhLnNldENvbnRlbnQoaHRtbF9mY2I3Mzk3OTFlYWE0ZmM2YjIxZGJiNDQ1MTU2NjFmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNhYTZkYjhiYWQzOTQxODZiMzYwMjg1Y2Q3YmQ2ZGFlLmJpbmRQb3B1cChwb3B1cF9hNzJhNTI5NmQ3YzI0OWUzYjFmYTUzMjAyZWU3NTZhYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE1YWFkYTBlYTg3ZTQ4Y2M4NTAyNzdiYjg3YTliODc2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTgzMDU1NTU1NiwxNi4yOTE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2YzI2NzVkMGNlNDRjYWQ4MWIyODg2MWZlYTIyMjY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlM2U2MDkzNTJjODQxYTc5OGVkY2ExMTNhMDA4MzQzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZTNlNjA5MzUyYzg0MWE3OThlZGNhMTEzYTAwODM0MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsYWltc2NoZWluLVZpbGxhPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2YzI2NzVkMGNlNDRjYWQ4MWIyODg2MWZlYTIyMjY3LnNldENvbnRlbnQoaHRtbF82ZTNlNjA5MzUyYzg0MWE3OThlZGNhMTEzYTAwODM0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE1YWFkYTBlYTg3ZTQ4Y2M4NTAyNzdiYjg3YTliODc2LmJpbmRQb3B1cChwb3B1cF9mNmMyNjc1ZDBjZTQ0Y2FkODFiMjg4NjFmZWEyMjI2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3ZGVlNjE1YmZiYzRlNGRhNDgxNjBiMzEyZTk4Yjk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk0NDQ0NDQ0NCwxNi4yOTc3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxNmM5NWQ4ZjA2NTQ4MWI4NWY0MzEzYjVjMzI3ODRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExN2YxNDM4NjVjNjQ2Njk4NzU4ODZmYTdhYWI4N2I5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMTdmMTQzODY1YzY0NjY5ODc1ODg2ZmE3YWFiODdiOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsYXRob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE2Yzk1ZDhmMDY1NDgxYjg1ZjQzMTNiNWMzMjc4NGMuc2V0Q29udGVudChodG1sXzExN2YxNDM4NjVjNjQ2Njk4NzU4ODZmYTdhYWI4N2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDdkZWU2MTViZmJjNGU0ZGE0ODE2MGIzMTJlOThiOTguYmluZFBvcHVwKHBvcHVwX2MxNmM5NWQ4ZjA2NTQ4MWI4NWY0MzEzYjVjMzI3ODRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzAyMTZiYTY4MDg3NDBmZWFhZDdjN2QyMjRmODEyZmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDYxMTExMTExLDE2LjM5ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTZhYzQ1NTllYjQyNGZiNmE3NTc1ZjVhMWRiOTRhYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzYwM2UxMWY2NTBjNGM4MGE1NjRlY2U0M2NjODhmYjAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc2MDNlMTFmNjUwYzRjODBhNTY0ZWNlNDNjYzg4ZmIwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmxpbmRlbmluc3RpdHV0ICgyLCBXaXR0ZWxzYmFjaHN0cmHDn2UgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTZhYzQ1NTllYjQyNGZiNmE3NTc1ZjVhMWRiOTRhYWYuc2V0Q29udGVudChodG1sXzc2MDNlMTFmNjUwYzRjODBhNTY0ZWNlNDNjYzg4ZmIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzAyMTZiYTY4MDg3NDBmZWFhZDdjN2QyMjRmODEyZmUuYmluZFBvcHVwKHBvcHVwXzk2YWM0NTU5ZWI0MjRmYjZhNzU3NWY1YTFkYjk0YWFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTY5Yjc5NDE3ZjExNDZkZWEwMjczZDc2MzcyNjdmMzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTQxNjY2NjY3LDE2LjI3ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDVjZWZmNjJlYzYxNDVhNjk5NDJjODc2Y2ZlY2FkNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDgzOGU3YzQwNjE3NDQ1ZGFlMzg5NGQ5MWI2ODg5MGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q4MzhlN2M0MDYxNzQ0NWRhZTM4OTRkOTFiNjg4OTBjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQmxpbmRlbndvaG5oZWltPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1Y2VmZjYyZWM2MTQ1YTY5OTQyYzg3NmNmZWNhZDU2LnNldENvbnRlbnQoaHRtbF9kODM4ZTdjNDA2MTc0NDVkYWUzODk0ZDkxYjY4ODkwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2OWI3OTQxN2YxMTQ2ZGVhMDI3M2Q3NjM3MjY3ZjM0LmJpbmRQb3B1cChwb3B1cF8wNWNlZmY2MmVjNjE0NWE2OTk0MmM4NzZjZmVjYWQ1Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MxODc0NmEzMjdiNDRkMDM5M2ZmNGYwODEyNTVjMzUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjMwODMzMzMzMywxNi4zNDU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2OWY0NDY4OTI4ZTQwNmY4MTdlODY5OGFmNDcxZWIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmMTIwZmJjNjQ4ODQyZTU5MGRlNTk3MmNjY2Q0NGQ1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81ZjEyMGZiYzY0ODg0MmU1OTBkZTU5NzJjY2NkNDRkNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQmx1bS1HZWRlbmtzdGVpbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjlmNDQ2ODkyOGU0MDZmODE3ZTg2OThhZjQ3MWViMi5zZXRDb250ZW50KGh0bWxfNWYxMjBmYmM2NDg4NDJlNTkwZGU1OTcyY2NjZDQ0ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMTg3NDZhMzI3YjQ0ZDAzOTNmZjRmMDgxMjU1YzM1My5iaW5kUG9wdXAocG9wdXBfZjY5ZjQ0Njg5MjhlNDA2ZjgxN2U4Njk4YWY0NzFlYjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YTMyZmE1MjE4YzU0NjU4OTcxZjk5ODE4MWE3YmNlMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTM4ODg4ODksMTYuMzI2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZGFkOGU4NWI3MGY0MTFlOGQzOGI3NDJhMzNmZDUwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjdlYzg1MDQ2MDk0OGFkYTBhNjQyZThiYzllMWQyYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWY3ZWM4NTA0NjA5NDhhZGEwYTY0MmU4YmM5ZTFkMmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCbHVtYmVyZ2hvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGFkOGU4NWI3MGY0MTFlOGQzOGI3NDJhMzNmZDUwZC5zZXRDb250ZW50KGh0bWxfOWY3ZWM4NTA0NjA5NDhhZGEwYTY0MmU4YmM5ZTFkMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTMyZmE1MjE4YzU0NjU4OTcxZjk5ODE4MWE3YmNlMi5iaW5kUG9wdXAocG9wdXBfOGRhZDhlODViNzBmNDExZThkMzhiNzQyYTMzZmQ1MGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80Mjc2NTc5NjMwMmU0MGEzOTViM2RlNDY1Zjk5Y2Y1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIzNjk0NDQ0NDQsMTYuMzg3Nzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDU0ZTA0Njk1ZmQ0ZmUyOWEyYWY5NTgyZjI4MDQ1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNjIxZDU3ZTQ4NzU0OWRjYWU0MGQ2YjFkOTA3Zjc1NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjYyMWQ1N2U0ODc1NDlkY2FlNDBkNmIxZDkwN2Y3NTQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJsdW1kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwNTRlMDQ2OTVmZDRmZTI5YTJhZjk1ODJmMjgwNDUzLnNldENvbnRlbnQoaHRtbF8yNjIxZDU3ZTQ4NzU0OWRjYWU0MGQ2YjFkOTA3Zjc1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyNzY1Nzk2MzAyZTQwYTM5NWIzZGU0NjVmOTljZjViLmJpbmRQb3B1cChwb3B1cF9mMDU0ZTA0Njk1ZmQ0ZmUyOWEyYWY5NTgyZjI4MDQ1Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E5NzM4NTZhNjcwZDQ2MDA4NDA3Yzg2ZmE1OWYwYjNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTY3Nzc3Nzc3OCwxNi4yODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmMWRkMjBlOGVhZTRlYjlhZTk0ZTNkMjkyZGI3ZDU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiOTc3YzIzMTc0MDRiNjU5NzZhOTQ2ZjYyOWVmZWZiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYjk3N2MyMzE3NDA0YjY1OTc2YTk0NmY2MjllZmVmYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsdW1lbmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjFkZDIwZThlYWU0ZWI5YWU5NGUzZDI5MmRiN2Q1NC5zZXRDb250ZW50KGh0bWxfMGI5NzdjMjMxNzQwNGI2NTk3NmE5NDZmNjI5ZWZlZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOTczODU2YTY3MGQ0NjAwODQwN2M4NmZhNTlmMGIzZC5iaW5kUG9wdXAocG9wdXBfNmYxZGQyMGU4ZWFlNGViOWFlOTRlM2QyOTJkYjdkNTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNjlhOTc2YzVmZGM0YmUzOTkxMjAzMzY4MWM0ZDFjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4LDE2LjI2Mzg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTJiMjQ1ZjUxYTBlNDY0MjhkZGY0ZGNhYzZkMWM2M2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODc5YzJmODc1NjhmNDU4Mjg3ZGIzNjU2NmY3YmEwNjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg3OWMyZjg3NTY4ZjQ1ODI4N2RiMzY1NjZmN2JhMDYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEJsdXQtQ2hyaXN0aS1LYXBlbGxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyYjI0NWY1MWEwZTQ2NDI4ZGRmNGRjYWM2ZDFjNjNlLnNldENvbnRlbnQoaHRtbF84NzljMmY4NzU2OGY0NTgyODdkYjM2NTY2ZjdiYTA2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI2OWE5NzZjNWZkYzRiZTM5OTEyMDMzNjgxYzRkMWMzLmJpbmRQb3B1cChwb3B1cF9lMmIyNDVmNTFhMGU0NjQyOGRkZjRkY2FjNmQxYzYzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUwMmFmYjI5ZDBlNjQzYWQ4MjQ3M2RlZjE5OGFmMjU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzMjYzYTc2YmIxNzQ5NmI5ZGViYzVlZWU2YzBkNzJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwM2UzOGY3YzE0YzRlYjI5N2NhYjA5Y2RiM2MwZmI4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82MDNlMzhmN2MxNGM0ZWIyOTdjYWIwOWNkYjNjMGZiOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsdXRnYXNzZSAzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzMjYzYTc2YmIxNzQ5NmI5ZGViYzVlZWU2YzBkNzJhLnNldENvbnRlbnQoaHRtbF82MDNlMzhmN2MxNGM0ZWIyOTdjYWIwOWNkYjNjMGZiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwMmFmYjI5ZDBlNjQzYWQ4MjQ3M2RlZjE5OGFmMjU4LmJpbmRQb3B1cChwb3B1cF9mMzI2M2E3NmJiMTc0OTZiOWRlYmM1ZWVlNmMwZDcyYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNjOTQwMDhhMjI4NjQ2MTZhMGEwNWZlZDVkMWQ4ODc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zNzQxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwNjI5MmFkYTk4ZjQ2MWRhZmU2MDM2OGY5ZjU4N2NkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlYmZhOWIzZjgxNzQ5ZTI5NTdlMzc4MzQxNTUxYmY3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wZWJmYTliM2Y4MTc0OWUyOTU3ZTM3ODM0MTU1MWJmNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsdXRnYXNzZSA1PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwNjI5MmFkYTk4ZjQ2MWRhZmU2MDM2OGY5ZjU4N2NkLnNldENvbnRlbnQoaHRtbF8wZWJmYTliM2Y4MTc0OWUyOTU3ZTM3ODM0MTU1MWJmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNjOTQwMDhhMjI4NjQ2MTZhMGEwNWZlZDVkMWQ4ODc4LmJpbmRQb3B1cChwb3B1cF85MDYyOTJhZGE5OGY0NjFkYWZlNjAzNjhmOWY1ODdjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YyNDRkZTIwY2QwOTRkODI4ZWRkMmNmNjdlOWUwN2JkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zNzQxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5YjdkZmZjOGFjNTQxY2JiOGU2ZWI3YjY3ZGIwMDBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzY2M2YjRmZjRhMTRlMDk5ZDFkMGQ4ZTM0Y2FlNWJmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hM2NjNmI0ZmY0YTE0ZTA5OWQxZDBkOGUzNGNhZTViZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsdXRnYXNzZSA3PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5YjdkZmZjOGFjNTQxY2JiOGU2ZWI3YjY3ZGIwMDBkLnNldENvbnRlbnQoaHRtbF9hM2NjNmI0ZmY0YTE0ZTA5OWQxZDBkOGUzNGNhZTViZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YyNDRkZTIwY2QwOTRkODI4ZWRkMmNmNjdlOWUwN2JkLmJpbmRQb3B1cChwb3B1cF84OWI3ZGZmYzhhYzU0MWNiYjhlNmViN2I2N2RiMDAwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxYmY0MWU4ZTY0NDQzZWQ4MTZhZGY5NzhkYjA1ZDBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjMxMTExMTExMSwxNi4yOTM4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0NDZlZmY4NjFkMzQ1ZjA4NGQ5YzFlY2Y5MDRmNTc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmMWI0OTVhMTg5MzQwMTBiYWZjYzUyNWRjYWE1YjlmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZjFiNDk1YTE4OTM0MDEwYmFmY2M1MjVkY2FhNWI5ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsw7Zja2luZ2VyaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0NDZlZmY4NjFkMzQ1ZjA4NGQ5YzFlY2Y5MDRmNTc3LnNldENvbnRlbnQoaHRtbF9kZjFiNDk1YTE4OTM0MDEwYmFmY2M1MjVkY2FhNWI5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIxYmY0MWU4ZTY0NDQzZWQ4MTZhZGY5NzhkYjA1ZDBhLmJpbmRQb3B1cChwb3B1cF81NDQ2ZWZmODYxZDM0NWYwODRkOWMxZWNmOTA0ZjU3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFlZGFiYzdmOWM3ODQ0NTRiNDgyMmI1MGVlM2FhYTdkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkzNjExMTExMSwxNi4zNDk0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhOTk4NDliMGYzMTQzMDk5YzEyNTE4OGRlM2QzYTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiMTE2OGYzMmFiMDQ0MmM5NDA4ODhkNzhiNzI5OWVkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84YjExNjhmMzJhYjA0NDJjOTQwODg4ZDc4YjcyOTllZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJsw7xtZWxoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhOTk4NDliMGYzMTQzMDk5YzEyNTE4OGRlM2QzYTY5LnNldENvbnRlbnQoaHRtbF84YjExNjhmMzJhYjA0NDJjOTQwODg4ZDc4YjcyOTllZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFlZGFiYzdmOWM3ODQ0NTRiNDgyMmI1MGVlM2FhYTdkLmJpbmRQb3B1cChwb3B1cF9kYTk5ODQ5YjBmMzE0MzA5OWMxMjUxODhkZTNkM2E2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MyZTNjNjljNjFlYTRjMmI5MjhhMGE5OTM4MTM2OTdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzODg4ODg4OSwxNi4zMDExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JlMjhkN2YyMGRlMjQwNjBhMGUwYzg1N2ZjOThlNWI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyM2ZlOTg1NWRhODQ2ZGY5ZGQ4MzI4YjQzM2RlMzlkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84MjNmZTk4NTVkYTg0NmRmOWRkODMyOGI0MzNkZTM5ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJvY2trZWxsZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmUyOGQ3ZjIwZGUyNDA2MGEwZTBjODU3ZmM5OGU1YjUuc2V0Q29udGVudChodG1sXzgyM2ZlOTg1NWRhODQ2ZGY5ZGQ4MzI4YjQzM2RlMzlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzJlM2M2OWM2MWVhNGMyYjkyOGEwYTk5MzgxMzY5N2EuYmluZFBvcHVwKHBvcHVwX2JlMjhkN2YyMGRlMjQwNjBhMGUwYzg1N2ZjOThlNWI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzdiNjc1MmM0YTNlNDY2OTkzNmZmNDAwMmY4MGVkZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTExMTExMTExLDE2LjM2MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzliMzVlMThlMGMwNGE4MjljODc2NGE2YjY5ZDQxMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTc2ODI1OTMyZTVkNGU5MGE1MDNiMTVmNmU4NjBlZDcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzk3NjgyNTkzMmU1ZDRlOTBhNTAzYjE1ZjZlODYwZWQ3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQm9kZW5jcmVkaXRhbnN0YWx0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5YjM1ZTE4ZTBjMDRhODI5Yzg3NjRhNmI2OWQ0MTAwLnNldENvbnRlbnQoaHRtbF85NzY4MjU5MzJlNWQ0ZTkwYTUwM2IxNWY2ZTg2MGVkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc3YjY3NTJjNGEzZTQ2Njk5MzZmZjQwMDJmODBlZGYxLmJpbmRQb3B1cChwb3B1cF8zOWIzNWUxOGUwYzA0YTgyOWM4NzY0YTZiNjlkNDEwMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q4NmIwYjdkODJiNjQyNjk4ZjJmMThiYWJkODEwYjRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzY3Nzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmJiZTBkMGZlODY0Y2IwYWI4Nzc1ZGE0ZmY5MTgwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZmFmM2VhNWY2MzQ0Y2JhYmZlOTcyMjczZjA2ZTJjOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmZhZjNlYTVmNjM0NGNiYWJmZTk3MjI3M2YwNmUyYzkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCb2duZXJnYXNzZSAxMTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYmJiZTBkMGZlODY0Y2IwYWI4Nzc1ZGE0ZmY5MTgwMi5zZXRDb250ZW50KGh0bWxfYmZhZjNlYTVmNjM0NGNiYWJmZTk3MjI3M2YwNmUyYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kODZiMGI3ZDgyYjY0MjY5OGYyZjE4YmFiZDgxMGI0ZC5iaW5kUG9wdXAocG9wdXBfMGJiYmUwZDBmZTg2NGNiMGFiODc3NWRhNGZmOTE4MDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YzhhOGRkNTE4MWQ0MjE3YTMyYmRjZmM2M2Y3YTljMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOWE1NzE0NDRmZDA0ZjgyOWE0OTkwZDhmMjNiNzRjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjA0NzliZjU0MGI0Y2QwYWY0OTZmOGI2ZmM4ZmZmOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmIwNDc5YmY1NDBiNGNkMGFmNDk2ZjhiNmZjOGZmZjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCb2duZXJnYXNzZSA1PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5YTU3MTQ0NGZkMDRmODI5YTQ5OTBkOGYyM2I3NGM0LnNldENvbnRlbnQoaHRtbF9mYjA0NzliZjU0MGI0Y2QwYWY0OTZmOGI2ZmM4ZmZmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdjOGE4ZGQ1MTgxZDQyMTdhMzJiZGNmYzYzZjdhOWMwLmJpbmRQb3B1cChwb3B1cF9mOWE1NzE0NDRmZDA0ZjgyOWE0OTkwZDhmMjNiNzRjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFhNTFlNWZlNmY0ZDQyYWFiZDU5NjI5OTY2Mjc3ZjdkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzllMjU3ZDVjZmU0YTI4OGE0OTBlMzBkZGU1YTY1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MDI3NGY0MGE0YmQ0NGM3Yjk4NmM4MDljMWMwYWJiMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjAyNzRmNDBhNGJkNDRjN2I5ODZjODA5YzFjMGFiYjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCb2duZXJnYXNzZSA3PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjOWUyNTdkNWNmZTRhMjg4YTQ5MGUzMGRkZTVhNjU2LnNldENvbnRlbnQoaHRtbF82MDI3NGY0MGE0YmQ0NGM3Yjk4NmM4MDljMWMwYWJiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhNTFlNWZlNmY0ZDQyYWFiZDU5NjI5OTY2Mjc3ZjdkLmJpbmRQb3B1cChwb3B1cF8yYzllMjU3ZDVjZmU0YTI4OGE0OTBlMzBkZGU1YTY1Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYyMDM1ZTE2ZmQyNDRlNzliMTRiOTgyMWQ3ZjQwYzNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiY2VjMDk1MWI0MDRjNjVhZDcxMjNjNjFkZDBmOGNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjNzIwMzBjMzU4NTRlOTNiMjVlMzFiMmU3Yzc3NTM1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xYzcyMDMwYzM1ODU0ZTkzYjI1ZTMxYjJlN2M3NzUzNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQm9sdHptYW5uZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmNlYzA5NTFiNDA0YzY1YWQ3MTIzYzYxZGQwZjhjYS5zZXRDb250ZW50KGh0bWxfMWM3MjAzMGMzNTg1NGU5M2IyNWUzMWIyZTdjNzc1MzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MjAzNWUxNmZkMjQ0ZTc5YjE0Yjk4MjFkN2Y0MGMzZi5iaW5kUG9wdXAocG9wdXBfY2JjZWMwOTUxYjQwNGM2NWFkNzEyM2M2MWRkMGY4Y2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMmNlMjNhNDY3Zjk0MzAxYWE4M2FmZDYyYzUwZWVjYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIzODYxMTExMTEsMTYuNDExMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2Q0MGRhN2ZlYzc0NGU3OTVmNGRiZGI4MzhiMWYyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZGUyOWE5OGYwYjQ0NDE0YmQxY2JhODEyMjY1OWI1NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWRlMjlhOThmMGI0NDQxNGJkMWNiYTgxMjI2NTliNTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJvbMOtdmFyZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wM2Q0MGRhN2ZlYzc0NGU3OTVmNGRiZGI4MzhiMWYyNi5zZXRDb250ZW50KGh0bWxfNWRlMjlhOThmMGI0NDQxNGJkMWNiYTgxMjI2NTliNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMmNlMjNhNDY3Zjk0MzAxYWE4M2FmZDYyYzUwZWVjYi5iaW5kUG9wdXAocG9wdXBfMDNkNDBkYTdmZWM3NDRlNzk1ZjRkYmRiODM4YjFmMjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YzVjYTEyYTI1OWQ0OTgwODFjNzJhNDM4Y2RmZmFjMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjgxYmE0MWE5ODI0ZDE0ODk0ZjU0Mzk1MWU0MGQxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjgxYzczZjM3NTk0OTc1OWYzOWM1MjVhZmNhMzEzMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGY4MWM3M2YzNzU5NDk3NTlmMzljNTI1YWZjYTMxMzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJvbml0emRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY4MWJhNDFhOTgyNGQxNDg5NGY1NDM5NTFlNDBkMTguc2V0Q29udGVudChodG1sXzBmODFjNzNmMzc1OTQ5NzU5ZjM5YzUyNWFmY2EzMTMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGM1Y2ExMmEyNTlkNDk4MDgxYzcyYTQzOGNkZmZhYzAuYmluZFBvcHVwKHBvcHVwXzBmODFiYTQxYTk4MjRkMTQ4OTRmNTQzOTUxZTQwZDE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTczOWM3M2RkZjg4NGE5YzlkYzM1ZGEwNzBlYmE2YzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzYxMTExMTExLDE2LjM5ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjExYzlmZTYyYmRlNGRiMmE3YTdkMGIwNWNlZGE1ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2E4M2Q4OThkNmM4NGM5Y2I3NGZjM2FjMTZlMDk2MDQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNhODNkODk4ZDZjODRjOWNiNzRmYzNhYzE2ZTA5NjA0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQm9zY2gtSGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMTFjOWZlNjJiZGU0ZGIyYTdhN2QwYjA1Y2VkYTVkZS5zZXRDb250ZW50KGh0bWxfM2E4M2Q4OThkNmM4NGM5Y2I3NGZjM2FjMTZlMDk2MDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNzM5YzczZGRmODg0YTljOWRjMzVkYTA3MGViYTZjMC5iaW5kUG9wdXAocG9wdXBfMjExYzlmZTYyYmRlNGRiMmE3YTdkMGIwNWNlZGE1ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOGFiZjY4N2Q1ZmQ0Njg3YjE2OTUxZGFjZWRkYzE4MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDI3Nzc3NzgsMTYuMzU5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmExZGFmNmFkMDU0ZTBlOTI3NThhZTI3MTFiYjRiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWYyZmQ5MTc1Zjk0YWRlYmRhNzE5Yzg3ZjU4YzEyNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjlmMmZkOTE3NWY5NGFkZWJkYTcxOWM4N2Y1OGMxMjQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCb3RoZSAmYW1wOyBFaHJtYW5uPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmYTFkYWY2YWQwNTRlMGU5Mjc1OGFlMjcxMWJiNGI2LnNldENvbnRlbnQoaHRtbF9mOWYyZmQ5MTc1Zjk0YWRlYmRhNzE5Yzg3ZjU4YzEyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4YWJmNjg3ZDVmZDQ2ODdiMTY5NTFkYWNlZGRjMTgwLmJpbmRQb3B1cChwb3B1cF8xZmExZGFmNmFkMDU0ZTBlOTI3NThhZTI3MTFiYjRiNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EwODU1NzNkYjkwZDQ1MDZhZTJlODRkZTQ1NDQ2MDcwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk3NSwxNi4zODIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0YmE0OTliYTZjZDQzOWU4OTA1YWY5Zjk1NTg5ZDNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmNTQyNzdmMmY3YjQwYWE4ZGM1ZmFlM2NlY2FkNTRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wZjU0Mjc3ZjJmN2I0MGFhOGRjNWZhZTNjZWNhZDU0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJvdHNjaGFmdCBHcm/Dn2JyaXRhbm5pZW5zPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0YmE0OTliYTZjZDQzOWU4OTA1YWY5Zjk1NTg5ZDNjLnNldENvbnRlbnQoaHRtbF8wZjU0Mjc3ZjJmN2I0MGFhOGRjNWZhZTNjZWNhZDU0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EwODU1NzNkYjkwZDQ1MDZhZTJlODRkZTQ1NDQ2MDcwLmJpbmRQb3B1cChwb3B1cF9lNGJhNDk5YmE2Y2Q0MzllODkwNWFmOWY5NTU4OWQzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk0ZDYwZThkZTZkZDRmZDJiNjIzMjg3MjU5ODY3MWIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk3Nzc3Nzc3OCwxNi4zODI3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlYzdmMWY3OGU1NTQ1YTM4MTU1M2IzMWU0MzUyMmI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2NTFhNTMyYzAzZjRhOTI4Njg1ZWZlNDBmMTYxYWIyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNjUxYTUzMmMwM2Y0YTkyODY4NWVmZTQwZjE2MWFiMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJvdHNjaGFmdCBkZXIgQnVuZGVzcmVwdWJsaWsgRGV1dHNjaGxhbmQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmVjN2YxZjc4ZTU1NDVhMzgxNTUzYjMxZTQzNTIyYjkuc2V0Q29udGVudChodG1sX2Y2NTFhNTMyYzAzZjRhOTI4Njg1ZWZlNDBmMTYxYWIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTRkNjBlOGRlNmRkNGZkMmI2MjMyODcyNTk4NjcxYjEuYmluZFBvcHVwKHBvcHVwXzJlYzdmMWY3OGU1NTQ1YTM4MTU1M2IzMWU0MzUyMmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODg1MmNhYjRmMmE1NGY3ZTljZTAxOThlZWUxM2IzOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTY2NjY2NjY3LDE2LjM4MTk0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2M3YjJkMGNhYTllNDJkM2FmMzgwZmNkZmMyZjY3NTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I4ZjQ0YjY4ZjNmNDA0YmE2N2QxZGVhOGYwOTMyMjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNiOGY0NGI2OGYzZjQwNGJhNjdkMWRlYThmMDkzMjIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQm91cmdvaW5ncGFsYWlzICgzLCBNZXR0ZXJuaWNoZ2Fzc2UgMTIpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjN2IyZDBjYWE5ZTQyZDNhZjM4MGZjZGZjMmY2NzUyLnNldENvbnRlbnQoaHRtbF8zYjhmNDRiNjhmM2Y0MDRiYTY3ZDFkZWE4ZjA5MzIyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg4NTJjYWI0ZjJhNTRmN2U5Y2UwMTk4ZWVlMTNiMzkyLmJpbmRQb3B1cChwb3B1cF8zYzdiMmQwY2FhOWU0MmQzYWYzODBmY2RmYzJmNjc1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxOWUyZDBkZjJkYzQ3MzQ4OGY0MGYxYWU2OTI0MTNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk2OTQ0NDQ0NCwxNi4zODE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhYTkyZTVlMWU1NjRlODVhMjFhNjA0ZmJlYzNhN2JmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiYWJmYzQxOTY1YTQ1MDJhZDQ5Nzc2Mjc4MWNiNjY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jYmFiZmM0MTk2NWE0NTAyYWQ0OTc3NjI3ODFjYjY2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJvdXJnb2luZ3BhbGFpcyAoMywgTWV0dGVybmljaGdhc3NlIDgpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhYTkyZTVlMWU1NjRlODVhMjFhNjA0ZmJlYzNhN2JmLnNldENvbnRlbnQoaHRtbF9jYmFiZmM0MTk2NWE0NTAyYWQ0OTc3NjI3ODFjYjY2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxOWUyZDBkZjJkYzQ3MzQ4OGY0MGYxYWU2OTI0MTNiLmJpbmRQb3B1cChwb3B1cF9kYWE5MmU1ZTFlNTY0ZTg1YTIxYTYwNGZiZWMzYTdiZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZhYzMyNGFiZGFmNTRiODNiZTEyYmU4NGJmNTA4OGM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk5NzIyMjIyMiwxNi4zN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNThiOWJlMDQxZGM0NGRiODg1MGM5NmVjNTQ3MmQ4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjI5OTFmMTg5NWY0ZTgxOTAzYTcxNmZhYjRkM2UxNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTIyOTkxZjE4OTVmNGU4MTkwM2E3MTZmYWI0ZDNlMTQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJyYWhtc2RlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDU4YjliZTA0MWRjNDRkYjg4NTBjOTZlYzU0NzJkODQuc2V0Q29udGVudChodG1sXzkyMjk5MWYxODk1ZjRlODE5MDNhNzE2ZmFiNGQzZTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmFjMzI0YWJkYWY1NGI4M2JlMTJiZTg0YmY1MDg4YzcuYmluZFBvcHVwKHBvcHVwXzA1OGI5YmUwNDFkYzQ0ZGI4ODUwYzk2ZWM1NDcyZDg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTAyODkxMzE1ZDdjNDFjYWI1NTVkYjlkYTM3M2I1ZGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDAyNzc3Nzc4LDE2LjM3MTM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWI5YTE0NTI1NmRiNDkyMmE1NThlNThiYmMxNjgyNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmZkZGY5YTRhMThkNDdhY2FmZjkzYWMzMThmNTQxOGYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZmZGRmOWE0YTE4ZDQ3YWNhZmY5M2FjMzE4ZjU0MThmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCcmFtYW50ZWRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI5YTE0NTI1NmRiNDkyMmE1NThlNThiYmMxNjgyNWYuc2V0Q29udGVudChodG1sXzZmZGRmOWE0YTE4ZDQ3YWNhZmY5M2FjMzE4ZjU0MThmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTAyODkxMzE1ZDdjNDFjYWI1NTVkYjlkYTM3M2I1ZGMuYmluZFBvcHVwKHBvcHVwXzFiOWExNDUyNTZkYjQ5MjJhNTU4ZTU4YmJjMTY4MjVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTdmMmE5ZWNiNzBkNGY1Njg1ZTBkNWExNTRkZmFmNTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjM3OTcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTcxYmU2YWY5MjM1NGY4ZmIxMDZlMzNjZTg1Y2E2MmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ1MWZlMWNhMTI4NDNjMmIzN2ExZTQyNWI5OTI0NjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc0NTFmZTFjYTEyODQzYzJiMzdhMWU0MjViOTkyNDY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJhbmRzY2hhZGVuLVZlcnNpY2hlcnVuZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzFiZTZhZjkyMzU0ZjhmYjEwNmUzM2NlODVjYTYyYy5zZXRDb250ZW50KGh0bWxfNzQ1MWZlMWNhMTI4NDNjMmIzN2ExZTQyNWI5OTI0NjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lN2YyYTllY2I3MGQ0ZjU2ODVlMGQ1YTE1NGRmYWY1NS5iaW5kUG9wdXAocG9wdXBfZTcxYmU2YWY5MjM1NGY4ZmIxMDZlMzNjZTg1Y2E2MmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YzRiODQyM2MwNmI0Zjk0YWNjOTMzOWQ4MTBlZjQ4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODg4ODg4ODksMTYuMzcyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZWMwMWI3ZTUwZjY0NjRjYTE5NWM4ZDkxZmMzYjc0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDM1Yzg3ODJhYjk0OTNhOTY5NTJlZTA2ODNiMmM1NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGQzNWM4NzgyYWI5NDkzYTk2OTUyZWUwNjgzYjJjNTQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmFuZHN0w6R0dGUgMTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZWMwMWI3ZTUwZjY0NjRjYTE5NWM4ZDkxZmMzYjc0My5zZXRDb250ZW50KGh0bWxfZGQzNWM4NzgyYWI5NDkzYTk2OTUyZWUwNjgzYjJjNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YzRiODQyM2MwNmI0Zjk0YWNjOTMzOWQ4MTBlZjQ4Ny5iaW5kUG9wdXAocG9wdXBfZGVjMDFiN2U1MGY2NDY0Y2ExOTVjOGQ5MWZjM2I3NDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83OGM1YTE1MjExMjc0OTZhOGU4ZWVlYTNmNTZjN2FlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTE2NjY2NjcsMTYuMzcyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZTdiNDdiZmY5NzA0NDY3OGZhMTcyNWY5NTA2NzU2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZTc5ODdiNjY0YTM0ZTExODgzOWJiMjQ4ZWE1MTEyMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGU3OTg3YjY2NGEzNGUxMTg4MzliYjI0OGVhNTExMjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmFuZHN0w6R0dGUgMzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZTdiNDdiZmY5NzA0NDY3OGZhMTcyNWY5NTA2NzU2NC5zZXRDb250ZW50KGh0bWxfMGU3OTg3YjY2NGEzNGUxMTg4MzliYjI0OGVhNTExMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OGM1YTE1MjExMjc0OTZhOGU4ZWVlYTNmNTZjN2FlNi5iaW5kUG9wdXAocG9wdXBfN2U3YjQ3YmZmOTcwNDQ2NzhmYTE3MjVmOTUwNjc1NjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84Y2FlMzc3NmU0YTY0YzMyYThjMjQ4NDgxOTZjYzMxYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Nzc3Nzc3NzgsMTYuMzgyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMGYwYzI3NzUyNjI0ZjUzYjJlMDljMDdhMDU3YjlkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YTczNzY5Zjg2YmU0MWZhODEyYTM5ODI4YWQxOGI0NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2E3Mzc2OWY4NmJlNDFmYTgxMmEzOTgyOGFkMThiNDQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmF0bWFubnBhbGFpczwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMGYwYzI3NzUyNjI0ZjUzYjJlMDljMDdhMDU3YjlkZS5zZXRDb250ZW50KGh0bWxfN2E3Mzc2OWY4NmJlNDFmYTgxMmEzOTgyOGFkMThiNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84Y2FlMzc3NmU0YTY0YzMyYThjMjQ4NDgxOTZjYzMxYS5iaW5kUG9wdXAocG9wdXBfMDBmMGMyNzc1MjYyNGY1M2IyZTA5YzA3YTA1N2I5ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZWJiNzdhZDg2MzU0ZGZhYWMwNjhlZDI1YWZiMTYyMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4NjM4ODg4ODksMTYuMzQzMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMmFmYTFiNTdlYzU0Nzk5YTRlZGI1MDg1YTdhYjNhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZDFiMjkxOTAyNGI0ZWJlYTY2MGMwMjlmOGFmMDM0MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWQxYjI5MTkwMjRiNGViZWE2NjBjMDI5ZjhhZjAzNDIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmF1aGF1cyAoMTIsIEdhdWRlbnpkb3JmKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmFmYTFiNTdlYzU0Nzk5YTRlZGI1MDg1YTdhYjNhNC5zZXRDb250ZW50KGh0bWxfMWQxYjI5MTkwMjRiNGViZWE2NjBjMDI5ZjhhZjAzNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZWJiNzdhZDg2MzU0ZGZhYWMwNjhlZDI1YWZiMTYyMS5iaW5kUG9wdXAocG9wdXBfZDJhZmExYjU3ZWM1NDc5OWE0ZWRiNTA4NWE3YWIzYTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81OWM2OTRkZTcyODQ0NTJiODFhZDhiN2E0NTcxZDY2NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI2MDU1NTU1NTYsMTYuMzY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0ZWE4N2IwMmU5YTRiZTI5M2JiOGI2ZTZhNmJjMWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExMDY1YjlkMjA5YjQ4MWM4MjVlODg0Y2JlMDY0M2NiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMTA2NWI5ZDIwOWI0ODFjODI1ZTg4NGNiZTA2NDNjYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyYXVoYXVzICgxOSwgSGFja2hvZmVyZ2Fzc2UpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0ZWE4N2IwMmU5YTRiZTI5M2JiOGI2ZTZhNmJjMWNjLnNldENvbnRlbnQoaHRtbF8xMTA2NWI5ZDIwOWI0ODFjODI1ZTg4NGNiZTA2NDNjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5YzY5NGRlNzI4NDQ1MmI4MWFkOGI3YTQ1NzFkNjY1LmJpbmRQb3B1cChwb3B1cF9kNGVhODdiMDJlOWE0YmUyOTNiYjhiNmU2YTZiYzFjYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RjMDk4OGNkZDFkMzRkYjBiNGE5ZWY4NTdlOWQ3NGE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg3Nzc3Nzc3OCwxNi4zNDc3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3MGQ2NTYwZWQ3NDQwOGE4MmU0NzY0NzI5ZGE4OGZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmM2MyM2E1MzY0MDQ0NWVhNTllNDBkMzNiMzI5NGVmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZjNjMjNhNTM2NDA0NDVlYTU5ZTQwZDMzYjMyOTRlZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyYXVoYXVzIEFtIEh1bmRzdHVybTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzBkNjU2MGVkNzQ0MDhhODJlNDc2NDcyOWRhODhmZC5zZXRDb250ZW50KGh0bWxfY2YzYzIzYTUzNjQwNDQ1ZWE1OWU0MGQzM2IzMjk0ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYzA5ODhjZGQxZDM0ZGIwYjRhOWVmODU3ZTlkNzRhNC5iaW5kUG9wdXAocG9wdXBfMjcwZDY1NjBlZDc0NDA4YTgyZTQ3NjQ3MjlkYTg4ZmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNjBjNTc0NzdiNGM0ODI0YTgwMTA5YjA5OWRmNWU0NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3Njk0NDQ0NDQsMTYuNDIwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTBmYTllZjk5MDU0NThhYjM3ZGU0MDE2MjE3MWM2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWJmM2Y1ZTU0YjM0ODU1ODlhOGQwNDgwOGU4ODY4OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODViZjNmNWU1NGIzNDg1NTg5YThkMDQ4MDhlODg2ODkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmF1aGF1cyBTdC4gTWFyeDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTBmYTllZjk5MDU0NThhYjM3ZGU0MDE2MjE3MWM2OS5zZXRDb250ZW50KGh0bWxfODViZjNmNWU1NGIzNDg1NTg5YThkMDQ4MDhlODg2ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNjBjNTc0NzdiNGM0ODI0YTgwMTA5YjA5OWRmNWU0Ny5iaW5kUG9wdXAocG9wdXBfOWUwZmE5ZWY5OTA1NDU4YWIzN2RlNDAxNjIxNzFjNjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zODE2YTIzNzY4MTg0NThjYTI0MTE1ZWE2N2NlZmZmZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTI3Nzc3NzgsMTYuMzY4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzY5YWMxMWMwNDA0YzYwYTIyYWRiYjdkZDk1NThiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzU0N2E5ZGUwY2E0NzNiOTkyZThhM2FkZTZmZDY3NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTM1NDdhOWRlMGNhNDczYjk5MmU4YTNhZGU2ZmQ2NzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmF1aGF1cyBkZXMgQsO8cmdlcnNwaXRhbHM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M2OWFjMTFjMDQwNGM2MGEyMmFkYmI3ZGQ5NTU4Yjguc2V0Q29udGVudChodG1sXzEzNTQ3YTlkZTBjYTQ3M2I5OTJlOGEzYWRlNmZkNjc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzgxNmEyMzc2ODE4NDU4Y2EyNDExNWVhNjdjZWZmZmUuYmluZFBvcHVwKHBvcHVwXzdjNjlhYzExYzA0MDRjNjBhMjJhZGJiN2RkOTU1OGI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjE3OTA4NWVmMGE3NGU3ZjliZmJmYTBlZDg1MmY3YzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjAyNzc3Nzc4LDE2LjM3NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDZlYmNkYWVhNzg0NGNmZTlkZWJiNjEyZjkxNzM3ZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDZhNWY4MzAzMTUyNDhmMmI1N2U0N2I5ZTgzZWNiOWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2YTVmODMwMzE1MjQ4ZjJiNTdlNDdiOWU4M2VjYjliIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJhdWhhdXMgaW0gVW50ZXJlbiBXZXJkPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2ZWJjZGFlYTc4NDRjZmU5ZGViYjYxMmY5MTczN2YxLnNldENvbnRlbnQoaHRtbF80NmE1ZjgzMDMxNTI0OGYyYjU3ZTQ3YjllODNlY2I5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YxNzkwODVlZjBhNzRlN2Y5YmZiZmEwZWQ4NTJmN2M0LmJpbmRQb3B1cChwb3B1cF9kNmViY2RhZWE3ODQ0Y2ZlOWRlYmI2MTJmOTE3MzdmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I3MDg4YWFiZmQ2ODRkNzZiMmFiMWFkNDcwNGI1MzY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk1LDE2LjI2Mjc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjgyMTUxNWU0OGI0NDEwMzg4ODExZGU4ZTNhMWY5N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzJkZDhiM2Y2YWFjNGFlNTgwYTU1OTQxOWMwZmQ2NjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcyZGQ4YjNmNmFhYzRhZTU4MGE1NTk0MTljMGZkNjY1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBCcsO8Y2tlOiBCcmF1aGF1c2Jyw7xja2U8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjgyMTUxNWU0OGI0NDEwMzg4ODExZGU4ZTNhMWY5N2Euc2V0Q29udGVudChodG1sXzcyZGQ4YjNmNmFhYzRhZTU4MGE1NTk0MTljMGZkNjY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjcwODhhYWJmZDY4NGQ3NmIyYWIxYWQ0NzA0YjUzNjYuYmluZFBvcHVwKHBvcHVwXzI4MjE1MTVlNDhiNDQxMDM4ODgxMWRlOGUzYTFmOTdhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTRkNTMwZjdlNTNhNGEyOWE0ZDk1NDdmY2U1NTQ2MzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yLDE2LjI1NTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWVhMTkwOGJlMzE3NDlmNzkxOWM4OGIwMzY3MGY2MWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBkYWU3OGI5OTRkNGU5YTlmNGI3ZGVkMTcwMjRmYmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UwZGFlNzhiOTk0ZDRlOWE5ZjRiN2RlZDE3MDI0ZmJmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJhdWjDpHVzbGhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWExOTA4YmUzMTc0OWY3OTE5Yzg4YjAzNjcwZjYxYS5zZXRDb250ZW50KGh0bWxfZTBkYWU3OGI5OTRkNGU5YTlmNGI3ZGVkMTcwMjRmYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NGQ1MzBmN2U1M2E0YTI5YTRkOTU0N2ZjZTU1NDYzMC5iaW5kUG9wdXAocG9wdXBfNWVhMTkwOGJlMzE3NDlmNzkxOWM4OGIwMzY3MGY2MWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYjk2OGMwNmVlMzM0NzlmOTIwYjJhMmRiNTA0OWQxNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTI3Nzc3NzgsMTYuMzc4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYmQ2NjA1MWNhMzM0ZDk2OTJhZmIxOWU4NGY1NzlkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmJhZTI1YjVmNTc0OWRhOTMwOGRhMzUzM2E4YTZmYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODZiYWUyNWI1ZjU3NDlkYTkzMDhkYTM1MzNhOGE2ZmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQnJhdW5iYXN0ZWk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWJkNjYwNTFjYTMzNGQ5NjkyYWZiMTllODRmNTc5ZDYuc2V0Q29udGVudChodG1sXzg2YmFlMjViNWY1NzQ5ZGE5MzA4ZGEzNTMzYThhNmZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWI5NjhjMDZlZTMzNDc5ZjkyMGIyYTJkYjUwNDlkMTYuYmluZFBvcHVwKHBvcHVwX2FiZDY2MDUxY2EzMzRkOTY5MmFmYjE5ZTg0ZjU3OWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjYzNjA3ZWMxMWFiNGYyNTlkYTc1NDk4MmJhNTc3ZjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM2MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzYxYjMyNTE4YmQzNGJjNDg5YTQ4YWQ0ODRjMjY1ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzU1Yjc1YWY5ODZkNGZkZDhiMjE2OTAwNzM4Y2Q3Y2YgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M1NWI3NWFmOTg2ZDRmZGQ4YjIxNjkwMDczOGNkN2NmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCcmF1bmRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzYxYjMyNTE4YmQzNGJjNDg5YTQ4YWQ0ODRjMjY1ZDEuc2V0Q29udGVudChodG1sX2M1NWI3NWFmOTg2ZDRmZGQ4YjIxNjkwMDczOGNkN2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjYzNjA3ZWMxMWFiNGYyNTlkYTc1NDk4MmJhNTc3ZjIuYmluZFBvcHVwKHBvcHVwX2M2MWIzMjUxOGJkMzRiYzQ4OWE0OGFkNDg0YzI2NWQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWQ4ZmIyZjk5OTMwNDAyNzkyNTY3YmQwNDEwYTg0ODQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTAyNzc3Nzc4LDE2LjMyNjM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE0ZTkzMTk4YTRiNDc2MWIxMGU2ZTRiOTc5YTBkMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTI0ZTNhNDUwYTYzNDk3YjhlMzc3YjUzZDUxNDY5NDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2EyNGUzYTQ1MGE2MzQ5N2I4ZTM3N2I1M2Q1MTQ2OTQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJhdW5oaXJzY2hlbmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTRlOTMxOThhNGI0NzYxYjEwZTZlNGI5NzlhMGQxNC5zZXRDb250ZW50KGh0bWxfYTI0ZTNhNDUwYTYzNDk3YjhlMzc3YjUzZDUxNDY5NDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZDhmYjJmOTk5MzA0MDI3OTI1NjdiZDA0MTBhODQ4NC5iaW5kUG9wdXAocG9wdXBfOTE0ZTkzMTk4YTRiNDc2MWIxMGU2ZTRiOTc5YTBkMTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNTc2MmM5NGM3NjM0NjUwOWQ3NTZkMDZmZGMwNWZkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDI3Nzc3NzgsMTYuMzMzMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNWYzZTkwN2Q0NTc0NDMzOGY5NDRhMmJlM2QyYTE5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWQ1MDY0NDc4MWE0ZGUxOWMxZWYyNmE3M2UxMmRmNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjVkNTA2NDQ3ODFhNGRlMTljMWVmMjZhNzNlMTJkZjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmF1bmhpcnNjaGVudGhlYXRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNWYzZTkwN2Q0NTc0NDMzOGY5NDRhMmJlM2QyYTE5My5zZXRDb250ZW50KGh0bWxfNjVkNTA2NDQ3ODFhNGRlMTljMWVmMjZhNzNlMTJkZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNTc2MmM5NGM3NjM0NjUwOWQ3NTZkMDZmZGMwNWZkZC5iaW5kUG9wdXAocG9wdXBfMDVmM2U5MDdkNDU3NDQzMzhmOTQ0YTJiZTNkMmExOTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYjdmODgzMjAzZmQ0ZWRjYWM2YzcyODBlMThkNDYzZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4ODMzMzMzMzMsMTYuMjk0NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzU0NDJjMGM2NWU0YTQwOGMyMWU5MjcwMjFjMDdmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTRlZjgxOGM0N2U0ZmVkOTBlMmY0NzBmMjM3OGExOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNGU0ZWY4MThjNDdlNGZlZDkwZTJmNDcwZjIzNzhhMTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyw7xja2U6IEJyYXVuc2Nod2VpZ2Jyw7xja2U8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM1NDQyYzBjNjVlNGE0MDhjMjFlOTI3MDIxYzA3ZmQuc2V0Q29udGVudChodG1sXzRlNGVmODE4YzQ3ZTRmZWQ5MGUyZjQ3MGYyMzc4YTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWI3Zjg4MzIwM2ZkNGVkY2FjNmM3MjgwZTE4ZDQ2M2QuYmluZFBvcHVwKHBvcHVwXzkzNTQ0MmMwYzY1ZTRhNDA4YzIxZTkyNzAyMWMwN2ZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTdmY2U0NjczODg4NGQ2NWIzYzU3ZDhjNjkxN2NiYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTE5NDQ0NDQ0LDE2LjM0MDI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmIyZGU2NTUxZDZmNGU3MGExZDViMDAzMDVlN2RiMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODViNzBjZDBlMzhiNGM0MGJhMTZkZWMyZDcxNDIwMzMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg1YjcwY2QwZTM4YjRjNDBiYTE2ZGVjMmQ3MTQyMDMzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEJyZWl0ZW5mZWxkZXIgS2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiMmRlNjU1MWQ2ZjRlNzBhMWQ1YjAwMzA1ZTdkYjE5LnNldENvbnRlbnQoaHRtbF84NWI3MGNkMGUzOGI0YzQwYmExNmRlYzJkNzE0MjAzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E3ZmNlNDY3Mzg4ODRkNjViM2M1N2Q4YzY5MTdjYmIyLmJpbmRQb3B1cChwb3B1cF8yYjJkZTY1NTFkNmY0ZTcwYTFkNWIwMDMwNWU3ZGIxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3ODliNWIyNzU5NjRhNTI5N2E5OTM0MTNjZjVhNDgwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzODg4ODg4OSwxNi4zNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWYwZjBmZTljZTQ0NDA0ZWExMWU1YWFjNDMyOGY1ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTJiMDRmNGJjMTYyNDRhZTk0ZjllODAyMDkxY2E0NTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UyYjA0ZjRiYzE2MjQ0YWU5NGY5ZTgwMjA5MWNhNDUyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJlaXRlbmZlbGRlciBTY2h1bGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWYwZjBmZTljZTQ0NDA0ZWExMWU1YWFjNDMyOGY1ZmUuc2V0Q29udGVudChodG1sX2UyYjA0ZjRiYzE2MjQ0YWU5NGY5ZTgwMjA5MWNhNDUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODc4OWI1YjI3NTk2NGE1Mjk3YTk5MzQxM2NmNWE0ODAuYmluZFBvcHVwKHBvcHVwX2FmMGYwZmU5Y2U0NDQwNGVhMTFlNWFhYzQzMjhmNWZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTA1MGZmMWExY2Q2NDFhNDg3N2Y4NzI1NDMzZTllMmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM2MTExMTExLDE2LjM0NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDEwNTQwYWE1NTM0NDkxOTk0MDlhZTgyN2M5ZmFjZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzUzNjRhMmQzZmZkNDkwNzg0YzY3OTQ1MTZkNzk4ZTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc1MzY0YTJkM2ZmZDQ5MDc4NGM2Nzk0NTE2ZDc5OGU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJlaXRlbmZlbGRlcmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTA1NDBhYTU1MzQ0OTE5OTQwOWFlODI3YzlmYWNlYS5zZXRDb250ZW50KGh0bWxfNzUzNjRhMmQzZmZkNDkwNzg0YzY3OTQ1MTZkNzk4ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MDUwZmYxYTFjZDY0MWE0ODc3Zjg3MjU0MzNlOWUyZC5iaW5kUG9wdXAocG9wdXBfMDEwNTQwYWE1NTM0NDkxOTk0MDlhZTgyN2M5ZmFjZWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NjliMTZjODY1NTM0ZjJmYmIwZmNjMjBhNTM4ZjU1MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI1MTM4ODg4ODksMTYuNDk1NTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDQzMGNjNTI3Mzk0NGQyOTVhNTZhMDU5Y2RhZjQ5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzA3MzEyZWYyZWM0ZGRjYmZiMTFkOGQzMzk4YjIzOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTcwNzMxMmVmMmVjNGRkY2JmYjExZDhkMzM5OGIyMzkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmVpdGVubGVlciBHdXRzaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwNDMwY2M1MjczOTQ0ZDI5NWE1NmEwNTljZGFmNDkwLnNldENvbnRlbnQoaHRtbF9lNzA3MzEyZWYyZWM0ZGRjYmZiMTFkOGQzMzk4YjIzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk2OWIxNmM4NjU1MzRmMmZiYjBmY2MyMGE1MzhmNTUwLmJpbmRQb3B1cChwb3B1cF84MDQzMGNjNTI3Mzk0NGQyOTVhNTZhMDU5Y2RhZjQ5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhiNjIxOWM3N2ZiNDRiZjJhNTM3YjY0ZGE1OGE5YjhhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjUxMzg4ODg4OSwxNi40OTU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxZWVhMjNjZjEyZjRhOTc4NjcyODZkMzkxYWMyZDU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzNDYzNzQ0MmI1MDQ1NzM5ODlmMzZkYjMxNTg0YWZlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lMzQ2Mzc0NDJiNTA0NTczOTg5ZjM2ZGIzMTU4NGFmZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCcmVpdGVubGVlciBLaXJjaGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFlZWEyM2NmMTJmNGE5Nzg2NzI4NmQzOTFhYzJkNTUuc2V0Q29udGVudChodG1sX2UzNDYzNzQ0MmI1MDQ1NzM5ODlmMzZkYjMxNTg0YWZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGI2MjE5Yzc3ZmI0NGJmMmE1MzdiNjRkYTU4YTliOGEuYmluZFBvcHVwKHBvcHVwX2MxZWVhMjNjZjEyZjRhOTc4NjcyODZkMzkxYWMyZDU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMThmNjllYmU5ZGU3NGU2Zjk5MWVhYzhiMTkxNjNlMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNTEzODg4ODg5LDE2LjQ5NTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjI4OWRkMTQxZjk3NGQwZGFlZWMwNDRiY2RmNDVhY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjgyZDNhMzM4NjFjNGZiM2E1NDNlNTUzNGQyOWY5NTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI4MmQzYTMzODYxYzRmYjNhNTQzZTU1MzRkMjlmOTU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJlaXRlbmxlZXIgUGZhcnJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjI4OWRkMTQxZjk3NGQwZGFlZWMwNDRiY2RmNDVhY2Euc2V0Q29udGVudChodG1sXzI4MmQzYTMzODYxYzRmYjNhNTQzZTU1MzRkMjlmOTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMThmNjllYmU5ZGU3NGU2Zjk5MWVhYzhiMTkxNjNlMjQuYmluZFBvcHVwKHBvcHVwX2YyODlkZDE0MWY5NzRkMGRhZWVjMDQ0YmNkZjQ1YWNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGVhZGQ5NDU3YmNkNGEwMTllYTFiM2RkZTk5MjJiMTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDIyMjIyMjIyLDE2LjI5NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEwMDhiMDcxOTg4NDMxZmEzZGYxMGEyNTBmN2QyY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTc0MDk5OTBmZDYzNDBlMjk3MzgyZGYzNDBhOTYxMzUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E3NDA5OTkwZmQ2MzQwZTI5NzM4MmRmMzQwYTk2MTM1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJlaXRlbnNlZXIgS2FzZXJuZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTAwOGIwNzE5ODg0MzFmYTNkZjEwYTI1MGY3ZDJjZC5zZXRDb250ZW50KGh0bWxfYTc0MDk5OTBmZDYzNDBlMjk3MzgyZGYzNDBhOTYxMzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZWFkZDk0NTdiY2Q0YTAxOWVhMWIzZGRlOTkyMmIxOC5iaW5kUG9wdXAocG9wdXBfNGEwMDhiMDcxOTg4NDMxZmEzZGYxMGEyNTBmN2QyY2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNWRlNTFmM2QwNjU0NWM3YTBlOTE4Y2U3YjdkZGUxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMTM4ODg4ODksMTYuMzA5MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjM3YTdmOTllNzY0MWQ0ODg3NzFiZTNiNjdlMmJiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGE2MDU1MTI2OTI0MmQ2YTA4YTkwMWFjNWYyN2FhYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjhhNjA1NTEyNjkyNDJkNmEwOGE5MDFhYzVmMjdhYWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQnJlaXRlbnNlZXIgS2lyY2hlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmMzdhN2Y5OWU3NjQxZDQ4ODc3MWJlM2I2N2UyYmI5LnNldENvbnRlbnQoaHRtbF82OGE2MDU1MTI2OTI0MmQ2YTA4YTkwMWFjNWYyN2FhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1ZGU1MWYzZDA2NTQ1YzdhMGU5MThjZTdiN2RkZTE5LmJpbmRQb3B1cChwb3B1cF80ZjM3YTdmOTllNzY0MWQ0ODg3NzFiZTNiNjdlMmJiOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEzNGYwYmFlMzgzMzQ5NGQ5Y2NmZTQzODFmMDJhY2JjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4ODg4ODg4OSwxNi4zMDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDJmN2JmOTVjYjdhNDBiMWFhMWRhZTFlYjQ0YjE0NDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGMxZWU1NDRlOWUyNDU1ODk3NTczODM3NTJhNjIyM2YgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBjMWVlNTQ0ZTllMjQ1NTg5NzU3MzgzNzUyYTYyMjNmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJlaXRlbnNlZXIgS29tbWFuZG9nZWLDpHVkZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmY3YmY5NWNiN2E0MGIxYWExZGFlMWViNDRiMTQ0Mi5zZXRDb250ZW50KGh0bWxfMGMxZWU1NDRlOWUyNDU1ODk3NTczODM3NTJhNjIyM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMzRmMGJhZTM4MzM0OTRkOWNjZmU0MzgxZjAyYWNiYy5iaW5kUG9wdXAocG9wdXBfNDJmN2JmOTVjYjdhNDBiMWFhMWRhZTFlYjQ0YjE0NDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMzIzZGFlMGQwYmU0YzRkOTM4NTE1NmJlYjY4YzlhOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NzIyMjIyMjIsMTYuMjcxMzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjRmZTRhMTc1ZWI0NjdiYTQ1MTFlNGUzOWJjODI5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjc2ZmY1YjQyMGY0NTRjYjEwNDUwNGUwZmM3YzQ5ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjY3NmZmNWI0MjBmNDU0Y2IxMDQ1MDRlMGZjN2M0OWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJyZWl0bmVyZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZjRmZTRhMTc1ZWI0NjdiYTQ1MTFlNGUzOWJjODI5ZS5zZXRDb250ZW50KGh0bWxfYjY3NmZmNWI0MjBmNDU0Y2IxMDQ1MDRlMGZjN2M0OWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMzIzZGFlMGQwYmU0YzRkOTM4NTE1NmJlYjY4YzlhOS5iaW5kUG9wdXAocG9wdXBfNGY0ZmU0YTE3NWViNDY3YmE0NTExZTRlMzliYzgyOWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hODc2ZGFmNTdiNTI0ZGIyYmQxMGIzYWUyNDllYjA4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNzUsMTYuMzU4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YjJhODU2NGM2NjQ0ODJhYmY0MTJmMmQwMDM3MzhjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGEzZTc1NjQ0Y2E0OWE2OTg1ZTZhN2IxYzFiYmRiNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzRhM2U3NTY0NGNhNDlhNjk4NWU2YTdiMWMxYmJkYjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmVubmVycGFsYWlzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliMmE4NTY0YzY2NDQ4MmFiZjQxMmYyZDAwMzczOGNiLnNldENvbnRlbnQoaHRtbF83NGEzZTc1NjQ0Y2E0OWE2OTg1ZTZhN2IxYzFiYmRiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E4NzZkYWY1N2I1MjRkYjJiZDEwYjNhZTI0OWViMDg5LmJpbmRQb3B1cChwb3B1cF85YjJhODU2NGM2NjQ0ODJhYmY0MTJmMmQwMDM3MzhjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q2MWI5ODJhZWMxNTQ4M2Q5Y2M0NDE0NzIxMzc3YjU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzMDU1MmUxOTJlYjQ0MjQ4ZTEwODQ0ZjY0ZjZkNjhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3MTA3ZjI5M2VlNTQ4OTBhMDMyNmEzYWYxY2FmNDYwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jNzEwN2YyOTNlZTU0ODkwYTAzMjZhM2FmMWNhZjQ2MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQnJlbnRhbm9kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzMDU1MmUxOTJlYjQ0MjQ4ZTEwODQ0ZjY0ZjZkNjhlLnNldENvbnRlbnQoaHRtbF9jNzEwN2YyOTNlZTU0ODkwYTAzMjZhM2FmMWNhZjQ2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q2MWI5ODJhZWMxNTQ4M2Q5Y2M0NDE0NzIxMzc3YjU2LmJpbmRQb3B1cChwb3B1cF9jMzA1NTJlMTkyZWI0NDI0OGUxMDg0NGY2NGY2ZDY4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE0YjQyMjcxMzg4MzQ5MzQ4MjBmYmMxNWEwMTE0YTMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAyMjIyMjIyMiwxNi4zOTQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwNTE1NTI1MTQ1MzQ1MzViNGRmNWNmMzhjMWNjNTEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2ZmNjMWUzZTlhYTQzY2RhZjU1NTM3ZTJkY2ViNjk1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zNmZjYzFlM2U5YWE0M2NkYWY1NTUzN2UyZGNlYjY5NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyZW50YW5vaGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDUxNTUyNTE0NTM0NTM1YjRkZjVjZjM4YzFjYzUxMi5zZXRDb250ZW50KGh0bWxfMzZmY2MxZTNlOWFhNDNjZGFmNTU1MzdlMmRjZWI2OTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNGI0MjI3MTM4ODM0OTM0ODIwZmJjMTVhMDExNGEzMi5iaW5kUG9wdXAocG9wdXBfMzA1MTU1MjUxNDUzNDUzNWI0ZGY1Y2YzOGMxY2M1MTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZGJjNzVjM2Y3YWM0OGQ0OWJlZjBiZmU2YjY0YWU1MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNTU1NTU1NTYsMTYuMzU5MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTM2MWI1NTBjYmI0MTk5YmYwNGFlOTk5YWMwNGI4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzFkNzJhNGM2YTY0Yzg5YjBjYzA1NTcwMjc4ZDRlMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTMxZDcyYTRjNmE2NGM4OWIwY2MwNTU3MDI3OGQ0ZTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyw7xja2U6IEJyaWdpdHRhYnLDvGNrZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTM2MWI1NTBjYmI0MTk5YmYwNGFlOTk5YWMwNGI4OC5zZXRDb250ZW50KGh0bWxfOTMxZDcyYTRjNmE2NGM4OWIwY2MwNTU3MDI3OGQ0ZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZGJjNzVjM2Y3YWM0OGQ0OWJlZjBiZmU2YjY0YWU1MS5iaW5kUG9wdXAocG9wdXBfOTkzNjFiNTUwY2JiNDE5OWJmMDRhZTk5OWFjMDRiODgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMzYxYWZiNjE4Yzc0NzRjYmZmN2I2NjMyZDBmYTY2NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0NTI3Nzc3NzgsMTYuMzc0MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDMwNzc2ZmE0ZDk0MzNlYTZmMmU5NGQyZmNiMTkwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDIyNmVhNTkzYTc0MGUwYTIxOTI5Zjk0NzNmZGEwNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2QyMjZlYTU5M2E3NDBlMGEyMTkyOWY5NDczZmRhMDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQnJpZ2l0dGFrYXBlbGxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwMzA3NzZmYTRkOTQzM2VhNmYyZTk0ZDJmY2IxOTAyLnNldENvbnRlbnQoaHRtbF9jZDIyNmVhNTkzYTc0MGUwYTIxOTI5Zjk0NzNmZGEwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzNjFhZmI2MThjNzQ3NGNiZmY3YjY2MzJkMGZhNjY2LmJpbmRQb3B1cChwb3B1cF85MDMwNzc2ZmE0ZDk0MzNlYTZmMmU5NGQyZmNiMTkwMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZmNDNlMDMwM2JkNzRkZjViZDkzYTdhYzhhNzA2MmYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjMxMTExMTExMSwxNi4zNzExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0MzI5NGJlMmM1MjRlNzY5OGFmM2RjMzdiNDhjZGEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2MmFhNzRiMmNhNzQwNjJhODk5ZmM5NDcxNmVlNGUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNjJhYTc0YjJjYTc0MDYyYTg5OWZjOTQ3MTZlZTRlMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCcmlnaXR0YWtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDMyOTRiZTJjNTI0ZTc2OThhZjNkYzM3YjQ4Y2RhMy5zZXRDb250ZW50KGh0bWxfZTYyYWE3NGIyY2E3NDA2MmE4OTlmYzk0NzE2ZWU0ZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZjQzZTAzMDNiZDc0ZGY1YmQ5M2E3YWM4YTcwNjJmMS5iaW5kUG9wdXAocG9wdXBfNTQzMjk0YmUyYzUyNGU3Njk4YWYzZGMzN2I0OGNkYTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83N2E4NGQ2YmI2Y2Y0YzJmYjkxZGJlOGE0MmRlZDllMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0MjUsMTYuMzgzODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MGE1ODQxODY4MmE0MGY3OTQ2MmM2ZTk3ODBmNmUwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzA1NjkzZjFjYzA0ODRlOTBjMWM0YmUxNzJhMjZjMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWMwNTY5M2YxY2MwNDg0ZTkwYzFjNGJlMTcyYTI2YzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcmlnaXR0YXNwaXRhbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MGE1ODQxODY4MmE0MGY3OTQ2MmM2ZTk3ODBmNmUwYi5zZXRDb250ZW50KGh0bWxfYWMwNTY5M2YxY2MwNDg0ZTkwYzFjNGJlMTcyYTI2YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83N2E4NGQ2YmI2Y2Y0YzJmYjkxZGJlOGE0MmRlZDllMy5iaW5kUG9wdXAocG9wdXBfOTBhNTg0MTg2ODJhNDBmNzk0NjJjNmU5NzgwZjZlMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMTFhMzQ5MzIxOWU0ZmM3YjM1MTY0NTU3N2IzYzI4YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNjY2NjY2NjcsMTYuNDA4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YzQxZmU1N2I4MDA0NWEzOWI4MzBiNDdjYzZmYTU3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTFlN2EzODkwYTE0OTBhYTVhY2IyMTc2ZmI2NjQyZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODkxZTdhMzg5MGExNDkwYWE1YWNiMjE3NmZiNjY0MmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyw7xja2U6IEJyaWdpdHRlbmF1ZXIgQnLDvGNrZSAoMjAsIDIxKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzQxZmU1N2I4MDA0NWEzOWI4MzBiNDdjYzZmYTU3Ny5zZXRDb250ZW50KGh0bWxfODkxZTdhMzg5MGExNDkwYWE1YWNiMjE3NmZiNjY0MmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMTFhMzQ5MzIxOWU0ZmM3YjM1MTY0NTU3N2IzYzI4YS5iaW5kUG9wdXAocG9wdXBfNWM0MWZlNTdiODAwNDVhMzliODMwYjQ3Y2M2ZmE1NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZTQ4NThhYjkzOGI0ZWU2YTUxNzQ2YjMxYzY0ZmY0YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyNTU1NTU1NTYsMTYuMzU5MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDJmZmYyNmViY2U0N2U5OTM2ZDE2NDFkNTEzMDFlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZmM4M2ZlYzUzNGQ0OTVhOTQ4MTIxMjNjOTMxMGQzYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWZjODNmZWM1MzRkNDk1YTk0ODEyMTIzYzkzMTBkM2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyw7xja2U6IEJyaWdpdHRlbmF1ZXIgQnLDvGNrZSAoOSwgMjApPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwMmZmZjI2ZWJjZTQ3ZTk5MzZkMTY0MWQ1MTMwMWU3LnNldENvbnRlbnQoaHRtbF9lZmM4M2ZlYzUzNGQ0OTVhOTQ4MTIxMjNjOTMxMGQzYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlNDg1OGFiOTM4YjRlZTZhNTE3NDZiMzFjNjRmZjRjLmJpbmRQb3B1cChwb3B1cF8zMDJmZmYyNmViY2U0N2U5OTM2ZDE2NDFkNTEzMDFlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NiZGYyZDUwNTBlZjRjZjI4Nzg3NWUwNGUwYTFmMmU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQ2NjY2NjY2NywxNi40NDYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYTQ1Y2ZhZjUwYjRhYzM4YThiZmM0ZDhhZWM0ZjI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3MmRkODMxNGNiMTRlYWM5Mjg1YTIwZGI2OTViZTdjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNzJkZDgzMTRjYjE0ZWFjOTI4NWEyMGRiNjk1YmU3YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyb2RzY2hla2hvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81M2E0NWNmYWY1MGI0YWMzOGE4YmZjNGQ4YWVjNGYyOS5zZXRDb250ZW50KGh0bWxfZjcyZGQ4MzE0Y2IxNGVhYzkyODVhMjBkYjY5NWJlN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYmRmMmQ1MDUwZWY0Y2YyODc4NzVlMDRlMGExZjJlNy5iaW5kUG9wdXAocG9wdXBfNTNhNDVjZmFmNTBiNGFjMzhhOGJmYzRkOGFlYzRmMjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85Yjg5ZjI4NGZlZmQ0N2NjOTBjY2Q5ZGIwNDhmODc3YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzc1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTE1NzllMWUyYzk0NzExOWU3ODI3Y2Y0OTFhN2Y3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDIyMDk4NzBlZTI0NDgzYWMwYmQzNjkwOWFkZTc1YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDAyMjA5ODcwZWUyNDQ4M2FjMGJkMzY5MDlhZGU3NWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcm90YsOkY2tlcmhhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmExNTc5ZTFlMmM5NDcxMTllNzgyN2NmNDkxYTdmN2Muc2V0Q29udGVudChodG1sXzAwMjIwOTg3MGVlMjQ0ODNhYzBiZDM2OTA5YWRlNzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWI4OWYyODRmZWZkNDdjYzkwY2NkOWRiMDQ4Zjg3N2MuYmluZFBvcHVwKHBvcHVwXzZhMTU3OWUxZTJjOTQ3MTE5ZTc4MjdjZjQ5MWE3ZjdjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTlhNThkZWI4MDJiNDdiMjg5MDQwNzk2ZjZlNGU1MjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzExMTExMTExLDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE1MzE4YTA3OThmNDBjNWI0ZjE5MTQyODU4YTFjOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTRiZDU0NzRkYzRhNGFiN2IwYWM3ODdiOGVmYmQzNWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU0YmQ1NDc0ZGM0YTRhYjdiMGFjNzg3YjhlZmJkMzVjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJvdGZhYnJpayBBdXN0cmlhPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxNTMxOGEwNzk4ZjQwYzViNGYxOTE0Mjg1OGExYzk1LnNldENvbnRlbnQoaHRtbF81NGJkNTQ3NGRjNGE0YWI3YjBhYzc4N2I4ZWZiZDM1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5YTU4ZGViODAyYjQ3YjI4OTA0MDc5NmY2ZTRlNTI1LmJpbmRQb3B1cChwb3B1cF85MTUzMThhMDc5OGY0MGM1YjRmMTkxNDI4NThhMWM5NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2NjAyZDM2OGEzZjQ4MTM4MzQ4YjZiYmEzNjFkODQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNjg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjOTc2NmYzZjFmMzRmOWZhZjRiMDAwZGU3MjllMmVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiYmNlZWRhNWM4YzQ0Njc5NmM2NTQzYTNjY2M5Y2M5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYmJjZWVkYTVjOGM0NDY3OTZjNjU0M2EzY2NjOWNjOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyb3RoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjOTc2NmYzZjFmMzRmOWZhZjRiMDAwZGU3MjllMmVkLnNldENvbnRlbnQoaHRtbF8wYmJjZWVkYTVjOGM0NDY3OTZjNjU0M2EzY2NjOWNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2NjAyZDM2OGEzZjQ4MTM4MzQ4YjZiYmEzNjFkODQ3LmJpbmRQb3B1cChwb3B1cF9kYzk3NjZmM2YxZjM0ZjlmYWY0YjAwMGRlNzI5ZTJlZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRiOGE3YWQ2YmRhNjQ0YzBiNzdiY2ZiYmNjMzcxMDcyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNzc3Nzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjNjZjYzNiNjkyOTQ4YzU5MDljMDgwNTA4NWY3ZWM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1NGEzYmEyY2RiNTQwZjBiZDg4ZTZiMTI1YmJhZTQxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83NTRhM2JhMmNkYjU0MGYwYmQ4OGU2YjEyNWJiYWU0MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJydWNrYnVyc2U8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M2NmNjM2I2OTI5NDhjNTkwOWMwODA1MDg1ZjdlYzguc2V0Q29udGVudChodG1sXzc1NGEzYmEyY2RiNTQwZjBiZDg4ZTZiMTI1YmJhZTQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGI4YTdhZDZiZGE2NDRjMGI3N2JjZmJiY2MzNzEwNzIuYmluZFBvcHVwKHBvcHVwXzdjNjZjYzNiNjkyOTQ4YzU5MDljMDgwNTA4NWY3ZWM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGQ4MDU4YzkyNGFlNGM3MGFmNTZkMDFiMDY1N2YxNmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNDUyNzc3Nzc4LDE2LjQwMTM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzc2MDhlMmYwZjMwNGMxYWE1OTc2ZGI0M2U0OTIwZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmY2MzA1ZDVkZDk2NDA0Y2JlYWZlYTY1ZTQyZTUwOGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJmNjMwNWQ1ZGQ5NjQwNGNiZWFmZWE2NWU0MmU1MDhiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IEJydWNraGF1ZmVuIChQZmFycmtpcmNoZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc2MDhlMmYwZjMwNGMxYWE1OTc2ZGI0M2U0OTIwZjYuc2V0Q29udGVudChodG1sXzJmNjMwNWQ1ZGQ5NjQwNGNiZWFmZWE2NWU0MmU1MDhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGQ4MDU4YzkyNGFlNGM3MGFmNTZkMDFiMDY1N2YxNmUuYmluZFBvcHVwKHBvcHVwX2M3NjA4ZTJmMGYzMDRjMWFhNTk3NmRiNDNlNDkyMGY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTQ1NWU5NDdhYjcwNDU4MmI1NzQzMjZkZWRhY2JlMzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDUsMTYuMzc4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MmQ1MTQ2ZjI2OWQ0YTczOGFiNjYwZDZkMTEwNmRkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWMwNGY1Nzk2ZjU0NzRjOTQ1ZjZhZTZiYTZhZDdkNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTljMDRmNTc5NmY1NDc0Yzk0NWY2YWU2YmE2YWQ3ZDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJydWNrbmVyZGVua21hbCAoMSwgU3RhZHRwYXJrKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MmQ1MTQ2ZjI2OWQ0YTczOGFiNjYwZDZkMTEwNmRkMy5zZXRDb250ZW50KGh0bWxfMTljMDRmNTc5NmY1NDc0Yzk0NWY2YWU2YmE2YWQ3ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NDU1ZTk0N2FiNzA0NTgyYjU3NDMyNmRlZGFjYmUzMi5iaW5kUG9wdXAocG9wdXBfNzJkNTE0NmYyNjlkNGE3MzhhYjY2MGQ2ZDExMDZkZDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80Yzc3MjE0MWJlOGI0Zjg0YjEwYmI5OWYxMWNiZjQ1YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NjJlNWE0MTczNDE0ZjI1ODNjOTNiNGQ3MDE3MzFkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmMxMzZiNDQ5Nzc0NDg3YjA3MTA2MTI5Zjc1ZjE3NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmJjMTM2YjQ0OTc3NDQ4N2IwNzEwNjEyOWY3NWYxNzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJydWNrbmVyZGVua21hbCAoMSwgVW5pdmVyc2l0w6R0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NjJlNWE0MTczNDE0ZjI1ODNjOTNiNGQ3MDE3MzFkYy5zZXRDb250ZW50KGh0bWxfNmJjMTM2YjQ0OTc3NDQ4N2IwNzEwNjEyOWY3NWYxNzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80Yzc3MjE0MWJlOGI0Zjg0YjEwYmI5OWYxMWNiZjQ1YS5iaW5kUG9wdXAocG9wdXBfOTYyZTVhNDE3MzQxNGYyNTgzYzkzYjRkNzAxNzMxZGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MjQ5Yzk1MTg3OGY0MmY1ODg1NmYwNzM2ZDQ4ZGRhOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5Njk0NDQ0NDQsMTYuMzgxOTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzUzNTA0ZWVlNTE0MmNjYWE4YTYyNzdlYzE1N2VjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYTA2MTlhNjRlYjA0OTdmYmYwM2NmMWY2OTU5NDAwOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGEwNjE5YTY0ZWIwNDk3ZmJmMDNjZjFmNjk1OTQwMDgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJydWNrbmVyZGVua21hbCAoMywgTWV0dGVybmljaGdhc3NlIDgpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzNTM1MDRlZWU1MTQyY2NhYThhNjI3N2VjMTU3ZWMxLnNldENvbnRlbnQoaHRtbF8wYTA2MTlhNjRlYjA0OTdmYmYwM2NmMWY2OTU5NDAwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgyNDljOTUxODc4ZjQyZjU4ODU2ZjA3MzZkNDhkZGE5LmJpbmRQb3B1cChwb3B1cF9mMzUzNTA0ZWVlNTE0MmNjYWE4YTYyNzdlYzE1N2VjMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZlY2JjMzk0M2ZhMDQxNWQ4NjNlYTQ0MzNmMjJjYTVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2OTQ0NDQ0NCwxNi4zNDg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0M2I0ZmNmMTZlMjQwOGFhNDMwYjNkNGI4MTJmMjlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzY2E0ZDk5ZDMxNjQ1M2RiNTg2NmM5Y2YxOTdkNmE0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kM2NhNGQ5OWQzMTY0NTNkYjU4NjZjOWNmMTk3ZDZhNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJydW5hLVN1ZGV0aWEtSGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDNiNGZjZjE2ZTI0MDhhYTQzMGIzZDRiODEyZjI5YS5zZXRDb250ZW50KGh0bWxfZDNjYTRkOTlkMzE2NDUzZGI1ODY2YzljZjE5N2Q2YTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZWNiYzM5NDNmYTA0MTVkODYzZWE0NDMzZjIyY2E1ZS5iaW5kUG9wdXAocG9wdXBfMTQzYjRmY2YxNmUyNDA4YWE0MzBiM2Q0YjgxMmYyOWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wODgzMDBhMzIyNTc0ODk1OTY1ZWEwYTVhM2VlMTliNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODYxMTExMTEsMTYuMzc3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmM1YjA4ZjZkNzQ0NDcwYWRlM2UzYzBmM2E5NTU0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MmUwODEwNTg0MmY0NzZlYWJiZmExM2MwMzI4MzU3OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTJlMDgxMDU4NDJmNDc2ZWFiYmZhMTNjMDMyODM1NzkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQnJ1bm5lbiAoMSwgRHIuLUlnbmF6LVNlaXBlbC1QbGF0eik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJjNWIwOGY2ZDc0NDQ3MGFkZTNlM2MwZjNhOTU1NDYuc2V0Q29udGVudChodG1sXzkyZTA4MTA1ODQyZjQ3NmVhYmJmYTEzYzAzMjgzNTc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDg4MzAwYTMyMjU3NDg5NTk2NWVhMGE1YTNlZTE5YjUuYmluZFBvcHVwKHBvcHVwXzZiYzViMDhmNmQ3NDQ0NzBhZGUzZTNjMGYzYTk1NTQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDQ2MGZkNmQyZmYxNGQzNWFiMzc4Njg0ODliMjFiZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDg2MTExMTExLDE2LjM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNDNhMmI0ZWFhMTRlNjhhYjliMjY1ZmU1NDFhNGJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3MjUyZjQyMzYyNjQ2MmM5OWZmYzU3YTQ2M2FlYjY5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jNzI1MmY0MjM2MjY0NjJjOTlmZmM1N2E0NjNhZWI2OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCcnVubmVuICgxLCBHcmFiZW4pPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNDNhMmI0ZWFhMTRlNjhhYjliMjY1ZmU1NDFhNGJiLnNldENvbnRlbnQoaHRtbF9jNzI1MmY0MjM2MjY0NjJjOTlmZmM1N2E0NjNhZWI2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0NjBmZDZkMmZmMTRkMzVhYjM3ODY4NDg5YjIxYmYzLmJpbmRQb3B1cChwb3B1cF84YjQzYTJiNGVhYTE0ZTY4YWI5YjI2NWZlNTQxYTRiYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc0NjY1Mzk2ODcwMTQ2MWM4NmVlZmZjYWM5Mjk1NWZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEwNTU1NTU1NiwxNi4zNzIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlMGU5ZTY1NzA3OTRhODRiOWRjZGYxZTM3NThkMDgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwNjYyMDVlMzE1NjQ1NjI5NTE2ZDI1MmU5NzBlYTUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMDY2MjA1ZTMxNTY0NTYyOTUxNmQyNTJlOTcwZWE1MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCcnVubmVuICgxLCBIb2hlciBNYXJrdCA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZTBlOWU2NTcwNzk0YTg0YjlkY2RmMWUzNzU4ZDA4MS5zZXRDb250ZW50KGh0bWxfMTA2NjIwNWUzMTU2NDU2Mjk1MTZkMjUyZTk3MGVhNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NDY2NTM5Njg3MDE0NjFjODZlZWZmY2FjOTI5NTVmYy5iaW5kUG9wdXAocG9wdXBfN2UwZTllNjU3MDc5NGE4NGI5ZGNkZjFlMzc1OGQwODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NTQ5NzhmMjM1NzI0MmRmYmMzYmRhYjQzYWQzNjA4MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNDE2NjY2NjcsMTYuMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzYxNTllMDM5OGY4NGIyNTgwYWJjNDdkMTIwNGVlZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmU0MGQyOGYzYWM1NGNlOTk4ODFlNDJmYjFjZTU0MzggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJlNDBkMjhmM2FjNTRjZTk5ODgxZTQyZmIxY2U1NDM4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEJydW5uZW4gKDEsIEvDpHJudG5lciBTdHJhw59lKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjE1OWUwMzk4Zjg0YjI1ODBhYmM0N2QxMjA0ZWVkMi5zZXRDb250ZW50KGh0bWxfMmU0MGQyOGYzYWM1NGNlOTk4ODFlNDJmYjFjZTU0MzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NTQ5NzhmMjM1NzI0MmRmYmMzYmRhYjQzYWQzNjA4My5iaW5kUG9wdXAocG9wdXBfMzYxNTllMDM5OGY4NGIyNTgwYWJjNDdkMTIwNGVlZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YzY4YmM3Yjk5NmM0YmNkOTczNjIwNDBjMmQzMmQ4YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzY2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NjZkYzQ4N2M0YzY0OTRiYjRiMmFmZmY2YmI2ZTU3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNThiZDVhYWJhODE0NWQ5OGI5YWY5NmRkNWI0YmY2MCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjU4YmQ1YWFiYTgxNDVkOThiOWFmOTZkZDViNGJmNjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQnJ1bm5lbiAoMSwgTWljaGFlbGVycGxhdHopPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2NmRjNDg3YzRjNjQ5NGJiNGIyYWZmZjZiYjZlNTc5LnNldENvbnRlbnQoaHRtbF9mNThiZDVhYWJhODE0NWQ5OGI5YWY5NmRkNWI0YmY2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjNjhiYzdiOTk2YzRiY2Q5NzM2MjA0MGMyZDMyZDhjLmJpbmRQb3B1cChwb3B1cF85NjZkYzQ4N2M0YzY0OTRiYjRiMmFmZmY2YmI2ZTU3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiZDNhYmQ5NWJkNTQ4Yjk4ZmQ5ZGE3MjNkYmUwOTExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAyNzc3Nzc3OCwxNi4zNzc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3NzgzMTFiNzBkZTRlZjliMGVlMzBmZGI5Y2ViMWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhZWE2YzRjMDBmMTQwMGVhMTc1MzU1YjBlNjE0MTFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80YWVhNmM0YzAwZjE0MDBlYTE3NTM1NWIwZTYxNDExYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCcnVubmVuICgxLCBTdGFkdHBhcmspPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3NzgzMTFiNzBkZTRlZjliMGVlMzBmZGI5Y2ViMWMzLnNldENvbnRlbnQoaHRtbF80YWVhNmM0YzAwZjE0MDBlYTE3NTM1NWIwZTYxNDExYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFiZDNhYmQ5NWJkNTQ4Yjk4ZmQ5ZGE3MjNkYmUwOTExLmJpbmRQb3B1cChwb3B1cF80Nzc4MzExYjcwZGU0ZWY5YjBlZTMwZmRiOWNlYjFjMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhmNjJkN2RmODUyOTRiMWVhN2ZmMmVjOTFmYzhjOTI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkxMzg4ODg4OSwxNi4zNzk3MjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2YmUxNTI5NDBiZjQzNDlhYzlkNjIyNWNmMjM2ODkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4ZDBiZmFmZjk5MzQ2ZjE4YTQ0YTQ1ZGYxMTNjM2I2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82OGQwYmZhZmY5OTM0NmYxOGE0NGE0NWRmMTEzYzNiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCcnVubmVuICgzLCBCZWx2ZWRlcmUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2YmUxNTI5NDBiZjQzNDlhYzlkNjIyNWNmMjM2ODkxLnNldENvbnRlbnQoaHRtbF82OGQwYmZhZmY5OTM0NmYxOGE0NGE0NWRmMTEzYzNiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhmNjJkN2RmODUyOTRiMWVhN2ZmMmVjOTFmYzhjOTI3LmJpbmRQb3B1cChwb3B1cF9iNmJlMTUyOTQwYmY0MzQ5YWM5ZDYyMjVjZjIzNjg5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMwOWRmOTEyM2FmZDQ5MmRhZDgyYmJkMzRmOTg0OWZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE0NDQ0NDQ0NCwxNi4zNTQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiY2I5NmZhNDllNDQ3NGU4MTRiZWZhNjBiNGExMDUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllOTQzMDFiNWY5NjRkNzQ4NjIwNDcyN2Q2MmE0OGQyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85ZTk0MzAxYjVmOTY0ZDc0ODYyMDQ3MjdkNjJhNDhkMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCcnVubmVuICg5LCBBS0gpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiY2I5NmZhNDllNDQ3NGU4MTRiZWZhNjBiNGExMDUyLnNldENvbnRlbnQoaHRtbF85ZTk0MzAxYjVmOTY0ZDc0ODYyMDQ3MjdkNjJhNDhkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMwOWRmOTEyM2FmZDQ5MmRhZDgyYmJkMzRmOTg0OWZlLmJpbmRQb3B1cChwb3B1cF80YmNiOTZmYTQ5ZTQ0NzRlODE0YmVmYTYwYjRhMTA1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ExM2VjZTFlMzZkMzQzOWJhNjg4MGNlM2U2YmM4YmE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIxMzg4ODg4OSwxNi4zNTk3MjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5YzY0MWU0NWQ1YzQ4OTQ4ZTY2NGFmOGQ3M2Q3ZDBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4YzE1ZWY0OGFiMTQxNWU5YTJmMGRlN2NmZTc3ZGMxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jOGMxNWVmNDhhYjE0MTVlOWEyZjBkZTdjZmU3N2RjMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCcnVubmVuICg5LCBGw7xyc3Rlbmdhc3NlIDIpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5YzY0MWU0NWQ1YzQ4OTQ4ZTY2NGFmOGQ3M2Q3ZDBmLnNldENvbnRlbnQoaHRtbF9jOGMxNWVmNDhhYjE0MTVlOWEyZjBkZTdjZmU3N2RjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ExM2VjZTFlMzZkMzQzOWJhNjg4MGNlM2U2YmM4YmE5LmJpbmRQb3B1cChwb3B1cF9iOWM2NDFlNDVkNWM0ODk0OGU2NjRhZjhkNzNkN2QwZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk1ODdiYTA5OTgyMzQ1NmI4Mzk1YmEwZTU5YjZiNjgyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkYzU1MmRjNWNkOTQ5ZTE4MzFiMzI2MDZiM2FkOGE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0M2YwMWZmMTY2NzQ3Mzk4YjMxYTE1ODQ3MDIzZWMwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NDNmMDFmZjE2Njc0NzM5OGIzMWExNTg0NzAyM2VjMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJydW5uZW5ow6R1c2VybDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGM1NTJkYzVjZDk0OWUxODMxYjMyNjA2YjNhZDhhOS5zZXRDb250ZW50KGh0bWxfOTQzZjAxZmYxNjY3NDczOThiMzFhMTU4NDcwMjNlYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTg3YmEwOTk4MjM0NTZiODM5NWJhMGU1OWI2YjY4Mi5iaW5kUG9wdXAocG9wdXBfNmRjNTUyZGM1Y2Q5NDllMTgzMWIzMjYwNmIzYWQ4YTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MTg5YmZlYTlkOGM0OGE3OGVjMWExNGEwMjAyZmRhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE3MzYxMTExMTEsMTYuMzcwMjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wY2ZiOTBiZWNiNjc0YzVmYTcxNjliYzBlNTViY2MxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZWY0NWRhYTNiYWE0YjViOTMzMTg0OTFiOWQwMmQ1ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWVmNDVkYWEzYmFhNGI1YjkzMzE4NDkxYjlkMDJkNWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcnVubmdyYWJlci1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNmYjkwYmVjYjY3NGM1ZmE3MTY5YmMwZTU1YmNjMWIuc2V0Q29udGVudChodG1sXzllZjQ1ZGFhM2JhYTRiNWI5MzMxODQ5MWI5ZDAyZDVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODE4OWJmZWE5ZDhjNDhhNzhlYzFhMTRhMDIwMmZkYWUuYmluZFBvcHVwKHBvcHVwXzBjZmI5MGJlY2I2NzRjNWZhNzE2OWJjMGU1NWJjYzFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmQ0ZGNlNzY4NTVjNDc4ODk3NmFlNGU2Y2VlNWEyNmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjYzODg4ODg5LDE2LjMwODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE4ZmZhMmRmNWNiNDdkNDhhZjQ3ODMwODM3ODQzMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQyOTU0ZWU4ZTVkNGU1YTk0YWE3NDJjYTI2ZGJhZDggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2U0Mjk1NGVlOGU1ZDRlNWE5NGFhNzQyY2EyNmRiYWQ4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJ1bm8tS3JlaXNreS1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE4ZmZhMmRmNWNiNDdkNDhhZjQ3ODMwODM3ODQzMjIuc2V0Q29udGVudChodG1sX2U0Mjk1NGVlOGU1ZDRlNWE5NGFhNzQyY2EyNmRiYWQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmQ0ZGNlNzY4NTVjNDc4ODk3NmFlNGU2Y2VlNWEyNmUuYmluZFBvcHVwKHBvcHVwXzUxOGZmYTJkZjVjYjQ3ZDQ4YWY0NzgzMDgzNzg0MzIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjdlYjhiZTBmNTk0NDc4NmE1YWFkMWRmYWIyNGM1OTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNTQ0NDQ0NDQ0LDE2LjQ2MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzM2ODNlOWNjOGUyNDdkYTkxYTA2ZTA0MTNhYjkyYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDllZjkxY2MyMGUyNGQyMGIwMjJmYmQ2MmVhOTAwN2EgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ5ZWY5MWNjMjBlMjRkMjBiMDIyZmJkNjJlYTkwMDdhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJ1bm8tS3JlaXNreS1TY2h1bGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzM2ODNlOWNjOGUyNDdkYTkxYTA2ZTA0MTNhYjkyYTcuc2V0Q29udGVudChodG1sXzQ5ZWY5MWNjMjBlMjRkMjBiMDIyZmJkNjJlYTkwMDdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjdlYjhiZTBmNTk0NDc4NmE1YWFkMWRmYWIyNGM1OTguYmluZFBvcHVwKHBvcHVwX2MzNjgzZTljYzhlMjQ3ZGE5MWEwNmUwNDEzYWI5MmE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWE1ZTk1YmQxOTZmNGNhYTgzOGQ2YjVmZGU2ZTRlZmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTg2MTExMTExLDE2LjM1NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODUxZjNiMWU2OTVjNDMxMWFiOWFiZDhmMzFkNzlkZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFmMDM5ZWIzNTllNGI5ZWE4MzgyNmNlMzY0ZDhkMjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UxZjAzOWViMzU5ZTRiOWVhODM4MjZjZTM2NGQ4ZDI0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnJ1bm8tTWFyZWstSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1MWYzYjFlNjk1YzQzMTFhYjlhYmQ4ZjMxZDc5ZGQyLnNldENvbnRlbnQoaHRtbF9lMWYwMzllYjM1OWU0YjllYTgzODI2Y2UzNjRkOGQyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VhNWU5NWJkMTk2ZjRjYWE4MzhkNmI1ZmRlNmU0ZWZhLmJpbmRQb3B1cChwb3B1cF84NTFmM2IxZTY5NWM0MzExYWI5YWJkOGYzMWQ3OWRkMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q2ZDJmMzFjM2UxMTQ2YTY4NjQ1YWJjODMwNmE3ZGU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMzg4ODg4OSwxNi4zNzQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyYTNlNzFjZjMxZTRhNGJiM2M5ZmMzNmYyYzhlYjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5NTZlOGY4Yjk0YjQ4YzViNmE5Njc1MjMwMDNhYzc2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84OTU2ZThmOGI5NGI0OGM1YjZhOTY3NTIzMDAzYWM3NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCcnVub2thcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTJhM2U3MWNmMzFlNGE0YmIzYzlmYzM2ZjJjOGViMGIuc2V0Q29udGVudChodG1sXzg5NTZlOGY4Yjk0YjQ4YzViNmE5Njc1MjMwMDNhYzc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDZkMmYzMWMzZTExNDZhNjg2NDVhYmM4MzA2YTdkZTguYmluZFBvcHVwKHBvcHVwXzEyYTNlNzFjZjMxZTRhNGJiM2M5ZmMzNmYyYzhlYjBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWM3YjUyZmVjN2I0NDRmNWJhN2Q1MGU4ZmIxZmQyNDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjEzODg4ODg5LDE2LjM1NDE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTY2ZTU2Y2M4MDdjNDI4MmExZGJkYWRhZjVmM2ZmNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRkMzZjYWRjODgwNGNhOWE5OWQ4OTdkYjMwMzIzYmIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E0ZDM2Y2FkYzg4MDRjYTlhOTlkODk3ZGIzMDMyM2JiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCcsOkbmRzdHLDtm1kZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2NmU1NmNjODA3YzQyODJhMWRiZGFkYWY1ZjNmZjYzLnNldENvbnRlbnQoaHRtbF9hNGQzNmNhZGM4ODA0Y2E5YTk5ZDg5N2RiMzAzMjNiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVjN2I1MmZlYzdiNDQ0ZjViYTdkNTBlOGZiMWZkMjQwLmJpbmRQb3B1cChwb3B1cF9hNjZlNTZjYzgwN2M0MjgyYTFkYmRhZGFmNWYzZmY2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU3YTZjZDIxYTk1NzQzMWY4MWJlMzQ5MDMxYTUwOGFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2OTQ0NDQ0NCwxNi4zNjgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllNDg0MGZjZDkzNzRhZmNhODYzYjI0YWNiMTJmMDg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q3ZTIyOGYyMGYxNTQ5ZmM4N2NlMTNlOGRmZjljMDQxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kN2UyMjhmMjBmMTU0OWZjODdjZTEzZThkZmY5YzA0MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyw6R1bmVyaG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllNDg0MGZjZDkzNzRhZmNhODYzYjI0YWNiMTJmMDg0LnNldENvbnRlbnQoaHRtbF9kN2UyMjhmMjBmMTU0OWZjODdjZTEzZThkZmY5YzA0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU3YTZjZDIxYTk1NzQzMWY4MWJlMzQ5MDMxYTUwOGFkLmJpbmRQb3B1cChwb3B1cF85ZTQ4NDBmY2Q5Mzc0YWZjYTg2M2IyNGFjYjEyZjA4NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU5MGJkNGY4YTA2YjQwZmQ5NmI0ZjM4MjFiMGZiZmE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zNjgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3ODQ1MjdlMjljOTQ2Mzk4MmZjMWY3NTM2ODlkMTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmNGUzMzQyNzFhNDRlM2RhZTgwNWY2MTIzMGYxMjUyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iZjRlMzM0MjcxYTQ0ZTNkYWU4MDVmNjEyMzBmMTI1MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJyw6R1bmVyc3RyYcOfZSAxMDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNzg0NTI3ZTI5Yzk0NjM5ODJmYzFmNzUzNjg5ZDEwMi5zZXRDb250ZW50KGh0bWxfYmY0ZTMzNDI3MWE0NGUzZGFlODA1ZjYxMjMwZjEyNTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OTBiZDRmOGEwNmI0MGZkOTZiNGYzODIxYjBmYmZhNC5iaW5kUG9wdXAocG9wdXBfYzc4NDUyN2UyOWM5NDYzOTgyZmMxZjc1MzY4OWQxMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNTM2MjMxNTBkN2E0ZDdlOGJjMGM4NjdiZjhjNzYzNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2UwNGUzMzg2YTI0NjRiYmQ4OGE4YzUwNmYxMDJiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzQ4ZmVkZWQ5NGI0YTQ2YjcyODM1MDU4YjdjNjUwNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzM0OGZlZGVkOTRiNGE0NmI3MjgzNTA1OGI3YzY1MDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcsOkdW5lcnN0cmHDn2UgMTI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdlMDRlMzM4NmEyNDY0YmJkODhhOGM1MDZmMTAyYjguc2V0Q29udGVudChodG1sX2MzNDhmZWRlZDk0YjRhNDZiNzI4MzUwNThiN2M2NTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDUzNjIzMTUwZDdhNGQ3ZThiYzBjODY3YmY4Yzc2MzUuYmluZFBvcHVwKHBvcHVwX2I3ZTA0ZTMzODZhMjQ2NGJiZDg4YThjNTA2ZjEwMmI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2VmYWI0Njg5ZTIxNDcyNzk4NWU2MGFjMzRjY2UxMTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmRlY2Q0MGY5NzVkNGQyZDk5Yzg1ZTE4ZDUyYmY1OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdjNGEyZjNhMTI4NDA4MGFmNmEwMGY2MjQ1NWU2ZWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE3YzRhMmYzYTEyODQwODBhZjZhMDBmNjI0NTVlNmVlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDpHVuZXJzdHJhw59lIDM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRlY2Q0MGY5NzVkNGQyZDk5Yzg1ZTE4ZDUyYmY1OGMuc2V0Q29udGVudChodG1sXzE3YzRhMmYzYTEyODQwODBhZjZhMDBmNjI0NTVlNmVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2VmYWI0Njg5ZTIxNDcyNzk4NWU2MGFjMzRjY2UxMTIuYmluZFBvcHVwKHBvcHVwXzJkZWNkNDBmOTc1ZDRkMmQ5OWM4NWUxOGQ1MmJmNThjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzdiNjAwMDY3MmU1NDlkMzlmNjJlYjEyYWZmZWQ5MTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzAyY2I1MDBkMWJlNDE1Mjg0ZTNhMDE5NDMwODdmZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWM2NTY0NTFkNDA4NGY2YmE4NGU2NzlkMDE1NTcwOTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VjNjU2NDUxZDQwODRmNmJhODRlNjc5ZDAxNTU3MDk3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDpHVuZXJzdHJhw59lIDQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzAyY2I1MDBkMWJlNDE1Mjg0ZTNhMDE5NDMwODdmZTQuc2V0Q29udGVudChodG1sX2VjNjU2NDUxZDQwODRmNmJhODRlNjc5ZDAxNTU3MDk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzdiNjAwMDY3MmU1NDlkMzlmNjJlYjEyYWZmZWQ5MTcuYmluZFBvcHVwKHBvcHVwXzcwMmNiNTAwZDFiZTQxNTI4NGUzYTAxOTQzMDg3ZmU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2MyMDViNjI1YmNmNDFmZDg2ZjRlZGMzZTFhZWQ4MjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2E1ZTNjNzQyNzJmNDNmYTk4NzgxNjFlN2MzN2ZkMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjgwZmZmOTFmZDBiNGQ4ZGJiZjIzOGIxNjQ5NDg0ZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY4MGZmZjkxZmQwYjRkOGRiYmYyMzhiMTY0OTQ4NGY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDpHVuZXJzdHJhw59lIDY8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2E1ZTNjNzQyNzJmNDNmYTk4NzgxNjFlN2MzN2ZkMzYuc2V0Q29udGVudChodG1sXzY4MGZmZjkxZmQwYjRkOGRiYmYyMzhiMTY0OTQ4NGY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2MyMDViNjI1YmNmNDFmZDg2ZjRlZGMzZTFhZWQ4MjguYmluZFBvcHVwKHBvcHVwX2NhNWUzYzc0MjcyZjQzZmE5ODc4MTYxZTdjMzdmZDM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDdlOWJiMTM3NzVkNGM0ZjliYWJkZmZlMGE2ZGRiZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjM2ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjJiMTcxYjEwNjUxNGExOGIyNzI5N2E3YjQ3N2RhMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmJiNmRmOTMwMzI4NGJlNWI0ZGVmNTVlODg3ZjI3MjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZiYjZkZjkzMDMyODRiZTViNGRlZjU1ZTg4N2YyNzIyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDpHVuZXJzdHJhw59lIDc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjJiMTcxYjEwNjUxNGExOGIyNzI5N2E3YjQ3N2RhMTEuc2V0Q29udGVudChodG1sX2ZiYjZkZjkzMDMyODRiZTViNGRlZjU1ZTg4N2YyNzIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDdlOWJiMTM3NzVkNGM0ZjliYWJkZmZlMGE2ZGRiZjguYmluZFBvcHVwKHBvcHVwX2YyYjE3MWIxMDY1MTRhMThiMjcyOTdhN2I0NzdkYTExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmE5ZmU2ZjcyZmQ1NGY4NWE2YmU4ODBiNTA0OWE0NjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM2ODA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTI2Y2M5OTljYWZiNDk3ZTg4M2JkMTMxMmI2MmVlYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjlkNDQxYjJkM2U2NDI3YWFlYWU1YTVjNDVhOTA2NjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY5ZDQ0MWIyZDNlNjQyN2FhZWFlNWE1YzQ1YTkwNjY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDpHVuZXJzdHJhw59lIDg8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTI2Y2M5OTljYWZiNDk3ZTg4M2JkMTMxMmI2MmVlYjAuc2V0Q29udGVudChodG1sXzY5ZDQ0MWIyZDNlNjQyN2FhZWFlNWE1YzQ1YTkwNjY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmE5ZmU2ZjcyZmQ1NGY4NWE2YmU4ODBiNTA0OWE0NjEuYmluZFBvcHVwKHBvcHVwX2UyNmNjOTk5Y2FmYjQ5N2U4ODNiZDEzMTJiNjJlZWIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDllYzUwMWI1MGUzNGZjMjkxZmMxMjZhZmM2OWM0YzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjE5NDQ0NDQ0LDE2LjM5ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGUxMTEzNTNhNmYyNGM4ZWJjYzNjMWM2YzAzMzIxNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGVhMGZmNDg2OWU1NDdkMTljNWI3Yjg1ZThlODJmMWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RlYTBmZjQ4NjllNTQ3ZDE5YzViN2I4NWU4ZTgyZjFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBCcsO8Y2tlOiBCcsO8Y2tlIGRlciBSb3RlbiBBcm1lZSAoMiwgMjIpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlMTExMzUzYTZmMjRjOGViY2MzYzFjNmMwMzMyMTYzLnNldENvbnRlbnQoaHRtbF9kZWEwZmY0ODY5ZTU0N2QxOWM1YjdiODVlOGU4MmYxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ5ZWM1MDFiNTBlMzRmYzI5MWZjMTI2YWZjNjljNGMzLmJpbmRQb3B1cChwb3B1cF80ZTExMTM1M2E2ZjI0YzhlYmNjM2MxYzZjMDMzMjE2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY1M2JlMzFmMzFkYjQzN2I5ZTJjZTFkN2Y4MDIyMjJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5OGQxYjA4OGFjZTQ5NjdhZTNkZGJmMDU2ZjFjNjJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmY2UxNTRiYTk5YjQ5MzM4MTllZTFlYjc0ZTY1ZGUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZmNlMTU0YmE5OWI0OTMzODE5ZWUxZWI3NGU2NWRlMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQnLDvGNrZWRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTk4ZDFiMDg4YWNlNDk2N2FlM2RkYmYwNTZmMWM2MmYuc2V0Q29udGVudChodG1sXzZmY2UxNTRiYTk5YjQ5MzM4MTllZTFlYjc0ZTY1ZGUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjUzYmUzMWYzMWRiNDM3YjllMmNlMWQ3ZjgwMjIyMmMuYmluZFBvcHVwKHBvcHVwXzU5OGQxYjA4OGFjZTQ5NjdhZTNkZGJmMDU2ZjFjNjJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGM5NTYxODFhZjc4NGY1ZmJiMDc5NDM2MDRiN2VhYjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjM4NDQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmY2Y2U0YzI3MWE5NDhmYWE2ZWYyZmIxMTllMTU1YjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTE1NjEzZjc5ZTg4NDUzNGE0ODcxZTVkNmM1N2E0NWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ExNTYxM2Y3OWU4ODQ1MzRhNDg3MWU1ZDZjNTdhNDViIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDvGNrZW4tIHVuZCBXYXNzZXJiYXVhbXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmY2Y2U0YzI3MWE5NDhmYWE2ZWYyZmIxMTllMTU1YjEuc2V0Q29udGVudChodG1sX2ExNTYxM2Y3OWU4ODQ1MzRhNDg3MWU1ZDZjNTdhNDViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGM5NTYxODFhZjc4NGY1ZmJiMDc5NDM2MDRiN2VhYjQuYmluZFBvcHVwKHBvcHVwX2JmNmNlNGMyNzFhOTQ4ZmFhNmVmMmZiMTE5ZTE1NWIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmFhZjZiMTcwMTk1NGFmOThkMzFjM2JmNWJlMGUzOWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMzI1LDE2LjMyOTQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE2MmM1ODEwMTNjNGE5YjlhMTY4MWU3ZmRiZmFhMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTJhNzRkYzNlMWEzNDFhNDkwMzRkM2JmNmUyMmMyNGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzEyYTc0ZGMzZTFhMzQxYTQ5MDM0ZDNiZjZlMjJjMjRiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnLDvG5ubC1Ib2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODE2MmM1ODEwMTNjNGE5YjlhMTY4MWU3ZmRiZmFhMmQuc2V0Q29udGVudChodG1sXzEyYTc0ZGMzZTFhMzQxYTQ5MDM0ZDNiZjZlMjJjMjRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmFhZjZiMTcwMTk1NGFmOThkMzFjM2JmNWJlMGUzOWYuYmluZFBvcHVwKHBvcHVwXzgxNjJjNTgxMDEzYzRhOWI5YTE2ODFlN2ZkYmZhYTJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzIxMWJmMzRlOGYyNGVmYmJmNzlhNTFkODdkNGIyMTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTgwNTU1NTU2LDE2LjM0NjM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM1N2Q2YWIzNmM4NDllNWExMGIzZTlhYTFkYzAzODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU3OGNlMmMyM2ZjNGU0YTgwODEwZDJjNDliNDUzNWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q1NzhjZTJjMjNmYzRlNGE4MDgxMGQyYzQ5YjQ1MzViIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEJyw7xubmxiYWQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmM1N2Q2YWIzNmM4NDllNWExMGIzZTlhYTFkYzAzODMuc2V0Q29udGVudChodG1sX2Q1NzhjZTJjMjNmYzRlNGE4MDgxMGQyYzQ5YjQ1MzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzIxMWJmMzRlOGYyNGVmYmJmNzlhNTFkODdkNGIyMTAuYmluZFBvcHVwKHBvcHVwXzZjNTdkNmFiMzZjODQ5ZTVhMTBiM2U5YWExZGMwMzgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWVlZTJlMTk2M2M0NGFhNTk4M2Y1NzU3YzhmOTNjNTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTcyMjIyMjIyLDE2LjM0NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2UzMWNhMDMzMzBjNDUxMTgxMmE3YjY5MDIzNTgzMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2YwMWVmZWIxMTg0NGE1MjlmMzg0NGM3Yzk4ZTU3N2IgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmMDFlZmViMTE4NDRhNTI5ZjM4NDRjN2M5OGU1NzdiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBCcsO8Y2tlOiBCcsO8bm5sYnLDvGNrZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZTMxY2EwMzMzMGM0NTExODEyYTdiNjkwMjM1ODMxYy5zZXRDb250ZW50KGh0bWxfY2YwMWVmZWIxMTg0NGE1MjlmMzg0NGM3Yzk4ZTU3N2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZWVlMmUxOTYzYzQ0YWE1OTgzZjU3NTdjOGY5M2M1MS5iaW5kUG9wdXAocG9wdXBfY2UzMWNhMDMzMzBjNDUxMTgxMmE3YjY5MDIzNTgzMWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85YTQ2ZGE4ODZjZTE0MDUwYTk0YmVhNTBkOWY1Yjc3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNjk0NDQ0NDQsMTYuMzQ1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjQ1MTIzNzUwNTY0NGYxOGJiY2ZiMzJjM2FhZDU1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MGEyYTFkNWIxZjE0YjM4OGVmMTMyZDQwZjI2YzJiZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTBhMmExZDViMWYxNGIzODhlZjEzMmQ0MGYyNmMyYmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCcsO8bm5sbcO8aGxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmNDUxMjM3NTA1NjQ0ZjE4YmJjZmIzMmMzYWFkNTViLnNldENvbnRlbnQoaHRtbF85MGEyYTFkNWIxZjE0YjM4OGVmMTMyZDQwZjI2YzJiZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlhNDZkYTg4NmNlMTQwNTBhOTRiZWE1MGQ5ZjViNzc0LmJpbmRQb3B1cChwb3B1cF8zZjQ1MTIzNzUwNTY0NGYxOGJiY2ZiMzJjM2FhZDU1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y2NDEyYmRhMjYwYjQ4N2Y4MTgwNmM3YWE1YWU2ODk2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3Nzc3Nzc3OCwxNi4zOTQ0NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2ZmRhNDYyMjY0NDRmMGViZDVlOTYzOGUzZDUzOWMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyZjcwYjA0YTNiNjRlYjk5OTk0MzVkOWM0YTMwMjA4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lMmY3MGIwNGEzYjY0ZWI5OTk5NDM1ZDljNGEzMDIwOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1YmktSG9mPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZmRhNDYyMjY0NDRmMGViZDVlOTYzOGUzZDUzOWMxLnNldENvbnRlbnQoaHRtbF9lMmY3MGIwNGEzYjY0ZWI5OTk5NDM1ZDljNGEzMDIwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y2NDEyYmRhMjYwYjQ4N2Y4MTgwNmM3YWE1YWU2ODk2LmJpbmRQb3B1cChwb3B1cF82NmZkYTQ2MjI2NDQ0ZjBlYmQ1ZTk2MzhlM2Q1MzljMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzMTIxNjAxMTRjMTQxODlhMDJhNzY0YjJkNGJhNzM0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTYyNSwxNi4zMzgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyYWZjZjk0NTNhZTQ5OTc5YzhiMGRhY2VmYjc3MzIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmZDU0ZTYwZjJiNjQ5N2U4MGMwMmE1MGYwZDNhMmZhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZmQ1NGU2MGYyYjY0OTdlODBjMDJhNTBmMGQzYTJmYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1ZG9rYW4tRXVyb3BhY2VudGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyYWZjZjk0NTNhZTQ5OTc5YzhiMGRhY2VmYjc3MzIwLnNldENvbnRlbnQoaHRtbF82ZmQ1NGU2MGYyYjY0OTdlODBjMDJhNTBmMGQzYTJmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QzMTIxNjAxMTRjMTQxODlhMDJhNzY0YjJkNGJhNzM0LmJpbmRQb3B1cChwb3B1cF9iMmFmY2Y5NDUzYWU0OTk3OWM4YjBkYWNlZmI3NzMyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRmMTA0Zjg3YmM3NzQzZjhiMmQ3ODM4MzM2ZTJkMjQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4NjExMTExMSwxNi4zNjQxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwMmJjMzliOTE0MDQ1Y2Q4ZWJhNGNjMDg1YTYxMmYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhYzk0MjM4OWY4NTRkYjdhYmQwZDVhZmExYzQxMWRjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81YWM5NDIzODlmODU0ZGI3YWJkMGQ1YWZhMWM0MTFkYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bGdhcmlzY2hlIEJvdHNjaGFmdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDJiYzM5YjkxNDA0NWNkOGViYTRjYzA4NWE2MTJmMC5zZXRDb250ZW50KGh0bWxfNWFjOTQyMzg5Zjg1NGRiN2FiZDBkNWFmYTFjNDExZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZjEwNGY4N2JjNzc0M2Y4YjJkNzgzODMzNmUyZDI0NS5iaW5kUG9wdXAocG9wdXBfMzAyYmMzOWI5MTQwNDVjZDhlYmE0Y2MwODVhNjEyZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNjM0ZmViZThhMjg0YzM2YjZmZGU1MWViNDE4MGVlOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxLDE2LjM1NDcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk1NmEyMDJkNjkwNGI3NzgzNzdiNDdkOTk1NTgyYmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDY0MzhhOTYyNTFlNGU4Y2FhMGU3YjI2OTkwMGRmMzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA2NDM4YTk2MjUxZTRlOGNhYTBlN2IyNjk5MDBkZjM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnVuZGVzYW10IGbDvHIgRWljaC0gdW5kIFZlcm1lc3N1bmdzd2VzZW48L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzk1NmEyMDJkNjkwNGI3NzgzNzdiNDdkOTk1NTgyYmIuc2V0Q29udGVudChodG1sXzA2NDM4YTk2MjUxZTRlOGNhYTBlN2IyNjk5MDBkZjM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjYzNGZlYmU4YTI4NGMzNmI2ZmRlNTFlYjQxODBlZTguYmluZFBvcHVwKHBvcHVwXzc5NTZhMjAyZDY5MDRiNzc4Mzc3YjQ3ZDk5NTU4MmJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmNkNDcxOWI1ZDgyNGY4Njk5MzNjY2RlMGM0ZTIyNjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTA4MzMzMzMzLDE2LjM4NjExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGNmODFjM2EzZjhhNGRmYjg4MGE0OGVmMDI2YzBhMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmEyN2YwN2ViMWIyNDExYzgxNTg1NDY1Yjc1ZjBlNmMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JhMjdmMDdlYjFiMjQxMWM4MTU4NTQ2NWI3NWYwZTZjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnVuZGVzYW10c2dlYsOkdWRlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZjgxYzNhM2Y4YTRkZmI4ODBhNDhlZjAyNmMwYTEwLnNldENvbnRlbnQoaHRtbF9iYTI3ZjA3ZWIxYjI0MTFjODE1ODU0NjViNzVmMGU2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JjZDQ3MTliNWQ4MjRmODY5OTMzY2NkZTBjNGUyMjY3LmJpbmRQb3B1cChwb3B1cF84Y2Y4MWMzYTNmOGE0ZGZiODgwYTQ4ZWYwMjZjMGExMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzliNzg3MDlhNTAyOTQ1OWM4NTEwNGJhYTJmYzhiNmM5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zODgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlMTZkOGY3YjAzMTQ4MzA4MmRhYmIxNTMzMjJmYjZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlODEwOGY4MjdhNzQzYWZhZDdhYzI0Y2I2MWMzODIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ZTgxMDhmODI3YTc0M2FmYWQ3YWMyNGNiNjFjMzgyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc2FtdHNnZWLDpHVkZSAoZsO8ciBSZWNobnVuZ3Nob2YgdW5kIEJ1bmRlc21pbmlzdGVyaXVtIGbDvHIgTGFuZGVzdmVydGVpZGlndW5nKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTE2ZDhmN2IwMzE0ODMwODJkYWJiMTUzMzIyZmI2ZS5zZXRDb250ZW50KGh0bWxfNGU4MTA4ZjgyN2E3NDNhZmFkN2FjMjRjYjYxYzM4MjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Yjc4NzA5YTUwMjk0NTljODUxMDRiYWEyZmM4YjZjOS5iaW5kUG9wdXAocG9wdXBfNmUxNmQ4ZjdiMDMxNDgzMDgyZGFiYjE1MzMyMmZiNmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82YWVjOWU0MzM3MGU0ODEyOThjN2M0M2NhNjg0ZDg1ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIyMDI3Nzc3NzgsMTYuMzg5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kY2VjZGQ5MDA4ZWY0MGE2YmU3NzQ5MzllMDkxN2U0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTNjYTFjMmJkMWI0ODZmYTk0NmE4YmM0YzU0OTJkMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmUzY2ExYzJiZDFiNDg2ZmE5NDZhOGJjNGM1NDkyZDAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCdW5kZXNiYWhuZGlyZWt0aW9uc2dlYsOkdWRlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjZWNkZDkwMDhlZjQwYTZiZTc3NDkzOWUwOTE3ZTQ4LnNldENvbnRlbnQoaHRtbF8yZTNjYTFjMmJkMWI0ODZmYTk0NmE4YmM0YzU0OTJkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZhZWM5ZTQzMzcwZTQ4MTI5OGM3YzQzY2E2ODRkODVkLmJpbmRQb3B1cChwb3B1cF9kY2VjZGQ5MDA4ZWY0MGE2YmU3NzQ5MzllMDkxN2U0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3MzNlZmY1ZTVlNTRiZDFiNGJhNzYwM2E3NWEzMGEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjQwODMzMzMzMywxNi40NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjEzZmRhMWI3MmY0MzMyODNiNTA5MWFjZTY3MWEyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZTg5NzZmYTVmNDg0MmZjYmMzNWQzMjBhNjNiNDQxNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGU4OTc2ZmE1ZjQ4NDJmY2JjMzVkMzIwYTYzYjQ0MTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCdW5kZXNneW1uYXNpdW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTIxM2ZkYTFiNzJmNDMzMjgzYjUwOTFhY2U2NzFhMjIuc2V0Q29udGVudChodG1sXzhlODk3NmZhNWY0ODQyZmNiYzM1ZDMyMGE2M2I0NDE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODczM2VmZjVlNWU1NGJkMWI0YmE3NjAzYTc1YTMwYTAuYmluZFBvcHVwKHBvcHVwXzUyMTNmZGExYjcyZjQzMzI4M2I1MDkxYWNlNjcxYTIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTk4OGQyMGZiYzQ5NDMzYzkzNGZkODhlNTRkNGZiMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTA1NTU1NTU2LDE2LjM2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjYyZjEyYzA0ZDM4NDgxMmIyMzI2OWJjNTJkMWQ1NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDg1NjE0ODBiMWM2NDA3NWEwMjZjYmRhMThlZjBlNjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA4NTYxNDgwYjFjNjQwNzVhMDI2Y2JkYTE4ZWYwZTYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnVuZGVza2FtbWVyIGRlciBnZXdlcmJsaWNoZW4gV2lydHNjaGFmdCAoR2Viw6R1ZGUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2MmYxMmMwNGQzODQ4MTJiMjMyNjliYzUyZDFkNTQ3LnNldENvbnRlbnQoaHRtbF8wODU2MTQ4MGIxYzY0MDc1YTAyNmNiZGExOGVmMGU2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5ODhkMjBmYmM0OTQzM2M5MzRmZDg4ZTU0ZDRmYjJhLmJpbmRQb3B1cChwb3B1cF8yNjJmMTJjMDRkMzg0ODEyYjIzMjY5YmM1MmQxZDU0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZjZmNiZjVmM2RhNDQyYmNiMTNmZjEzZjA2NGY4ZjhmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MDU1NTU1NiwxNi4zNjM2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzYTE2N2U2M2RiNDQzODNhNmM3M2ZlYjU4N2NiZDYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkOTBmNDRjYzQ1NDRhNzE5Zjg4YzBkMDA0ZmE2NjE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZDkwZjQ0Y2M0NTQ0YTcxOWY4OGMwZDAwNGZhNjYxNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc2thbnpsZXJhbXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDNhMTY3ZTYzZGI0NDM4M2E2YzczZmViNTg3Y2JkNjEuc2V0Q29udGVudChodG1sXzZkOTBmNDRjYzQ1NDRhNzE5Zjg4YzBkMDA0ZmE2NjE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmNmY2JmNWYzZGE0NDJiY2IxM2ZmMTNmMDY0ZjhmOGYuYmluZFBvcHVwKHBvcHVwXzQzYTE2N2U2M2RiNDQzODNhNmM3M2ZlYjU4N2NiZDYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjU4NzRhMDc4OTAyNGE1NzhhN2FjZGJmOTE1NGFkZWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTIyMjIyMjIyLDE2LjM1NDE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDIzMDJmOTczNGIxNDk2NWE1YTk2ZDI2YWVlM2RiZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA5ODJmZjZiOWM1NDVmZGI2MGY4OTEyODBiYzM3NTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUwOTgyZmY2YjljNTQ1ZmRiNjBmODkxMjgwYmMzNzU3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnVuZGVza3Jhbmtlbmthc3NlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyMzAyZjk3MzRiMTQ5NjVhNWE5NmQyNmFlZTNkYmQxLnNldENvbnRlbnQoaHRtbF81MDk4MmZmNmI5YzU0NWZkYjYwZjg5MTI4MGJjMzc1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI1ODc0YTA3ODkwMjRhNTc4YTdhY2RiZjkxNTRhZGVkLmJpbmRQb3B1cChwb3B1cF8wMjMwMmY5NzM0YjE0OTY1YTVhOTZkMjZhZWUzZGJkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE5MTIyMjAwMjE5ZjQ1OWU5YzFiNDgzMjZiYzUyMmU5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zMTgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwMDI2ZGEzNGYyMjRkYzc4OGY0ZWVkOTFhN2FmYWIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU2MjdmNzE0ZjNhZjRjYTRiYjg2ODdhYTU1M2JiZWExID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81NjI3ZjcxNGYzYWY0Y2E0YmI4Njg3YWE1NTNiYmVhMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc2xlaHJhbnN0YWx0IGbDvHIgQmVrbGVpZHVuZ3NnZXdlcmJlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwMDI2ZGEzNGYyMjRkYzc4OGY0ZWVkOTFhN2FmYWIwLnNldENvbnRlbnQoaHRtbF81NjI3ZjcxNGYzYWY0Y2E0YmI4Njg3YWE1NTNiYmVhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE5MTIyMjAwMjE5ZjQ1OWU5YzFiNDgzMjZiYzUyMmU5LmJpbmRQb3B1cChwb3B1cF8xMDAyNmRhMzRmMjI0ZGM3ODhmNGVlZDkxYTdhZmFiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U4MjIxMzk1NzYzOTRmYjhhMjIwOGU0ZjBhMDM0ODc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTg0NzIyMjIyMiwxNi4zNjgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjZTJmNTk1NjM5MzRkY2U5OTVhOGJjMzUzODQzZWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwYWFlNzYzYzA1ZjRjZDlhNjAwNDk1NGZhYWY3MTA4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MGFhZTc2M2MwNWY0Y2Q5YTYwMDQ5NTRmYWFmNzEwOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc2xlaHJhbnN0YWx0IGbDvHIgRnJhdWVuYmVydWZlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjZTJmNTk1NjM5MzRkY2U5OTVhOGJjMzUzODQzZWMzLnNldENvbnRlbnQoaHRtbF81MGFhZTc2M2MwNWY0Y2Q5YTYwMDQ5NTRmYWFmNzEwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U4MjIxMzk1NzYzOTRmYjhhMjIwOGU0ZjBhMDM0ODc4LmJpbmRQb3B1cChwb3B1cF80Y2UyZjU5NTYzOTM0ZGNlOTk1YThiYzM1Mzg0M2VjMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IxNWFlOTUyNzhiMTQzZWM5NDA2NDNjZjJiYjE4ZGFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjM5MTY2NjY2NywxNi40Mzg4ODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyMjMwOWE2NmU5ZTRhNjFhNWNmODlkYzM4NGQ2NjIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YzBhMDIxM2E3OTQ3OTk4ZDRjM2ZmNDE1ZTFjY2I3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yNWMwYTAyMTNhNzk0Nzk5OGQ0YzNmZjQxNWUxY2NiNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc2zDpG5kZXJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDIyMzA5YTY2ZTllNGE2MWE1Y2Y4OWRjMzg0ZDY2MjAuc2V0Q29udGVudChodG1sXzI1YzBhMDIxM2E3OTQ3OTk4ZDRjM2ZmNDE1ZTFjY2I3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjE1YWU5NTI3OGIxNDNlYzk0MDY0M2NmMmJiMThkYWUuYmluZFBvcHVwKHBvcHVwXzAyMjMwOWE2NmU5ZTRhNjFhNWNmODlkYzM4NGQ2NjIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTllNWFmOGU5Y2U0NGY3MWI5OTUzMDkzODRiOGI0ZjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM3OTcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZjNmYwNWUwMDgzNGYzM2I1NWE2ZDRmMTBkZjM2NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjE0OWQ4YTFjZDNlNDA0ZjhlYmZhZGYyNDU2NTZlODggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzIxNDlkOGExY2QzZTQwNGY4ZWJmYWRmMjQ1NjU2ZTg4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnVuZGVzbMOkbmRlcnZlcnNpY2hlcnVuZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZmM2ZjA1ZTAwODM0ZjMzYjU1YTZkNGYxMGRmMzY3Ny5zZXRDb250ZW50KGh0bWxfMjE0OWQ4YTFjZDNlNDA0ZjhlYmZhZGYyNDU2NTZlODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lOWU1YWY4ZTljZTQ0ZjcxYjk5NTMwOTM4NGI4YjRmMC5iaW5kUG9wdXAocG9wdXBfZGZjNmYwNWUwMDgzNGYzM2I1NWE2ZDRmMTBkZjM2NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YjM1MjNiNDQwMDY0YTQ4OWUyM2U3MWJiZGExNGE5MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5NzUsMTYuMzQ2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTA2YzE1MWYxYTA0ZThmYjUzYzEwZWY1OGI5YzIxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDNhNWU2ZjM4YmI0OTU5ODg1ZDJlZjA0ZmQzZmY1NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjQzYTVlNmYzOGJiNDk1OTg4NWQyZWYwNGZkM2ZmNTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCdW5kZXNtb2JpbGllbnZlcndhbHR1bmc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTEwNmMxNTFmMWEwNGU4ZmI1M2MxMGVmNThiOWMyMTcuc2V0Q29udGVudChodG1sXzI0M2E1ZTZmMzhiYjQ5NTk4ODVkMmVmMDRmZDNmZjU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2IzNTIzYjQ0MDA2NGE0ODllMjNlNzFiYmRhMTRhOTIuYmluZFBvcHVwKHBvcHVwXzExMDZjMTUxZjFhMDRlOGZiNTNjMTBlZjU4YjljMjE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzlhMTg0OTQxYjg0NDZjMWFhNjlkNmFmOTM2ODBkZDEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNCwxNi40MjExMTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3YzM1MjBhZWIyYjQzNWY5YzkyMjhhZGNjNGZiMTRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMWIyN2U2ZTUzZTQ3Njc5ZDFkYzEwMTIyNjg0YzA0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMDFiMjdlNmU1M2U0NzY3OWQxZGMxMDEyMjY4NGMwNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc3Nwb3J0YmFkPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3YzM1MjBhZWIyYjQzNWY5YzkyMjhhZGNjNGZiMTRkLnNldENvbnRlbnQoaHRtbF8yMDFiMjdlNmU1M2U0NzY3OWQxZGMxMDEyMjY4NGMwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM5YTE4NDk0MWI4NDQ2YzFhYTY5ZDZhZjkzNjgwZGQxLmJpbmRQb3B1cChwb3B1cF80N2MzNTIwYWViMmI0MzVmOWM5MjI4YWRjYzRmYjE0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U2YjdkNmFjZWU4NTQ3MDBiNzVhYjM1OTlkNmEzYjA5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk5NzIyMjIyMiwxNi4zNjE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzNjU2NTA5NTA2YzRmOGU5NDRmMWYyOGRiMzRjZGZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzMDcxMWI2Mzc5NTQ4YmNiYzViNTgxNjM2M2JhNDc3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMzA3MTFiNjM3OTU0OGJjYmM1YjU4MTYzNjNiYTQ3NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IEJ1bmRlc3RoZWF0ZXJkZWtvcmF0aW9uc2RlcG90PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzNjU2NTA5NTA2YzRmOGU5NDRmMWYyOGRiMzRjZGZlLnNldENvbnRlbnQoaHRtbF8yMzA3MTFiNjM3OTU0OGJjYmM1YjU4MTYzNjNiYTQ3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U2YjdkNmFjZWU4NTQ3MDBiNzVhYjM1OTlkNmEzYjA5LmJpbmRQb3B1cChwb3B1cF80MzY1NjUwOTUwNmM0ZjhlOTQ0ZjFmMjhkYjM0Y2RmZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjMDI4ZmFmZjQ2YzQzY2VhZmRiODhiMzdmMTRjODMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA0NzIyMjIyMiwxNi4zNjE5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5Njk5ODI1MzU5YzRjYjBiNGJjMDEyMzJhMTBkZDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxMGEzZGEyNTM5YjQ4ODc4Mjc5MDI4ZWNiZmY5Y2FlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82MTBhM2RhMjUzOWI0ODg3ODI3OTAyOGVjYmZmOWNhZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCdXJnYmFzdGVpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5Njk5ODI1MzU5YzRjYjBiNGJjMDEyMzJhMTBkZDdmLnNldENvbnRlbnQoaHRtbF82MTBhM2RhMjUzOWI0ODg3ODI3OTAyOGVjYmZmOWNhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjMDI4ZmFmZjQ2YzQzY2VhZmRiODhiMzdmMTRjODMwLmJpbmRQb3B1cChwb3B1cF8xOTY5OTgyNTM1OWM0Y2IwYjRiYzAxMjMyYTEwZGQ3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NhZTIxN2UzYmEwNjQ2Yzc4MzRlZTBkYjgwNjE0ZTU5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk4ODg4ODg4OSwxNi4zN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTcwNzc0ZWNjZDc0MDNjODg5MWNlZTRhM2Y1YzlhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTdmNmJiYmNiYWY0ODdjOTkzZDIwYmFjN2ZlOTJlNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmU3ZjZiYmJjYmFmNDg3Yzk5M2QyMGJhYzdmZTkyZTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJ1cmdoZXJtZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTcwNzc0ZWNjZDc0MDNjODg5MWNlZTRhM2Y1YzlhMi5zZXRDb250ZW50KGh0bWxfMmU3ZjZiYmJjYmFmNDg3Yzk5M2QyMGJhYzdmZTkyZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYWUyMTdlM2JhMDY0NmM3ODM0ZWUwZGI4MDYxNGU1OS5iaW5kUG9wdXAocG9wdXBfZGE3MDc3NGVjY2Q3NDAzYzg4OTFjZWU0YTNmNWM5YTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NmVmODI0ZjJkMWQ0YzQ2OWUwNDRlZDI0MWIyM2Q0OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzUsMTYuMzY2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWI1NzkyNTlmNWI0ZTRkODMxZjNkMGI5MTc0MWZiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OTY3MmI2ZmNkZTI0NWI4OGVmNmQ1MzMwOTIyZDBlMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzk2NzJiNmZjZGUyNDViODhlZjZkNTMzMDkyMmQwZTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQnVyZ2thcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFiNTc5MjU5ZjViNGU0ZDgzMWYzZDBiOTE3NDFmYjEuc2V0Q29udGVudChodG1sXzc5NjcyYjZmY2RlMjQ1Yjg4ZWY2ZDUzMzA5MjJkMGUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTZlZjgyNGYyZDFkNGM0NjllMDQ0ZWQyNDFiMjNkNDkuYmluZFBvcHVwKHBvcHVwXzhhYjU3OTI1OWY1YjRlNGQ4MzFmM2QwYjkxNzQxZmIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjllNmUxMzFhMTFjNGMzNzliZmE0NWRjMjZlMzIxNDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTEzODg4ODg5LDE2LjM3NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE1Yzc2MzA3OWY5NGEwMjljZjBlZDRhODc3MzU3NmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZhZjU1ZWI1YTAzNDYxZWFmZmViNjQ2NzU1ZWM3YjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzhmYWY1NWViNWEwMzQ2MWVhZmZlYjY0Njc1NWVjN2I5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IEJ1cmdtYXVlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMTVjNzYzMDc5Zjk0YTAyOWNmMGVkNGE4NzczNTc2Yi5zZXRDb250ZW50KGh0bWxfOGZhZjU1ZWI1YTAzNDYxZWFmZmViNjQ2NzU1ZWM3YjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOWU2ZTEzMWExMWM0YzM3OWJmYTQ1ZGMyNmUzMjE0MC5iaW5kUG9wdXAocG9wdXBfMzE1Yzc2MzA3OWY5NGEwMjljZjBlZDRhODc3MzU3NmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMDU0ODA1YmVlMDY0OThhYWNkNTY1OTE3NWFjNmVhYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjM4ODg4ODksMTYuMzYyNzc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTc4MjZmYmFjODI0MzkwYjQ1MDhhZjFiZjY1ZThhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTI2ZTRhN2M3NWM0YmJjOGQ4ZmY3ZDI0M2NiMWQ5YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGUyNmU0YTdjNzVjNGJiYzhkOGZmN2QyNDNjYjFkOWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCdXJncmF2ZWxpbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTc4MjZmYmFjODI0MzkwYjQ1MDhhZjFiZjY1ZThhNS5zZXRDb250ZW50KGh0bWxfZGUyNmU0YTdjNzVjNGJiYzhkOGZmN2QyNDNjYjFkOWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMDU0ODA1YmVlMDY0OThhYWNkNTY1OTE3NWFjNmVhYy5iaW5kUG9wdXAocG9wdXBfMzU3ODI2ZmJhYzgyNDM5MGI0NTA4YWYxYmY2NWU4YTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MTM5ZjI4ZjMwMTU0ZTI3OWJkYTQ3MTM1NTMwNWE2NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxLDE2LjM2MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTk2NmFiN2EzMDE5NGYyYmI1NWQ0YThiMWIwZDcwOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QzOGExYzMzYmQ2NDFlMWEwODJjMGQ1MjcyMDAwZDUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NkMzhhMWMzM2JkNjQxZTFhMDgyYzBkNTI3MjAwMGQ1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQnVyZ3RoZWF0ZXIgKEdlYsOkdWRlKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTY2YWI3YTMwMTk0ZjJiYjU1ZDRhOGIxYjBkNzA5OS5zZXRDb250ZW50KGh0bWxfY2QzOGExYzMzYmQ2NDFlMWEwODJjMGQ1MjcyMDAwZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MTM5ZjI4ZjMwMTU0ZTI3OWJkYTQ3MTM1NTMwNWE2NC5iaW5kUG9wdXAocG9wdXBfYTk2NmFiN2EzMDE5NGYyYmI1NWQ0YThiMWIwZDcwOTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYzU5ODdkMTY4M2I0ZTI4YmE4M2E4M2U4NzljNDQ0YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMjIyMjIyMjIsMTYuMzI4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMzA3ZDU4NDkzMjg0NWU1ODE3MTAwNjc4ZWJiZDkzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjIwOTdjYTBkMTI0ZGUwOWU0OWQ2MjAwNjM5NDJkMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGYyMDk3Y2EwZDEyNGRlMDllNDlkNjIwMDYzOTQyZDMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IEJ1cmphbi1HZWRlbmt0YWZlbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMzA3ZDU4NDkzMjg0NWU1ODE3MTAwNjc4ZWJiZDkzYS5zZXRDb250ZW50KGh0bWxfZGYyMDk3Y2EwZDEyNGRlMDllNDlkNjIwMDYzOTQyZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYzU5ODdkMTY4M2I0ZTI4YmE4M2E4M2U4NzljNDQ0YS5iaW5kUG9wdXAocG9wdXBfMTMwN2Q1ODQ5MzI4NDVlNTgxNzEwMDY3OGViYmQ5M2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMzFmMzZjMGVkOGU0NDlmOTQ1YTZjNzM5Mjg3OGMyOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDU1NTU1NTYsMTYuMzc2Mzg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOGFmNTAwNGMyYTE0YjBhODE3Y2NjYmViMmE3OGE0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMmI2M2ZhZGM4MTk0ZjFhYTU5YjQwMGE0ZDQ3YTU4NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDJiNjNmYWRjODE5NGYxYWE1OWI0MDBhNGQ0N2E1ODUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCdXJrYS1IYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4YWY1MDA0YzJhMTRiMGE4MTdjY2NiZWIyYTc4YTQwLnNldENvbnRlbnQoaHRtbF8wMmI2M2ZhZGM4MTk0ZjFhYTU5YjQwMGE0ZDQ3YTU4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YzMWYzNmMwZWQ4ZTQ0OWY5NDVhNmM3MzkyODc4YzI4LmJpbmRQb3B1cChwb3B1cF8zOGFmNTAwNGMyYTE0YjBhODE3Y2NjYmViMmE3OGE0MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ3YWQ5NmNlZjk3NjRiMTA5NzM2OWQwNWMxZThmN2I2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNzU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczZjMyZDAyMTlmMTQ4OWNhOTJkM2VkMzIxYmFmOTU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlMDIzZDhlNzJmMTRlM2RhNTBmMDM4MjMwYjU1ZjFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZTAyM2Q4ZTcyZjE0ZTNkYTUwZjAzODIzMGI1NWYxYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDpGNrZXJzdHJhw59lIDEwPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczZjMyZDAyMTlmMTQ4OWNhOTJkM2VkMzIxYmFmOTU2LnNldENvbnRlbnQoaHRtbF8xZTAyM2Q4ZTcyZjE0ZTNkYTUwZjAzODIzMGI1NWYxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ3YWQ5NmNlZjk3NjRiMTA5NzM2OWQwNWMxZThmN2I2LmJpbmRQb3B1cChwb3B1cF83M2YzMmQwMjE5ZjE0ODljYTkyZDNlZDMyMWJhZjk1Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc0NWRjNzJjNzVkMjQ3YjdhMzBhZjcxNzY0ZjcwZDI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4NjExMTExMSwxNi4zNzU4MzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzZjE5MzNkZGNiMzQwNzk4ZWNkNWI0NGMxYTA4NDU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0M2FjNjQ5M2Q0ZTQ3MjQ5OTllMWNhYmY1ZmVmYmJhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yNDNhYzY0OTNkNGU0NzI0OTk5ZTFjYWJmNWZlZmJiYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDpGNrZXJzdHJhw59lIDEyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzZjE5MzNkZGNiMzQwNzk4ZWNkNWI0NGMxYTA4NDU4LnNldENvbnRlbnQoaHRtbF8yNDNhYzY0OTNkNGU0NzI0OTk5ZTFjYWJmNWZlZmJiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc0NWRjNzJjNzVkMjQ3YjdhMzBhZjcxNzY0ZjcwZDI2LmJpbmRQb3B1cChwb3B1cF9iM2YxOTMzZGRjYjM0MDc5OGVjZDViNDRjMWEwODQ1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA5ODAwZTEyNjNlODRmNWFiZTUzZjMzNDgxY2JiZTljID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4NjExMTExMSwxNi4zNzYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1NjM4Yzc3ZmY1MjRiMWE4MjY4NmJjNDBhZmZhNjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3ODE1NTZhYTA0ODQ4MWY5YTg4Nzg0ZmNiODQzMzIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NzgxNTU2YWEwNDg0ODFmOWE4ODc4NGZjYjg0MzMyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDpGNrZXJzdHJhw59lIDE0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1NjM4Yzc3ZmY1MjRiMWE4MjY4NmJjNDBhZmZhNjE1LnNldENvbnRlbnQoaHRtbF85NzgxNTU2YWEwNDg0ODFmOWE4ODc4NGZjYjg0MzMyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5ODAwZTEyNjNlODRmNWFiZTUzZjMzNDgxY2JiZTljLmJpbmRQb3B1cChwb3B1cF9iNTYzOGM3N2ZmNTI0YjFhODI2ODZiYzQwYWZmYTYxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE5MDgzYWVmMTc1MzQ1ZjhhNzVjYzhlNTk4NzExNWM4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4NjExMTExMSwxNi4zNzYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiZDU1MWUxYWU1NDRjNTdhZjIyYTI1YWJjNTgzYmVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlNWE4MGNkOGRmYjQ5ZWE5ODQ3YTgxYzY4Y2Q2NTc1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZTVhODBjZDhkZmI0OWVhOTg0N2E4MWM2OGNkNjU3NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDpGNrZXJzdHJhw59lIDE2PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiZDU1MWUxYWU1NDRjNTdhZjIyYTI1YWJjNTgzYmVlLnNldENvbnRlbnQoaHRtbF9kZTVhODBjZDhkZmI0OWVhOTg0N2E4MWM2OGNkNjU3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE5MDgzYWVmMTc1MzQ1ZjhhNzVjYzhlNTk4NzExNWM4LmJpbmRQb3B1cChwb3B1cF9kYmQ1NTFlMWFlNTQ0YzU3YWYyMmEyNWFiYzU4M2JlZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI0YzYzMjE4YTMwNzQzZjQ5NDJkNjNjYTYyMWQ5ZTUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA5MTY2NjY2NywxNi4zNzQ3MjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmNTIzOTdhN2FjNTQyYzk4MjYxN2EzMDFlN2I0NzVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmZmU4MjUyOGM5NTQ4NzA4YThkNTA3ODYxNTA5YzJjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ZmZlODI1MjhjOTU0ODcwOGE4ZDUwNzg2MTUwOWMyYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDpGNrZXJzdHJhw59lIDI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGY1MjM5N2E3YWM1NDJjOTgyNjE3YTMwMWU3YjQ3NWMuc2V0Q29udGVudChodG1sXzZmZmU4MjUyOGM5NTQ4NzA4YThkNTA3ODYxNTA5YzJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjRjNjMyMThhMzA3NDNmNDk0MmQ2M2NhNjIxZDllNTEuYmluZFBvcHVwKHBvcHVwX2RmNTIzOTdhN2FjNTQyYzk4MjYxN2EzMDFlN2I0NzVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzE1YmZkNjcxMWVhNGZkNWIxNDdiOWI4NzFmOGM0ZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDgwNTU1NTU2LDE2LjM3NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWFlNjkzN2RmMTNjNDAzYzhjZTUxNjg0OWQxMGJjOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzFkYjZmNGFiOWY1NGM5Y2E4ZjRhZjNmY2M2MjZkYmMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMxZGI2ZjRhYjlmNTRjOWNhOGY0YWYzZmNjNjI2ZGJjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsOkY2tlcnN0cmHDn2UgMjA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWFlNjkzN2RmMTNjNDAzYzhjZTUxNjg0OWQxMGJjOTMuc2V0Q29udGVudChodG1sXzMxZGI2ZjRhYjlmNTRjOWNhOGY0YWYzZmNjNjI2ZGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzE1YmZkNjcxMWVhNGZkNWIxNDdiOWI4NzFmOGM0ZGEuYmluZFBvcHVwKHBvcHVwX2VhZTY5MzdkZjEzYzQwM2M4Y2U1MTY4NDlkMTBiYzkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmQyODgwNGUxNWFmNGJmN2EzYTA4NWVmNTE5MTVhZmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDkxNjY2NjY3LDE2LjM3NTI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzIyMzRjMWIyZTNkNDJiOWJhYjk3YzE1ZjQxYzI2ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjMwMjRjNjcwNDI0NDliNGI2YjIzMjExODE0ODEzOGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YzMDI0YzY3MDQyNDQ5YjRiNmIyMzIxMTgxNDgxMzhlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsOkY2tlcnN0cmHDn2UgNDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjIzNGMxYjJlM2Q0MmI5YmFiOTdjMTVmNDFjMjZkYy5zZXRDb250ZW50KGh0bWxfZjMwMjRjNjcwNDI0NDliNGI2YjIzMjExODE0ODEzOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZDI4ODA0ZTE1YWY0YmY3YTNhMDg1ZWY1MTkxNWFmZC5iaW5kUG9wdXAocG9wdXBfYzIyMzRjMWIyZTNkNDJiOWJhYjk3YzE1ZjQxYzI2ZGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84M2E3NTY2MzJhOTA0NGNmYWY1MzI3MWRiM2YwNTRlNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODg4ODg4ODksMTYuMzc1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NzBlMjJhYmNhYzM0ZGE1YThiNzgxZDk1NTU4YTk1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZDA1ZjkxODMyZTc0ZDk5YmU3OTdhYTY5ODRlYTQ2NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmQwNWY5MTgzMmU3NGQ5OWJlNzk3YWE2OTg0ZWE0NjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw6Rja2Vyc3RyYcOfZSA2PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3MGUyMmFiY2FjMzRkYTVhOGI3ODFkOTU1NThhOTU5LnNldENvbnRlbnQoaHRtbF8yZDA1ZjkxODMyZTc0ZDk5YmU3OTdhYTY5ODRlYTQ2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgzYTc1NjYzMmE5MDQ0Y2ZhZjUzMjcxZGIzZjA1NGU3LmJpbmRQb3B1cChwb3B1cF81NzBlMjJhYmNhYzM0ZGE1YThiNzgxZDk1NTU4YTk1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4Njc4NWFiMzM5MTRiMjNiOGUwZjNhYjE1MDIyOTMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4ODg4ODg4OSwxNi4zNzU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZTVhNjcwZmQxYzRjOGE5NmExODZiMmNkYjM3OTEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxNDZhZTAyZTg1YjQ1YWQ5M2U3NmRjNDdhNTA2NTE0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kMTQ2YWUwMmU4NWI0NWFkOTNlNzZkYzQ3YTUwNjUxNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDpGNrZXJzdHJhw59lIDg8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTBlNWE2NzBmZDFjNGM4YTk2YTE4NmIyY2RiMzc5MTMuc2V0Q29udGVudChodG1sX2QxNDZhZTAyZTg1YjQ1YWQ5M2U3NmRjNDdhNTA2NTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzg2Nzg1YWIzMzkxNGIyM2I4ZTBmM2FiMTUwMjI5MzIuYmluZFBvcHVwKHBvcHVwXzUwZTVhNjcwZmQxYzRjOGE5NmExODZiMmNkYjM3OTEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjBhNjJhOGNlZDQzNGM1Yzg5ZWFlOGNlZjlhNzMwNzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzc3Nzc3Nzc4LDE2LjQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5OWM1YjhmM2UzNTQ3ODZhYTMwY2FjOWYxZGEwYTYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5ZjUzYjg3NDcxODQ0ZjhhZGJlOWVlNTU2YWE4ODM5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iOWY1M2I4NzQ3MTg0NGY4YWRiZTllZTU1NmFhODgzOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQsOkcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTljNWI4ZjNlMzU0Nzg2YWEzMGNhYzlmMWRhMGE2MS5zZXRDb250ZW50KGh0bWxfYjlmNTNiODc0NzE4NDRmOGFkYmU5ZWU1NTZhYTg4MzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMGE2MmE4Y2VkNDM0YzVjODllYWU4Y2VmOWE3MzA3MS5iaW5kUG9wdXAocG9wdXBfZjk5YzViOGYzZTM1NDc4NmFhMzBjYWM5ZjFkYTBhNjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZTQwNmVhZDA3Yjk0YzczYmVmY2NkZTQzYWVhY2YyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4NzIyMjIyMjIsMTYuMzcwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODk0Y2E1ZjRlNmE0MmVmYTQ3NjZjODEwMzNmYWFiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGZjYzI3M2YxNWU0MjRiOTMzZGJlZjdlMDFhNmRiMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjRmY2MyNzNmMTVlNDI0YjkzM2RiZWY3ZTAxYTZkYjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQsOkcmVuYnJ1bm5lbiAoNCwgS29sc2NoaXR6a3lnYXNzZSA5LTEzKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODk0Y2E1ZjRlNmE0MmVmYTQ3NjZjODEwMzNmYWFiYy5zZXRDb250ZW50KGh0bWxfNjRmY2MyNzNmMTVlNDI0YjkzM2RiZWY3ZTAxYTZkYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZTQwNmVhZDA3Yjk0YzczYmVmY2NkZTQzYWVhY2YyYy5iaW5kUG9wdXAocG9wdXBfNzg5NGNhNWY0ZTZhNDJlZmE0NzY2YzgxMDMzZmFhYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mY2IyYTc1Mzc1N2U0YjgxOTFhYTM3NjQwNjc0YmEwMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE4MDgzMzMzMzMsMTYuMzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDYxY2IwNTY0ZmMyNDU4N2IyMjBlNzNjMTY4MzQzODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGZlMzdiZDcyZDJkNDcyZmIyYzBmMTUzOTc1MmNlNzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRmZTM3YmQ3MmQyZDQ3MmZiMmMwZjE1Mzk3NTJjZTcwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IELDpHJlbmJydW5uZW4gKDUsIE1hcmdhcmV0ZW5nw7xydGVsIDgyKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjFjYjA1NjRmYzI0NTg3YjIyMGU3M2MxNjgzNDM4Ny5zZXRDb250ZW50KGh0bWxfNGZlMzdiZDcyZDJkNDcyZmIyYzBmMTUzOTc1MmNlNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mY2IyYTc1Mzc1N2U0YjgxOTFhYTM3NjQwNjc0YmEwMS5iaW5kUG9wdXAocG9wdXBfNDYxY2IwNTY0ZmMyNDU4N2IyMjBlNzNjMTY4MzQzODcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NDEyNjIzZWNlYjQ0ZDE5YjE3NzUwOWQ2MzFhMDRlZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5OTQ0NDQ0NDQsMTYuMzY1ODMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTk0NjEyNWM4YWM0MDAyYTkwMDgyNGM2NjIyZTQzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZDUzMjI5NTg3MTA0ZWI0YTM3ZDgxMTQyYmQwNTdjOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWQ1MzIyOTU4NzEwNGViNGEzN2Q4MTE0MmJkMDU3YzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw6RyZW5tw7xobGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGE5NDYxMjVjOGFjNDAwMmE5MDA4MjRjNjYyMmU0MzUuc2V0Q29udGVudChodG1sXzVkNTMyMjk1ODcxMDRlYjRhMzdkODExNDJiZDA1N2M4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODQxMjYyM2VjZWI0NGQxOWIxNzc1MDlkNjMxYTA0ZWUuYmluZFBvcHVwKHBvcHVwXzRhOTQ2MTI1YzhhYzQwMDJhOTAwODI0YzY2MjJlNDM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTE4MDliNjkzOTZhNDQ2MTkxYjlhNjNkZTBhMDU0NjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMjc3Nzc3Nzc4LDE2LjI5NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTBmNWVhNjAxODgyNGYzZmI4NDRiZjc2OGY1YWJhMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjQ4OTMxMzQxZTQ0NDM0YzkxNWI2NjE3NTUwZWQzZjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI0ODkzMTM0MWU0NDQzNGM5MTViNjYxNzU1MGVkM2Y1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsOkcmVudmlsbGE8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTBmNWVhNjAxODgyNGYzZmI4NDRiZjc2OGY1YWJhMDUuc2V0Q29udGVudChodG1sXzI0ODkzMTM0MWU0NDQzNGM5MTViNjYxNzU1MGVkM2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTE4MDliNjkzOTZhNDQ2MTkxYjlhNjNkZTBhMDU0NjEuYmluZFBvcHVwKHBvcHVwXzEwZjVlYTYwMTg4MjRmM2ZiODQ0YmY3NjhmNWFiYTA1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2U3MDNjOWRhOTYwNGIzNTk3NjU3NTVjYTM0OThmNWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM3MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWJjOGIwOWJjMTQ4NDU1OGI3YjJmNjQxMzRmZjY2ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWE1NDMzYjA1MTE2NDAxMjk0ZTZkNGM1NzAwZDlhMDcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzVhNTQzM2IwNTExNjQwMTI5NGU2ZDRjNTcwMGQ5YTA3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsOkcnJpbmdlcmhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYmM4YjA5YmMxNDg0NTU4YjdiMmY2NDEzNGZmNjZkMS5zZXRDb250ZW50KGh0bWxfNWE1NDMzYjA1MTE2NDAxMjk0ZTZkNGM1NzAwZDlhMDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTcwM2M5ZGE5NjA0YjM1OTc2NTc1NWNhMzQ5OGY1ZS5iaW5kUG9wdXAocG9wdXBfZWJjOGIwOWJjMTQ4NDU1OGI3YjJmNjQxMzRmZjY2ZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NTEzNjkwOTUyOGM0ZTVhYWVmNDQzNTAwOTg3ODA1ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMjIyMjIyMjIsMTYuMzY2MTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZGRmN2U5YWNiOGY0MmRkYWEzYThmODRmYWMxNmYxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjgzMDEzMDQ5MjM0NmE1OWQ5YzhmZTk4MjRhNzE3NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTI4MzAxMzA0OTIzNDZhNTlkOWM4ZmU5ODI0YTcxNzYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7ZobGVyaGF1czwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGRmN2U5YWNiOGY0MmRkYWEzYThmODRmYWMxNmYxOS5zZXRDb250ZW50KGh0bWxfOTI4MzAxMzA0OTIzNDZhNTlkOWM4ZmU5ODI0YTcxNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTEzNjkwOTUyOGM0ZTVhYWVmNDQzNTAwOTg3ODA1ZC5iaW5kUG9wdXAocG9wdXBfNGRkZjdlOWFjYjhmNDJkZGFhM2E4Zjg0ZmFjMTZmMTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MjAzOGEwZTNjNmI0NThkYjAxZjE0YmM3ZTdkMzg1ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MTM4ODg4ODksMTYuMzczMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNWM5YzEyOTgyNmM0NjdiYjljOTQ5NTQzNTZhOGQ5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODcxZGFmMDIyMDI0YjYyYmVmMWQ5YmNlN2ExZWE2YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjg3MWRhZjAyMjAyNGI2MmJlZjFkOWJjZTdhMWVhNmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7ZobGVycGFsYWlzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1YzljMTI5ODI2YzQ2N2JiOWM5NDk1NDM1NmE4ZDk4LnNldENvbnRlbnQoaHRtbF9mODcxZGFmMDIyMDI0YjYyYmVmMWQ5YmNlN2ExZWE2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYyMDM4YTBlM2M2YjQ1OGRiMDFmMTRiYzdlN2QzODVkLmJpbmRQb3B1cChwb3B1cF9iNWM5YzEyOTgyNmM0NjdiYjljOTQ5NTQzNTZhOGQ5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA0YjE2YTdjYzZiYzRhMWRiNGNlYzQ2ZDY2OWNlZWM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmN2IxZDk2ZGU3OTRjNzU5OTQ5YzU5NDVkYzYyOTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyNzAxZDhjYTIwNDRkNWNiYjI4YTNkZWI0OGZjYzJhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMjcwMWQ4Y2EyMDQ0ZDVjYmIyOGEzZGViNDhmY2MyYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRGVua21hbDogQsO2aG0tQmF3ZXJrLURlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWY3YjFkOTZkZTc5NGM3NTk5NDljNTk0NWRjNjI5M2Muc2V0Q29udGVudChodG1sXzMyNzAxZDhjYTIwNDRkNWNiYjI4YTNkZWI0OGZjYzJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDRiMTZhN2NjNmJjNGExZGI0Y2VjNDZkNjY5Y2VlYzcuYmluZFBvcHVwKHBvcHVwXzlmN2IxZDk2ZGU3OTRjNzU5OTQ5YzU5NDVkYzYyOTNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzJhODg0MjY4NGZhNDg0MTllNTgwODQ1M2RjNjhmZjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDI1LDE2LjM2ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNmOTdiNzczZTI2NDk5YTg2ZDkwMTFjYjg3YzY4Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjZmZjliOTM2MzIwNGFmM2FiNjk1MzI0ZDU3NWQ1YzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI2ZmY5YjkzNjMyMDRhZjNhYjY5NTMyNGQ1NzVkNWM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBCw7ZobWLDvHN0ZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yM2Y5N2I3NzNlMjY0OTlhODZkOTAxMWNiODdjNjhjYS5zZXRDb250ZW50KGh0bWxfMjZmZjliOTM2MzIwNGFmM2FiNjk1MzI0ZDU3NWQ1YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MmE4ODQyNjg0ZmE0ODQxOWU1ODA4NDUzZGM2OGZmNy5iaW5kUG9wdXAocG9wdXBfMjNmOTdiNzczZTI2NDk5YTg2ZDkwMTFjYjg3YzY4Y2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZmE4MTVkNzlmOTI0ZWIwYmRiOWVkNjE3NjA5NTcyZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMjc3Nzc3NzgsMTYuMzYwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTI2OWRkMjJhNzU0MTg0OGFhN2FkMmE3OWY4MjRkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDIxMTcyOGU5MDM0NDI4OWE3MGQyMWI5OWIyNWYzNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2QyMTE3MjhlOTAzNDQyODlhNzBkMjFiOTliMjVmMzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbmttYWw6IELDtmhtZGVua21hbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTI2OWRkMjJhNzU0MTg0OGFhN2FkMmE3OWY4MjRkNi5zZXRDb250ZW50KGh0bWxfN2QyMTE3MjhlOTAzNDQyODlhNzBkMjFiOTliMjVmMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZmE4MTVkNzlmOTI0ZWIwYmRiOWVkNjE3NjA5NTcyZi5iaW5kUG9wdXAocG9wdXBfZGEyNjlkZDIyYTc1NDE4NDhhYTdhZDJhNzlmODI0ZDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNmUxYmFiZDE4ZWM0NmUzYmQwMGU5MDNlMDcwZDFjYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTM4ODg4ODksMTYuMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzA1NzU1ZTRhMDM5NGY1Nzg0NjY3YzdiNDcwMDNlYzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjg5MTdiOTZmYWM1NDhmZmFlNDlmZTI0NDQzOWY4MjggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY4OTE3Yjk2ZmFjNTQ4ZmZhZTQ5ZmUyNDQ0MzlmODI4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2aG1pc2NoZSBIb2ZrYW56bGVpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwNTc1NWU0YTAzOTRmNTc4NDY2N2M3YjQ3MDAzZWM3LnNldENvbnRlbnQoaHRtbF82ODkxN2I5NmZhYzU0OGZmYWU0OWZlMjQ0NDM5ZjgyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E2ZTFiYWJkMThlYzQ2ZTNiZDAwZTkwM2UwNzBkMWNjLmJpbmRQb3B1cChwb3B1cF9jMDU3NTVlNGEwMzk0ZjU3ODQ2NjdjN2I0NzAwM2VjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYwMmY5NGQ2MTIwZjQ3ZTA5ZDkwNjFlMzk4MDk3NDViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzODg4ODg4OSwxNi4zODcyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyODM0ZWE4YzdhNDQyZThhMzU2Mjk4ZGEyY2U3ZmQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzNDdkZmNiN2RmZjQ0MWNiZjNmNzE4Mjc5YjdjNDEwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84MzQ3ZGZjYjdkZmY0NDFjYmYzZjcxODI3OWI3YzQxMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FrcmFsYmF1OiBCw7ZobWlzY2hlIEthcGVsbGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDI4MzRlYThjN2E0NDJlOGEzNTYyOThkYTJjZTdmZDcuc2V0Q29udGVudChodG1sXzgzNDdkZmNiN2RmZjQ0MWNiZjNmNzE4Mjc5YjdjNDEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjAyZjk0ZDYxMjBmNDdlMDlkOTA2MWUzOTgwOTc0NWIuYmluZFBvcHVwKHBvcHVwXzAyODM0ZWE4YzdhNDQyZThhMzU2Mjk4ZGEyY2U3ZmQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWQxOWU2NjFkYWY2NDJiZGI0YzI3ZTI4MjcyMDI0YTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDkxNjY2NjY3LDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWMwOTg1NGQ2ODkzNDhlODkwMzZjZTAwZDdkY2Q3OTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQ4Njc5ZmJkZWFlNDRkMWJmODVlNmMwMTNiYTQ2MWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E0ODY3OWZiZGVhZTQ0ZDFiZjg1ZTZjMDEzYmE0NjFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2aG1zY2hlcyBTdGlmdHVuZ3NoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljMDk4NTRkNjg5MzQ4ZTg5MDM2Y2UwMGQ3ZGNkNzkxLnNldENvbnRlbnQoaHRtbF9hNDg2NzlmYmRlYWU0NGQxYmY4NWU2YzAxM2JhNDYxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkMTllNjYxZGFmNjQyYmRiNGMyN2UyODI3MjAyNGE2LmJpbmRQb3B1cChwb3B1cF85YzA5ODU0ZDY4OTM0OGU4OTAzNmNlMDBkN2RjZDc5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgxZjM5ZjNiMjRmYjRiNjI5ZTNhNmIxYWZjZDkxZThhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE1LDE2LjM2NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzM5YTNhODI1ODE4NGM4YmIyMGRmNWQ1NWUzYWU1ZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTY3OTRhNjYwNzliNDE2NDkxMTNkZTQ2YTc2NTg5ODkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E2Nzk0YTY2MDc5YjQxNjQ5MTEzZGU0NmE3NjU4OTg5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2cnNlIChHZWLDpHVkZSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzM5YTNhODI1ODE4NGM4YmIyMGRmNWQ1NWUzYWU1ZTUuc2V0Q29udGVudChodG1sX2E2Nzk0YTY2MDc5YjQxNjQ5MTEzZGU0NmE3NjU4OTg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODFmMzlmM2IyNGZiNGI2MjllM2E2YjFhZmNkOTFlOGEuYmluZFBvcHVwKHBvcHVwXzczOWEzYTgyNTgxODRjOGJiMjBkZjVkNTVlM2FlNWU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmZlODZjOTNiODk0NDY3Nzk4NjZmNDFhZWU1NDdiYzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM4ODg4ODg5LDE2LjM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViMWMxYmQwM2ZhNTQyODk5MjFmMWM1ZmI2OTMzMmY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxNGI1MGZkNDg4ZTRhYzM5NDIyZDNhMDFhNTc3MjQ4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wMTRiNTBmZDQ4OGU0YWMzOTQyMmQzYTAxYTU3NzI0OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDtnJzZSBmw7xyIGxhbmR3aXJ0c2NoYWZ0bGljaGUgUHJvZHVrdGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWIxYzFiZDAzZmE1NDI4OTkyMWYxYzVmYjY5MzMyZjkuc2V0Q29udGVudChodG1sXzAxNGI1MGZkNDg4ZTRhYzM5NDIyZDNhMDFhNTc3MjQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmZlODZjOTNiODk0NDY3Nzk4NjZmNDFhZWU1NDdiYzIuYmluZFBvcHVwKHBvcHVwX2ViMWMxYmQwM2ZhNTQyODk5MjFmMWM1ZmI2OTMzMmY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjM3ZmI2NmYwM2YwNGJiMzhhZGNkODcwNzAwZjZhOTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGVkMjRhY2VjMWY3NGE0Y2E5Y2Q0NzAzZmMxNzk0NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWY1MTU2ZWYxNjc1NDI5Mzk5MjA2MzU0NGRjZThlZjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzlmNTE1NmVmMTY3NTQyOTM5OTIwNjM1NDRkY2U4ZWY1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2cnNlZ2Fzc2UgMTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWQyNGFjZWMxZjc0YTRjYTljZDQ3MDNmYzE3OTQ2ZS5zZXRDb250ZW50KGh0bWxfOWY1MTU2ZWYxNjc1NDI5Mzk5MjA2MzU0NGRjZThlZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMzdmYjY2ZjAzZjA0YmIzOGFkY2Q4NzA3MDBmNmE5MC5iaW5kUG9wdXAocG9wdXBfNGVkMjRhY2VjMWY3NGE0Y2E5Y2Q0NzAzZmMxNzk0NmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYzAyZThlZTIyOGU0M2MwYjdmYjY0YTgzZDFmNzk3ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNDE2NjY2NjcsMTYuMzY4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzVkYjkwYTQ5ZDY0NTRmYmU1OWMwNjgyYTM2NzgwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjlkMDVjZTg5MmI0NDY3YTcyMDY1MjZkNDQwZDNkYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODI5ZDA1Y2U4OTJiNDQ2N2E3MjA2NTI2ZDQ0MGQzZGIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7Zyc2VnYXNzZSAxMDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMzVkYjkwYTQ5ZDY0NTRmYmU1OWMwNjgyYTM2NzgwNi5zZXRDb250ZW50KGh0bWxfODI5ZDA1Y2U4OTJiNDQ2N2E3MjA2NTI2ZDQ0MGQzZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iYzAyZThlZTIyOGU0M2MwYjdmYjY0YTgzZDFmNzk3ZC5iaW5kUG9wdXAocG9wdXBfMzM1ZGI5MGE0OWQ2NDU0ZmJlNTljMDY4MmEzNjc4MDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZjAzNTJhMGJlMTg0YzE5YWE1NzVhYzg1YmY1MjhhMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzMzMzMzMzMsMTYuMzY4ODg4ODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NjZiZDQ4YTM3OWY0Yzk3YWVjM2U3ZGZlM2E5ZDJlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDhiZGMxOGJlYjM0YzhmYWViMGI4MWU4OGEwNjcxNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTQ4YmRjMThiZWIzNGM4ZmFlYjBiODFlODhhMDY3MTQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7Zyc2VnYXNzZSAzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2NmJkNDhhMzc5ZjRjOTdhZWMzZTdkZmUzYTlkMmVhLnNldENvbnRlbnQoaHRtbF8xNDhiZGMxOGJlYjM0YzhmYWViMGI4MWU4OGEwNjcxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmMDM1MmEwYmUxODRjMTlhYTU3NWFjODViZjUyOGEyLmJpbmRQb3B1cChwb3B1cF84NjZiZDQ4YTM3OWY0Yzk3YWVjM2U3ZGZlM2E5ZDJlYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYyM2JjYzMzYTJmNTQzOGY5OWVhYmZhNWJkMTEyNGI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzMzMzMzMzMywxNi4zNjgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5OTljYjAyOTkxOTRjNDZhYTgyN2JiMDE5YjczZmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzNTFkNTBiZTIzZTQwMTFhYWM4NDVmNzIxMTY4M2ZmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80MzUxZDUwYmUyM2U0MDExYWFjODQ1ZjcyMTE2ODNmZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDtnJzZWdhc3NlIDU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODk5OWNiMDI5OTE5NGM0NmFhODI3YmIwMTliNzNmZTguc2V0Q29udGVudChodG1sXzQzNTFkNTBiZTIzZTQwMTFhYWM4NDVmNzIxMTY4M2ZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjIzYmNjMzNhMmY1NDM4Zjk5ZWFiZmE1YmQxMTI0YjUuYmluZFBvcHVwKHBvcHVwXzg5OTljYjAyOTkxOTRjNDZhYTgyN2JiMDE5YjczZmU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTQzNTVjYjEwNDdkNGFlYWI5MjIwNDcwYTI0N2E1Y2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM2MTExMTExLDE2LjM2ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNhODAwOWQ5YzAxNGVlY2EzYTljZjMwZThhOGI4ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI2MjgyY2QwZGM4NGVjYmE5ZTcyMjI0MjgyNGIxNWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYyNjI4MmNkMGRjODRlY2JhOWU3MjIyNDI4MjRiMTVjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2cnNlZ2Fzc2UgNjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lY2E4MDA5ZDljMDE0ZWVjYTNhOWNmMzBlOGE4YjhlZi5zZXRDb250ZW50KGh0bWxfNjI2MjgyY2QwZGM4NGVjYmE5ZTcyMjI0MjgyNGIxNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NDM1NWNiMTA0N2Q0YWVhYjkyMjA0NzBhMjQ3YTVjYi5iaW5kUG9wdXAocG9wdXBfZWNhODAwOWQ5YzAxNGVlY2EzYTljZjMwZThhOGI4ZWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NGIzNTNlY2YxMzQ0ZGZmYTQ1YjRmMjMxNmYzNmEwYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMzYxMTExMTEsMTYuMzY4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDA0ODViMTIyYjY0YTBlOGRkNzcwZGY5Y2ZiNDk4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kM2RhZmY1MTExMmY0MWY2YWQyZWVlOGY0Y2ZmODE0MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDNkYWZmNTExMTJmNDFmNmFkMmVlZThmNGNmZjgxNDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7Zyc2VnYXNzZSA3PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkMDQ4NWIxMjJiNjRhMGU4ZGQ3NzBkZjljZmI0OTg0LnNldENvbnRlbnQoaHRtbF9kM2RhZmY1MTExMmY0MWY2YWQyZWVlOGY0Y2ZmODE0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0YjM1M2VjZjEzNDRkZmZhNDViNGYyMzE2ZjM2YTBiLmJpbmRQb3B1cChwb3B1cF9mZDA0ODViMTIyYjY0YTBlOGRkNzcwZGY5Y2ZiNDk4NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiMjM2YTIyNGI4ZTQxNTNhNmE4ZGJjYjI1N2IyNjdiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE0MTY2NjY2NywxNi4zNjkxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0MjFmMTJjYWE1NzQ1MzBhZjQ4MDAyZjA5MTI4ODAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2MjM5M2U1YTIzNDQxNDZhYTY0NDY1ZDdjYjZkMGUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNjIzOTNlNWEyMzQ0MTQ2YWE2NDQ2NWQ3Y2I2ZDBlMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDtnJzZWdhc3NlIDg8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQyMWYxMmNhYTU3NDUzMGFmNDgwMDJmMDkxMjg4MDIuc2V0Q29udGVudChodG1sX2Y2MjM5M2U1YTIzNDQxNDZhYTY0NDY1ZDdjYjZkMGUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWIyMzZhMjI0YjhlNDE1M2E2YThkYmNiMjU3YjI2N2IuYmluZFBvcHVwKHBvcHVwX2U0MjFmMTJjYWE1NzQ1MzBhZjQ4MDAyZjA5MTI4ODAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWE4Njg4MWE3ZjRkNDI1YzhmMjkwMzg1NjliMGRhYTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjM2NTU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFiNTFkOWY4NWFmNDJmYjhjMDNiMTQ4MTVjZjVjMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNkZTJhOWU2MTJhNDk1OTg1NmJjYjk1OWVjOGFjZGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkzZGUyYTllNjEyYTQ5NTk4NTZiY2I5NTllYzhhY2RhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2cnNlcGxhdHogMTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWI1MWQ5Zjg1YWY0MmZiOGMwM2IxNDgxNWNmNWMzOC5zZXRDb250ZW50KGh0bWxfOTNkZTJhOWU2MTJhNDk1OTg1NmJjYjk1OWVjOGFjZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYTg2ODgxYTdmNGQ0MjVjOGYyOTAzODU2OWIwZGFhOC5iaW5kUG9wdXAocG9wdXBfNDFiNTFkOWY4NWFmNDJmYjhjMDNiMTQ4MTVjZjVjMzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84OGE2YWM1MTMzNjc0ZjI2OGU4M2RmZmM4N2YxYmViNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxNSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMzQyNTFkMGNjODQ0NTdiOWQwZTYyYWMxZjU4ZjBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhNWUxYzM0YWE2YjQwNWY5NDdmZWU4ODI0N2YyNDZjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83YTVlMWMzNGFhNmI0MDVmOTQ3ZmVlODgyNDdmMjQ2YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDtnJzZXBsYXR6IDM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUzNDI1MWQwY2M4NDQ1N2I5ZDBlNjJhYzFmNThmMGQuc2V0Q29udGVudChodG1sXzdhNWUxYzM0YWE2YjQwNWY5NDdmZWU4ODI0N2YyNDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODhhNmFjNTEzMzY3NGYyNjhlODNkZmZjODdmMWJlYjYuYmluZFBvcHVwKHBvcHVwXzVlMzQyNTFkMGNjODQ0NTdiOWQwZTYyYWMxZjU4ZjBkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWY1NTM1NzA4Mzg3NDk4NDhmNTViOTQ5YTEwMzdiMzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTUsMTYuMzY4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZmI1YzhkZjQyYmM0MmE3ODBiZTk3Mjc4YTFiZDRmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNmY4NTZhZGNjNGE0Mzc2OGFhMjgyN2Q1YTcxYzU2MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTZmODU2YWRjYzRhNDM3NjhhYTI4MjdkNWE3MWM1NjMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7Zyc2VwbGF0eiA0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmYjVjOGRmNDJiYzQyYTc4MGJlOTcyNzhhMWJkNGZiLnNldENvbnRlbnQoaHRtbF9lNmY4NTZhZGNjNGE0Mzc2OGFhMjgyN2Q1YTcxYzU2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVmNTUzNTcwODM4NzQ5ODQ4ZjU1Yjk0OWExMDM3YjMwLmJpbmRQb3B1cChwb3B1cF80ZmI1YzhkZjQyYmM0MmE3ODBiZTk3Mjc4YTFiZDRmYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk3ZTU2ZmJlNmU5OTQzM2E4ZTQ1ZTk3ODE3ZDRkODhiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzODg4ODg4OSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2YzIyMzI1NzUwMDQ1NzBiNTE3ZGY5YTRmYzAwMGVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjZTk4ZWYxNWQ3MjRmZjdhMzhhZmY4Y2RiNGNhODZkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hY2U5OGVmMTVkNzI0ZmY3YTM4YWZmOGNkYjRjYTg2ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDtnJzZXBsYXR6IDU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjZjMjIzMjU3NTAwNDU3MGI1MTdkZjlhNGZjMDAwZWEuc2V0Q29udGVudChodG1sX2FjZTk4ZWYxNWQ3MjRmZjdhMzhhZmY4Y2RiNGNhODZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTdlNTZmYmU2ZTk5NDMzYThlNDVlOTc4MTdkNGQ4OGIuYmluZFBvcHVwKHBvcHVwX2Y2YzIyMzI1NzUwMDQ1NzBiNTE3ZGY5YTRmYzAwMGVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzBmOGIyOGFmOTI3NDBiNWFjNzM0YjY1NWM1ZGEyMmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM4ODg4ODg5LDE2LjM2Nzc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2NlOGY1OTM4Y2JhNDY2ZWIwMmU1ODRiNjcyZWQxNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQyYTNkZTEwN2QzNGNjMThhNjNjZTY3OWEzZDM0YWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU0MmEzZGUxMDdkMzRjYzE4YTYzY2U2NzlhM2QzNGFhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO2cnNlcGxhdHogNjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zY2U4ZjU5MzhjYmE0NjZlYjAyZTU4NGI2NzJlZDE3NS5zZXRDb250ZW50KGh0bWxfNTQyYTNkZTEwN2QzNGNjMThhNjNjZTY3OWEzZDM0YWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMGY4YjI4YWY5Mjc0MGI1YWM3MzRiNjU1YzVkYTIyYy5iaW5kUG9wdXAocG9wdXBfM2NlOGY1OTM4Y2JhNDY2ZWIwMmU1ODRiNjcyZWQxNzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYTY1YTA0ODQzZmI0ZmU2YmY3M2U2ZjIyNDA5Mjk5YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTE2NjY2NjcsMTYuMzY2MTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzQzNDEzZmY4NzU0Nzc5YWEyODlhNGJhYWQzZGY3NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGVkNWFhNTM5ZDg0N2NkYTExMzM0N2ZjMTc4NDY2YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTRlZDVhYTUzOWQ4NDdjZGExMTMzNDdmYzE3ODQ2NmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvbnN0aWdlczogQsO2c2VuZG9yZmVyLUtvbnplcnRzYWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzNDM0MTNmZjg3NTQ3NzlhYTI4OWE0YmFhZDNkZjc2LnNldENvbnRlbnQoaHRtbF8xNGVkNWFhNTM5ZDg0N2NkYTExMzM0N2ZjMTc4NDY2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBhNjVhMDQ4NDNmYjRmZTZiZjczZTZmMjI0MDkyOTljLmJpbmRQb3B1cChwb3B1cF85MzQzNDEzZmY4NzU0Nzc5YWEyODlhNGJhYWQzZGY3Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxZjkxMGQxZDBhNDRhOTJhMzE0YTBhNDI2OTViYmE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzU0MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNTE3Y2I5ZDA4ODc0OTY1OWQ0MGQxMWE1YmNiNWY0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Y2EzNTZlYjY2OTg0ZWU1YTlkNmFhMzU2MjExYTJmYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWNhMzU2ZWI2Njk4NGVlNWE5ZDZhYTM1NjIxMWEyZmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7ZzZW5kb3JmZXItU3RhbW1oYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1MTdjYjlkMDg4NzQ5NjU5ZDQwZDExYTViY2I1ZjQzLnNldENvbnRlbnQoaHRtbF81Y2EzNTZlYjY2OTg0ZWU1YTlkNmFhMzU2MjExYTJmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxZjkxMGQxZDBhNDRhOTJhMzE0YTBhNDI2OTViYmE5LmJpbmRQb3B1cChwb3B1cF8yNTE3Y2I5ZDA4ODc0OTY1OWQ0MGQxMWE1YmNiNWY0Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U0MzM0NDNhMzRlNTRiMmQ4MGRkZGFiYjAzZDc0MDg5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzMzMzMzMywxNi4zNzYzODg4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjZGI0NWYyZDI5YzQ2NTg5MDcyMTRjYzkxMTI5MDUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiZTcyMGJlMTU5YzQzNWI4MjI2NTM0ZDhkZDlmNThiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYmU3MjBiZTE1OWM0MzViODIyNjUzNGQ4ZGQ5ZjU4YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU29uc3RpZ2VzOiBCw7xyZ2VyYmFzdGVpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjZGI0NWYyZDI5YzQ2NTg5MDcyMTRjYzkxMTI5MDUwLnNldENvbnRlbnQoaHRtbF9mYmU3MjBiZTE1OWM0MzViODIyNjUzNGQ4ZGQ5ZjU4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U0MzM0NDNhMzRlNTRiMmQ4MGRkZGFiYjAzZDc0MDg5LmJpbmRQb3B1cChwb3B1cF9iY2RiNDVmMmQyOWM0NjU4OTA3MjE0Y2M5MTEyOTA1MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VhZDA1NjI1MTk5MDRhOGY5Y2FhNGNjZjdjMDM1ZjBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMzg4ODg4OSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlOGQ2NTcwMTlmODRlZTU4MzQxMGJlMWY1OTFmZDhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5ZDE3ZTQ5ZTdiNzQ3ODFhMmQ3NThhNTdkM2Q5ZGY2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wOWQxN2U0OWU3Yjc0NzgxYTJkNzU4YTU3ZDNkOWRmNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDvHJnZXJsaWNoZXMgWmV1Z2hhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWU4ZDY1NzAxOWY4NGVlNTgzNDEwYmUxZjU5MWZkOGYuc2V0Q29udGVudChodG1sXzA5ZDE3ZTQ5ZTdiNzQ3ODFhMmQ3NThhNTdkM2Q5ZGY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWFkMDU2MjUxOTkwNGE4ZjljYWE0Y2NmN2MwMzVmMGMuYmluZFBvcHVwKHBvcHVwX2VlOGQ2NTcwMTlmODRlZTU4MzQxMGJlMWY1OTFmZDhmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzE0ZjU1NzZhMzIxNDcxMzgzM2MxM2ZhOWE5OTFhYjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDQ0NDQ0NDQ0LDE2LjM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyYzU0N2ExYzk0NDRlNWU4ZWI0NTA0NmJmNWQ1N2E4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjYWYwNjBmN2U2NTRhZjFhNmI3YmViNGE5NTA3ZjdjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kY2FmMDYwZjdlNjU0YWYxYTZiN2JlYjRhOTUwN2Y3YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDvHJnZXJzcGl0YWwgYW0gU2Nod2VpbmVtYXJrdDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmM1NDdhMWM5NDQ0ZTVlOGViNDUwNDZiZjVkNTdhOC5zZXRDb250ZW50KGh0bWxfZGNhZjA2MGY3ZTY1NGFmMWE2YjdiZWI0YTk1MDdmN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MTRmNTU3NmEzMjE0NzEzODMzYzEzZmE5YTk5MWFiMy5iaW5kUG9wdXAocG9wdXBfZjJjNTQ3YTFjOTQ0NGU1ZThlYjQ1MDQ2YmY1ZDU3YTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZDExZGRkNmVmOGU0N2I1YWIyODFkYmZhN2RiOWMxZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5OTcyMjIyMjIsMTYuMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTgwNTI0M2ZiMDJmNGVkOGJjZWMxYWE5YzA1MTAyOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQ1YzQwZGMxNGJmNGIzNmJlNTRlOTJhZDI3MTRlOTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE0NWM0MGRjMTRiZjRiMzZiZTU0ZTkyYWQyNzE0ZTk2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO8cmdlcnNwaXRhbCB2b3IgZGVtIEvDpHJudG5lcnRvcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xODA1MjQzZmIwMmY0ZWQ4YmNlYzFhYTljMDUxMDI4Yi5zZXRDb250ZW50KGh0bWxfMTQ1YzQwZGMxNGJmNGIzNmJlNTRlOTJhZDI3MTRlOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZDExZGRkNmVmOGU0N2I1YWIyODFkYmZhN2RiOWMxZS5iaW5kUG9wdXAocG9wdXBfMTgwNTI0M2ZiMDJmNGVkOGJjZWMxYWE5YzA1MTAyOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZmExOTczYTQyYzc0ZmZlOTUyZDQyZmM2YTVlZWE1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTI3Nzc3NzgsMTYuMzcyMjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTE0MTVjZmNiZGI0YTFmOWQzZDg0ODI1OTczOTRkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODIwZDY5Zjg0NWY0YjRmYTI0NWMyNWEyZGZjNGE0ZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzgyMGQ2OWY4NDVmNGI0ZmEyNDVjMjVhMmRmYzRhNGUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7xyZ2Vyc3BpdGFsYmFkPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhMTQxNWNmY2JkYjRhMWY5ZDNkODQ4MjU5NzM5NGQwLnNldENvbnRlbnQoaHRtbF9jODIwZDY5Zjg0NWY0YjRmYTI0NWMyNWEyZGZjNGE0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVmYTE5NzNhNDJjNzRmZmU5NTJkNDJmYzZhNWVlYTViLmJpbmRQb3B1cChwb3B1cF9mYTE0MTVjZmNiZGI0YTFmOWQzZDg0ODI1OTczOTRkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQxMjdkYTFkMmE4MTRlMDY4M2E3M2JmN2Q2MjI0MWFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE2NjY2NjY2NywxNi4zN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTBkZWRmZjUxMDU0OWU5YTA2MGUxZmQ0YTQ2NzkyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMDdiMjYyMmFhYTM0YWRiOTUwMzNmNzRiZDNkNTM3ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjA3YjI2MjJhYWEzNGFkYjk1MDMzZjc0YmQzZDUzN2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7xyZ2Vyc3BpdGFsZm9uZHNoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhMGRlZGZmNTEwNTQ5ZTlhMDYwZTFmZDRhNDY3OTI5LnNldENvbnRlbnQoaHRtbF9mMDdiMjYyMmFhYTM0YWRiOTUwMzNmNzRiZDNkNTM3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxMjdkYTFkMmE4MTRlMDY4M2E3M2JmN2Q2MjI0MWFlLmJpbmRQb3B1cChwb3B1cF8wYTBkZWRmZjUxMDU0OWU5YTA2MGUxZmQ0YTQ2NzkyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U3NDUyMWQ1OTdhYzQxOGZiMGE5OGZlZmFiMTgyOGM0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA0MTY2NjY2NywxNi4zN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmM3NzM3Nzc3NWY0YzZhODQxNTU0ZTczYTc4MmEwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83M2EyMTcwMDI4MTk0Yjc5YWQ0M2E2Y2U3ZGNmNDZiMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzNhMjE3MDAyODE5NGI3OWFkNDNhNmNlN2RjZjQ2YjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNha3JhbGJhdTogQsO8cmdlcnNwaXRhbGtpcmNoZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMmM3NzM3Nzc3NWY0YzZhODQxNTU0ZTczYTc4MmEwNC5zZXRDb250ZW50KGh0bWxfNzNhMjE3MDAyODE5NGI3OWFkNDNhNmNlN2RjZjQ2YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNzQ1MjFkNTk3YWM0MThmYjBhOThmZWZhYjE4MjhjNC5iaW5kUG9wdXAocG9wdXBfZTJjNzczNzc3NzVmNGM2YTg0MTU1NGU3M2E3ODJhMDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZjUyN2EzMjg2NzE0NDczOWE0YmI3YmU0ZTJiMDgxZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MDU1NTU1NTYsMTYuMzYzMDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzI5ZDQ3MWQxNWE0M2YxOWE4ZWRkODJkODUyYTU5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjZlYjEwYWRjOGY0MDE3ODY4MzBlZmRhNDA0YzNkMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzY2ZWIxMGFkYzhmNDAxNzg2ODMwZWZkYTQwNGMzZDAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBCw7xyZ2Vyc3BpdGFsbcO8aGxlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzMjlkNDcxZDE1YTQzZjE5YThlZGQ4MmQ4NTJhNTllLnNldENvbnRlbnQoaHRtbF9jNjZlYjEwYWRjOGY0MDE3ODY4MzBlZmRhNDA0YzNkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmNTI3YTMyODY3MTQ0NzM5YTRiYjdiZTRlMmIwODFkLmJpbmRQb3B1cChwb3B1cF9kMzI5ZDQ3MWQxNWE0M2YxOWE4ZWRkODJkODUyYTU5ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBiNDc5Yzg0NTAwMjQ2NDViZjFjNjEwYWRiODA3N2YwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1LDE2LjM2OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTRhNjM3MGVmZGMzNDg5ZmE5ZDAwZmUyNTk3OGUxZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGVlMmQxNjcxZjE5NGExMTgxNWEyZGNkZDVmYzZhODQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRlZTJkMTY3MWYxOTRhMTE4MTVhMmRjZGQ1ZmM2YTg0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO8cmdlcnNwaXRhbHppbnNoYXVzPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0YTYzNzBlZmRjMzQ4OWZhOWQwMGZlMjU5NzhlMWRkLnNldENvbnRlbnQoaHRtbF80ZWUyZDE2NzFmMTk0YTExODE1YTJkY2RkNWZjNmE4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiNDc5Yzg0NTAwMjQ2NDViZjFjNjEwYWRiODA3N2YwLmJpbmRQb3B1cChwb3B1cF81NGE2MzcwZWZkYzM0ODlmYTlkMDBmZTI1OTc4ZTFkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFmZGE5M2E5MTUzNTQyOGFhNTRiYzhkYWU5ZjZiYzdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA2OTQ0NDQ0NCwxNi4zODM2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwMWFhMzI4YWYxODRiMmVhMDVjZjQxMDQzZGFiODMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljNjQ1MTQ2YzI1MjQ4YTM5MzY2YTIwYTJkY2VkODhhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85YzY0NTE0NmMyNTI0OGEzOTM2NmEyMGEyZGNlZDg4YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDvHJnZXJ0aGVhdGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwMWFhMzI4YWYxODRiMmVhMDVjZjQxMDQzZGFiODMwLnNldENvbnRlbnQoaHRtbF85YzY0NTE0NmMyNTI0OGEzOTM2NmEyMGEyZGNlZDg4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFmZGE5M2E5MTUzNTQyOGFhNTRiYzhkYWU5ZjZiYzdhLmJpbmRQb3B1cChwb3B1cF8yMDFhYTMyOGFmMTg0YjJlYTA1Y2Y0MTA0M2RhYjgzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IxZTkyYjZhNzFmNDRlMzA5Y2ZkMWUyYjYxYzJiZjM4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjIxMzg4ODg4OSwxNi4zNTQxNjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiMTQwMmY3NzViMzQ0MTBiZWFmZWY0YmE0OWE0Mzg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5ZjIwYTg3Y2U3NDQ5ZmE4N2Y2YTk4MjViMWIyZmQ5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lOWYyMGE4N2NlNzQ0OWZhODdmNmE5ODI1YjFiMmZkOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IELDvHJnZXJ2ZXJzb3JndW5nc2hhdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmIxNDAyZjc3NWIzNDQxMGJlYWZlZjRiYTQ5YTQzODcuc2V0Q29udGVudChodG1sX2U5ZjIwYTg3Y2U3NDQ5ZmE4N2Y2YTk4MjViMWIyZmQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjFlOTJiNmE3MWY0NGUzMDljZmQxZTJiNjFjMmJmMzguYmluZFBvcHVwKHBvcHVwXzJiMTQwMmY3NzViMzQ0MTBiZWFmZWY0YmE0OWE0Mzg3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2E3NzRmMGViZWNlNDg2MmFiMGE3ZjRiY2MzYTQ4NTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDIyMjIyMjIyLDE2LjM3MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2FiYWNhOTg2MzIzNGY5Y2JhNDg0YjhlOWI4ZDliOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjA1YmM0M2M4Yzk1NGExN2IyZTEyZGI3N2I5NDM1YTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YwNWJjNDNjOGM5NTRhMTdiMmUxMmRiNzdiOTQzNWE3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO8cm9oYXVzIFN0ZXlyLUZpYXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2FiYWNhOTg2MzIzNGY5Y2JhNDg0YjhlOWI4ZDliOGUuc2V0Q29udGVudChodG1sX2YwNWJjNDNjOGM5NTRhMTdiMmUxMmRiNzdiOTQzNWE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2E3NzRmMGViZWNlNDg2MmFiMGE3ZjRiY2MzYTQ4NTYuYmluZFBvcHVwKHBvcHVwXzdhYmFjYTk4NjMyMzRmOWNiYTQ4NGI4ZTliOGQ5YjhlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGFiMTcyZmQ0NTE0NGZhN2EwNmVhN2E1N2U4YTAwOTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDE2NjY2NjY3LDE2LjM0Nzc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE2YWQ3ODliM2Q4NGM1MGJlOTdjYTM2OWZhODI4MDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTkwZDI1MTdjNjAwNDFlNjg2MWZhOWViMDA1ZDM1M2YgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE5MGQyNTE3YzYwMDQxZTY4NjFmYTllYjAwNWQzNTNmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQsO8cm9tYXNjaGluZW5tdXNldW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE2YWQ3ODliM2Q4NGM1MGJlOTdjYTM2OWZhODI4MDUuc2V0Q29udGVudChodG1sXzE5MGQyNTE3YzYwMDQxZTY4NjFmYTllYjAwNWQzNTNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGFiMTcyZmQ0NTE0NGZhN2EwNmVhN2E1N2U4YTAwOTQuYmluZFBvcHVwKHBvcHVwXzUxNmFkNzg5YjNkODRjNTBiZTk3Y2EzNjlmYTgyODA1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGViNjYwM2I3ZGMxNGMxM2FiNjkyMjk4ZDAwODRhZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDYzODg4ODg5LDE2LjM3NDQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQyNjFlMWQ2M2Y0NGRmN2I3ODBiNDNhYjc2ZDdhNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDAzZTg5MTI1NTcwNDYyYjhiMTAwNTg1NzBhMDNmMjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzAwM2U4OTEyNTU3MDQ2MmI4YjEwMDU4NTcwYTAzZjIxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTYWtyYWxiYXU6IELDvMOfZXJpbm5lbmtsb3N0ZXIgenUgU3QuIEhpZXJvbnltdXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQyNjFlMWQ2M2Y0NGRmN2I3ODBiNDNhYjc2ZDdhNWYuc2V0Q29udGVudChodG1sXzAwM2U4OTEyNTU3MDQ2MmI4YjEwMDU4NTcwYTAzZjIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGViNjYwM2I3ZGMxNGMxM2FiNjkyMjk4ZDAwODRhZTAuYmluZFBvcHVwKHBvcHVwXzE0MjYxZTFkNjNmNDRkZjdiNzgwYjQzYWI3NmQ3YTVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDc3NDg0ZmJlZjAwNGQ1ZDhiMzg5OTI0YTM5NTdhYjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc3Nzc3Nzc4LDE2LjM1ODg4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODM2OTc2NjBjNTVjNDMyOWFmNDBlNjQ3MzY0YTEwNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDUwNTdiMDk0N2Y2NDJkZmI2MjQzMDllODUyYmQ0ZDYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ1MDU3YjA5NDdmNjQyZGZiNjI0MzA5ZTg1MmJkNGQ2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBDYWVzYXJkZW5rbWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzNjk3NjYwYzU1YzQzMjlhZjQwZTY0NzM2NGExMDQzLnNldENvbnRlbnQoaHRtbF80NTA1N2IwOTQ3ZjY0MmRmYjYyNDMwOWU4NTJiZDRkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA3NzQ4NGZiZWYwMDRkNWQ4YjM4OTkyNGEzOTU3YWI3LmJpbmRQb3B1cChwb3B1cF84MzY5NzY2MGM1NWM0MzI5YWY0MGU2NDczNjRhMTA0Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4MjJmM2EyNGFhYjQ1MTk4ZjU3ZThmNDU4OTdiNzgwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEzNjExMTExMSwxNi4zNTg2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3YzIzZWMzMTE4OTQ3MzhhYzAxMTYwMTJhNjE2OTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmZTQwYTNkY2VlYTRhZTk5OTRmZDk3YTBkOGZlOWFhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lZmU0MGEzZGNlZWE0YWU5OTk0ZmQ5N2EwZDhmZTlhYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIEFya2FkZW48L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzdjMjNlYzMxMTg5NDczOGFjMDExNjAxMmE2MTY5Njkuc2V0Q29udGVudChodG1sX2VmZTQwYTNkY2VlYTRhZTk5OTRmZDk3YTBkOGZlOWFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzgyMmYzYTI0YWFiNDUxOThmNTdlOGY0NTg5N2I3ODAuYmluZFBvcHVwKHBvcHVwX2M3YzIzZWMzMTE4OTQ3MzhhYzAxMTYwMTJhNjE2OTY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2Y1NDcxNmEwNDJmNGYwMmI5NzBjMTg2YzE3YzBiNzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTM4ODg4ODg5LDE2LjM1NjM4ODg4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlkNjI3YTExNjVlNGMyYTgyMmZiYzViYWQ2YTFhNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ0NTE3ZWQwZTA5NDZmM2I1NGMyZTg3ZGQ4Yzc4MDggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRkNDUxN2VkMGUwOTQ2ZjNiNTRjMmU4N2RkOGM3ODA4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgQmVldGhvdmVuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5ZDYyN2ExMTY1ZTRjMmE4MjJmYmM1YmFkNmExYTQ5LnNldENvbnRlbnQoaHRtbF80ZDQ1MTdlZDBlMDk0NmYzYjU0YzJlODdkZDhjNzgwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNmNTQ3MTZhMDQyZjRmMDJiOTcwYzE4NmMxN2MwYjcyLmJpbmRQb3B1cChwb3B1cF9lOWQ2MjdhMTE2NWU0YzJhODIyZmJjNWJhZDZhMWE0OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxYjk2OTBlYmZmMzQwNDA4NGNjY2I0NWI1NmM2OTg3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjI1NTU1NTU1NiwxNi4zNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZGNmNWZiN2ExN2E0MjYzYWI5NzczZWIxM2IzZGQ0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMWE2NTk3OGNlZjY0ZTI0OWJlNDA3ZDNiMzlkNjk0OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTFhNjU5NzhjZWY2NGUyNDliZTQwN2QzYjM5ZDY5NDgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBCcmlvbmk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWRjZjVmYjdhMTdhNDI2M2FiOTc3M2ViMTNiM2RkNDkuc2V0Q29udGVudChodG1sX2UxYTY1OTc4Y2VmNjRlMjQ5YmU0MDdkM2IzOWQ2OTQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjFiOTY5MGViZmYzNDA0MDg0Y2NjYjQ1YjU2YzY5ODcuYmluZFBvcHVwKHBvcHVwX2VkY2Y1ZmI3YTE3YTQyNjNhYjk3NzNlYjEzYjNkZDQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWE1NGI0OWM0NTFmNDE5NWE2NGVmOTlhZDA3NWFmYTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDY5NDQ0NDQ0LDE2LjM2ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNlNzg3NThiOGFmNDc0ODlkNTNkMGFlYzk1NWRiMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTMzY2E4YWMzMjQ0NGM1MzlmNDJkMjNmNmZjMzQ4OWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUzM2NhOGFjMzI0NDRjNTM5ZjQyZDIzZjZmYzM0ODlhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgQnLDpHVuZXJob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWNlNzg3NThiOGFmNDc0ODlkNTNkMGFlYzk1NWRiMzUuc2V0Q29udGVudChodG1sXzUzM2NhOGFjMzI0NDRjNTM5ZjQyZDIzZjZmYzM0ODlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWE1NGI0OWM0NTFmNDE5NWE2NGVmOTlhZDA3NWFmYTUuYmluZFBvcHVwKHBvcHVwX2VjZTc4NzU4YjhhZjQ3NDg5ZDUzZDBhZWM5NTVkYjM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWE5OWRmYzdiMjhjNGVlNWEwMTU0YTc2NDcyZmE4NDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTAyNzc3Nzc4LDE2LjM2NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOGE1ZGIyZDYzNGQ0ZjM3OTFkMGRjOThkNTJiMWZjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYjc5OTI5MGM5MTg0MWM3OGE2NzdkNjA5MTE1MjZlZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmI3OTkyOTBjOTE4NDFjNzhhNjc3ZDYwOTExNTI2ZWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBDZW50cmFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4YTVkYjJkNjM0ZDRmMzc5MWQwZGM5OGQ1MmIxZmM3LnNldENvbnRlbnQoaHRtbF9iYjc5OTI5MGM5MTg0MWM3OGE2NzdkNjA5MTE1MjZlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VhOTlkZmM3YjI4YzRlZTVhMDE1NGE3NjQ3MmZhODQ0LmJpbmRQb3B1cChwb3B1cF9hOGE1ZGIyZDYzNGQ0ZjM3OTFkMGRjOThkNTJiMWZjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E5ZjY0NDg1MmJiNzQ0YTc4OGI0YjNhNDcwNDNkZTI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE4ODg4ODg4OSwxNi4zNjMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYWZmMDcxMDFhMDQxMGI4M2Y5YzliYTExNDJmYWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExZWQ5N2I4YjkzMjQzYzViOTY4ODVmZDMyOGEyZjAxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hMWVkOTdiOGI5MzI0M2M1Yjk2ODg1ZmQzMjhhMmYwMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIENpdHk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRhZmYwNzEwMWEwNDEwYjgzZjljOWJhMTE0MmZhZjEuc2V0Q29udGVudChodG1sX2ExZWQ5N2I4YjkzMjQzYzViOTY4ODVmZDMyOGEyZjAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTlmNjQ0ODUyYmI3NDRhNzg4YjRiM2E0NzA0M2RlMjguYmluZFBvcHVwKHBvcHVwXzRkYWZmMDcxMDFhMDQxMGI4M2Y5YzliYTExNDJmYWYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDhmN2Y2YmFmMDNiNDBhYmEwZDJlMTdkNDM4M2ExZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDg4ODg4ODg5LDE2LjM2Nzc3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWQ4ZDdlYmMzZDVmNDY3NWIzYzEyN2Y1NzIyODU2NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQ0YjY5MzBhMjIzNDc0YWI4MGVhYjcxNTZhMmJiMmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJkNGI2OTMwYTIyMzQ3NGFiODBlYWI3MTU2YTJiYjJhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgRGF1bTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZDhkN2ViYzNkNWY0Njc1YjNjMTI3ZjU3MjI4NTY3OC5zZXRDb250ZW50KGh0bWxfMmQ0YjY5MzBhMjIzNDc0YWI4MGVhYjcxNTZhMmJiMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOGY3ZjZiYWYwM2I0MGFiYTBkMmUxN2Q0MzgzYTFkMy5iaW5kUG9wdXAocG9wdXBfOWQ4ZDdlYmMzZDVmNDY3NWIzYzEyN2Y1NzIyODU2NzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNjkxN2JmZDRjYTY0N2M3YjY3OTU3OTU4YjQzZGExMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwODMzMzMzMzMsMTYuMzc1Mjc3Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZmNiYzExN2RkNDA0ZTE2OGM3MGViMGVlOWE0NmM1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTU0NzE3MDEwMmU0ZjE4YTE5ZTM4ZGViNzY5MzI5MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTU1NDcxNzAxMDJlNGYxOGExOWUzOGRlYjc2OTMyOTEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBEaWdsYXM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2ZjYmMxMTdkZDQwNGUxNjhjNzBlYjBlZTlhNDZjNTYuc2V0Q29udGVudChodG1sXzk1NTQ3MTcwMTAyZTRmMThhMTllMzhkZWI3NjkzMjkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTY5MTdiZmQ0Y2E2NDdjN2I2Nzk1Nzk1OGI0M2RhMTMuYmluZFBvcHVwKHBvcHVwXzNmY2JjMTE3ZGQ0MDRlMTY4YzcwZWIwZWU5YTQ2YzU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDI4MGIzZjJmNzJmNDBiZGJmYzc3MmRhN2QzMmM2ODQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTY2NjY2NjY3LDE2LjM4OTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmNiMTdlOWY4YzYzNGVlYjljMWM2ZDk4MGRlMmExZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI3YzE4YWZiYjJiNDMwNDhjMWE3MzgxNWYyMjZmMWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkyN2MxOGFmYmIyYjQzMDQ4YzFhNzM4MTVmMjI2ZjFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgRG9nZW5ob2Y8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNiMTdlOWY4YzYzNGVlYjljMWM2ZDk4MGRlMmExZTcuc2V0Q29udGVudChodG1sXzkyN2MxOGFmYmIyYjQzMDQ4YzFhNzM4MTVmMjI2ZjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDI4MGIzZjJmNzJmNDBiZGJmYzc3MmRhN2QzMmM2ODQuYmluZFBvcHVwKHBvcHVwXzJjYjE3ZTlmOGM2MzRlZWI5YzFjNmQ5ODBkZTJhMWU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjNhMDA3ZTg4ZGUzNDYwYTgyZTAyYmYyMjU5ZjA4NmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODcyMjIyMjIyLDE2LjI5ODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVkNjUwY2M1MDVjNDIxM2JiMzg1MmYxZGY5Yzk3MjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWEwNDRhZTQ5YTc2NDEyMjk5MDIwNTY5YWY1M2U3Y2QgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FhMDQ0YWU0OWE3NjQxMjI5OTAyMDU2OWFmNTNlN2NkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgRG9tbWF5ZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVkNjUwY2M1MDVjNDIxM2JiMzg1MmYxZGY5Yzk3MjUuc2V0Q29udGVudChodG1sX2FhMDQ0YWU0OWE3NjQxMjI5OTAyMDU2OWFmNTNlN2NkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjNhMDA3ZTg4ZGUzNDYwYTgyZTAyYmYyMjU5ZjA4NmMuYmluZFBvcHVwKHBvcHVwX2Y1ZDY1MGNjNTA1YzQyMTNiYjM4NTJmMWRmOWM5NzI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzdjMmU0ODQ2YzhlNDQ1ODk3NDZlMGEyZTA2Njk3MDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTI3Nzc3Nzc4LDE2LjM4MTExMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQxMTFjYzJkMmE2NDFjZGFjMWMyMzA2ZTNlOTA3NjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWIxZWU0MjI3NDZlNDZkNjg2YmMzODEwZGE0ZTkzMTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFiMWVlNDIyNzQ2ZTQ2ZDY4NmJjMzgxMGRhNGU5MzEzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgRG9uYXU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQxMTFjYzJkMmE2NDFjZGFjMWMyMzA2ZTNlOTA3NjIuc2V0Q29udGVudChodG1sXzFiMWVlNDIyNzQ2ZTQ2ZDY4NmJjMzgxMGRhNGU5MzEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzdjMmU0ODQ2YzhlNDQ1ODk3NDZlMGEyZTA2Njk3MDMuYmluZFBvcHVwKHBvcHVwX2VkMTExY2MyZDJhNjQxY2RhYzFjMjMwNmUzZTkwNzYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjI4ZjBmMzU3OTlhNDRiNWFjZjM3ODFhMmRlYjQ0NDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDMzMzMzMzMzLDE2LjM3MDI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTFjOTE3NDE0NWZhNGNiZmFkMDczNGQ4YWVkYjg5YjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWEyNjYxYTQ3ZWI1NGE3NDk2OGU3YTZkNTYyZWE5MmIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzVhMjY2MWE0N2ViNTRhNzQ5NjhlN2E2ZDU2MmVhOTJiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgRmVuc3Rlcmd1Y2tlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMWM5MTc0MTQ1ZmE0Y2JmYWQwNzM0ZDhhZWRiODliOC5zZXRDb250ZW50KGh0bWxfNWEyNjYxYTQ3ZWI1NGE3NDk2OGU3YTZkNTYyZWE5MmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MjhmMGYzNTc5OWE0NGI1YWNmMzc4MWEyZGViNDQ0Ny5iaW5kUG9wdXAocG9wdXBfMTFjOTE3NDE0NWZhNGNiZmFkMDczNGQ4YWVkYjg5YjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNzZjNzRlMGIxYzc0OWMyODY5MjI1OWU5MmY4NWM2ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTU1NTU1NTYsMTYuMzc4NjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOWRjMWJlODZkM2M0NTdjOTI4Mzk4YjhiN2NhNTQ2OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kN2FjODk5Mzk3OGM0MjEyODQzOTE3NzdiZGRhMzg5MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDdhYzg5OTM5NzhjNDIxMjg0MzkxNzc3YmRkYTM4OTEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBHYXJ0ZW5iYXU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTlkYzFiZTg2ZDNjNDU3YzkyODM5OGI4YjdjYTU0Njguc2V0Q29udGVudChodG1sX2Q3YWM4OTkzOTc4YzQyMTI4NDM5MTc3N2JkZGEzODkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzc2Yzc0ZTBiMWM3NDljMjg2OTIyNTllOTJmODVjNmUuYmluZFBvcHVwKHBvcHVwX2U5ZGMxYmU4NmQzYzQ1N2M5MjgzOThiOGI3Y2E1NDY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjUwMjc3Yzk3YzlmNGQwMWIzYTVjNWY2YTFlZTg3ZGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xODk3MjIyMjIyLDE2LjM3NTgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDZiMzEyZWJiMmRkNDg3ODg0NjQzODUxMzRmODI2N2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTIyM2VkNTFkZDQxNDY3YmIzMTk0MjNhN2ZjZDdmZTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkyMjNlZDUxZGQ0MTQ2N2JiMzE5NDIzYTdmY2Q3ZmUwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgR29sZGVnZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NmIzMTJlYmIyZGQ0ODc4ODQ2NDM4NTEzNGY4MjY3ZC5zZXRDb250ZW50KGh0bWxfOTIyM2VkNTFkZDQxNDY3YmIzMTk0MjNhN2ZjZDdmZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNTAyNzdjOTdjOWY0ZDAxYjNhNWM1ZjZhMWVlODdkYy5iaW5kUG9wdXAocG9wdXBfNDZiMzEyZWJiMmRkNDg3ODg0NjQzODUxMzRmODI2N2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZWU1OTQwNjBhZjQ0YzBiOWM0Y2I0MTAyZTIxMjBhMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTk0NDQ0NDQsMTYuMzY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0NzEwMWY1ODQwNTRiNTNiMjAxMGUwYTA2NmQxNjM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyNzMyNmQ4MjRmOTQ4YWVhNTgyOTFlOTBiODkzMTY1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMjczMjZkODI0Zjk0OGFlYTU4MjkxZTkwYjg5MzE2NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIEhhYWc8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQ3MTAxZjU4NDA1NGI1M2IyMDEwZTBhMDY2ZDE2MzYuc2V0Q29udGVudChodG1sXzMyNzMyNmQ4MjRmOTQ4YWVhNTgyOTFlOTBiODkzMTY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGVlNTk0MDYwYWY0NGMwYjljNGNiNDEwMmUyMTIwYTEuYmluZFBvcHVwKHBvcHVwXzU0NzEwMWY1ODQwNTRiNTNiMjAxMGUwYTA2NmQxNjM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmMzZjQ3ZTJmYzMwNDliZmIxNzhkNjgzN2E2OTFhZWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDc1LDE2LjM2OTQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGU0MWRmNmEwZmNiNGMwZmFiNzNhMWI1MWNlOTFlNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDFiMDI4YzAyNjMzNDVkM2E4Yjk5ZDJlOGZkM2MyMGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQxYjAyOGMwMjYzMzQ1ZDNhOGI5OWQyZThmZDNjMjBjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgSGF3ZWxrYTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZTQxZGY2YTBmY2I0YzBmYWI3M2ExYjUxY2U5MWU2Ni5zZXRDb250ZW50KGh0bWxfNDFiMDI4YzAyNjMzNDVkM2E4Yjk5ZDJlOGZkM2MyMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYzNmNDdlMmZjMzA0OWJmYjE3OGQ2ODM3YTY5MWFlZi5iaW5kUG9wdXAocG9wdXBfOGU0MWRmNmEwZmNiNGMwZmFiNzNhMWI1MWNlOTFlNjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jOTFiM2YyNjE5MWU0Yzg2OWViOWMxZmE5ZGU3MjE5NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMjIyMjIyMjIsMTYuMzY4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzBkNjRiMTU1MGE0MWI5ODk2ZjVmYzE5Y2JmOTNiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYzJiOWJkZDc0YzY0MzY4YjYwMGI4NzU5NDlkOWU2MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmMyYjliZGQ3NGM2NDM2OGI2MDBiODc1OTQ5ZDllNjMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBIZWlucmljaGhvZjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzBkNjRiMTU1MGE0MWI5ODk2ZjVmYzE5Y2JmOTNiNC5zZXRDb250ZW50KGh0bWxfMmMyYjliZGQ3NGM2NDM2OGI2MDBiODc1OTQ5ZDllNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOTFiM2YyNjE5MWU0Yzg2OWViOWMxZmE5ZGU3MjE5Ni5iaW5kUG9wdXAocG9wdXBfM2MwZDY0YjE1NTBhNDFiOTg5NmY1ZmMxOWNiZjkzYjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NmYyZTM2MmJiODY0OTI5YjQ3OGZmZjUzNGZlMGRkYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxMTY2NjY2NjcsMTYuMzU4MDU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTFjMGE2ZjRiZWQ0ZGYyODU0MjE2OTJmOGMyNDE5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZmZmYmM4ODZjMTA0MjFhYmM1M2Q4NmZhZTZmMmRmZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGZmZmJjODg2YzEwNDIxYWJjNTNkODZmYWU2ZjJkZmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBIb2ZmZWxsbmVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxMWMwYTZmNGJlZDRkZjI4NTQyMTY5MmY4YzI0MTk5LnNldENvbnRlbnQoaHRtbF84ZmZmYmM4ODZjMTA0MjFhYmM1M2Q4NmZhZTZmMmRmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc2ZjJlMzYyYmI4NjQ5MjliNDc4ZmZmNTM0ZmUwZGRjLmJpbmRQb3B1cChwb3B1cF8yMTFjMGE2ZjRiZWQ0ZGYyODU0MjE2OTJmOGMyNDE5OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5MGZjODk3NmU4NTQ0ZWZhMzQ1MjA3MDQ5NTQ5ZWMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAxMTExMTExMSwxNi4zNzMwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5MTJmOTk4NDk0OTQxYjY4NjE4ODMyNThlNmVjZWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5MGZiYTUxOTliZjQzOWQ4YzU4N2ZlNTA4NTNjNzIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84OTBmYmE1MTk5YmY0MzlkOGM1ODdmZTUwODUzYzcyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIEltcGVyaWFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5MTJmOTk4NDk0OTQxYjY4NjE4ODMyNThlNmVjZWU2LnNldENvbnRlbnQoaHRtbF84OTBmYmE1MTk5YmY0MzlkOGM1ODdmZTUwODUzYzcyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ5MGZjODk3NmU4NTQ0ZWZhMzQ1MjA3MDQ5NTQ5ZWMwLmJpbmRQb3B1cChwb3B1cF80OTEyZjk5ODQ5NDk0MWI2ODYxODgzMjU4ZTZlY2VlNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM3OTY1ZjQ3MGRiZTQ0ZmVhMGU2OTE5NDBhZWVhMzE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEsMTYuMzcwNTU1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMGVkMjBjNjIxNWM0ZTAzODg4YzkzMDYzZjQzMzc1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzEyNjMzNDBiNDE0NjFjYjNkMWRkZDFkZGIxYWYxMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODMxMjYzMzQwYjQxNDYxY2IzZDFkZGQxZGRiMWFmMTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBLb3JiPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwZWQyMGM2MjE1YzRlMDM4ODhjOTMwNjNmNDMzNzU5LnNldENvbnRlbnQoaHRtbF84MzEyNjMzNDBiNDE0NjFjYjNkMWRkZDFkZGIxYWYxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM3OTY1ZjQ3MGRiZTQ0ZmVhMGU2OTE5NDBhZWVhMzE1LmJpbmRQb3B1cChwb3B1cF8wMGVkMjBjNjIxNWM0ZTAzODg4YzkzMDYzZjQzMzc1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JjNGU2ODM5Mzk4YTQ3ZWM5Yjk2M2QyMDlkMjA2NTJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEwODMzMzMzMywxNi4zODM2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5MmUxMmEwYjdhYjQyNzBhZWI4OGZjNDY3ZTQ4OWY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4OTRkMmQ1MDAxMDQ3YzQ5MWZkMDk3YWMxZGQwNDU1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ODk0ZDJkNTAwMTA0N2M0OTFmZDA5N2FjMWRkMDQ1NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIEtyaXN0YWxsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5MmUxMmEwYjdhYjQyNzBhZWI4OGZjNDY3ZTQ4OWY2LnNldENvbnRlbnQoaHRtbF83ODk0ZDJkNTAwMTA0N2M0OTFmZDA5N2FjMWRkMDQ1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JjNGU2ODM5Mzk4YTQ3ZWM5Yjk2M2QyMDlkMjA2NTJlLmJpbmRQb3B1cChwb3B1cF9hOTJlMTJhMGI3YWI0MjcwYWViODhmYzQ2N2U0ODlmNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM0OWE1NDEyMDNkYjQwY2Y5MDI0ZDYwMmE4YjgzYzMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjExMzg4ODg4OSwxNi4zNjgwNTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkY2Y4NmU5MDdiODQyMjA5NzFlNmRjNjVlODU2NmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3NzRiYmU0ZDAwZjQyOGQ5OGNlMzZmMzg4MTEzNTE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNzc0YmJlNGQwMGY0MjhkOThjZTM2ZjM4ODExMzUxNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIEt1Z2VsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkY2Y4NmU5MDdiODQyMjA5NzFlNmRjNjVlODU2NmU3LnNldENvbnRlbnQoaHRtbF8xNzc0YmJlNGQwMGY0MjhkOThjZTM2ZjM4ODExMzUxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0OWE1NDEyMDNkYjQwY2Y5MDI0ZDYwMmE4YjgzYzMyLmJpbmRQb3B1cChwb3B1cF83ZGNmODZlOTA3Yjg0MjIwOTcxZTZkYzY1ZTg1NjZlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ4NTNkNmIzMmNmZjRlMjViNjY2NGQ1ZDE0MTM4OWQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEyNzc3Nzc3OCwxNi4zNjY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxNTlkZmY3NzhhZjRhYWQ4ZjZhYzg0ZDk4ZWVmYjhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmMzJiODYyYzdjODQ2MmRhOTU0ODVkMmNmNmZmZTZhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iZjMyYjg2MmM3Yzg0NjJkYTk1NDg1ZDJjZjZmZmU2YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIExvdXZyZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTU5ZGZmNzc4YWY0YWFkOGY2YWM4NGQ5OGVlZmI4ZS5zZXRDb250ZW50KGh0bWxfYmYzMmI4NjJjN2M4NDYyZGE5NTQ4NWQyY2Y2ZmZlNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ODUzZDZiMzJjZmY0ZTI1YjY2NjRkNWQxNDEzODlkMy5iaW5kUG9wdXAocG9wdXBfMDE1OWRmZjc3OGFmNGFhZDhmNmFjODRkOThlZWZiOGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNzkwNThmYjc4YjQ0MmY0YTAxNzcxZGNhZDgzMzg4ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMjIyMjIyMjIsMTYuMzUxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmUwN2UyNmU3YjI0YWI1Yjg5MGVlYTljOGViMjZkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTk4Y2E5NDkzMGM0OTA5OTNiODdiMDViZDYwY2U3NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmE5OGNhOTQ5MzBjNDkwOTkzYjg3YjA1YmQ2MGNlNzQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBMdXJpb248L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWZlMDdlMjZlN2IyNGFiNWI4OTBlZWE5YzhlYjI2ZDkuc2V0Q29udGVudChodG1sX2ZhOThjYTk0OTMwYzQ5MDk5M2I4N2IwNWJkNjBjZTc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDc5MDU4ZmI3OGI0NDJmNGEwMTc3MWRjYWQ4MzM4OGYuYmluZFBvcHVwKHBvcHVwXzVmZTA3ZTI2ZTdiMjRhYjViODkwZWVhOWM4ZWIyNmQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWRkYjgyM2NkMTcwNDhkOWI0Mzg3YjhjOTgwNDM2ZGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTY2NjY2NjY3LDE2LjM4MDU1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNmMTI1NWQxYTZlNGQyYWIyYjA2MzQwNWQzNWI0MTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmE3ZTVmNDRmYTY4NDdjYmI3MmQ3ODYzNDg4MjY2M2MgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZhN2U1ZjQ0ZmE2ODQ3Y2JiNzJkNzg2MzQ4ODI2NjNjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgTWFnaXN0cmF0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjZjEyNTVkMWE2ZTRkMmFiMmIwNjM0MDVkMzViNDE2LnNldENvbnRlbnQoaHRtbF82YTdlNWY0NGZhNjg0N2NiYjcyZDc4NjM0ODgyNjYzYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVkZGI4MjNjZDE3MDQ4ZDliNDM4N2I4Yzk4MDQzNmRjLmJpbmRQb3B1cChwb3B1cF9lY2YxMjU1ZDFhNmU0ZDJhYjJiMDYzNDA1ZDM1YjQxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI3YmZjNzY0MzgwYTRkOWJhMGFkNThlY2JkNTI5NDYyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTkxMzg4ODg4OSwxNi4zODU1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwOTEyYTM5N2QzOTQwOWNiNmY2MWZjODdjM2I5ZTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjNmYwODVmMjgwMDQ5ODA5NTkyZDM0MWE1ZmZhYjIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yYzZmMDg1ZjI4MDA0OTgwOTU5MmQzNDFhNWZmYWIyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIE1ldGVvcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDkxMmEzOTdkMzk0MDljYjZmNjFmYzg3YzNiOWU1Ny5zZXRDb250ZW50KGh0bWxfMmM2ZjA4NWYyODAwNDk4MDk1OTJkMzQxYTVmZmFiMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yN2JmYzc2NDM4MGE0ZDliYTBhZDU4ZWNiZDUyOTQ2Mi5iaW5kUG9wdXAocG9wdXBfZTA5MTJhMzk3ZDM5NDA5Y2I2ZjYxZmM4N2MzYjllNTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMjUzYTFjMTZiMmM0Yjg5YTgxNzcwZDAxMTdmNGExNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwOTcyMjIyMjIsMTYuMzgxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDZkYzcxYWIzMmY0ZTJkOGI5YmIyYjdiY2M2ZmViNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjM0YjIwMDBiMDk0NTVjOTNiZGZlMThlNTUzMDNlNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDIzNGIyMDAwYjA5NDU1YzkzYmRmZTE4ZTU1MzAzZTQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBNaW5pc3Rlcml1bTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDZkYzcxYWIzMmY0ZTJkOGI5YmIyYjdiY2M2ZmViNi5zZXRDb250ZW50KGh0bWxfMDIzNGIyMDAwYjA5NDU1YzkzYmRmZTE4ZTU1MzAzZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMjUzYTFjMTZiMmM0Yjg5YTgxNzcwZDAxMTdmNGExNC5iaW5kUG9wdXAocG9wdXBfYzQ2ZGM3MWFiMzJmNGUyZDhiOWJiMmI3YmNjNmZlYjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NWVlN2EyOTdjNzc0ZGI4OWUwNmFjNzVkMjFlZDM3MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNTI3Nzc3NzgsMTYuMzU0MTY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWNkODA1OTBjMTg0YjNlYTRjYTM4NDBhMTY3OGE1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Yjg3OGQ1YWIxZjU0MmMzYjg1ZGY2YjQwNTQxNDM1NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWI4NzhkNWFiMWY1NDJjM2I4NWRmNmI0MDU0MTQzNTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBNaXR0ZXJoYXVzZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VjZDgwNTkwYzE4NGIzZWE0Y2EzODQwYTE2NzhhNTIuc2V0Q29udGVudChodG1sXzliODc4ZDVhYjFmNTQyYzNiODVkZjZiNDA1NDE0MzU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTVlZTdhMjk3Yzc3NGRiODllMDZhYzc1ZDIxZWQzNzEuYmluZFBvcHVwKHBvcHVwX2NlY2Q4MDU5MGMxODRiM2VhNGNhMzg0MGExNjc4YTUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWFhZWIwZDlkYmQ5NDY3Zjk5YjAzNTQ1M2M4ZjIxMDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTIyMjIyMjIyLDE2LjM1NDcyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDI1MjQzNmJmMTA1NGUzZGI4ZjYxYWUyYzNjYmVhYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzFiOWRmYTgwNjVmNDdlYmI5YjU0NGMwOGNkNWI1ZmUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcxYjlkZmE4MDY1ZjQ3ZWJiOWI1NDRjMDhjZDViNWZlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgTW9ub3BvbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMjUyNDM2YmYxMDU0ZTNkYjhmNjFhZTJjM2NiZWFhMS5zZXRDb250ZW50KGh0bWxfNzFiOWRmYTgwNjVmNDdlYmI5YjU0NGMwOGNkNWI1ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYWFlYjBkOWRiZDk0NjdmOTliMDM1NDUzYzhmMjEwMy5iaW5kUG9wdXAocG9wdXBfZDI1MjQzNmJmMTA1NGUzZGI4ZjYxYWUyYzNjYmVhYTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NjM4ZGJhY2ZkODc0Y2Y2ODVjMzY5ZmZkY2U5NGIzNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMTExMTExMTEsMTYuMzY3MjIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mM2U4NjIzNTA5MjE0NDdjYTM4NDk4ZTdjMDY2NDNhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTFjNmQ1ZWI5ZGI0MDQ4YWRlYWYzNTQ5MjlhMjA4YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTUxYzZkNWViOWRiNDA0OGFkZWFmMzU0OTI5YTIwOGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBNdXNldW08L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjNlODYyMzUwOTIxNDQ3Y2EzODQ5OGU3YzA2NjQzYTMuc2V0Q29udGVudChodG1sX2U1MWM2ZDVlYjlkYjQwNDhhZGVhZjM1NDkyOWEyMDhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzYzOGRiYWNmZDg3NGNmNjg1YzM2OWZmZGNlOTRiMzYuYmluZFBvcHVwKHBvcHVwX2YzZTg2MjM1MDkyMTQ0N2NhMzg0OThlN2MwNjY0M2EzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGEyOGNjODI3MmQwNDQ3MGExMGY3ZWY0Y2YyZGZhOTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDUsMTYuMzUyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmYyMGJjZjFmYTg0MGI0YTFiOGRlZTMwNmZhNDI4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYjA0OThmYjMwZTA0Mjg2YmExMGQ5OGZhNjg4NzhmYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmIwNDk4ZmIzMGUwNDI4NmJhMTBkOThmYTY4ODc4ZmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBOZXBvbXVrPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyZjIwYmNmMWZhODQwYjRhMWI4ZGVlMzA2ZmE0MjhkLnNldENvbnRlbnQoaHRtbF8yYjA0OThmYjMwZTA0Mjg2YmExMGQ5OGZhNjg4NzhmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBhMjhjYzgyNzJkMDQ0NzBhMTBmN2VmNGNmMmRmYTk0LmJpbmRQb3B1cChwb3B1cF8zMmYyMGJjZjFmYTg0MGI0YTFiOGRlZTMwNmZhNDI4ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg0OGM0Yjc5NmYzMjQzZjBiY2NlYjg2MzYyODEyNGJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE4ODg4ODg4OSwxNi4zODA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhNzIzYTNiODE3NjQ5NDBiYTlhZjVkYTAxM2Y1ZWUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwODlkOGFiOTU4OTQ5YTk5NTM1ZTJkMWFhNDVkZGI4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lMDg5ZDhhYjk1ODk0OWE5OTUzNWUyZDFhYTQ1ZGRiOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIE5pZWJhdWVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNzIzYTNiODE3NjQ5NDBiYTlhZjVkYTAxM2Y1ZWUxLnNldENvbnRlbnQoaHRtbF9lMDg5ZDhhYjk1ODk0OWE5OTUzNWUyZDFhYTQ1ZGRiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg0OGM0Yjc5NmYzMjQzZjBiY2NlYjg2MzYyODEyNGJhLmJpbmRQb3B1cChwb3B1cF9hYTcyM2EzYjgxNzY0OTQwYmE5YWY1ZGEwMTNmNWVlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM5N2Q0ZjllNjJhZjQ1NzI5YTMzYzM2NjliNjQyY2M2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjAzMDU1NTU1NiwxNi4zNzIyMjIyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhOTAxYWUyNmYxZTRlZjViZGU1ZGJjYjg0ZTQxZGEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmOThmYzhlMTBkNjRhMDliNjQ1NTI1MWI3ODQzMzgyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zZjk4ZmM4ZTEwZDY0YTA5YjY0NTUyNTFiNzg0MzM4MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFBhcnNpZmFsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhOTAxYWUyNmYxZTRlZjViZGU1ZGJjYjg0ZTQxZGEzLnNldENvbnRlbnQoaHRtbF8zZjk4ZmM4ZTEwZDY0YTA5YjY0NTUyNTFiNzg0MzM4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM5N2Q0ZjllNjJhZjQ1NzI5YTMzYzM2NjliNjQyY2M2LmJpbmRQb3B1cChwb3B1cF8yYTkwMWFlMjZmMWU0ZWY1YmRlNWRiY2I4NGU0MWRhMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYzZjQ5OTZmMDJlODQ4ZjI5MDRjNzYyMzRkNmIwYzIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA3NSwxNi4zODA1NTU1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1NDcwZThjZjZhMjQ3YzZiYjRhNjlhNTE1NDBhYmI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1ZDE4YzBmM2I2ZDQ1ZGViNDA5ZjBmZGYwY2IwM2Y2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNWQxOGMwZjNiNmQ0NWRlYjQwOWYwZmRmMGNiMDNmNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFByw7xja2VsPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1NDcwZThjZjZhMjQ3YzZiYjRhNjlhNTE1NDBhYmI5LnNldENvbnRlbnQoaHRtbF9lNWQxOGMwZjNiNmQ0NWRlYjQwOWYwZmRmMGNiMDNmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYzZjQ5OTZmMDJlODQ4ZjI5MDRjNzYyMzRkNmIwYzIxLmJpbmRQb3B1cChwb3B1cF83NTQ3MGU4Y2Y2YTI0N2M2YmI0YTY5YTUxNTQwYWJiOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EwYjk2OWRiZTczZTQxOTY5OTAwZWNjOGFkOTc3YWRjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1Mjc3Nzc3OCwxNi4zNTc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NWYxZjFlZjZjMDQ4ZDNhYTk4MWFmOTM5YThkZTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0OWI0MmZiNTk4MDRhNTU5NGYxNzE1Yjg0NDM0M2U1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNDliNDJmYjU5ODA0YTU1OTRmMTcxNWI4NDQzNDNlNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFJhaW11bmQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk1ZjFmMWVmNmMwNDhkM2FhOTgxYWY5MzlhOGRlNjAuc2V0Q29udGVudChodG1sX2E0OWI0MmZiNTk4MDRhNTU5NGYxNzE1Yjg0NDM0M2U1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTBiOTY5ZGJlNzNlNDE5Njk5MDBlY2M4YWQ5NzdhZGMuYmluZFBvcHVwKHBvcHVwX2Y5NWYxZjFlZjZjMDQ4ZDNhYTk4MWFmOTM5YThkZTYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTZhYTQ1Njk2MWUxNGU0NmE4YjM0ZTUwZDM3ZDk3MDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTY2NjY2NjY3LDE2LjM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlOGRhMTU2OTZlODQyM2RiNzBhZjk2OGQyY2MyNGRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5ZmYzZTI3YTk3NjRiZjliZmY4OWE5ZDBlNGFmNGNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84OWZmM2UyN2E5NzY0YmY5YmZmODlhOWQwZTRhZjRjYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFJlaXNlbmxlaXRuZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU4ZGExNTY5NmU4NDIzZGI3MGFmOTY4ZDJjYzI0ZGMuc2V0Q29udGVudChodG1sXzg5ZmYzZTI3YTk3NjRiZjliZmY4OWE5ZDBlNGFmNGNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTZhYTQ1Njk2MWUxNGU0NmE4YjM0ZTUwZDM3ZDk3MDAuYmluZFBvcHVwKHBvcHVwX2FlOGRhMTU2OTZlODQyM2RiNzBhZjk2OGQyY2MyNGRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGYxOWMwN2I5NDhlNDhjZmJhOWVlZTM2MWIzMzMwYmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjM3NDE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjhmOTRkYzFlY2VlNDIzMTlhYTI1YzJmNjIyOWE5YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTEyZWM4NWEwNzU0NDQ3ZTljZDU4MjJlMDhiZmZlOTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzExMmVjODVhMDc1NDQ0N2U5Y2Q1ODIyZTA4YmZmZTk4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgUmVzaWRlbno8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhmOTRkYzFlY2VlNDIzMTlhYTI1YzJmNjIyOWE5YzIuc2V0Q29udGVudChodG1sXzExMmVjODVhMDc1NDQ0N2U5Y2Q1ODIyZTA4YmZmZTk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGYxOWMwN2I5NDhlNDhjZmJhOWVlZTM2MWIzMzMwYmMuYmluZFBvcHVwKHBvcHVwX2Y4Zjk0ZGMxZWNlZTQyMzE5YWEyNWMyZjYyMjlhOWMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2ExZjg4ZTZiZDFkNGY1ZmI4NTJjYzdlN2M0MTdjYWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTMwNTU1NTU2LDE2LjMxOTE2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTg2ZDhmOTk0ZGYxNDQzYmEzMDFhYTY2NDlkM2U1NzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJjYzliMTEwZWJjNDg3NDhjZGI0Yjk2NjBiNjYyMDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiY2M5YjExMGViYzQ4NzQ4Y2RiNGI5NjYwYjY2MjA5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgUml0dGVyICgxNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg2ZDhmOTk0ZGYxNDQzYmEzMDFhYTY2NDlkM2U1NzMuc2V0Q29udGVudChodG1sXzRiY2M5YjExMGViYzQ4NzQ4Y2RiNGI5NjYwYjY2MjA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2ExZjg4ZTZiZDFkNGY1ZmI4NTJjYzdlN2M0MTdjYWQuYmluZFBvcHVwKHBvcHVwXzk4NmQ4Zjk5NGRmMTQ0M2JhMzAxYWE2NjQ5ZDNlNTczKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjliOTUwZTM4ZjQ3NDNhNjk2ZjcwMjY3Y2RmZWFmNGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTgwNTU1NTU2LDE2LjM1MDI3Nzc3NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWZlMDdhYzYxZDBmNGQ1NTliZjMwMDhhMGM3MjI3ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdmYWI3ODlmZjljNDNkZGE1NzNiMzRmM2UzNmFiNTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE3ZmFiNzg5ZmY5YzQzZGRhNTczYjM0ZjNlMzZhYjUwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgUml0dGVyICg2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZmUwN2FjNjFkMGY0ZDU1OWJmMzAwOGEwYzcyMjdmZS5zZXRDb250ZW50KGh0bWxfMTdmYWI3ODlmZjljNDNkZGE1NzNiMzRmM2UzNmFiNTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82OWI5NTBlMzhmNDc0M2E2OTZmNzAyNjdjZGZlYWY0Yi5iaW5kUG9wdXAocG9wdXBfZWZlMDdhYzYxZDBmNGQ1NTliZjMwMDhhMGM3MjI3ZmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZWFjZTJhM2FhMGU0NmUwYjhhZWQ2YmM0ODZhZTBiNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMzYxMTExMTEsMTYuMzY5NDQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNGY0ZDIzODNlNjk0ZmMyYjNkMTY2YjQ1OWM2ZDVkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDIzMDE1YzdmZTU0MDk3OTVkN2Q0Nzg2MWU5M2M1OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGQyMzAxNWM3ZmU1NDA5Nzk1ZDdkNDc4NjFlOTNjNTgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBTYWNoZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjRmNGQyMzgzZTY5NGZjMmIzZDE2NmI0NTljNmQ1ZDYuc2V0Q29udGVudChodG1sXzBkMjMwMTVjN2ZlNTQwOTc5NWQ3ZDQ3ODYxZTkzYzU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmVhY2UyYTNhYTBlNDZlMGI4YWVkNmJjNDg2YWUwYjYuYmluZFBvcHVwKHBvcHVwXzI0ZjRkMjM4M2U2OTRmYzJiM2QxNjZiNDU5YzZkNWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGRmNjA4YzAxZTY5NDdlYTlmYjI5YjNiZGY0MTI0ODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTc3Nzc3Nzc4LDE2LjM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3YjVmNWViZmQ4ZTQxNDZiZTc0OGY0ZjhlYzFlMTUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlNDVlOTViODQ2ZDQ1ODU4NDBkMzQzMWY0OTA1MDc2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZTQ1ZTk1Yjg0NmQ0NTg1ODQwZDM0MzFmNDkwNTA3NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFNhdm95PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3YjVmNWViZmQ4ZTQxNDZiZTc0OGY0ZjhlYzFlMTUyLnNldENvbnRlbnQoaHRtbF8xZTQ1ZTk1Yjg0NmQ0NTg1ODQwZDM0MzFmNDkwNTA3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBkZjYwOGMwMWU2OTQ3ZWE5ZmIyOWIzYmRmNDEyNDgzLmJpbmRQb3B1cChwb3B1cF9iN2I1ZjVlYmZkOGU0MTQ2YmU3NDhmNGY4ZWMxZTE1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRkMmZhNmJjZTJiMTQ2MmFiOTU5NzQ1YmEwNDZlZmNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjE2MTExMTExMSwxNi4zNjY5NDQ0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyZGY4MDllMTcwYjRmNWI4Y2E5YzNkNjQ3N2VlNTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2NzNmMjA3ZDlkYTQwYzFiNjgzODc3MGIxZjQ5YTU4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNjczZjIwN2Q5ZGE0MGMxYjY4Mzg3NzBiMWY0OWE1OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFNjaG90dGVucmluZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMmRmODA5ZTE3MGI0ZjViOGNhOWMzZDY0NzdlZTUwMi5zZXRDb250ZW50KGh0bWxfZDY3M2YyMDdkOWRhNDBjMWI2ODM4NzcwYjFmNDlhNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZDJmYTZiY2UyYjE0NjJhYjk1OTc0NWJhMDQ2ZWZjZi5iaW5kUG9wdXAocG9wdXBfMDJkZjgwOWUxNzBiNGY1YjhjYTljM2Q2NDc3ZWU1MDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZmRkOWYwMmM0YTM0NWY2YTg2ZTRiYzg0NTkxOTRhMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwMTM4ODg4ODksMTYuMzczNjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OThjMjk4NjA3Yjk0OTZiOTk2Y2I0ZTcwZjUwMDk3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDU4ZDIxYTY3M2I0ZjgyYmY2YzU5MzJhN2IyMDM4NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTA1OGQyMWE2NzNiNGY4MmJmNmM1OTMyYTdiMjAzODUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBTY2h3YXJ6ZW5iZXJnPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5OGMyOTg2MDdiOTQ5NmI5OTZjYjRlNzBmNTAwOTdhLnNldENvbnRlbnQoaHRtbF81MDU4ZDIxYTY3M2I0ZjgyYmY2YzU5MzJhN2IyMDM4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVmZGQ5ZjAyYzRhMzQ1ZjZhODZlNGJjODQ1OTE5NGEyLmJpbmRQb3B1cChwb3B1cF84OThjMjk4NjA3Yjk0OTZiOTk2Y2I0ZTcwZjUwMDk3YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM3OTg3YjdiYmY5YjQ3YzQ5YjkxMTYzNmJlZjM2M2NhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjEwODMzMzMzMywxNi4zNzg2MTExMTExXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxNDFmOTg1NzY3ZTQzNTRiNmEyZTk5Mzc3NzRhNTIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4MjIzYWQ4ZDVmNjQ0YzQ4NjQxNTE0NWNhNmVmYzE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ODIyM2FkOGQ1ZjY0NGM0ODY0MTUxNDVjYTZlZmMxNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFNpbGxlciAoMSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE0MWY5ODU3NjdlNDM1NGI2YTJlOTkzNzc3NGE1MjIuc2V0Q29udGVudChodG1sXzQ4MjIzYWQ4ZDVmNjQ0YzQ4NjQxNTE0NWNhNmVmYzE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzc5ODdiN2JiZjliNDdjNDliOTExNjM2YmVmMzYzY2EuYmluZFBvcHVwKHBvcHVwXzUxNDFmOTg1NzY3ZTQzNTRiNmEyZTk5Mzc3NzRhNTIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2FmMjc0MDEwNzE1NGNhYThiMGU5N2MzNTY2NjcyYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNjcyMjIyMjIyLDE2LjMwODYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjlkNTI3NGVjNWEzNDAwZjk0NWM3ZGM1ODkwMjIwZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBiNDk3NWQxMDhhNDQyN2E5NGM2YzE2ZTNlMjEwODEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcwYjQ5NzVkMTA4YTQ0MjdhOTRjNmMxNmUzZTIxMDgxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgU2lsbGVyICgxMik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjlkNTI3NGVjNWEzNDAwZjk0NWM3ZGM1ODkwMjIwZmIuc2V0Q29udGVudChodG1sXzcwYjQ5NzVkMTA4YTQ0MjdhOTRjNmMxNmUzZTIxMDgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2FmMjc0MDEwNzE1NGNhYThiMGU5N2MzNTY2NjcyYjIuYmluZFBvcHVwKHBvcHVwX2Y5ZDUyNzRlYzVhMzQwMGY5NDVjN2RjNTg5MDIyMGZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDMyMjI4MzA4Y2JhNGM5YTljZGQ0MDg2MWFkZDI0NTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDA1NTU1NTU2LDE2LjM1NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI5MWYxMWM0ZGRjNDY4ODg0YTZiNmM5NGJlNGQyMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWIyMWJjMzY0MjZjNGJhZWJiYmJjNjQ2MTI2Yzg1MjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzViMjFiYzM2NDI2YzRiYWViYmJiYzY0NjEyNmM4NTI1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgU2lsbGVyICg3KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjkxZjExYzRkZGM0Njg4ODRhNmI2Yzk0YmU0ZDIxMC5zZXRDb250ZW50KGh0bWxfNWIyMWJjMzY0MjZjNGJhZWJiYmJjNjQ2MTI2Yzg1MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMzIyMjgzMDhjYmE0YzlhOWNkZDQwODYxYWRkMjQ1My5iaW5kUG9wdXAocG9wdXBfYjI5MWYxMWM0ZGRjNDY4ODg0YTZiNmM5NGJlNGQyMTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZDA0MTMzNWUxODk0NTBlYTA1MTIzMTVmMjVkYzk3YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIsMTYuMzYxMTExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzBkZWRiMDlkZmQ0ZDc4OWNjMDMxN2RkMmM4OGQwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjRmMDViMzExOTU0YTAzOGRjM2FjYWIzMmQyYmQ0MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDY0ZjA1YjMxMTk1NGEwMzhkYzNhY2FiMzJkMmJkNDMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBTcGVybDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzBkZWRiMDlkZmQ0ZDc4OWNjMDMxN2RkMmM4OGQwMi5zZXRDb250ZW50KGh0bWxfZDY0ZjA1YjMxMTk1NGEwMzhkYzNhY2FiMzJkMmJkNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZDA0MTMzNWUxODk0NTBlYTA1MTIzMTVmMjVkYzk3YS5iaW5kUG9wdXAocG9wdXBfZDMwZGVkYjA5ZGZkNGQ3ODljYzAzMTdkZDJjODhkMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYjMwNmQ5MTJhOGM0NTVkOWZkMDcyNWZjZDEzMWY1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNjY2NjY2NjcsMTYuMzc5NzIyMjIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZWZhZmQyYTdlNDI0YjlmODQzYWZmODc5MGMxMzc3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTE1YTJkN2VjM2I0YTM5ODViMWFhNTZmZGQwYWEwZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDkxNWEyZDdlYzNiNGEzOTg1YjFhYTU2ZmRkMGFhMGUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBTdGFkdHBhcms8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWVmYWZkMmE3ZTQyNGI5Zjg0M2FmZjg3OTBjMTM3Nzkuc2V0Q29udGVudChodG1sXzQ5MTVhMmQ3ZWMzYjRhMzk4NWIxYWE1NmZkZDBhYTBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmIzMDZkOTEyYThjNDU1ZDlmZDA3MjVmY2QxMzFmNTguYmluZFBvcHVwKHBvcHVwXzVlZmFmZDJhN2U0MjRiOWY4NDNhZmY4NzkwYzEzNzc5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGY4OWM0OTY5YjVkNGIwOWJmZWY0MzE0ZGQ4YjUzMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMDMwNTU1NTU2LDE2LjM2MzYxMTExMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU4MzYyZGEyNDFlNDVjYTljNDM3YTU3MTJmYTcxNTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEzMDZjNGMyOTJiNDgwMDkwN2JmOTNkNDkxYzc4OTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQxMzA2YzRjMjkyYjQ4MDA5MDdiZjkzZDQ5MWM3ODk4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgVm9sa3NnYXJ0ZW48L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWU4MzYyZGEyNDFlNDVjYTljNDM3YTU3MTJmYTcxNTIuc2V0Q29udGVudChodG1sXzQxMzA2YzRjMjkyYjQ4MDA5MDdiZjkzZDQ5MWM3ODk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGY4OWM0OTY5YjVkNGIwOWJmZWY0MzE0ZGQ4YjUzMDAuYmluZFBvcHVwKHBvcHVwX2VlODM2MmRhMjQxZTQ1Y2E5YzQzN2E1NzEyZmE3MTUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGMwOTBhOWVmNTM1NGM0MzhiZjFmZTgxM2E0NGI3ZGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTE5NDQ0NDQ0LDE2LjQwMzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWZkZTY2NWZlZjE5NGY5MzkzODU1NGYzNzc5ZWYxNTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzliNzBhMmJmNjNkNDExY2JiNmYxZWM3Y2JhNjFjYjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M5YjcwYTJiZjYzZDQxMWNiYjZmMWVjN2NiYTYxY2IyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgV2FnbmVyICgyLCBQcmF0ZXIsIEhhdXB0YWxsZWUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmZGU2NjVmZWYxOTRmOTM5Mzg1NTRmMzc3OWVmMTU1LnNldENvbnRlbnQoaHRtbF9jOWI3MGEyYmY2M2Q0MTFjYmI2ZjFlYzdjYmE2MWNiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBjMDkwYTllZjUzNTRjNDM4YmYxZmU4MTNhNDRiN2RkLmJpbmRQb3B1cChwb3B1cF85ZmRlNjY1ZmVmMTk0ZjkzOTM4NTU0ZjM3NzllZjE1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI5ODBhYzY4OGYxZjRjNWM4NTc0ZTZlOTA1NjZkNmQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTk2MTExMTExMSwxNi4zNDAyNzc3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81MmQ5OGFiZDJjMmI0MWZiOWZiNDM0N2RhOWVmZjYwNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3OGUzNzM2YTNjNjRhNjVhNDlhNzk4YmRlNDFlYzk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlYTM0YTNhZmI2ODRlMTdhYjJjMWU5Y2MxOTZhZDBiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZWEzNGEzYWZiNjg0ZTE3YWIyYzFlOWNjMTk2YWQwYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2Viw6R1ZGU6IENhZsOpIFdlc3RlbmQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc4ZTM3MzZhM2M2NGE2NWE0OWE3OThiZGU0MWVjOTUuc2V0Q29udGVudChodG1sXzFlYTM0YTNhZmI2ODRlMTdhYjJjMWU5Y2MxOTZhZDBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjk4MGFjNjg4ZjFmNGM1Yzg1NzRlNmU5MDU2NmQ2ZDQuYmluZFBvcHVwKHBvcHVwXzk3OGUzNzM2YTNjNjRhNjVhNDlhNzk4YmRlNDFlYzk1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2U0OGNkNmFkNDk0NGUzNjhmYWVjMWIxM2IyZjE5MjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xOTg4ODg4ODg5LDE2LjM1MjIyMjIyMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGU0OTlhMmJlY2RlNGQwYjlmYTA4OTE2NDY3YzBmNTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDUzZDI1ZDg3NDRjNDQwNTg2Y2QxMzQ3MDgzMmY2NGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ1M2QyNWQ4NzQ0YzQ0MDU4NmNkMTM0NzA4MzJmNjRhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgV2VzdG1pbnN0ZXI8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGU0OTlhMmJlY2RlNGQwYjlmYTA4OTE2NDY3YzBmNTQuc2V0Q29udGVudChodG1sXzQ1M2QyNWQ4NzQ0YzQ0MDU4NmNkMTM0NzA4MzJmNjRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2U0OGNkNmFkNDk0NGUzNjhmYWVjMWIxM2IyZjE5MjIuYmluZFBvcHVwKHBvcHVwXzBlNDk5YTJiZWNkZTRkMGI5ZmEwODkxNjQ2N2MwZjU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGNlNTlkOWJiYWZiNDQ1ODlkOTc2ZWIyYmEyOWRhMTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTQxNjY2NjY3LDE2LjM1MzA1NTU1NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDhkNzgwODgzNmRjNDY5ODg0YWNkMjU3ZTNkYzE5OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJkYWU3NjY5NGQwNDU5OWI4NzYzZjk2ODE3Y2IwODYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiZGFlNzY2OTRkMDQ1OTliODc2M2Y5NjgxN2NiMDg2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgV2llbjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOGQ3ODA4ODM2ZGM0Njk4ODRhY2QyNTdlM2RjMTk5YS5zZXRDb250ZW50KGh0bWxfNGJkYWU3NjY5NGQwNDU5OWI4NzYzZjk2ODE3Y2IwODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84Y2U1OWQ5YmJhZmI0NDU4OWQ5NzZlYjJiYTI5ZGExNy5iaW5kUG9wdXAocG9wdXBfMDhkNzgwODgzNmRjNDY5ODg0YWNkMjU3ZTNkYzE5OWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYmQ4Y2M5NzcyNDg0MjJkODNmMTE1Zjk2MWE1YWU5YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIwNzc3Nzc3NzgsMTYuMzc4NjExMTExMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzA0NGZkM2M5Njc0NzFhOTllZDI4MTYzMzcwMWJiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2RlOWMzNjUxNjA0N2QzYjYzZTViNTMyNTdiYTI1YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjNkZTljMzY1MTYwNDdkM2I2M2U1YjUzMjU3YmEyNWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBXaW5kaGFhZzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzA0NGZkM2M5Njc0NzFhOTllZDI4MTYzMzcwMWJiZi5zZXRDb250ZW50KGh0bWxfYjNkZTljMzY1MTYwNDdkM2I2M2U1YjUzMjU3YmEyNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYmQ4Y2M5NzcyNDg0MjJkODNmMTE1Zjk2MWE1YWU5Yy5iaW5kUG9wdXAocG9wdXBfOTMwNDRmZDNjOTY3NDcxYTk5ZWQyODE2MzM3MDFiYmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZGY5MzkwMzBjMjA0Mzk2OWY3OGMxMDYzY2NiYWUxZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjE5MTY2NjY2NjcsMTYuMzY2OTQ0NDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTJkOThhYmQyYzJiNDFmYjlmYjQzNDdkYTllZmY2MDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzBjZDYyNjFkOGE0NGU0YjQxZGMxOTI1MTFjNTBmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzQxYzZhMWQ3ZmI0YzE0OGNjNGNjYTBhYzIwMWVmNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDM0MWM2YTFkN2ZiNGMxNDhjYzRjY2EwYWMyMDFlZjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlYsOkdWRlOiBDYWbDqSBXb3J0bmVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjMGNkNjI2MWQ4YTQ0ZTRiNDFkYzE5MjUxMWM1MGZkLnNldENvbnRlbnQoaHRtbF9kMzQxYzZhMWQ3ZmI0YzE0OGNjNGNjYTBhYzIwMWVmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NkZjkzOTAzMGMyMDQzOTY5Zjc4YzEwNjNjY2JhZTFkLmJpbmRQb3B1cChwb3B1cF8zYzBjZDYyNjFkOGE0NGU0YjQxZGMxOTI1MTFjNTBmZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlhYTc4NTI3MzVkYzRjODNhZTM1MWYwYjU3OTY0YTI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA1Mjc3Nzc3OCwxNi4zOTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGNiOWE3NjllZTU4NGI3NDlmZDQ3NjM5NjIxZmQ0MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNiM2UyYmJlMzhjNGI5OTlhMzVkNWRlMzcxMGJlYTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JjYjNlMmJiZTM4YzRiOTk5YTM1ZDVkZTM3MTBiZWE2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHZWLDpHVkZTogQ2Fmw6kgWmFydGw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGNiOWE3NjllZTU4NGI3NDlmZDQ3NjM5NjIxZmQ0MDkuc2V0Q29udGVudChodG1sX2JjYjNlMmJiZTM4YzRiOTk5YTM1ZDVkZTM3MTBiZWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWFhNzg1MjczNWRjNGM4M2FlMzUxZjBiNTc5NjRhMjYuYmluZFBvcHVwKHBvcHVwXzhjYjlhNzY5ZWU1ODRiNzQ5ZmQ0NzYzOTYyMWZkNDA5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzc2MGRkMWJlNDIxNDg3ZDlhZDI0NjM0YTRkMDAyNmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTgwNTU1NTU2LDE2LjM5ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzk0ZTEzNDQ3ZjM5NGJkMmEwMDk3MDVjMTA0ZjZhNzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWE0N2IxNjExY2I5NDdhMjk2MDdmYjRjNmYwZDY3ZWQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFhNDdiMTYxMWNiOTQ3YTI5NjA3ZmI0YzZmMGQ2N2VkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBDYWxhZmF0aWRlbmttYWw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk0ZTEzNDQ3ZjM5NGJkMmEwMDk3MDVjMTA0ZjZhNzEuc2V0Q29udGVudChodG1sXzFhNDdiMTYxMWNiOTQ3YTI5NjA3ZmI0YzZmMGQ2N2VkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzc2MGRkMWJlNDIxNDg3ZDlhZDI0NjM0YTRkMDAyNmYuYmluZFBvcHVwKHBvcHVwX2M5NGUxMzQ0N2YzOTRiZDJhMDA5NzA1YzEwNGY2YTcxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGM5MzNkNmMxNTkwNDRhY2JiNThmNmY1YTdlZWM1MDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yMTU4MzMzMzMzLDE2LjM5OTQ0NDQ0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTliN2E0ZDA3MDcwNDIxYjk4YmNlMzBmMTZjZjgyN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTZjM2M4NGU1ZDg3NGU0YTk5NDEyZDljMmM2NTE1ZWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E2YzNjODRlNWQ4NzRlNGE5OTQxMmQ5YzJjNjUxNWVmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb25zdGlnZXM6IENhbGFmYXRpcyBSaW5nZWxzcGllbDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWI3YTRkMDcwNzA0MjFiOThiY2UzMGYxNmNmODI3ZC5zZXRDb250ZW50KGh0bWxfYTZjM2M4NGU1ZDg3NGU0YTk5NDEyZDljMmM2NTE1ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YzkzM2Q2YzE1OTA0NGFjYmI1OGY2ZjVhN2VlYzUwMi5iaW5kUG9wdXAocG9wdXBfMTliN2E0ZDA3MDcwNDIxYjk4YmNlMzBmMTZjZjgyN2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZDgyMDgzZTc5YTA0N2IzOWUzM2EzNGVkYmI0ZmZlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjIxLDE2LjM2MDgzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyZDk4YWJkMmMyYjQxZmI5ZmI0MzQ3ZGE5ZWZmNjA0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ1M2ZmZmY3ODA0NGE3N2FjZmJmMDM4ZmFiZjg0OTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDkyMjcyMWExY2M0NDA5NjkxNmM2MGNhYzJjYTU2MjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ5MjI3MjFhMWNjNDQwOTY5MTZjNjBjYWMyY2E1NjI1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEZW5rbWFsOiBDYWxkZXLDs25iw7xzdGU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQ1M2ZmZmY3ODA0NGE3N2FjZmJmMDM4ZmFiZjg0OTYuc2V0Q29udGVudChodG1sXzQ5MjI3MjFhMWNjNDQwOTY5MTZjNjBjYWMyY2E1NjI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Q4MjA4M2U3OWEwNDdiMzllMzNhMzRlZGJiNGZmZTYuYmluZFBvcHVwKHBv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment